问题
问答题
下列给定程序中,函数fun()的功能是:将s所指字符串中的字母转换为按字母序列后续字母(但Z转换为A,z转换为a),其他字符不变。
请改正程序指定部位的错误,使它能得到正确结果。
[注意] 不要改动main函数,不得增行或删行,也不得更改程序的结构。
[试题源程序]
#include<stdio.h>
#include<ctype.h>
void fun(char *s)
/**********found**********/
while(*s!=’@’)
if(*s>=’A’ && *s<=’Z’ || *s>=’a’ && ’s<=’z’)
if(*s==’Z’)
*s=’A’;
else
if(*s==’z’)
*s=’a’;
else
*s+=1;
/**********found**********/
(*s)++;
void main()
char s[80];
printf("\n Enter a string with length<80. :\n\n "); gets(s);
printf("\n The string:\n\n t");
puts(s);
fun(s);
printf ("\n\n The Cords: \n\n "); puts(s);
答案
参考答案:(1)错误:while(*s!=’@’)
正确:while(*s)或while(*s!=0)或while(*s!=’0’)
(2)错误:(*s)++;
正确:s++;或-s++;
解析: 错误1:while循环的结束条件是查找完字符串,即指向字符串结尾标志’\0’。由于字符’\0’的ASCAII码值为0,因而*s指向串尾’\0’时,*s的值为0,结束循环。所以while(*s!=’@’)应改为while(*s)或while(*s!=0)或while(*s!=’\0’)。
错误2:s为字符指针,*s为指针所指的字符,要处理完字符串中的所有字符,指针必须向字符串的后面移动,即s++或*s++,而不是字符值增加(*s)++。