2013-03-31 4 views
0

Требованияпереключатель Назначение Случай C++

  1. Vulture IS В, OWL IS О, EAGLE Е ...
  2. for цикл для ввода данных каждая птица наблюдатель собирает.
  3. внутри цикла for, петля do ... while для ввода и обработки данных, собранных одним наблюдателем за птицами.
  4. внутри цикла do ... while a switch инструкция используется для расчета количества яиц для каждого типа птиц. опция по умолчанию, которая ничего не делает, используется при вводе x.
  5. петля do ... while выходит, когда для типа птицы вводится X.
  6. тоталы часть штрафа в соответствии с кодом ниже

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

Входные данные, приведенные в

3 
E2 O1 V2 E1 O3 X0 
V2 V1 O1 E3 O2 E1 X0 
V2 E1 X 

А вот код, который я получил до сих пор:

#include <iostream> 
#include <cstdlib> 

using namespace std; 

int main() 
{ 

int totNrVultureEggs, totNrEagleEggs, totNrOwlEggs, nrEggs, 
    nrVultureEggs, nrEagleEggs, nrOwlEggs, nrBirdWatchers, nrEggsEntered; 

char bird; 

// initialize grand totals for number of eggs for each type of bird 
cout << "How many bird watchers took part in the study?"; 
cin >> nrBirdWatchers; 

// loop over number of bird watchers 
for (int i = 0; i < nrBirdWatchers ;i++) 
{ 
// initialize totals for number of eggs for each type of bird 
// this bird watcher saw 
nrVultureEggs = 0; 
nrEagleEggs = 0; 
nrOwlEggs = 0; 
cout << "\nEnter data for bird watcher " << i + 1 << ":" << endl; 

//loop over bird watchers 
do{ 

    cin >> bird >> nrEggs; 
    switch (bird) 
    { 
     case 'E': 
     case 'e': 
      nrEagleEggs = nrEagleEggs + nrEggs; 

     case 'O': 
     case 'o': 
      nrOwlEggs = nrOwlEggs + nrEggs; 

     case 'V': 
     case 'v': 
      nrVultureEggs = nrVultureEggs + nrEggs; 

     default : 
     nrBirdWatchers++; 
     break; 

    } 

    }while (i < nrBirdWatchers) 
; 
cout << "Bird watcher " << i + 1 << " saw " << nrVultureEggs; 
cout << " vulture eggs, " << nrEagleEggs << " eagle eggs and "; 
cout << nrOwlEggs << " owl eggs " << endl; 
// increment grand totals for eggs 
} 

// display results 
cout << "\nTotal number of vulture eggs: " << totNrVultureEggs; 
cout << "\nTotal number of eagle eggs: " << totNrEagleEggs; 
cout << "\nTotal number of owl eggs: " << totNrOwlEggs; 
return 0; 
} 
+3

вам нужно 'break' – nullpotent

+1

Вы забыли' сломать, 'в каждом из вашего' случае: ' заявления. это означает, что как только будет применен случай ANY, ВСЕ код в остальных случаях НИЖЕ эта точка выполняется. –

+0

Я добавил его, но он все еще не хочет работать ... case 'E': case 'e': nrEagleEggs = nrEagleEggs + nrEggs; break; case 'O': case 'o': nrOwlEggs = nrOwlEggs + nrEggs; break; case 'V': case 'v': nrVultureEggs = nrVultureEggs + nrEggs; break; default: nrBirdWatchers ++; break; – Peanut

ответ

0

я переписал всю программу, теперь она работает, но заботиться о входе: из-за типа ввода, вы должны дать ВСЕГДА пару char-int, или вы будете иметь плохое время xD [Проблема в буфере].

Так вход будет:

3 
E2 O1 V2 E1 O3 X0 
V2 V1 O1 E3 O2 E1 X0 
V2 E1 X0 

Источник ниже:

#include <iostream> 
#include <cstdlib> 

using namespace std; 

int main(){ 

    bool done; 
    char birdType; 
    int eagleEggs, owlEggs, vultureEggs; 
    int totEagleEggs, totOwlEggs, totVultureEggs; 
    int eggsTemp, eggsIn, birdWatchers; 

    cout << "How many bird watchers took part in the study?"; 
    cin >> birdWatchers; 

    totEagleEggs = totOwlEggs = totVultureEggs = 0; 

    for (int i = 0; i < birdWatchers ;i++){ 
     eagleEggs = owlEggs = vultureEggs = 0; 
     done = false; 

     cout << endl; 
     cout << "Enter data for bird-watcher n. " << (i + 1) << ":" << endl; 
     do{ 
      cin >> birdType >> eggsTemp; 
      switch (birdType) 
      { 
       case 'E': 
       case 'e': 
       eagleEggs += eggsTemp; 
       totEagleEggs += eagleEggs; 
       break; 

      case 'O': 
       case 'o': 
       owlEggs += eggsTemp; 
       totOwlEggs += owlEggs; 
      break; 

      case 'V': 
      case 'v': 
       vultureEggs += eggsTemp; 
       totVultureEggs += vultureEggs; 
      break; 

      default: 
       done = true; 
      } 
     }while (!done); 

     cout << "The bird-watcher n. " << (i + 1) << " saw " << vultureEggs; 
     cout << " vulture eggs, " << eagleEggs << " eagle eggs and "; 
     cout << owlEggs << " owl eggs." << endl; 
    } 

    cout << endl; 
    cout << "Total number of vulture eggs: " << totVultureEggs << endl; 
    cout << "Total number of eagle eggs: " << totEagleEggs << endl; 
    cout << "Total number of owl eggs: " << totOwlEggs << endl; 
    system("PAUSE"); 
    return 0; 
} 
+0

это решило мою проблему с моим случаем переключения ... спасибо вам очень ..., но can not кажется, что мои окончательные результаты показывают после того, как программа зациклилась – Peanut

+0

Прошу прощения, я забыл паузу в конце программы. [Я запускаю команды командной строки из cmd, а не с двойным щелчком = Р]. На самом деле программа printa также дает окончательные результаты, но она выходит, прежде чем вы сможете их прочитать. Вы должны добавить 'system (" PAUSE ");' перед командой 'return 0;'. [Я отредактировал ответ] – ingroxd

+0

OK Я добавил Паузу, но по какой-то причине он не выходит за пределы цикла FOR так же, как должны отображаться итоговые значения. – Peanut

1

Вам нужен перерыв после каждого случая выключателя. Кроме того, вам нужна логическая переменная «done», чтобы рассказать вам, когда один птица-хранитель сделан.

bool done = false; //Flag to note when a birdwatcher is done 
do { 
    string data; 
    cin >> data; 
    bird = data[0]; 
    nrEggs = data[1]-0; 
    switch (bird) 
    { 
    case 'E': 
    case 'e': 
     nrEagleEggs = nrEagleEggs + nrEggs; 
     break; //was missing before 

    case 'O': 
    case 'o': 
     nrOwlEggs = nrOwlEggs + nrEggs; 
     break; //was missing before 

    case 'V': 
    case 'v': 
     nrVultureEggs = nrVultureEggs + nrEggs; 
     break; //was missing before 

    default : 
     done = true; //changed: No more birds to report 
     break; 

    } 
}while (!done) //Check if there are birds to report 
+0

Я добавил его, но все же не дал желаемого результата – Peanut

+0

Посмотрите на отредактированный мной комментарий. – Tushar

+0

еще делает то же самое – Peanut