Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> некорректная работа программы, хотя ошибок нет 
V
    Опции темы
anatox91
Дата 19.2.2008, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: 1
Всего: 13



вобщем вопрос тут вот в чем: создал примитивный калькулятор, но работает он неправильно, компилируясь без ошибок. После того, как выбираешь действие и выполняешь его, нужно чтобы программа закрывалась, а она начинает выполнять следующую case-инструкцию и так до последней...подскажите пожалуйста что я не так делаю, вот код:
Код

#include <iostream>
#include <windows.h>
using namespace std;

double f_u(double j) {
       static double k = 1;
       k = k * j;
       return k;
       }

double f_s(double j) {
       static double k = 0;
       k = k + j;
       return k;
       }
       
void umnozhenie() {
       char question[100] = "Сколько чисел вы будете перемножать?\n";
       char str[10] = "Введите ";
       char str1[10] = " число.\n";
       int q_a;
       double number;
       
       ::CharToOem(question, question);
       ::CharToOem(str, str);
       ::CharToOem(str1, str1);
       
       cout << question;
       cin >> q_a;
       cin.ignore();
       
       int counter = 1;
       
       for(int i=0; i < q_a; i++) {
               cout << str << counter << str1;
               cin >> number;
               cin.ignore();
               cout << "Result is " << f_u(number) << "\n\n";
               counter++;
               }
       }

void summation() {
       char question[100] = "Сколько чисел вы будете суммировать?\n";
       char str[10] = "Введите ";
       char str1[10] = " число.\n";
       int q_a;
       double number;
       
       ::CharToOem(question, question);
       ::CharToOem(str, str);
       ::CharToOem(str1, str1);
       
       cout << question;
       cin >> q_a;
       cin.ignore();
       
       int counter = 1;
       
       for(int i=0; i < q_a; i++) {
               cout << str << counter << str1;
               cin >> number;
               cin.ignore();
               cout << "Result is " << f_s(number) << "\n\n";
               counter++;
               
               }
       }

void vychitanie() {
       char question[100] = "Из какого числа вы будете вычитать?\n";
       char question2[100] = "Сколько чисел вы будете вычитать?\n";
       char str[10] = "Введите ";
       char str1[10] = " число.\n";
       int q_a;
       double k;
       double number;
       
       ::CharToOem(question, question);
       ::CharToOem(question2, question2);
       ::CharToOem(str, str);
       ::CharToOem(str1, str1);
       
       cout << question;
       cin >> k;
       cin.ignore();
       
       cout << question2;
       cin >> q_a;
       cin.ignore();
       
       int counter = 1;
       
       for(int i=0; i < q_a; i++) {
               cout << str << counter << str1;
               cin >> number;
               cin.ignore();
               k = k - number;
               cout << "Result is " << k << "\n\n";
               counter++;
               }
       }

int main() {
    SetConsoleTitle("Mini-Calc");
    int choice;
    char str1[30] = "Введите:\n";
    char str2[60] = "1 - если хотите перемножить числа.\n";
    char str3[60] = "2 - если хотите суммировать числа.\n";
    char str4[100] = "3 - если хотите из числа вычесть сколько-то чисел.\n";
    char str5[50] = "\nСмотри что вводишь!\n";
    
    ::CharToOem(str1, str1);
    ::CharToOem(str2, str2);
    ::CharToOem(str3, str3);
    ::CharToOem(str4, str4);
    ::CharToOem(str5, str5);
    
    re:
    
    cout << str1;
    cout << str2;
    cout << str3;
    cout << str4;
    cin >> choice;
    cin.ignore();
    
    switch(choice) {
                   case 1:
                           cout << "\n"; umnozhenie();
                   case 2:
                           cout << "\n"; summation();
                   case 3:
                           cout << "\n"; vychitanie();
                   default:
                           cout << str5;
                           goto re;
                   }
    cin.get();
    return 0;

 


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
ama_kid
Дата 19.2.2008, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: нет
Всего: 95



anatox91, читай хелп по switch и используй break...
Код

    switch(choice) {
                   case 1:
                           cout << "\n"; umnozhenie();
                           break;
                   case 2:
                           cout << "\n"; summation();
                           break;
                   case 3:
                           cout << "\n"; vychitanie();
                           break;
                   default:
                           cout << str5;
                           goto re;
                   }

P.S. рискую развязать холи-вар, но попытайся обойтись без goto (к примеру, организацией бесконечного цикла с условием выхода)


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
MAKCim
Дата 19.2.2008, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 2
Всего: 207



ama_kid
здесь goto вполне логичен и не мешает пониманию кода


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
anatox91
Дата 19.2.2008, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: 1
Всего: 13



ama_kid, спасибо, напомнил склерознику... знал об этом, но напрочь из головы вылетело почему-то  smile 


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
virtual09
Дата 19.2.2008, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 3.10.2007

Репутация: нет
Всего: нет



Цитата(MAKCim @  19.2.2008,  10:27 Найти цитируемый пост)
здесь goto вполне логичен и не мешает пониманию кода 

Не согласен, потому что надо искать метку, а она может быть где угодна. Лучше do while().
PM MAIL   Вверх
anatox91
Дата 19.2.2008, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: 1
Всего: 13



virtual09MAKCim говорит именно про этот код, а тут по-моему отыскать метку не так уж и сложно... это в больших кодах другое дело... smile 

Это сообщение отредактировал(а) anatox91 - 19.2.2008, 11:17


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0671 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.