首页 > 解决方案 > 在我使用 C 的控制台游戏中,打印的是 '90' 而不是 '9'

问题描述

我在 Visual Studio 2019 上使用 C 制作控制台游戏。我制作了一个打印变量的代码。

仅当值大于 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);
    }
}

标签: cwindowsconsole

解决方案


a这是因为如果变成一位数,您不会覆盖第二个数字。您需要覆盖所有先前写入的数字,例如通过设置字段宽度:

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

推荐阅读