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

Преобразование +'0' - C++

Восстановить пароль Регистрация
 
IvanInanovich
0 / 0 / 0
Регистрация: 03.01.2013
Сообщений: 113
30.05.2013, 18:37     Преобразование +'0' #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
#include <iostream>
using namespace std;
 
template<class T>
 T amax( T *arg, int size)
{
    T temp = 0;
 
    for(int k = 0; k < size; k++)
        if(temp < arg[k])
            temp = arg[k];
    return temp;
}
 
int main()
{
   const int Max = 5;
    int iar[Max] = {1,3,54,65,777};
 
        cout << "\niar max = " << amax(iar,Max) << endl;
 
        float far[Max] = {1.3,3.34,543.4,651.233,777.34};
 
        cout << "\nfar max = " << amax(far,Max) << endl;
 
         char car[Max] = {1,3,5,6,7};
 
        cout << "\ncar max = " << amax(car,Max)+'0' << endl; // вот тут нуль
return 0;
}
Вопрос в следующем, почему в последней строке, если мы пытаемся char преобразовать в int с помощью нуля (+'0') то в данная программа показывает не верный результат (число 55) ? Если же мы преобразуем вот таким вот образом:
C++
1
cout << "\ncar max = " << (int)amax(car,Max) << endl;
то выводится 7 т.е. правильный результат.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.05.2013, 18:37     Преобразование +'0'
Посмотрите здесь:

C++ преобразование матрицы
C++ Преобразование букв
C++ преобразование типов
C++ преобразование
C++ Преобразование С++
C++ Преобразование
Преобразование C++
C++ Преобразование классов

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
yleart
 Аватар для yleart
60 / 45 / 1
Регистрация: 07.10.2011
Сообщений: 139
30.05.2013, 18:44     Преобразование +'0' #2
Потому что вы создаете массив не символов 1,3,5,6,7 , а значений. Если было бы так:
C++
1
char car[5] = {'1', '3', '5', '6', '7'};
то работало как вы хотели бы, а
C++
1
cout << "\ncar max = " << (int)amax(car,Max) << endl;
наоборот, не правильно
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
30.05.2013, 18:45     Преобразование +'0' #3
потому что функция amax(car,Max) имеет результат int, стало быть результат выражения int, код символа '0' = 48. 48 + 7 будет 55, все верно.
В чем он неверный то?
Yandex
Объявления
30.05.2013, 18:45     Преобразование +'0'
Ответ Создать тему
Опции темы

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