[英]How to scan two or more strings containing spaces in C programming?
我正在嘗試運行此代碼,但無法正常工作。任何人都可以告訴我該代碼出了什么問題。
int main()
{
char name[100],college_name[100],address[100];
printf("Enter your name :");
scanf("%[^\n]s",name);
printf("Enter college name :");
scanf("%[^\n]s",college_name);
printf("Enter address :");
scanf("%[^\n]s",address);
}
您的scanf
調用正確地讀取了所有內容,但不包括\\n
。
問題是\\n
保留在輸入流上。 因此,當第二個和第三個scanf
調用運行時,它們什么也找不到。 (他們最多讀取零個字符,但不包括下一個\\n
。)
最簡單的解決方法是調用getchar()
讀取並丟棄\\n
字符:
#include <stdio.h>
int main()
{
char name[100],college_name[100],address[100];
printf("Enter your name :");
scanf("%[^\n]",name);
getchar(); /* discard \n */
printf("Enter college name :");
scanf("%[^\n]",college_name);
getchar(); /* discard \n */
printf("Enter address :");
scanf("%[^\n]",address);
getchar(); /* discard \n */
}
(我還從scanf
調用中刪除了多余的s
字符。它是%[]
,不是%[]s
。)
現在,從一個方面來說,這是一個較差的解決方案。 從理論上講,我們應該檢查getchar()
讀取的字符實際上是\\n
。 但是(a)在這種情況下幾乎是必須的,並且(b)任何使用scanf
讀取用戶輸入的程序都已經很笨拙並且不可靠,因此添加一些笨拙而且可能不可靠(但簡單)的getchar
調用不會更糟了。
(有人會建議-甚至有人建議-調用fflush(stdin)
擺脫多余的換行符。這可能在某些平台上有效,但不能保證一定會用到,並且在任何地方都無法使用,所以它甚至是更糟糕的解決方法。)
真正的教訓是,不要使用scanf
的用戶輸入。 不幸的是,在這樣的開始程序中,它顯然是用戶輸入的首選,因為它看起來是如此簡單和方便。 但事實證明,(當你試圖讓實際的工作方案) scanf
實際上只是在方便不可能左右,所以只要你已經學到了一點關於C,你會想放棄scanf
完全,並盡一切使用更強大,更可靠的技術來輸入您的信息。 (您的下一個問題可能是更可靠的技術,例如什么?一種方法是使用fgets()
讀取用戶輸入的行,然后根據需要操縱這些行。另請參見http://c-faq.com/stdio/scanfprobs .html , https: //www.eskimo.com/~scs/cclass/notes/sx10h.html和https://www.eskimo.com/~scs/cclass/notes/sx12e.html 。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.