4

C プログラミング言語を学習し、Microsoft Visual C++ を使用してコードを記述およびテストする初心者です。

以下のテキストからの C のプログラム (セクション 1.5.1) は、入力を putchar() と getchar() を介して出力にコピーします。

#include <stdio.h>
int main(void)
{   int c;
    while ((c = getchar()) != EOF)
         putchar(c);
    return 0;}

プログラムは、Enter キーを押すたびにキーボードで入力された文字を印刷します。その結果、印刷​​前に 1 行しか入力できません。印刷する前にキーボードで複数行のテキストを入力する方法が見つかりません。

このプログラムにキーボードから複数行のテキストを入力および出力させる方法と方法はありますか?

これが基本的で無知な質問である場合は申し訳ありません。

どうぞよろしくお願いいたします。

4

4 に答える 4

1

あなたが望むことをするためのポインター演算の巧妙な使用:

#include <stdio.h>  /* this is for printf and fgets */
#include <string.h> /* this is for strcpy and strlen */
#define SIZE 255 /* using something like SIZE is nicer than just magic numbers */

int main()
{
    char input_buffer[SIZE];        /* this will take user input */
    char output_buffer[SIZE * 4];   /* as we will be storing multiple lines let's make this big enough */

    int offset = 0; /* we will be storing the input at different offsets in the output buffer */

    /* NULL is for error checking, if user enters only a new line, input is terminated */
    while(fgets(input_buffer, SIZE, stdin) != NULL && input_buffer[0] != '\n') 
    {
        strcpy(output_buffer + offset, input_buffer); /* copy input at offset into output */
        offset += strlen(input_buffer);               /* advance the offset by the length of the string */
    }

    printf("%s", output_buffer); /* print our input */

    return 0;
}

そして、これが私がそれを使用する方法です:

$ ./a.out 
adas
asdasdsa
adsa

adas
asdasdsa
adsa

すべてがオウム返しです:)

fgetsstrcpy、およびstrlenを使用しました。これらは非常に便利な機能であるため、調べてください (fgetsユーザー入力を取得するための推奨される方法です)。

于 2013-07-18T08:17:14.903 に答える
0

ここで「+」と入力してEnterキーを押すと、それまでに入力したすべてのデータが印刷されます。配列のサイズを 100 以上に増やすことができます

#include <stdio.h>
    int main(void)
    {   int c='\0';
         char ch[100];
         int i=0;
        while (c != EOF){
          c = getchar();
          ch[i]=c;
      i++;

            if(c=='+'){

            for(int j=0;j<i;j++){
                printf("%c",ch[j]);
            }
        }
    }
        return 0;


    }

「+」文字または印刷アクションを表現したい任意の文字に条件を付けて、この文字が配列に格納されないようにすることができます(現在、「+」にはそのような条件を付けていません)

于 2013-07-18T08:10:16.637 に答える
-1

GetKeyState 関数を使用して、Enter キーを押したときに Shift キーが押されているかどうかを確認できますか? つまり、SHIFT/ENTER を使用して複数の行を入力し、単純な ENTER キーを使用してすべてを送信することができました。何かのようなもの:

#include <stdio.h>
int main(void)
{    int c;
     while (true){
         c = getChar();
         if (c == EOF && GetKeyState(VK_LSHIFT) {
              putchar("\n");
              continue;
         else if(c == EOF) break;
         else {
              putchar(c);
     }
 }
于 2013-07-18T08:17:39.207 に答える