fscanf читает только нули - PullRequest
0 голосов
/ 10 марта 2019

Я пытаюсь прочитать данные из файла .txt, в котором форматирование выглядит так:

1.671346 4.064608 -3.861660 
2.891781 -3.505203 0.733207 
-2.033906 -3.854335 -2.194739 
1.726585 -4.220862 3.629719 

Каждая из N строк содержит координаты x, y, z частицы и Iнамереваемся хранить их в массиве N * 3.

Однако, когда я пытаюсь прочитать мои данные, мой массив координат заполняется нулями.

Вот код:

#include<stdio.h>
#include<stdlib.h>

void leggiFile(FILE *fp, int nrighe, double c[]){
int i;
 for(i=0;i<nrighe;i=i+3){
  fscanf(fp, "%lf %lf %lf", &c[i], &c[i+1], &c[i+2]);
  printf("%lf",c[i]);
 }
}

int main(){
 FILE* fp=fopen("CoordinateMC.txt","r");
 double coord[1500]={0};
 int nrighe=500; 
 leggiFile(fp, nrighe, coord);
}

Он печатает только 0.00000

Я попытался переключить все "% lf" на "% f" и переключить все "& c [stuff]" в "c [stuff]"

Я подозреваю, что это не работает из-за чего-то в моей IDE (code :: blocks), которое я не установил должным образом.Но программа, которую я запустил для создания файла .txt, работала как чудо!

Ответы [ 2 ]

0 голосов
/ 10 марта 2019

Программе потребовалось всего несколько небольших изменений, где прокомментировал. Он печатал правильные результаты, но не останавливался, поэтому все, что вы видели, было лесом 0.00000. Главное - проверить результат операций ввода / вывода.

#include <stdio.h>
#include <stdlib.h>

void leggiFile(FILE *fp, int nrighe, double c[]){
    int i;
    for(i = 0; i < nrighe; i = i + 3){
        if(fscanf(fp, "%lf %lf %lf", &c[i], &c[i+1], &c[i+2]) != 3) {
            break;                          // conversion was unsuccessful
        }
        printf("%f\n",c[i]);                // removed the `l` from `lf`
    }
}

int main(void){                             // correct definition of maiin
    FILE* fp = fopen("CoordinateMC.txt", "r");
    if(fp == NULL) {                        // check the file opebned
        perror("Cannot open file");
        exit(1);
    }
    double coord[1500] = { 0 };
    int nrighe = 500; 
    leggiFile(fp, nrighe, coord);
    fclose(fp);                             // tidy up
}

Вывод программы:

1.671346
2.891781
-2.033906
1.726585

Однако мне интересно, если вы опубликовали свой фактический код, который вызывал проблему, потому что вы сказали, что fscanf вернул -1, что он делает, только если нет входных данных.

0 голосов
/ 10 марта 2019

Это старая функция, которую я сделал для универа, она проверяет, существует ли файл, затем создает и печатает новый массив с плавающей точкой в ​​файле, она также использует другую функцию, которая подсчитывает, сколько чисел в файле .

задание по созданию единой системы хранения данных, контролю над созданием архива, создания и хранения данных в разной форме, а также ознакомления с данными по конкретным файлам, изменениям, которые могут быть внесены в стоимость в любом случае le matrici o anche più semplicemente riscrivere il file originale in modo cheia un array.

void leggiDaFile() {
int n;              // la dimensione dell'array
float reale;        // un numero
n = dimensioneFile();               //crea una funzione che ti permette di contare i numeri presenti
FILE* fp = fopen("FILE.txt", "r");  //metti il tuo file
if(fp==NULL) {
    printf("Non ci sono numeri reali da leggere!"); //verifica esistenza file
}
else {
    if(n==0) 
        printf("Non ci sono numeri reali da leggere!");
    else {
        int i=0;                // contatore
        float reali[n];     // i numeri reali da leggere
        while(fgetc(fp)!=EOF){
            fscanf(fp, "%f", &reale);
            reali[i]=reale;
            i++;
        }
        fclose(fp);
        printf("Ecco i numeri reali: ");
        for(i=0; i<n; i++)
            printf("%.2f  ", reali[i]);
    }
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...