我试图寻找类似的问题,但是找不到它,所以我将其发布。就是这个 假设我有一个名为text.txt的文件。现在,文件由3个整数和字符串组成,如下所示:
4 59 32 This is sentence 1
5 9 130 Grass is green
3 12 149 I need help
我仍在学习C,所以很抱歉,如果这是一些简单的类型问题,等等。这就是问题所在。我不知道该怎么读。如果字符串位于文件的开头,就像这样
This is sentence 1 4 59 32
Grass is green 5 9 130
I need help 3 12 149
如果我知道它所包含的单词数量(例如该文件将是诸如Name Surname Number Number Number之类的东西),我知道如何读取它,但是当我需要阅读全部内容时,我不知道。 / p>
这是注释中的代码。但是,正如@john指出的那样,从一开始就是错误的,因为我得到了第一个字符,然后又执行scanf(尽管如此,我已经尝试过并且只涉及数字,即使读取了第一个字符,fscanf也会获得正确的值)。 我还在考虑使用isalpha()和isspace()进行一些while循环,但无济于事。
while((i = fgetc(input)) != (int)(EOF))
{
fscanf(inputFile, "%d %d %d", &num1, &num2, &num3);
j=0;
while(i != (int)('\n'))
{
string[j++]=(char)i;
i = fgetc(inputFile);
}
string[j] = '\0';
printf("%d %d %d %s\n",br1, br2, br3, string);
答案 0 :(得分:0)
从一开始就是错误的,因为我得到了第一个字符,然后我执行了scanf
您是对的,这是错误的。无需为了测试EOF而消耗一行的第一个字符-我们可以将其留给fscanf()
。
同样,也不需要一一读取字符串的字符-fscanf()
可以读取转换规范为\n
的以%[^\n]
结尾的字符串。
如果输入字符串的长度不受限制,则必须通过添加最大字段宽度来防止输入字符串需要比string
提供的内存更多的内存,以防止缓冲区溢出。如果您定义了e。 G。 char string[100];
,最大字段宽度为99,因为终止的空字符需要最后一个char
。
所以我们可以写e。 g。
while (fscanf(input, "%d %d %d %99[^\n]", &num1, &num2, &num3, string) == 4)
printf("%d %d %d %s\n", num1, num2, num3, string);