我试图寻找类似的问题,但找不到它,所以我发布了这个问题。事情是这样的。 假设我有一个名为 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
如果我知道它包含的单词数量(就像文件的内容类似于姓名、号码、号码),我就知道如何阅读它,但是当我需要阅读全文时,我不知道。
这是评论中的代码。然而,正如@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);
最佳答案
it's false right from the start since i gets first character and then I do scanf
你说得对,但这是错的。无需仅使用行的第一个字符来测试 EOF - 我们可以将其留给 fscanf()
。
此外,无需一一读取字符串的字符 - fscanf()
可以使用转换规范 %[^\n 读取以
。\n
结尾的字符串]
如果输入字符串长度不受限制,则当输入字符串需要的内存超过 string
提供的内存时,我们必须通过添加最大字段宽度来防止缓冲区溢出。如果您定义了 e。 G。 char string[100];
,最大字段宽度为 99,因为终止空字符需要最后一个 char
。
所以我们可以写e。克。
while (fscanf(input, "%d %d %d %99[^\n]", &num1, &num2, &num3, string) == 4)
printf("%d %d %d %s\n", num1, num2, num3, string);
关于c - 从C文件中读取字符串的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56841184/