我正在使用“GCC C编译器”作为我的编译器,我有一个程序,使用“fgets”将输入作为stdin接收,然后由于某些输入,我使用多个printf来打印结果。
然而,我的问题是我希望输出发生在fgets之间,它们确实存在于我的代码中,但是在我从main返回并且程序结束之前,当前没有任何内容打印。
输入代码:
int get_inputs(char** operands, char* delim) {
if (fgets(input,sizeof(input),stdin) == NULL) return 0; /* End of file */
/* Parse with StringParse, returns number of substrings */
return StringParse(input, operands, delim, 2, "+-*/^ ");
}
输出代码:(在While(1)循环中)
count = get_inputs(operands, delim);
switch(count) {
case 0:
printf("User Terminated\n");
return 0; /* User Terminated */
case 1: /* Single Value Input */
accumulator = atof(operands[0]);
printf("%g\n", accumulator);
break;
case 2:
if(strlen(operands[0]) == 0) { /* Operation First use Accumulator as input */
accumulator = doMath(accumulator, atof(operands[1]), delim[0]);
printf("%g\n", accumulator);
}
else { /* Two new values, replace Accumulator */
accumulator = doMath(atof(operands[0]), atof(operands[1]), delim[0]);
printf("%g\n", accumulator);
}
break;
default:
printf("Invalid Input\n"); /* Invalid Input or Error */
break;
}
其他每个函数都只是进行数学或字符串解析。
提前致谢!
答案 0 :(得分:4)
这是因为stdout被缓冲以提高性能。数据仅以较大的块推送到输出管道。要强制在某一点发生,请添加
fflush(stdout);
在写入stdout的代码中。