在C語言中,有兩個函數(shù)可以讓用戶從鍵盤上輸入數(shù)組數(shù)據(jù),它們分別是gets()和scanf()。scanf()是通過格式控制符%s輸入數(shù)組字符串,除了字符串,還能輸入其他類型的數(shù)據(jù);gets()是直接輸入數(shù)組字符串,并且只能輸入字符串。
但是,scanf()和gets()是有區(qū)別的。
scanf()讀取字符串時以空格為分隔,遇到空格就認為當前字符串結束了,所以無法讀取含有空格的字符串。
gets()認為空格也是字符串的一部分,只有遇到回車鍵時才認為字符串輸入結束,所以,不管輸入了多少個空格,只要不按下回車鍵,對gets()來說就是一個完整的字符串。換句話說,gets()用來讀取一整行字符串。
舉個例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<stdio.h>
intmain(){
charstr1[30]={0};
charstr2[30]={0};
charstr3[30]={0};
//gets()用法
printf("Inputastring:");
gets(str1);
//scanf()用法
printf("Inputastring:");
scanf("%s",str2);
scanf("%s",str3);
//分別輸出
printf("\nstr1:%s\n",str1);
printf("str2:%s\n",str2);
printf("str3:%s\n",str3);
return0;
}
運行結果:
1
2
3
4
5
Inputastring:CC++JavaPython
Inputastring:PHPJavaScript
str1:CC++JavaPython
str2:PHP
str3:JavaScript
第一次輸入的字符串被gets()全部讀取,并存入str1中。第二次輸入的字符串,前半部分被第一個scanf()讀取并存入str2中,后半部分被第二個scanf()讀取并存入str3中。
注意,scanf()在讀取數(shù)據(jù)時需要的是數(shù)據(jù)的地址,這一點是恒定不變的,所以對于int、char、float等類型的變量都要在前邊添加&以獲取它們的地址。但是在本段代碼中,我們只給出了字符串的名字,卻沒有在前邊添加&,這是為什么呢?因為字符串名字或者數(shù)組名字在使用的過程中一般都會轉換為地址,所以再添加&就是多此一舉,甚至會導致錯誤了。
就目前學到的知識而言,int、char、float等類型的變量用于scanf()時都要在前面添加&,而數(shù)組或者字符串用于scanf()時不用添加&,它們本身就會轉換為地址。讀者一定要謹記這一點。
至于數(shù)組名字(字符串名字)和地址的轉換細節(jié),以及數(shù)組名字什么時候會轉換為地址。
以上就是c語言數(shù)組怎么輸入?的詳細