1

私は、ユーザーから番号を取得し、次にユーザーからすべての番号の名前を取得するプログラムを作成しました...たとえば、ユーザーが番号10を入力した場合、10個の名前を取り、それを配列に入れます構造体の...名前を印刷すると最初の文字がスキップされることを除いて、すべてがうまく機能しています...「Amit」という名前を入力すると「mit」が印刷されるように...、また、私が入力した最後の文字列はまったく保存されませんでした。これが私が書いたものです:

const number_candidates; // Getting the number of candidates
#define MAX 256
#define min_candidate 10
#define max_candidate 60000

typedef struct candidate // Getting details for each candidate
{
    char name[MAX];
    int sing_grade;
    int per_grade;
    int cam_grade;
    int sharmanti_grade;
}candidate;

void get_details_candidates(candidate candidate[MAX])
{
 int i = 0;
 printf ("\n");
 for (i = 0 ; i < number_candidates ; i++)
 {
     printf ("Please enter the %d name: ", i + 1);
     fgets (candidate[i].name, MAX, stdin);
     getchar();
 }
}

印刷は次のとおりです。

    for (i = 0 ; i < number_candidates ; i++)     
{
    printf ("%s\n", candidates[i].name);
}

ご協力いただきありがとうございます!

4

2 に答える 2

3

fgets()の後にgetchar()があるのはなぜですか?それがあなたの犯人だと思います。

于 2012-05-11T17:45:10.840 に答える
0

getchar()後は次の行のfgets()最初の文字を食べています。

ファースト ネームを読み取る際の問題は、入力ストリーム内の改行が原因である可能性があります。入力ループの前にフラッシュstdinするには、次のようなものを使用できます。

while((c = getchar()) != '\n' && c != EOF)
/* discard the character */;

fflush(stdin)未定義の動作だと思うので、そうしないでください

于 2012-05-11T19:06:05.843 に答える