scanf ("% s", str) non lo farà. Smetterà di leggere al primo spazio. gets (str) non funziona quando la stringa è grande. Qualche idea?Come posso leggere una stringa con spazi al suo interno in C?
risposta
utilizzare fgets con STDIN come flusso di file. Quindi puoi specificare la quantità di dati che vuoi leggere e dove metterli.
Quando vuoi smettere di leggere? A EOF, a un personaggio specifico, o cosa?
Si può leggere un determinato numero di caratteri con% c
c corrisponde ad una successione di larghezza count caratteri (default 1); il prossimo puntatore deve essere un puntatore al carattere, e deve esserci spazio sufficiente per tutti i caratteri (non viene aggiunto NUL in chiusura). Il solito salto dello spazio bianco iniziale viene soppresso. Per saltare lo spazio bianco , utilizzare uno spazio esplicito nel formato.
È possibile leggere i caratteri specifici (o fino a quelli esclusi) con% [
[corrisponde a una sequenza non vuota di caratteri del set di caratteri accettati specificato; il puntatore successivo deve essere un puntatore a char, e ci deve essere spazio sufficiente per tutti i caratteri nella stringa , più un carattere NUL di fine. La solita ignoranza dello spazio iniziale bianco viene soppressa. La stringa deve essere composta da caratteri in (o non in) un determinato set; il set è definito dai caratteri tra parentesi aperta [carattere e parentesi chiusa] charac- ter. L'insieme esclude quei caratteri se il primo carattere dopo la parentesi aperta è una circostanza circoscritta ^. Per includere una parentesi chiusa nella serie , impostarla come primo carattere dopo la parentesi aperta o il cerchio di direzione; qualsiasi altra posizione finirà il set. Il carattere trattino - è anche speciale; se collocato tra due altri caratteri, aggiunge tutti i caratteri che intervengono sul set. Per includere un trattino, farlo diventare l'ultimo carattere prima della parentesi chiusa finale . Ad esempio, `[^] 0-9-] 'significa l'insieme ` `tutto eccetto parentesi chiusa, da zero a nove e trattino' '. La stringa si conclude con la comparsa di un personaggio non nel (o, con un cir- cumflex, in) impostare o quando la larghezza del campo si esaurisce
Non voglio solo spazi vuoti tra la stringa. Ho provato scanf ("% [^ \ n]", str); ma non ha funzionato neanche. Grazie comunque! – Johny
Quindi vuoi leggere un'intera linea? –
Immagino che questo significhi fino a 79 caratteri, giusto? Ho bisogno di una stringa che potrebbe essere più grande. – Johny
creare la propria funzione per leggere una riga. Ecco cosa si deve fondamentalmente a che fare:
1. fgets into allocated (growable) memory 2. if it was a full line you're done 3. grow the array 4. fgets more characters into the newly allocated memory 5. goto 2.
L'implementazione può essere un po 'complicato :-)
È necessario pensare a ciò che è necessario passare alla funzione (per lo meno l'indirizzo del la matrice e le sue dimensioni); e cosa restituisce la funzione quando tutto "funziona" o quando si verifica un errore.Devi decidere cosa è un errore (è una stringa di 10 Gbyte lunga senza '\ n' un errore?). Devi decidere come far crescere l'array.
Modifica
In realtà può essere meglio per fgetc
piuttosto che fgets
get a character it it EOF? DONE add to array (update length), possible growing it (update size) is it '\n'? DONE repeat
Per leggere stringa con lo spazio che si può fare come segue:
char name[30],ch;
i=1;
while((ch=getchar())!='\n')
{
name[i]=ch;
i++;
}
i++;
name[i]='\n';
printf("String is %s",name);
'ch' dovrebbe essere' int' per distinguere 'EOF' da tutti gli altri' char'. Come è ora, 'while ((ch = getchar())! = '\ N')' è un ciclo infinito dovrebbe 'EOF' essere restituito da' getchar() '. – chux
char str[100];
Prova questo
scanf("%[^\n]s",str);
o questo
fgets(str, sizeof str, stdin))
1) Non c'è motivo per 's' in' "% [^ \ n] s" '. 2) 'scanf ("% [^ \ n] ... 'non scansionerà nulla e non salverà nulla in' str' se l'input è '" \ n "'. 3) 'scanf ("% [^ \ n] .. .' non protegge da input grandi. 4) 'scanf ("% [^ \ n] ... 'lascia' '\ n'' in 'stdin'. – chux
- 1. Come posso utilizzare la funzione lambda al suo interno?
- 2. Come posso creare una stringa di spazi vuoti in C++?
- 3. codifica una barra di ricerca con l'icona al suo interno
- 4. Come posso inizializzare una lista collegata con voci/valori al suo interno?
- 5. Perché JPasswordField.getPassword() crea una stringa con la password al suo interno?
- 6. PHP: crea una stringa maiuscola ma non le entità html al suo interno?
- 7. get nome della funzione al suo interno
- 8. Una raccolta MongoDB può contenere al suo interno un'altra raccolta?
- 9. C# Regex - Accetta spazi in una stringa
- 10. Come si ordina una matrice NSMutable con NSNumbers al suo interno?
- 11. forme di css con testo al suo interno
- 12. Regex: come sostituire una parte di un motivo e fare riferimento a una variabile al suo interno?
- 13. Leggere un file in una stringa al momento della compilazione
- 14. Come posso tagliare una stringa in C?
- 15. Come posso clonare una riga in una tabella senza clonare i valori degli elementi di input al suo interno?
- 16. In batch, come posso creare spazi all'inizio di una stringa di prompt di input?
- 17. Come posso leggere da una stringa XML in OpenCV?
- 18. Come posso rilevare "_" in una stringa C++?
- 19. collasso spazi in una stringa
- 20. Come inviare email html con django con contenuti dinamici al suo interno?
- 21. Come aumentare la larghezza div in base al testo al suo interno?
- 22. come leggere stringa immessa dall'utente in c
- 23. Emacs: come trovare una variabile in base al suo valore?
- 24. Come convalidare una stringa esclusivamente alfabetica con spazi in PHP?
- 25. Come posso creare un dominio dell'applicazione ed eseguire la mia applicazione al suo interno?
- 26. Come dividere una stringa con due spazi continui
- 27. Controllo dell'accesso in scrittura in una directory prima di creare file al suo interno
- 28. Accesso al valore di una variabile con il suo nome come stringa in Java
- 29. .NET Formatta una stringa con spazi fissi
- 30. Come posso disegnare una casella attorno al testo con SVG?
'gets' non funziona mai. È un errore intrinseco usare mai "ottiene". Usa 'fget'. –
Forse è la mia versione di c che non accetta affatto ottiene ... Grazie! – Johny
@Johnny: L'ammonizione di R contro l'uso di 'gets()' è dovuta al fatto che usarlo introduce un * enorme * buco di sicurezza nel codice, non che il tuo particolare compilatore abbia un problema con esso (non dovrebbe;() 'è stato parte della C dall'inizio). È stato deprecato a partire da C99 e non dovrebbe più essere utilizzato. –