警告是 [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.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);
}
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
printf("%s,%s,%d,%s\n", st[j].name, st[j].sex, st[j].date, st[j].type); 这是打印到控制台,写入文件得用fprintf