如题所述
我个人理解它会先读取到一个字符a,而你接收时要接收整形的,那么他会把字符a强制转化十定制整形数92,所以while的条件成立就成了死循环,而指针始终指的是第一个字符a,不会指向第二个a,更不会识别到回车。
温馨提示:答案为网友推荐,仅供参考
第1个回答 2020-01-31
你这个问题,随便搜下都有答案的,,最好的答案就是再看一次书..
while(表达式)括号里的表达式可以是c任何合法的式子..
只要为真(什么是真,有值就是真,非0就是真,,-1也是真,411也是真..)就循环..不然退出循环
问题补充:
从头到尾,每个字符都拿出来用一下,可以这么说
就是因为是字符串,最后有个字符串结束标志的'\0',这个就是假,循环到这个就结束循环了,,
补充给你了。。!!麻烦
while(表达式)括号里的表达式可以是c任何合法的式子..
只要为真(什么是真,有值就是真,非0就是真,,-1也是真,411也是真..)就循环..不然退出循环
问题补充:
从头到尾,每个字符都拿出来用一下,可以这么说
就是因为是字符串,最后有个字符串结束标志的'\0',这个就是假,循环到这个就结束循环了,,
补充给你了。。!!麻烦
第2个回答 2020-01-28
#include
int
main(int
argc,
char
**argv)
{
int
status;
int
code;
while
(scanf("%d",
&code)!=1||
(code
<
1
||
code
>
5))
{
printf("Enter
an
integer
from
1
to
5,
please.\n");
//a没有被读取仍旧留在缓冲区
scanf("%c",
&code);
}
}
我在解释一下,昨天没说清楚。就算你只输入了一个a,这个时候scanf扫描缓冲区,发现不是整形,所以直接退出,指针仍旧指在a的位置,下次scanf调用的时候,指针仍旧指在a这里,所以scanf不等待你输入,但是a不是整数,又直接退出了,缓冲区指针仍旧指在a这里。这样会一直循环到死。scanf("%c",
&code);这一句就是在你这次输入不是整形的时候把缓冲区里的数据作为字符读取,这样指针就向前移了,这次应该比较清楚了
int
main(int
argc,
char
**argv)
{
int
status;
int
code;
while
(scanf("%d",
&code)!=1||
(code
<
1
||
code
>
5))
{
printf("Enter
an
integer
from
1
to
5,
please.\n");
//a没有被读取仍旧留在缓冲区
scanf("%c",
&code);
}
}
我在解释一下,昨天没说清楚。就算你只输入了一个a,这个时候scanf扫描缓冲区,发现不是整形,所以直接退出,指针仍旧指在a的位置,下次scanf调用的时候,指针仍旧指在a这里,所以scanf不等待你输入,但是a不是整数,又直接退出了,缓冲区指针仍旧指在a这里。这样会一直循环到死。scanf("%c",
&code);这一句就是在你这次输入不是整形的时候把缓冲区里的数据作为字符读取,这样指针就向前移了,这次应该比较清楚了