我正在学习C ++,并且遇到与C ++中的std :: cout相关的问题。我正在使用vscode进行编程。 下面是我的代码
int main(){
std::string sender_name;
std::cout<<"Enter the sender name: ";
std::getline(std::cin >> std::ws, sender_name);
std::string recipient_name;
std::cout<<"Enter the recipient name: ";
std::getline(std::cin >> std::ws, recipient_name);
int recipient_age=0;
std::cout<<"Enter the recipient_age of recipient: ";
std::cin>>recipient_age;
std::string friend_name;
std::cout<<"Enter your friend's name: ";
std::getline(std::cin >> std::ws, friend_name);
char friend_sex = 0;
std::cout<<"Enter 'm' for friend male and 'f' for the other: ";
std::cin>>friend_sex;
std::cout<<"Dear " + recipient_name+"," << std::endl;
std::cout<<std::endl;
std::cout<<"How are you? I am fine. I miss you."<<std::endl;
std::cout<<"Have you seen " +friend_name+" lately?"<<std::endl;
if (friend_sex == 'm'){
std::cout<<"if you see " + friend_name + " please ask him to call me."<<std::endl;
}
else if(friend_sex == 'f'){
std::cout<<"if you see " + friend_name + " please ask her to call me."<<std::endl;
}
else{
std::cout<<"if you see " + friend_name + " please ask him/her to call me."<<std::endl;
}
if(recipient_age <= 0 || recipient_age >= 110){
std::cout<<"you're kidding!"<<std::endl;
}
else{
std::cout<<"I heard that you just had a birthday and you are " + recipient_age;
std::cout<<" years old." << std::endl;
if(recipient_age < 12){
std::cout<<"Next year you will be " + (recipient_age+1);
std::cout<<"."<<std::endl;
}
if(recipient_age == 17)
std::cout<<"Next year you will be able to vote." << std::endl;
if(recipient_age > 70)
std::cout<<"I hope you are enjoying retirement."<<std::endl;
}
std::cout<<std::endl;
std::cout<<"Yours sincerely,"<<std::endl;
std::cout<<std::endl;
std::cout<<std::endl;
std::cout<<sender_name<<std::endl;
return 0;
}
我从终端输出的内容缺少一些打印语句
Enter the sender name: Sender
Enter the recipient name: Receiver
Enter the recipient_age of recipient: 30
Enter your friend's name: Neighbour
Enter 'm' for friend male and 'f' for the other: f
Dear Receiver,
How are you? I am fine. I miss you.
Have you seen Neighbour lately?
if you see Neighbour please ask her to call me.
rthday and you are years old.
Yours sincerely,
生日那天,您已经几岁了。应该是听说您刚过生日,并且您已经30岁。
我认为cout的打印没有限制。谁能给我一些关于这个问题的想法?
答案 0 :(得分:3)
行
std::cout<<"I heard that you just had a birthday and you are " + recipient_age;
是错误的,因为+
仅在被赋予两个std::string
或一个std::string
以及一个字符串文字(或其他以null终止的char*
)时才串联另一边。
如果一侧是字符串文字,而另一侧是整数,则它不会像您想的那样工作。
避免使用+
进行串联。无论如何,它仅适用于字符串。重复输出std::cout
的正确方法是将多个对象连续输出为<<
,格式为字符串,
std::cout << "I heard that you just had a birthday and you are " << recipient_age;
为避免这种误会,我建议您在使用+
的其他地方都这样做。
当+
的一面是字符串文字,另一面是整数时,其作用是将字符串文字的地址并加到该地址,并返回指针。因此,您正在传递一个从字符串文字中间开始的指针到std::cout <<
,从而导致您看到的行为。
答案 1 :(得分:1)
不能将整数连接到字符串常量的末尾。线
std::cout<<"I heard that you just had a birthday and you are " + recipient_age;
表示当recipient_age
等于30时,从字符串开头的30个字符开始打印。
将该行替换为
std::cout<<"I heard that you just had a birthday and you are " << recipient_age;
您还需要使用打印"next year you will be "
的代码来完成此操作。