所以我正在创建一个名为"Create"的函数,该函数要求用户输入链表的数字。如果用户输入"Y",则如果用户键入"N"停止并显示链表,则要求输入其他元素,但我遇到了一些麻烦。当我运行它时,它没有给我输入 Y 或 N 的选项,而且当我输入 N 时,它会在链表中添加一个 0。发生了什么事情?
#include <stdio.h>
#include <stdlib.h>
//-------------------------------------------------
struct node {
int data;
struct node *next;
}*start=NULL;
//------------------------------------------------------------
void create() {
char ch;
do {
struct node *new_node,*current;
new_node=(struct node *)malloc(sizeof(struct node));
printf("Enter the data : ");
scanf("%d",&new_node->data);
new_node->next=NULL;
if(start==NULL) {
start=new_node;
current=new_node;
} else {
current->next=new_node;
current=new_node;
}
printf("Do you want to create another?(YN) ");
ch = getchar();
} while(ch!='N');
}
//------------------------------------------------------------------
void display() {
struct node *new_node;
printf("The Linked List : ");
new_node=start;
while(new_node!=NULL) {
printf("%d--->",new_node->data);
new_node=new_node->next;
}
printf("NULLn");
}
//----------------------------------------------------
int main() {
create();
display();
}
1-将struct node *new_node, *current;
的声明移动到do
循环之外(在do之前),因为您希望它们在迭代之间保留其值。
2- 在读取数字的 scanf 之后,缓冲区中保留了一个换行符,因为用户必须在数字之后键入return,而 scanf 不会使用它。要在获取 Y/N 答案时跳过此换行符,请以这种方式获取 Y/N 答案,而不是ch = getchar();
:
scanf(" %c", &ch); // notice the blank before the %c, important to skip the newline that remained in the buffer
3-虽然不是必需的,但最好避免使用转义字符在您的问题中使用,使用"Y/N"而不是"Y\N">
在我进行这些修改后,您的代码运行良好。