在第一次输入后,我的程序要求输入太多次。源代码:
#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;
}
}
}
程序启动,我输入y,它正在调用添加功能,我输入所有信息没有问题,输入信息完成后,再次请求输入时打印消息“你要添加吗?新学生(n)或(y)“两次。我尝试使用不同的函数来获取输入scanf,fgets,getline和getchar。
答案 0 :(得分:2)
当您输入 y 或 n 并按 ENTER 时,新行字符也在输入缓冲区中,您需要删除此下一个循环之前的换行符。
if(n == 'n'){
break;
}
else if(n == 'y'){
add(begin);
}
getchar(); //consumes new line
答案 1 :(得分:0)
要在输入缓冲区中使用换行符,
你也可以用
scanf(" %c", &n) ;
- 格式描述符(%c)之前的空格
代替第一个getchar()
或 你也可以用
getc(stdin)'
代替第二个getchar()
来实现同样的目标。