【发布时间】:2015-04-10 09:41:02
【问题描述】:
我创建了一个堆栈来解决一个问题。这是插入函数:
insert()
{
char data;
scanf("%c",&data);
struct node* newNode=create_node(data);//creates a new node
if(head==NULL)
{
head=newNode;
tail=head;
return;
}
newNode->next=head;
head=newNode;
return;
现在,我尝试像这样在堆栈中推送一些元素,
main()
{
char input[20];
insert();
insert();
insert();
insert();
insert();
print();
}
但是我注意到每个 insert 之后的 insert 都被跳过了。所以当我应该采用 5 时它只需要 3 输入..即,i 在接受 3 个输入后给出输出。
我能够通过在插入函数中添加 fflush 来解决问题。
我想知道导致这种情况的实际情况.. 这是否意味着我们不能像我那样接受输入?
【问题讨论】:
-
谢谢,这解决了问题。
-
你做了
fflush(stdin)吗? -
是的,我猜它会刷新(或删除)换行符,否则它将作为下一个 scanf() 的输入。
-
好的。
fflush(stdin)适用于 Linux 和 windows,但在标准 C 中是 undefined。一般来说,您应该避免使用scanf()系列函数来处理用户输入,因为它们在处理错误/无效输入时不是很有用.