|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Oct 2006
Messaggi: 385
|
[c] ottenere frasi con scanf() come si fa?
salve ho un problemino
dovrei prendere da imput un frase composta da più parole e da spazi usando scanf() mi sono accorto però che legge solo la prima parola della frase perchè incontrando lo spazio termina automaticamente l' acquisizione come devo fare per ottenere una frase con diversi spazi da imput in c? (anche non utilizzando scanf va bene qualsiasi altra funzione che serva allo scopo) compilatore usato gcc 4.1 Ultima modifica di PaSteam : 14-05-2008 alle 12:12. |
![]() |
![]() |
![]() |
#2 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7027
|
prova così:
Codice:
#include <stdlib.h> #include <stdio.h> int main() { char sz[32]; if (scanf("%32[^\n]", sz) != 1) { // gestione dell'errore } // ... return 0; } |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Oct 2006
Messaggi: 385
|
grazie per l' aiuto cosi funziona ma poi viene prodotto un errore riprendo il tuo esempio
devo ottenere 2 frasi da input la prima va a buon fine ma la seconda frase non la fa inserire #include <stdlib.h> #include <stdio.h> int main() { char sz[32]; char sz1[20]; printf("inserisci la prima frase\n"); if (scanf("%32[^\n]", sz) != 1) { printf("\nerrore1\n"); } printf("%s" , sz); printf("\n inserisci la seconda frase"); //non mi fa scrivere la seconda frase il programma termine con errore2!!!! if (scanf("%20[^\n]", sz1) != 1) { printf("\nerrore2\n"); } printf("%s" , sz1); // ... return 0; } qualche soluzione? |
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Aug 2007
Messaggi: 50
|
Per leggere da tastiera una frase basta semplicemente usare una stringa e poi la funzione gets:
Codice:
int main() { char s[50]; printf("Inserisci frase: "); /*termina l'inserimento dando l'invio*/ gets(s); return 0; } |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Oct 2006
Messaggi: 385
|
perfetto utilizzando gets funziona tutto ma c'è un problema viene segnalato
un warning dove si dice che l' utilizzo di gets è pericoloso ![]() purtroppo il mio programma non deve generare warning ![]() il prof vuole cosi altrimenti non me lo accetta!!! |
![]() |
![]() |
![]() |
#6 | |
Member
Iscritto dal: Aug 2007
Messaggi: 50
|
Quote:
io uso visual c++ e non mi dà nessun warning Ultima modifica di dreadknight : 14-05-2008 alle 22:25. |
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Mar 2005
Città: Morimondo city
Messaggi: 5491
|
più che altro devi stare attento che la stringa non superi i 50 caratteri(in questo esempio)
__________________
Khelidan |
![]() |
![]() |
![]() |
#8 |
Member
Iscritto dal: Aug 2007
Messaggi: 50
|
quoto. e aggiungo che nel conteggio dei caratteri va anche aggiunto il terminatore di stringa ( '\0' ), che viene inserito automaticamente dal compilatore. Quindi, in quell'esempio, il numero di caratteri disponibili sono 49: se è questo il problema, basta sovradimensionare la stringa oppure usare l'allocazione dinamica, ma quest'ultima è una tecnica un po' più complessa e mi sembra che tu sia alle prime armi, quindi la lascerei perdere.
|
![]() |
![]() |
![]() |
#9 | |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7027
|
Quote:
gets è insicura perché non permette di stabilire una dimensione massima del buffer, e la deprecazione non dipende dalla versione di Visual C++ ma da quella del Windows SDK. @PaStream: usa scanf che è più sicura; ora do un'occhiata al codice e vedo come mai da' errore. |
|
![]() |
![]() |
![]() |
#10 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7027
|
ho visto; non la fa inserire perché nello standard input è rimasto ancora il newline bufferizzato; solito odioso problema che non ho mai capito come risolvere.
edit - ho fatto una prova e ora sembra funzionare; la seconda scanf falla così: scanf("\n%20[^\n]", sz1) |
![]() |
![]() |
![]() |
#11 |
Member
Iscritto dal: Aug 2007
Messaggi: 50
|
|
![]() |
![]() |
![]() |
#12 | |||
Senior Member
Iscritto dal: Oct 2006
Messaggi: 385
|
Quote:
utilizzando il compilatore gcc 4.1 con ubuntu (.text+0x18b): warning: the `gets' function is dangerous and should not be used . Quote:
Quote:
ma che spiegazione c'è? |
|||
![]() |
![]() |
![]() |
#13 | |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7027
|
Quote:
può darsi che ci sia un sistema più ortodosso ![]() |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:15.