Is there any way to assign multiple strings on the same line using cin?
我刚刚开始学习 C,我已经进行了一些谷歌搜索,但似乎无法找到可靠的答案。
无论如何都可以使用 cin.
在同一行输入多个字符串变量
例如,假设您希望某人在同一行输入名字和姓氏,然后将它们分配给变量名和姓氏。
除了多行并提示他们两次之外,你会如何做到这一点?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| #include <string>
#include <iostream>
using namespace std;
int main(){
string firstname;
string lastname;
cout <<"Please enter your first name: \
" ;
cin >> firstname;
cout <<"Please enter your last name: \
";
cin >> lastname;
cout <<"Your full name is :" << firstname <<""<< lastname;
return 0;
} |
- std::cin >> firstname >> lastname;?
-
您不应该使用 std::cin 来接受来自标准输入的字符串。请改用 std::getline。
-
@Ron 为什么不呢?对我来说似乎是教条。
-
@Ron 为什么?我的意思是特别是如果 OP 希望用户可以在一行中输入名字和姓氏。
-
注意:在一行中阅读它可能会模棱两可,因为理论上名字或姓氏可以由多个单词组成。
-
@Ron 这就是 OP 想要的 Firstname Lastname。 std::getline 将如何解决那里的问题?
-
@Ron 确实有一点:例如路德维希·范·贝多芬。
-
@Bathsheba 是的,但这不是 std::cin 与 std::getline 而是 OP 希望在一行中阅读它的一般问题。而 std::getline 也无济于事。
有可能:
1 2 3 4 5
| std::string firstname, lastname;
std::cout <<"Please enter your full name:\
";
std::cin >> firstname >> lastname;
std::cout <<"Your full name is :" << firstname << ' ' << lastname; |
由于 std::cin 的 operator>> 返回对 std::cin 的引用,因此可以将其链接在一起,就像 std::cout.
- 谢谢!虽然现在我有点困惑。使用 getline 提到的一些评论。这样做有什么好处吗?
-
@BlueTeam 如果名字或姓氏可能是多个单词,则使用 std::getline 更合理。这是因为对于像 "Ludwig van Beethoven" 这样的名字,std::cin 会将 "Ludwig" 读作名字,将 "van" 读作姓氏。如果你确定这样的事情不会发生,std::cin 是完全可以接受的。
-
感谢您的详细解释,它真的很有帮助!
-
@BlueTeam 请接受答案。
假设你只想使用cin函数,你应该试试; cin >> firstname >> lastname 并提示用户以这种格式输入他/她的姓名:"john smith", "jane smith",因为空格会导致 cin 函数将其完全接受为不同的输入,从而使程序输入名字,然后输入姓氏。
抱歉,有任何语法问题。
编辑:我应该提到我的意思是引号内的格式,如输入名字、空格、姓氏。
-
std::cin 不是函数。它是一个对象。 std::cin >> firstname; 调用函数 operator<<(istream&, std::string&)。
-
啊,是的,抱歉。我从来不知道!谢谢。