Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从文件中读取C中的不同类型_C_Scanf_C Strings - Fatal编程技术网

从文件中读取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)
/*           ^         */