C - 多个条形滑块

时间:2018-05-08 20:28:44

标签: c

我有一个程序,它有多个滑块可以使用 A和D键增加/减少值,W和S选择要控制的栏。一切正常,改变价值,甚至控制不同的滑块,但我无法改变控制哪个滑块。我有一个名为“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

2 个答案:

答案 0 :(得分:1)

C&#34;按值&#34;调用,因此当您从main()调用UpdateBar()时,您正在UpdateBar()中初始化一个名为BarChosen的局部变量。

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

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

答案 1 :(得分:0)

所以接受Dave Goldberg的建议,我决定使用指针来解决这个问题。

指向BarChosen的指针

int BarChosen = 0;
int *BarPointer = 0;
BarPointer = &BarChosen;

更新了参数以包含指针

void UpdateBar(char UserInput,int BarChosen,int Bar[3], int BarLeft[3],int *BarPointer) 

在确认控件时添加指针以更改BarChosen整数的值。

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

    }
    else {
        BarChosen--;
        *BarPointer = BarChosen;
    }

}

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

    }
    else {
        BarChosen++;
        *BarPointer = BarChosen;

    }

}