Почему мы получаем символы ASCII с int i в %c?

#c #for-loop #integer #character #ascii

#c #для цикла #целое число #символ #ascii

Вопрос:

Если вы запустите следующий код, вы получите символы ASCII, даже если мы используем int i within %c внутри цикла for .

 #include <stdio.h>  
    
int main()  
{  
    int i;  
    
    for (i = 0; i <= 255; i  ) /*ASCII values ranges from 0-255*/  
    {  
        printf("ASCII value of character %c = %dn", i, i);  
    }  

    return 0;  
}   
 

Не могли бы вы, пожалуйста, посоветовать, как это возможно, поскольку внутри ASCII есть символы?

Комментарии:

1. Целые числа, меньшие, чем int , автоматически повышаются int при передаче printf переменной функции. Передаваемый вами «символ» является целым числом. Итак, когда вы передавали char переменную, она автоматически повышалась в int любом случае, и это %c ожидаемый тип (поэтому предупреждение не было дано). %c Отличается от %d only тем, что переданное значение отображается на выходе .

2. «внутри ASCII есть символы» — нет, есть целые числа. Они преобразуются в видимые символы устройством вывода. Их визуальная форма (или функция управления) определяется таблицей ASCII.

3. @el_noobito Да, это отлично работает и является отличной демонстрацией того факта, что, по крайней мере, в C символы — это просто маленькие целые числа. Мой вопрос к вам: каким образом вы ожидали, что он завершится неудачей? Вы ожидали получить предупреждение компилятора в виде » format specifies type 'char' but the argument has type 'int' «? Или вы ожидали получить вывод мусора, как вы это делаете, попробуйте что-то вроде printf("%d", 3.14) ?

4. Спасибо за ваши комментарии. Да, я ожидал, что произойдет сбой, когда я его скомпилировал.

Ответ №1:

Каждая переменная в компьютере хранится как двоичная, и ее значение будет зависеть от определенного вами типа. Например, в памяти сохраняется значение 1010 . Если вы приведете его как int , он напечатает -6, если вы приведете его как unsigned int , он напечатает 10. То же самое для int и char . Это зависит от вас

Ответ №2:

printf() — Печать в формате мы используем спецификаторы формата для указания формата данной переменной, спецификатор формата %d для отображения значения целочисленной переменной. %c используется для отображения символов в виде значений ASCII в диапазоне от 0 до 256, %c выведет соответствующий символ символа числа в целом числе i

Комментарии:

1. Хммм «поскольку значения ASCII варьируются от 0-256» -> Я подозреваю, что вы хотите 0-255. Обратите внимание, что ASCII определяет только 0-127,