C ++ Помощь с чтением из стандартного ввода и вывода на стандартный вывод.Также оператор перегрузки - PullRequest
0 голосов
/ 30 апреля 2011

Мне нужна помощь в отношении этой части кода ... Я должен передать два двойных значения в schmoo. если я сделаю это так "Schmoo (8.0,9.0);" это работает найти, но когда я пытаюсь, как у меня есть, я получаю сообщение об ошибке. Предполагается, что я читаю входные данные из cin, которые выглядят так: «add schmoo 8.0 7.0». Я думаю, что неправильно извлекаю двойные числа, как правильно извлечь каждую вещь из cin. Мне нужно, чтобы это продолжалось до тех пор, пока их ввод.

 while(cin){
    string command1 = "add schmoo";
    string input;
    cin >> input;
    double a,b;
    if(input == command1){
      cin >> a >> b;
      Schmoo *a = new Schmoo(a,b);
      c.insertFront(a);
    }
    string command2 = "throw mud";

    if(input == command2){
      cin >> a >> b;
      c.throwMudAt(a,b);
    }

Также мне нужна помощь с перегрузкой этого оператора:

ostream &operator<<(ostream &os, Schmoo &s){
  if(s.getMud() == 1){
    os << "Schmoo at (" << s.x << ", " << s.y << ") was hit mud " << mud << "time.";
  }
  os << "Schmoo at (" << s.x << ", " << s.y << ") was hit with mud" << mud << "times.";
  return os;
}

Я получаю ошибку, связанную с s.getMud (); Я использовал get грязь через указатель раньше, но этот класс не дружит ни с одним, у которого есть указатель. но getMud - это функция того же класса, в котором он находится, как мне использовать getMud (); в этом контексте.

Ответы [ 2 ]

1 голос
/ 30 апреля 2011

cin читает до первого пробела, который встречается, поэтому строка input будет только «добавить», а не «добавить schmoo». Лучше прочитайте первую строку, проверьте, является ли она «добавлением», затем прочитайте следующую строку (вы можете захотеть добавить к больше, чем schmoo) и затем прочитайте double s. Или измените команду на «add_schmoo».


Для вашей перегрузки, как определяется класс Schmoo?

0 голосов
/ 01 мая 2011

Ваша проблема исходит в основном из этой строки:

string input;
cin >> input;

Если вы введете add schmoo 8.0 9.0, то cin >> input не будет работать, так как вы не дали точного указания, когда он должен прекратить чтение символов.

...