getline()不在代码中工作

时间:2016-07-13 16:08:08

标签: c++

昨天我开始开发一种加密机器,就像凯撒密码一样。你输入一条消息(例如,HELLO),选择一个键值(例如3),结果是KHOOR(向前3个字母)。
问题是,如果我使用" cin>> MSG;"我只能编纂一个字。如果我使用" getline(cin,msg);",则代码不起作用。也许这是一个简单的问题,但我无法解决它...... :(

add.html

2 个答案:

答案 0 :(得分:1)

所以你的代码工作正常:http://ideone.com/lBhD78

如果您尝试接受超过1个单词,则简单提取运算符将无效。这可能是你要问的问题。在这种情况下,您需要使用getline。比如这样:

getline(cin, msg, '\n');

所以我不确定你在抱怨什么,不过这可以通过以下方式得到很大改善:

  1. 不区分大小写
  2. 仅修改字母字符
  3. 您可以通过执行以下操作来完成此操作:

    transform(cbegin(msg), cend(msg), ostream_iterator<char>(cout), [&](unsigned char i){
        if(isalpha(i)) {
            const auto a = islower(i) ? 'a' : 'A';
    
            i = (i - a + key_value) % 26 + a;
        }
        return i; });
    

    我已用getline写完Live Example

答案 1 :(得分:0)

你必须小心写问题。 但是,不清楚你的意思,答案是:

  • 当您阅读cin&gt;&gt; s时,默认情况下,您正在考虑将数据分隔为“空格”。因此,它会跳过空格并读取字符串,直到新的空格或输入结束。
  • 如果您遇到getline问题,可能问题出在您显示的代码之前。如果您使用例如cin&gt;&gt;整数读取值,则在输入的末尾按下换行符,但此字符仍在流中。如果你的代码中的以下行是getline,那么你可能会读到一个空行。

在第一项中,您可以找到当前代码的工作原理,在第二项中,为什么getline-version不能。