Я делаю простое задание из школы, которое включает в себя присвоение двузначного целого числа (<100) переменной char. Я использую Xcode 9.2. Я должен уметь это делать, и Xcode не жалуется. Тем не менее, когда я пытаюсь передать cout переменную в консоль, она возвращает _ вместо переменной

Это в файле .cpp в обычном проекте command line tool.

    char desired_score;
    desired_score = 95;

    cout << "I will work hard to get a grade of " << desired_score << " in this course!\n";

Этот код дает:

I will work hard to get a grade of _ in this course!

Если я присваиваю значение одной цифре, оно выводится просто отлично. Поэтому я смог написать обходной путь, в котором я просто переназначил значение переменной с '9' на '5' и использовал два разных оператора cout.

Кто-нибудь знает, почему это происходит? Это часть домашнего задания, и мой учебник говорит, что это должно быть возможно в C ++. Это особенность Xcode?

Заранее спасибо.

1
MagicGAT 29 Авг 2019 в 02:10

2 ответа

Лучший ответ

Когда вы пишете char в поток, предполагается, что вы хотите написать фактический символ вместо его целочисленного значения. Чтобы вывести целое число, приведите его вместо:

cout << "I will work hard to get a grade of "
     << static_cast<int>(desired_score)
     << " in this course!\n";
4
paddy 28 Авг 2019 в 23:16

Причина, по которой это происходит, заключается в том, что код ascii для _ (подчеркивание) равен 95. Простым решением будет использование либо строки, целого числа или короткого символа вместо символа.

Редактировать: он работает для однозначных цифр, потому что вы использовали символьный литерал, а НЕ потому, что символы также являются байтами в c ++. Это была моя ошибка.

1
Aggs123 29 Авг 2019 в 00:00