我的文本文件如下:
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;
}
答案 0 :(得分:0)
在选择选项中输入1后,标准输入同时包含1和换行符,您希望在下一个scanf语句中立即使用。
将scanf("%[^\n]s", nameInsert);
更改为scanf("%s", nameInsert);
或在获得选择选项后立即使用getchar()
。