Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.03.2010, 19:08   #1
fs444
Форумчанин
 
Регистрация: 18.08.2009
Сообщений: 289
По умолчанию Программа обучения таблице умножения

У Дейтелов есть задача


Я написал такой код:
Код:
#include<iostream>
using namespace std;

#include<windows>
#include<iomanip>

void aNaB(void); //ф-ция, выводящая вопрос о перемножении двух случайных чисел

int main()
{
   aNaB();

   system("pause");
   return 0;
}

void aNaB(void)
{
   int a; //первый множитель
   int b; //второй множитель
   int otvet = 0; //ответ пользователя, сколько будет a * b

   srand(time(0));

   a = 1 + rand() % 9;
   b = 1 + rand() % 9;


   cout << "Skolko budet " << a << " x " << b << "? (Ctrl + Z - vihod)" << endl << "Otvet: ";

   while ((otvet = cin.get()) != EOF)
   {
      if ((a * b) == otvet)
      {
         cout << "Pravilno. ";
      }
      else
      {
         cout << "Vash otvet: " << otvet << " , a nado " << a * b << endl;
         cout << "NE Pravilno. Poprobujte eshe raz. ";
         while (((a * b) != otvet) || ((otvet = cin.get())!= EOF))
         {
            cout << "Skolko budet " << a << " x " << b << "?" << endl << "Otvet: ";
            cin >> otvet;
         }
      }

      a = 1 + rand() % 9;
      b = 1 + rand() % 9;

      cout << "Skolko budet " << a << " x " << b << "? (Ctrl + Z - vihod)" << endl << "Otvet: ";
   }
}
Вывод следующий:


Не могу понять, почему в otvet записалось 51, хотя я ввел 32. Переменную инициализировал..
fs444 вне форума Ответить с цитированием
Старый 22.03.2010, 19:14   #2
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Код:
while (1)
   {
      cin >> otvet;
      if ((a * b) == otvet)
      {
         cout << "Pravilno. ";
         break;
      }
И эту строку я думаю нужно убрать:

Код:
while (((a * b) != otvet) || ((otvet = cin.get())!= EOF))

Последний раз редактировалось profi; 22.03.2010 в 19:21.
profi вне форума Ответить с цитированием
Старый 24.03.2010, 20:14   #3
fs444
Форумчанин
 
Регистрация: 18.08.2009
Сообщений: 289
По умолчанию

Цитата:
Код:
while (1)
   {
      cin >> otvet;
      if ((a * b) == otvet)
      {
         cout << "Pravilno. ";
         break;
      }
а что здесь while проверяет? В каких случаях "1" измениться на что-то еще?
fs444 вне форума Ответить с цитированием
Старый 24.03.2010, 21:16   #4
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Цикл будет выполняться вечно, а точнее до тех пор, пока не дойдет дело до break, в данном случае - пока не выполнится условие в if.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 27.03.2010, 21:53   #5
fs444
Форумчанин
 
Регистрация: 18.08.2009
Сообщений: 289
По умолчанию

Гром
Аа, ясно.
fs444 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа для обучения устному счетуна Паскаль Myhamorchik Помощь студентам 6 24.06.2012 15:17
Слияние шаблона с данными из таблице, и как подсичтать значение количества полей в таблице n4ela Microsoft Office Access 3 07.03.2009 12:04
программа,определенние "1" в таблице!помогите пожалуйста.. katy)))) Помощь студентам 2 06.12.2007 12:09
насчёт обучения steck Свободное общение 5 26.05.2007 07:53