|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2005
Città: A casa mia
Messaggi: 825
|
Loop infinito in feof
devo leggere dei valori da file,il file è cosi strutturato:
quicksort 10 0.000000123 0.8000 956456 heapsort 10 0.000000345 0.987 102567 io devo leggere riga per riga i valori e memorizzarli in una variabile. il codice deve essere ottimizzato ancora,piu ke altor mi interessava vedere se leggeva i valori e il ciclo fino alla fine del file funzionava,e invece la parte: do{ fscanf(file,"%d %.15f %.15f %d",lung,media,campione,ripe); std::cout<<lung<<media<<campione<<ripe; }while (!feof(file)); mi va in loop infinito! perke? vi allego il codice della funzione void istogramma (int input,char * buffer,FILE *file){ std::cout<<"Lunghezza vettore: "<<input<<std::endl; std::cout<<std::endl; std::cout<<"Scala 1000 : 1. I valori vanno da 0 a 50 secondi"<<std::endl; std::cout<<"QUICKSORT: "; file = fopen("QS.txt", "r"); if( file==NULL ) { std::cout<<"Errore in apertura del file"<<std::endl; exit(1); } float tempo_letto= 0.800; //scala float media,campione; int lung,ripe; do{ fscanf(file,"%d %.15f %.15f %d",lung,media,campione,ripe); //provo a stampare per vedere se assegna correttamente i valori std::cout<<lung<<media<<campione<<ripe; }while (!feof(file)); for(float k=0;k<=((50000/tempo_letto)/1000);k++) std::cout<<"#"; std::cout<<std::endl; int n; std::cin>>n; } |
|
|
|
|
|
#2 |
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16212
|
Se non riesce a leggere una stringa che ha esattamente il formato espresso dal suo secondo argomento, fscanf rimette a posto l'ultimo carattere che ha letto.
Quindi, se il file termina con un newline e la stringa di formato no, la fine del file può non essere mai raggiunta. Secondo me puoi risolvere il problema sfruttando il fatto che fscanf restituisce in output il numero di conversioni effettuate: Codice:
while (fscanf(file,"%d %.15f %.15f %d",lung,media,campione,ripe)==4)
std::cout<<lung<<media<<campione<<ripe;
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jan 2005
Città: A casa mia
Messaggi: 825
|
molto semplicemente perke trovo molto piu comodo scrivere n standard output (monitor) con il cout piu immediato ke con printf e di conseguenza preferisco per metodo di comodita.tutto qua uso fprintf perke mi risulta piu comodo ,è solo questione di comodita.
GRazie per l idea |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jan 2005
Città: A casa mia
Messaggi: 825
|
conitnua ad andare in loop. ho tolto anke i caratteri di newline dal file .txt ke deve leggere ma continua a loooopareeeeeeeee !! help perke .. il txt è cosi:
QUICKSORT 10 0.000001234 0.324224 543634 HEAPSORT 10 0.0004523 0.523523 5435352 INSERTIONSORT 10 0.000053552 0.45352 543524 ecc... Il pezzo di codice ke legge è : while (!feof(file)){ fscanf(file,"%d %.4f %.4f %d",lung,media,campione,ripe) std::cout<<lung<<media<<campione<<ripe; } mi luppa ho provato a fare cosi: while (fscanf(file,"%d %.4f %.4f %d",lung,media,campione,ripe)==4) std::cout<<lung<<media<<campione<<ripe; int n; ma mi luppa lo stesso |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:35.



















