在C語言中,有兩個函數可以讓使用者從鍵盤輸入數組數據,它們分別是gets()
和scanf()
。 scanf()是透過格式控制符%s輸入陣列字串,除了字串,還能輸入其他類型的資料;gets()是直接輸入陣列字串,並且只能輸入字串。
但是,scanf()和gets()是有差別的。
scanf()
讀取字串時以空格為分隔,遇到空格就認為目前字串結束了,所以無法讀取含有空格的字串。
gets()
認為空格也是字串的一部分,只有遇到回車鍵時才認為字串輸入結束,所以,不管輸入了多少個空格,只要不按下回車鍵,對gets() 來說就是一個完整的字串。換句話說,gets() 用來讀取一整行字串。
舉例:
#include <stdio.h> int main(){ char str1[30] = {0}; char str2[30] = {0}; char str3[30] = {0}; //gets() 用法 printf("Input a string: "); gets(str1); //scanf() 用法 printf("Input a string: "); scanf("%s", str2); scanf("%s", str3); //分别输出 printf("\nstr1: %s\n", str1); printf("str2: %s\n", str2); printf("str3: %s\n", str3); return 0; }
執行結果:
Input a string: C C++ Java Python Input a string: PHP JavaScript str1: C C++ Java Python str2: PHP str3: JavaScript
第一次輸入的字串被 gets() 全部讀取,存入 str1 中。第二次輸入的字串,前半部被第一個 scanf() 讀取並存入 str2 中,後半部被第二個 scanf() 讀取並存入 str3 中。
注意,scanf() 在讀取資料時需要的是資料的位址,這一點是恆定不變的,所以對於int、char、float 等類型的變數都要在前邊添加&以取得它們的位址。但是在本段程式碼中,我們只給了字串的名字,卻沒有在前邊加上&,這是為什麼呢?因為字串名字或陣列名字在使用的過程中一般都會轉換為位址,所以再加&就是多此一舉,甚至會導致錯誤了。
就目前學到的知識而言,int、char、float 等類型的變數用於scanf() 時都要在前面加上&,而陣列或字串用於scanf() 時不用加&,它們本身就會轉換為地址。讀者一定要謹記這一點。
至於陣列名字(字串名字)和位址的轉換細節,以及陣列名字何時會轉換為位址。
以上是c語言數組怎麼輸入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!