为什么输出是一个问号而不是一个数字?

问题描述 投票:2回答:2

我正在尝试编写一个程序,如果某个小狗主人的小狗与小狗主人的距离超过一定距离,则会提醒用户。

具体来说,以下程序:

  • 首先要求用户输入所有者的位置,即输入2个整数ab
  • 然后要求用户输入所有者拥有的小狗数量。这是一个正整数n
  • 对于n只小狗的每只小狗i,该程序要求用户输入小狗i的位置。这是2个整数xy,两者当然都依赖于i。
  • 如果小狗i被计算与其所有者达到大于10个单位的距离,则程序应通过打印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

c++ loops output
2个回答
5
投票

你正试图用std::vector<int>作为数字的容器。它可以做到足够小的,当然,但你可能想切换到puppies[0]

您实际观察到的问题是charstd::cout << puppies[0],它在static_cast<int>(puppies[0])中被解释为单个文本字符,在您的情况下是对应于不可打印字符的低代码点,因此您的shell显示问号。您可以通过使用puppies += i; 显式转换来修复它,但是再次使用合适的容器来获取实际数字会更合适。


3
投票
int

如果你看看过载集,你会发现char没有过载。然而,int有一个超载。所有整数类型都可以隐式转换为其他整数类型,在这种情况下,char将转换为std::to_string。附加到字符串的字符是由整数值表示的字符。什么整数值表示哪个字符取决于系统使用的字符集。

您可能打算以文本表示形式附加整数。您可以将整数转换为字符串,例如使用qazxswpoi。

也就是说,为此目的使用字符串似乎是向后的,因为您似乎不会将其用作字符串,而更像是整数数组。因此,整数向量可能是更明智的选择。

© www.soinside.com 2019 - 2024. All rights reserved.