Come posso scannerizzare stringhe con spazi in esse usando scanf ()?

Voglio scrivere un sottoprogramma in cui un utente può inserire il proprio commento. Io uso scanf("%s", X) e faccio in modo che inseriscano un commento, ma può solo memorizzare la parola prima di una barra spaziatrice nella stringa.

Come posso risolvere questo problema per memorizzare un’intera frase in una stringa o in un file?

Il mio codice è presentato di seguito:

 FILE *fp; char comment[100]; fp=fopen("comment.txt","a"); printf("You can input your comment to our system or give opinion to the musics :\n"); scanf("%s",comment); fputs(comment,fp); 

Piuttosto che le risposte che ti dicono di non usare scanf() , puoi semplicemente l’opzione Scanset negato di scanf() :

 scanf("%99[^\n]",comment); // This will read into the string: comment // everything from the next 99 characters up until // it gets a newline 

scanf () con %s come identificatore di formato legge una sequenza di caratteri a partire dal primo carattere non di spaziatura fino a (1) un altro carattere di spaziatura o (2) fino alla larghezza del campo se specificato (ad esempio scanf("%127s",str); – legge 127 caratteri e aggiunge null byte come 128 °), a seconda di cosa viene prima. E quindi aggiungere automaticamente byte null alla fine. Il puntatore del mio passato è abbastanza grande da contenere la sequenza di input dei caratteri.

Puoi usare fgets per leggere l’intera riga:

 fgets(comment, sizeof comment, stdin); 

Nota che Fgets legge anche il carattere di nuova riga. Potresti voler eliminare il carattere di nuova riga dal comment .

invece di scanf usa fgets su stdin per leggere l’intera riga.

È ansible utilizzare le funzioni gets() , getline() per leggere la stringa da stdin .