[решено]Оператор Cin в цикле while (Си++)

Модератор: Модераторы разделов

Ardes
Сообщения: 50
ОС: Fedora Core GNU/Linux

[решено]Оператор Cin в цикле while

Сообщение Ardes »

Я недавно начал изучать Си++. Решил поэксперементировать и написать небольшую игру. Что-то навроде блек джека. Написал код, вроде все как надо. Откомпилировал успешно, но вот работать программа не хочет. Я ввожу ставку (cin >> stavka), проходит раздача карт, но дальше программа ведет себя странно и просто начинает повторять цикл до бесконечности. Я думаю проблема в том, что при последующих повторениях оператор cin >> stavka игнорируется.
Помоги плиз!
Вот код:

Код:

//Black Jack #include <iostream> #include <stdlib.h> #include <time.h> using namespace std; int randPlayer(void); int randComp(void); main() { int deposit, stavka, hod, sumPlayer, sumComp; deposit = 500; while (deposit > 0) { sumPlayer = 0; sumComp = 0; srand(time(NULL)); cout << endl; cout << "Сумма на вашем счете: " << deposit << endl; cout << "Введите ставку и нажмите Ввод: " << endl; cin >> stavka; cout << "Введите y для того, чтобы взять карту или нажмите <ctrl-d> чтобы прекратить ход. " << endl; while ((hod = cin.get()) != EOF) { srand(time(NULL)); sumPlayer += randPlayer(); srand(time(NULL)); sumComp += randComp(); cout << "Очки: " << sumPlayer << endl; } if (sumPlayer > sumComp) { cout << "Вы выиграли! " << "Ваши очки: " << sumPlayer << "Очки оппонента: " << sumComp << endl; deposit += stavka; } if (sumPlayer < sumComp) { cout << "Вы проиграли! " << "Ваши очки: " << sumPlayer << "Очки оппонента: " << sumComp << endl; deposit -= stavka; } if (sumPlayer == sumComp) { cout << "Ничья! " << "Ваши очки: " << sumPlayer << "Очки оппонента: " << sumComp << endl; } } cout << "У вас кончились деньги!" << endl; return 0; } int randPlayer(void) { int carde1 = 0, workSum1 = 0; carde1 = 1 + rand() % 9; switch (carde1) { case 1: cout << "Карта: 6" << endl; workSum1 = 6; break; case 2: cout << "Карта: 7" << endl; workSum1 = 7; break; case 3: cout << "Карта: 8" << endl; workSum1 = 8; break; case 4: cout << "Карта: 9" << endl; workSum1 = 9; break; case 5: cout << "Карта: 10" << endl; workSum1 = 10; break; case 6: cout << "Карта: Валет" << endl; workSum1 = 2; break; case 7: cout << "Карта: Дама" << endl; workSum1 = 3; break; case 8: cout << "Карта: Король" << endl; workSum1 = 4; break; case 9: cout << "Карта: Туз" << endl; workSum1 = 11; break; } return workSum1; } int randComp() { int carde2 = 0, workSum2 = 0; carde2 = 1 + rand() % 9; switch (carde2) { case 1: workSum2 = 6; break; case 2: workSum2 = 7; break; case 3: workSum2 = 8; break; case 4: workSum2 = 9; break; case 5: workSum2 = 10; break; case 6: workSum2 = 2; break; case 7: workSum2 = 3; break; case 8: workSum2 = 4; break; case 9: workSum2 = 11; break; } return workSum2; }
Спасибо сказали:
Аватара пользователя
Hater
Сообщения: 165
ОС: Archlinux

Re: [решено]Оператор Cin в цикле while

Сообщение Hater »

Проблема в комбинации клавиш ctrl+d. Замени на что-нибудь другое.
last.fm user Hater-X
Спасибо сказали:
Ardes
Сообщения: 50
ОС: Fedora Core GNU/Linux

Re: [решено]Оператор Cin в цикле while

Сообщение Ardes »

Спасибо огромнейшее!!!
А можно поподробнее, почему сочетание клавиш EOF вызывает такое зацикливание?
Спасибо сказали:
Аватара пользователя
Hater
Сообщения: 165
ОС: Archlinux

Re: [решено]Оператор Cin в цикле while

Сообщение Hater »

Ardes писал(а):
14.07.2008 22:09
Спасибо огромнейшее!!!
А можно поподробнее, почему сочетание клавиш EOF вызывает такое зацикливание?

Дело в том, что ты сообщил о конце файла - дальнейшего чтения быть не может. Поэтому на следующих итерациях чтение и не происходит.
last.fm user Hater-X
Спасибо сказали:
Ardes
Сообщения: 50
ОС: Fedora Core GNU/Linux

Re: [решено]Оператор Cin в цикле while

Сообщение Ardes »

аа! терь ясно! я то думал он сообщает о конце чтения именно для этого оператора))
Спасибо сказали: