我有一个程序,其中有多个 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/