C++/SDL2 Mixer - 一个三元可以正常工作,但几乎完全相同的一个却不能?
C++/SDL2 Mixer - One ternary works correctly, but a nearly-identical one doesn't?
我正在编写一些简单的测试音频代码以确保 SDL_mixer 适用于我的应用程序,但在代码中,当给定来自 std::cin 的某些字符时,一切正常,除了减法10卷起。加10行,减1行,减10只减1不减10
在下面的代码中,变量 sound
是一个结构,包含 2 个名为 mus
和 eff
的映射,由字符串索引并包含 Mix_Music*
和 Mix_Chunk
变量分别。 “Moon Patrol”是我的音乐音频,“Pew”是我的测试效果音频。另外,对于大 if/else 声明,我感到抱歉,我将在实际程序中使用 GLUT 键进行输入。
相关代码:
Mix_PlayMusic(sound.mus["Moon Patrol"], -1);
char i = ' ';
std::cout << "i / k: volume +/- 1 | u / j: volume +/- 10 | q: quit | v: pew sound" << std::endl;
while (i != 'q')
{
std::cin >> i;
int cVolume = Mix_VolumeMusic(-1);
if (i == 'i') Mix_VolumeMusic(cVolume + ((1) ? cVolume < 128 : 0)); // +1 Works
else if (i == 'k') Mix_VolumeMusic(cVolume - (1 ? cVolume > 0 : 0)); // -1 Works
else if (i == 'u') Mix_VolumeMusic(cVolume + (10 ? cVolume + 10 <= 128 : 0)); // +10 Works
else if (i == 'j') Mix_VolumeMusic(cVolume - (10 ? cVolume > 9 : 0)); // -10 Doesn't Work
else if (i == 'p') std::cout << cVolume << std::endl; // Showing Volume Works
else if (i == 'v') Mix_PlayChannel(-1, sound.eff["Pew"], 0); // Effect Works
} // Exiting works
我尝试过但无效的方法:
- 到处用
Mix_VolumeMusic(-1)
替换cVolume
- 将
10
放在括号中
- 将密钥从
'j'
更改为 'f'
我试过的东西按书面方式工作(但不是我想要的):
- 将
10
更改为 1
(代码减去 1)
- 注释掉三元,得到
else if (i == 'j') Mix_VolumeMusic(cVolume - (10));// ? cVolume > 9 : 0));
(正确减去 10 但不能防止负值)
这表明它是关于三元的,但是减1和减10的代码本质上是相同的。有什么我想念的吗?
三元运算符是这样工作的:
变量=(条件)?表达真:表达假;
我正在编写一些简单的测试音频代码以确保 SDL_mixer 适用于我的应用程序,但在代码中,当给定来自 std::cin 的某些字符时,一切正常,除了减法10卷起。加10行,减1行,减10只减1不减10
在下面的代码中,变量 sound
是一个结构,包含 2 个名为 mus
和 eff
的映射,由字符串索引并包含 Mix_Music*
和 Mix_Chunk
变量分别。 “Moon Patrol”是我的音乐音频,“Pew”是我的测试效果音频。另外,对于大 if/else 声明,我感到抱歉,我将在实际程序中使用 GLUT 键进行输入。
相关代码:
Mix_PlayMusic(sound.mus["Moon Patrol"], -1);
char i = ' ';
std::cout << "i / k: volume +/- 1 | u / j: volume +/- 10 | q: quit | v: pew sound" << std::endl;
while (i != 'q')
{
std::cin >> i;
int cVolume = Mix_VolumeMusic(-1);
if (i == 'i') Mix_VolumeMusic(cVolume + ((1) ? cVolume < 128 : 0)); // +1 Works
else if (i == 'k') Mix_VolumeMusic(cVolume - (1 ? cVolume > 0 : 0)); // -1 Works
else if (i == 'u') Mix_VolumeMusic(cVolume + (10 ? cVolume + 10 <= 128 : 0)); // +10 Works
else if (i == 'j') Mix_VolumeMusic(cVolume - (10 ? cVolume > 9 : 0)); // -10 Doesn't Work
else if (i == 'p') std::cout << cVolume << std::endl; // Showing Volume Works
else if (i == 'v') Mix_PlayChannel(-1, sound.eff["Pew"], 0); // Effect Works
} // Exiting works
我尝试过但无效的方法:
- 到处用
Mix_VolumeMusic(-1)
替换cVolume
- 将
10
放在括号中 - 将密钥从
'j'
更改为'f'
我试过的东西按书面方式工作(但不是我想要的):
- 将
10
更改为1
(代码减去 1) - 注释掉三元,得到
else if (i == 'j') Mix_VolumeMusic(cVolume - (10));// ? cVolume > 9 : 0));
(正确减去 10 但不能防止负值)
这表明它是关于三元的,但是减1和减10的代码本质上是相同的。有什么我想念的吗?
三元运算符是这样工作的:
变量=(条件)?表达真:表达假;