Кастинг не работает (после обновления gcc?) - PullRequest
0 голосов
/ 05 мая 2018

Я не могу понять, почему следующий код не работает.

#include <iostream>
using namespace std;

int main() {
    int i = 5;
    char a = i;
    char b = (char)i;
    cout << a << endl;
    cout << b << endl;
    return 0;
}

Я не получаю никакой информации, когда запускаю его из терминала (g ++ "./test.cpp" -std = c ++ 17 -Wall -O3 -o "./test" && "./test ") и когда я запускаю его в возвышенном тексте 3, я получаю ( output )

Я недавно обновил свой gcc до 8.0.1 и работаю с ubuntu ( подробнее ), но у меня тоже есть проблема с gcc 5, установленным рядом с ним. (однако GCC 5 был переустановлен по некоторым причинам). Не знаю, связано ли это с этим ...

Кто-то знает, почему этот нелепый простой актерский состав не работает? Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Вы просите компьютер напечатать 5-й символ в его таблице символов. Это управляющий символ, , в частности ENQ . Управляющие символы редко имеют видимый вывод; у них есть другое значение, которое может быть или не быть полезным (некоторые, такие как символы № 10 и № 13, весьма полезны).

Если вы хотите, чтобы символ печатал цифру 5, вы должны либо использовать '5', либо вы можете привести значение '0'+5 (которое в ASCII будет 48 + 5 ).

Возможно, вы не понимаете, что делает актерский состав. cast не обязательно преобразует данные так, как вы обычно думаете. Некоторые приведения (например, от int до float; некоторые - нет. Используемые приведения просто интерпретируют данные как другой тип: на уровне машины это просто числовое значение 5. Приведение к char не меняет данные с этого числа, это просто означает, что система вывода рассматривает их как 5-й символ в таблице ASCII вместо целого числа 5. Если вы хотите преобразовать их в символ 5, тогда вы обычно приходится выполнять какую-то работу (например, то, что я указал выше).

0 голосов
/ 05 мая 2018

Это работает, просто ваша консоль не имеет ничего для ваших глаз, посмотрите на код:

int main() {
    int i = 5;
    char a = i;
    char b = (char)i;
    cout << a << endl;
    cout << b << endl;

    char a2 = i+48;
    char b2 = (char)i+48;

    cout << a2 << endl;
    cout << b2 << endl;
    return 0;
}

И результат: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...