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

Ошибка в sscanf - C++

Восстановить пароль Регистрация
 
sweaz
0 / 0 / 0
Регистрация: 05.10.2015
Сообщений: 7
05.10.2015, 13:12     Ошибка в sscanf #1
Доброго времени суток.
Возникла ошибка в следующем коде:


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <iostream>
#include <string.h>
#include <ctype.h>
#include <math.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
 
using namespace std;
int HEX_TO_OCT(char st[10])
{
    int i,s,k,p;
    s=0;
    p=strlen(st)-1;
    for (i=0; st[i]!='\0'; i++)
    {
        switch (toupper(st[i]))
        {
        case 'A': k=10; break;
        case 'B': k=11; break;
        case 'C': k=12; break;
        case 'D': k=13; break;
        case 'E': k=14; break;
        case 'F': k=15; break;
        case '1': k=1; break;
        case '2': k=2; break;
        case '3': k=3; break;
        case '4': k=4; break;
        case '5': k=5; break;
        case '6': k=6; break;
        case '7': k=7; break;
        case '8': k=8; break;
        case '9': k=9; break;
        case '0': k=0; break;
        }
        s=s+k*pow(16,p);
        p--;
    }
    cout<< s << endl;
 
    char a[10],b[10];
 
    sscanf(s,"%s.%s",&a,&b);   // Пытаюсь перевести дробные числа.
    itoa (a*,q,8);                      //
    itoa (b*,w,8);                      // 
    cout<<q<<'.'<<w<<endl;    //
 
 
    int d;
    cout<<"Vvedite v 8 CC: " << endl;
    cin>>oct>>d;
    cout<< s-d << endl;
 
 return 0;
}
 
int main()
{
    char s[10];
    cout<<"Please, enter string: \n";
    cin>>s;
    HEX_TO_OCT(a);
    HEX_TO_OCT(b);
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2015, 13:12     Ошибка в sscanf
Посмотрите здесь:

функция sscanf C++ Linux
C++ Builder sscanf ошибка чтения с памяти
sscanf и DynamicArray<T> C++ Builder
Работа sscanf C++
sscanf C (СИ)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MansMI
1046 / 843 / 205
Регистрация: 08.01.2012
Сообщений: 3,020
05.10.2015, 13:42     Ошибка в sscanf #2
не спец в инновациях С++, но в какой версии такое допустимо?
itoa (a*,q,8); //
itoa (b*,w,8);
Mesteriis
 Аватар для Mesteriis
371 / 154 / 40
Регистрация: 08.08.2015
Сообщений: 1,059
Завершенные тесты: 1
05.10.2015, 13:56     Ошибка в sscanf #3
MansMI,не ев какой, тут проще сказать что правильно
sweaz, Кинь условие задачи

Добавлено через 2 минуты
Цитата Сообщение от sweaz Посмотреть сообщение
char s[10];
* * cout<<"Please, enter string: \n";
* * cin>>s;
* * HEX_TO_OCT(a);
* * HEX_TO_OCT(b);
}
sweaz, Что ты этим хотел добиться?

Ты просишь вести s? А сам производишь действия над а и б, это как?
sweaz
0 / 0 / 0
Регистрация: 05.10.2015
Сообщений: 7
05.10.2015, 17:53  [ТС]     Ошибка в sscanf #4
Перевести из 16 в 8 СС ( в т.ч дробные числа).
Я пытаюсь ввести s, передать значение у "s" (целой и дробной части) переменным "a" и "b".

MansMI,
Да, ошибся с указателями...
nmcf
4257 / 3688 / 1243
Регистрация: 14.04.2014
Сообщений: 14,440
05.10.2015, 18:25     Ошибка в sscanf #5
Здесь без амперсандов должно быть.
C++
1
sscanf(s,"%s.%s", a, b);
sweaz
0 / 0 / 0
Регистрация: 05.10.2015
Сообщений: 7
05.10.2015, 18:48  [ТС]     Ошибка в sscanf #6
nmcf, Спасибо.
Но компилятор выдает следующие ошибки:
main.cpp||In function 'int HEX_TO_OCT(char*)':|
main.cpp|43|error: invalid conversion from 'int' to 'const char*' [-fpermissive]|
\include\stdio.h|348|error: initializing argument 1 of 'int sscanf(const char*, const char*, ...)' [-fpermissive]|

Вот переделал немного код. Не подскажите, правильно я делаю? =)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <iostream>
#include <string.h>
#include <ctype.h>
#include <math.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
 
