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

时间:2014-03-20 08:45:46

标签: 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 *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。

2 个答案:

答案 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()来实现同样的目标。