0

こんにちは、配列へのデータの入力について質問があります

'\n'このコードでscanf が配列の最初の要素に格納されるのはなぜですか?

#include <stdio.h>
#include <stdlib.h>
#define MAX 10
int main (void)
{
    // Global declarations
       int str_length;
       char str[MAX];
       int count;
       char temp;
    // Statements

       // prompt user for string length
       printf("Enter string length: ");
       scanf("%d", &str_length);

       printf("Enter string: ");
       // input string
       for(count = 0; count < str_length; count++)
       {
            scanf("%c", &str[count]);
            printf("%c", str[count]);
       }

       for(count = 0; count < str_length; count++)
       {    
            temp = str[0]; // set temp to the first element
            str[count] = str[count+1]; // set the next element to be the first element
            str[str_length-1] = temp;  // swap the first element and the last element
            puts(str);
       }


    system("PAUSE");
    return 0;
}

最初の要素である 1 の代わりに配列に入力1234567890すると、最初の要素は'\n'代わりに改行文字になりました。

助けてくれてありがとう。

4

2 に答える 2

1

ここまできたら

scanf("%d", &str_length);

ユーザーは 4 のようなものを入力してから Enter を入力すると、バッファーは4\n. 4 は行き、バッファstr_lengthにとどまります。\nしたがって、次を追加するだけで、バッファーをクリーンアップする必要があります。

fflush (stdin);

declearchar str[MAX]でユーザーが char を入力する場合、文字列の最後に null ターミネータを追加する必要があることに注意してください。追加するだけ

str[str_length] = '\0';
于 2013-07-15T08:09:02.857 に答える
0

行の長さを取得した後、 \n を消費していないようです

  // prompt user for string length
   printf("Enter string length: ");
   scanf("%d", &str_length);

この行の直後に %c の scanf を追加して破棄するだけです。

于 2013-07-15T07:52:04.360 に答える