using namespace std;
int HEX_TO_OCT(char st[10])
{
    char q[10],w[10];
    int i,s,k,p,a,b;
    s=0;
    p=strlen(st)-1;
    for (i=0; st[i]!='\0'; i++)
    {
        switch (toupper(st[i]))
        {
        case 'A': k=10; break;
        case 'B': k=11; break;
        case 'C': k=12; break;
        case 'D': k=13; break;
        case 'E': k=14; break;
        case 'F': k=15; break;
        case '1': k=1; break;
        case '2': k=2; break;
        case '3': k=3; break;
        case '4': k=4; break;
        case '5': k=5; break;
        case '6': k=6; break;
        case '7': k=7; break;
        case '8': k=8; break;
        case '9': k=9; break;
        case '0': k=0; break;
        }
        s=s+k*pow(16,p);
        p--;
    }
    cout<< s << endl;
 
 
    sscanf(s,"%s.%s",a,b);
    itoa (a,q,8);                      //
    itoa (b,w,8);                      //
    cout<<q<<'.'<<w<<endl;
 
 
    int d;
    cout<<"Vvedite v 8 CC: " << endl;
    cin>>oct>>d;
    cout<< s-d << endl;
 
 return 0;
}
 
int main()
{
    char q[10],w[10];
    char s[10];
    cout<<"Please, enter string: \n";
    cin>>s;
    HEX_TO_OCT(q);
    HEX_TO_OCT(w);
}
Знаю, я криворукий новичок, но все же =)
nmcf
4257 / 3688 / 1243
Регистрация: 14.04.2014
Сообщений: 14,440
05.10.2015, 19:04     Ошибка в sscanf #7
1. Не следует использовать pow() в целочисленной арифметике.
2. sscanf() - это ввод из строки (первый параметр) в указанные форматы. У тебя s - число, для чего тут sscanf()?
sweaz
0 / 0 / 0
Регистрация: 05.10.2015
Сообщений: 7
05.10.2015, 19:11  [ТС]     Ошибка в sscanf #8
nmcf,
Вы правы, не к чему...

Проблема в том, что я сначала перевожу из 16 СС в 10; далее - мне нужно разделить число в 10 СС на целую часть и дробную и перевести их в 8 СС. А я, к сожалению, не понимаю, как это сделать...
nmcf
4257 / 3688 / 1243
Регистрация: 14.04.2014
Сообщений: 14,440
05.10.2015, 19:14     Ошибка в sscanf #9
А откуда возьмётся дробная часть у целого числа?
sweaz
0 / 0 / 0
Регистрация: 05.10.2015
Сообщений: 7
05.10.2015, 19:17  [ТС]     Ошибка в sscanf #10
nmcf,
Черт... Таки, да...
Надо было с самого начала разделять число на целое и дробное, но я не понимаю, как это сделать с 16 СС в 10...
nmcf
4257 / 3688 / 1243
Регистрация: 14.04.2014
Сообщений: 14,440
05.10.2015, 19:44     Ошибка в sscanf #11
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
int HEX_TO_OCT(char st[10])
{
    double v = 0;
    int k, p = 1;
    char *pnt = strchr(st, '.');
 
    for (char *i = pnt - 1; i >= st; --i, p*= 16)
    {
        switch (toupper(*i))
        {
        case 'A': k=10; break;
        case 'B': k=11; break;
        case 'C': k=12; break;
        case 'D': k=13; break;
        case 'E': k=14; break;
        case 'F': k=15; break;
        case '1': k=1; break;
        case '2': k=2; break;
        case '3': k=3; break;
        case '4': k=4; break;
        case '5': k=5; break;
        case '6': k=6; break;
        case '7': k=7; break;
        case '8': k=8; break;
        case '9': k=9; break;
        case '0': k=0; break;
        }
        v += k * p;
    }
 
    p = 16;
    for (char *i = pnt + 1; *i != '\0'; ++i, p *= 16)
    {
        switch (toupper(*i))
        {
        case 'A': k=10; break;
        case 'B': k=11; break;
        case 'C': k=12; break;
        case 'D': k=13; break;
        case 'E': k=14; break;
        case 'F': k=15; break;
        case '1': k=1; break;
        case '2': k=2; break;
        case '3': k=3; break;
        case '4': k=4; break;
        case '5': k=5; break;
        case '6': k=6; break;
        case '7': k=7; break;
        case '8': k=8; break;
        case '9': k=9; break;
        case '0': k=0; break;
        }
        v += static_cast<double>(k) / p;
    }
 
    // v - число
 
}
sweaz
0 / 0 / 0
Регистрация: 05.10.2015
Сообщений: 7
05.10.2015, 20:03  [ТС]     Ошибка в sscanf #12
nmcf,
Огромное спасибо =)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.10.2015, 20:27     Ошибка в sscanf
Еще ссылки по теме:

C (СИ) По поводу sscanf()
sscanf заборохлил C++
Не работает sscanf C++

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

Или воспользуйтесь поиском по форуму:
nmcf
4257 / 3688 / 1243
Регистрация: 14.04.2014
Сообщений: 14,440
05.10.2015, 20:27     Ошибка в sscanf #13
Это только перевод из шестнадцатеричного строкового представления в вещественный формат. Восьмеричную допиливай дальше.
Yandex
Объявления
05.10.2015, 20:27     Ошибка в sscanf
Ответ Создать тему
Опции темы

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