【问题标题】:cin.Getline returns nothingcin.Getline 不返回任何内容
【发布时间】:2013-03-27 05:44:34
【问题描述】:

我正在努力学习 C++。我现在在弦上。 我写了这个简单的方法,它应该要求输入一个字符串然后返回它。为此,我正在使用 cin.getLine() 方法,但在使用 cin.getLine() 后未打印字符串

string getString(char string[])
{

  cout << "Please enter a string to process ";
  cin >> string;
  cout << "String in getString before process: " << string << "\n";
  cin.getline(string, STRINGSIZE);
  cout << "String after processing: " << string << "\n"; // here string is not printed
  return string;
}

谁能帮我理解我做错了什么?谢谢

【问题讨论】:

  • 这个函数怎么调用? string 是否指向有效且足够大的内存区域?为什么符号名称string 只会让看到您的代码的人与std::string 混淆。这甚至可以编译吗?
  • 你为什么从cin读到string的东西两次?
  • STRINGSIZE 的值是多少,您的测试输入是什么?
  • 是的,它确实可以编译。我在我的主程序中调用该方法。 STRINGSIZE = 100。这是我声明的常数。我可以使用 word[] 更改名称字符串。也许问题就像@Mat 指出我正在阅读两次。我摆脱了第一个 cin 似乎还可以
  • @lucaConfa 或摆脱 getline,看我的回答

标签: c++ string cin


【解决方案1】:

您首先使用cin &gt;&gt; string; 将字符串读取到std::string,然后使用cin.getline(string, STREAMSIZE);cin 再次读取某些内容 没必要,读一遍就回:

string getString(char string[]){
  cout << "Please enter a string to process ";
  cin >> string;
  cout << "String in getString before process: " << string << "\n";
  // process this, do whatever you describe as processing it
  cout << "String after processing: " << string << "\n"; // string is printed
  return string;
 }

否则,如果您想使用getline,请执行以下操作:

  std::string name;

  std::cout << "Please, enter your full name: ";
  std::getline (std::cin,name); // or std::getline(std::cin,string, 'r'); to read
  //only to delimiter character 'r'
  std::cout << "Hello, " << name << "!\n";

所以要记住的是使用getlinecin,除非确实有特殊原因,否则不要同时使用两者

【讨论】:

    猜你喜欢
    • 2020-04-27
    • 2019-04-06
    • 2012-02-15
    • 2020-09-07
    • 2021-11-22
    • 2015-11-06
    • 2013-11-14
    • 2014-03-23
    • 2012-08-25
    相关资源
    最近更新 更多