C - 多条 slider

标签 c

我有一个程序,其中有多个 slider ,可以使用 A 和 D 键可增加/减少值,W 和 S 键可选择要控制的栏。一切正常,更改值,甚至控制不同的 slider ,但我无法更改要控制的 slider 。我有一个名为“BarChosen”的变量,用于使用它所在的任何 Bar 的数组,因此如果 BarChosen = 0 那么您可以控制 Bar 0。

打印条形

void BarValues(int Bar, int BarLeft,char UserInput) {
for (int i = 0; i < Bar; i++) {
    printf("|");
}

for (int i = 0; i < BarLeft; i++) {
    printf(".");
}

printf(" - %d\n", Bar);

}

控制

void UpdateBar(char UserInput,int BarChosen,int Bar[3], int BarLeft[3]) {
if (UserInput == 'a' || UserInput == 'A') {
    if (Bar[BarChosen] <= 0) {

    }
    else {
        Bar[BarChosen]--;
        BarLeft[BarChosen]++;
    }
}

else if (UserInput == 'd' || UserInput == 'D') {
    if (Bar[BarChosen] >= 30) {

    }
    else {
        Bar[BarChosen]++;
        BarLeft[BarChosen]--;
    }
}

else if (UserInput == 'w' || UserInput == 'W') {
    if (BarChosen <= 0) {

    }
    else {
        BarChosen--;
    }

}

else if (UserInput == 's' || UserInput == 'S') {
    if (BarChosen >= 3) {

    }
    else {
        BarChosen++;
    }

  }
}

主要方法

int main(void)
{
char UserInput = '0';
int BarLeft[3] = { 30, 20, 10 };
int Bar[3] = { 0, 10, 20 };
int i = 0;
int BarChosen = 0;

do {
    system("cls");
    printf("Bar Chosen: %d\n", BarChosen);
    for (i = 0; i < 3; i++)
    {
        BarValues(Bar[i], BarLeft[i], UserInput);
    }
    UserInput = getch();
    UpdateBar(UserInput, BarChosen, Bar, BarLeft);

} while (1);


//Stall
getch();
return 0;
}

我的问题是,BarChosen 没有改变。我已经测试了打印和检查它们是否已激活的功能,它们是激活的,但 BarChosen 没有改变并保持在 0

最佳答案

C 执行“按值调用”,因此当您从 main() 调用 UpdateBar() 时,您正在初始化 UpdateBar() 中名为 BarChosen 的局部变量。

最简单的更改是让 UpdateBar() 返回 BarChosen 的新值,并从 main 中调用它

BarChosen = UpdateBar(UserInput, BarChosen, Bar, BarLeft);

关于C - 多条 slider ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50241812/

相关文章:

c - C中的节点和链表语法

c - 带链表的段错误

c - 在 C 中查找特定模式并读取该模式后面的数字

c - 为什么这个素数C程序是错误的?

c - 忽略 C 函数中的参数

c++ - 用非零值初始化 double 组 (blas)

c - 多个结构变量的值无意中相同

c - 如何在 C 中使用按位运算符判断一个数字是否等于另一个数字

c - sbrk(0) 和 sbrk(size) 都返回相同的地址

c - 写的字符比 malloced 多。为什么它不会失败?