【问题标题】:C++ first character does not print out using getlineC++ 第一个字符不使用 getline 打印出来
【发布时间】:2016-03-28 07:41:30
【问题描述】:

运行此代码后,它会提示我输入第一个路径,例如c:/hello,然后输入第二个路径,例如c:/世界。

输出:

  • 第一条路径:c:/hello
  • 第二条路径::/world

如您所见,第二条路径前面缺少一个 c。但是在我删除 cin.get() 之后 cout

system("cls");
cout << "Enter first path: ";
cin.get();
getline(cin, firstPath);
cout << endl;
cout << "First path: " << firstPath << endl;
cout << endl;
cout << "Enter second path: ";
//cin.get(); // Need to be remove to shows c:/world
getline(cin, second path);
cout << endl;
cout << "Second path: " << secondPath<< endl;
cout << endl;
system("pause")
system("cls");

【问题讨论】:

  • 你认为cin.get() 是做什么的?
  • 接受 char 吗?但是第一个路径没有问题。
  • 那么你的问题不应该是为什么第一个字符串没有缺少第一个字符吗?答案在于您没有向我们展示的部分代码。 stackoverflow.com/help/mcve
  • 你的输出不正确,因为cin.get(),第一个路径不应该显示第一个字符。它不显示第一个字符,因为cin.get() 将第一个字符从用户输入中移开。
  • @RowenChumacera:除非输入缓冲区中还有前一个操作留下的东西。而且由于 OP 没有显示完整的示例,假设 OP 正确描述了输出,几乎可以肯定是这种情况。

标签: c++ getline


【解决方案1】:

TL:DR; 删除您的 cin.get();


删除cin.get(); 它将从cin 读取一个字符,因此从cin 读取的下一个字符将读取下一个字符,因此在第二种情况下,“c”正在由cin.get() 读取,因此下一次读取,getline(cin, second path) 将不会读取它(它已经被读取)。为什么在第一次使用cin.get() 之后读取“c”是一个谜(也许您在“c”之前输入了一个空格?

如果您想获取输入流中的下一个字符并将其存储在某处(例如char c = cin.get(),在本例中为c == 'c'),请仅使用cin.get()。 如果您想跳过当前字符,请使用cin.ignore(),它与cin.get() 做同样的事情,除了您可以选择要跳过的字符数,而且它不会返回任何读取的字符。无论哪种方式,在这种情况下使用这些都是不合适的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多