|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
7、被取址的变量是什么数据类型,则scanf()函数中的格式控制符就必须与之类型相对应,否则结果将不正确。
例如:
int a;
scanf("%c", &a);
如果输入的是97,由于"%c" 只会读取一个字符的特性,所以只会把数据9按字符 '9' 处理存放在变量a中,这样的结果肯定是不正确的,而后面的数据7会保留在键盘缓冲区中没有被读取等同于舍弃,这时候如果用printf函数以 "%c" 类型输出变量a 的值,输出的是字符'9',而以"%d" 类型输出变量a,结果却不是字符 '9' 对应的ASCII值,而是随机无意义的值。原因在于 char 只占一个字节,而 int 占四个字节,字符 '9' 存入进去只是把这1个字节内的原始数据覆盖掉,其他3个字节内依然还有原始的数据,当以"%d"形式输出时,自然也把另外的3个字节内未知的数据也一起以十进制形式读取出来了。
8、输入的数据必须和格式控制符一 一对应,如果出现类型不对应,则只会读取对应类型的数据,其他数据会保留在键盘缓冲区中,由其他相对应的格式控制符读取。
例如:
int a, c;
char b;
scanf("%d%c%d", &a, &b, &c);
输入1+2,因为"+"与"%d"类型不对应,所以第一个%d只会读取数据类型相对应的 "1" 存入到变量a中,碰到"+"结束读取,"+2" 会保留在键盘缓冲区中,第一个%d读取完毕之后,则继续由 %c 往下读取,而 "+" 属于字符型,刚好与 %c 类型对应,所以由 %c 从键盘缓冲区读取出来,因为 %c 只会读取一个字符,所以 %c 读取完毕之后由最后一个 %d 继续往下读取,同类型的 "2" 则会被最后一个%d读取并存入到变量c中。
|
|