从File中读取C中的不同类型

时间:2015-06-24 04:51:06

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

给出输入;

  

-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] != '\0')
            {
                if(line[index]  == ' ')
                {
                  printf("%c", '.');
                }

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

                }
            }
        }

输出;

  

*第一次飞行

     

....... *第二次飞行

1 个答案:

答案 0 :(得分:3)

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

百分之前的空格将导致scanf忽略所有空格字符(空格,制表符,换行符)(如果存在)。

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

在你的问题中,这不是你喜欢的东西,所以删除这个空格。

修改 同样由Barak Manos

建议
  

我认为对于第二行,您需要扫描"%d, %d"而不是"%d%d"