如何用C中的用户输入变量打开文件?

时间:2014-03-10 21:40:39

标签: c database text input io

我正在写一个POS程序作为学校作业。我正在使用多个txt文件作为数据库。该程序假设允许用户输入SKU号(例如123),然后它将打开数据库中的txt文件(例如database / 123.txt)。然后它从txt文件中提取信息,例如价格,并允许用户添加多个文件并以总计结束。用户还可以通过创建新SKU来添加到数据库。他们还可以查看交易历史记录。我遇到的问题是我似乎无法弄清楚如何记录用户的号码,然后使用该号码打开以该号码开头的文本文件。 (例如,使用输入123然后打开123.txt。)

以下是我需要帮助的代码部分:

// Function to start a transaction
int transaction(void)
{
    // Define Variables
    char buf[1000], nDatabase[100];
    float nPrice[500], nTotal;

    // Instructions
    printf("You have started a transaction.\n");
    printf("Enter the SKU number below.\n");
    printf("Enter 0 to complete the transaction.\n");


    // Begin loop here
    do
    {
        FILE *ptr_file;

        // record SKU number
        /*remove test tools later*/
        printf("we r here\n");
        scanf("Enter the SKU: %c\n", &nDatabase);
        printf("now we r here\n");


        // Open database file  
        /*Change location later*/
        ptr_file = fopen("database/123.txt", "r");
        // If file is not found return 1
        if (!ptr_file)
        {
            printf("Could not match that SKU number.\n");
            return 1;
        }


        while (fgets(buf, 1000, ptr_file) != NULL)
            printf("%s\n", buf);
        scanf("%s", &nPrice[0]);
        // Close file
            fclose(ptr_file);

            while (nDatabase == 0); 
                nTotal = nPrice[0] + nPrice[1];
                printf("Your total is: $%.2f\n", &nTotal);
                return 0; 
    }
}

2 个答案:

答案 0 :(得分:2)

printf( "Enter the SKU: " ) ;  // <-- scanf if only for input, the prompt must be output separately
scanf( "%s\n", nDatabase);
//       ^     ^
//       |     |_No & here - nDatabase is an array
//       |
//       |_Accept a string not a character

然后,您可以使用sprintf形成一个完整的文件名,例如

char filename[MAX_FNAME] ;
sprintf( filename, "database/%s,txt", nDatabase ) ;

请注意,上述内容未执行错误检查或溢出保护 - 您可能需要考虑添加一些错误检查或溢出保护。

答案 1 :(得分:0)

您需要将用户输入与数据库路径和扩展名连接起来。

查看此帖子:C string append