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

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

Восстановить пароль Регистрация
 
Roukff
 Аватар для Roukff
1 / 1 / 0
Регистрация: 05.06.2011
Сообщений: 35
16.08.2012, 13:46     Не могу правильно считать данные из потока #1
Привет всем. У меня есть такая задача. На вход поступает дробь вида
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++ можно ли считать следующий символ из потока
C++ не могу считать из потока данные
Считать с потока строку в std::wstring C++
C++ Как игнорировать ненужные данные из потока?
Считать данные с бд C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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
Roukff
 Аватар для 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     Не могу правильно считать данные из потока
Ответ Создать тему
Опции темы

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