scanf格式化输入的研究

相关名词:

格式控制符:因为计算机中所有的数据都是二进制 0、1 代码,所以输入输出的时候要用格式控制符告诉计算机以什么形式将二进制数据显示出来或保存进去。

1、两个相邻的格式控制符之间,不指定数据分隔符,则相应的两个输入数据之间,①至少用一个空格分隔,②或者用tab分隔,③或者在一个数据后,按回车,然后再输入下一个数据。因为scanf把空格回车作为终止符,终止符不会被保存。有一个例外,就是%c时,见第5个例子
/**
	正确输入12 36
		或者12
                36
*/
void scantest(){
	int num1,num2;
	scanf("%d%d",&num1,&num2);
	printf("\n%d,%d",num1,num2);
}
2、格式控制字符串中出现常规字符,务必原样输入。如果不原样输入,结果会变得不可控
/**
	正确输入<12:34>
*/
void scantest(){
	int num1,num2;
	scanf("<%d:%d>",&num1,&num2);
	printf("\n%d,%d",num1,num2);
}

3、格式控制字符串指定了数据数据的域宽width时,即将读取数据数据中相应的width位,但按照需要的位数赋值给相应的变量,多余的被抛弃
/**
	输入12345
	输出12,34
	没有5,被丢弃了
*/
void scantest(){
	int num1,num2;
	scanf("%2d%2d",&num1,&num2);
	printf("\n%d,%d",num1,num2);
}

4、格式控制字符串中含有抑制字符“*”时,表示本输入项对应的数据读入后不赋值给相应的变量,这个变量的值由下一个格式指示符输入。例如
/**
	输入12345
	输出12,5
	没有34,被丢弃了
*/
void scantest(){
	int num1,num2;
	scanf("%2d%*2d%3d",&num1,&num2);
	printf("\n%d,%d",num1,num2);
}

5、格式控制符%c输入单个字符时,空格和转义字符都作为有效字符被输入。
/**
	输入 a回车b
	输出a 
        b
	回车被打印出来,所以回车了一行
*/
void scantest(){
	char a,b,c;
	scanf("%c%c%c",&a,&b,&c);
	printf("\n123456");
	printf("\n%c%c%c",a,b,c);
}

6、输入数据时,以下情况,系统认为数据输入结束
①空格、tab、回车
②遇到输入域宽度结束。例如“%3d”,只取三列
③遇到非法输入。想要数字,他却夹杂了字母
7、如果scanf要输入多个数据项,遇到了非法字符现象,会影响后面的数据输入
/**
	输入 12a34
	输出 12,-8939393....
	不符合预期
*/
void scantest(){
	int a,b;
	scanf("%d,%d",&a,&b);
	printf("%d,%d",a,b);
}

 

发布了19 篇原创文章 · 获赞 10 · 访问量 1949

猜你喜欢

转载自blog.csdn.net/qq_30719815/article/details/104653654