輸入輸出格式符
- 前言
- 資料輸入陳述句
- 一、 scanf函式
- 格式字串
- 1) 型別
- 2)“ * ” 符
- 3)寬度
- 4)長度
- 二、getchar函式
- 資料輸出陳述句
- 一、printf 函式呼叫的一般形式
- 二、格式字串
- 三、 字符輸出函式(putchar)
- 總結
前言
大家好呀,我是🎈🎈Aaron,一只想要在C++里為所欲為的博主,之前博主在刷題的時候遇到一些格式控制符的問題,感覺這東西不整理一下還真是挺亂的,所以借機查閱資料,瘋狂整理,給大家出一期整理有關輸入輸出控制格式符的博文,建議收藏哦!!請大家慢慢看完,如果覺得對自己有幫助,不妨o( ̄▽ ̄)d
一鍵三連呀!!
👍點贊👍 + 👀關注👀 + ?收藏?
資料輸入陳述句
C語言的資料輸入是由函式完成的,這里我們介紹scanf函式和getchar函式兩種
一、 scanf函式
scanf函式是一個標準庫函式,他的函式原型在頭檔案<stdio.h>中, scanf 函式的一般形式為:scanf
(“格式控制字串”, 元素地址),與printf函式不同,scanf 函式不能顯示非格式字串,也就是不能顯示提示字串,,
元素地址由兩部分組成:
1. 取地址運算子&
2. 變數名 例如,&a, &b 分別表示變數 a 和 b 的地址,這個地址就是編譯系統在記憶體中給變數 a, b
分配的地址的編號,這里不做過多介紹,如果有想要了解地址方面的底層知識,歡迎評論區留言哦,博主去整理!!
下面給出
scnaf 函式使用的例子
代碼:
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
printf("please enter the two integers:>");
scanf("%d %d", &a, &b);
printf("a = %d b = %d", a, b);
return 0;
}
在本例中,由于 scanf 函式本身不能顯示提示字串,所以先用 printf 函式在螢屏上提示用戶輸入兩個整數,然后執行 scanf 函式,用戶由控制臺輸入兩個整數,最后列印,
格式字串
格式字串的一般形式為:% + [*] + [輸入資料寬度] + [長度] + 型別
其中有方括號[ ]的項為任選項,可以有,也可以沒有,接下來介紹各項的意義:
1) 型別
表示輸入資料的型別,其格式和意義如下表所示:
| 格式 | 字符意義 |
|---|---|
| d | 輸入十進制整數 |
| o | 輸入八進制整數 |
| x | 輸入十六進制整數 |
| u | 輸入無符號十進制整數 |
| f | 輸入實型數(浮點數數形式) |
| e | 輸入實型數(指數形式) |
| c | 輸入單個字符 |
| s | 輸入字串 |
使用起來的效果就是:
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
int c = 0;
// 輸入
scanf("%d %o %x", &a, &b, &c);
// a - 輸入十進制數
// b - 輸入八進制數
// c - 輸入十六進制數
return 0;
}
其他的類比就行,不過要注意創建變數時的資料型別
2)“ * ” 符
這個控制格式符有一點點奇怪,但我們還是要了解,* 用以表示該輸入項讀入后不賦予相應的變數,即跳過該輸入值,
這個控制符是真的很奇怪,下面給出代碼解釋一下
代碼:
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
int c = 0;
scanf("%d %*d %d", &a, &b, &c);
printf("%d %d %d", a, b, c);
return 0;
}
小伙伴們可以拿這個代碼去試驗一下,一定會報錯,這里我就把報錯截圖給大家展示一下:
報錯截圖:

報錯截圖里顯示:
格式字串傳遞引數過多,再結合我上面說的 * 控制符的用法,應該是這里代碼的 &b 多余了,現在我們去掉再來試驗:
代碼:

這里我們可以看到,代碼確實跑起來了,但是只輸入兩個值是不夠的的,這里博主再次測驗,輸入三個值,
演示:

我們可以看到,輸入三個值,但 b 卻沒有改變,那到底是默認賦值為 0 還是保留初識化的值是 0 呢,為了嚴謹,讓大家理解的沒有一點問題,這里博主再次試驗,改變 b 的初識化的值,給大家展示:

由此可以看出,是保留了初識化的值,相當于 scanf 函式對 b 沒有起到輸入值的作用,雖然很神奇,但博主認為這個 * 控制符也未免太雞肋了些許😶
3)寬度
寬度的概念:用十進制整數指定輸入的寬度(即字符數),
舉個例子:scanf("%mdmd", &a, &b);
輸入:12345678
結果是將1234賦值給a, 5678賦值給b
給出代碼:
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%4d%4d", &a, &b);
printf("%d %d\n", a, b);
return 0;
}
運行結果:

