格式控制 1. %d %o %x %c %s %f %e 无%u格式、%g格式 2. scanf("%3d%3d", &a, &b); 输入:123456 //a=123,b=456 3. scanf("%2d%*3d%2d", &a, &b); 输入:1234567 //a=12,跳过345,b=67。 4. scanf("%7.2f",&a); //不合法的,不能输入:12345.67使a的值为12345.67。
数据流分隔 1.类型分隔 scanf("%d%c%f", &a, &b, &c); 输入: 12r1234.567 //scanf接收数据时"r"不匹配,于是"12"转[换成]整型赋值给a a=12,b='r',c=1234.567 2.域宽分隔 scanf("%2d%3f%4f", &a, &b, &c); 输入: 123456789012345 //a=12,b=345,c=6789 3.隐示分隔。 空格、跳格符('\t')、换行符('\n')默认数据分隔符。 4.显示分隔符。 scanf("a=%d,b=%f,c=%f", &a, &b, &c); 输入数据应该为: a=1234,b=67.8,c=98.123
数据流中字符控制 或者说是字符截止条件。 是则读,否不读,但是剩余字符仍在流中,注意清理。 const char* p = "12232114687ABC12356"; sscanf(p, "%[123]", buf); // 把是'1'或'2'或'3'的字读读到buf中,buf="1223211", 123无关顺序,等同于%[1-3]或%[3-1],【-】两端的 字符 为起始字符。 %[3-14] //%[3214] %[A-Za-z] //只取字母 %[^A-Za-z] //取字母之外的所有字符 "%[a-zA-Z]%[0-9]", buf1, buf2 //"aB12" buf1="aB",buf2="12" "%[^\n]" //取一行字符,但是流中还会存在一个换行,fflush(stdin) or "%[^\n]%*c"; "%*[^\n]%*c" //就表示跳过一行 "%-20[^\n]" //就表示读取\n前20个字符。