1

次のコードを検討してください:-

#include"stdio.h"

void main()
{
  char ch;
  while((ch=getchar())!=EOF)
  {
    putchar(ch);
  }
}

どのような入力を (文として) 行っても、リターン キーを押した後に繰り返されます。最後に段落全体を取得したい場合はどうすればよいですか? 単一の文字を返すためにしか使用できないputchar()ため、これを使用できますか。putchar()

4

6 に答える 6

2

EOFに収まらないため 、これは機能しませんchar。の適切な戻り値の型は であることに注意してgetchar()くださいint。たとえば、このマニュアルページを参照してください。

一度に行全体を読みたい場合は、fgets()たとえば文字バッファーに使用できます。ただし、あなたが達成したいことを正確に理解しているかどうかはわかりません。

于 2012-12-29T19:07:22.463 に答える
1

ファイルは特殊な EOF (ファイルの終わり) 文字で終わるため、ファイルから読み取るときは EOF を使用する必要があります。入力の終わりを表すには、ここでセンチネルを使用する必要があります。

このプログラムはほとんど意味がなく、どこでも使用できるとは思えません。したがって、要件について再考し、それに応じてロジックを変更してください。

于 2012-12-29T19:04:39.417 に答える
1

char をバッファーに格納してみてください。while ループを終了すると、バッファーが出力されます。このコードを試してください:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    int c;
    char *buf = calloc(1,sizeof(char));
    int len;
    while ((c=getchar())!=EOF) {
        len = strlen(buf);
        buf = realloc(buf, len+1);
        buf[len] = (char) c;
        buf[len + 1] = '\0';
    }
    printf("%s",buf);
}
于 2012-12-29T19:32:07.230 に答える
1

最後に段落全体を取得したい場合は、EOF に到達するまで入力をバッファーに格納する必要があります。次に、バッファの内容をループで出力します。また、アンワインド氏の答えがmake、ch変数 a int、 char と言うように、間違っています!

#include"stdio.h"
#define SIZE 1024

void main()
{
  int buffer[SIZE]
  int ch; 
  int i=0;

  // Read and store in a buffer
  while((ch=getchar())!=EOF)
  {
     buffer[i] = ch;
     i++;
  }
  buffer[i] = EOF;

  // now print using putchar(ch);
  i = 0;
  while((ch = buffer[i])  !=EOF)
  {
    putchar(ch);
    i++;
  }

} 
于 2012-12-29T19:32:26.267 に答える
1

このコードが役に立ちますか

char *buffer;
    int i = 255;

    buffer = (char *)malloc(i*sizeof(char));

    *buffer = getchar();
    while ( *buffer != '?' )
    {
        buffer++;
        *buffer = getchar();
    }
于 2012-12-29T19:11:51.733 に答える
-1

コンソール/ターミナルで行ったすべてのことを思い出してください - Enter/Return/^J/^M を押さない限り、シェルはプログラムに行を送信しません

uは、いくつかの行をコピーして貼り付けることで段落(1行以上)を取得できるため、端末|コンソールプログラムは、最初にuを貼り付けてから繰り返すことを示します-uプログラムの出力

于 2013-01-12T21:13:13.263 に答える