在我的程序中,使用选择和气泡排序对链表进行排序,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();