scanf,printf函式細節

2022-08-02 12:54:19 字數 1354 閱讀 1430

今天筆試的時候遇到乙個考察c語言scanf函式的題目

int x;

float y;

scanf("%3d%f",&x,&y);

// input 123456 678 enter and then what's the value of x and y

printf("%d %f",x,y);

程式的執行結果是:

123 456.0000000

看來還是自己對scanf函式不是非常了解,如今看看scanf函式的描寫敘述例如以下:

格式:既字串序列,它控制從流中取出的字元是怎樣處理的。

空白字元:函式會讀取而且忽略下乙個非空白字元之前的不論什麼乙個空白字元(包含空格,換行,tab等字元)。

格式字串中的單個

空白字元使得從流中提取的隨意數量的空白字元為乙個。

非空白字元。除了格式指定(%):不論什麼乙個既不是空白字元又不是格式指定符中的部分(%開頭的)會導致函式讀取流中的下乙個字元,

函式會比較該非空白字元和流中的字元。假設相等就拋棄這個字元而且讀取下乙個字元,假設不相等函式失敗,返回,而且剩下的

子串沒有讀取。

格式說明符:乙個由乙個初始的百分比符號(%)形成的序列表示乙個格式說明符,它用於指定從流中返回而且儲存在在附加引數指定的

位址中的資料的型別和格式。

%[*][width][length]specifier 

width:指定當前讀操作所能讀取的最大字元數目。

length:改變附加引數所指向儲存區域的型別, 僅僅能在hh, h, l, ll, j, z, t, l中選擇乙個。

在printf函式中,這個式子略微有所不同,例如以下所看到的:

%[flags][width][.precision][length]specifier 

flags:-,+。#,0,當中』-』用於左對齊,預設是右對齊;』-』用於給數字加入正負號。』#』用於%#o,%#x,%#x。這樣給列印出的八進位制。16進製制加入字首,o15,0x15。

』0』表示用0來替代對齊中的空格。

width:字元列印的時候指定最小的寬度,假設寬度不夠就用空格取代.width也能夠使用『*』取代。此時須要在附加引數中額外用乙個引數來指定*所

表的陣列,示比例如以下:

printf("%*d%*d\n",7,5,3,4);

printf("%7d%3d\n",5,4);

這兩行**執行的結果全然同樣。

.precision:小數點後相應的數字數目,假設不足的用0取代。也能夠使用『*『來取代詳細的數字,可是此時要在附加引數中指定『*『所指代的數字。

length:這個類似scanf中的length,就是用來修飾%後面的specifier,改變資料的型別。

格式轉換說明符scanf,printf

printf sprintf scanf sscanf等格式化函式在使用是需要特別小心,另外如果使用scanf s這樣的安全函式,更應當小心,因為如果格式控制有問題,可能直接導致格式化失敗或執行時錯誤。表一 轉換說明符及作為結果的列印輸出 轉換說明 輸出 a 浮點數 十六進製制數字和p 記數法 c9...

c 輸入輸出 scanf printf 學習

一 首先是基本的輸入 如scanf d d d d d d h1,m1,s1,h2,m2,s2 由於我的開發環境,我用的是scanf s作用一樣但不會報錯。注意幾個轉意的符號,且在前面一段中加入分隔符,代表從緩衝區讀取資料的格式。如 d,用來輸出十進位制整數 c,用來輸出乙個字元 s,用來輸出乙個字...

strlen 函式細節問題

strlen 函式的結果值為unsigned int 型別,在進行int和unsigned int比較時,會進行數值轉換,因此這種細節問題應該注意。一般在使用strlen函式時,多數情況下是用int 定義的變數來儲存strlen的值。可以執行下面兩個程式試一試 1 include include i...