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
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
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
Dove s è la stringa da leggere, dim è la lunghezza massima della stringa, stdin è lo standard input, ossia la tastiera
Nota che potresti usare semplicemente
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!