Почему вывод представляет собой знак вопроса в поле вместо числа? - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь написать программу, которая предупреждает пользователя, если у определенного владельца щенка есть щенок, который находится за пределами определенного расстояния от владельца щенка.

В частности, следующая программа:

  • сначала просит пользователя ввести местоположение владельца, а именно ввести 2 целых числа a и b.

  • , затем просит пользователя ввестиколичество щенков у владельцаЭто положительное целое число n.

  • для каждого щенка i из n щенков, программа просит пользователя ввести местоположение щенка i.Это 2 целых числа x и y, оба из которых, конечно, зависят от 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 щенка слишком далеко Нажмите любую клавишу, чтобы продолжить,,.

Вот скриншот

введите описание изображения здесь

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019
puppies += i;

Если вы посмотрите на набор перегрузки, то обнаружите, что перегрузки для int нет.Однако существует перегрузка для char.Все целочисленные типы неявно преобразуются в другие целочисленные типы, и в этом случае int преобразуется в char.Символ, который добавляется к строке, это тот, который представлен целочисленным значением.Какое целочисленное значение представляет какой символ зависит от набора символов, который использует ваша система.

Возможно, вы намеревались добавить целое число в текстовое представление.Вы можете преобразовать целое число в строку, например, используя std::to_string.

Тем не менее, использование строки для этой цели кажется обратным, поскольку вы не используете его как символьную строку, а скорее какмассив целых чисел.Таким образом, вектор целых чисел может быть более разумным выбором.

0 голосов
/ 19 февраля 2019

Вы пытаетесь использовать std::string в качестве контейнера для чисел.Это может сделать это для достаточно маленьких, конечно, но вы, вероятно, захотите переключиться на std::vector<int>.

Проблема, которую вы на самом деле наблюдаете, заключается в том, что puppies[0] это char, что вstd::cout << puppies[0] интерпретируется как один текстовый символ, который в вашем случае представляет собой низкий код, соответствующий непечатаемому символу, следовательно, вопросительный знак отображается вашей оболочкой.Вы можете исправить это путем явного преобразования с помощью static_cast<int>(puppies[0]), но снова было бы целесообразно использовать подходящий контейнер для фактических чисел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...