C Консольный вывод не непрерывен, ждет завершения программы

Я использую «GCC C Compiler» в качестве своего компилятора, и у меня есть программа, которая принимает входные данные как стандартный ввод с помощью «fgets», а затем я использую несколько 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;
}

Любая другая функция просто выполняет математические операции или разбор строк.

Заранее спасибо!


person Joe    schedule 20.01.2013    source источник


Ответы (1)


Это связано с тем, что стандартный вывод буферизуется для повышения производительности. Данные передаются в выходной канал большими порциями. Чтобы заставить это произойти в определенный момент, добавьте

fflush(stdout);

В коде, который пишет в stdout.

person John Colanduoni    schedule 20.01.2013