PDA

Visualizza la versione completa : [C++]fgets e stringhe a capo


Rising1
14-01-2012, 22:12
in un esercizio si deve prendere da un file un intero messo nella prima riga e una stringa nella seconda tipo:

5
c' qualquadra che non cosa
ecco il mio codice

#include <iostream>
#include <stdio.h>
using namespace std;

int main(){
FILE *fr;
int i;
char stringa[20];
fr=fopen("input.txt","r");
fscanf(fr,"%d",&i);
fgets(stringa,20,fr);
printf("%d%s",i,stringa);
return 0;
}
l'intero viene letto ma della stringa neanche l'ombra.
non posso usare fscanf(fp,"%s",stringa) perch al primo spazio si fermerebbe, a me serve la stringa per intero.

come mai si comporta cos?

oregon
14-01-2012, 22:43
In questo caso viene letto il \n che c' dopo il valore numerico ... Prova con

fscanf(fr,"%d\n",&i);

Rising1
15-01-2012, 12:23
saggio... provo e le faccio sapere

ok, funziona, grazie mille.

ulteriore problema: si legge da un file una prima riga che contiene un intero (che il numero restante di righe) e poi si leggono tutte le altre righe e si modificano con un algoritmo (ma qui faccio solo che modifico tutte le lettere della stringa in "l"



int main(){
int righemax,line,i;
char str[80];
FILE *fr;
fr=fopen("input.txt","r");
fscanf(fr,"%d\n",&righemax);
for(line=1;line<=righemax;line++) /*leggo ad una ad una le stringhe*/
{
fgets(str,80,fr);
for(i=0;i<=strlen(str);i++) {str[i]='l';} /*sostituisco i caratteri con una elle*/
printf("%s",str);
}
return 0;
}

prendendo un file del genere

2
aaa
bbb

ecco l'output


llllllllllllllllllllllllllllllllllllllllllllllllll llllllllllllllllllllllllllllllllm <---che....?!?!

Loading