1. 程式人生 > >C語言學習Day5

C語言學習Day5

  • 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()
  1. 兩者有限制,前者的限制是可選的,因此有可能會忘記,而後者是強制性的
  2. 前者支援輸入多種結構資料,多種域(multiple fields),而後者只支援字串,且只有緩衝區
  3. 前者使用%s讀取字串時遇到空格就會停止,因此要麼多次輸入資料要麼使用其他的表達符號,後者可以支援完整輸入包括空格
  4. 總結:向多個域中輸入結構資料,選用scanf(),輸入單一無結構字串,使用fgets()