2015-11-09 4 views
1

Я написал следующий код (это caclulator, который получает 1 из 3 операторов (+/-/$) и 2 натуральных числа (a, b) и calcultes (a op b) (в размере $ б определяется как а + (а + 1) + ... + (б-1) + б для < = Ь и а> Ь оно не определено):Программа печатается поздно (c)

#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) она печатает строки, которые она должна была напечатать ранее (с правильным результатом). Почему это происходит? Я исправлю это? FYI Я использую eclipse Juno с компилятором minGW.

+0

Вопрос: Вы уверены, что хотите '' $ '', а не' '&''? –

+1

@Sourav, основанный на том, что он сказал, что мне кажется, что это не так, и здесь (+/-/&), который должен быть (+/-/$) –

+0

@terencehill правильный, он должен быть $, конечно. .. будет отредактирован сразу – noamgot

ответ

0

Вывод строки буферизирован. wline в конце любой распечатки. Или явно очистите буфер, используя fflush(stdout);

По какой-то причине многие программисты C любят печатать символы новой строки в начале каждой распечатки. Мой совет был бы не так. Просто поместите символ новой строки в конце каждой распечатки, и вы сэкономите себе много неприятностей:

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

Вы можете добавить «\ п» в конце операторов печати, а не в начале : буферы не могут быть сброшены и будут задерживаться из-за этого.

Смежные вопросы