【发布时间】:2017-11-30 14:57:22
【问题描述】:
int main()
{
char hmm[1000];
cin.getline(hmm, 1000);
cout << hmm << endl; //this was to test if I could assign my input to the array properly
for (int sayac = 0; hmm[sayac] != '@'; sayac++) {
if (!isdigit(hmm[sayac])) {
if (islower(hmm[sayac]))
cout << toupper(hmm[sayac]);
else if (isupper(hmm[sayac]))
cout << tolower(hmm[sayac]);
else
cout << hmm[sayac];
}
}
"编写一个程序,将键盘输入读取到@符号并回显输入 除了数字,将每个大写字符转换为小写,反之亦然。 (不要忘记 cctype 系列。)“
我正在从入门书中做这个练习。但是当我运行它时,它返回字符的 ascii 顺序,而不是字符的大写/小写版本。无法弄清楚问题所在。谁能告诉我为什么?
(我可能对练习有其他问题,如果有请不要纠正。我想自己解决(除了我解释的问题),但我无法检查其他问题,因为我有这个问题。
【问题讨论】:
-
不,它没有。
-
是的,它does(某种意义上)
-
在 C++ 中没有字符类型,只有整数类型通常用于表示字符。一些 i/o 工具,尤其是狭窄的 iostream,会将
char值解释为表示字符。全局toupper是从旧 C 继承的函数,它接受int参数并返回int。要通过cout显示该字符,请将其转换为char。请注意toupper的参数必须是非负数,否则EOF,这意味着作为参数的char值应首先转换为unsigned char。否则,可能是UB。另外,请先致电setlocale。 -
旁注:+1 表示尝试过,获得了所有信息,然后明确地仅就该问题而不是其他任何问题寻求帮助。先生,我敢肯定,你会很快学到很多关于这门语言的知识。
标签: c++