qual è stata la sintassi per le stringhe di input con più di una parola cioè con lo spazio in mezzo attraverso scanf() non ottiene()i dati su più stringa di parola attraverso scanf()
risposta
I non pensare che questo sia possibile con scanf(). Se si conosce il numero di parole che si desidera leggere, si può leggere con
char str1[100], str2[100];
scanf("%s %s", str1, str2);
Si noti che questo è un enorme lacuna nella sicurezza, dal momento che un utente può facilmente inserire una stringa che è più lungo dello spazio allocato.
Se non si conosce il numero di parole, potrebbe essere necessario riformulare la domanda. Per cosa hai bisogno di leggerlo? Perché non vuoi usare gets(), perché deve essere scanf()?
Ovviamente 'gets' è una sua scappatoia per la sicurezza, e si dovrebbe usare' fgets'. –
non esiste una "enorme scappatoia per la sicurezza" se si utilizza il noto parametro scanf-format come "scanf ("% 99s% 99s ", str1, str2)" – user411313
Grazie gordon, non sapevo del campo larghezza del formattatore . Ma come saranno gestite le parole con> 99 caratteri? I caratteri vengono scartati correttamente o si attardano nel buffer di input e causano il fallimento del successivo formattatore? –
Si potrebbe leggere una intera linea da un file se si vuole con:
scanf("%[^\n]\n", line);
Ora, si potrebbe usare sscanf per ottenere ogni parola:
sscanf(line, "%s", word);
line += strlen(word) + 1;
"linea" e "parola" sono puntatori di carattere.
Nota come va la linea per arrivare alla parola successiva.
'scanf ("% [^ \ n] \ n ", riga);' ** non ** leggerà sempre un'intera riga. Non salva nulla in 'line' l'input è' "\ n" 'e il' '\ n'' rimarrà in 'stdin'. 'sscanf (line,"% s ", word);' non salverà nulla in 'word' se' line' è costituito solo da white-space. – chux
char name[50];
printf("Enter your full name: ");
scanf("%[^\n]s",name);
Qui [^\n
indica che scanf()
sarà continuare a ricevere i caratteri in name[ ]
fino ad incontrare un \n
.
Non c'è bisogno di 's' in' scanf ("% [^ \ n] s", nome); '. – chux
Meglio utilizzare fgets()
rispetto a scanf()
per leggere una riga di input dell'utente.
Se il codice deve utilizzare scanf()
poi
char buf[100];
// Read up to 99 char and then 1 \n
int count = scanf("%99[^\n]%*1[\n]", buf);
if (count == EOF) {
Handle_EndOfFile(); // or IO error
}
if (count == 0) { // Input began with \n, so read and toss it
scanf("%*c");
}
parse buf
per le singole parole.
char field1[40];
char field2[40];
char field3[40];
char field4[40];
char field5[40];
char field6[40];
/*
* sscanf(workarea, format, field of pointers)
* Interpret [^ ] as a field ending in a blank
* Interpret [^' '] as a field ending in a blank
* Interpret [^ |\t] as a field ending in blank or tab char
* Interpret [^' '|\t] as a field ending in blank or tab char
* Interpret [^ |\t\n] as a field ending in blank, tabchar or end-of-line
*
*/
strcpy(workarea,"Bread milk eggs cheese tomatoes cookies \n");
i=sscanf(workarea," %[^' '|\t] %[^[' '|\t] %[^' '|\t] %[^' '|\t] %[^' '|\t] %[^' '|\t|\n] ",
field1,field2,field3,field4,field5,field6);
questa scansione si traduce in field1 contenenti "Pane", field2 contenente "latte", ... field6 contenente "cookies". Tra le prime e le ultime parole è possibile uno o più spazi vuoti o tabulati Il termine che segue i cookie può essere uno dei tre spazi, tab o newline che verranno eliminati e non faranno parte dei "cookies".
- 1. Iterare attraverso una stringa parola per parola
- 2. C: Più scanf di, quando entro un valore per una scanf salta il secondo scanf
- 3. Leggi stringa C++ con scanf
- 4. Perché gets() è più pericoloso di scanf()?
- 5. Cercare l'equivalente di scanf
- 6. Puoi condividere i dati su più modelli?
- 7. Mentre scanf! = EOF o scanf == 1?
- 8. dati pubblicare attraverso httpWebRequest
- 9. Utilizzare scanf con le espressioni regolari
- 10. Ottieni dati da un file senza itarlo attraverso più volte
- 11. prendendo l'input di una stringa parola per parola
- 12. dati Persistenza attraverso postback ASP.NET
- 13. Utilizzo di scanf con NSStrings
- 14. dati passare attraverso i controller di navigazione bambino
- 15. l'invio di dati grezzi attraverso usb su linux
- 16. Struttura dati più veloce per cercare una stringa
- 17. Passare i dati del referrer attraverso l'intento del cromo per giocare su google
- 18. argomenti invertito a scanf()
- 19. C#: looping attraverso linee di stringa multilinea
- 20. come trasferire i dati in più da un frammento all'altro attraverso l'attività
- 21. Stringa troncata sul limite della parola più vicina
- 22. Dividere e unire più "rami" logici di dati di stringa
- 23. parola chiave non supportata origine dati
- 24. Dove sono memorizzati i dati di stringa?
- 25. In looping attraverso i caratteri in una stringa in VB.NET
- 26. React-router: passaggio dei dati attraverso i percorsi
- 27. Iterazione attraverso una stringa unicode in Python
- 28. premendo ogni parola su un array
- 29. Get prima parola della stringa
- 30. attraversa la stringa C: ottieni l'ultima parola di una stringa
Sembra più una domanda in C che in C++, correggimi se sbaglio? – DumbCoder