问题描述
- c语言scanf( )函数的一个问题
-
#include
int main()
{
int s;
while(1)
{
printf("请输入:");
scanf("%d",&s);
printf("%d ",s);
}
/*当给s从键盘接受字母的时候,该循环会出现不同,
原先(正常输入证书的时候)是等待你输入了s过后才
会输出结果,但现在(给s从键盘接受字母的时候)不
需要等待直接死循环下去。
我想请教各位长辈,这是什么原因导致的,怎样才能停
止自动死循环(给s从键盘接受字母的时候),并且,如
何让s从键盘上接收字母的时候,输出相同的字母*/
解决方案
scanf函数从输入流中读取一个数据,其返回值是成功输入的数目,比如说scanf("%d %c",&a,&b),当从键盘键入12 c时,scanf的返回值就是2;
当输入一个与scanf函数中格式转换符不匹配的数据时,scanf就不读取这个数据,而是继续放在输入流(本例中是stdin)中,下一次读取输入流的函数就从这个数据开始读取;
你的例子中,如果输入的是字符,那么与scanf中的格式转换符不匹配,字符放在输入流中,while循环一直进行,下一次scanf读取的还是上一次留在输入流中的字符,再一次不匹配,如此while函数一直执行,scanf并没有成功读取 整数的机会。代码改成如下,便可以避免无限循环的问题:
`#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int s;
while(1)
{
printf("请输入:");
fflush(stdin);//刷新输入流中的数据
if(scanf("%d",&s))
printf("%d ",s);
}
system("pause");
return 0;
}
解决方案二:
scanf("%d"要求输入整形数据不接受字符
解决方案三:
试试下面的代码:
int s = 0;
char c = 0;
while(1)
{
printf("请输入:");
scanf("%d",&s);
scanf("%c",&c);
if(0x10 != c)
{
break;
}
printf("%d rn",s);
}
解决方案四:
你定义的s是整形,证书是数字整形所以没问题,而字母是字符形的,所以出现错误。下面是代码,已验证
#include
int main()
{
char *a;
while(1)
{
printf("请输入:");
scanf("%s",&*a);
printf("%s n",a);
}
}
解决方案五:
楼主scanf中是%d,自然是只能输入整数存储的数据,所以输入字符会出错,如果想输出字符,可以定义char变量,scanf中用%c啊