改错题 1.  下列给定程序中,函数fun()的功能是:将str所指字符串中的字母转换为按字母序列的后续字母(Z转换为A,z转换为a),其他字符不变。
    请修改函数fun()中的错误,得出正确的结果。
    注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。
    试题程序:
    #include <stdio.h>
    #include     #include <conio.h>
    void fun(char *str)
    {
    //****found****
    while( *str!='@')
    {
    if(*str>='A'&&*str<='Z'||*str<='a'&&*str<='z')
    {
    if(*str=='Z')
    *str='A';
    else if(*str=='z')
    *str='a';
    else
    *str+=1;
    }
    //****found****
    (*str)++;
    }
    }
    void main()
    {
    char str[80];
    printf("<n Enter a string with length<80.:<n<n");
    gets(str); printf("<n The string:<n<n");
    puts(str);
    fun(str);
    printf("<n<n The Cords:<n<n");
    puts(str);
    }
【正确答案】(1)错误:while(*str!='@')
   正确:while(*str)或while(*str!='<0')或while(*str!=0)
   (2)错误:(*str++)
   正确:str++
【答案解析】 首先判断字母是否为小写字母,如果是小写字母,则进行转换。
   第一个标识下“while(*str!='@')”语句的原意是“str不指向字符串尾就进入下面的循环”,所以对于指针判断不为结束符的语句应该是循环为真,所以应为“while(*str)”“while(*str!='<0')”或“while(*str!=0)”。
   第二个标识下“(*str)++;”是对字符内容加1,而原题是对字符位置加1,所以将其改为“str++;”。