我有一个名为coords.TXT的txt文件,它显示以下内容:
4900N 5350W
4830N 4900W
5000N 4900W
6000N 5830W
现在我想要一个读取此csv文件的c程序并输出输出
Longitude,Latitude: 3900N,5350W
Longitude,Latitude: 4830N,4900W
Longitude,Latitude: 5000N,4900W
Longitude,Latitude: 6000N,5830W
Longitude,Latitude: 6000N,5830W
然而,当我运行该程序时,它似乎并不想完全复制内容,我得到了输出:
Longitude,Latitude: 900N,5350W
Longitude,Latitude: 4830N,4900W
Longitude,Latitude: 5000N,4900W
Longitude,Latitude: 6000N,5830W
Longitude,Latitude: 6000N,5830W
以下是我的计划的片段:
#include <stdio.h>
int main ( int argc, char *argv[] )
{
if ( argc != 2 ) /* argc should be 2 for correct execution */
{
/* We print argv[0] assuming it is the program name */
printf( "usage: ./a.out filename\n");
}
else
{
// We assume argv[1] is a filename to open
FILE *file = fopen( argv[1], "r" );
/* fopen returns 0, the NULL pointer, on failure */
if ( file == 0 )
{
printf( "Could not open file\n" );
}
else
{
char data;
char x[5];
char y[5];
/* read one character at a time from file, stopping at EOF, which
indicates the end of the file. Note that the idiom of "assign
to a variable, check the value" used below works because
the assignment statement evaluates to the value assigned. */
while ( ( data = fgetc( file ) ) != EOF )
{
fscanf(file,"%s %s",&x,&y);
printf("Longitude,Latitude: %s,%s\n",x,y);
}
fclose( file );
}
}
}
我也想要它设置所以我可以将带有N的数字分配给变量lat,带有W的数字分配给变量lon。有什么想法吗?
答案 0 :(得分:1)
你打电话给fgetc
读一个字符然后扔掉。
此外,您的比较已被打破。您需要将fgets
的返回值与EOF
进行比较,而是比较作业的返回值。
由于这不起作用的原因不起作用:
int j;
if ((j = 3.2) == 3.2)
j = 3.2
的结果是一个整数,不是3.2
。同样,data = fgetc( file )
的结果将是一个不是EOF的字符。 EOF不是一个字符,就像3.2不是整数一样。
答案 1 :(得分:1)
问题是你的fgetc(file)
每次被叫时都在吃一个角色。它吃的第一个角色是你的'4'。每隔一段时间你就会幸运,它会占用一个空间(fscanf
无论如何都会抛出它。)所以不要通过fgetc
测试文件是否合适,而应该尝试使用这样的东西:
while(fscanf(file,"%s %s",&x,&y) == 2){
printf("Longitude,Latitude: %s,%s\n",x,y);
}