Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/47: Рейтинг темы: голосов - 47, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 07.04.2020
Сообщений: 5

Тип данных char как работать как с числом?

11.04.2020, 10:56. Показов 10335. Ответов 14

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
int main(int argc, char **argv)
{
    signed char x;  //-127...127;
    unsigned char y;  //0...255;
    printf("vvedi signed char x and unsigned char y ");
    scanf("%s %s",&x,&y);
    
    
    printf("%d",x);
    return 0;
}
это программу мне нужно будет дополнить и работать с char как с числом, но я сейчас вижу странным вывод ввожу 13 13 а получаю 49.как сделать что бы char воспринимал значения как числа а не как символ?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.04.2020, 10:56
Ответы с готовыми решениями:

Как заставить работать перечисляемый тип данных?
Добрый день уважаемые господа программисты! 1)Не могли бы вы найти где ошибка в коде? 2)Где можно поподробней почитать про...

Как в стандартную функцию WinAPI передать тип данных std::string вместо char*?
Помогите пожалуйста. Мне надо в GetDlgItemText передать std::string. Как это можно сделать? Вижуалка говорит, что нельзя преобразовать...

Как создать функцию, которая определит с каким типом данных ей работать и подстроиться под этот тип?
например если мне нужно создать шаблон функции сортировки одномерных массивов произвольного типа)))

14
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
11.04.2020, 11:32
Ввести char как число не получится. Можно только арифметические.
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
11.04.2020, 11:37
del
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,532
Записей в блоге: 1
11.04.2020, 11:56
nmcf, в смысле не получится? Вводим букву, выводим её ASCII код
единственно, что действительно неверно делать scanf%s - нам нужен scanf %с для ввода одной буквы, не будешь же ты вводить буквально в строку 1...2...6 нужно вводить один символ, коответствующий этому ASCII
Другой косяк это отсутствие приведения типов в printf("%d",x);
Икс это 1 байт, а printf %d будет читать из списка аргументов 4 или сколько там в интах байтов. Это тоже неверно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
int main(int argc, char **argv)
{
    signed char x;  //-127...127;
    unsigned char y;  //0...255;
    printf("vvedi signed char x and unsigned char y ");
    scanf("%с %с",&x,&y);
    
    
    printf("%d %d",(int)x, (int)y);
    return 0;
}
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
11.04.2020, 11:59
Kuzia domovenok, char как символ интерпретируется при вводе. Нельзя ввести "12" и получить char c = 12.
0
3 / 2 / 1
Регистрация: 10.04.2020
Сообщений: 13
11.04.2020, 12:06
Нельзя в char записывать числа: он их воспринимает как символы, к тому же, в char помещается только один символ, то есть, вводить в char, например, 12 или ab - это ошибка

НО!

Чтобы не парится с ASCII, можно просто записать число в string и и помощью функции atoi (библиотека stdlib.h, но можно использовать и bits/stdc++.h)

Код будет примерно такой:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <stdlib.h> // можно использовать bits/stdc++.h , если она у вас есть
using namespace std;
int main()
{
string s;
cin>>s;
int n;
n = atoi(s.c_str());
return 0;
}
Или вам обязательно нужно использовать char?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,221
11.04.2020, 12:13
Лучший ответ Сообщение было отмечено Lachelovek как решение

Решение

Цитата Сообщение от Lachelovek Посмотреть сообщение
это программу мне нужно будет дополнить и работать с char как с числом, но я сейчас вижу странным вывод ввожу 13 13 а получаю 49.как сделать что бы char воспринимал значения как числа а не как символ?
Так вы же сами попросили воспринимать как символ. Причем не просто как символ, а как строку: формат %s. Тем самым вы рушите память программы и все летит враздрай.

Зачем вы использовали %s в scanf?

Для чтения десятичных целых значений в scanf предназначены форматы %d и %u. Вот их и используйте. Только нужно будет снабдить из правильным модификатором длины - hh

