Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 读取并收集文本文件中的变量_C_File_Io_Fopen_Fread - Fatal编程技术网

C 读取并收集文本文件中的变量

C 读取并收集文本文件中的变量,c,file,io,fopen,fread,C,File,Io,Fopen,Fread,我不久前问过这个问题,但非常含糊,我还对代码做了一些修改 我有一个我称之为“stats.txt”的文件,我打开它时:(使用“C”btw) 在程序的第一次运行期间,我将要求用户填写用于写入文件的变量: fprintf(fp, "STR: %i(%i)\n", STR, smod); fprintf(fp, "DEX: %i(%i)\n", DEX, dmod); 等等 程序第一次运行后,文件如下所示,所有数字对应于程序中的一个变量: Level 1 Gnome Wizard: STR: 8(-1

我不久前问过这个问题,但非常含糊,我还对代码做了一些修改

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

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

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”文件中的文本:

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

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
有人能给我一些关于如何读取变量的建议吗


请并感谢您

计算机只懂数字,不懂文字。这意味着您必须编写代码将数字(表示单个字符)转换回所需的值,并将其存储在某个位置

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

更可能的是将代码安排为“每行对应”循环,其中一行的第一个字符决定如何处理其他字符。例如,如果第一个字符是
-
,则忽略该行;否则,如果前5个字符是
级别
,则调用处理该行其余部分的函数(
1 Gnome向导
);否则,如果前几个字符是
STR:
DEX:
CON
等,则调用函数获取两个数字(并检查右括号等);否则


除此之外,您还应该具有良好的错误处理能力。作为一个粗略的指导,大约一半的代码应该是检查和错误消息(如
if(buffer[i]!='('){printf(“error:第%u行的数字后面应该是左括号),lineNumber);return-1;}
)。

您从文件中准确读取值的位置是哪里?
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