c語言變量及輸入輸出
scanf:
格式字符串的一般形式:%[*][輸入數據寬度][長度] 類型 (其中有方括號[] 的項為任選項。)
各項意義:
1) 類型:表示輸入數據的類型,其格式符和意義如下表所示。
格式字符 | 意義 |
d | 輸入十進制整數 |
o | 輸入八進制整數 |
x | 輸入十六進制整數 |
u | 輸入無符號十進制整數 |
f,e | 輸入實型數(用小數形式或指數形式) |
c |
輸入單個字符 |
s | 輸入字符串 |
2) “ *”符: 用以表示該輸入項讀入後不賦予相應的變量,即跳過該輸入值。
例:scanf("%d %*d %d",&a,&b);
輸入: 1 2 3, 則a=1,2被跳過,b=3。
3) 寬度: 用十進制整數指定輸入的寬度(即字符數) 。
例1:scanf("%5d",&a);
輸入: 12345678 則a=12345,其余部分被截去。
例2:scanf("%4d%4d",&a,&b);
4) 長度: 長度格式符為 l 和 h, l 表示輸入長整型數據(如%ld) 和雙精度浮點數(如%lf) 。 h 表示輸入短整型數據。
printf:
格式字符串的一般形式:[標誌][輸出最小寬度][. 精度][長度] 類型 (其中方括號[] 中的項為可選項。)
各項意義:
1) 類型:類型字符用以表示輸出數據的類型,其格式符和意義如下表所示:
格式字符 | 意義 |
d | 以十進制形式輸出帶符號整數(正數不輸出符號) |
o | 以八進制形式輸出無符號整數(不輸出前綴 0) |
x,X | 以十六進制形式輸出無符號整數(不輸出前綴 Ox) |
u | 以十進制形式輸出無符號整數 |
f | 以小數形式輸出單、雙精度實數 |
e,E | 以指數形式輸出單、雙精度實數 |
g,G | 以%f 或%e 中較短的輸出寬度輸出單、雙精度實數 |
c | 輸出單個字符 |
s | 輸出字符串 |
2) 標誌:標誌字符為-、 +、 #、空格四種,其意義下表所示:
標 誌 | 意義 |
- | 結果左對齊,右邊填空格 |
+ | 輸出符號(正號或負號) |
空格 | 輸出值為正時冠以空格,為負時冠以負號 |
# |
對 c,s,d,u 類無影響;對 o 類, 在輸出時加前綴 o;對 x 類, 在輸出時加前綴 0x; 對 e,g,f 類當結果有小數時才給出小數點 |
3) 輸出最小寬度:
用十進制整數來表示輸出的最少位數。若實際位數多於定義的寬度,則按實際位數輸出,若實際位數少於定義的寬度則補以空格或 0。
4) 精度:
精度格式符以“. ”開頭,後跟十進制整數。
本項的意義是:如果輸出數字,則表示小數的位數;如果輸出的是字符,則表示輸出字符的個數;若實際位數大於所定義的精度數,則截去超過的部分。
5) 長度:
長度格式符為 h,l 兩種, h 表示按短整型量輸出, l 表示按長整型量輸出。
註意
- 在輸入多個數值數據時,若格式控制串中沒有非格式字符作輸入數據之間的間隔則可用空格, TAB或回車作間隔。
- C 編譯在碰到空格,TAB,回車或非法數據(如對“%d”輸入“12A”時, A 即為非法數據)時即認為該數據結束。
- 在輸入字符數據時,若格式控制串中無非格式字符,則認為所有輸入的字符均為有效字符。
例:scanf("%c%c%c",&a,&b,&c);
輸入:d e f 則a=‘d‘, b=‘ ‘, c=‘e‘。
輸入:def 則a=‘d‘, b=‘e‘, c=‘f‘。 -
如果格式控制串中有非格式字符則輸入時也要輸入該非格式字符。只有“%”開頭的部分才會被後面的值替換掉。
例1:scanf("%d,%d,%d",&a,&b,&c); (其中用非格式符“ , ”作間隔符)輸入應為:5,6,7
例2:scanf("a=%d,b=%d,c=%d",&a,&b,&c); - 如輸入的數據與輸出的類型不一致時,雖然編譯能夠通過,但結果將不正確。
double型輸入輸出形式如下:
double a;
scanf("%lf",&a);
printf("%f",a);
註:在輸入double類型時需要使用%lf才能正常得到a值,而在輸出double類型時可以使用%f,因為在執行printf("%f",a)時編譯器將自動把float類型的參數轉化為double類型
- 整數值用%d輸出,實數用%f輸出 8.0和5.0被看做為實數、浮點數
- printf中使用“\n”表示換行
- 輸出25,printf("%d",25);
- 輸出025,printf("%03d",25);
c語言變量及輸入輸出