【发布时间】:2020-01-19 11:02:22
【问题描述】:
我正在尝试编写一个简单的 C 程序来转换字母的大小写
char a;
a = getchar();
if(a<=90&&a>=65)
putchar(a+32);
else if(a<=122&&a>=97)
putchar(a-32);
else
putchar(a);
当输入为'A'或'c'时,输出是正确的;但是,当涉及到'g'时,输出变为空格,当输入数字和信号时,只得到不同的输出而不是本身。然后我改变了ifs的顺序,第二个问题解决了,但'g'问题仍然存在。
但我认为 if 结构不会改变 a 的值;我很困惑,想知道如何。
【问题讨论】:
-
不要使用幻数。如果你想写下“字母A的字符代码”,它在C中拼写为
'A'。不是65或任何东西。更好的是,使用内置函数islower、isupper、tolower和toupper。 -
假设 ASCII 编码字符,了解它们及其值应该会有所帮助。只是不要写那样的代码!它很难辨认,而且使用magic numbers,而且通常是不可移植的并且(事实证明)错误。要转换大小写,请使用
toupper和tolower。 -
哦,记住
getchar返回一个int。如果您想检查错误或文件结尾,这实际上很重要。 -
无法复制,见ideone.com/pk4zVS
-
话虽如此,你的代码appears to be working with minimal changes(char a 需要是 int a 以便检查 getchar() 的状态是可能的)。字母g或其他任何东西似乎没有问题。请发布minimal reproducible example,其中包括完整的可构建程序和违规输入。