1

我这里有一段代码:

Tree *rangeprint(Tree *t) {
  char first[20];
  char last[20];
  int f = 0;
  int l = 0;

  printf("First Entry?\n");

  while(1) {
    first[f] = getchar();
    if(first[f] == '\n') {
      first[f] = '\0';
      break;
    }
    f++;
  }

  printf("Last Entry?\n");

  while(1) {
    last[l] = getchar();
    if(last[l] == '\n') {
      last[l] = '\0';
      break;
    }
    l++;
  }

  printf("%s %s\n", first, last);
}  

当我运行此代码时,我在控制台中得到的输出是:

First Entry?
Last Entry?

为什么它会跳过 while 循环并在执行之前打印所有内容?

更新 - 我将终止条件更改为 'x' 而不是 '\n' 并且确实可以正确打印。

在循环开始之前添加一个随机 getchar() 可以解决问题,因为 '\n' 被读入那里。

4

4 回答 4

2

它正在打印它们,只是它们是空字符串!(提示:fl没有改变 - 我假设最后一个循环使用f是一个错字!)

于 2013-01-08T17:00:49.960 回答
0

f从输入中读取字符时,您没有前进指针。您一直在覆盖位置 0 的 chatacter 并且最终位置 0 包含\0

于 2013-01-08T17:02:43.680 回答
0

尝试在末尾添加 \n

 printf("First Entry?\n");
 printf("Last Entry?\n");
于 2013-01-08T17:09:42.150 回答
0

getcharstd in 读取。如果先前输入中有任何换行符,则可能导致问题。就说吧,

fflush(stdin);

printf("First Entry?");
于 2013-01-08T17:11:08.477 回答