В моей консольной игре с C вместо «9» печатается «90» - PullRequest
1 голос
/ 27 февраля 2020

Я делал консольную игру с C в Visual Studio 2019. Я создал код, который печатает переменную.

Это работает только тогда, когда значение больше 10.

Если значение переменной меньше 10, оно печатает 10 вместо 1, 2 вместо 20 ... 9 вместо 90 .

Я понятия не имею, как решить эту проблему.

Вот мой код

#include<stdio.h>
#include<windows.h>

int a =20;

void gotoxy(int x, int y) { //cursor goes to x, y
    COORD CursorPosition = { x,y };
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), CursorPosition);
}

void HideCursor() {
    HANDLE consoleHandle = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_CURSOR_INFO info;
    info.dwSize = 100;
    info.bVisible = FALSE;
    SetConsoleCursorInfo(consoleHandle, &info);
}

void count() {
    char c = _getch();
    switch (c) {
    case 'p': a++; break;
    case 'o': a--; break;
    }
}

int main() {
    system("mode con cols=10 lines=10");
    system("cls");
    HideCursor();
    while (1) {
        gotoxy(5, 5);
        count();
        printf("%d", a);
    }
}

1 Ответ

5 голосов
/ 27 февраля 2020

Это потому, что вы не перезаписываете второе число git, если a становится числом с одним ди git. Вам необходимо перезаписать все ранее записанные цифры, например, установив ширину поля:

// Print right-justified numbers, with empty spaces for one or two digit numbers
printf("%3d", a);
...