linux c語言的格式化輸入輸出
阿新 • • 發佈:2019-02-08
對於Linux c語言來說,格式化輸入輸出是很重要的,錯誤的輸入輸出格式可能導致你看不到自己想要的資料,比如當你想要顯示字串時,你在printf裡卻用了%d,結果是你看到的是字串的ascii碼,要想看字串內容,你應該使用%c,今天我們就來講講linux c語言格式化輸入輸出的標準,同樣我會把初學者經常犯的錯誤寫在前面。
注意:
1、螢幕輸入可以用char Rcode scanf("%hhd",&Rcode),注意取地址符號&不要忘了寫。
2、主函式結尾要加return 0,來表示程式是否執行成功,失敗返回0。
格式化輸入輸出字元有:
%d 帶符號十進位制整數
%o 無符號八進位制
%u 無符號十進位制
%x 無符號十六進位制
%f 顯示十進位制計數的浮點數
%e 指數形式顯示浮點數
%c 字元形式
%s 字串形式
%p 顯示基地址
檢視轉義字元可使用手冊 ----> man ascii
八進位制 十進位制 十六進位制 目標字元
007 7 07 BEL '\a' (bell)
010 8 08 BS '\b' (backspace)
011 9 09 HT '\t' (horizontal tab)
012 10 0A LF '\n' (new line)
013 11 0B VT '\v' (vertical tab)
014 12 0C FF '\f' (form feed)
015 13 0D CR '\r' (carriage ret)
char 字元變數 ---> ascii ----> 本質是一個整形變數(-128 ~ 127)
格式字元用以指定輸出項的資料型別和輸出格式。
①d格式:用來輸出十進位制整數。有以下幾種用法:
%d:按整型資料的實際長度輸出。
%md:m為指定的輸出欄位的寬度。如果資料的位數小於m,則左端補以空格,若大於m,則按實際位數輸出。
②o格式:以無符號八進位制形式輸出整數。對長整型可以用"%lo"格式輸出。同樣也可以指定欄位寬度用“%mo”格式輸出。
例:
main()
{ int a = -1;
printf("%d, %o", a, a);
}
執行結果:-1,177777
程式解析:-1在記憶體單元中(以補碼形式存放)為(1111111111111111)2,轉換為八進位制數為(177777)8。
③x格式:以無符號十六進位制形式輸出整數。對長整型可以用"%lx"格式輸出。同樣也可以指定欄位寬度用"%mx"格式輸出。
④u格式:以無符號十進位制形式輸出整數。對長整型可以用"%lu"格式輸出。同樣也可以指定欄位寬度用“%mu”格式輸出。
⑤c格式:輸出一個字元。
⑥s格式:用來輸出一個串。有幾中用法
%s:例如:printf("%s", "CHINA")輸出"CHINA"字串(不包括雙引號)
補充: sizeof() 計算目標占用的空間的大小
strlen 計算可視的字串長度
字串儲存時,計算機自動在最後一個位元組新增'\0'
%ms:輸出的字串佔m列,如果字串本身長度大於m,則突破獲m的限制,將字串全部輸出。若串長小於m,則左補空格。
%-ms:如果串長小於m,則在m列範圍內,字串向左靠,右補空格。
%m.ns:輸出佔m列,但只取字串中左端n個字元。這n個字元輸出在m列的右側,左補空格。
%-m.ns:其中m、n含義同上,n個字元輸出在m列範圍的左側,右補空格。如果n>m,則自動取n值,即保證n個字元正常輸出。
⑦f格式:用來輸出實數(包括單、雙精度),以小數形式輸出。有以下幾種用法:
%f:不指定寬度,整數部分全部輸出並輸出6位小數。
%m.nf:輸出共佔m列,其中有n位小數,若數值寬度小於m左端補空格。
%-m.nf:輸出共佔m列,其中有n位小數,若數值寬度小於m右端補空格。
⑧e格式:以指數形式輸出實數。可用以下形式:
%e:數字部分(又稱尾數)輸出6位小數,指數部分佔5位或4位。
%m.ne和%-m.ne:m、n和”-”字元含義與前相同。此處n指資料的數字部分的小數位數,m表示整個輸出資料所佔的寬度。
⑨g格式:自動選f格式或e格式中較短的一種輸出,且不輸出無意義的零。
對於單精度數,使用%f格式符輸出時,僅前7位是有效數字,小數6位.
對於雙精度數,使用%lf格式符輸出時,前16位是有效數字,小數6位.
從 scanf 輸入 按開發者需要從輸入緩衝區取值
scanf("%d" , &j);
注意1:
一般在獲取 %c 這個格式之前,需要先把之前緩衝區的內容給清除。
getchar() 是以字元為單位去取緩衝區的內容,返回值為得到的字元。
while(1)
{
if(getchar() == '\n')
break;
}
=========等價於============ while(getchar() != '\n') ;
注意2:
關注scanf的返回狀態,以此初步判斷得到的資料是否符合要求
返回值表示成功獲取了幾個符合條件的值; 0表示獲取失敗
if(scanf("%d",&x) != 0)
{
// success
}
else
{
//fail 如再次要求輸入一個整型數
}
注意3:
scanf怎麼寫 就怎麼輸入
注意:
1、螢幕輸入可以用char Rcode scanf("%hhd",&Rcode),注意取地址符號&不要忘了寫。
2、主函式結尾要加return 0,來表示程式是否執行成功,失敗返回0。
格式化輸入輸出字元有:
%d 帶符號十進位制整數
%o 無符號八進位制
%u 無符號十進位制
%x 無符號十六進位制
%f 顯示十進位制計數的浮點數
%e 指數形式顯示浮點數
%c 字元形式
%s 字串形式
%p 顯示基地址
檢視轉義字元可使用手冊 ----> man ascii
八進位制 十進位制 十六進位制 目標字元
007 7 07 BEL '\a' (bell)
010 8 08 BS '\b' (backspace)
011 9 09 HT '\t' (horizontal tab)
012 10 0A LF '\n' (new line)
013 11 0B VT '\v' (vertical tab)
014 12 0C FF '\f' (form feed)
015 13 0D CR '\r' (carriage ret)
char 字元變數 ---> ascii ----> 本質是一個整形變數(-128 ~ 127)
格式字元用以指定輸出項的資料型別和輸出格式。
①d格式:用來輸出十進位制整數。有以下幾種用法:
%d:按整型資料的實際長度輸出。
%md:m為指定的輸出欄位的寬度。如果資料的位數小於m,則左端補以空格,若大於m,則按實際位數輸出。
②o格式:以無符號八進位制形式輸出整數。對長整型可以用"%lo"格式輸出。同樣也可以指定欄位寬度用“%mo”格式輸出。
例:
main()
{ int a = -1;
printf("%d, %o", a, a);
}
執行結果:-1,177777
程式解析:-1在記憶體單元中(以補碼形式存放)為(1111111111111111)2,轉換為八進位制數為(177777)8。
③x格式:以無符號十六進位制形式輸出整數。對長整型可以用"%lx"格式輸出。同樣也可以指定欄位寬度用"%mx"格式輸出。
④u格式:以無符號十進位制形式輸出整數。對長整型可以用"%lu"格式輸出。同樣也可以指定欄位寬度用“%mu”格式輸出。
⑤c格式:輸出一個字元。
⑥s格式:用來輸出一個串。有幾中用法
%s:例如:printf("%s", "CHINA")輸出"CHINA"字串(不包括雙引號)
補充: sizeof() 計算目標占用的空間的大小
strlen 計算可視的字串長度
字串儲存時,計算機自動在最後一個位元組新增'\0'
%ms:輸出的字串佔m列,如果字串本身長度大於m,則突破獲m的限制,將字串全部輸出。若串長小於m,則左補空格。
%-ms:如果串長小於m,則在m列範圍內,字串向左靠,右補空格。
%m.ns:輸出佔m列,但只取字串中左端n個字元。這n個字元輸出在m列的右側,左補空格。
%-m.ns:其中m、n含義同上,n個字元輸出在m列範圍的左側,右補空格。如果n>m,則自動取n值,即保證n個字元正常輸出。
⑦f格式:用來輸出實數(包括單、雙精度),以小數形式輸出。有以下幾種用法:
%f:不指定寬度,整數部分全部輸出並輸出6位小數。
%m.nf:輸出共佔m列,其中有n位小數,若數值寬度小於m左端補空格。
%-m.nf:輸出共佔m列,其中有n位小數,若數值寬度小於m右端補空格。
⑧e格式:以指數形式輸出實數。可用以下形式:
%e:數字部分(又稱尾數)輸出6位小數,指數部分佔5位或4位。
%m.ne和%-m.ne:m、n和”-”字元含義與前相同。此處n指資料的數字部分的小數位數,m表示整個輸出資料所佔的寬度。
⑨g格式:自動選f格式或e格式中較短的一種輸出,且不輸出無意義的零。
對於單精度數,使用%f格式符輸出時,僅前7位是有效數字,小數6位.
對於雙精度數,使用%lf格式符輸出時,前16位是有效數字,小數6位.
從 scanf 輸入 按開發者需要從輸入緩衝區取值
scanf("%d" , &j);
注意1:
一般在獲取 %c 這個格式之前,需要先把之前緩衝區的內容給清除。
getchar() 是以字元為單位去取緩衝區的內容,返回值為得到的字元。
while(1)
{
if(getchar() == '\n')
break;
}
=========等價於============ while(getchar() != '\n') ;
注意2:
關注scanf的返回狀態,以此初步判斷得到的資料是否符合要求
返回值表示成功獲取了幾個符合條件的值; 0表示獲取失敗
if(scanf("%d",&x) != 0)
{
// success
}
else
{
//fail 如再次要求輸入一個整型數
}
注意3:
scanf怎麼寫 就怎麼輸入