esercizio file Clicca QUI per vedere il messaggio nel forum |
fra85 |
Salve ragazzi,non riesco a capire una cosa riguardante la lettura di file. Ecco il codice:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
FILE *fp;
int valore, dim=100;
char stringa[dim], *s;
fp= fopen("stringa_mista.txt", "r");
fscanf(fp,"%d",&valore);
s= fgets(stringa, dim, fp);
fclose(fp);
printf("valore vale:%d-----\n", valore);
printf("stringa vale:%s------\n", s);
system("PAUSE");
return 0;
}
stringa_mista.txt:
1 ciao ciao2 ciao3
ciao4
Il programma come output stamperà:
valore vale:1-------
stringa vale:ciao1 ciao2 ciao3
----------
come faccio a farmi stampare:
stringa vale:ciao1 ciao2 ciao3------- (cioè senza questo lungo spazio bianco)??????
grazie.... |
panzone |
Semplicemente rimuovi il \n nel primo printf e gli eventuali ----.
Il char \n indica appunto l' andare a capo. |
fra85 |
Mi sa che mi sono espressa male :-D ...
Ho messo i trattini proprio per vedere cosa stampava. Ho notato che la funzione fscanf mi inserisce in valore soltanto l'intero e si ferma quando trova lo spazio vuoto.
Per la lettura di una riga da file,in particolare il seguito fino a quando non finisce la riga,ho usato fgets che però non si ferma all'ultimo spazio vuoto ma si ferma alla fine della riga...
Quindi mette in stringa ciao1ciao2ciao3spaziospaziospaziospazio
fino alla fine della riga.
Io in realtà voglio che in stringa ci sia soltanto ciao1ciao2ciao3, come posso fare????
grazie |
xSharKMaNx |
la fgets riceve 3 parametri
il secondo parametro è la dimensione da allocare in memoria, nel tuo caso 100
questo significa che quando usi la fgets il programma alloca in memoria la tua stringa + nspaazi fino alla max dimensione.
Le soluzioni sono due o usi:
fscanf(nomefile,%s %d %f %d,x,y,z,w)
oppure se utilizzi la fgets dovrai crearti una funzione che cicla sulla stringa carattere per carattere e qualora il char è isspace non lo devi considerare
oppure ci saranno altri metodo migliori dei miei in quanto con C non vado d'accordo :) |
|
|
|