【问题标题】:std::cin Will not workstd::cin 将不起作用
【发布时间】:2017-08-05 04:43:08
【问题描述】:

我正在尝试使用 std::cin >> 但 Visual Studio 2017 说:

"二进制 '>>': 没有找到接受 'std::istream' 类型左侧操作数的运算符(或没有可接受的转换)"

完整代码:

#include "stdafx.h"
#include <iostream>

void verb()
{
    std::cin >> "Enter a verb";
}



int main()
{
    std::cout << "help";
    return 0;
}

"help" 是临时的,直到我可以让void verb(); 工作。)

【问题讨论】:

  • cin 用于输入。 cin 应该如何输入到"Enter a verb" 中?
  • 这不是你使用std::cin的方式。您应该在&gt;&gt; 的右侧放置一个变量来存储用户提供的内容。如果您想提示用户,请在 std::cin 之前放置带有您的消息的 std::cout
  • 即使std::cin &gt;&gt; 神奇地允许您打印一条提示消息作为副作用,但事实并非如此,您希望在用户按下回车后输入会发生什么?字符串应该去哪里?应该存放在哪里?

标签: c++


【解决方案1】:

std::cin读取输入

std::cin 用于输入,你必须将你想要读取的值存储到一个变量中。

例如,

std::string word;
std::cin >> word;

std::cin &gt;&gt; word; 会将用户输入的单词分配给word 因此,将字符串文字(例如"hello")传递给std::cin 是没有意义的,因为它不会知道如何处理它。

如果您想向用户显示一条消息以告诉他们输入某些内容,只需使用std::cout,就像您打印其他消息一样。

关于std::cin的其他有趣的事情

您也可以使用其他一些类型,例如intfloat 或其他类型直接与std::cin 一起使用。

请注意,当输入带有std::cin的字符串时,它只会读取一个字(由空格分隔),这意味着如果用户输入hello worldword的值将是hello - 如果您再次执行std::cin &gt;&gt; word;,您将获得world。要从std::cin 读取整行,请参阅this thread

如果您想一次读取多个内容(以避免在代码中多次添加 std::cin &gt;&gt;),您可以“链接”输入:

std::string word1, word2;
int number;
std::cin >> word1 >> number >> word2;

对于firstword 443351 lastword 等输入,这将按预期工作。

【讨论】:

  • 我已经弄清楚了,但这给了我更多有用的信息。下次别忘了说一定有#include &lt;string&gt;
  • 这是正确的,尽管大多数实现可能包括&lt;string&gt;&lt;iostream&gt;(但如果我记得很清楚,那是未定义的行为)。您可以在 cppreference here for std::cinhere for std::istream 上找到更多信息
【解决方案2】:

你必须把它写在一个变量中

#include "stdafx.h"
#include <iostream>
#include <string>

std::string variable_a;

void verb()
{
    std::cin >> variable_a;
}



int main()
{
     std::cout << "help";
     return 0;
}

【讨论】:

    【解决方案3】:
    #include <iostream> // Include input/output stream objects
    #include <string> // Include string data type
    using namespace std; // Use standard namespace library
    
    int main()
    {
        string verb; // Declare verb as type string
    
        cout << "Enter a verb: "; // Asks the user to enter a verb
        cin >> verb; // Takes input as variable verb
    
       system("pause"); // Pauses console
       return 0; // Return value from function
    }
    

    另外,当你将来创建程序时试试这个。

    1. 删除 '#include "stdafx.h"' 并复制您的原始代码。
    2. 启动 Visual Studio 2017。
    3. 在“新建项目”下方,选择项目类型。
    4. 进入“Win32 应用程序向导”后,单击“下一步”并在“其他选项”下单击“空项目'。
    5. 您现在将看到一个空白屏幕。
    6. 在“项目”菜单选项卡下,单击“添加新项目(或 Control + Shift + A)
    7. 将现有代码复制到此项目中。

    这应该可以解决问题

    【讨论】:

    • 我看不出这将如何解决问题。 OP 在使用std::cin 时遇到问题,他不知道正确的语法。他不是在问如何在 Windows 下编译源代码。
    • @FrançoisAndrieux 没错,虽然#include "stdafx.h" 过去给我带来了很多问题,通过删除它,问题得到了解决。不过我会更新我的答案。
    猜你喜欢
    • 1970-01-01
    • 2019-11-24
    • 2020-08-03
    • 2012-04-01
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    • 2021-01-03
    相关资源
    最近更新 更多