c - 从C文件中读取字符串的问题

标签 c string file eof

我试图寻找类似的问题,但找不到它,所以我发布了这个问题。事情是这样的。 假设我有一个名为 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/

相关文章:

c - 错误 : called object type 'ssize_t' (aka 'long' ) is not a function or function pointer

c - 我们如何比较数量小于

c++ - 检查给定字符串是否等效于给定字符串集中至少一个字符串的有效方法

Python:遍历字符串列表并使用 split()

string - 在 bash 中使用随机可打印字符串创建特定大小的文件

python - 从 Python 中的列表列表打印到文件

C - 掷骰子模拟器

将 char* 的一部分转换为 int

c - 打开文件会导致 sYSMALLOc 断言失败

java - 黑莓读取项目中的本地属性文件