尝试理解 c 中的 for 循环和 getchar()
try to understand for loops and getchar() in c
我是 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);
}
我明白了
value of a: 0 Enter character: m Character entered: m value of a: 1
Enter character: Character entered:
value of a: 2 Enter character: a Character entered: a value of a: 3
Enter character: Character entered:
它以某种方式跳过了 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
读取并在每个字母后 returns 它。
您还应注意错误或文件结束条件。
这是一个更强大的版本:
#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 之前键入两个字符,则它们的读法与分别键入时相同。同样,这可能是好是坏,取决于你想要发生什么。但是你应该问问自己你想要发生什么。
我是 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);
}
我明白了
value of a: 0 Enter character: m Character entered: m value of a: 1 Enter character: Character entered:
value of a: 2 Enter character: a Character entered: a value of a: 3 Enter character: Character entered:
它以某种方式跳过了 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
读取并在每个字母后 returns 它。
您还应注意错误或文件结束条件。
这是一个更强大的版本:
#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 之前键入两个字符,则它们的读法与分别键入时相同。同样,这可能是好是坏,取决于你想要发生什么。但是你应该问问自己你想要发生什么。