为什么这个循环不会终止? (C语言)

时间:2014-02-07 12:46:40

标签: c while-loop getchar

我正在编写一个代码来保存两个数组a和b中的输入。

#include <stdio.h>

int tell(int *a, int *b)
{
  /* I don't know what this function does */
  return 0;
}

int main(int argc, char **argv)
{
  int i, j, a[128], b[128];

  i = 0;
  while ((a[i] = getchar()) != 10) { // 10 represents enter key
    i++;
  }
  printf("here");

  j = 0;
  while ((b[j] = getchar()) != 10) {
    j++;
    printf("here2\n");
  }

  printf("here3");
  fflush(stdout);

  if (i < j) {
    printf("here4");
    printf("%d\n", tell(a, b));
  } else {
    printf("here4");
    printf("%d\n", tell(b, a));
  }

  return 0;
}

当我输入时:

hello
hi

输出是:

here
here2 
here2

为什么“here3”不打印? 问题不仅仅是在这里打印3。我想执行更多代码并且它没有发生

3 个答案:

答案 0 :(得分:3)

不要这样做。

使用scanf()fgets()getline()从输入中读取字符串。

另外,当你的意思是10时,永远不要写\n,这只是不一样的事情而前者更糟糕。还要意识到getchar()可以返回EOF,这不适合char并会对您的程序造成严重破坏。

那就是说,我无法发现一个错误来解释你所声称的行为。无论如何重写它。

答案 1 :(得分:0)

printf函数会在看到\n时刷新输出缓冲区。尝试:

printf("here3\n");

你也可以使用:

printf("here3");
fflush(stdout);

答案 2 :(得分:0)

第二个循环为第二个字符串中的每个字符打印here2一次,因此here2打印两次。

stdout是行缓冲的,这意味着在您打印换行符或here3之前,fflush(stdout)将不可见。