C语言中关于字符数组输入,scanf为什么没执行

2024-12-05 07:27:31
推荐回答(3个)
回答(1):

这种情况通常发生在前面已经有了输入语句,而当前的scanf是在接收字符(即用%c控制输入)时。由于前面的输入语句(不一定是scanf)把最后输入的'\n'遗留在了输入缓冲区,而当前的scanf("%c",...);又会把'\n'当一个字符接收,又由于scanf在%c控制下只接收一个字符,所以就不能接收正式输入的字符了。解决这一问题的最简单办法是在接收字符的scanf的控制符"%c"中的%前加一个空格写成" %c",把前一次输入遗留在输入缓冲区里的所有广义空格(' '、'\t'、'\n'等)都吸收掉。在接收字符的scanf前加getchar()等的办法其实是有漏洞的——当缓冲区里只遗留了一个广义字符时可正常工作,若多于一个则同样出错。

回答(2):

这个算是比较典型的错误的
用scanf来接收字符串,最后的回车符不会被接收,留在缓冲区,下一次再用scanf时,从回车符开始接收,所以ch接收到的字符是回车符,解决方法是,在scanf("%c",&ch);上面加上一条语句:getchar();修改后的代码类似如下:
......
printf("请输入要查找的字符:");
getchar(); //加上这条语句,消耗缓冲区的回车符。
scanf("%c",&ch);
......

回答(3):

连续的scanf要小心,因为你输入的时候按下回车之后,后面就会附加换行,会直接导致你后面那个scanf读到的是换行符而不是你要的结果,要解决方法很多,比如在第二次scanf之前加一行fflush(stdin);来清除缓冲区。