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

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

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

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

16.08.2012, 13:46. Просмотров 746. Ответов 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);
Но здесь тоже проблема: этот код проходит автоматизированную проверку и ей надо, чтоб это число было введено в одну строку и скорее всего с этим-то проблема и есть. Помогите правильно считать данные!! Если предлагаете в строку считать, то помогите эту строку грамотно разобрать! =)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.08.2012, 13:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не могу правильно считать данные из потока (C++):

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

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

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

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

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

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

3
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
16.08.2012, 13:50 #2
Roukff, В случае такого ввода лучше просто считывать строку и далее уже ее парсить.
А что значит грамотно разобрать? Ну просто разберите дробь, это же не сложно.
0
-=ЮрА=-
Заблокирован
Автор 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
1
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(); - она-то меня и выручила! Ура!
0
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++
Всем привет. есть перегрузка ввода istream &amp;operator&gt;&gt; (istream &amp;input,book &amp;b) { cout&lt;&lt;&quot;Name of the book - &quot;;input&gt;&gt;b.name; ...

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

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


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

Или воспользуйтесь поиском по форуму:
4
Yandex
Объявления
17.08.2012, 00:01
Ответ Создать тему
Опции темы

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