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

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

Войти
Регистрация
Восстановить пароль
 
Roukff
1 / 1 / 0
Регистрация: 05.06.2011
Сообщений: 35
#1

Не могу правильно считать данные из потока - C++

16.08.2012, 13:46. Просмотров 735. Ответов 3
Метки нет (Все метки)

Привет всем. У меня есть такая задача. На вход поступает дробь вида
1 1/4 (например). Эта дробь может быть представлена как только целой частью (1), так только дробной частью (1/4) так и полностью. И возникает проблема считывания.
Пробовал так:
C++
1
scanf("%lld %lld/%lld", one, two, three);
Но тут проблема в том, что приходится вводить все 3 числа. ну либо 2, но это неправильно.
Сейчас сделано так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//считываем первое число
scanf("%lld%c",&_fract.intPart, &_razdel);
    //считываем разделитель после первой цифры: если нажат Enter, то число без дробной части, 
    //если слеш, то только дробная часть, если пробел то и целая и дробная части присутствуют
    if (_razdel == '\n')
    {
        _fract.numerator = 0;
        _fract.denomerator = 1;
    }
    else if (_razdel == ' ')
    {
        //Считываем дробную часть
        scanf("%lld/%lld%*c", &_fract.numerator, &_fract.denomerator);
    }
    else if (_razdel == '/')
    {
        //Считываем знаменатель
        scanf("%lld%*c", &_fract.denomerator);
        _fract.numerator = _fract.intPart;
        _fract.intPart = 0;
    }
    //Сбрасываем входной поток
    fflush(stdin);
Но здесь тоже проблема: этот код проходит автоматизированную проверку и ей надо, чтоб это число было введено в одну строку и скорее всего с этим-то проблема и есть. Помогите правильно считать данные!! Если предлагаете в строку считать, то помогите эту строку грамотно разобрать! =)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.08.2012, 13:46     Не могу правильно считать данные из потока
Посмотрите здесь:

не могу считать из потока данные - C++
Ребят,помогите разобраться. Вот код. #include <iostream> #include <Windows.h> #include <Ole2.h> #include <Objbase.h> ...

Не могу понять как правильно считать строки - C++
Задача: Задача1. «Поиск в строке» Самым популярным вопросом прошлого контеста был вопрос о сколь угодно длинных строках. По...

Считать строку с потока - C++
Проблема в заголовке темы. f>>str; //отсутствует функция ">>" getline(f,str); //getline: идентификатор не найден Как тогда мне...

Считать с потока строку в std::wstring - C++
Есть ли аналог std::string str; getline(cin,str); для std::wstring ???

можно ли считать следующий символ из потока - C++
Было бы отлично, если можно было считать из потока следующий символ: vector <pair<double,double>> v; ifstream fin2("2.txt"); char a;...

Считать символы из потока ввода вместе с пробелами - C++
Всем привет. есть перегрузка ввода istream &operator>> (istream &input,book &b) { cout<<"Name of the book - ";input>>b.name; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
16.08.2012, 13:50     Не могу правильно считать данные из потока #2
Roukff, В случае такого ввода лучше просто считывать строку и далее уже ее парсить.
А что значит грамотно разобрать? Ну просто разберите дробь, это же не сложно.
-=ЮрА=-
Заблокирован
Автор FAQ
16.08.2012, 15:43     Не могу правильно считать данные из потока #3
Цитата Сообщение от Roukff Посмотреть сообщение
scanf("%lld %lld/%lld", one, two, three);
- вот так попробуй
C
1
scanf("%lf %lf/%lf", &one, &two, &three);
Также оговори, возможен ли такой ввод
только 1
только 1/4
Добавлено через 6 минут
Собственно вот наглядный пример
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
 
char sInput1[] = "1 1/4";
char sInput2[] = "1/4";
 
int main()
{
    double one, two, three;
    printf("Input : %s\n",sInput1);
    if(sscanf(sInput1,"%lf %lf/%lf",&one, &two, &three) == 3)
        printf("params : %lf %lf/%lf\n",one, two, three);
    else
        printf("Incorrect input\n");
    printf("Input : %s\n",sInput2);
    if(sscanf(sInput2,"%lf %lf/%lf",&one, &two, &three) == 3)
        printf("params : %lf %lf/%lf\n",one, two, three);
    else
        printf("Incorrect input\n");
    return 0;
 
}
Проверка http://codepad.org/RPSkfavK
Input : 1 1/4
params : 1.000000 1.000000/4.000000
Input : 1/4
Incorrect input
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.08.2012, 00:01     Не могу правильно считать данные из потока
Еще ссылки по теме:

Считать с файла числа через итератор потока - C++
Не хочет считывать с файла целые числа, что я делаю не так? #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;iterator&gt; #include...

Считать со стандартного входного потока заданное слово и набор предложений - C++
Написать программу, которая считывает со стандартного входного потока заданное слово и набор предложений, разделителями которых являются...

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

Как правильно считать и записать в файл - C++
Вот такие вот классы, как правильно записать, а затем считать из файла class Base { public: Base(string s=&quot;&quot;):name(s){} virtual...

Как игнорировать ненужные данные из потока? - C++
Формат входной строки должен быть таким: Слово нужное_нам_число Например: windows 2012 Нужно из strStream потока присвоить...

Считать данные с бд - C++
есть база данных, в столбце одно есть цены на товар. я на форму ставлю чекбокс и когда чекбокс включен цена должна увеличится на 10% а...


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

Или воспользуйтесь поиском по форуму:
Roukff
1 / 1 / 0
Регистрация: 05.06.2011
Сообщений: 35
17.08.2012, 00:01  [ТС]     Не могу правильно считать данные из потока #4
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
#include <stdio.h>
char sInput1[] = "1 1/4";
char sInput2[] = "1/4";
int main()
{
* * double one, two, three;
* * printf("Input : %s\n",sInput1);
* * if(sscanf(sInput1,"%lf %lf/%lf",&one, &two, &three) == 3)
* * * * printf("params : %lf %lf/%lf\n",one, two, three);
* * else
* * * * printf("Incorrect input\n");
* * printf("Input : %s\n",sInput2);
* * if(sscanf(sInput2,"%lf %lf/%lf",&one, &two, &three) == 3)
* * * * printf("params : %lf %lf/%lf\n",one, two, three);
* * else
* * * * printf("Incorrect input\n");
* * return 0;
}
То, что доктор прописал! Мой косяк: не знал о такой крутой функции, как sscanf(); - она-то меня и выручила! Ура!
Yandex
Объявления
17.08.2012, 00:01     Не могу правильно считать данные из потока
Ответ Создать тему
Опции темы

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