[英]C-Programm reads a file and prints it out, but i get different outputs every time i compile
我有一个 C 程序,它读取一个 .txt 文件,将每个浮点数保存在一个数组中,然后打印出该数组。
我的问题是,当我运行代码时,有时输出是正确的,有时一个数字是 0.00 而不是正确的数字。 它总是相同的数字。
我正在使用 macOS 和 VSC,但是当我像这样在终端中编译程序时遇到了同样的问题:
gcc -o max maxOfFloats.c
./max
这是我的代码:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <float.h>
int main(int argc, char *argv[]) {
float *ptr = malloc(9*sizeof(float));
FILE *fptr=fopen("zahlen.txt", "r");
char buffer[255];
int counter=0;
while (fgets(buffer, 255, fptr) != NULL) {
sscanf(buffer, "%f\n", ptr+counter*sizeof(float));
counter++;
}
fclose(fptr);
for (int i=0; i<9; i++){
printf("%.2f\n", *(ptr+i*sizeof(float)));
}
free(ptr);
return EXIT_SUCCESS;
}
这是 .txt 文件:
695.40
-3.45
3555.05
344.44
344444.00
34.44
343.44
3444.44
664.44
这是错误的输出:
695.40
-3.45
3555.05
0.00 ← Wrong Number
344444.00
34.44
343.44
3444.44
664.44
谢谢人们
不要将索引乘以项目的大小; 指针会自动执行此操作,这就是为什么要键入它们。 您正在跳入未知的记忆水域(有时会跳过一个点,这就是为什么打印例程与填充例程看到的东西不同的原因)。 像这样更换这些部件:
sscanf(buffer, "%f\n", &(ptr[counter]));
和
printf("%.2f\n", ptr[i]);
您应该会看到更一致的结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.