gpt4 book ai didi

c - 将姓名和号码插入链表末尾

转载 作者:行者123 更新时间:2023-11-30 17:21:00 24 4
gpt4 key购买 nike

我的文本文件如下所示:

George Washington, 2345678 
John Adams, 3456789
Thomas Jefferson, 4567890
James Madison, 0987654
James Monroe, 9876543
John Quincy Adams, 8765432
Andrew Jackson, 7654321
Martin Van Buren, 6543210

有人可以提供有关如何使用插入函数将姓名和 ID 号添加到链接列表末尾的见解吗?当我运行代码时,选择选项 1 它会跳过添加名称,只要求输入整数。之后什么也没有发生。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//Creates node for holding student's information
struct node
{
char name [50];
int id;
struct node *next;
}*head;

//Create Function Prototypes
void readDataFile ();
void insert(char *inName, char *inID);
void display(struct node *d);
int deleteID(int num);
void deleteName(char dname);


//Main function
int main()
{
//Declare variables
int i, num, id;
char *name;
char nameDelete [50];
char nameInsert [50];
struct node *n;

//initialize link list
head = NULL;

//Read in file
readDataFile();

//Create list of operations utilized in program
while (1)
{
printf("\nList Operations\n");
printf("===============\n");
printf("1.Insert\n");
printf("2.Display\n");
printf("3.Delete by ID\n");
printf("4.Delete by Name\n");
printf("5.Exit\n");
printf("Enter your choice : ");

if(scanf("%d", &i) <= 0)
{
printf("Enter only an Integer\n");
exit(0);
}
else
{
switch(i)
{
case 1:
printf("Enter the name to insert:\n");
scanf("%[^\n]s", nameInsert);
getchar();
printf("Enter the ID associated with the name: ");
scanf("%d", &id);
insert(nameInsert, id);
break;
case 2:
if (head == NULL)
printf("List is Empty\n");
else
{
printf("Elements in the list are:\n");
}
display(n);
break;
case 3:
if(head == NULL)
printf("List is Empty\n");
else
{
printf("Enter the ID number to delete: ");
scanf("%d", &id);
}

if(deleteID(id))
printf("%d deleted successfully \n", id);
else
printf("%d not found in the list\n", id);
break;
case 4:
if(head == NULL)
printf("List is Empty\n");
else
{
printf("Enter name to delete: ");
gets(nameDelete);
}
case 5:
return 0;
default:
printf("Invalid option\n");
}
}
}
return 0;
}

//Define the functions
//Function to read in the data file
void readDataFile()
{
//Initialize the link the list
struct node *temp;
temp = malloc(sizeof(struct node));
temp->next = NULL;
head = temp;

//Open up the file
FILE *fp;
fp = fopen("AssignmentOneInput.txt", "r");

//Use memset function to copy the characters in string
char string[100];
memset(string, 0, 100);

//Create while loop scan in the contents of the file
while(fgets(string, 100, fp) != NULL)
{
sscanf(string, "%20[^,], %d", temp->name, &temp->id);
temp->next = malloc(sizeof(struct node));
temp = temp->next;
temp->next = NULL;

}
fclose(fp);
}

//Function to insert a name and ID number
void insert(char *inName, char *inID)
{
//Create temporary and helper nodes
struct node *temp, *helper;

//Allocate the memory for the temporary node
temp = (struct node *)malloc(sizeof(struct node));

//Convert character into integer value
int intID = atoi(inID);

//Set the data in the node
strcpy(temp->name, inName);
temp->id = intID;
temp->next = NULL;

//Create new node and add to it
helper = (struct node *)head;

while(helper->next != NULL)
{
helper = helper->next;
}

helper->next = temp;
helper = temp;
helper->next = NULL;
}

最佳答案

一旦您在选择选项中输入 1,标准输入就会同时包含 1 和换行符,这正是您在下一个 scanf 语句中所期望的。

scanf("%[^\n]s", nameInsert); 更改为 scanf("%s", nameInsert);或者在获取选择选项后立即使用getchar()

关于c - 将姓名和号码插入链表末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28400303/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com