我有一个程序,它有多个滑块可以使用 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
答案 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;
}
}