【问题标题】:Using a function call with the argument cin.get() or .getline()使用带有参数 cin.get() 或 .getline() 的函数调用
【发布时间】:2014-09-16 14:53:36
【问题描述】:

是否可以使用 cin.get() 或 cin.getline() 使用字符串参数进行函数调用?

如果没有,我如何使用这样的函数调用从控制台获取用户输入?

void setString(string str);
string stringText;    

void setString(string str) {
    stringText = str;
}

int main() {
    setString(cin.getline());
    return 0;
}

【问题讨论】:

    标签: c++ string console


    【解决方案1】:

    有一个名为getline 的free 函数,它接受一个输入流和一个字符串作为参数,第二个是out 参数。它返回传入的流对象,而不是字符串。

    但是,您可以编写自己的返回字符串的函数

    std::string getConsoleLine()
    {
          std::string str;
          std::getline( std::cin, str );
          return str;
    }
    

    请注意,就像任何其他输入流一样,cin 可能会因周期读取而处于失败状态。您可以让您的函数清除所有标志并首先忽略其中的任何内容。

    std::string getConsoleLine()
    {
         // as a precaution add this lines
        std::cin.clear();
        std::cin.ignore( std::numeric_limits<streamsize>::max() );
    
        std::string str;
        std::getline( std::cin, str );
        return str;
    }
    

    然后你可以将它传递给你的函数。

    setString( getConsoleLine() );
    

    【讨论】:

    • 没想到,谢谢!这可以帮助我完成所有未来的项目。
    【解决方案2】:

    cin.getline() 不返回std::string,因此您不能将其作为参数直接传递给函数。

    您需要将输入存储在变量中

    std::string str;
    cin >> str;
    

    然后将该变量传递给函数:

    setString(str);
    

    【讨论】:

    • 感谢您的意见。很有见地。
    【解决方案3】:

    可能你想要这样的东西:

    #include <string>
    #include <iostream>
    
    int main()
    {
        std::string stringText;    
    
        // puts the input you type into stringText
        std::getline(std::cin, stringText);
    
        // Now do what you like with stringText
        std::cout << "You typed: " << stringText << '\n';
    
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-02
      • 2013-10-27
      • 2017-10-16
      • 2018-10-09
      • 2011-12-29
      • 1970-01-01
      • 1970-01-01
      • 2018-10-12
      相关资源
      最近更新 更多