使用带有参数cin.get()或.getline()的函数调用

时间:2014-09-16 14:53:36

标签: c++ string console

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

如果没有,我怎样才能通过这样的函数调用从控制台获得用户输入?

void setString(string str);
string stringText;    

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

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

3 个答案:

答案 0 :(得分:2)

有一个名为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() );

答案 1 :(得分:1)

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

您需要将输入存储在变量

std::string str;
cin >> str;

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

setString(str);

答案 2 :(得分:1)

可能你想要这样的东西:

#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;
}