我的程序要求输入的次数太多了。C while循环

我的程序要求输入的次数太多了。C while循环,c,input,while-loop,C,Input,While Loop,在第一次输入之后,我的程序要求输入的次数太多了。源代码: #include <stdio.h> #include <stdlib.h> typedef struct data{ char name[100]; int n_in_class; int grade; struct data *p; }data; void add(data *begin); int main(void){ char n; data *begi

在第一次输入之后,我的程序要求输入的次数太多了。源代码:

#include <stdio.h>
#include <stdlib.h>
typedef struct data{
    char name[100];
    int n_in_class;
    int grade;
    struct data *p;
}data;

void add(data *begin);

int main(void){
    char n;
    data *begin = malloc(sizeof(data));

    while(1 == 1){
        printf("Do you want to add new student(n) or (y)");
            n = getchar();
        if(n == 'n'){
            break;
        }
        else if(n == 'y'){
            add(begin);
        }
    }
    data *temp = begin;
    while(temp != NULL){
        printf("%s", temp->name);
        temp = temp->p;
    }
}

void add(data *begin){
    data *new = malloc(sizeof(data));
    printf("enter name: ");
        scanf("%s", &new->name);
    printf("Enter number in class: ");
        scanf("%i", &new->n_in_class);
    printf("enter grade: ");
        scanf("%i", &new->grade);
    data *temp = begin;
    while(1==1){
        if(temp->p == NULL){
            temp->p = new;
            break;
        }
        else{
            temp = temp->p;
        }
    }
}
#包括
#包括
typedef结构数据{
字符名[100];
int n_在_类中;
国际等级;
结构数据*p;
}数据;
作废添加(数据*开始);
内部主(空){
字符n;
data*begin=malloc(sizeof(data));
而(1==1){
printf(“您想添加新学生(n)还是(y)”;
n=getchar();
如果(n=='n'){
打破
}
如果(n='y'){
添加(开始);
}
}
数据*温度=开始;
while(temp!=NULL){
printf(“%s”,临时->名称);
温度=温度->p;
}
}
无效添加(数据*开始){
data*new=malloc(sizeof(data));
printf(“输入名称:”);
scanf(“%s”,&new->name);
printf(“在类中输入数字:”);
scanf(“%i”,&new->n_在_类中);
printf(“输入等级:”);
scanf(“%i”、&new->grade);
数据*温度=开始;
而(1==1){
如果(临时->p==NULL){
温度->p=新的;
打破
}
否则{
温度=温度->p;
}
}
}
程序启动,我输入y,它调用add函数,我输入所有信息没有问题,输入信息完成后,当再次请求输入时,它会打印两次消息“您想添加新学生(n)还是(y)”。我尝试了不同的函数来获取输入scanf、fgets、getline和getchar

当您输入y或n并按ENTER键时,新行字符也在输入缓冲区中,您需要在下一个循环之前删除此新行字符

if(n == 'n'){
    break;
}
else if(n == 'y'){
    add(begin);
}
getchar();   //consumes new line

要使用输入缓冲区中的换行符, 你也可以使用
scanf(“%c”和&n)-格式描述符(%c)前的空格

代替第一个
getchar()

或 你也可以使用


getc(stdin)
代替第二个
getchar()
来达到同样的效果。

改进你的编码习惯使用
while(1)
而不是
while(1==1)
我看不出1==1有什么不好的地方,我看不出有任何理由称之为“坏习惯”;您应该始终编写清晰、简单和简短的代码。你只想运行一个无限循环,那么当只有
1
可以做同样的事情时,为什么
1==1