目前共有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許可協議進行許可。