c++ - 简单程序省略的第一个字符

标签 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();
        }

    }
}

最佳答案

因为循环使用cin.get(ch)来获取要打印的字符,但第一个字符实际上是用cin >> ch读取的;然后丢弃结果。

您可能希望摆脱 cin>>ch; 指令并将 ch 初始化为不同于 '@' 的值,或者将循环转换为 do-while 循环,类似于:

char ch;
do
{
    if (cin.get(ch))
    {
       /* Do what is needed */
    }
}
while (ch != '@')

关于c++ - 简单程序省略的第一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33156160/

相关文章:

c++ - getline(cin, var) 不工作!

C++ cin.getline 只读取一个字符

c++ - 如何指向输入流?

c++ - 如何在 C++ 中故意跳过 cin?

c++ - cin.getline 将字符串的开头设置为 '\0'

c++ - 在 Linux 中将 fork() + execlp 与 boost::asio 一起使用时解决重用错误

c++ - 如何为 UNC 路径制作长 Unicode 版本?

c++ - OpenCV 2.3 编译问题 - undefined reference - Ubuntu 11.10

c++ - 来自 C 和 C++ 目标文件的共享库

c++ - 由于某种原因,在输入 cin 文本后,cout 显示为空白。有任何想法吗?