Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
isvpro
72 / 7 / 1
Регистрация: 07.10.2009
Сообщений: 51
#1

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

14.10.2012, 22:56. Просмотров 573. Ответов 16
Метки нет (Все метки)

Всем привет!
Программа описывает структуру для дробей, в которой хранятся соответственно числитель и знаменатель. В ходе выполнения программы мы определяем две переменные типа Дробь, потом предлагаем пользователю ввести их значения в формате (числитель/знаменатель), знак "/" обязателен. Проблема в том, что после ввода первой дроби, 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.10.2012, 22:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему программа не отрывает поток для ввода данных? (C++):

Подскажите почему после первого cout программа не останавливается для ввода строки, а выводит второй cout - C++
Подскажите почему после первого cout программа не останавливается для ввода строки, а выводит второй cout. Это фрагмент со структурами: ...

Почему после ввода переменной программа закрывается? - C++
#include&lt;iostream&gt; using namespace std; int main() { int n, a=10,b, g=1; cin&gt;&gt;n;

Почему программа себя странно ведет: зацикливается после ввода значений? - C++
Зацикливается после воода значений. Подскажите пожалуйста в чем может быть проблема. #include &lt;fstream&gt; #include &lt;iostream&gt; ...

При вводе вместо цифр символов программа перестаёт ожидать ввода на следующей итерации цикла. Почему? - C++
Почему это происходит? #include &lt;iostream&gt; using namespace std; int main() { setlocale(LC_ALL, &quot;Russian&quot;); void...

Программа проверяет корректность ввода данных - C++
1) Пользователь вводит телефон и электронную почту. Программа проверяет корректность ввода данных. (Работа со строками и массивами.) ...

Использование перегруженного оператора ввода/вывода в поток базового класса для объекта производного класса - C++
Здравствуйте! Можно ли использовать перегруженный оператор ввода/вывода в поток из базового класса для объекта производного класса, если...

16
panicwassano
592 / 560 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
14.10.2012, 22:59 #2
Цитата Сообщение от isvpro Посмотреть сообщение
cin не предлагает ввести вторую.
предлагает, вы неправильно вводите
я ввел первый раз 1 / 3, а второй раз 2 / 3
0
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
0
BumerangSP
4287 / 1409 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
14.10.2012, 23:04 #4
Вводите ведь раздельно? Т.е. первая дробь->Enter->вторая дробь. Может, буфер почистить? После первого cin можно попробовать дописать cin.synce();
0
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 -> вторая дробь.
0
BumerangSP
4287 / 1409 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
14.10.2012, 23:11 #6
isvpro, не, sync(). Ну, или fflush(stdin), например. В чем код пишете?
0
isvpro
72 / 7 / 1
Регистрация: 07.10.2009
Сообщений: 51
14.10.2012, 23:14  [ТС] #7
msvc .12 express
0
BumerangSP
4287 / 1409 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
14.10.2012, 23:20 #8
isvpro, хм, проверил на 10 студии, тоже все работает.
0
isvpro
72 / 7 / 1
Регистрация: 07.10.2009
Сообщений: 51
14.10.2012, 23:21  [ТС] #9
хз, я уже чего только не пробовал и getline() и cin.get(), все одинаково.
0
BumerangSP
4287 / 1409 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
14.10.2012, 23:27 #10
isvpro, а что-то кроме msvc12? Можно еще в отладку заглянуть.
0
azver
0 / 0 / 0
Регистрация: 13.04.2015
15.10.2012, 08:59 #11
MSVS Premium 2012. Исходный код работает.
0
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) не срабатывает (по крайней мере у меня).
0
azver
0 / 0 / 0
Регистрация: 13.04.2015
15.10.2012, 20:01 #13
Цитата Сообщение от isvpro Посмотреть сообщение
при запуске программы непосредственно из консоли (а не из IDE) не срабатывает (по крайней мере у меня).
Из cmd тоже работает.
0
BumerangSP
4287 / 1409 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
15.10.2012, 20:02 #14
isvpro, везде работает кроме Вашего vc express, отсюда вывод.
0
isvpro
72 / 7 / 1
Регистрация: 07.10.2009
Сообщений: 51
16.10.2012, 22:39  [ТС] #15
самое интересное, если вместо '\' использовать простой пробел - все ок.
надыбал vs .10 Pro - такая же ситуация. Другими компиляторами пока не пользовался.
0
16.10.2012, 22:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2012, 22:39
Привет! Вот еще темы с ответами:

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

Программа компилируется, но после ввода данных просто закрывается - C++
Программа компилируется,но после ввода номера дня она просто закрывается. #include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; ...

После ввода данных программа закрывается, не показав ответ (Dev C++) - C++
Ребят помогите!!!! работаю в dev c++, после ввода суммы просто закрывает командную стоку и ответа не выдает вот код # include...

Разработать шаблон класса для вывода вектора данных в поток - C++
Разработать шаблон соответствующего класса, где поля могут иметь различные типы данных. Предусмотреть наличие в классе указанных методов и...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.