2

私は構造体配列でstdinの学生から読んでいます。ある生徒の詳細を紹介した後、別の生徒の詳細を尋ねます。選択肢がYの場合は、新しい生徒を追加します。選択肢がNの場合は、中断します。しかし、選択が単にENTERである場合はどうなるでしょうか?改行文字を検出するにはどうすればよいですか?getchar()を試してみましたが、stdinからの最初の読み取りをスキップします。デバッグすると、最初の行test = getchar()で停止せず、2番目の行で停止します。

#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <stdlib.h>

struct student
{
char name[20];
int age;
};

int main()
{
struct student NewStud[5];
char test;
int count=0;
for(count=0;count<5;count++)
{
    printf("Enter the details for %s student: ",count>0?"another":"a");
    printf("\nName : ");
    scanf("%s",NewStud[count].name);
    printf("\nAge : ");
    scanf("%d",&NewStud[count].age);
    printf("Would you like to continue? (Y/N)");
    test=getchar();
    if(test=='\n')
    {
        printf("Invalid input. Would you like to continue? (Y/N)");
        test=getchar();
    }
    while(tolower(test) !='n' && tolower(test) != 'y')
    {
        printf("Invalid input.Would you like to continue? (Y/N)");
        test=getchar();
    }
    if(tolower(test) == 'n')
    {
        break;
    }
    if(tolower(test) == 'y')
    {
        continue;
    }
}


getch();
}
4

4 に答える 4

2

問題はscanf()、入力ストリームに改行文字が残ることです。で「有効な」データを取得する前に、改行文字を消費する必要がありますgetchar()

元:

scanf("\n%s",NewStud[count].name);
getchar();
printf("\nAge : ");     
scanf("%d",&NewStud[count].age);
getchar();
printf("Would you like to continue? (Y/N)");
test=getchar();   // Now this will work

詳細については、このリンクを確認してください。fgets用ですが、同じ問題ですgetchar()

于 2012-09-17T19:03:56.303 に答える
0

test次のサンプルのように、値を'\n'と比較します。

int main() {
    int test;
    test = getchar();
    printf("[%d]\n", test);
    if(test == '\n') printf("Enter pressed.\n");
    return(0);
}

ps:あなたtestはでなければなりませんint

于 2012-09-17T18:35:43.813 に答える
0

もちろん、最初の読み取りはスキップされます。次のようにifステートメントに入れます。if(test=='\n')

その特定の学生のすべての情報を取得し、ユーザーがEnterキーを押したので、戻ってfor(count=0;count<5;count++)新しい学生の新しい入力を要求します。あなたがやりたかったのは、代わりにwhileステートメントを使用することだと思います。

于 2012-09-17T18:35:55.303 に答える
0

交換できます

> test=getchar();
>     if(test=='\n')
>     {
>         printf("Invalid input. Would you like to continue? (Y/N)");
>         test=getchar();
>     }

while((test=getchar()) == '\n')
{
  printf("Invalid input. Would you like to continue? (Y/N)");
}
于 2012-09-17T18:44:49.987 に答える