假设我已经创建了一个名为“room.txt”的文件名,它包含以下内容:
20 10 5
一旦我执行下面的代码,我将被要求指定哪个变量将其值减少1.
例如:如果输入“1”,它将减少数字“20”在“room.txt”中。
但是,它不会减少值。
相反,它会删除“room.txt”文件的内容。
当我从程序中输入时,如何使其保留文件中的值?
如何另外,当我在程序中输入'1''2''3'时,如何减少值 '20''10''5' ?
#include<stdio.h>
char rooms[]={"rooms.txt"};
struct rooms {
int stdsuite;
int premsuite;
int deluxesuite;
};
int stdsuite;
int premsuite;
int deluxesuite;
void availablerooms ()
{
FILE*fp;
fp = fopen(rooms,"r");
fscanf(fp,"%d %d %d",&stdsuite,&premsuite,&deluxesuite);
system("cls");
system("cls");
printf("\n\n");
printf("\t\t-----------------------------------------------\n");
printf("\t\t Room Availability\n");
printf("\t\t-----------------------------------------------\n\n");
printf("--------------------------------------------------------------------------------\n\n");
printf("\t\t Standard Suite :\t%d / 20\n\n",stdsuite);
printf("\t\t Premium Suite :\t%d / 10\n\n",premsuite);
printf("\t\t Deluxe Suite :\t%d / 5\n\n",deluxesuite);
printf("--------------------------------------------------------------------------------\n\n");
fflush(stdin);
}
int main ()
{
int choice;
FILE*fp;
availablerooms();
printf("1. Standard Suite\n\n2. Premium Suite\n\n3. Deluxe Suite\n\n");
printf("Please enter the selected room value (1-3): ");
scanf("%d",&choice);
fflush(stdin);
if (choice == 1)
{
fp = fopen(rooms,"w");
stdsuite--;
}
else if (choice == 2)
{
fp = fopen(rooms,"w");
premsuite--;
}
else if (choice == 3)
{
fp = fopen(rooms,"w");
deluxesuite--;
}
else
printf("\nThe input is invalid!");
}
任何帮助将不胜感激! :)
答案 0 :(得分:0)
要完成您在标准C 中尝试做的事情,您必须:
freopen
写作文件&#34; w&#34;。† †这是必要的,因为在&#34; r +&#34;中没有标准的C方式来截断文件。模式。
答案 1 :(得分:0)
availablerooms
应该fclose(fp)
。而fflush(stdout)
代替stdin
。
然后,当尝试写回数据时,只有fopen
文件,但是你没有写任何东西。在那里,你对这些事情的运作方式存在重大误解。在3个ifs中,您递减相关变量。但这纯粹是内存操作。之前打开文件,不会改变它。因此,删除三个fopen
并在最后一个if语句之后添加一个新的fprintf(fp, "%d %d %d", stdsuite, premsuite, deluxesuite);
以进行实际写入。然后再次以fclose(fp)
结束