C - 文件I / O,而不是从文件中读取

时间:2011-03-12 12:43:53

标签: c file-io

喂!我正在为即将到来的大学任务做准备,但面临一些困难。

我必须编写一个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;
}

解决这个问题的任何帮助都会很棒!

也可以随时向我提供有关我的代码的一些提示。

4 个答案:

答案 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库会尝试将回车和换行符转换为主机首选约定。