c语言 scanf(%d,a);输入字符为什么会进入死循环?

如题所述

研究过scanf函数是怎样接收整型数字的吗?它要跳过所有非数字的字符专接收数字。那么输入了字符它就一直留在输入缓冲区;只要缓冲区有字符,scanf就要去读,一读不是数字,它就跳过,试图等到输入缓冲区没有字符了才等待你输入……如此反复,当然就“死循环”了。为了验证,你在printf(you lose!!n);后加一句getchar();,把缓冲区里的那个非数字字符接收掉,看看还会不会是“死循环”?
温馨提示:内容为网友见解,仅供参考
无其他回答

c语言 scanf(%d,a);输入字符为什么会进入死循环?
那么输入了字符它就一直留在输入缓冲区;只要缓冲区有字符,scanf就要去读,一读不是数字,它就跳过,试图等到输入缓冲区没有字符了才等待你输入……如此反复,当然就“死循环”了。为了验证,你在printf(you lose!!n);后加一句getchar();,把缓冲区里的那个非数字字符接收掉,看看还会不会是“死循...

C语言这个 代码 为什么 输入浮点型 和 整形 就会 进入死循环啊
这里scanf会检测用户输入的是否是整型,如果是整型,则从缓冲区读取赋给a,如果不是则不会赋值给a,则用户输入的东西 就会留在缓冲区中,这样就造成了下次scanf读取时,由于缓冲区中有东西存在,它会直接从缓冲区中读取,结果还是不符合,还是留在 缓冲区,就这样会一直下去。所以造成了死循环。

关于C语言的死循环问题。
原因这样的:你输入的所有原始数据保存在一个缓冲区内。scanf函数调用后会检查缓冲区是否有字符,如果没有则暂停当前程序,然后让你输入,只有当输入回车的时候程序才会继续执行scanf。scanf开始读取,%d的时候它只读取数字并且从缓冲区中删除这个数字,如果读取到非数字的时候就跳过不删除缓冲区中的数据,所...

这个C语言程序输入字母会出现死循环,为什么?怎么办?
输入数据后,判断一下scanf函数的返回状态,返回0则读取失败。失败的原因有很多可能,比如你的这道例子,指定输入数字,但是却输入了字符,就会返回0,而且scanf不会有动作。由于num没有初始化,所以它是一个垃圾值,这就是死循环的原因。另外,如果想要输入指定字符退出的话,在多加一个判断即可。

c语言中定义了int a;输入时故意输入字母就会死循环 怎么解决?
scanf("%d",&a);如果是在循环中输入,那么一旦出错,就会导致后续均无法输入。为避免这种情况,可以使用判断scanf的返回值来确定输入是否成功。以下是循环输入整数,直到遇到-1退出的代码 while(1){ scanf("%d",&a); if(a == -1) break; printf("%d",a);}在这个程序段执行时,如果...

C语言的问题 为什么这成了死循环?
scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每一个数据域均有数据,并按回车后结束)。① 遇空格、“回车”、“跳格”键。② 遇宽度结束。③ 遇非法输入。所以你输入非整型数据时,都会无限循环。

关于一个c语言出现死循环的问题
但输入字母或符号后,scanf ("%d",a); 就不再能接收值了,因为必须与%d所控制的形式相对。但我认为不管怎么样也会有错误提示input error 的,出现死循环可能是前面scanf接收错误导致的。我建议改为:while (1){ int a,i;printf(" please enter a:\\n");do {i=scanf("%d",&a);getchar();...

为什么输入字符会出现死循环?
由于定义了a是int类型,如果遇到cin不是int类型,则会出现异常,不会赋值给a,使其保持原值 你输入一个超出int类型的值,如5555555555555555555,也会出现上述情况。以下两种方法测试通过 解决方法一:用一char来排除非法字符 include<stdio.h> int main(){ int a;char b;while(1){ scanf("%d",&...

我想问一下这个C语言的顺序表为什么输入有小数点的数就陷入了死循环呢...
简单回答:整个程序都是在输入整数,所以不能输入带小数点的实数。举例说明:scanf("%d", &x);如果输入一个小数 23.54和回车, 则scanf只读掉23,留下 .54和回车 如果再次遇到 scanf("%d", ...)它不会输入新的内容,而是继续读剩下的 .54和回车。由于 .54不是整数,无法读,scanf 语句被...

C scanf不按格式输入的后果
scanf 返回成功读入的个数 ,如果读入整数过程中遇到字符 ,scanf 并不会处理这个字符 ,下次执行 scanf 会遇到同样的字符 ,你这输入字符以后 scanf 返回值为 0 ,陷入死循环 ,而且输入的字符无法得到处理,当然不能再输入

相似回答
大家正在搜