2

我正在阅读结构数组中的标准输入学生。在为一个学生介绍了详细信息后,我询问了另一个学生的详细信息。如果选择是Y,我会添加新学生,如果选择是N,break。但是,如果选择只是 ENTER 怎么办?如何检测换行符?我尝试使用 getchar(),但它跳过了 stdin 的第一次读取。当我调试时,它不会停止到第一行 test=getchar(),而是停止到第二行。

#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')

你得到了那个学生的所有信息,然后用户按下了回车键,所以你返回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 回答