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

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

最佳答案

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

关于c++ - 使用带有参数 cin.get() 或 .getline() 的函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25872037/

相关文章:

c++ - 为什么我得到 NaN 作为计算结果? (拉格朗日标准形式的分段线性插值)

c++ - 剪切和粘贴后监视文件(Windows Shell 扩展?)

regex - 在 perl 中为日志输出(stdout)着色

javascript - 如何处理多个复选框

java - 如何从控制台设置亲和性运行java

c# - Win32 是否允许同时使用控制台和窗口的应用程序?

c++ - while 循环跳过所有其他输入

c - 这段反转字符串的代码有什么问题,交换函数是在没有使用 "temp"变量的情况下创建的?

javascript - 创建对象和对象数组

C++ : Writing to a console which opened a form