赵龙超 发表于 2020-6-17 14:32:46

拜托

有没有大佬知道C语言写入文件时乱码怎么解决

jackz007 发表于 2020-6-17 14:52:37

      比如呢,你用什么语句创建文件,用什么语句向文件写入了什么内容,然后就变乱码了?
      最好能把相关源代码片段贴出来看看。

赵龙超 发表于 2020-6-17 15:56:06

jackz007 发表于 2020-6-17 14:52
比如呢,你用什么语句创建文件,用什么语句向文件写入了什么内容,然后就变乱码了?
      最好 ...

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define LIST_INIT_SIZE 4   //线性表存储空间的初始分配量
#defineMAXSIZE100      
//学生的定义
typedef struct
{
charnum;
char name;
char sex;
int english;
int math;
int database;
char sum;
char ZY;
char BJ;
}Student;
//顺序表的定义
typedef struct
{   
Student *elem;
int length;
}SqList;

int InitList(SqList &A)//构造一个空的顺序表A
{
    A.elem=new Student ;   //为顺序表分配空间
    if(!A.elem) exit(-1);      //存储分配失败
    A.length=0;                                          //空表长度为0
    return 0;
}
//刷新
void update(SqList &L)
{
        int j=0;
                FILE*fp;
        fp=fopen("d://学生信息.txt","r");
        if(fp==NULL)
                printf("输出错误");
        while(fscanf(fp,"%s   %s%s%s%s%d%d   %d   \n",L.elem.name,L.elem.sex ,L.elem.num ,L.elem.ZY,L.elem.BJ,L.elem.english,L.elem.math,L.elem.database)==8)
        {
                j++;
        }
        L.length=j;
        printf("******************刷新成功************************************\n");
        fclose(fp);
}


//保存信息
void fileWrite(SqList &L)
{
       
        FILE*fp;
        int j;
        fp=fopen("d://学生信息.txt","w");
        if(fp==NULL)
                printf("文件打开错误\n");
        for(j=0;j<L.length;j++)
        {
                       fprintf(fp,"%s   %s%s%s%s%d%d   %d   \n",L.elem.name,L.elem.sex ,L.elem.num ,L.elem.ZY,L.elem.BJ,L.elem.english,L.elem.math,L.elem.database );
        }
        fclose(fp);
        printf("***********************保存成功******************************\n");
}


//显示所有员工信息
void display(SqList & L)
{
       
        FILE*fp;
        int j=0,i;
        fp=fopen("d://学生信息.txt","r");
        if(fp==NULL)
                printf("文件打开错误\n");
        while(fscanf(fp,"%s   %s%s%s%s%d%d   %d   \n",L.elem.name,L.elem.sex ,L.elem.num ,L.elem.ZY,L.elem.BJ,L.elem.english,L.elem.math,L.elem.database)==8)
        {
                j++;
        }
        L.length=j;
        for(i=0;i<L.length;i++)
        {
                       printf("%s   %s%s%s%s%d%d   %d   \n",L.elem.name,L.elem.sex ,L.elem.num ,L.elem.ZY,L.elem.BJ,L.elem.english,L.elem.math,L.elem.database );
        }
        fclose(fp);
        printf("   nnbnvn\n");
}


//添加学生信息
void insert(SqList &L)
{
        int j,n;
        L.elem=new Student ;
        printf("您要添加几条学生信息?");
        scanf("%d",&n);
        for(j = L.length;j < L.length + n;j++)
        {
                printf("请输入第%d学生的信息\n", j + 1);
                printf("请输入该学生的姓名\n");
                scanf("%s", L.elem.name);
                printf("请输入该学生的性别:");
                scanf("%s",L.elem.sex);
                printf("请输入该学生的学号:");
                scanf("%s",L.elem.num);
                printf("请输入该学生的专业:");
                scanf("%s",L.elem.ZY);
                printf("请输入该学生的班级:");
                scanf("%s",L.elem.BJ);
                printf("请输入该学生的英语成绩:");
                scanf("%d",L.elem.english);
                printf("请输入该学生的高数成绩:");
                scanf("%d",L.elem.math);
                printf("请输入该学生的数据结构成绩:");
                scanf("%d",L.elem.database);
                printf("\n");
        }
        L.length = L.length + n;
}



void menu(SqList &L)
{
        int num;
        int k = 1;
        while(k)
        {
        printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * *|*\n");
    printf(" *|               企业信息信息管理系统                  |*\n");
    printf(" *|                                                       |*\n");
    printf(" *|       * * * * * * *系统功能菜单* * * * * * *          |*\n");
    printf(" *|    --------------------------------------------       |*\n");
    printf(" *|                                                       |*\n");
    printf(" *|       0.系统帮助及说明|   1.添加员工信息            |*\n");
    printf(" *|                                                       |*\n");
    printf(" *|       2.查看员工信息    |   3.修改员工信息            |*\n");
    printf(" *|                                                       |*\n");
    printf(" *|       4.删除员工信息    |   5.统计员工信息            |*\n");
    printf(" *|                                                       |*\n");
    printf(" *|       6.所有员工信息    |   7.保存员工信息            |*\n");
    printf(" *|                                                       |*\n");
    printf(" *|                  8.退出系统                         |*\n");
    printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
    printf("------------------------------------------------------------\n");
        printf("请选择菜单编号:");
    scanf("%d",&num);
    switch(num) {
      case 0:
            
            break;
      case 1:
            insert(L);
            break;
      case 2:
            display(L);
            break;
      case 3:
         
            break;
      case 4:
         
                        break;
                case 5:
                       
                        break;
                case 6:
                       
                        break;

       case 7:
            fileWrite(L);
            break;
               
      case 8:
            k=0;
            break;
               
      default:
            printf("请在0-9之间选择\n");
        }


}
}



int main()
{
       
        SqList L;
    InitList(L);
        menu(L);
        return 0;}

赵龙超 发表于 2020-6-17 15:56:38

jackz007 发表于 2020-6-17 14:52
比如呢,你用什么语句创建文件,用什么语句向文件写入了什么内容,然后就变乱码了?
      最好 ...

这只是部分,还没弄完
页: [1]
查看完整版本: 拜托