任务是cin>>....
,只取字母,将大写字母改为小写字母,只用小写字母重写行。我无法弄清楚为什么我的代码忽略了输入的第一个字母。
#include <iostream>
#include <cctype>
using namespace std;
int main()
{
char ch;
cin >> ch;
while (ch != '@'){
if (cin.get(ch))
{
if (isalpha(ch)){
if (isupper(ch)){
cout <<(char)tolower(ch);
}
else
cout << ch;
}
if (ch == '\n')
cout << "\nNie zakonczyles ciagu znakiem @" << endl;
}
else{
cin.clear();
}
}
}
答案 0 :(得分:3)
cin >> ch; <- read first letter
while (ch != '@'){
if (cin.get(ch)) <- read next letter which tosses out the first letter
要将此设置ch
修复为某个值,然后摆脱cin >> ch;
答案 1 :(得分:3)
因为循环使用cin.get(ch)
来打印字符,但第一个字符实际上是用cin >> ch
读取的;然后结果被丢弃。
您可能希望摆脱cin>>ch;
指令并将ch
初始化为与'@'
不同的值,或将循环转换为do-while
循环,类似于这样:
char ch;
do
{
if (cin.get(ch))
{
/* Do what is needed */
}
}
while (ch != '@')
答案 2 :(得分:2)
因为您正在cin >> ch;
之后cin.get(ch)
。