[RISOLTO] [C] Leggere stringhe con spazio
-
Skater91
- Prode Principiante
- Messaggi: 123
- Iscrizione: giovedì 22 dicembre 2011, 22:43
- Desktop: plasma
- Distribuzione: Kubuntu 15.04 x86_64
[RISOLTO] [C] Leggere stringhe con spazio
Ciao a tutti ragazzi.
Sto studiando il linguaggio C e non riesco a fare leggere le stringhe con gli spazi. la funzione scanf("%s",s) legge fino allo spazio. a me servirebbe un modo per far leggere anche gli spazi (diciamo per intenderci un equivalente del cin.getline() del c++). Ho letto su internet di usare scanf("^['\n']",s) per leggere fino al newline ma il compilatore mi da errore. Qualcuno mi sa dare una soluzione?
Sto studiando il linguaggio C e non riesco a fare leggere le stringhe con gli spazi. la funzione scanf("%s",s) legge fino allo spazio. a me servirebbe un modo per far leggere anche gli spazi (diciamo per intenderci un equivalente del cin.getline() del c++). Ho letto su internet di usare scanf("^['\n']",s) per leggere fino al newline ma il compilatore mi da errore. Qualcuno mi sa dare una soluzione?
Ultima modifica di Skater91 il giovedì 29 maggio 2014, 19:24, modificato 1 volta in totale.
- vaeVictis
- Imperturbabile Insigne

- Messaggi: 4703
- Iscrizione: venerdì 27 luglio 2012, 17:58
- Desktop: Gnome
- Distribuzione: Ubuntu 20.04 64bit
Re: [C] Leggere stringhe con spazio
Ciao.
Hai fatto una ricerca online?
Posta il codice. Quello che ti riproduce l'errore va bene.
Hai fatto una ricerca online?
Posta il codice. Quello che ti riproduce l'errore va bene.
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
-
Skater91
- Prode Principiante
- Messaggi: 123
- Iscrizione: giovedì 22 dicembre 2011, 22:43
- Desktop: plasma
- Distribuzione: Kubuntu 15.04 x86_64
Re: [C] Leggere stringhe con spazio
volendo scrivere la cosa più banale il terminale con mi da questo errore
Codice: Seleziona tutto
#include <stdio.h>
#define dim 1001
int main(){
char s[dim];
scanf("[^'\n']",s);
printf("La stringa letta è:\n %s",s);
return 0;
}
Codice: Seleziona tutto
gcc prova.c -g -o provaCodice: Seleziona tutto
prova.c: In function ‘int main()’:
prova.c:5:19: warning: too many arguments for format [-Wformat-extra-args]
scanf("[^'\n']",s);
- vaeVictis
- Imperturbabile Insigne

- Messaggi: 4703
- Iscrizione: venerdì 27 luglio 2012, 17:58
- Desktop: Gnome
- Distribuzione: Ubuntu 20.04 64bit
Re: [C] Leggere stringhe con spazio
Codice: Seleziona tutto
scanf("%[^'\n']s",s);Non programmo in C da una vita al momento, mi pare di ricordare che comunque ci siano delle pesanti controindicazioni.
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
-
Skater91
- Prode Principiante
- Messaggi: 123
- Iscrizione: giovedì 22 dicembre 2011, 22:43
- Desktop: plasma
- Distribuzione: Kubuntu 15.04 x86_64
Re: [C] Leggere stringhe con spazio
ti ringrazio per avermi dato la soluzione,che tipo di controindicazioni ci sono?
Re: [C] Leggere stringhe con spazio
Scanf non è adatto per quello che vuoi fare, prova con fgets Dove s è la stringa da leggere, dim è la lunghezza massima della stringa, stdin è lo standard input, ossia la tastiera
Nota che potresti usare semplicementema non è consigliato e la funzione è deprecata in quanto non verifica la lunghezza della stringa inserita, di conseguenza se si inseriscono più caratteri di quelli che può contenere il buffer si avrà un buffer overflow e si potrebbero avere gravi bug di sicurezza, oltre a sicuri crash del programma
Codice: Seleziona tutto
fgets(s, dim, stdin)Nota che potresti usare semplicemente
Codice: Seleziona tutto
gets(stringa)-
Skater91
- Prode Principiante
- Messaggi: 123
- Iscrizione: giovedì 22 dicembre 2011, 22:43
- Desktop: plasma
- Distribuzione: Kubuntu 15.04 x86_64
Re: [RISOLTO] [C] Leggere stringhe con spazio
fgets lo conosco,ma non è per leggere da file?
Re: [RISOLTO] [C] Leggere stringhe con spazio
Si, ma lo standard input è un buffer si comporta allo stesso modo di un file, quindi funziona, esiste anche stdout che è il file descriptor per lo standard output e stderr che è per lo standard error, prova con fprintf o fputs e vedi che funziona
- vaeVictis
- Imperturbabile Insigne

- Messaggi: 4703
- Iscrizione: venerdì 27 luglio 2012, 17:58
- Desktop: Gnome
- Distribuzione: Ubuntu 20.04 64bit
Re: [C] Leggere stringhe con spazio
Se te la cavi con l'inglese, dai una letta qui per capire gli svantaggi di scanf e qui per capire come non usare scanf.Skater91 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4590803#p4590803][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:[...]che tipo di controindicazioni ci sono?
Se hai dubbi (o problemi linguistici) fai un fischio.
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
-
Skater91
- Prode Principiante
- Messaggi: 123
- Iscrizione: giovedì 22 dicembre 2011, 22:43
- Desktop: plasma
- Distribuzione: Kubuntu 15.04 x86_64
Re: [RISOLTO] [C] Leggere stringhe con spazio
Grazie a tutti ragazzi mi avete tolto ogni dubbio!
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 6 ospiti
