0

そのため、ユーザーが新しい行を含め、コマンドウィンドウに好きなだけ入力できるようにする必要があることに取り組んでおり、CTRL + D(EOF文字)を押した後、すべてを印刷できるはずです。タイプされています。

新しい行ごとにそれを行う方法を理解することができます。

#include <stdio.h>

int main() 
{
  int C;

  C = getc(stdin);

  while(C != EOF)
  {
    putc(C, stdout);
    C = getc(stdin);
  }

  return 0;
}

また、getc と putc しか使用できません。最終的には、ユーザーが好きなだけ入力できるようにし、コマンドで送信するフラグに応じて、getopt を使用して入力を変更します。

編集:私の質問を追加するのを忘れてすみません。私ができるようにしたいのは、ユーザーがすべての入力を入力するのを待ってから、行ごとではなく、すべてを印刷することです。どうすればこれを行うことができますか。

4

2 に答える 2

3

ユーザーの入力をバッファリングする何らかの方法が必要になります ( Ctrl+を押す前に小説全体を入力する可能性があるためD)。

これを行う方法の例を次に示します (1 文字ずつ読み取るのは非常に遅く、 を使用printfすると埋め込まれた NUL が処理されないことに注意してください。そのため、代わりに「実際の」コードでreadandを使用することをお勧めします)。write

size_t bufsize = 1024; // starting size
char *buf = malloc(bufsize);
off_t i = 0;
char c;

while((c = getc(stdin)) != EOF) {
    buf[i++] = c;
    if(i == bufsize) {
        bufsize *= 2; // double buffer size to avoid constant reallocation
        buf = realloc(buf, bufsize);
        if(!buf) {
            fprintf(stderr, "YOU TYPED TOO MUCH\n");
            exit(-1);
        }
    }
}

buf[i++] = 0;
printf("%s", buf);
于 2013-02-10T00:10:52.247 に答える
0

termios の使用について調べましたか? (termios.h) stdin を非正規および非エコー モードに設定すると、制御文字を含む、押されたすべてのキーをキャッチできます。

http://www.gnu.org/software/libc/manual/html_node/Noncanon-Example.html

于 2013-02-10T00:05:20.577 に答える