Форум программистов, компьютерный форум CyberForum.ru

Почему программа не отрывает поток для ввода данных? - C++

Восстановить пароль Регистрация
 
isvpro
72 / 7 / 1
Регистрация: 07.10.2009
Сообщений: 51
14.10.2012, 22:56     Почему программа не отрывает поток для ввода данных? #1
Всем привет!
Программа описывает структуру для дробей, в которой хранятся соответственно числитель и знаменатель. В ходе выполнения программы мы определяем две переменные типа Дробь, потом предлагаем пользователю ввести их значения в формате (числитель/знаменатель), знак "/" обязателен. Проблема в том, что после ввода первой дроби, cin не предлагает ввести вторую.
У кого есть идеи как бороться с этим злом?

Собственно код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
 
struct Fraction
{
    int iNumerator;
    int iDenominator;
};
 
int main()
{
    Fraction f1,f2;
    char chDev;
    cout << "Enter first fraction:"; cin>> f1.iNumerator >> chDev >> f1.iDenominator;
    
    cout << "Enter second fraction:"; cin>> f2.iNumerator >> chDev >> f2.iDenominator;
    cout <<"The sum is: " << (f1.iNumerator*f2.iDenominator + f2.iNumerator * f1.iDenominator) << '\\' << (f1.iDenominator * f2.iDenominator) << endl;
 
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.10.2012, 22:56     Почему программа не отрывает поток для ввода данных?
Посмотрите здесь:

C++ Программа для ввода строки от блондинки
Программа для ввода переменных пользователем C++
C++ Подскажите пожалуйста, почему у меня после после выполнения цикла получается какой-то неперерывный поток данных
Программа проверяет корректность ввода данных C++
Почему программа себя странно ведет: зацикливается после ввода значений? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
panicwassano
590 / 558 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
14.10.2012, 22:59     Почему программа не отрывает поток для ввода данных? #2
Цитата Сообщение от isvpro Посмотреть сообщение
cin не предлагает ввести вторую.
предлагает, вы неправильно вводите
я ввел первый раз 1 / 3, а второй раз 2 / 3
isvpro
72 / 7 / 1
Регистрация: 07.10.2009
Сообщений: 51
14.10.2012, 23:02  [ТС]     Почему программа не отрывает поток для ввода данных? #3
как можно неправильно ввести?
я ввожу например 1/2, 2/4
вот результат работы (копи-паст):

Enter first fraction:1/2
Enter second fraction:The sum is: 13127627\0
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
14.10.2012, 23:04     Почему программа не отрывает поток для ввода данных? #4
Вводите ведь раздельно? Т.е. первая дробь->Enter->вторая дробь. Может, буфер почистить? После первого cin можно попробовать дописать cin.synce();
isvpro
72 / 7 / 1
Регистрация: 07.10.2009
Сообщений: 51
14.10.2012, 23:10  [ТС]     Почему программа не отрывает поток для ввода данных? #5
В дополнение, вот та же задача, но без структур
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
using namespace std;
 
int main()
{
    int a,b,c,d;
    char devide;
    cout << "Enter first part: ";
    cin >> a >> devide >> b;
    cout << "Enter second part: ";
    cin >> c >> devide >> d;
    cout << "The sum is: " << (a*d+c*b) << '\\' << (b*d) << endl;
    return 0;
}
Работает абсолютно исправно:

Enter first part: 1/2
Enter second part: 2/3
The sum is: 7\6

Добавлено через 4 минуты
Цитата Сообщение от BumerangSP Посмотреть сообщение
Вводите ведь раздельно? Т.е. первая дробь->Enter->вторая дробь. Может, буфер почистить? После первого cin можно попробовать дописать cin.synce();
имелось ввиду наверно cin.sinc() ? По описанию должно было, но не помогло. может с чем то еще его использовать?

Добавлено через 56 секунд
Цитата Сообщение от BumerangSP Посмотреть сообщение
Вводите ведь раздельно? Т.е. первая дробь->Enter->вторая дробь. Может, буфер почистить? После первого cin можно попробовать дописать cin.synce();
ввожу раздельно да. первая дробь -> Enter -> вторая дробь.
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
14.10.2012, 23:11     Почему программа не отрывает поток для ввода данных? #6
isvpro, не, sync(). Ну, или fflush(stdin), например. В чем код пишете?
isvpro
72 / 7 / 1
Регистрация: 07.10.2009
Сообщений: 51
14.10.2012, 23:14  [ТС]     Почему программа не отрывает поток для ввода данных? #7
msvc .12 express
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
14.10.2012, 23:20     Почему программа не отрывает поток для ввода данных? #8
isvpro, хм, проверил на 10 студии, тоже все работает.
isvpro
72 / 7 / 1
Регистрация: 07.10.2009
Сообщений: 51
14.10.2012, 23:21  [ТС]     Почему программа не отрывает поток для ввода данных? #9
хз, я уже чего только не пробовал и getline() и cin.get(), все одинаково.
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
14.10.2012, 23:27     Почему программа не отрывает поток для ввода данных? #10
isvpro, а что-то кроме msvc12? Можно еще в отладку заглянуть.
azver
Сообщений: n/a
15.10.2012, 08:59     Почему программа не отрывает поток для ввода данных? #11
MSVS Premium 2012. Исходный код работает.
isvpro
72 / 7 / 1
Регистрация: 07.10.2009
Сообщений: 51
15.10.2012, 11:01  [ТС]     Почему программа не отрывает поток для ввода данных? #12
Цитата Сообщение от BumerangSP Посмотреть сообщение
isvpro, а что-то кроме msvc12? Можно еще в отладку заглянуть.
если в режиме отладки - все ок работает. Только в real time такая ситуация.

Добавлено через 1 минуту
Цитата Сообщение от azver Посмотреть сообщение
MSVS Premium 2012. Исходный код работает.
при запуске программы непосредственно из консоли (а не из IDE) не срабатывает (по крайней мере у меня).
azver
Сообщений: n/a
15.10.2012, 20:01     Почему программа не отрывает поток для ввода данных? #13
Цитата Сообщение от isvpro Посмотреть сообщение
при запуске программы непосредственно из консоли (а не из IDE) не срабатывает (по крайней мере у меня).
Из cmd тоже работает.
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
15.10.2012, 20:02     Почему программа не отрывает поток для ввода данных? #14
isvpro, везде работает кроме Вашего vc express, отсюда вывод.
isvpro
72 / 7 / 1
Регистрация: 07.10.2009
Сообщений: 51
16.10.2012, 22:39  [ТС]     Почему программа не отрывает поток для ввода данных? #15
самое интересное, если вместо '\' использовать простой пробел - все ок.
надыбал vs .10 Pro - такая же ситуация. Другими компиляторами пока не пользовался.
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
16.10.2012, 22:52     Почему программа не отрывает поток для ввода данных? #16
isvpro, а в коде присваивали? там-то точно заработает)

