gpt4 book ai didi

c++ - 基本字符串输入

转载 作者:可可西里 更新时间:2023-11-01 16:38:14 24 4
gpt4 key购买 nike

我刚刚看到这段代码允许用户在命令提示符下输入字符串。我知道他们在做什么,而且一切都很棒。但我对 cin 和 getline() 函数有疑问。

string name ;
cout << "Please enter your full name: " ;
cin >> name ;
cout << "Welcome " << name << endl ;
cout << "Please enter your full name again please: " ;
getline(cin , name) ;
cout << "That's better, thanks " << name << endl ;
return 0 ;

现在当它输出时,我得到了一些类似的东西:(使用 john smith 作为输入)

Please enter your full name: john smith
Welcome John
Please enter your full name again: That's better thanks Smith

我明白为什么会这样,getline 仍在从输入缓冲区中读取,我知道如何修复它。我的问题是,为什么“请再次输入您的全名:”之后没有换行符?当我将代码更改为:

string name ;
cout << "Please enter your full name: " ;
cin >> name ;
cout << "Welcome " << name << endl ;
cout << "Please enter your full name again please: " ;
cin.ignore( 256, '\n') ;
getline(cin , name) ;
cout << "That's better, thanks " << name << endl ;
return 0 ;

再次输入全名后,我突然换行。老实说,这并不是什么大问题。但如果有人能帮助我,我不介意知道发生了什么。谢谢!

最佳答案

你看,当你首先输入“John Smith”时 cin >> name不会读取整行,而是读取该行的内容直到第一个空格。

所以,在第一个cin之后, 名称变量将包含 John .仍然会有Smith\n在缓冲区中,您已经使用以下方法解决了这个问题:

cin.ignore( 256, '\n') ;

注意:正如 Konrad Rudolph 所建议的,您真的不应该在代码中使用 256 或任何其他魔数(Magic Number)。而是使用 std::numeric_limits<std::streamsize>::max() .这是文档对 istream::ignore 的第一个参数所说的内容:

Maximum number of characters to extract (and ignore). If this is exactly numeric_limits<streamsize>::max(), there is no limit: As many characters are extracted as needed until delim (or the end-of-file) is found.

cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n') ;

My question is, why is there no newline coming after the "Please enter your full name again: "?

因为您没有将一个输出到标准输出,并且用户没有机会按 Enter。 getline将阅读 Smith\n从缓冲区,它会立即继续。它不会将任何换行符回显到您的控制台 - getline不会那样做。

Suddenly I get a newline after you enter your full name again. It's not really a huge issue to be honest. But I wouldn't mind knowing what happened if anyone can help me. Thanks!

这是用户输入的换行符Enter key ,它不是来自您的程序。

编辑 通常在终端中按 Enter(取决于终端设置)会做一些单独的事情:

  1. 正在插入 \n进入输入缓冲区
  2. 刷新输入缓冲区
  3. 将输入光标向下移动一行
  4. 将输入光标移动到行首

关于c++ - 基本字符串输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18803871/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com