修改现有文本文件的值(C编程语言)

时间:2016-10-06 13:31:01

标签: c

假设我已经创建了一个名为“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!");
}

任何帮助将不胜感激! :)

2 个答案:

答案 0 :(得分:0)

要完成您在标准C 中尝试做的事情,您必须:

  • 打开文件阅读&#34; r&#34;。
  • 将其内容读入您自己的数据结构。
  • 修改数据结构。
  • 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)结束