事實上,有不少輸入類的冷用法,在一般使用時并不會常見。為了代碼的可讀性,通常程序員會選擇優化。可是無奈這些冷用法還活躍在一些考試之中坑害考生今天我們就來總結一下。
scanf 格式化輸入
scanf(" % 標記 最大寬度 大小 轉換碼 ");
1.取地址
就算是經驗豐富的編程者們,有時也會出現把 “& ” 漏掉的這種低級錯誤。
int a;
scanf("%d",&a);
scanf("%d",a);
要命的是,有時候這種錯誤并不會被一些編譯器發現(比如說Dev C++),它不報錯的運行,然后再出錯。不過,要是數組的話,直接輸入數組名就可以了。
int a[10];
scanf("%d",&a);
這種情況默認為數組的首地址(a[0]) 。
- 當然,要是想給 a[1] 賦值,只需要讓上例的 a 改成 a+1 就行了。
2. %之后的
數字
int a;
scanf("%2d",&a);
printf("%d",a);
像這樣在 % 后加上2,意思就是取兩個數字,如:
input :12345
output 12
“*”
scanf("%d % * d %d",&a ,&b);
這種情況里的 *,就可以跳過該輸入字段。
input : 123 456 789
就會把123賦給a,789賦給b,而跳過456(似乎并沒有什么*用)。
3.%d 和 %d 之間的
scanf("%d?%d",&a ,&b);
為什么在兩個輸入之間會有一“?”呢,這不重要。
在我會這個以前,如果我在輸入間隔要添加字符的話,我會寫三行 :
scanf("%d",&a);
printf("?");
scanf("%d",&b);
而現在,我只需要一行就能代替三行。
scanf("%d?%d",&a ,&b);
input :1?2
就相當于 a=1,b=2;(這個倒是有點用)
例題
基本就是這樣了,下面我們用幾道題練習一下。
# 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
問:輸出?
這兩道例題就比較簡單了,何不寫寫試試?
直接拉去編譯器多無聊,對吧。
答案:
- 1 2
? 3
1,23,456