scanf对用户非法输入的处理

# include <stdio.h>

int main(void)
{
int i;
char ch;

scanf("%d",&i);
printf("i = %d\n",i );

while ((ch=getchar()) !='\n')
continue;
int j;
scanf("%d",&j);
printf("j = %d\n",j);

return 0;

}
求大家帮我用注释符 解释每一个语句的用处

第1个回答  2013-10-01
int i; // 变量声明
char ch; //变量声明
scanf("%d",&i); // 用 %d 格式 从标准输入流 读入 一个整数 存入 i
printf("i = %d\n",i ); // 用 %d 格式 输出 i

while ((ch=getchar()) !='\n') continue; 循环地 读去 scanf 输入行 里残余字符 和 Enter 键
int j; // 变量声明, C++ 允许,C 不允许。C 规定,一个程序块中,声明在前,语句在后
scanf("%d",&j); // 用 %d 格式 输入 j
printf("j = %d\n",j); // 用 %d 格式 输出 j
return 0; // 返回 0
===========
如果 从 键盘 拍入
123 789 abc 和 Enter 键
scanf("%d",&i); 读入 123, 残与部分在输入流缓冲区。
while ((ch=getchar()) !='\n') {}; 清除 789 abc 和 Enter 键
键盘 拍入 456 和 Enter 键
scanf("%d",&j); 读入 456追问

我想问一下想学好C语言 推荐一下什么教程 从初级向深入讲的

追答

抱歉,我不知道有什么好教程。学好C语言的关键是自己动手写程序,孰能生巧。写的过程中,遇到什么问题,找一下c/c++资料,和解决方法。精通语法和写好程序是两回事。

本回答被提问者采纳

scanf对用户非法输入的处理
scanf("%d",&i); \/\/ 用 %d 格式 从标准输入流 读入 一个整数 存入 i printf("i = %d\\n",i ); \/\/ 用 %d 格式 输出 i while ((ch=getchar()) !='\\n') continue; 循环地 读去 scanf 输入行 里残余字符 和 Enter 键 int j; \/\/ 变量声明, C++ 允许,C 不允许。

如果用scanf输入用户猜测的数据时,如果用户不小心输入了非法字符
C语言是这样一种语言,它是先假设用户知道要做什么的。 所以,出现你这样的问题,你必须自己手动编码过滤,譬如,要保证输入的数据是数字。那你就得写如下类似的过滤。char bux[MAX] = {0};for (int inx=0; inx!=MAX; ++inx ) {if (buf[inx] < 0x30 || buf[inx] > 0x39){printf("...

关于C语言scanf遇到非法数据的问题?
把scanf("%c",&y);改成scanf(" %c",&y);,即在%前加一个空格,把输入444时遗留在输入缓冲区里的'\\n'吸收掉,就能等你输入数据了。但由于y是char型,无论输入什么都不会是0,所以while循环不会停止。正确改法是在scanf("%c",&y);前加一句fflush(stdin);把输入错了数据从输入缓冲区中...

解决scanf输入int错误
scanf输入int错误以下是一些常见的解决方法和注意事项:1、检查输入格式:在使用scanf函数输入int时,要确保输入的格式符与变量类型匹配。例如,可以使用%d或%i作为输入格式符来输入十进制整数,“%o”来输入八进制整数,“%x”或“%X”来输入十六进制整数等。2、避免缓冲区溢出:当输入的数据长度超出了变量...

scanf函数的问题
错误时候刷新输入流 就可以了 b: printf("输入循环数n:");scanf("%d",&n);if(m<=n||n<=0){ printf("输入非法,请重新输入\\n");fflush(stdin); \/\/刷新输入流 goto b;}

C语言中scanf处理输入数据时,遇到什么情况时该数据认为结束
1.遇到空格,或"回车",或"跳格",例子:scantf("%d%d",&a,&b)如果这样输入:12空格23当对a输入时,录入了12,然后遇到空格,满足条件,停止对a录入,所以a的值为12 2按指定宽度结束,例如"%3d",只取前3列 3遇到非法输入时。例如:scantf("%c%f",&b,&c) 若这样输入:a 123o.26 ...

scanf的用法
scanf("%99[^\\n]", myString); \/\/ 读取一行字符串,包括空格 5.格式控制: 可以使用格式化字符串来指定输入的格式。例如,%d 表示整数,%f 表示浮点数,%c 表示字符,%s 表示字符串等。6.错误处理: 一定要考虑错误处理。如果用户提供了无效的输入,你需要在代码中处理这些情况,以防止程序崩溃或...

关于scanf的用法
具体如下:1、记住一点,scanf认为遇到“非法输入”就结束。2、scanf("%2d%f",&a,&b);中第一个格式控制字符2d的意思是读取2位,作为一个整数输入到给对应的变量a的地址中。输入876,当然只读取前2位87。这是2的作用,后面输入对于2来说,相当于非法输入。3、对于%f,后面输入的是7 543.0,...

scanf对未按指定格式输入的数据如何处理?
如果scanf函数未按指定格式输入,数据是不会存入到变量中去的,变量还会保持原有的数据。因为你的程序中,a没有给初值,所以输出了一个随机值50. 你改一下:int a=0,b; 这样,你看到的就会是一直是0了!你想输入int数据,但输入了一个字符,这个字符会滞留在缓存中,直到缓存被清理。如果你这条...

c语言如何限制非法输入
c语言中大部分自带的方法都有返回值,像scanf方法如果输入正确的话,它会返回一个正整数,所以你可以通过它来判断,如果输入不正确的话它返回是0,你就可以通过这个判断是否为非法输入。scanf()函数有返回值且为int型。 scanf()函数返回的值为:正确按指定格式输入变量的个数;也即能正确接收到值的变量...

相似回答
大家正在搜