我是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()
,为什么?
解决方案感谢您的评论,它可以正常工作:
int i;
for( a = 0; a < 4; a++ )
{
printf("Enter character: ");
c = getchar();
while ((i = getchar()) != '\n' && i != EOF)
printf("Character entered: ");
putchar(c);
}
正如注释中指出的那样,该ENTER
键的结果是换行符(\n
),并getchar
在每个字母之后读取并返回它。您还应该注意错误或文件结束条件。
这是一个更强大的版本:
#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: ");
do {
c = getchar();
} while(c == '\n'); // ignore newlines
if(c == EOF) break; // end of input or error
printf("Character entered: %c\n",c);
}
return(0);
}
这具有(或不具有)额外的好处,即重复的ENTER键将被忽略。另外,如果您在ENTER之前键入两个字符,则它们的读取方式将与分别键入时的读取方式相同。再次说明,这可能好坏,这取决于您要发生的事情。但是,您应该问自己自己想做什么。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句