printf() представляет странные результаты

Мой код - это

#include<stdio.h>
int main(void)
{
    unsigned short height = 0;
    unsigned short width = 0;
    const unsigned short MIN_SIZE = 3;
    printf("Enter the values for the width and the height minimum of %u\n:",
           MIN_SIZE);
    scanf(" %hd %hd", &width, &height);
    if (width < MIN_SIZE)
    {
        printf("The value of width   %u is too small. I set this to %u    \n",
               width, MIN_SIZE);
        width = MIN_SIZE;
    }
    if (height < MIN_SIZE)
    {
        printf
            ("The value of height %u is too small. I setting this to   %u \n"),
            height, MIN_SIZE;
        height = MIN_SIZE;
    }
    for (unsigned int i = 0; i < width; ++i)
    {
        printf("*");
    }
    return 0;
}

Когда я даю ширину 7, например, и высоту 0, printf() представляет странные числа. Можете ли вы объяснить, почему это происходит?

+1
источник поделиться
1 ответ

Это, вероятно, компиляция с предупреждением. Вы должны сохранить закрывающую скобку после предоставления всех аргументов.

printf
            ("The value of height %u is too small. I setting this to   %u \n"),
            height, MIN_SIZE;

Возможно, вы имели в виду:

printf("The value of height %u is too small. I setting this to   %u \n", height, MIN_SIZE);

Основная проблема заключается в том, что мы должны использовать "% hu" для коротких интерзеров. Я бы попробовал это:

#include<stdio.h>
int main(void)
{
    unsigned short height = 0;
    unsigned short width = 0;
    const unsigned short MIN_SIZE = 3;
    int i ;
    printf("Enter the values for the width and the height minimum of %u\n:", MIN_SIZE);
    scanf(" %hu %hu", &width, &height);
    if (width < MIN_SIZE) {
        printf("The value of width   %hu is too small. I set this to %hu    \n", width, MIN_SIZE);
        width = MIN_SIZE;
    }
    if (height < MIN_SIZE) {
        printf("The value of height %hu is too small. I setting this to %hu \n", height, MIN_SIZE);
        height = MIN_SIZE;
    }
    for (i = 0; i < width; ++i)
    {
        printf("*");
    }
    return 0;
}

Было хорошее обсуждение SO на этом: что спецификатор формата для unsigned short int?

+6
источник

Посмотрите другие вопросы по меткам или Задайте вопрос