在我的程序中,使用选择和冒泡排序对链接列表进行排序,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"在里面。有人能告诉我出了什么问题吗?
答案 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();