简单的程序

时间:2015-10-15 18:44:44

标签: c++ cin

任务是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();
        }

    }
}

3 个答案:

答案 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)