void main () {
char f;
do {
scanf("%c",&f);// input a character
printf("%c",f);//output a character
}while(f=='y');
}
任何值都将结束程序,即使yput是结束程序,任何人都能解释我在这个程序上陷入困境的原因吗。。
除了void main()
(main
的返回值应该是int
(和检查scanf
返回的值失败(如果scanf返回0并且没有为f
赋值,那么尝试从未初始化的f
读取值是未定义的行为(之外,您的程序运行良好:
$ echo yyyyyabcd | ./a.out; echo
yyyyya
但是,如果以交互方式输入数据,则可能会输入输入流ynyn
(在每个y
之后点击enter/return(,并且程序在看到第一个换行符时终止。
这是因为当scanf
再次执行时,它正在读取您键入的上一个输入流中留下的空白字符。
最简单的解决方案是在%c
转换说明符之前包含一个空白字符。示例:
scanf(" %c",&f);// input a character
这个命令告诉scanf
跳过前导空白。