从文件中读取C中的不同类型
我试图读入一个具有不同类型的文件(整数、字符)。这是相对简单的,但我不知道使用哪种方法来读取这些不同的值 我正在使用从文件中读取C中的不同类型,c,scanf,c-strings,C,Scanf,C Strings,我试图读入一个具有不同类型的文件(整数、字符)。这是相对简单的,但我不知道使用哪种方法来读取这些不同的值 我正在使用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) 给定输入 -一号航班 83,34 X XX
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)
给定输入
-一号航班
83,34
X XX X
X X
-二号航班
我想打印以破折号开头的行,将整数发送给一个方法,然后打印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] != '\0')
{
if(line[index] == ' ')
{
printf("%c", '.');
}
else if(line[index] == 'X')
{
printf("%c", '*');
}
}
}
用于输出
*一号航班
……第二次航班
百分比前的空格将导致scanf
忽略所有空白字符(空格、制表符、换行符)(如果存在)
i、 e.条件if(ch='')
将始终为false
在您的问题中,这不是您喜欢的内容,因此请删除此空白
编辑
也正如
我认为对于第二行,您需要扫描
%d,%d“
,而不是%d%d”
不要使用long作为变量name@MohitJain我以为你指的是“长屁股变量名”,并检查了编辑历史以查看那些长屁股变量。我认为第二行需要扫描
%d,%d”
,而不是%d%d”
@barakmanos,正如你所建议的那样,我认为这是重新发布代码时的错误。我想我在读空格和X的时候遇到了最大的麻烦好吧,我是这样做的,但是我甚至在正确的道路上使用了scan(第行,“%c”,%ch)
,或者我应该使用不同的方法吗?我删除了空格,但我认为代码希望用户输入字符,这根本不是我想要的。为什么不简单地使用行[0]
或通常使用行[index]
?不是行[0]
只读取第一个字符,这就是它用于读取-
的原因,但是我想读一行中的所有字符。我正在考虑做一个索引
,然后在检查行
中的每个值时增加它。这看起来不错:int index=-1;而(第[++index]行)!='\0'{…}
我添加了一个更新,分别显示了我的新代码以及输入和输出。
scanf(line, " %c", &ch)
/* ^ */