巨大八爪鱼
武林盟主 二十一級
|
【示例程序】 #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
|
巨大八爪鱼
武林盟主 二十一級
|
当用scanf获取单个整数时: 若输入中文或字母,返回值为0 若输入的是空字符串,返回值为-1 若输入的是整数或小数,返回值为1。其中小数会被自动转换为整数。
|
巨大八爪鱼
武林盟主 二十一級
|
【示例程序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)
|
巨大八爪鱼
武林盟主 二十一級
|
当用scanf获取两个整数时: 若成功读取,返回2 若只输入了一个数,返回1 若第一个数输入正确,但第二个数输入格式不正确,则返回1 若第一个数输入格式不正确,则两个数都不能正确读取,返回值为0 若输入的是空字符串,则返回-1
若输入的两个数都是小数,则只有第一个数能正确读取,且返回1。例如: 4.8 7.5: 返回值1 (a=4, b=-858993460)
|