變種:
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%3d%5d", &a, &b);
printf("%d %d\n", a, b);
return 0;
}

int main()
{
int a = 0;
int b = 0;
scanf("%3d%4d", &a, &b);
printf("%d %d\n", a, b);
return 0;
}

4)長度
長度格式符為 l 和 h , l 表示輸入長整型資料(如:%ld)和雙精度浮點數(如:%lf),h 表示輸入短整型資料,
使用 scanf 函式必須注意:
- scanf 函式中沒有精度控制,如: scanf (" %5.2f ", &a); 是非法的,不能企圖用這樣的陳述句輸入小數為兩位的實數,
- scanf 函式要求給出變數地址,直接給變數名會出錯,如: scanf (" %d “, a); 是非法的,必須寫成 scanf (” %d ", &a) ; 的形式,
- 在輸入多個資料時,如果 scanf 函式里沒有非格式控制符作為資料之間的間隔,我們在控制臺輸入的時候可以用空格將資料分開,但是注意,在輸入連續字串時,C 編譯默認遇到空格,回車,tab 或者非法資料時結束,
- 在輸入字符資料時,如果 scanf 中沒有非格式控制符,則會認為所有輸入的字符均有效,例如:scanf (" %c%c%c “, &a, &b, &c); 輸入:d e f, 則會把 ’ d ’ 賦給 a, ’ ’ 賦給 b, ’ e ’ 賦給 c,很明顯,這樣是錯誤的,也就是說,我們要按照空格間隔的方式輸入字符的話,就必須在 scanf 里使用相應的非格式控制符模式,如:scanf (” %c %c %c ", &a, &b, &c);
- 如果格式控制串中有非格式字符則輸入時也要輸入該非格式字符,例如: scanf (" %d,%d,%d",&a, &b, &c) ; 其中用非格式符 “ , ”作間隔符,故輸入時應為: 5,6,7 , 又如:scanf (" a = %d, b = %d, c = %d", &a, &b, &c); 則輸入應為 a = 5,b = 6,c = 7,
如果輸入的資料與輸出的型別不一致時,雖然編譯能夠通過,但結果將不正確,例如:
#include <stdio.h>
int main()
{
long a = 0.0;
scanf("%ld", &a);
printf("%d\n", a);
return 0;
}

需要將所有控制長度的控制符保持一值,才可以正常運行,也不會產生bug,
二、getchar函式
getchar 函式的功能是從鍵盤上輸入一個字符,其一般形式為: getchar(); 通常把輸入的字符賦予一個字符變數,構成賦值陳述句,如:
char c = 0;
c = getchar();
使用 getchar 函式需要注意的問題:
- getchar 函式只能接受單個字符,輸入數字也按字符處理,輸入多于一個字符時,只接收第一個字符,
- 使用 getchar 函式必須包含標準輸入輸出函式:“stdio.h”
資料輸出陳述句
一、printf 函式呼叫的一般形式
printf 函式是一個標準庫函式,它的函式原型在頭檔案“stdio.h”中,printf 函式呼叫的一般形式為: printf (“格式控制字串”,輸出表列)其中格式控制字串用于指定輸出格式,格式控制串可由格式字串和非格式字串兩種組成,格式字串是以 % 開頭的字串,在 % 后面跟有各種格式字符,以說明輸出資料的型別、形式、長度、小數位數等,如 “%d” 表示按十進制整型輸出,“%ld” 表示按十進制長整型輸出,“%c” 表示按字符型輸出等,后面將專門給予討論,
非格式字串在輸出時按照原樣列印,在顯示中起提示作用,輸出表列中給出了各個輸出項,要求格式字串和各輸出項在數量和型別上應該一一對應,
給出一個例子,看出不同格式控制符和不同非格式字串列印的區別:
代碼:
#include <stdio.h>
int main()
{
int a = 65;
int b = 66;
printf("%d %d\n", a, b);
printf("%d,%d\n", a, b);
printf("%c,%c\n", a, b);
printf("a = %d, b = %d\n", a, b);
}
列印結果:

本例中四次輸出了 a, b 的值,但由于格式控制串不同,輸出的結果也不相同,第一個 printf 的輸出陳述句格式控制串中,兩格式串 %d 之間加了一個空格 ( 非格式字符 ) ,所以輸出的 a, b 值之間有一個空格,第二個 printf 陳述句格式控制串中加入的是非格式字符逗號,因此輸出的 a, b 值之間加了一個逗號,第三個 printf 的格式串要求按字符型輸出 a, b 值,第四個 printf 中為了提示輸出結果又增加了非格式字串,
二、格式字串
在Turbo C 中格式字串的一般形式為: [ 標志 ] [ 輸出最小寬度 ] [.精度 ] [ 長度 ] 型別其中方括號 [ ] 中的項為可選項,各項的意義介紹如下:
- 型別字符用以表示輸出資料的型別
其格式符和意義下表所示:
| 表示輸出型別的格式字串 | 格式字符意義 |
|---|---|
| d | 以十進制形式輸出帶符號整數(正數不輸出符號) |
| o | 以八進制形式輸出無符號整數(不輸出前綴o) |
| x | 以十六進制形式輸出無符號整數(不輸出前綴0x) |
| u | 以十進制形式輸出無符號整數 |
| f | 以小數形式輸出單精度實數 |
| lf | 以小數形式輸出雙精度實數 |
| e | 以指數形式輸出單、雙精度實數 |
| g | 以 %f %e 中較短的輸出寬度輸出單、雙精度實數 |
| c | 輸出單個字符 |
| s | 輸出字串 |
- 標志
標志字符為 - 、 + 、 # 、空格四種,
其意義下表所示:
| 標志格式字符 | 標志意義 |
|---|---|
| - | 結果左對齊,右邊填空格 |
| + | 輸出符號(正號或負號) |
| 空格 | 輸出值為正時冠以空格,為負時冠以負號 |
| # | 對c,s ,d,u類無影響,對o,x加以前導,對e,g,f類有小數時給出小數點 |
- 輸出最小寬度
用十進制整數來表示輸出的最少位數, 若實際位數多于定義的寬度,則按實際位數輸出, 若實際位數少于定義的寬度則補以空格或0,
- 精度
精度格式符以 “.” 開頭,后跟十進制整數,本項的意義是:如果輸出數字,則表示小數的位數;如果輸出的是字符,則表示輸出字符的個數;若實際位數大于所定義的精度數,則截去超過的部分,
- 長度
長度格式符為h,l兩種,h表示按短整型量輸出,l表示按長整型量輸出,
光看概念怎么能理解呢,下面可以請大家思考一下以下代碼,看看你們的結果是什么:
- 第一題
#include <stdio.h>
void main()
{
int a = 15;
float b = 138.3576278f;
double c = 35648256.3645687;
char d = 'p';
printf("a = %d, %o, %x\n", a, a, a);
printf("b = %f, %lf, %.4lf, %e\n", b, b, b, b);
printf("c = %lf, %f, %.4lf\n", c, c, c);
printf("d = %c\n", d);
}
結果:

2. 第二題:
#include <stdio.h>
int main()
{
int a = 29;
float b = 1243.2341f;
double c = 24212345.24232;
char d = 'h';
printf("a = %d, %o, %x\n", a, a, a);
printf("b = %f, %lf, %.4lf, %e\n", b, b, b, b);
printf("c = %lf, %f, %.4lf\n", c, c, c);
printf("d = %c\n", d);
return 0;
}
運行結果:

使用 printf 函式時還要注意一個問題, 那就是輸出表列中的求值順序,不同的編譯系統不一定相同,可以從左到右,也可從右到左,Turbo C是按從右到左進行的,如下例所述形式:
#include <stdio.h>
int main()
{
int i = 8;
printf("%d\n%d\n%d\n%d\n%d\n%d\n", ++i, --i, i--, i++, -i--, -i++);
return 0;
}
運行結果:

*上面這個代碼不同編譯器輸出結果可能不同,說實話算是個錯誤代碼,但為了說明運行順序,還是用這個代碼給大家舉個例子,不用太過糾結,博主用的VS2019是從右往左運算的哦~*😜😜
三、 字符輸出函式(putchar)
putchar 函式:
putchar 函式是字符輸出函式, 其功能是在顯示幕上輸出單個字符,其一般形式為: putchar(字符變數)
例如:
putchar('A'); // -- 輸出大寫字母A
putchar(x); // -- 輸出字符變數x的值
putchar('\n'); // --換行 對控制字符則執行控制功能,不在螢屏上顯示,
使用本函式前必須要用檔案包含命令: # include < stdio.h >
給出代碼方便理解:
#include <stdio.h>
int main()
{
char a = 'B';
char b = 'o';
char c = 'k';
putchar(a);
putchar(b);
putchar(b);
putchar(c);
putchar('\t');
putchar('\n');
putchar(a);
putchar(b);
putchar(b);
putchar(c);
return 0;
}

總結
🏁🏁以上就是本文全部內容啦!!因為博主經常忘記,每次都要去查,覺得很麻煩,所以特地整理了一下,對博主自己很有幫助,也希望可以幫助到大家喔~~對這種細節知識點的掌握對我們寫代碼的時候會很有幫助呢!
最后希望大家不要白嫖 不要白嫖 不要白嫖😙
👍點贊👍 + ?收藏? + 👀關注👀

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/294994.html
標籤:其他
上一篇:滾動視差讓你不相信“眼見為實”
下一篇:新人新視角 | 經歷豐富的弄潮兒
