rn;}
三?正确应用字符变量类型char的singed和unsigned前缀假如说明一个字符变量类型为char,多数编译器会缺省地将其视
为signed?若此字符变量只用于存放字符,即使是ASCII序数在128-255的字符,亦不会有问题发生?但若将此变量用于与整型数比较,或作为一个数组的索引序号,则可能会发生问题:
IndxChar(void)
{int i;
char ch,outch; /*缺省为signed*/
char Indx[255];
for(i=0;i<255;i++)
Indx[i]=i;
ch=getchar();
if(ch>127 &&ch<255)/*与>127的整型数比较,结果非
true*/
outch=Indx[ch]; /*错误!作为数组的索引*/
outch=`\x40'; /*如果非ture,则给 outch赋@值*/
printf("output character=%c",outch);
return;}
上述程序码将总是输出字符@(ASCII 64)?因为signed char类型赋值范围是0-127,超出此范围的字符(128-255),计算机视其
为负数,所以if判断句的结果总是Fail?正确的做法是把字符变量ch说明为unsigned,重写上面的程序码:
IndxChar(void)
{ int i;
unsigned char ch; /*说明字符变量ch为unsigned*/
char outch;
char Indx[255];
for(i=0;i<255;i++)
Indx[i]=i;
ch=getchar();
if(ch>127&&ch<255) /*OK!*/
outch=Indx[ch]; /*OK!*/
outch=`\x
40';
printf("output character%c",outch);
return;}
现在编译过程中不会再有警告或错误信息,输出结果亦正常?补充一点,只须将作为对象的字符变量ch说明为unsigned,对字
符变量outch不必一定做如此处理?