C++
1
scanf("%hhd%hhu", &x, &y);
Цитата Сообщение от nmcf Посмотреть сообщение
Ввести char как число не получится. Можно только арифметические.
Что за ерунда? И с каких это пор char перестал быть арифметическим типом?
1
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
11.04.2020, 12:14
Можно ввести только как цифру, т. е. только как 1 символ.
Цитата Сообщение от BuLatypov Посмотреть сообщение
Нельзя в char записывать числа: он их воспринимает как символы
Это целочисленный тип. Т. е. он воспринимает не символы, а числа: численные коды символов.
Цитата Сообщение от BuLatypov Посмотреть сообщение
нельзя вводить в char, например, 12
Да ну.
Цитата Сообщение от BuLatypov Посмотреть сообщение
ab - это ошибка
Ну да.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
11.04.2020, 12:16
TheCalligrapher, ну продемонстрируй как в char непосредственно ввести число диапазона -127...128.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,221
11.04.2020, 12:18
Цитата Сообщение от BuLatypov Посмотреть сообщение
Нельзя в char записывать числа: он их воспринимает как символы,
Не надо нести чепуху. [signed/unsigned] char ничего никогда никак не "воспринимает". Это обычный малый целочисленный тип, почти ничем не выделяющийся среди других малых целочисленный типов.

"Воспринимать как символы" содержимое char можете только вы или стандартные функции (по вашему приказу). Точно так же вы можете "воспринимать" содержимое int как "символы".

Добавлено через 1 минуту
Цитата Сообщение от nmcf Посмотреть сообщение
TheCalligrapher, ну продемонстрируй как в char непосредственно ввести число диапазона -127...128.
Во-первых, пожалуйста

C++
1
char a = 42;
Во-вторых, я уже показал выше, как это делается через scanf.
2
3 / 2 / 1
Регистрация: 10.04.2020
Сообщений: 13
11.04.2020, 12:22
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Во-первых, пожалуйста
Нет, это так не работает. Программа, например, при a = 42, выведет *
Вы задаете код элемента, но автору темы нужно задать число через char
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,221
11.04.2020, 12:25
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
диапазона -127...128.
Во-первых, -128..+127. Во-вторых, это - для signed char, а не для char.

Добавлено через 1 минуту
Цитата Сообщение от BuLatypov Посмотреть сообщение
Нет, это так не работает. Программа, например, при a = 42, выведет *
Что за бред вы пишете? "Выведет"? Кто "выведет"?

Программа в ответ на

C++
1
char a = 42;
ничего не выведет. Она просто занесет целое значение 42 в переменную a целочисленного типа char.

А "выводить" что-то потом будете вы сами. И как вы сами попросите - так это значение и выведется

C++
1
printf("%d\n", a);
Получаем вывод 42. Какая еще *?
0
3 / 2 / 1
Регистрация: 10.04.2020
Сообщений: 13
11.04.2020, 12:28
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Что за бред вы пишете?
Я не писал про именно ваш код, я просто использовал cout
Согласен, я немного тупанул и можно было выводить
Ваша правда
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,221
11.04.2020, 12:32
Цитата Сообщение от BuLatypov Посмотреть сообщение
Я не писал про именно ваш код, я просто использовал cout
То, что делает cout - это собственные свойства именно cout, т.е. класса std::ostream. Особенности поведения класса std::ostream не имеют никакого отношения к свойствам типа char. Не надо приписывать типу char то, что не имеет к нему никакого отношения.

Как я сказал выше, char - это обыкновенный целочисленный тип, почти в точности такой же как short, int, long и т.п.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
11.04.2020, 15:18
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
И с каких это пор char перестал быть арифметическим типом?
Не перестал. Я и написал, что арифметические можно выполнить, а ввести не получится. Про hhd впервые слышу.
Для cin что-то подобное есть?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.04.2020, 15:18
Помогаю со студенческими работами здесь

Как сделать тип данных или уже есть такой тип данных который состоит из всех печатыемых символов?
Как сделать тип данных или уже есть такой тип данных который состоит из всех печатыемых символов? Если есть то как он называется ?

как работать с char*
вопщем, есть задание: создайте класс osoba, конструктору которого передаются значения: фамилия, имя (char*), зарплата (double). Нужна...

Как работать с char ?
Здраствуйте задали домашку надо . что бы char текст вывелся виле числа а также могут быть примеры. Типа char v1 = &quot;3+2-1&quot;; ну...

Как работать с типом Char
суть такова. Есть тип Char, он занимает один байт = 8 бит, так вот, нужно обращаться к каждому биту этого Char.

как переобразовать тип переменной char в
#include &lt;iostream&gt; #include &quot;main.h&quot; #include &lt;conio.h&gt; int main(){ using namespace std; setlocale(LC_ALL , &quot;RUSSIAn&quot;);//язик...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru