scanf 輸入加逗號(或者不加逗號)出現的異常及解決方案


我們在寫 C 語言代碼通常 scanf 的格式控制部分都有兩種習慣,加逗號與不加逗號,而這兩種情況都會因為我們的不同輸入習慣產生一定的問題,這里給出另一種方法。

1、不加逗號

 1 #include<stdio.h>
 2 
 3 #define SWAP(a, b) a=a^b;b=a^b;a=a^b;
 4 
 5 void main()
 6 {
 7         int num1, num2;
 8         printf("Input num1 and num2:");
 9         scanf("%d%d", &num1, &num2);
10         SWAP(num1, num2);
11         printf("After the exchange:%d,%d\n",num1,num2);
12 }

下面這是3種不同的輸入方式以及相應的輸出結果

1.1用空格隔開兩個變量

1.2用回車換行隔開

1.3用逗號隔開

我們可以發現前兩種都沒什么問題,而第三種就不是我們想要的結果了。

2、加逗號

 1 #include<stdio.h>
 2 
 3 #define SWAP(a, b) a=a^b;b=a^b;a=a^b;
 4 
 5 void main()
 6 {
 7         int num1, num2;
 8         printf("Input num1 and num2:");
 9         scanf("%d,%d", &num1, &num2);
10         SWAP(num1, num2);
11         printf("After the exchange:%d,%d\n",num1,num2);
12 }

 2.1用空格隔開

 

2.2用回車換行隔開

2.3用逗號隔開

巧的是,這次剛好和第一種相反,前兩個都和預期不一樣,第三個是我們要的。

 

3、解決方案

#include<stdio.h>

#define SWAP(a, b) a=a^b;b=a^b;a=a^b;

void main()
{
        int num1, num2;
        printf("Input num1 and num2:");
        scanf("%d%*c%d", &num1, &num2);
        SWAP(num1, num2);
        printf("After the exchange:%d,%d\n",num1,num2);
}

接下來看看這次的結果。

3.1空格隔開

3.2回車換行隔開

3.3逗號隔開

我們驚喜地發現這次 3 種輸入方式都是我們想要的結果了。

4、說明

scanf 要求輸入的格式必須與自己設定的保持一致,1 和 2 的代碼之所以會報錯就是因為輸入和設定的不一樣。而在 3 的代碼中,%*c 充當了一個提取我們分割變量的一個容器,可以把我們輸入的各種分割字符都提取出去,所以 3 種輸入方式都正常了。

 

ps:這種方法不適合兩個變量都是字符串

 

 

作者:耑新新,發布於  博客園

轉載請注明出處,歡迎郵件交流:zhuanxinxin@aliyun.com


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM