2.从键盘输入姓名,存入文件data.txt中。如果文件中该姓名已存在,则显示文件已存在的相应信息;再次输入其他姓名,若文件中没有该姓名,则将其存入文件中,请填空。 #include<stdio.h> #include<stdlib.h> #include<string.h> int main(void) { FILE *fp; int flag=0; char name[20],data[20]; if((fp=fopen("data.txt", ① ))==NULL) { printf("Cannot open file.\n"); exit(1); } do { printf("Please input name:"); ② ; if(strlen(name)==0) break; else strcat(name,"\n"); rewind(fp); flag=1; while(flag&&((fgets(data,20,fp)!=NULL))) if(strcmp(data,name)==0) flag=0; if(flag) ③ ; else printf("\tThis name existed!\n"); }while(ferror(fp)==0); fclose(fp); return 0; }
时间: 2024-01-23 12:04:02 浏览: 94
【Scrapy爬虫项目】爬取books.toscrape.com上书籍的相关信息并存储为csv文件
以下是代码中缺失的部分:
① 应填写 "a+",即以追加方式打开文件,如果文件不存在则创建。
② 应填写 `fgets(name, 20, stdin)`,即从标准输入(键盘)读入字符串,存储到 `name` 数组中,最多读取 19 个字符。
③ 应填写 `fputs(name, fp)`,即将 `name` 字符串写入到文件中。
修改后的程序如下:
```C++
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
FILE *fp;
int flag = 0;
char name[20], data[20];
if ((fp = fopen("data.txt", "a+")) == NULL) {
printf("Cannot open file.\n");
exit(1);
}
do {
printf("Please input name:");
fgets(name, 20, stdin);
if (strlen(name) == 0) {
break;
} else {
strcat(name, "\n");
}
rewind(fp);
flag = 1;
while (flag && ((fgets(data, 20, fp) != NULL))) {
if (strcmp(data, name) == 0) {
flag = 0;
}
}
if (flag) {
fputs(name, fp);
} else {
printf("\tThis name existed!\n");
}
} while (ferror(fp) == 0);
fclose(fp);
return 0;
}
```
建议:在文件操作中,要注意文件打开模式,如果是写入模式,会覆盖原有的文件内容,如果是追加模式,则会在原有文件内容的基础上添加新的内容。在读取文件内容时,要注意使用 `rewind` 函数将文件指针移动到文件开头位置,否则会出现读取错误的情况。
阅读全文