编程中遇到的一些小问题,求解一下

编程过程中遇到的一些问题,有几处错误总是找不到解决办法,请大家可以帮我看一下(软件用的是visaul sdutio 2013)


```c++
// ConsoleApplication4.cpp : 定义控制台应用程序的

#define _CRT_SECURE_NO_WARNINGS
#include "stdafx.h"
#include 
#include <string>
#include 
#include <assert.h>

struct student
{
    char num[20];
    char name[20];
    char sex[5];
    int math;
    int chinese;
    int sum;
    int average;
};

struct Node
{
    struct student data;
    struct Node* next;
};

struct Node* createList()
{
    struct Node* headNode = (struct Node*)malloc(sizeof(struct Node));
    assert(headNode);
    headNode->next = NULL;
    return headNode;
}
//创建结点
struct Node* createNode(struct student data)
{
    struct Node*newNode = (struct Node*)malloc(sizeof(struct Node));
    assert(newNode);
    newNode->data = data;
    newNode->next = NULL;
    return newNode;
}
//插入结点
void insertNodeByHead(struct Node* headNode, struct student data)
{
    struct Node* newNode = createNode(data);
    newNode->next = headNode->next;
    headNode->next = newNode;
}
//删除指定位置
void deleteAppoinNode(struct Node* headNode, const char *name)
{
    struct Node* posNode = headNode->next;
    struct Node* posFrontNode = headNode;
    if (posNode == NULL)
    {
        printf("数据错误,无法删除!\n");
        return;
    }
    while (strcmp(posNode->data.name, name))
    {
        posFrontNode = posNode;
        posNode = posNode->next;
        if (posNode == NULL)
        {
            printf("未找到指定数据无法删除\n");
            return;
        }
    }
    posFrontNode->next = posNode->next;
    free(posNode);
}
//查找
struct Node* searchInfoByData(struct Node* headNode, char* name)
{
    struct Node* pMove = headNode->next;
    if (pMove == NULL)
        return NULL;
    if (strcmp(pMove->data.name, name) != 0) {
        return NULL;
    }
    while (strcmp(pMove->data.name, name))
    {
        pMove = pMove->next;
    }
    return pMove;
};
void redInfoFromFile(struct Node* headNode, char *fileName)
{
    FILE *fp;
    struct student data;
    fp = fopen(fileName, "r");
    if (fp == NULL)
    {
        fp = fopen(fileName, "w+");
    }
    while (fscanf(fp, "%d\t%s\t%s\t%d\t%d\t%d\t%d\n", data.num, data.name, data.sex, data.math, data.chinese, data.sum, data.average) != EOF)
    {
        insertNodeByHead(headNode, data);
    }
    fclose(fp);
}
void writeInfoToFile(struct Node* headNode, char *fileName)
{
    FILE *fp;
    fp = fopen(fileName, "w");
    struct Node* pMove = headNode->next;
    while (pMove)
    {
        fprintf(fp, "%d\t%s\t%s\t%d\t%d\t%d\t%d\n", pMove->data.num, pMove->data.name, pMove->data.sex, pMove->data.math,
            pMove->data.chinese, pMove->data.sum, pMove->data.average);
        pMove = pMove->next;
    }
}
//打印链表
void printfList(struct Node* headNode)
{
    struct Node* pMove = headNode->next;
    printf("学号\t姓名\t性别\t数学\t语文\t总分\t平均分\n");
    while (pMove != NULL)
    {
        printf("%d\t%s\t%s\t%d\t%d\t%d\t%d\n", pMove->data.num, pMove->data.name, pMove->data.sex, pMove->data.math, pMove->data.chinese, pMove->data.sum, pMove->data.average);
        pMove = pMove->next;
    }
    printf("\n");
}

int menu()
{
    printf("--------------------[学生信息管理系统]------------------\n");
    printf("\t\t0.退出系统\n");
    printf("\t\t1.添加学生\n");
    printf("\t\t2.显示学生信息\n");
    printf("\t\t3.修改学生信息\n");
    printf("\t\t4.删除学生信息\n");
    printf("\t\t5.查找学生信息\n");
    printf("\t\t6.排序记录\n");
    printf("------------------------------------------------------\n");
    return 0;
}

struct Node* list = createList();

void keydown()
{
    int choice = 0;
    struct Node* result;
    struct student data;
    struct Node* headNode, fileName;
    scanf_s("%d", &choice);
    switch (choice)
    {
    case 0:
        printf("退出系统\n");
        system("pause");
        exit(0);
        break;
    case 1:
        printf("---------------[添加学生]--------------\n");
        printf("请输入学生学号,姓名,性别,数学成绩,语文成绩,总分,平均分:");
        fflush(stdin);
        scanf_s("%d%s%s%d%d%d%d", data.num, &data.name, data.sex, data.math, data.chinese, data.sum, data.average);
        data.sum = data.math + data.chinese;
        data.average = data.sum / 3;
        insertNodeByHead(list, data);
        break;
    case 2:
        printf("--------------【显示学生信息】---------\n");
        printfList(list);
        break;
    case 3:
        printf("---------------【修改学生信息】---------\n");
        printf("请输入需要修改信息的学生姓名");
        scanf_s("%s", data.name);
        result = searchInfoByData(list, data.name);
        if (searchInfoByData(list, data.name) == NULL)
        {
            printf("未找到相关信息,无法修改,请重试!");
            system("pause");
        }
        else
        {
            FILE *fp;
            printfList(list);
            printf("请输入需要修改的信息\n");
            scanf_s("%d%s%s%d%d%d%d", data.num, &data.name, data.sex, data.math, data.chinese, data.sum, data.average);

            break;
    case 4:
        printf("---------------【删除学生信息】--\n");
        printf("请输入删除的学生姓名");
        scanf_s("%s", data.name);
        deleteAppoinNode(list, data.name);
        if (deleteAppoinNode(list, data.name) == NULL);
        {
            printf("未找到相关信息,无法删除\n");
            break;
    case 5:
        printf("------------【查找学生信息】--------\n");
        printf("请输入查找的学生姓名");
        scanf_s("%s", data.name);
        if (searchInfoByData(list, data.name) == NULL)
        {
            printf("未找到相关信息\n");
            system("pause");
        }
        else
        {
            printf("学号\t姓名\t性别\t数学成绩\t语文成绩\t总分\t平均分\n");
            printf("%d\t%s\t%s\t%d\t%d\t%d\t%d\n", data.num, data.name, data.sex, data.math, data.chinese, data.sum, data.average);
        }
        break;
    case 6:
        printf("--------------【排序记录】----------\n");
        system("pause");
        break;
    default:
        printf("输入错误,请重试\n");
        system("pause");
        break;

        }
        writeInfoToFile(list, "1.txt");
        return;
        }
        int _tmain(int argc, _TCHAR* argv[]);
        {
            readInfoFronFile(list, "1.txt");
            while (1)
            {
                menu();
                keydown();
                system("pause");
                system("cls");
                return 0;
            }
        }
    }

```

