将名称和编号插入链接列表的末尾

时间:2015-02-08 22:49:35

标签: c file function insert linked-list

我的文本文件如下:

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 个答案:

答案 0 :(得分:0)

在选择选项中输入1后,标准输入同时包含1和换行符,您希望在下一个scanf语句中立即使用。

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