- 166
- 7
- CPU
- Ryzen 5 1600 3.2GHz
- Scheda Madre
- MSI B350 Tomahawk
- HDD
- Seagate ST1000DM010 1 TB
- RAM
- 2X8GB Corsair CMK16GX4M2B3000C15 Vengeance
- GPU
- RADEON RX 580 NITRO+ Radeon RX 580 8GB GDDR5
- Monitor
- HP 27FW Monitor 27"
- PSU
- Cooler Master MasterWatt Lite 700 230V
- Case
- Aerocool Aero-800
- OS
- Windows 10
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!