程序打印很晚(c)

时间:2015-11-09 11:06:41

标签: c eclipse

我编写了以下代码(它是一个caclulator,它获取3个运算符中的一个(+ / - / $)和2个自然数(a,b)和calcultes(a op b)($ b被定义为a +(a + 1)+ ... +(b-1)+ b表示< = b而a> b表示未定义):

#include <stdio.h>
#include <stdlib.h>

int main() {

printf("Please choose an operation (+/-/$): ");
char op;
scanf("%c", &op);
while (op != '+' && op != '-' && op != '$') {
    printf("\nInvalid operation. Please choose again: ");
    scanf("%c", &op);
}
int a;
int b;
char term;
printf("\nPlease enter the first operand: ");
int scanCheck = scanf("%d%c", &a, &term);
while (scanCheck != 2 || term != '\n' || a < 0) {
    printf("\nInvalid number\n. Please enter the first operand: ");
    scanCheck = scanf("%d%c", &a, &term);
}
printf("\nPlease enter the second operand: ");
scanCheck = scanf("%d%c", &b, &term);
while (scanCheck != 2 || term != '\n' || b < 0) {
    printf("\nInvalid number\n. Please enter the first operand: ");
    scanCheck = scanf("%d%c", &b, &term);
}

if (op == '$' && a > b)
    printf("\nThe result is: Not Valid");

int result;
switch (op) {
case '+':
    result = a + b;
    break;
case '-':
    result = a - b;
    break;
case '$':
    result = 0;
    while (a <= b) {
        result += a;
        a++;
    }
    break;
}
printf("\nThe result is: %d", result);
return 0;
}

我的问题是,当我运行程序时,它什么都不打印。但是,在给程序输入一个输入(例如+,3,4)之后,它会打印出之前应该打印的行(具有正确的结果)。为什么会这样?我怎样才能解决这个问题?仅供参考我使用eclipse Juno和minGW编译器。

2 个答案:

答案 0 :(得分:0)

输出是行缓冲的。在任何打印输出结束时添加换行符。或者使用fflush(stdout);

显式刷新缓冲区

由于某些原因,许多C程序员喜欢在每次打印输出开始时打印换行符。我的建议是不要这样做。只需将换行符放在每个打印输出的末尾,您就可以省去很多麻烦:

printf("The result is: %d\n", result);

答案 1 :(得分:0)

您可能想要添加&#39; \ n&#39;在打印语句的末尾而不是在开头:缓冲区可能无法刷新,因此会延迟。