2013-01-08 34 views
1

我有一段代码在这里: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); 
} 

当我运行该代码时,输​​出I在控制台得到的是:

First Entry? 
Last Entry? 

为什么跳过了while循环和打印一切在执行它们之前?

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

在循环开始之前添加一个随机的getchar()修复了问题,因为'\ n'被读入到那里。

+0

有没有在这个网站没有代码格式化...... – m0skit0

+2

它应该很容易正确地缩进代码;只需将您的代码复制并粘贴到编辑器中,选中它,然后点击** {} **按钮。 –

+0

它已经被其他人格式化,你只是变得更糟了 –

回答

0

getchar从STD读取。如果有任何之前输入的换行符,会导致问题。 只要把,

fflush(stdin);

printf("First Entry?"); 
+0

还有问题吗? –

+0

是的,我加了fflush,但我仍然遇到同样的问题 – Joe

+0

@Joe:你在哪里添加的?第一次循环之前? –

2

这是印刷他们,这只是他们是空的字符串! (提示:fl不会改变 - 我想用f最后一个循环是一个错字!)

+0

对不起,我不认为我解释得很好。 printf(“First entry”)之后,我应该有时间输入内容,但是在运行程序时,它会跳过该内容并在第一次输入后直接打印上次输入。 我总是忘记f ++循环,现在我已经修复了一些代码。 – Joe

+0

这似乎并没有改变任何不幸的事情。这似乎是应该解决这个问题,由于某种原因,它不是 – Joe

+0

@Joe,对不起,'fflush'的想法是无稽之谈 - 它只适用于输出流,你需要手动调用'getchar()'去除任何冗余字符(在这种情况下,为你工作,因为有一个流浪'\ n') – Nim

0

而从输入读取字符你是不是推进指针f。您在位置覆盖chatacter 0所有的时间和结束位置0包含\0

+0

是的抱歉,没有妥善检查代码。不幸的是,解决这个问题并不能解决我的问题。 – Joe

0

尝试把一个\ n在最后

printf("First Entry?\n"); 
printf("Last Entry?\n"); 
相关问题