你没说什么问题

修改完善如下,改动处见注释,供参考:

// ConsoleApplication4.cpp : 定义控制台应用程序的

#define _CRT_SECURE_NO_WARNINGS
#include "stdafx.h"
#include <stdlib.h>
#include <string>
#include <stdio.h>
#include <assert.h>

struct student
{
    char num[20];
    char name[20];
    char sex[5];
    int  math;
    int  chinese;
    int  sum;
    int  average;
};

struct Node
{
    struct student data;
    struct Node* next;
};

struct Node* createList()
{
    struct Node* headNode = (struct Node*)malloc(sizeof(struct Node));
    assert(headNode);
    headNode->next = NULL;
    return headNode;
}
//创建结点
struct Node* createNode(struct student data)
{
    struct Node*newNode = (struct Node*)malloc(sizeof(struct Node));
    assert(newNode);
    newNode->data = data;
    newNode->next = NULL;
    return newNode;
}
//插入结点
void insertNodeByHead(struct Node* headNode, struct student data)
{
    struct Node* newNode = createNode(data);
    newNode->next = headNode->next;
    headNode->next = newNode;
}
//删除指定位置
void deleteAppoinNode(struct Node* headNode, const char *name)
{
    struct Node* posNode = headNode->next;
    struct Node* posFrontNode = headNode;
    if (posNode == NULL)
    {
        printf("数据错误,无法删除!\n");
        return;
    }
    while (strcmp(posNode->data.name, name))
    {
        posFrontNode = posNode;
        posNode = posNode->next;
        if (posNode == NULL)
        {
            printf("未找到指定数据无法删除\n");
            return;
        }
    }
    posFrontNode->next = posNode->next;
    free(posNode);
}
//查找
struct Node* searchInfoByData(struct Node* headNode, char* name)
{
    struct Node* pMove = headNode->next;
    if (pMove == NULL)
        return NULL;
        //if (strcmp(pMove->data.name, name) != 0) {  修改
        //    return NULL;
        //}
    while (pMove && strcmp(pMove->data.name, name))  //修改
    {
        pMove = pMove->next;
    }
    return pMove;
} //;
void readInfoFromFile(struct Node* headNode, char *fileName) //redInfoFromFile() 函数名错误
{
    FILE *fp;
    struct student data;
    fp = fopen(fileName, "r");
    if (fp == NULL)
    {
        //fp = fopen(fileName, "w+"); //修改
        return;                       //修改
    }
    while (fscanf(fp, "%s\t%s\t%s\t%d\t%d\t%d\t%d\n", data.num,//fscanf(fp, "%d\t%s\t%s\t%d\t%d\t%d\t%d\n",
           data.name, data.sex, &data.math, &data.chinese, &data.sum, &data.average) == 7) // != EOF
    {
        insertNodeByHead(headNode, data);
    }
    fclose(fp);
}
void writeInfoToFile(struct Node* headNode, char *fileName)
{
    FILE *fp;
    fp = fopen(fileName, "w");
    struct Node* pMove = headNode->next;
    while (pMove)
    {
        fprintf(fp, "%s\t%s\t%s\t%d\t%d\t%d\t%d\n", pMove->data.num,//fprintf(fp, "%d\t%s\t%s\t%d\t%d\t%d\t%d\n",
                pMove->data.name, pMove->data.sex, pMove->data.math,
                pMove->data.chinese, pMove->data.sum, pMove->data.average);
        pMove = pMove->next;
    }
}
//打印链表
void printfList(struct Node* headNode)
{
    struct Node* pMove = headNode->next;
    printf("学号\t姓名\t性别\t数学\t语文\t总分\t平均分\n");
    while (pMove != NULL)
    {
        printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\n", pMove->data.num,
               pMove->data.name, pMove->data.sex, pMove->data.math,
               pMove->data.chinese, pMove->data.sum, pMove->data.average);
        //printf("%d\t%s\t%s\t%d\t%d\t%d\t%d\n", pMove->data.num,       修改
        //       pMove->data.name, pMove->data.sex, pMove->data.math,
        //       pMove->data.chinese, pMove->data.sum, pMove->data.average);
        pMove = pMove->next;
    }
    printf("\n");
}
 
