[英]for some reason my data isn't being added to my file with my c function
我正在尝试在 C 中创建一个小型图书库,所以我写了一个 function 以插入一本书的名称、id 和数量。 出于某种原因,程序运行良好,function 似乎正在工作,但外部文件保持不变(没有添加新数据)。 我检查了文件的路径,但问题仍然存在。 我怎样才能解决这个问题?
这是 function 和结构:
struct library{
int id;
int qty;
char name[50];
};
void InsertBook()
{
struct library b;
FILE *books;
if((books=fopen("C:\\mybooks.txt","a+")==NULL))
{
printf("file not found\n");
}
else
{
printf("You will need to enter a name, ID, and quantity of the book.\n");
printf("please enter book name:");
fflush(stdin);
fgets(b.name,SIZE,stdin);
fputs(b.name,books);
printf("please enter book ID:");
scanf("%d",&b.id);
printf("please enter book quantity:");
scanf("%d",&b.qty);
fprintf(books,"%d %s %d\n",b.name,b.id,b.qty);
fclose(books);
}
}```
你犯的唯一错误是:
fprintf(books, "%d %s %d\n", b.name, b.id, b.qty);
做就是了:
fprintf(books, "%s %d %d\n", b.name, b.id, b.qty); // %s before %d
一切都很好。
fputs()
这里不需要。 books = fopen("C:\\mybooks.txt", "a+") == NULL
表达式不适用于大多数编译器,因为赋值使来自 integer 的指针没有强制转换。
相反,您可以在将其与 null 表达式进行比较之前对其进行分配,如下所示:
books = fopen("C:\\mybooks.txt", "a+"); if (books == NULL) {... }```
重要提示:确保您在该目的地具有写入权限。
该程序确实可以工作(但请参阅下面的错误),但是您正在写入驱动器 C 的根文件夹。 output 文件可从控制台看到,但不能从 Windows 文件资源管理器中看到。 通常,您不应使用 C 驱动器的根文件夹。
这里有一个错误的地方括号
if((books=fopen("mybooks.txt","a+")==NULL))
应该是
if((books = fopen("mybooks.txt","a+")) == NULL)
正如编译器所抱怨的那样, fprintf
here 中的格式规范错误
fprintf(books,"%d %s %d\n",b.name,b.id,b.qty);
应该
fprintf(books, "%s %d %d\n", b.name, b.id, b.qty);
你不必要地重复写书名来归档上面的几行
fputs(b.name,books);
您在此处为fgets
使用了不正确的缓冲区大小
fgets(b.name,SIZE,stdin);
应该是
fgets(b.name, sizeof b.name, stdin);
此外,您必须检查返回值,特别是来自fgets
和scanf
等用户输入函数的返回值。
fgets(b.name, sizeof b.name, stdin);
它保留将成为数据一部分的换行符。 请参阅从 fgets() 输入中删除尾随换行符
当您循环输入更多书籍时,它将捕获scanf
留在缓冲区中的换行符。 请参阅请参阅scanf() 将换行符留在缓冲区中。
所以我建议你用
if(scanf("%49[^\n]", b.name);= 1) exit(1);
输入法最好不要混用:坚持一个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.