c-在我的单链表中输入单个节点时遇到问题



我正在创建一个只有一个节点的单链表,我在让它按我想要的方式工作时遇到了一些问题。当我输入我想放在列表中的信息时,我会得到最后一段数据,不用我做就可以附加到前一段数据上。这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#define maxName 30
#define maxID 10
#define maxAge 3
typedef struct node
{
char fName[maxName];
char lname[maxName];
char PUID[maxID];
char age[maxAge];
struct node *next;
}node;
node *head = NULL;
//This function will create a list with just a single node and the data to the list must be passed by paramter
node * createnode(char firstName[], char lastName[], char puid[], char age[])
{
head = (node*)malloc(sizeof(node));
printf("Enter the first name: ");
scanf("%s", &(head -> fName));
printf("Enter the last name: ");
scanf("%s", &(head -> lname));
printf("Enter the PUID: ");
scanf("%s", &(head -> PUID));
printf("Enter the Age: ");
scanf("%s", &(head -> age));
return head;
}

这是我输入信息时得到的输出:JAke,Thomas,7894569877525,25->

25是附加到我输入的PUID的末尾。任何帮助你都很棒!非常感谢。

您应该删除地址运算符。

printf("Enter the first name: ");
scanf("%s", (head -> fName));
printf("Enter the last name: ");
scanf("%s", (head -> lname));
printf("Enter the PUID: ");
scanf("%s", (head -> PUID));
printf("Enter the Age: ");
scanf("%s", (head -> age));

此函数声明

node * createnode(char firstName[], char lastName[], char puid[], char age[]);

没有意义,因为函数中没有使用参数。

所以函数应该像一样声明

node * createnode( void );

在像这样的函数语句中

scanf("%s", &(head -> fName));
^^^

不正确。它们看起来一定像

scanf("%s", head -> fName);

至于错误的输出,那么在字符数组中输入的字符似乎比它所能容纳的字符多,包括字符串的终止零。

例如,输入的符号7894569875将被存储在数据成员PUID中,类似于包含11个字符(包括终止零字符(而不是10个字符的字符串"7894569875"

使用函数fgets而不是带有格式说明符%s的scanf更安全。

例如

#include <string.h>
//...

fgets( head->fName, maxName, stdin );
head->fName[ strcspn( head->fName, "n" ) ] = '';

请注意,当函数依赖于全局变量时,这是一个坏主意。在这种情况下,您将无法在程序中列出例如。

相关内容

  • 没有找到相关文章

最新更新