为什么输出在方框中而不是数字是问号?

时间:2019-02-19 12:42:16

标签: c++ loops output

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

具体来说,以下程序:

  • 首先要求用户输入所有者的位置,即输入2个整数ab

  • 然后要求用户输入所有者拥有的幼犬数量。这是一个正整数n

  • 对于n个幼犬中的每只幼犬i,程序要求用户输入幼犬i的位置。这是2个整数xy,它们当然都取决于i。

  • 如果计算出小狗i与主人的距离大于10个单位,则程序应通过打印i来通知用户。

  • 最后,程序应告诉用户已打印其数量的幼犬总数。这个数字由变量count(一个正整数)表示。

以下是示例案例

  

输入:   (所有者位置)2 1   (幼犬数)4   (位置幼犬)(15 15),(14 -2),(1 3),(0 4)

     

输出:   幼犬1和幼犬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";
    }
}

这是复制的输出(与上述情况相同)

  

小狗和小狗距离太远   共有2只幼犬距离太远按任何键继续。 。

这是屏幕截图

enter image description here

2 个答案:

答案 0 :(得分:5)

您正在尝试使用std::string作为数字的容器。当然,它可以对足够小的对象执行此操作,但是您可能需要切换到std::vector<int>

您实际上观察到的问题是puppies[0]char,在std::cout << puppies[0]中它被解释为单个文本字符,在您的情况下是对应于一个不可打印的字符,因此外壳显示了问号。您可以通过使用static_cast<int>(puppies[0])进行显式转换来解决此问题,但是再次建议使用适合实际数字的容器。

答案 1 :(得分:3)

puppies += i;

如果查看过载集,您会发现int没有过载。但是,char有一个过载。所有整数类型都可以隐式转换为其他整数类型,在这种情况下,int被转换为char。附加到字符串的字符是用整数值表示的字符。什么整数值代表什么字符取决于系统使用的字符集。

您可能打算将整数附加在文本表示形式中。您可以使用std::to_string将整数转换为字符串。

也就是说,将字符串用于此目的似乎是倒退,因为您似乎没有将其用作字符串,而是更像是整数数组。因此,整数向量可能是更明智的选择。