PDA

View Full Version : [C] lettura di più righe con scanf da standard input


ndakota
03-09-2011, 14:41
Ciao a tutti ragazzi, vi illustro il mio problema.
Eseguo un main C in questo modo


./main < commands.txt


Nel main, a questo punto, leggo da standard input, con scanf. La lettura la faccio in questo modo perchè ho sempre bisogno di arrivare al ritorno a capo


scanf("%[^\n]s", command);


Ecco un esempio del mio file commands.txt


prova provaaaa
abc



Ed ecco cosa succede se provo ad effettuare due letture di fila

prova provaaaa



Qualcuno mi sa aiutare? Faccio notare che dopo la stringa abc ho messo un ritorno a capo, pensando che il problema fosse quello, e in effetti probabilmente è più corretto, sta di fatto che mi stampa una riga vuota. Grazie :)

AnonimoVeneziano
03-09-2011, 14:52
Non ho possibilità di provare al momento perchè sono su un sistema senza compilatore, ma non è che per caso rimangono degli "\n" nello standard input che ti impediscono di proseguire nella lettura?

Prova una cosa del genere:



do {

scanf("%[^\n]s", command);

} while (getchar() != EOF);



Come ho detto non ho modo di provarlo ...

ndakota
03-09-2011, 14:58
Probabilmente hai ragione perchè ottengo questo


prova provaaaa
abc
abc
abc


Però c'è qualcosa da sistemare :D Ora provo.

ndakota
04-09-2011, 10:30
Nun ce riesco :stordita:

AnonimoVeneziano
04-09-2011, 11:28
Prova questo:



#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char** argv)
{

char command[100];
int c = 0;
memset(command, 0, 100);

while ((command[0] = getchar()) != EOF) {
scanf("%[^\n]s", command+1);
printf("%s\n", command);
while (getchar() != '\n');
}
return 0;
}

AnonimoVeneziano
04-09-2011, 11:33
Questa versione supporta anche più "a-capi" di fila:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char** argv)
{

char command[100];
int c = 0;
memset(command, 0, 100);

while ((command[0] = getchar()) != EOF) {
if (command[0] != '\n')
{
scanf("%[^\n]s", command+1);
printf("%s\n", command);
while (getchar() != '\n');
}
else
{
printf("\n");
}
}
return 0;
}

ndakota
04-09-2011, 11:40
Grandissimo, grazie :)