|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jun 2011
Messaggi: 25
|
[C/C++]Errore caricamento in matrice da file
Salve a tutti,
vi scrivo perché sto incontrando un problema nel caricamento di una matrice nrighe X 2 da un file di testo. In pratica nel mio file ci sono numeri del genere: 103 520 2214 238 3031 3116 3437 4228 4848 4837 50 ma al momento del caricamento in matrice li carica in modo sbagliato, così: 10 3 5 20 22 14 23 8 30 31 31 16 34 37 42 28 48 48 48 37 50 naturalmente mi scombina tutto e mi restituisce un risultato sbagliato. Mi potreste dare una mano a capire cos'è che mi da' questo problema? Grazie |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
|
Senza codice è un po come capire cos'è il rosso per un cieco
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go |
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Jun 2011
Messaggi: 25
|
Giusto!
Ecco il codice della fase di caricamento! Codice:
unsigned int missioni[NRIGHE][2],arrayi[NRIGHE],nr=0,i=0,j=0,somma=0,tmp;
int maxgio=-100,num=0;
bool trovato=false,fine=false;
FILE *fin,*fout;
fin=fopen("input.txt","r");
fout=fopen("output.txt","w");
fscanf(fin,"%u",&nr);
for(i=0;i<nr;i++){
for(j=0;j<2;j++){
fscanf(fin,"%u",&missioni[i][j]);
if(missioni[i][j]!=0){
num++;
}
}
}
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Per curiosita' l'ho fatto girare e mi legge correttamente tutti i dati.
Ce l'hai detta proprio tutta?
__________________
In God we trust; all others bring data |
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Jun 2011
Messaggi: 25
|
Strano che ti funzioni!
Mi sta facendo uscire matto questo codice! E' un file di testo .txt, altrimenti neanche lo leggeva...! |
|
|
|
|
|
#6 |
|
Junior Member
Iscritto dal: Jun 2011
Messaggi: 25
|
Compilo con Dev C++!
Perchè? |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
L'ho compilato con VS2005 (si, e' vecchio ma lo sono anch'io e per ora non mi hanno ancora buttato via). Funziona senza problemi.
Prova a pubblicare il file di testo completo, cosi' vediamo....
__________________
In God we trust; all others bring data |
|
|
|
|
|
#8 |
|
Junior Member
Iscritto dal: Jun 2011
Messaggi: 25
|
Quello nel primo post è il file di testo completo!
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Scusa ma
Codice:
103 520 2214 238 3031 3116 3437 4228 4848 4837 50
__________________
In God we trust; all others bring data |
|
|
|
|
|
#10 |
|
Junior Member
Iscritto dal: Jun 2011
Messaggi: 25
|
Lo so' che può sembrar strano ma è un test datomi da fare e dice 103 righe quando poi ce ne sono solo 5(sta cosa non l'ho capita)infatti ho dovuto modificare il programma aggiungendo la variabile num che mi indica quanti numeri effettivamente ci sono...
Ma anche modificando quel parametro a me esce sbagliato il caricamento. Boh. |
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quindi, se scrivi 5 al posto di 103, come dovrebbe effettivamente essere, ottieni lo stesso una sequenza sbagliata?
Perdona l'insistenza ma e' necessario verificare. Cosi' come e' necessario aggiungere i controlli - sull'apertura del file (fin != NULL); - sul numero di elementi che vai a leggere con la fscanf(), cosi' da essere sicuri che l'elemento e' stato letto. Siccome leggi un elemento alla volta, fscanf() ti deve ritornare 1. Altrimenti c'e' un errore. Quote:
__________________
In God we trust; all others bring data |
|
|
|
|
|
|
#12 | |
|
Junior Member
Iscritto dal: Jun 2011
Messaggi: 25
|
Quote:
Non ho capito cosa dovrei fare!Sorry! |
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Suggerivo di modificare leggermente il codice in modo da esser sicuri che le letture vadano a buon fine.
Insomma, c'e' qualcosa di strano se il tuo codice funziona sul mio computer e non sul tuo, pertanto devi cercare di ottenere piu' informazioni sull'errore. Qui una libera interpretazione: Codice:
unsigned int missioni[NRIGHE][2],arrayi[NRIGHE],nr=0,i=0,j=0,somma=0,tmp;
int maxgio=-100,num=0;
bool trovato=false,fine=false;
int numReadItems;
FILE *fin,*fout;
fin=fopen("input.txt","r");
if (fin == NULL)
{
perror ("Errore apertura input.txt. Errore:");
return -1;
}
// fout=fopen("output.txt","w");
numReadItems = fscanf(fin,"%u",&nr);
if (numReadItems != 1) // Deve ritornare 1 se tutto e' ok
{
printf ("Error reading tuple count\n");
return -1;
}
for(i=0;i<nr;i++){
for(j=0;j<2;j++){
numReadItem = fscanf(fin,"%u",&missioni[i][j]);
if (numReadItem != 1)
{
printf ("Error reading tuple [%d][%d]\n", i, j);
return -1;
}
if(missioni[i][j]!=0){
num++;
}
}
}
__________________
In God we trust; all others bring data |
|
|
|
|
|
#14 |
|
Junior Member
Iscritto dal: Jun 2011
Messaggi: 25
|
Non mi restituisce nulla!
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Intendi che non vedi nessun errore e nonostante questo ottieni dei valori errati?
__________________
In God we trust; all others bring data |
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Senti, riesci a fare un attachment del tuo file di input?
Non sapendo cos'altro pensare, mi viene da verificare se ci siano dei caratteri "strani" (magari non printabili) nel file....
__________________
In God we trust; all others bring data |
|
|
|
|
|
#17 |
|
Junior Member
Iscritto dal: Jun 2011
Messaggi: 25
|
Sì non mi esce niente!
Ultima modifica di Stek78 : 11-02-2013 alle 13:54. |
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
|
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go |
|
|
|
|
|
#19 |
|
Junior Member
Iscritto dal: Jun 2011
Messaggi: 25
|
Scusa la mia ignoranza, cosa significa?
|
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
|
ho aperto il tuo file in vi e mi da quegli ^M
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:59.




















