Homepage  Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum


.dsy:it. .dsy:it. Archive > Didattica > Corsi A - F > Algoritmi e strutture dati
 
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 :)

fra85
ok grazie....

Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate