while循环中Getchar()跳过首个扫描输入值的问题如何解决
问题成因
- 你在循环判断条件里已经用
scanf("%c", &c)读取了第一个输入字符,但是没有对这个字符做任何处理,直接在循环体内又调用了一次getchar()读取下一个字符,这就导致第一个输入的字符被直接跳过。 - 此外
scanf的返回值是成功读取的变量个数,不是读取到的字符值,你原来写的判断条件scanf("%c", &c) != '='逻辑完全错误:scanf成功读入1个字符时返回值是1,永远不可能等于字符'='的ASCII值,所以这个循环终止条件根本不会生效。
修复方案
你可以直接用getchar()处理所有读取逻辑,不需要混用scanf,完全符合你逐个读取、不使用数组和字符串的要求:
int main () { char c; // 每次读取一个字符,直到读到=就终止循环 while((c = getchar()) != '=') { printf("print "); putchar(c); } return 0; }
效果验证
输入a=时,程序会先读取字符a,判断不是=后输出print a,下一次读取到=时直接终止循环,符合你的预期需求。
内容的提问来源于stack exchange,提问作者caccia
相关产品推荐
相关产品推荐

