从文件中读取 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"
.
我正在尝试读入一个文件,该文件具有不同的读入类型(整数、字符)。这相对简单,但我对使用哪种方法读取这些不同的值感到困惑。
我正在使用 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"
.