«Проблема с объединением значений char рядом с int и float в C»

#include <stdio.h>

int main()
{
    int a = 10, b, c = 14, d; 
    float e = 7.586, f, g = 682.546, h;
    char i = 'b', j, k = 'h';

    b = a + c;
    f = e + g;
    j = i + k; 
    printf("the value of a and c of addition is  :%d\n",b);
    printf("the value of e and g of addition is  :%f\n",f);
    printf("the value of a and c of addition is  :%c",j);
}

я пытаюсь объединить значения int,float,character, но я получил только объединенное значение int и символ значения float не могу... кто-нибудь объяснит, как решить эту проблему???

Вам нужно будет сказать, каков ожидаемый результат. Вы говорите о конкатенации, но код говорит о сложении, это две разные вещи.

Guy Incognito 01.09.2024 10:37

Добавление двух char не объединяет их, как если бы они были строками, а выполняет арифметическое сложение их ненадежных значений (здесь в ascii).

wohlstad 01.09.2024 10:41

Знак плюс + означает сложение, а не конкатенацию. 10+14 = 24.

i486 01.09.2024 10:48

Я удалил тег basic, так как он относится к вопросам, касающимся базового языка.

wohlstad 01.09.2024 10:58

В обычных системах, использующих производные кодировки ASCII, 'b' — это значение 0x62 или 98, 'h' — это значение 0x68 или 104. При их добавлении вы сначала получаете 202 или 0xca, который отображается на символ, отличный от ASCII, но фактический символ зависит от кодировки. В обычном коде Latin1 (ISO-8859-1) вы получите 'Ê'.

Serge Ballesta 01.09.2024 11:01

printf("%c%c", я, к)

J. Doe 01.09.2024 18:57
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
6
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Когда вы добавляете символы, вы фактически добавляете коды ASCII в фоновом режиме. Например, когда вы добавляете эти два символа ! (значение ASCII 33) и " (значение ASCII 34), результат равен 67, что соответствует C, если вы посмотрите на его эквивалент в таблице ASCII.

#include <stdio.h>

int main()
{
    int a = 10, b, c = 14, d; 
    float e = 7.586, f, g = 682.546, h;
    char i = '!', j, k = '"';

    b = a + c;
    f = e + g;
    j = i + k; 
    printf("the value of a and c of addition is  :%d\n",b);
    printf("the value of e and g of addition is  :%f\n",f);
    printf("the value of a and c of addition is  :%c\n",j);
}

ВЫХОД:

the value of a and c of addition is  :24
the value of e and g of addition is  :690.132019
the value of a and c of addition is  :C

Если мне нужно объяснить более подробно, что на самом деле делает система при добавлении двух типов char: тип данных char: 8-битный, т. е. 1 байт. Переменная типа char фактически содержит числовой эквивалент (код ASCII) символа ASCII. Например, код ASCII символа «а» равен 97. При добавлении вы добавляете эквиваленты ASCII, что приводит к созданию неожиданных символов.

Эквиваленты ASCII в приведенном вами примере

char i = 'b'; // ASCII 98
char k = 'h'; // ASCII 104
char j = i + k; // j = 98 + 104 = 202

Вы можете увидеть эквивалент ASCII на этой странице.

Значение, соответствующее 202, может не поддерживаться терминалом, с которого вы осуществляете вывод, поэтому вы можете увидеть его как «�». Вы можете понимать эти знаки как недопустимые символы.

Другие вопросы по теме