%d 表示在相應(yīng)的位置顯示與之對應(yīng)的整形變量值f 表示變量f的地址,大多在scanf時(shí)使用\n 表示換行%2d %md 以寬度m輸出整型數(shù),不足m時(shí),左補(bǔ)空格
成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都做網(wǎng)站、成都網(wǎng)站制作、鎮(zhèn)遠(yuǎn)網(wǎng)絡(luò)推廣、微信小程序、鎮(zhèn)遠(yuǎn)網(wǎng)絡(luò)營銷、鎮(zhèn)遠(yuǎn)企業(yè)策劃、鎮(zhèn)遠(yuǎn)品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供鎮(zhèn)遠(yuǎn)建站搭建服務(wù),24小時(shí)服務(wù)熱線:028-86922220,官方網(wǎng)址:www.cdcxhl.com
%f 表示在相應(yīng)的位置顯示與之對應(yīng)的float變量值
scanf("%2d%*2s%2d", x, y); 表示輸入一個(gè)不大于兩位數(shù)的整數(shù)存儲到x中,再輸入一個(gè)不超過2位的字符串(不賦值給任何變量),再輸入一個(gè)不大于兩位數(shù)的整數(shù)存儲到y(tǒng)中!如:
輸入 12aa34 ?x=12, y=34;
輸入 1 + 2 ? ? ?x=1 , y=2;
附scanf()函數(shù)格式說明:
scanf函數(shù)是一個(gè)標(biāo)準(zhǔn)庫函數(shù),它的函數(shù)原型在頭文件“stdio.h”中。
scanf函數(shù)的一般形式為:
scanf(“格式控制字符串”, 地址表列);
地址表列中給出各接收數(shù)據(jù)的變量的地址。
格式字符串的一般形式為:
%[*][輸入數(shù)據(jù)寬度][長度符號]類型
其中有方括號[]的項(xiàng)為任選項(xiàng)。各項(xiàng)的意義如下:
類型 ?
表示輸入數(shù)據(jù)的類型,如常用的d(整形) f(浮點(diǎn)型) c(字符) s(字符串)
“*”符
用以表示該輸入項(xiàng),讀入后不賦予相應(yīng)的變量,即跳過該輸入值。
數(shù)據(jù)寬度
用十進(jìn)制整數(shù)指定輸入的寬度(即字符數(shù))。
長度符號
長度格式符為l和h,l表示輸入長整型數(shù)據(jù)(如%ld)和雙精度浮點(diǎn)數(shù)(如%lf)。h表示輸入短整型數(shù)據(jù)。
使用scanf函數(shù)還必須注意以下幾點(diǎn):
scanf函數(shù)中沒有精度控制,如:scanf("%5.2f",a);是非法的。不能企圖用此語句輸入小數(shù)為2位的實(shí)數(shù)。
scanf中要求給出變量地址,如給出變量名則會出錯(cuò)。如 scanf("%d",a);是非法的,應(yīng)改為scnaf("%d",a);才是合法的。
在輸入多個(gè)數(shù)值數(shù)據(jù)時(shí),若格式控制串中沒有非格式字符作輸入數(shù)據(jù)之間的間隔則可用空格,TAB或回車作間隔。C編譯在碰到空格,TAB,回車或非法數(shù)據(jù)(如對“%d”輸入“12A”時(shí),A即為非法數(shù)據(jù))時(shí)即認(rèn)為該數(shù)據(jù)結(jié)束。
在輸入字符數(shù)據(jù)時(shí),若格式控制串中無非格式字符,則認(rèn)為所有輸入的字符均為有效字符。
printf("%*s", x, str);
x的值會被替換到*的位置。
比如 x=10
那么就等效于%10s
不是%2s是 %*2s
帶*的 表示忽略 也就是 讀入一個(gè)整型x(2位) 然后忽略接下來的兩個(gè)字符
再讀取兩個(gè)字符存到y(tǒng)中。
輸入1234567的時(shí)候
前兩位 x=12
中間兩位 34被%*2s忽略
56兩位 y=56
輸出x+y=12+56=68
在C/C++中,64為整型一直是一種沒有確定規(guī)范的數(shù)據(jù)類型。現(xiàn)今主流的編譯器中,對64為整型的支持也是標(biāo)準(zhǔn)不一,形態(tài)各異。一般來說,64位整型的定義方式有l(wèi)ong long和__int64兩種(VC還支持_int64),而輸出到標(biāo)準(zhǔn)輸出方式有printf(“%lld”,a),printf(“%I64d”,a),和cout a三種方式。
本文討論的是五種常用的C/C++編譯器對64位整型的支持,這五種編譯器分別是gcc(mingw32),g++(mingw32),gcc(linux i386),g++(linux i386),Microsoft Visual C++ 6.0??上У氖?,沒有一種定義和輸出方式組合,同時(shí)兼容這五種編譯器。為徹底弄清不同編譯器對64位整型,我寫了程序?qū)λ鼈冞M(jìn)行了評測,結(jié)果如下表。
上表中,正確指編譯通過,運(yùn)行完全正確;錯(cuò)誤指編譯雖然通過,但運(yùn)行結(jié)果有誤;無法編譯指編譯器根本不能編譯完成。觀察上表,我們可以發(fā)現(xiàn)以下幾點(diǎn):
long long定義方式可以用于gcc/g++,不受平臺限制,但不能用于VC6.0。
__int64是Win32平臺編譯器64位長整型的定義方式,不能用于Linux。
“%lld”用于Linux i386平臺編譯器,”%I64d”用于Win32平臺編譯器。
cout只能用于C++編譯,在VC6.0中,cout不支持64位長整型。
表中最后一行輸出方式中的printint64()是我自己寫的一個(gè)函數(shù),可以看出,它的兼容性要好于其他所有的輸出方式,它是一段這樣的代碼:
CPP
void printint64(long long a)
{
if (a=100000000)
printf("%d\n",a);
else
{
printf("%d",a/100000000);
printf("d\n",a0000000);
}
}
這種寫法的本質(zhì)是把較大的64位整型拆分為兩個(gè)32位整型,然后依次輸出,低位的部分要補(bǔ)0??此坪鼙康膶懛?,效果如何?我把它和cout輸出方式做了比較,因?yàn)樗蚦out都是C++支持跨平臺的。首先printint64()和cout(不清空緩沖區(qū))的運(yùn)行結(jié)果是完全相同的,不會出現(xiàn)錯(cuò)誤。我的試驗(yàn)是分別用兩者輸出1000000個(gè)隨機(jī)數(shù),實(shí)際結(jié)果是,printint64()在1.5s內(nèi)跑完了程序,而cout需要2s。cout要稍慢一些,所以在輸出大量數(shù)據(jù)時(shí),要盡量避免使用。
#include stdio.h
main()
{
long int i,s,t,sum;//變量聲明為長整形
t=300000;// 給t賦初值
s=1;// 給s賦初值
sum=1;// 給sum賦初值
for(i=2;i=30;i++)//循環(huán)30次(i從2到30)
{
s=2*s;//把2倍的s值賦給s
sum=sum+s;//求s與sum的和
}
sum=sum/100;//sum的值除100
printf("t=%ld\n",t);//打印t
printf("sum=%ld\n",sum);//打印sum
}
因?yàn)閠的值在程序中沒有改變,所以打印時(shí)還是原來的初值不變
sum的值是從1(sum=1)+2(s=1,s=1*2=2)+4(s=2*2=4)+8(s=4*2=8)+16(s=8*2=16)+……(30次)=1073741800
循環(huán)完了再/100=10737418
程序的功能就是求1,2,4,8,……(30個(gè))的和