我正在写一个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;
}
}
答案 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