Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.09.2018, 20:12   #1
Artem_856
Пользователь
 
Регистрация: 20.09.2018
Сообщений: 11
По умолчанию Перевод одинадцатиричной системы в десятичную

Подскажите, пожалуйста. Программа переводит чиста введённые в функцию "strol" из одинадцатиричной системы в десятичную. Нужно сделать так, чтобы можно было вводить число прямо из консоли.
Код:
#include <stdio.h>
#include <stdlib.h>
 
int main(void) {
    char * p;
    
    printf("%ld\n", strtol("1a", &p, 11));
    
    return 0;
}
Artem_856 вне форума Ответить с цитированием
Старый 28.09.2018, 07:13   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

scanf, cin ...
p51x вне форума Ответить с цитированием
Старый 28.09.2018, 08:54   #3
Artem_856
Пользователь
 
Регистрация: 20.09.2018
Сообщений: 11
По умолчанию Как работает программа

Можете объяснить подробно, как работает программу. Каждую строку, если не сложно.

Код:
#include <stdbool.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>

bool is_real(const char* num) {
    return strstr(num, ".");
}

int to_int(const char* str, unsigned Base) {
   int mult = 1, result = 0;

   for(size_t i = strlen(str); i>0; --i) {
       if(str[i-1]>='0' && str[i-1]<='9')
           result += mult*(str[i-1]-'0');
       else
           result += mult*(toupper(str[i-1])-'A');
       mult*=Base;

   }
   return result;
}

typedef struct {
    int first;
    int second;
} Pair;

Pair to_real(char* str, size_t Base)
{
    const size_t dot_pos = strstr(str, ".") - str;
    str[dot_pos] = 0;
    const int first_part = to_int(str, Base);
    const int second_part = to_int(str + dot_pos + 1, Base);
    str[dot_pos] = '.';
    Pair p = {first_part, second_part};
    return p;
}

int main()
{
    size_t BUF_SIZE = 4096;
    char in[BUF_SIZE];
    scanf("%s", in);
    printf("Answer is ");
    if(!is_real(in))
        printf("%d", to_int(in, 11));
    else
    {
        Pair real = to_real(in, 11);
        printf("%d.%d",real.first, real.second);
    }
}
Artem_856 вне форума Ответить с цитированием
Старый 30.09.2018, 03:21   #4
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Цитата:
Сообщение от Artem_856 Посмотреть сообщение
#include <stdbool.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
Взяли мою программу и испортили

Цитата:
Сообщение от Artem_856 Посмотреть сообщение
typedef struct { int first; int second; } Pair;
Того, кто так засоряет глобальное пространство имён, надо бить палками.

Артём, зачем ты плодишь темы с моим ответом?
http://www.programmersforum.ru/showthread.php?t=322797
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод одинадцатиричной системы чисел в десятичную Artem_856 Общие вопросы C/C++ 15 22.09.2018 00:07
Перевод из шестнадцатеричной системы в десятичную AnderoN Общие вопросы Delphi 3 07.05.2011 19:55
си++ перевод числа из двоичной системы в десятичную. Bonne Помощь студентам 1 13.04.2010 22:07
Перевод числа из двоичной системы в десятичную С++ kontroller Помощь студентам 2 15.02.2010 20:39