scanf,printf函數細節,scanfprintf函數

來源:互聯網
上載者:User

scanf,printf函數細節,scanfprintf函數
今天筆試的時候遇到一個考察C語言scanf函數的題目

int x;float y;scanf("%3d%f",&x,&y);// input 123456 678 enter and then what's the value of x and yprintf("%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,改變資料的類型。
printf函數與scanf函數的格式說明都使用什字元開始?

scanf的格式為scanf("%d",&i);
printf的格式為printf("%d",i);
常用的一般是“%d”整形 “%c”字元型
“%f”浮點型 "%s" 字串型
注意兩者的區別,一個還有&一個不帶
 
對於scanf函數與printf函數的用法與不同(菜鳥級提問)

函數名: printf
功 能: 產生格式化輸出的函數
用 法: int printf(char *format...);
程式例:

#include <stdio.h>
#include <string.h>

#define I 555
#define R 5.5

int main(void)
{
int i,j,k,l;
char buf[7];
char *prefix = buf;
char tp[20];
printf("prefix 6d 6o 8x 10.2e "
"10.2f\n");
strcpy(prefix,"%");
for (i = 0; i < 2; i++)
{
for (j = 0; j < 2; j++)
for (k = 0; k < 2; k++)
for (l = 0; l < 2; l++)
{
if (i==0) strcat(prefix,"-");
if (j==0) strcat(prefix,"+");
if (k==0) strcat(prefix,"#");
if (l==0) strcat(prefix,"0");
printf("%5s |",prefix);
strcpy(tp,prefix);
strcat(tp,"6d |");
printf(tp,I);
strcpy(tp,"");
strcpy(tp,prefix);
strcat(tp,"6o |");
printf(tp,I);
strcpy(tp,"");
strcpy(tp,prefix);
strcat(tp,"8x |");
printf(tp,I);
strcpy(tp,"");
strcpy(tp,prefix);
strcat(tp,"10.2e |");
printf(tp,R);
strcpy(tp,prefix);
strcat(tp,"10.2f |");
printf(tp,R);
printf(" &#92......餘下全文>>
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.