2

「学生」という名前の構造体を使用して単純な C プログラムに取り組んでいます。これが私のコードです

#include<stdio.h>
#include<stdlib.h>
  struct  student {
    char name[50];
    int id;
    float marks_1;
    float marks_2;

};


void main(){

    int num,a,i;
    printf("Enter number of students\n");
    scanf("%d",&num);
    struct student s[num];
    for(i=0;i<num;i++)
    {
        a=i+1;
        printf("Enter name of student number %d\n",a);
        scanf("%[^\n]%*c",s[i].name);

    }

  }

プログラムを実行すると、生徒の数を正しく入力できますが、その後、各生徒に対応する名前を入力できません。これは私が得る出力です。

Enter number of students
2
Enter name of student number 1
Enter name of student number 2

RUN FINISHED; exit value 2; real time: 1s; user: 0ms; system: 0ms

何が問題なのですか?どんな助けでも大歓迎

4

5 に答える 5

3
scanf("%d",&num);

入力バッファ内のプログラムに入力を送信するために入力した改行を残します。したがって、最初の反復

for(i=0;i<num;i++)
{
    a=i+1;
    printf("Enter name of student number %d\n",a);
    scanf("%[^\n]%*c",s[i].name);

}

すぐにその改行を見つけて、空の文字列をスキャンします。

"%d%*c"最初の形式をに変更するか、名前スキャン形式の先頭にスペースを追加して最初の空白をスキップすることにより、スキャンの前に改行を消費します。

于 2013-08-22T13:03:18.017 に答える
0

あなたがここで何をしようとしているのかわからない:

scanf("%[^\n]%*c",s[i].name);

しかし、それを次のように置き換えてみてください:

scanf("%50[^\n]s",s[i].name);
于 2013-08-22T12:58:30.160 に答える