我正在尝试编写一个程序,如果某个小狗主人的小狗与小狗主人的距离超过一定距离,则会提醒用户。
具体来说,以下程序:
a
和b
。n
。i
,该程序要求用户输入小狗i的位置。这是2个整数x
和y
,两者当然都依赖于i。count
表示,为正整数。以下是一个示例案例
输入:(所有者位置)2 1(数字小狗)4(位置小狗)(15 15),(14 -2),(1 3),(0 4)
输出:Puppy 1和Puppy 2太远了总共2只小狗太远了
当我尝试运行程序时,程序输出一个问号,而不是i
而不是#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int main() {
string puppies;
int a,b;
cin>>a>>b;
int n;
cin>>n;
int i,x,y,count=0;
for (i=1;i<=n;i++){
cin>>x>>y;
int dist;
dist=abs(a-x)+abs(b-y);
if (dist>10){
count++;
puppies += i;
}
}
if (count==1){
cout<<"Puppy "<<puppies[0]<<" too far away"<<endl;
cout<<"Total "<< count <<" puppy too far away";
}
if (count>1){
int j;
for (j=0;j<=(count-2);j++){
cout<<"Puppy "<<puppies[j]<<" and"<<" ";
}
cout<<"Puppy "<<puppies[count-1]<<" too far away"<<endl;
cout<<"Total "<< count <<" puppies too far away";
}
if (count==0){
cout<<"No puppies too far away";
}
}
。我做错了什么,拜托?
enter image description here
这是复制的输出(与上面相同的情况)
Puppy和Puppy太远了总共2只小狗太远了按任意键继续。 。 。
这是一个截图
std::string
你正试图用std::vector<int>
作为数字的容器。它可以做到足够小的,当然,但你可能想切换到puppies[0]
。
您实际观察到的问题是char
是std::cout << puppies[0]
,它在static_cast<int>(puppies[0])
中被解释为单个文本字符,在您的情况下是对应于不可打印字符的低代码点,因此您的shell显示问号。您可以通过使用puppies += i;
显式转换来修复它,但是再次使用合适的容器来获取实际数字会更合适。
int
如果你看看过载集,你会发现char
没有过载。然而,int
有一个超载。所有整数类型都可以隐式转换为其他整数类型,在这种情况下,char
将转换为std::to_string
。附加到字符串的字符是由整数值表示的字符。什么整数值表示哪个字符取决于系统使用的字符集。
您可能打算以文本表示形式附加整数。您可以将整数转换为字符串,例如使用qazxswpoi。
也就是说,为此目的使用字符串似乎是向后的,因为您似乎不会将其用作字符串,而更像是整数数组。因此,整数向量可能是更明智的选择。