3


配列の長さを入力するようにユーザーに促し、この入力で char[] 配列を初期化し、char[] 配列に入力するメッセージを入力するようにユーザーに促しています。

ユーザーのメッセージの最初の文字を で読んでいますgetchar()

ただし、ユーザー入力を読み取る前にgetchar()改行エスケープを読み取っています。ユーザーにプロンプ​​トを表示する 前のステートメントから'\n'取得しているようです... 関連するコードは次のとおりです。'\n'printf


#include <stdio.h>

int main(void) {

    int len = 0,
        originalLen = 0;

    printf("\n\nWhat is the length of the array? ");
    scanf("%d", &originalLen);
    char str[originalLen]; // intitializing the array

    printf("Enter a message to enter into the array: ");
    char target = getchar();
    str[len] = target;

    // why is getchar() reading '\n'?
    if (target == '\n') {
        printf("\n...what happened?\n");
    }
    return 0;
} // end of main


4

3 に答える 3

4

これは、前の番号が数字の後の改行を読み取らないscanfためです。

これは2つの方法で解決できます。

  1. たとえばgetchar、それを読むために使用します
  2. フォーマットの後にスペースを追加しscanfます(例scanf("%d ", ...)
于 2013-02-08T03:31:08.380 に答える
3

getchar次の文字を読み取る前に、ループでstdinをフラッシュするために使用できます。

while((target = getchar()) != '\n' && target != EOF)
于 2013-02-08T03:33:48.557 に答える
2

数字を入力してENTERキーを押すと、数字と文字が入力バッファに配置されます。つまり、次のようになります。

  • 入力した番号と
  • 改行文字(\n)。

番号はによって消費されscanfますが、改行は入力バッファに残り、入力バッファはによって読み取られgetchar()ます。

次を使用して 、\n呼び出す前に消費する必要があります。getchar()

scanf("%d ", &originalLen);
         ^^^

これはscanf、数字と追加の文字である。を読み取るように指示します\n

于 2013-02-08T03:32:05.627 に答える