[英]How can I read a file content multiple times in C
我正在尝试在C中创建一个简单的待办事项列表,但read选项仅在第一次运行时显示正确的信息。 如果添加新项目,则需要关闭并再次打开程序以显示更新的列表。
添加选项可以正常工作,而删除选项尚未实现。
#include <stdio.h>
int main (void) {
int opt = 1;
char task[50];
char add[50];
char read;
FILE *p, *q;
printf("\n===To-do List Simple Application===\n");
printf("Choose an Option:\n");
do {
printf("1- Show List\n");
printf("2- Add an item\n");
printf("3- Delete an item\n");
printf("0- Exit\n");
scanf("%d" ,&opt);
switch(opt){
case 1:
q = fopen("list.txt", "r");
printf("\n\n==================\n");
read = fgetc(q);
while (read != EOF){
printf("%c" ,read);
read = fgetc(q);
}
printf("%s \n", task);
printf("\n==================\n\n");
break;
case 2:
p = fopen("list.txt", "a");
printf("\n\n==================\n");
printf("Inform the item to be added:\n");
scanf("%s" ,add);
fprintf(p, "\n%s",add);
printf("\n==================\n\n");
break;
case 3:
printf("\n\n==================\n");
printf("delete\n");
printf("\n==================\n\n");
break;
case 0:
printf("\n\n==================\n");
printf("exit\n");
printf("\n==================\n\n");
break;
}
}while (opt!=0);
return 0;
}
您可以使用fseek(file, 0, SEEK_SET)
或rewind(file)
再次开始从rewind(file)
开头读取/写入。
请注意,如果您以附加模式打开文件,则这些命令实际上将不执行任何操作。 所有写操作仍将被强制到文件末尾。
但是,这些不会修复您的代码。 写入或读取文件后,需要关闭文件。
伴随着它,您正在使用未初始化的task
。 初始化它或检查它是否已初始化,然后再开始使用它来修复它。
问题是您在写入文件后没有关闭文件。 这将刷新输出缓冲区。 程序退出时,文件自动关闭,这就是为什么重新打开程序可以解决问题的原因。
您还应该在阅读案例结束时关闭文件,因为每次阅读时都会重新打开它,而不是重用现有的打开流。
打印task
会导致未定义的行为,因为您从未初始化task
。
#include <stdio.h>
int main (void) {
int opt = 1;
char task[50];
char add[50];
char read;
FILE *p, *q;
printf("\n===To-do List Simple Application===\n");
printf("Choose an Option:\n");
do {
printf("1- Show List\n");
printf("2- Add an item\n");
printf("3- Delete an item\n");
printf("0- Exit\n");
scanf("%d" ,&opt);
switch(opt){
case 1:
q = fopen("list.txt", "r");
printf("\n\n==================\n");
read = fgetc(q);
while (read != EOF){
printf("%c" ,read);
read = fgetc(q);
}
fclose(q);
// printf("%s \n", task);
printf("\n==================\n\n");
break;
case 2:
p = fopen("list.txt", "a");
printf("\n\n==================\n");
printf("Inform the item to be added:\n");
scanf("%s" ,add);
fprintf(p, "\n%s",add);
fclose(p);
printf("\n==================\n\n");
break;
case 3:
printf("\n\n==================\n");
printf("delete\n");
printf("\n==================\n\n");
break;
case 0:
printf("\n\n==================\n");
printf("exit\n");
printf("\n==================\n\n");
break;
}
}while (opt!=0);
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.