从文件中读取 C 中的不同类型

Reading different types in C from File

我正在尝试读入一个文件,该文件具有不同的读入类型(整数、字符)。这相对简单,但我对使用哪种方法读取这些不同的值感到困惑。

我正在使用 fgets 来确保文件不在末尾,即;

char line[MAX_CHARS]; 
char ch;
FILE *infile = fopen("file.txt", "r"); 
const int MAX_CHARS = 50;

       while(fgets(line, MAX_CHARS, infile) != NULL) 

给定输入;

-Flight one

83, 34

X XX X

X X

-Flight two

....

我想打印以破折号开头的行,将整数发送到方法,然后打印 X 和空格。所以,我的代码是:

if(line[0] == '-')
{
   printf("%s\n", line);
}

else if(2==sscanf(line, "%d%d", &long, &lat))
{
   coordinates(long, lat);
}

我使用 scanf 尝试读取 X 和空格,但它根本不起作用。 getchar() 似乎也不起作用,所以我应该重新开始,而不是单独读取每个 char 而不是 char 数组吗?

编辑:所以我按照某人的建议做了,这是我在空格和 X 中读取的更新代码,但它显然不正确,因为它不会进入 X 的下一行。

        else
        {
            while(line[++index] != '[=12=]')
            {
                if(line[index]  == ' ')
                {
                  printf("%c", '.');
                }

                else if(line[index] == 'X')
                {
                  printf("%c", '*');

                }
            }
        }

用于输出;

*Flight one

.......*Flight two

scanf(line, " %c", &ch)
/*           ^         */

百分比前的 space 将导致 scanf 忽略所有白色 space 字符(space、制表符、换行符)。

即条件 if(ch == ' ') 将始终为 false.

在你的问题中,这不是你喜欢的东西,所以去掉这个白色space。

编辑 也按照

的建议

I think that for the second line you need to scan "%d, %d" instead of "%d%d".