Alessandro001
Utente Attivo
- Messaggi
- 166
- Reazioni
- 7
- Punteggio
- 44
Salve, il quesito è leggere il numero di caratteri da file e salvare la stringa in un array di char.
Io ho fatto in questo modo:
Questo significa che se sul file c'è scritto:
4
Ciao
4 sarà N ovvero il numero di caratteri e Ciao la parola. Pertanto creo un array di char[N+1] così da lasciare lo spazio per il carattere terminatore.
Il problema è che non arriva proprio al getline perchè si blocca al fflush(stdin) che forse va a "cancellare" in qualche modo ciò che dovrà essere letto di seguito dal file.
L'unica soluzione che ho trovato online è questa solo che non mi è chiara dato che non conosco assert:
Un altra domanda, sempre nel codice che ho trovato online, il vettore di char viene dichiarato di 5 celle in più. Lì c'è scritto che lo fa per contenere newline e null. Non basterebbe dichiararlo più grande di 2? Lo si fa per '\n' e '\0'?
Grazie delle risposte!
EDIT:
Ho trovato la soluzione all'invio a capo utilizzando un getchar() che mi elimina l'invio. Tuttavia la mia seconda domanda rimane!
Io ho fatto in questo modo:
C++:
freopen("input.txt", "r", stdin);
int N;
cin>>N;
fflush(stdin);
char S[N];
cin.getline(S,N+1,'\n');
cout<<S;
Questo significa che se sul file c'è scritto:
4
Ciao
4 sarà N ovvero il numero di caratteri e Ciao la parola. Pertanto creo un array di char[N+1] così da lasciare lo spazio per il carattere terminatore.
Il problema è che non arriva proprio al getline perchè si blocca al fflush(stdin) che forse va a "cancellare" in qualche modo ciò che dovrà essere letto di seguito dal file.
L'unica soluzione che ho trovato online è questa solo che non mi è chiara dato che non conosco assert:
C++:
FILE *fr, *fw;
int N;
fr = fopen("input.txt", "r");
assert(1 == fscanf(fr, "%d\n", &N));
Un altra domanda, sempre nel codice che ho trovato online, il vettore di char viene dichiarato di 5 celle in più. Lì c'è scritto che lo fa per contenere newline e null. Non basterebbe dichiararlo più grande di 2? Lo si fa per '\n' e '\0'?
Grazie delle risposte!
EDIT:
Ho trovato la soluzione all'invio a capo utilizzando un getchar() che mi elimina l'invio. Tuttavia la mia seconda domanda rimane!