int menu()
{
    printf("--------------------[学生信息管理系统]------------------\n");
    printf("\t\t0.退出系统\n");
    printf("\t\t1.添加学生\n");
    printf("\t\t2.显示学生信息\n");
    printf("\t\t3.修改学生信息\n");
    printf("\t\t4.删除学生信息\n");
    printf("\t\t5.查找学生信息\n");
    printf("\t\t6.排序记录\n");
    printf("------------------------------------------------------\n");
    return 0;
}

struct Node* list = createList();

void keydown()
{
    int    choice = 0;
    struct Node* result;
    struct student data;
    struct Node* headNode, fileName;
    scanf_s("%d", &choice);
    switch (choice)
    {
    case 0:
        writeInfoToFile(list, "1.txt");   // 修改
        printf("退出系统\n");
        system("pause");
        exit(0);
        break;
    case 1:
        printf("---------------[添加学生]--------------\n");
        printf("请输入学生学号,姓名,性别,数学成绩,语文成绩:");
        fflush(stdin);
        scanf_s("%s%s%s%d%d", data.num,20,data.name,20,data.sex,5,&data.math, &data.chinese);
        //scanf_s("%d%s%s%d%d%d%d", data.num, &data.name,                     修改
        //       data.sex, data.math, data.chinese, data.sum, data.average);  修改
        data.sum = data.math + data.chinese;
        data.average = data.sum / 2;   //data.average = data.sum / 3;  修改
        insertNodeByHead(list, data);
        break;
    case 2:
        printf("--------------【显示学生信息】---------\n");
        printfList(list);
        break;
    case 3:
        printf("---------------【修改学生信息】---------\n");
        printf("请输入需要修改信息的学生姓名");
        scanf_s("%s", data.name , 20);
        result = searchInfoByData(list, data.name);
        if (result == NULL) //if (searchInfoByData(list, data.name) == NULL) 修改
        {
            printf("未找到相关信息,无法修改,请重试!\n");
            system("pause");
        }
        else
        {
            //FILE *fp;                                         修改
            //printfList(list);                                 修改
            printf("请输入需要修改的信息:学号,姓名,性别,数学成绩,语文成绩:\n");
            scanf_s("%s%s%s%d%d", result->data.num, 20, result->data.name, 20,
                   result->data.sex, 5, &result->data.math, &result->data.chinese);
            result->data.sum = result->data.math + result->data.chinese;
            result->data.average = result->data.sum / 2;
           // scanf("%d%s%s%d%d%d%d", data.num,                 修改
           //       &data.name, data.sex, data.math, data.chinese, data.sum, data.average);
         }
         break;
    case 4:
        printf("---------------【删除学生信息】--\n");
        printf("请输入删除的学生姓名");
        scanf_s("%s", data.name,20);
        deleteAppoinNode(list, data.name);
        //if (deleteAppoinNode(list, data.name) == NULL);
        //{
        //    printf("未找到相关信息,无法删除\n");
        break;
    case 5:
        printf("------------【查找学生信息】--------\n");
        printf("请输入查找的学生姓名");
        scanf_s("%s", data.name , 20);
        result = searchInfoByData(list, data.name);          // 修改
        if (result == NULL)  //if (searchInfoByData(list, data.name) == NULL)  修改
        {
            printf("未找到相关信息\n");
            system("pause");
        }
        else
        {
            printf("学号\t姓名\t性别\t数学成绩\t语文成绩\t总分\t平均分\n");
            printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\n", result->data.num, result->data.name,result->data.sex,
                     result->data.math, result->data.chinese, result->data.sum, result->data.average);
            //printf("%d\t%s\t%s\t%d\t%d\t%d\t%d\n", data.num,                修改
            //       data.name, data.sex, data.math, data.chinese, data.sum, data.average);
        }
        break;
    case 6:
        printf("--------------【排序记录】----------\n");
        system("pause");
        break;
    default:
        printf("输入错误,请重试\n");
        system("pause");
        break;
    }
    //writeInfoToFile(list, "1.txt");   修改
    return;                           
}

int _tmain(int argc, _TCHAR* argv[])//; 行尾多余分号 ";"
{
    readInfoFromFile(list, "1.txt"); //readInfoFronFile() 函数名错误
    while (1)
    {
        menu();
        keydown();
        system("pause");
        system("cls");
    }
    return 0;
    //}                   修改
}