运行此代码后,它会提示我输入第一个路径,例如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");
答案 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()
,除了可以选择要跳过的字符数,并且不会忘记返回任何读取的字符。无论哪种方式,在这种情况下使用它们都是不合适的。