我正在编写一个代码来保存两个数组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。我想执行更多代码并且它没有发生
答案 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)
将不可见。