C语言 输入环路过早退出



在我的程序中,使用选择和气泡排序对链表进行排序,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"。有人可以告诉我出了什么问题吗?

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

您可能应该使用:

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新