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

перевод строки в число, определить делится ли оно на 4 - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вычислить знгачение выражения при заданных условиях. http://www.cyberforum.ru/cpp-beginners/thread902561.html
Не могу справиться с задачкой, помогите пожалуйста :)
C++ Как убрать искажения в raycasting алгоритме при обзоре по OY Доброго времени суток. Пишу 2.5D игру , где видимость трехмерного пространства создается с помощью алгоритма raycasting (на нем работает Doom , Doom II , Duke Nuknem 3D , Hexen). Вопрос такой : можно сделать нормальный обзор по оси OY , что бы не было искажения объектов (например когда в Hexen так делаешь , то объекты выгягиваются к верху а снизу сужаются)? Я делаю игру без движка , знаю что... http://www.cyberforum.ru/cpp-beginners/thread902560.html
C++ Структура "Банковский кредит"
Структура «Банковский кредит» с полями "ФИО клиента", "сумма", "срок", "процент". Бизнес-функция: вывод суммы, которую ежемесячно должен выплачивать клиент.
C++ Анализ
Помогите пожалуйста написать анализ по программе для ргр. По введенному номеру музыкальной ноты вывести ее словесное наименование. Например, 3 – ми. class Note { static const char* note; public: static const char* GetNote(int idx) { return (idx <= 8) ? note : ""; }
C++ Как модернизировать функцию rand, что бы числа генерировались на заданом промежутке от a до b ? http://www.cyberforum.ru/cpp-beginners/thread902527.html
Как модернизировать функцию rand, что бы числа генерировались на заданом промежутке от a до b ?
C++ Некоторые программы, которые сама написала Было у меня задание написать класс, в котором нужно перевести градусы в радианы. Прога ниже. #include<iostream> #include<conio.h> using namespace std; double pi=3.14159265; class gradus {double m; public:gradus(double a) {m=a;} friend double perevod(gradus ob); подробнее

Показать сообщение отдельно
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
16.06.2013, 16:44     перевод строки в число, определить делится ли оно на 4
Цитата Сообщение от nighthigt Посмотреть сообщение
нужно определить является ли текст, в который входят буквы и цифры десятичной записью числа кратного 4
В таком случае не совсем понятно, чем вас не устроил варинт с использованием strtol. Если хотите наиболее простой вариант, используйте sscanf
C++
1
2
3
4
5
6
7
8
9
int value;
if(sscanf(txt, "%d", &value) == 1)
{
    // проверяем делится ли value на 4
}
else
{
    // выводим сообщение об ошибке
}
Но, в таком случае строки вида 123abc тоже будут считаться корректными(123 конвертируется, abc отбрасывается).

Добавлено через 14 минут
Вот рабочий вариант с использованием функции strtol
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
66
#include <cerrno>
#include <cstdlib>
#include <climits>
#include <iostream>
 
// результат возвращаемый функцией str_to_int
enum CnvrtResult
{
    cnvrtSuccess,         // корректное завершение функции
    cnvrtInvalidArgument, // ошибка: строка не является целым
    cnvrtOutOfRange       // ошибка: значение выходит за допустимый диапазон
};
 
CnvrtResult str_to_int(int& dest, const char* src)
{
    // строка пуста
    if(*src == '\0')
        return cnvrtInvalidArgument;
 
    errno = 0;
    char* endptr = NULL;
    long int value = std::strtol(src, &endptr, 10);
 
    // значение из src не помещается в тип int
    // (последние два условия на случай, если sizeof(int) != sizeof(long int))
    if(errno == ERANGE || value < INT_MIN || value > INT_MAX)
        return cnvrtOutOfRange;
 
    // не удалось дойти до конца строки(встретились недопустимые для целого символы)
    if(*endptr != '\0')
        return cnvrtInvalidArgument;
 
    dest = value;
 
    return cnvrtSuccess;
}
 
int main()
{
    using std::cin;
    using std::cout;
 
    char str[40];
    cout << "vvedite stroku: ";
    cin.getline(str, sizeof(str));
 
    int value;
    switch(str_to_int(value, str))
    {
        case cnvrtInvalidArgument:
            cout << "oshibka: vvedyonnoye znacheniye ne yavlyaetsya zapisyu celogo chisla\n";
            break;
 
        case cnvrtOutOfRange:
            cout << "oshibka: vvedyonnoye znacheniye vihodit za dopustimiy diapazon tipa int ["
                 << INT_MIN << "..." << INT_MAX << "]\n";
            break;
 
        case cnvrtSuccess:
            cout << "delitsya na 4 bez ostatka: ";
            if(value % 4 == 0)
                cout << "da\n";
            else
                cout << "net\n";
    }
}
 
Текущее время: 06:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru