喂!我正在为即将到来的大学任务做准备,但面临一些困难。
我必须编写一个C语言数据库应用程序,将书籍详细信息存储到文件中,并允许我调用它们并删除它们。我在阅读文件时遇到了一些问题,当我将它们全部列出时,条目就不会显示(选项3)。
我已经查看了数据库文件,因此我认为已正确写入。
以下是我的代码的基本功能:
#include<stdio.h>
#include <stdlib.h>
// Global Varables
FILE *fp, *ft;
// Structs
typedef struct Books
{
int id;
char title[25];
char forename[25];
char surname[25];
char isbn[13];
}Books;
void displayMenu()
{
printf("Options");
}
void runapp()
{
int option;
char isbn[20];
char deleteOrNot[2];
Books book;
fp = fopen("database.dat", "a+");
if (fp == NULL)
{
printf("Failed to open file.");
}
long int booksize = sizeof(book);
do
{
displayMenu();
printf("Enter menu option: ");
scanf("%i", &option);
switch(option)
{
// =================================================================
// -------- OPTION 1: Add a new book
// =================================================================
case 1:
fseek(fp, 0, SEEK_END);
printf("Please enter the books title: ");
scanf("%s", book.title);
printf("Please enter the authors first name: ");
scanf("%s", book.forename);
printf("Please enter the authors surname: ");
scanf("%s", book.surname);
printf("Please enter the ISBN number: ");
scanf("%s", book.isbn);
fwrite(&book, booksize, 1, fp);
fflush(stdin);
break;
// =================================================================
// -------- OPTION 2: Search and delete
// =================================================================
case 2:
// Search and delete
break;
// =================================================================
// -------- OPTION 3: List all books
// =================================================================
case 3:
rewind(fp);
while(fread(&book, booksize,1, fp))
printf("%s", book.title);
printf("\n\nPress any key to return to menu.");
getch();
break;
// =================================================================
// -------- OPTION 4: Exit the application
// =================================================================
case 4:
fclose(fp);
exit(0);
break;
}
if (system("cls")) system("clear");
}while(option != "\n");
}
int main()
{
runapp();
return 0;
}
解决这个问题的任何帮助都会很棒!
也可以随时向我提供有关我的代码的一些提示。
答案 0 :(得分:1)
在main
中,您正在执行以下操作:
int option;
....
}while(option != "\n");
答案 1 :(得分:1)
尝试添加:
fflush( stdout );
答案 2 :(得分:0)
您是否能够执行您编写的代码中的其他操作
scanf("%i", &option);
这似乎是错误的,因为格式说明符应该是%d而不是%i。
答案 3 :(得分:0)
您尝试直接在文件中写入book
结构而不是文件的文本表示,因此您需要以二进制模式打开文件,(将b
添加到a+
来电中的fopen
。否则,您的数据可能会略有损坏,因为I / O库会尝试将回车和换行符转换为主机首选约定。