Pagina 1 di 1

[RISOLTO] [C] Leggere stringhe con spazio

Inviato: giovedì 29 maggio 2014, 18:11
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?

Re: [C] Leggere stringhe con spazio

Inviato: giovedì 29 maggio 2014, 18:42
da vaeVictis
Ciao.
Hai fatto una ricerca online?
Posta il codice. Quello che ti riproduce l'errore va bene.

Re: [C] Leggere stringhe con spazio

Inviato: giovedì 29 maggio 2014, 18:53
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);

Re: [C] Leggere stringhe con spazio

Inviato: giovedì 29 maggio 2014, 19:09
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.

Re: [C] Leggere stringhe con spazio

Inviato: giovedì 29 maggio 2014, 19:24
da Skater91
ti ringrazio per avermi dato la soluzione,che tipo di controindicazioni ci sono?

Re: [C] Leggere stringhe con spazio

Inviato: giovedì 29 maggio 2014, 19:34
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

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

Inviato: giovedì 29 maggio 2014, 19:38
da Skater91
fgets lo conosco,ma non è per leggere da file?

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

Inviato: giovedì 29 maggio 2014, 20:33
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

Re: [C] Leggere stringhe con spazio

Inviato: giovedì 29 maggio 2014, 21:05
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.

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

Inviato: venerdì 30 maggio 2014, 11:40
da Skater91
Grazie a tutti ragazzi mi avete tolto ogni dubbio!