Добавлено через 2 минуты
Или так, например:
C++
1
cout << "Enter first fraction:"; cin>> f1.iNumerator ; cout<<"/";cin >> f1.iDenominator;
Чтоб только не вводить это "деление".
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2012, 22:56     Почему программа не отрывает поток для ввода данных?
Еще ссылки по теме:

C++ Почему после ввода переменной программа закрывается?
C++ Стандартный поток ввода
C++ Организация вычислений во время ввода данных программа С++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
isvpro
72 / 7 / 1
Регистрация: 07.10.2009
Сообщений: 51
16.10.2012, 22:56  [ТС]     Почему программа не отрывает поток для ввода данных? #17
Цитата Сообщение от BumerangSP Посмотреть сообщение
isvpro, а в коде присваивали? там-то точно заработает)

Добавлено через 2 минуты
Или так, например:
C++
1
cout << "Enter first fraction:"; cin>> f1.iNumerator ; cout<<"/";cin >> f1.iDenominator;
Чтоб только не вводить это "деление".
так конечно заработало, но блин костыль. Но все равно спасибо всем, кто отозвался.
Yandex
Объявления
16.10.2012, 22:56     Почему программа не отрывает поток для ввода данных?
Ответ Создать тему
Опции темы

Текущее время: 04:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru