有關于C語言的scanf

事實上,有不少輸入類的冷用法,在一般使用時并不會常見。為了代碼的可讀性,通常程序員會選擇優化。可是無奈這些冷用法還活躍在一些考試之中坑害考生今天我們就來總結一下。

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容