输入循环过早退出

时间:2014-11-18 04:52:34

标签: c sorting linked-list

在我的程序中,使用选择和冒泡排序对链接列表进行排序,getdata()用于从用户获取数据。

getdata()
{
    int val;
    char c;
    struct node *new;

    new = NULL;
    do {
        printf("Enter a value:\n");
        scanf("%d",&val);

        append(&new,val);

        printf("Any more nodes(y/n):\n");
        c=getchar();
    } while(c =='y' || c =='Y');
    start = new;
}

但是当我运行我的程序时,输出是

Enter a value: 3

Any More Nodes (Y/N): Linked List Before Sorting: 3 
Linked List After Selection Sorting: 3 

Enter a value: 2

Any More Nodes (Y/N): Linked List Before Sorting: 2 
Linked List After Bubble Sorting: 2 

我无法输入" y / n"在里面。有人能告诉我出了什么问题吗?

2 个答案:

答案 0 :(得分:0)

scanf("%d", &val);将换行符留在输入缓冲区中,因此getchar()会读取换行符,既不是y也不是Y,因此循环终止。

您应该使用:

if (scanf(" %c", &c) != 1)
    break;

您还应该测试scanf("%d", &val)的结果,以确保获得值。

您的函数也应该使用显式返回类型声明。对于显示的代码,该值应为void。请注意,您的代码不必要地绑定到全局变量start。如果您将功能更改为struct node *getdata(void) { …; return new; },那么您可以更普遍地使用它。

答案 1 :(得分:-1)

而不是 c = getchar(); 尝试 cin.get();