练习7中第一题有许多同学出现错误,题目是这样的:7.1 编写一个函数,如果输入的字符为字母,则它输出该字母循环后移3个位置后的字母,如输入A时输出D,输入y时输出b;如果输入的字符不是字母,则输出该字符。这道题与练习4中的4.8和4.13相似。
有关的程序为:
#include <stdio.h>
void main()
{
char ch;
ch = getchar();
if(ch >= 'a' && ch <= 'z')
ch = (ch + 3 - 'a') % 26 + 'a';
else if(ch >= 'A' && ch <= 'Z')
ch = (ch + 3 - 'A') % 26 + 'A';
putchar(ch);
}
有同学把函数错误地定义为:
char change(char ch)
{
if(ch >= 'a' && ch <= 'z')
return (ch + 3 - 'a') % 26 + 'a';
if(ch >= 'A' && ch <= 'Z')
return (ch + 3 - 'A') % 26 + 'A';
}
出错的原因在于当实参不为字母时函数将没有输出值。只要将函数的返回值定义为char,则无论实参为何值,函数都必须返回一个字符。
正确的定义为:
char change(char ch)
{
if(ch >= 'a' && ch <= 'z')
return (ch + 3 - 'a') % 26 + 'a';
if(ch >= 'A' && ch <= 'Z')
return (ch + 3 - 'A') % 26 + 'A';
return ch;
}