繁体   English   中英

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

[英]My program is asking too many times for input. C 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。

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

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

要在输入缓冲区中使用换行符,还可以使用scanf(" %c", &n) ; - 格式描述符之前的空格(%c)

取代第一个getchar()

或者你也可以使用

getc(stdin)'取代第二个getchar()来实现同样的目的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM