y1568
y1568
采纳率0%
2021-06-11 16:18 浏览 19

该程序出现[警告且无法正常运行,弄不清了,请看一下有什么地方要改?

警告是 [Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]

#include<stdio.h>
#include <string.h>
typedef struct worker{
    char name[100];
    char sex[100];
    int date;
    char type[100];
}worker;
const int n = 5;
int main(){
    void input(worker *st, int a,char filename[],char mode[]);
    void judge(worker *st, int a);
    void output(worker *st, int a, char filename[],char mode[]);
    worker st[n];
    worker *wk = st;
    char filename1[]="3.txt";
    char filename2[]="4.txt";
    input(wk, n,filename1, "r");
    judge(wk, n);
    output(wk, n, filename2, "w");
    return 0;
}
void input(worker *st, int a,char filename[],char mode[]){
    FILE *fp;
    fp=fopen(filename,mode);
    int j;
    for (j = 0; j < a; j++){
        fscanf(fp,"%s %s %d ", st[j].name, st[j].sex, &st[j].date);
        st++;
    }
}
void judge(worker *st, int a){
    int j;
    for (j = 0; j < a; j++){
        if (st[j].date<5){
            strcpy(st[j].type, "正常");
        }
        else{
            strcpy(st[j].type, "不正常");
        }
    }
}
void output(worker *st, int a, char filename[],char mode[]){
    int j;
    freopen(filename, mode, stdout);
    for (j = 0; j < a; j++){
        printf("%s,%s,%d,%s\n", st[j].name, st[j].sex, st[j].date, st[j].type);
        }
}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答 默认 最新

  • technologist_37 CSDN专家-link 2021-06-11 16:48

     printf("%s,%s,%d,%s\n", st[j].name, st[j].sex, st[j].date, st[j].type);  这是打印到控制台,写入文件得用fprintf

    点赞 评论 复制链接分享
  • qzjhjxj qzjhjxj 2021-06-11 17:46

    3.txt文件已存在并数据正确,修改如下,供参考:

    #include<stdio.h>
    #include<string.h>
    
    #define N 5 //总记录数
    
    typedef struct worker{
        char name[100];
        char sex[100];
        int  date;
        char type[100];
    }worker;
    int n = N;
    int main(){
        void input(worker *st, int a,char filename[],const char mode[]);
        void judge(worker *st, int a);
        void output(worker *st, int a, char filename[],const char mode[]);
        worker st[N];
        worker *wk = st;
        char filename1[]="3.txt";
        char filename2[]="4.txt";
        input(wk, n,filename1, "r");
        judge(wk, n);
        output(wk,n,filename2, "w");
        
        return 0;
    }
    void input(worker *st, int a,char filename[],const char mode[]){
        FILE *fp;
        fp=fopen(filename,mode);
        if(fp==NULL) return;  //打开文件失败,则返回
        int j=0;
        while(1){
           if(fscanf(fp,"%s %s %d ",st[j].name,st[j].sex,&st[j].date)!=3) break;
           j++;
           if((j+1) > a) break;//文件读入的记录超过总条数,跳出
        }
        n=j; //将全局变量 n = 文件读入的正确条数
        fclose(fp);
    }
    void judge(worker *st, int a){
        int j;
        for (j = 0; j < a; j++){
            if (st[j].date<5){
                strcpy(st[j].type, "正常");
            }
            else{
                strcpy(st[j].type, "不正常");
            }
        }
    }
    void output(worker *st, int a, char filename[],const char mode[]){
        FILE *fp;
        fp=fopen(filename,mode);
        if(fp==NULL) return;
        int j;
        for (j = 0; j < a; j++){
             fprintf(fp,"%s %s %d %s\n",st[j].name,st[j].sex,st[j].date,st[j].type);
             printf("%s,%s,%d,%s\n", st[j].name, st[j].sex, st[j].date, st[j].type);
            }
        //freopen(filename, mode, stdout);
        fclose(fp);
    }
    点赞 评论 复制链接分享
  • QA_Assistant 有问必答小助手 2021-06-15 17:41

    您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

    如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

    ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

    点赞 评论 复制链接分享

相关推荐