簡體   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