繁体   English   中英

C程序读取文件并将其打印出来,但每次编译时都会得到不同的输出

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM