开发者社区> 问答> 正文

单向链表学生姓名和成绩输入过程中无法输入问题

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

void insert_func(void);
//void sort_func(void);
void delete_func(void);
void display_func(void);
void modify_func(void);
//void anykey_func(void);

struct student {
        char name[20];
        int score;
        struct student *next;
};

struct student *ptr, *head, *current, *prev;

int main()
{
        int i;
        head = (struct student *) malloc(sizeof(struct student));
        head->next = NULL;
        while (1) {
                printf("\n");
                printf("*********************\n");
                printf("        1.insert\n");
                printf("        2.delete\n");
                printf("        3.display\n");
                printf("        4.modify\n");
                printf("        5.quit\n");
                printf("**********************\n");
                printf("Enter your choice (1-5): ");
                scanf("%d", &i);
                printf("\n");
                switch(i) {
                        case 1:
                                insert_func();
                                break;
                        case 2:
                                delete_func();
                                break;
                        case 3:
                                display_func();
                                break;
                        case 4:
                                modify_func();
                                break;
                        case 5:
                                printf("\n");
                                return 0;
                }
        }
}

/*添加是以分数的高低加以排序*/
void insert_func(void)
{
        ptr = (struct student *) malloc(sizeof(struct student));
        printf("Student name : ");
        scanf("%s\n", ptr->name);
        printf("Student score : ");
        scanf("%d\n", &ptr->score);

        prev = head;
        current = head->next;
        while ((current != NULL) && (current->score > ptr->score)) {
                prev = current;
                current = current->next;
        }
        ptr->next = current;
        prev->next =ptr;
}

/*删除是以姓名为键值*/
void delete_func(void)
{
        char del_name[20], ans;
        printf("Delete student name : ");
        scanf("%s\n", del_name);

        prev = head;
        current = head->next;
        while ((current != NULL) && (strcmp(current->name, del_name) != 0))
        {
                prev = current;
                current = current->next;
        }
        if (current != NULL) {
                /*确认是否要删除*/
                printf("Are you sure? ");
                scanf("%s\n", ans);
                if (ans == 'Y' || ans == 'y'){
                        prev->next = current->next;
                        free (current);
                        printf("Student %s has been deleted\n", del_name);
                }
        }
        else
                printf("Student %s not found\n", del_name);
}

void modify_func(void)
{
        char n_temp[20];
        int s_temp;
        printf("Modify student name : ");
        scanf("%s", n_temp);
        current = head->next;

        while ((current != NULL) && (strcmp(current->name, n_temp) != 0))
        {
                prev = current;
                current = current->next;
        }
        if (current != NULL) {
                printf("*****************************");
                printf("Student name : %s\n", current->name);
                printf("Student score : %d\n", current->score);
                printf("******************************");
                printf(" Please enter new score : ");
                scanf("%d", &s_temp);
                current->score = s_temp;
                printf(" Student %s has been modified\n", n_temp);
        }
        else
                printf(" Student %s not found\n", n_temp);
}

void display_func (void)
{
        int count = 0;
        if (head->next == NULL) {
                printf("No student record\n");
        }
        else {
                printf("\n");
                printf("   NAME         SCORE\n");
                printf("*************************\n");
                current = head->next;
                while (current != NULL) {
                        printf("   %-10s    %3d\n", current->name, current->score);
                        count++;
                        current = current->next;
                }
                printf("**************************\n");
                printf("Total %d record(s) found\n", count);
        }
}
输出尝试:

全选复制放进笔记./a.out

*********************
    1.insert
    2.delete
    3.display
    4.modify
    5.quit
**********************
Enter your choice (1-5): 1

Student name : er
成这样子了

展开
收起
a123456678 2016-06-07 19:45:47 1734 0
1 条回答
写回答
取消 提交回答
  • 码农|Coder| Pythonista

    scanf("%sn", ptr->name);这句中不能加n。

    2019-07-17 19:30:52
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载