尝试理解 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 之前键入两个字符,则它们的读法与分别键入时相同。同样,这可能是好是坏,取决于你想要发生什么。但是你应该问问自己你想要发生什么。