Случаи не будут выполняться в операторе Switch ...? - PullRequest
0 голосов
/ 08 марта 2011

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

Вот оно:

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) // Arithmetic Button Click
         {
            String^ riS = dc1->Text;
            String^ ciS = dc2->Text;        
            colint = int::Parse(dc2->Text);
            std::ostringstream ss;
            String^ answer;
            op1 = Double::Parse(foValue->Text);
            op2 = Double::Parse(soValue->Text);

            // Enter switch 
            switch(op_sym)
    {
        case '+':

            sum = op1 + op2;
            DGV->CurrentCell = DGV->Rows[RI]->Cells[CI];
            ss << sum;
            answer = Convert::ToString(answer);
            MessageBox::Show(answer);
            DGV->CurrentCell->Value = answer;
            sumLabel->Text = "TEST";
            break;

        case '-':
            sum = op1 - op2;
            break;
        case '*':
            sum = op1 * op2;
            break;
        case '/':
            if (op2 == 0)
            {
                MessageBox::Show("Sorry, you cannot divide by zero \n Please, reselect yoru second cell operand");
                secondOpText->Text = "";
            }
            else
            {
            sum = op1/op2;
            }
            break;
        default:
            MessageBox::Show("I'm sorry.  Please select one of these four arithmetic symbols from the drop down list: \n +, -, *, /");
            break;
    }


         }

Я получаю op_sym справа сверху:

private: System::Void comboBox1_SelectedIndexChanged(System::Object^  sender, System::EventArgs^  e) 
         {
             Object^ selectedItem = comboBox1->SelectedItem;
             String^ cb = selectedItem->ToString();
             if( cb = "+")
             {
                op_sym = '+';
             }
             if(cb = "-")
                 op_sym = '-';
             if(cb = "/")
                 op_sym = '/';
             if(cb = "*")
                 op_sym = '*';

         }

op_sym уже объявлен как символ в верхней части.Если кто-то сообщит мне о моей наиболее вероятной ошибке новичка, я буду очень признателен.Спасибо.

РЕДАКТИРОВАТЬ

...
    case '+':
                {
                sum = op1 + op2;
                DGV->CurrentCell = DGV->Rows[RI]->Cells[CI];
                ss << sum;
                answer = Convert::ToString(sum);
                MessageBox::Show( answer);
                DGV->CurrentCell->Value = answer;
                sumLabel->Text = answer;
                break;
                }
...


private: System::Void comboBox1_SelectedIndexChanged(System::Object^  sender, System::EventArgs^  e) 
         {
             Object^ selectedItem = comboBox1->SelectedItem;
             String^ cb = selectedItem->ToString();
             if( cb == "+")
             {
                op_sym = '+';
             }
             if(cb == "-")
                 op_sym = '-';
             if(cb == "/")
                 op_sym = '/';
             if(cb == "*")
                 op_sym = '*';
}

Ответы [ 2 ]

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

Обратите внимание на вашу вторую функцию (сравнивая фактическое значение op_sym):

 if( cb = "+")
         {
            op_sym = '+';
         }
         if(cb = "-")
             op_sym = '-';
         if(cb = "/")
             op_sym = '/';
         if(cb = "*")
             op_sym = '*';

Вы выполняете назначения для cb, а не на самом деле сравнения. Попробуйте использовать оператор == для сравнения двух значений:

if ( cb == "+" )
...

Когда вы хотите изменить значение op_sym, вы используете оператор присваивания (=). Если вы хотите сравнить значения строк, используйте оператор сравнения (==).

Также - Проверьте API для работы со строкой VC ++: http://msdn.microsoft.com/en-us/library/ms177218.aspx

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

single = присвоение == равно

if( cb == "+")
 {
    op_sym = '+';
 }
 if(cb == "-")
     op_sym = '-';
 if(cb == "/")
     op_sym = '/';
 if(cb == "*")
     op_sym = '*';
...