scanf格式控制符

时间:2023-03-08 17:11:27
格式控制
.
%d %o %x %c
%s %f %e 无%u格式、%g格式
.
scanf("%3d%3d", &a, &b);
输入: //a=123,b=456
.
scanf("%2d%*3d%2d", &a, &b);
输入: //a=12,跳过345,b=67。
.
scanf("%7.2f",&a); //不合法的,不能输入:12345.67使a的值为12345.67。
数据流分隔

.类型分隔
scanf("%d%c%f", &a, &b, &c);
输入: 12r1234. //scanf接收数据时"r"不匹配,于是"12"转[换成]整型赋值给a a=12,b='r',c=1234.567 .域宽分隔
scanf("%2d%3f%4f", &a, &b, &c);
输入:
//a=12,b=345,c=6789 .隐示分隔。
空格、跳格符('\t')、换行符('\n')默认数据分隔符。 .显示分隔符。
scanf("a=%d,b=%f,c=%f", &a, &b, &c);
输入数据应该为:
a=,b=67.8,c=98.123
数据流中字符控制
或者说是字符截止条件。
是则读,否不读,但是剩余字符仍在流中,注意清理。 const char* p = "12232114687ABC12356";
sscanf(p, "%[123]", buf); // 把是'1'或'2'或'3'的字读读到buf中,buf="1223211",
123无关顺序,等同于%[-]或%[-],【-】两端的 字符 为起始字符。 %[-] //%[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个字符。