Вопрос C ++ If / Else - PullRequest
       2

Вопрос C ++ If / Else

0 голосов
/ 25 марта 2011

Что я делаю не так с синтаксисом этих операторов If / Else, я почти уверен, что это что-то делает с моим фигурным скобками.Все примеры в моей книге содержат только действительно примитивные / простые примеры (не говоря уже о том, что этот код не прост; б / с это так).Я думаю, мой общий вопрос также состоит в том, как вы разделяете эти два отдельных утверждения.Когда я выполняю, кажется, что две отдельные функции смешиваются вместе.

  //
    tens = rand / 10;
    if (tens =  2){
            cout << "twenty ";
    else if (tens = 3)
            cout << "thirty ";
    else if (tens = 4)
            cout << "forty ";
    else if (tens = 5)
            cout << "fifty ";
    else if (tens = 6)
            cout << "sixty ";
    else if (tens = 7)
            cout << "seventy ";
    else if (tens = 8)
            cout << "eighty ";
    else if (tens = 9)
            cout << "ninety ";
    }

    //
    ones = rand % 10;
    if (ones =  0){
            cout << "\n";
    else if (ones = 1)
            cout << "one\n";
    else if (ones = 2)
            cout << "two\n";
    else if (ones = 3)
            cout << "three\n";
    else if (ones = 4)
            cout << "four\n";
    else if (ones = 5)
            cout << "five\n";
    else if (ones = 6)
            cout << "six\n";
    else if (ones = 7)
            cout << "seven\n";
    else if (ones = 8)
            cout << "eight\n";
    else if (ones = 9)
            cout << "nine\n";
    }

Ответы [ 9 ]

6 голосов
/ 25 марта 2011

Я думаю, для этой конкретной проблемы if-else даже не требуется!

Я бы порекомендовал это решение:

const char *stens[] = {"", "", "twenty", "thirty", "forty", "fifty",
                               "sixty", "seventy", "eighty", "ninty"};
const char *sones[] = {"", "one", "two", "three", "four", "five", 
                               "six", "seven", "eigth", "nine"};

//make sure  0<= rand <= 99
 cout << stens[ rand / 10 ] << " " << sones[ rand % 10 ] << endl;

Онлайн демо: http://www.ideone.com/K7HxS

Что касается проблемы, с которой вы столкнулись с if-else , вы используете оператор присваивания , а не равенство , как все уже указали вне.

5 голосов
/ 25 марта 2011

Один знак равенства - это задание, а не тест на равенство.

Вы должны использовать ones == N для некоторого числа N.

Также кажется, что вы неправильно используете скобки ({ и }), ваше утверждение if должно выглядеть так:

tens = rand / 10;
if (tens == 2){
        cout << "twenty ";
}else if (tens == 3){

Обратите внимание на скобку, предшествующую else и после 3).

Кроме того, я бы порекомендовал использовать оператор switch в этом сценарии, это может привести к некоторому более легкому для чтения и более управляемому коду:

tens = rand / 10;
switch(tens){
  case 2: cout << "twenty "; break;
  case 3: cout << "thirty "; break;
  case 4: cout << "fourty "; break;
  // ...
  case 9: cout << "ninety "; break;
}
3 голосов
/ 25 марта 2011

используйте "==" вместо "= '." = "Является оператором присваивания, тогда как" == "логически равно.

2 голосов
/ 25 марта 2011

Да, вы используете фигурную скобку неправильно.Сделайте это так:

if (tens ==  2)
{
        // your commands
}
else
{
        // your commands
}

И, пожалуйста, используйте оператор "==" для сравнения, а не "=".

1 голос
/ 25 марта 2011

почему вы не используете SWITCH CASE, подумайте, что вы должны преобразовать вычисленное значение в int, т.е.

ones = int (rand % 10);
ones = int (rand / 10);

пример корпуса переключателя

switch (x) {
  case 1:
    cout << "x is 1";
    break;
  case 2:
    cout << "x is 2";
    break;
  default:
    cout << "value of x unknown";
  }
1 голос
/ 25 марта 2011

Да, вам нужно закрыть скобку после первого, если.

0 голосов
/ 25 июня 2013

Вы должны закрывать фигурные скобки после каждого условия if или else if, например

tens = rand / 10;
if (tens =  2) {
        cout << "twenty "; }
else if (tens = 3) {
        cout << "thirty ";}
else if (tens = 4)
        cout << "forty "; }
else if (tens = 5) {
        cout << "fifty "; }
else if (tens = 6) {
        cout << "sixty "; }
else if (tens = 7) {
        cout << "seventy "; }
else if (tens = 8) {
        cout << "eighty "; }
else if (tens = 9) {
        cout << "ninety "; }
//
ones = rand % 10;
if (ones =  0) {
        cout << "\n"; }
else if (ones = 1) {
        cout << "one\n"; }
else if (ones = 2) {
        cout << "two\n"; }
else if (ones = 3) {
        cout << "three\n"; }
else if (ones = 4) {
        cout << "four\n"; }
else if (ones = 5) {
        cout << "five\n"; }
else if (ones = 6) {
        cout << "six\n"; }
else if (ones = 7) {
        cout << "seven\n"; }
else if (ones = 8) {
        cout << "eight\n"; }
else if (ones = 9) {
        cout << "nine\n"; }
0 голосов
/ 25 марта 2011

Оператор присваивания =, как правило, всегда возвращает true, поскольку возвращает успешное присвоение значения. Оператор равенства == - это то, что вы после. Он проверит эквивалентность двух значений.

Кроме того, после оператора if следует либо один оператор, либо блок кода. В вашем примере вам не хватает завершающих скобок.

// This is the assignment operator with a single statement.
if ( a = b )
    cout << "I am always true!" << endl;

// This is the equality operator with a code block.
if ( a == b ) {
    cout << "I am sometimes true!" << endl;
} else {
    cout << "I am more likely to be true." << endl;
}
0 голосов
/ 25 марта 2011

ТАКЖЕ, скобка сразу после вашего «если» должна совпадать на единицу прямо перед первым «другим»

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