2

シェルのようなインターフェースを備えた小さなプログラムを書いています。私のuiは:

void cli_ui(void){
    bool loop = true ;
    char response[CHARSIZE];
    while (loop) {
    puts("cofre>");
    fgets(response, CHARSIZE, stdin);
    ....
    }

}

これに関する私の問題は、プロンプトの後に入力が読み取られることです。

cofre>
# input is expected here

私が欲しいのは:

cofre> #input is expected here

これをどのように行いますか?

4

3 に答える 3

4

問題は、puts() が文字列を書き込み、末尾の null を改行に置き換えることで、改行が発生することです。

答えは、fputs() を使用することです。少し驚くべきことに、fputs() は puts() と同じことを行うのではなく、末尾に改行がない文字列を出力します。そう。

fputs("cofre>", stdout);

printf() を使用することをお勧めする人もいますが、これは間違いです。fgets() を使用する場合は、fputs() とペアにする必要があります。利点は、標準入力と標準出力を明示的に使用しているため、スクリプトから REPL を駆動できることです。

一部の実装では、fgets() と fputs() がバッファリングされる場合があり、それは望ましいことではないことに注意してください。場合によっては、代わりに cputs/cgets() などの低レベル I/O を使用する必要があります。これらは非標準です。

于 2014-03-14T09:12:50.960 に答える