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

时间:2019-07-01 19:10:18

标签: 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 

如果我知道它所包含的单词数量(例如该文件将是诸如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);

1 个答案:

答案 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);