1

以下のプログラムでは、キーボードから入力を読み取るときに、デフォルトで 4 文字ではなく 2 文字のみを取得し、残りの 2 文字はスペースを取得します。それはなぜです???

ポインターを介して char 入力を取得するプログラム/

int c,inc,arrysize;
char *revstring;
printf("enter the size of char arry:");
scanf("%d",&arrysize);
revstring = (char *)malloc(arrysize * sizeof(*revstring));
printf("%d",sizeof(revstring));
printf("enter the array elements:");
for(inc=0;inc<arrysize;inc++)
{
scanf("%c",&revstring[inc]);

}
for(inc =0;inc<arrysize;inc++)
    printf("%c",revstring[inc]);
getch();
return 0;

}

4

2 に答える 2

3

scanfフォーマットされた入力を読み取ります。数字を録音するときは、数字を録音してから を押し<Enter>ます。に が残っているので\nstdin次の で読みますscanf<Enter>文字間を押しても同様です。

解決策は、次のように、各入力の後に標準入力ストリーム内の文字を消費することです。

#include <stdio.h>

void
clean_stdin (void)
{
  int c;

  while ((c = getchar ()) != '\n' && c != EOF)
    ;
}

別のアイデアは、fgets人間の入力を取得するために使用することです。scanfこのような読み方には不向きです。

于 2013-02-11T17:40:56.247 に答える
0

ほとんどの場合、scanfフォーマットされた入力を読み取ります。ほとんどの%形式では、scanfは最初に空白を読み取って破棄し、次に指定された項目を解析します。したがって、これを使用scanf("%d", ...すると、最初のスペース(または余分な改行さえも!)を含む入力を問題なく受け入れることができます。

ただし、例外の1つはです%c。を使用%cすると、scanfは、それが何であれ、次の文字を読み取ります。その次の文字がスペースまたは改行である場合、それが得られます。

正確に何が必要かによっては、フォーマット文字列に空白を使用できる場合があります。

scanf(" %c",&revstring[inc]);

スペースをscanf使用すると、入力内の空白がスキップされ、次に空白以外の文字が読み取られます。ただし、これにより、スペースを含む文字列を入力できなくなります(スペースは無視されます)。または、scanf(" ");ループの前に空白を1回スキップするかscanf("%*[^\n]"); scanf("%*c");、次の改行まですべてをスキップしてから改行をスキップすることもできます。

于 2013-02-11T19:08:11.130 に答える