C ++第一个字符不使用getline打印出来

时间:2016-03-28 07:41:31

标签: c++ getline

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

输出:

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

正如你可以看到第二条路径在前面缺少一条c。但是在我删除cout后的cin.get()<<&#;"输入第二条路径:&#34 ;;它能够在前面显示c。有人可以向我解释为什么会这样吗?

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");

1 个答案:

答案 0 :(得分:0)

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

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

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