我是初学者,在大学学习。在这一刻。 我的作业:写一个基于文本的adventere游戏(经过不到2个月的编程研究:/)。
老师说游戏正在使用的文本应该存储在一个文件中。 一开始,程序应该读入"所有文本"从该文件,然后,程序应该使用字符串中的文本(我猜)。
我的第一个想法是,我会将1个句子读成1个字符串,但这只是不想解决,因为句子在课程之间有空格,但当我尝试阅读时,当程序看到一个空格,它将单词存储在另一个字符串中而不是相同的字符串中。
因此,正因为如此,例如: 我的txt文件中有4行: 第1行:你应该走哪条路? 第2行:前进 第3行:左 第4行:正确
我认为当我将文本读入4个字符串时,LINE 1将位于第一个字符串中,LINE 2将位于第二个字符串中,等等。 但是发生了什么? '其中'是在第一个字符串,"方式"是在第二个字符串等。
抱歉这个错误的解释,但我希望你们明白我的问题是什么。 如何才能将第1行读入第一个字符串? 我认为程序不会将空间计为"好吧,我应该把这个空格后面的单词放到一个新字符串中#34; ..
这是我的代码导致了这个"错误":
char decisions[4][200];
FILE *fp;
fp=fopen("text.txt", "r");
fscanf(fp, "%s %s %s %s", &decisions[0], &decisions[1], &decisions[2], &decisions[3]);
fclose(fp);
printf("%s\n %s\n %s\n %s\n", decisions[0], decisions[1], decisions[2], decisions[3]);
决策[0]应该从我的txt文件的第一行读入问题,而另外3个应该有3个选择选项。这就是我想要发生的事情:/
答案 0 :(得分:1)
要逐行阅读,您可以使用fgets
。如果你知道每个字符串的MAX字节是200并且你有4行,那么将它传递给fgets
进入这个循环:
int i;
for (i=0; i<3; i++)
{
fgets(decisions[i], 200, fp);
}
fgets
将n个字节读入缓冲区,直到找到新行或EOF。因此,请确保每一行每行不超过200个字符。
答案 1 :(得分:0)
虽然你不应该,可以使用fscanf
来完成。
text.txt
"Whussup?" "All of the things that have not been screwn tightly to the ground" "Buh, who cares!" "You don't wanna know, mate!"
"Why?" "Because!" "Ask Joe!" "I'm a doctor, not an engineer!"
第一行可以解析:
#include <stdio.h>
#include <stdlib.h>
// ALL CHECKS OMMITTED!
int main()
{
FILE *fp;
char decisions[4][200];
fp = fopen("text.txt", "r");
fscanf(fp, "\"%199[^\"]\" \"%199[^\"]\" \"%199[^\"]\" \"%199[^\"]\"",
decisions[0], decisions[1], decisions[2], decisions[3]);
fclose(fp);
printf("LINE1: %s\nLINE2: %s\nLINE3: %s\nLINE4: %s\n", decisions[0],
decisions[1], decisions[2], decisions[3]);
exit(EXIT_SUCCESS);
}
技巧是\"%199[^\"]\"
,它最多需要199个不是"
的字符,并且在双引号后面跟一个空格。但text.txt
的格式必须严格或不起作用!
但实际上,尝试使用fgets
或类似的方法,可以减少大量的头痛!
答案 2 :(得分:-2)
在格式字符串
中明确使用换行符作为分隔符fscanf(fp, "%s[\n]%s[\n]%s[\n]%s", &decisions[0], &decisions[1], &decisions[2], &decisions[3]);