事實(shí)上叨橱,有不少輸入類的冷用法,在一般使用時(shí)并不會(huì)常見断盛。為了代碼的可讀性罗洗,通常程序員會(huì)選擇優(yōu)化「置停可是無奈這些冷用法還活躍在一些考試之中坑害考生今天我們就來總結(jié)一下伙菜。
scanf 格式化輸入
scanf(" % 標(biāo)記 最大寬度 大小 轉(zhuǎn)換碼 ");
1.取地址
就算是經(jīng)驗(yàn)豐富的編程者們,有時(shí)也會(huì)出現(xiàn)把 “& ” 漏掉的這種低級(jí)錯(cuò)誤命迈。
int a;
scanf("%d",&a);
scanf("%d",a);
要命的是贩绕,有時(shí)候這種錯(cuò)誤并不會(huì)被一些編譯器發(fā)現(xiàn)(比如說Dev C++),它不報(bào)錯(cuò)的運(yùn)行壶愤,然后再出錯(cuò)淑倾。不過,要是數(shù)組的話征椒,直接輸入數(shù)組名就可以了娇哆。
int a[10];
scanf("%d",&a);
這種情況默認(rèn)為數(shù)組的首地址(a[0]) 。
- 當(dāng)然,要是想給 a[1] 賦值碍讨,只需要讓上例的 a 改成 a+1 就行了治力。
2. %之后的
數(shù)字
int a;
scanf("%2d",&a);
printf("%d",a);
像這樣在 % 后加上2,意思就是取兩個(gè)數(shù)字勃黍,如:
input :12345
output 12
“*”
scanf("%d % * d %d",&a ,&b);
這種情況里的 *宵统,就可以跳過該輸入字段。
input : 123 456 789
就會(huì)把123賦給a覆获,789賦給b马澈,而跳過456(似乎并沒有什么*用)。
3.%d 和 %d 之間的
scanf("%d锻梳?%d",&a ,&b);
為什么在兩個(gè)輸入之間會(huì)有一“箭券?”呢,這不重要疑枯。
在我會(huì)這個(gè)以前辩块,如果我在輸入間隔要添加字符的話,我會(huì)寫三行 :
scanf("%d",&a);
printf("?");
scanf("%d",&b);
而現(xiàn)在荆永,我只需要一行就能代替三行废亭。
scanf("%d?%d",&a ,&b);
input :1?2
就相當(dāng)于 a=1具钥,b=2豆村;(這個(gè)倒是有點(diǎn)用)
例題
基本就是這樣了,下面我們用幾道題練習(xí)一下骂删。
# include<stdio.h>
int main()
{
char a,b,c,d;
scanf("%c%c",&a,&b);
c=getchar();
d=getchar();
printf("%c %c %c %c",a,b,c,d);
return 0;
}
輸入:12 回車
輸入:34 回車
問:輸出什么掌动?
#include<stdio.h>
int main()
{
char s[80];
int c,i;
scanf("%c",&c);
scanf("%d",&i);
scanf("%s",s);
printf("%c,%d,%s",c,i,s);
return 0;
}
輸入123 <空格> 456<空格> 789
問:輸出?
這兩道例題就比較簡(jiǎn)單了宁玫,何不寫寫試試粗恢?
直接拉去編譯器多無聊,對(duì)吧欧瘪。
答案:
- 1 2
? 3
1,23,456