目前共有4篇帖子。
【程序】根據scanf的返回值判定輸入的有效性
1樓 巨大八爪鱼 2016-6-13 10:58
【示常式序】
#include <stdio.h>

void test(char *str)
{
    int d, n, r;
    r = sscanf(str, "%d%n", &d, &n); // %n表示上一個操作所消耗的字元數
    printf("%s: 返回值=%d, 讀取的值=%d, 讀取的字元數=%d\n", str, r, d, n);
}

int main(void)
{
    test("15");
    test("     38 27");
    test("簡體中文");
    test("ABCDE");
    test("45.9");
    test("You are a dog.");
    test("");
    test(".");
    //test(NULL); // 程序出錯
    return 0;
}
【運行結果】
15: 返回值=1, 讀取的值=15, 讀取的字元數=2
     38 27: 返回值=1, 讀取的值=38, 讀取的字元數=7
簡體中文: 返回值=0, 讀取的值=-858993460, 讀取的字元數=-858993460
ABCDE: 返回值=0, 讀取的值=-858993460, 讀取的字元數=-858993460
45.9: 返回值=1, 讀取的值=45, 讀取的字元數=2
You are a dog.: 返回值=0, 讀取的值=-858993460, 讀取的字元數=-858993460
: 返回值=-1, 讀取的值=-858993460, 讀取的字元數=-858993460
.: 返回值=0, 讀取的值=-858993460, 讀取的字元數=-858993460
2樓 巨大八爪鱼 2016-6-13 10:59
當用scanf獲取單個整數時:
若輸入中文或字母,返回值為0
若輸入的是空字元串,返回值為-1
若輸入的是整數或小數,返回值為1。其中小數會被自動轉換為整數。
3樓 巨大八爪鱼 2016-6-13 11:03
【示常式序2】
#include <stdio.h>

void test2(char *str)
{
    int a, b;
    int n = sscanf(str, "%d%d", &a, &b);
    printf("%s: 返回值%d (a=%d, b=%d)\n", str, n, a, b);
}

int main(void)
{
    test2("15 18");
    test2("43");
    test2("");
    test2("43 簡體中文");
    test2("43\\78");
    test2("哈哈 45");
    return 0;
}
【運行結果】
15 18: 返回值2 (a=15, b=18)
43: 返回值1 (a=43, b=-858993460)
: 返回值-1 (a=-858993460, b=-858993460)
43 簡體中文: 返回值1 (a=43, b=-858993460)
43\78: 返回值1 (a=43, b=-858993460)
哈哈 45: 返回值0 (a=-858993460, b=-858993460)
4樓 巨大八爪鱼 2016-6-13 11:06
當用scanf獲取兩個整數時:
若成功讀取,返回2
若只輸入了一個數,返回1
若第一個數輸入正確,但第二個數輸入格式不正確,則返回1
若第一個數輸入格式不正確,則兩個數都不能正確讀取,返回值為0
若輸入的是空字元串,則返回-1

若輸入的兩個數都是小數,則只有第一個數能正確讀取,且返回1。例如:
4.8 7.5: 返回值1 (a=4, b=-858993460)

回復帖子

內容:
用戶名: 您目前是匿名發表
驗證碼:
 
 
©2010-2024 Arslanbar [手機版] [桌面版]
除非另有聲明,本站採用創用CC姓名標示-相同方式分享 3.0 Unported許可協議進行許可。