我在fscanf
遇到了一些问题。我是C的新手,但我似乎无法从{。}文件中加载fscanf
来加载正确的信息。
int main() {
//Vars
FILE *tempFileIn;
int rowIndex = 0;
int objectIdNum;
double magnitudePhotographed;
double distance;
int velocity;
double magnitudeCorrected;
double magnitudeTotal;
//Read File Data
tempFileIn = fopen("hubbleData.txt","r");
if (tempFileIn == NULL) {
printf("File read error.");
}
printHeaders();
while(!feof(tempFileIn)) {
fscanf(tempFileIn, "%lf %lf %lf %lf %lf", &objectIdNum, &distance, &velocity, &magnitudeCorrected, &magnitudeTotal);
printf( "%2.3f %2.3f", velocity, distance);
printf("\n");
rowIndex++;
}
return 0;
}
速度按预期打印,但距离始终打印为0.0000。如果我切换两者的打印顺序,将正确打印距离,速度将打印为0.0000。我只关心第二和第三列,但必须根据项目指南扫描所有列。
Input format:
1 0.032 +170 1.5 -16.0
2 0.034 +290 0.5 17.2
6822 0.214 -130 9.0 12.7
598 0.263 -70 7.0 15.1
221 0.275 -185 8.8 13.4
224 0.275 -220 5.0 17.2
5457 0.45 +200 9.9 13.3
Actual Output:
170.000 0.000
290.000 0.000
-130.000 0.000
-70.000 0.000
-185.000 0.000
-220.000 0.000
200.000 0.000
Expected Output:
170.000 0.032
290.000 0.034
-130.000 0.214
-70.000 0.263
-185.000 0.275
-220.000 0.275
200.000 0.45
答案 0 :(得分:2)
velocity
被声明为int
,但在double
和fscanf()
来电中使用printf()
。您可能也想将其声明为double
。
答案 1 :(得分:1)
编辑:我在用户发布速度和距离类型之前发布了此评论。我假设速度和距离是不兼容的浮点型,而不是整数。
试试这个:
printf( "%2.3f %2.3f", (float)velocity, (float)distance);
我的猜测是你将变量传递给printf,它们与浮点数的大小不同,因此打印“velocity”的第二部分而不是距离。 Printf使用堆栈来传递变量,函数没有定义变量的数量和大小,因此任何大小不匹配都会导致这样的问题。
答案 2 :(得分:0)
将objectIdNum
和velocity
声明为double
,以便fscanf
和printf
正常运作。
您将变量velocity
声明为int
并在fscanf
和printf
中使用了错误的格式说明符
答案 3 :(得分:0)
您需要进行3次更改
1)将velocity
声明为double
。
2)在fscanf
中,objectIdNum
应该被理解为%d
而不是%lf
。
在从main(退出程序)返回之前最终使用flose(tempFileIn);
。
注意:我假设velocity
为double
,因为实际上velocity
是real
个数字,而不是integral
值。