读书人

啊输入十六进制数据是程序不结束悲

发布时间: 2012-06-23 14:52:43 作者: rapoo

求救啊,输入十六进制数据是,程序不结束,悲剧,走不出循环
#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的值看看。

C/C++ code
#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;}
[解决办法]
楼上的方式不错
[解决办法]
探讨
%x需要的是一个int *,而&(ai[i])是一个unsigned char *,scanf会把它看作为int *,32位编译器int是4个字节的话,,每输入一个数,会影响到&(ai[i])开始的4个字节,i在栈上应该是紧随在ai之后的,所以在i=13的时候,i的值就被改写,于是程序陷入死循环。
可以在循环里输出i的值看看。

C/C++ code
#include<st……

[解决办法]
探讨
楼上的方式不错

读书人网 >C语言

热点推荐