C語言學習Day5
阿新 • • 發佈:2019-01-12
- scanf() 函式:用於從鍵盤獲取字元,例如
char name[40];
printf("enter your name:");
scanf("%39s",name);
- 如何將數字填入數字域(numeric field)?
int age;
printf("enter your age: ");
scanf("%i",&age);
- 同樣也可以使用scanf()一次錄入多條資訊
char first_name[20]; char last_name[20]; printf("Enter first and last name:"); scanf("%19s %19s", first_name,last_name);//此處錄入格式有空格,所以輸入內容時,兩段資訊之間也應當有空格 printf("First: %s Last:%s \n",first_name,last_name);
- 直接在scanf()使用%s錄入資料,若錄入的資料量超過分配的儲存空間,程式會崩潰。
- fgets()可替代scanf()用於錄入文字資料,它同樣使用了指標,但是不同之處在於它有最大長度。
char food[5];
printf("Enter favorite food:");
fgets(food,sizeof(food),stdin);//food指標,sizeof(food)計算字串的最大限度包含\0(不必享scanf()那樣-1),stdin資料來自鍵盤
- 如果傳遞一個數組給fgets(),使用sizeof不會出問題,但是如果傳遞一個指標給fgets(),你應當輸入明確的長度,而不是使用sizeof
- fgets()來自gets(),但是後者沒有限制,所以不推薦使用
- 比較:scanf()與fgets()
- 兩者有限制,前者的限制是可選的,因此有可能會忘記,而後者是強制性的
- 前者支援輸入多種結構資料,多種域(multiple fields),而後者只支援字串,且只有緩衝區
- 前者使用%s讀取字串時遇到空格就會停止,因此要麼多次輸入資料要麼使用其他的表達符號,後者可以支援完整輸入包括空格
- 總結:向多個域中輸入結構資料,選用scanf(),輸入單一無結構字串,使用fgets()