Почему scanf переопределяет ранее прочитанные переменные без знака в 0? - PullRequest
0 голосов
/ 19 февраля 2019

Я попытался прочитать несколько unsigned char значений через scanf и обнаружил странную ошибку.Во время второго вызова scanf первая переменная unsigned char переопределяется с 0. Но запись scanf(" %hhu", &second); приведет к переопределению второй переменной unsigned char.

#include <stdio.h>

int main(void){
    unsigned char first, second;
    printf("Type first unsigned char variable: ");
    scanf("%hhu", &first);
    printf("first = %hhu\n", first);
    printf("Type second unsigned char variable: ");
    scanf("%hhu", &second);
    printf("first = %hhu\n", first);
    printf("second = %hhu\n", second);
    return 0;
}

Сведения о компиляторе:

gcc-core (gcc-5.1.0-tdm-1-core)

binutils (binutils-2.24-1-mingw32-bin)

mingwrt (mingwrt-3.20-2)-mingw32-dev, mingwrt-3.20-2-mingw32-dll)

w32api (w32api-3.17-2-mingw32-dev)

PS Использование %hu или %u не дает никакихразница.

1 Ответ

0 голосов
/ 19 февраля 2019

Похоже, у вас старая, глючная версия MinGW.

Вместо этого вы можете использовать mingw-w64 .Частично проект был разорван из-за того, что исходный проект не хотел исправлять подобные ошибки, предпочитая обвинять другие стороны.

После использования этого компилятора используйте переключатель компилятора -D__USE_MINGW_ANSI_STDIO, чтобы получить соответствующий режим (к сожалению, он по умолчанию работает в режиме совместимости с Microsoft).

...