Ho cercato di utilizzare espressioni regolari su scanf, per leggere una stringa di massimo n caratteri e scartare qualsiasi altra cosa fino al carattere New Line. Tutti gli spazi devono essere trattati come caratteri regolari, quindi inclusi nella stringa da leggere. Ho studiato un articolo su Wikipedia sulle espressioni regolari, ma non riesco a far funzionare correttamente scanf. Ecco il codice che ho provato:Utilizzare scanf con le espressioni regolari
scanf("[ ]*%ns[ ]*[\n]", string);
[] si suppone di andare per il carattere di spazio effettivo, * dovrebbe significare uno o più, n è il numero di caratteri da leggere e la stringa è un puntatore assegnato con malloc. Ho provato diverse combinazioni; tuttavia tendo ad ottenere solo la prima parola di una frase letta (si ferma al carattere dello spazio). Inoltre, * sembra scartare un carattere invece di indicare "zero o più" ...
Qualcuno potrebbe spiegare in dettaglio in che modo le espressioni regolari vengono interpretate da scanf? Inoltre, è efficiente utilizzare getc ripetitivamente?
Grazie in anticipo: D
Prova 'fgets()': 'fgets (stringa, sizeof stringa, stdin);' – pmg
Il problema è che tutti i caratteri rimanenti saranno lasciati nello stream di input, vero? – someone
Se c'è spazio sufficiente 'fgets()' consuma tutto fino a (e includendo) un ''\ n''. – pmg