2

「GCC C Compiler」をコンパイラとして使用しており、「fgets」を使用して標準入力として入力を受け取るプログラムがあり、特定の入力による結果を出力するために複数のprintfを使用しています。

ただし、私の問題は、fgets 間で出力を発生させたいことです。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;
}

他のすべての関数は、数学または文字列の解析を行っているだけです。

前もって感謝します!

4

1 に答える 1

4

これは、パフォーマンスを向上させるためにstdoutがバッファリングされるためです。データは、より大きなチャンクでのみ出力パイプにプッシュされます。これを特定の時点で強制的に発生させるには、次を追加します

fflush(stdout);

stdoutに書き込んでいるコード内。

于 2013-01-20T23:21:15.833 に答える