在开头添加元素的链接列表 我想在开始时添加,但它只接受第一个元素然后 treminate 它不接受while循环错误的其他元素
#include <stdio.h>
typedef struct node_type {
int data; struct node_type *next;
} node;
typedef node* list;
void main() {
list head,temp; int n; char ch;
head = NULL;
printf("\n Enter the data:(y/n):");
scanf("%c", &ch);
while (ch == 'y' || ch == 'Y') {
printf("\n Enter Element:");
scanf("%d", &n);
temp = (list) malloc(sizeof(node));
temp->data = n;
temp->next = head;
head = temp;
printf("\n Enter more data:");
scanf("%c", &ch);
}
temp = head;
while (temp != NULL) {
printf("%d", temp->data);
temp = temp->next;
}
}
答案 0 :(得分:2)
对于根据C标准函数的启动器,没有参数的main应声明为
int main( void )
变量scanf
的函数ch
调用的格式字符串必须如下所示
scanf( " %c", &ch );
^^^^^^
在这种情况下,将跳过包含新行字符的空格字符。否则该函数将返回控制字符。您还应该检查是否有流的结束。
while循环可能看起来像
printf( "\nEnter the data:(y/n): " );
while ( scanf( " %c", &ch ) == 1 && ( ch == 'y' || ch == 'Y' ) )
{
printf( "\nEnter Element: " );
scanf( "%d", &n );
temp = (list) malloc( sizeof( node ) );
if ( temp != NULL )
{
temp->data = n;
temp->next = head;
head = temp;
}
printf( "\nEnter more data: " );
}
答案 1 :(得分:1)
您应该更改阅读y/n
回复的方式:
scanf(" %c", &ch);
在格式字符串中添加空格会指示scanf
跳过任何空格字符,包括您尝试使用fflush(stdin);
删除的待处理换行符,这会调用未定义的行为。
同时检查scanf()
的返回值:它应为1
,否则转换不成功。
答案 2 :(得分:0)
这是一个经过修改的代码。
#include <stdio.h>
#include <stdlib.h>
typedef struct node_type {
int data;
struct node_type *next;
}list;
int main() {
list *head, *temp; int n; char ch;
head = NULL;
printf("\n Enter the data:(y/n):");
scanf("%c", &ch);
while (ch == 'y' || ch == 'Y') {
printf("\n Enter Element:");
scanf("%d", &n);
// Inserting a node into linked list at beginning:
// 1. Create a node and initialize its values
// Make sure that the next field points to current head node
temp = (list*) malloc(sizeof(list));
temp->data = n;
temp->next = head;
// 2. Update the head pointer so that it points to newly created node
head = temp;
printf("\n Enter more data:");
scanf(" %c", &ch);
}
temp = head;
while (temp != NULL) {
printf("%d", temp->data);
temp = temp->next;
}
return 0;
}
编辑:我也做了与@Vlad和@chqrlie提到的相同的事情。
答案 3 :(得分:-1)
stdio.h
中没有定义NULL,您应该使用#define
宏手动定义它,或者使用stddef.h
或stdlib.h
。最好使用{{1}因为它清除输入缓冲区(这会消除未解决的错误,同时在字符和整数上处理fflush(stdin)
)。它在scanf()
预定义