【发布时间】:2017-04-25 05:20:07
【问题描述】:
我的目标是编写一个代码,将文本文件中的所有逗号分隔数据扫描到一个数组中。为了确保它成功,终端将以相同的方式打印出数据。
数据文件的一个例子是
XXXX,location,yy,mm,dd,max,min
XXXX,86282,1990,3,1,24.9,18
XXXX,86282,1990,3,2,30.2,15.7
XXXX,86282,1990,3,3,28.2,17.2
XXXX,86282,1990,3,4,28.6,18
XXXX,86282,1990,3,5,25.2,17.5
XXXX,86282,1990,3,6,19.2,15
我做的是这个
int i = 0;
int a_location[50000];
int a_yy[50000];
int a_mm[50000];
int a_dd[50000];
double a_max[50000];
double a_min[50000];
int location, yy, mm, dd;
double max, min;
while((c=getchar()) != EOF){
while(scanf("XXXX,%d,%d,%d,%d,%lf,%lf\n",&location, &yy, &mm, &dd, &max, &min) == 6){a_location[i] = location;
a_yy[i] = yy;
a_mm[i] = mm;
a_dd[i] = dd;
a_max[i] = max;
a_min[i] = min;
i+=1;
}
}
for(i = 1; i < nlines; i++){
printf("%d,%d,%d,%d,%0.3f,%0.3f\n", a_location[i], a_yy[i], a_mm[i], a_dd[i], a_max[i], a_min[i]);
}
终端显示这个
./scan.exe<datafile.txt
0,0,0,0,0.000,0.000
0,0,0,0,0.000,0.000
0,0,0,0,0.000,0.000
0,0,0,0,0.000,0.000
0,0,0,0,0.000,0.000
0,0,0,0,0.000,0.000
我想弄清楚出了什么问题。
【问题讨论】:
-
什么是
nlines? -
我无法重现您的问题。但是,由于您列出的代码中有两个未声明的变量(
c和nlines),您显然没有正确复制粘贴和测试问题中的代码,因此所有的赌注都没有了。 -
欢迎来到 Stack Overflow! 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建minimal reproducible example。
-
注意,使用
getchar()读取行首字符并不是一个特别好的主意;通常,您需要将该字符读入字符串。此外,如果您要手动输入数据,则在格式字符串中使用带有尾随换行符的scanf()是一个小灾难。并且使用scanf()处理行是不好的;在大多数情况下,它不关心换行符或空格。你最好用fgets()阅读这些行,然后用sscanf()解析结果。