在文本文件中读取和收集变量

时间:2013-02-26 04:41:10

标签: c file io fopen fread

我刚才问过这个问题,但实际上很模糊,我也对代码做了一些修改。

我有一个我称之为“stats.txt”的文件,我打开它:(使用“C”btw)

fopen("stats.txt", r+)

在我的程序第一次运行期间,我会要求用户填写用于写入文件的变量:

fprintf(fp, "STR: %i(%i)\n", STR, smod);
fprintf(fp, "DEX: %i(%i)\n", DEX, dmod);

等...

程序首次运行后文件如下所示,所有数字对应程序中的变量:

Level 1 Gnome Wizard:
STR: 8(-1)
DEX: 14(2)
CON: 14(2)
INT: 13(1)
WIS: 13(1)
CHR: 12(1)
APP: 11(0)
Fort save: 0
Reflex save: 0
Will save: 3

当程序关闭并再次运行时,我有一个“IF”语句检查并显示“stats.txt”文件中的文本:

if (fgets(buf, 1000, fp) == NULL)
                {
                    printf("Please enter in your base stats (no modifiers):\n");
                    enter_stats();
                    printf("Please indicate your characters level:\n");
                    printf("I am a level ");
                    level = GetInt();
                    Race_check();
                    spec_check();
                    printf("------Base saving throws (no modifiers)------\n");
                    saving_throws();
                }
                else
                {
                    printf("%s",buf);
                }

我遇到的问题是程序读取文件,但不会传输任何变量值:

Level 1 Gnome Wizard:
-------------------------
STR: 0(-5)
DEX: 0(-5)
CON: 0(-5)
INT: 0(-5)
WIS: 0(-5)
CHR: 0(-5)
APP: 0(-5)
-----Saving Throws------
Fortitude: 0
Reflex: 0
Will: 0

有人可以就如何阅读变量向我提出建议吗?

请教,谢谢

1 个答案:

答案 0 :(得分:0)

计算机只能理解数字 - 他们不懂文字。这意味着您必须编写代码以将数字(表示单个字符)转换回您想要的值并将其存储在某个位置。

例如,您可以将整个文件加载到“char数组”中,然后搜索表示STR:的4个数字的“char数组”,然后跳过任何空格({{1}之间然后将字符/ STR:转换为值0并将其存储在某处,然后检查0(0)字符,然后转换字符0()转入值-1并将其存储在某处,然后检查-1字符和换行符)

更有可能将代码排列为“for each line”循环,其中行的第一个字符决定如何处理其他字符。例如。如果第一个字符是\n则忽略该行;否则,如果前5个字符为-,则调用处理该行余数的函数(level);否则,如果前几个字符是1 Gnome WizardSTR:DEX:等,则调用函数来获取两个数字(并检查右括号等);其他...

除此之外,您应该有良好的错误处理。作为一个粗略的指南,大约一半的代码应该是检查和错误消息(如CON)。