70,037
社区成员
发帖
与我相关
我的任务
分享#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include <stdbool.h>
#include<string.h>
#include <errno.h>
int main(int argc,char *argv[])
{
int arg;
char data[20]={0};
bool flag=false; //判断输入Id是否存在
FILE *fp;
if (argc < 2)
return 0;
/*$./student -i 101 zhangsan studentinfo.txt
选项i完成插入功能,如果101已经存在,则报错,不执行插入操作.如果101不存在,
把指定参数的内容追加到文件的末尾新的一行*/
if(!strcmp(argv[1],"-i")){
//fp = fopen("studentinfo.txt","a+");
fp = fopen("studentinfo.txt","r");
if (!fp) {
printf("Open file error: %s\n", strerror(errno));
exit(0);
}
while(!feof(fp)){
fgets(data,20,fp);
if(strstr(data,argv[2])!=NULL) flag=true;
}
if(flag==true)
printf("该数据已存在");
else{
fseek(fp,0,2);
fprintf(fp,"%s%s",argv[2],argv[3]);
}
fclose(fp);
}
/*$./student -d 101 studentinfo.txt
选项d完成删除操作,如果学号101不存在,退出程序并给出提示,
如果学号101存在,则删除该行,并给出相应提示*/
if(!strcmp(argv[1],"-d")){
fp=fopen("studentinfo.txt","rb+");
if (!fp) {
printf("Open file error: %s\n", strerror(errno));
exit(0);
}
while(!feof(fp)){
fgets(data,20,fp);
if(strstr(data,argv[2])!=NULL)
flag=true;
}
//if(flag=true){
if(flag == true){
FILE *ff;
char c[20];
//ff=fopen("temp.txt","a");
ff=fopen("temp.txt","r");
if (!ff) {
printf("Open file error: %s\n", strerror(errno));
exit(0);
}
while(fgets(c,20,fp)){
if(strcmp(c,argv[2])!=0) fputs(c,ff);
}
remove("studentinfo.txt");
rename("temp.txt",argv[3]);
printf("删除成功");
fclose(ff);
}
else
printf("这行数据不存在");
fclose(fp);
}
/*$./student -s 101 studentinfo.txt
选项s完成查询操作,如果学号101不存在,退出程序并给出提示,
如果学号101存在,则把该行数据显示出来*/
if(!strcmp(argv[1],"-s")){
fp = fopen("studentinfo.txt","rb+");
if (!fp) {
printf("Open file error: %s\n", strerror(errno));
exit(0);
}
char data1[20]={0};
while(!feof(fp)){
fgets(data,20,fp);
if(strstr(data,argv[2])!=NULL){
flag=true;
memcpy(data1,data,strlen(data)+1);
}
}
//if(flag=true)
if(flag==true)
printf("%s",data1);
//if(flag=false)
if(flag==false)
printf("这行数据不存在");
}
}
参考一下吧,问题可以对照找一下;
若以追加的形式打开文件,文件指针指向文件末尾,这样试读不到数据的。
文件指针需要判断返回值的,即文件是否打开成功。
文件指针需要接收fopen的,有一个if中,只有fopen,并没有得到它的返回值。
问题建议一一对比查找一下