0

私は C プログラミングの初心者で、Java のバックグラウンドを持っています。次のコードでは、while ループで入力を 10 回入力しなければならないのに、10 回すべての入力が表示されるのはなぜだろうと思っていました。何かを一度入力して、すぐに表示しようとしています。次に、他の入力を続けて入力します。

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


main(){

print(PROGRAM_INFO); //prints program name and author
print(PROMPT);

char input [100]; //array to hold input from user
int isActive = 1; //1 continue shell, 0 terminate shell
int count = 0;

while (isActive == 1 && count < 10){
    print(PROMPT);
    ++count;
    scanf("%s", input);
    print(input);


}


}
4

6 に答える 6

5

fflush(stdout)それぞれの後にフラッシュしてみてくださいprint(input)

于 2009-09-20T03:51:56.150 に答える
1

プリントに「\n」文字を入れてみてください。ストリームはフラッシュされていません。

于 2009-09-20T03:51:28.210 に答える
1

最後の印刷ステートメントの後、おそらく fflush(stdout); を呼び出すことができます。stdout を画面にフラッシュします。

于 2009-09-20T03:51:35.700 に答える
1

STDOUT をフラッシュする必要があります。fflush(STDOUT)印刷後に追加されます。

于 2009-09-20T03:51:36.067 に答える
1

デフォルトでは、入力/出力はバッファリングされます。つまり、入力および出力バイトは、ストリームに表示される前にバイト配列に格納されます。
システムの BUFSIZ は一般に 1024 の倍数です。printf はライン バッファリングされますが、バッファは改行が検出されると自動的にフラッシュされます。
fflush(stdout)は、バッファリングされたデータを出力ストリーム (この場合は stdout) にフラッシュします。setvbuf()関数を使用してバッファ処理を制御できます

于 2009-09-20T04:14:07.587 に答える
0

あなたprintはコピー/貼り付けエラーですよね?である必要がありますprintf

また、ユーザー文字列を printf の形式で直接出力するべきではありません。
ユーザーのタイプを想像してみてください"%d%f%s\a%c"...

最善の方法は

printf("%s\n", input);

フォーマットに '\n' が含まれている場合fflush(stdout);、stdout はデフォルトで行バッファリングされており、'\n' は単独で実行されるため、その必要はありません。

また、ユーザーが入力すると、"%d%f%s\a%c"それが印刷されます。


最善の方法は

puts(input);

puts は出力に '\n' を追加し、フォーマット文字列に問題はありません。

于 2009-09-20T13:35:20.000 に答える