求救啊,输入十六进制数据是,程序不结束,悲剧,走不出循环
#include<stdio.h>
int main()
{
int i;
unsigned char ai[16];
printf("shu ru shu ju:\n");
for(i=0;i<16;i++)
{
scanf("%x",&(ai[i]));
}
return 0;
}
[解决办法]
你这个是循环输入16次,如果你是只想接收0-9的数值。那就要做区间判断
for(i=0;i<16;i++)
{
scanf("%x",&(ai[i]));
if(ai[i] <48 || ai[i] > 58 )
return 0;
}
[解决办法]
%x需要的是一个int *,而&(ai[i])是一个unsigned char *,scanf会把它看作为int *,32位编译器int是4个字节的话,,每输入一个数,会影响到&(ai[i])开始的4个字节,i在栈上应该是紧随在ai之后的,所以在i=13的时候,i的值就被改写,于是程序陷入死循环。
可以在循环里输出i的值看看。
#include<stdio.h>int main(){ int i; unsigned char ai[16]; printf("shu ru shu ju:\n"); for(i = 0; i < 16; i++) { printf("i=%d\n", i); scanf("%x", &(ai[i])); } return 0;}
[解决办法]
楼上的方式不错
[解决办法]