在完成命令之前,printf打印所有功能?

时间:2013-01-08 16:48:15

标签: c printf

我这里有一段代码:

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 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

从输入中读取字符时,您没有推进指针f。您始终在位置0覆盖chatacter,最后位置0包含\0

答案 2 :(得分:0)

尝试将\ n放在最后

 printf("First Entry?\n");
 printf("Last Entry?\n");

答案 3 :(得分:0)

{st}中的getchar读取。如果先前输入中有任何换行符,则可能导致问题。 就这么说,

fflush(stdin);

之后

printf("First Entry?");