繁体   English   中英

由于某种原因,我的数据没有通过我的 c function 添加到我的文件中

[英]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);

此外,您必须检查返回值,特别是来自fgetsscanf等用户输入函数的返回值。


此外,这里的书名输入还有等待发生的错误

fgets(b.name, sizeof b.name, stdin);

所以我建议你用

if(scanf("%49[^\n]", b.name);= 1) exit(1);

输入法最好不要混用:坚持一个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM