【发布时间】:2015-10-29 20:42:07
【问题描述】:
我是 C 新手,我正在尝试了解 for 循环的工作原理。
我的代码是这样的
#include <stdio.h>
int main ()
{
int a;
for( a = 0; a < 4; a++ )
{
printf("value of a: %d\n", a);
}
return(0);
}
我得到了我的预期输出,它是 a 值的 4 倍,但是当我这样做时
#include <stdio.h>
int main ()
{
char c;
int a;
for( a = 0; a < 4; a++ )
{
printf("value of a: %d\n", a);
printf("Enter character: ");
c = getchar();
printf("Character entered: ");
putchar(c);
printf("\n");
}
return(0);
}
我明白了
a 的值:0 输入字符:m 输入的字符:m a 的值:1 输入字符:输入的字符:
a 的值:2 输入字符:a 输入的字符:a 的值:3 输入字符:输入的字符:
它以某种方式超过了getChar() 中的两个,为什么?
解决方案 感谢 cmets,让它开始工作:
int i;
for( a = 0; a < 4; a++ )
{
printf("Enter character: ");
c = getchar();
while ((i = getchar()) != '\n' && i != EOF)
printf("Character entered: ");
putchar(c);
}
【问题讨论】:
-
在
getchar之后的行中使用\n。清除它..while(getchar() != '\n');就足够了。 -
char c; 应该是 int c 因为返回的 getchar 是 int。
-
while (getchar() != '\n')... 如果stdin恰好是一个文件或遇到错误,则很好的无限循环。 -
假设我这样运行您的程序:
foo < input.dat并假设 input.dat 为空。getchar会做什么?它将返回EOF,表示发生错误或文件结束。好吧,由于EOF与\n不匹配,循环将无限继续。 -
测试
getchar的返回值EOF,如果遇到就跳出循环。像这样的东西:while ((i = getchar()) != '\n' && i != EOF)。请注意,i必须是int而不是char。