霸气的灯塔 2023-11-30 15:50 采纳率: 60%
浏览 38
已结题

文件读写,但中文乱码

有人帮我看看这样写对吗?运行出来就乱码(调成ANSI编码,现在怎么调也调不了)检验不了。
然后如果我要在录入之后对总成绩,就是score[i][7]进行排序,写到score[i][8],再在后面按排名进行顺序输出成绩表怎么写

img

img

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define students 1000
int main()
{
    int choice1,flag=1;
    while(flag==1)
    {
        printf("欢迎使用学生成绩管理系统!\n\n"); 
        printf("*****录入学生信息请按1*****\n");
        printf("*****查询学生成绩请按2*****\n");
        printf("*****删除学生成绩请按3*****\n");
        printf("*****查询成绩总表请按4*****\n");
        printf("*****进行成绩分析请按5*****\n");
        printf("*****退出管理系统请按6*****\n");
        scanf("%d",&choice1);
        switch(choice1)
        {
            case 1:
                input();
                break;
            case 2:
                {
                int choice2;
                printf("*****想按姓名查询请按1*****\n");
                    printf("*****想按学号查询请按2*****\n");
                scanf("%d",&choice2);
                switch(choice2)
                {
                    case 1:
                        locatename();
                        break;
                    case 2:
                        locatenum();
                        break;
                    default:
                        printf("按错了,请重新选择\n");
                        continue;
                }
                }
                break;
            case 3:
                delect();
                break;
            case 4:
                {
                int choice3;
                printf("*****想按姓名排序请按1*****\n");
                    printf("*****想按成绩排序请按2*****\n");
                scanf("%d",&choice3);
                switch(choice3)
                {
                    case 1:
                        displayname();
                        break;
                    case 2:
                        displayscore();
                        break;
                    default:
                        printf("按错了,请重新选择\n");
                        continue;
                }
                }
                break;
            case 5:
                {
                int choice4;
                printf("*****想计算总分平均分请按1*****\n");
                    printf("*****想计算各科平均分请按2*****\n");
                    printf("*****想统计各分数段数请按3*****\n");
                scanf("%d",&choice4);
                switch(choice4)
                {
                    case 1:
                        advtotal();
                        break;
                    case 2:
                        advsubject();
                        break;
                    case 3:
                        statistics();
                        break;
                    default:
                        printf("按错了,请重新选择\n");
                        continue;
                }
                }
                break;
            case 6:
                flag=0;
                break;
            default:
                printf("按错了,请重新选择\n");
                continue;
        }
    }
}
int input()
{
    printf("1.1");
}
int locatename()
{
    printf("2.1");
}
int locatenum()
{
    printf("2.2");
}
int delect()
{
    printf("3.1");
}
int displayname()
{
    printf("4.1");
}
int displayscore()
{
    printf("4.2");
}
int advtotal()
{
    printf("5.1");
}
int advsubject()
{
    printf("5.2");
}
int statistics()
{
    printf("5.3");
}

  • 写回答

25条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-11-30 16:12
    关注
    获得0.40元问题酬金

    引自强大而免费的微信小程序:皆我百晓生

    在C语言中,文件读写时出现中文乱码的问题通常是因为编码格式的不匹配导致的。如果你的代码无法调整到ANSI编码,可以尝试以下方法来解决中文乱码问题:

    1. 在文件打开时指定编码格式为UTF-8:

      FILE* file = fopen("filename.txt", "r, ccs=UTF-8");
      
    2. 使用宽字符的文件读写函数来处理中文字符:

      #include <wchar.h>
      FILE* file = fopen("filename.txt", "r");
      wint_t wch;
      while ((wch = fgetwc(file)) != WEOF) {
       // 进行处理
      }
      fclose(file);
      
    3. 如果输出到控制台的中文字符乱码,可以使用以下语句设置控制台的编码格式为UTF-8:

      SetConsoleOutputCP(CP_UTF8);
      

    关于对总成绩进行排序和输出排名的问题,可以使用冒泡排序来对成绩进行排序,然后再遍历数组输出排名。以下是一个示例代码:

    #include<stdio.h>
    #include<stdlib.h>
    
    typedef struct {
        // 学生信息,例如姓名、学号等
        char name[20];
        int score;
    } Student;
    
    void sortByScore(Student* arr, int len) {
        for (int i = 0; i < len - 1; i++) {
            for (int j = 0; j < len - i - 1; j++) {
                if (arr[j].score < arr[j + 1].score) {
                    Student temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }
    
    void printRankings(Student* arr, int len) {
        printf("成绩排名:\n");
        for (int i = 0; i < len; i++) {
            printf("%d. %s: %d\n", i + 1, arr[i].name, arr[i].score);
        }
    }
    
    int main() {
        // 假设有五个学生
        int numStudents = 5;
        Student* students = malloc(sizeof(Student) * numStudents);
    
        // 录入学生信息并计算总成绩
        // ...
    
        // 对总成绩进行排序
        sortByScore(students, numStudents);
    
        // 输出排名
        printRankings(students, numStudents);
    
        free(students);
        return 0;
    }
    

    希望这些解决方案能帮助你解决问题!

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 12月8日
  • 修改了问题 11月30日
  • 修改了问题 11月30日
  • 赞助了问题酬金20元 11月30日
  • 展开全部

悬赏问题

  • ¥15 远程访问linux主机超时
  • ¥15 odoo17存货管理优势于中国国内该行业传统ERP或MES的详细解读和举例
  • ¥15 CPU卡指令整合指令数据都在图片上
  • ¥15 火车票关联12306问题
  • ¥15 odoo17处理受托加工产品
  • ¥15 如何用MATLAB编码图三的积分
  • ¥15 圆孔衍射光强随孔径变化
  • ¥15 MacBook pro m3max上用vscode运行c语言没有反应
  • ¥15 ESP-PROG配置错误,ALL ONES
  • ¥15 结构功能耦合指标计算