[RISOLTO] [C] Leggere stringhe con spazio

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
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

Messaggio da Skater91 »

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?
Ultima modifica di Skater91 il giovedì 29 maggio 2014, 19:24, modificato 1 volta in totale.
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: [C] Leggere stringhe con spazio

Messaggio da vaeVictis »

Ciao.
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.»
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

Messaggio da Skater91 »

volendo scrivere la cosa più banale

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;
}
il terminale con

Codice: Seleziona tutto

gcc prova.c -g -o prova
mi da questo errore

Codice: Seleziona tutto

prova.c: In function ‘int main()’:
prova.c:5:19: warning: too many arguments for format [-Wformat-extra-args]
  scanf("[^'\n']",s);
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: [C] Leggere stringhe con spazio

Messaggio da vaeVictis »

Codice: Seleziona tutto

   scanf("%[^'\n']s",s);
p.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.»
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

Messaggio da Skater91 »

ti ringrazio per avermi dato la soluzione,che tipo di controindicazioni ci sono?
ale4
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 761
Iscrizione: venerdì 10 agosto 2012, 17:53

Re: [C] Leggere stringhe con spazio

Messaggio da ale4 »

Scanf non è adatto per quello che vuoi fare, prova con fgets

Codice: Seleziona tutto

fgets(s, dim, stdin)
Dove s è la stringa da leggere, dim è la lunghezza massima della stringa, stdin è lo standard input, ossia la tastiera

Nota che potresti usare semplicemente

Codice: Seleziona tutto

gets(stringa)
ma 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
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

Messaggio da Skater91 »

fgets lo conosco,ma non è per leggere da file?
ale4
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 761
Iscrizione: venerdì 10 agosto 2012, 17:53

Re: [RISOLTO] [C] Leggere stringhe con spazio

Messaggio da ale4 »

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
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: [C] Leggere stringhe con spazio

Messaggio da vaeVictis »

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.
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.»
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

Messaggio da Skater91 »

Grazie a tutti ragazzi mi avete tolto ogni dubbio!
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 2 ospiti