为什么 else if (a != 65) 没有执行?
Why else if (a != 65) is not executing?
#include <iostream>
#include <Windows.h>
using namespace std;
void noret()
{
for (int i = 1; i < 11; i++)
{
cout << "Line number : " << i << endl;
}
system("pause");
}
void StartProgram(string filename)
{
ShellExecute(NULL, "open", filename.c_str(), NULL, NULL, SW_SHOWNORMAL);
}
int main()
{
for (int a = 1; a < 100; a += 3)
{
cout << "The number is: " << a << endl;
if (a == 65)
{
StartProgram("mspaint");
}
else if (a != 65);
{
StartProgram("devenv");
}
}
system("pause");
return 0;
}
这是我编写的代码(我还是编程新手)。请忽略 void noret()
部分。代码完全有效,但在 else if (a != 65)
部分,我想让它仅在不等于 65 时打开程序。
程序从 1-100 计数。 a = a+3 其中 "a" 等于 1。当计数为 100 时,如果 "a" 永远不等于 65,它将打开 "devenv"。但是我这样做的方式是 "devenv" 将打开到不等于 65 的数字。如果在整个计数过程中它从来没有达到 65,我怎样才能让它打开一次...这有什么意义吗?
如果你想知道循环中的所有数字是否都不是 65,你需要记住你是否在循环中看到了 65:
auto found65 = false;
for (int a = 1; a < 100; a += 3)
{
cout << "The number is: " << a << endl;
found65 = found65 || (a == 65);
}
if (found65)
{
StartProgram("mspaint");
}
else
{
StartProgram("devenv");
}
此代码在很多方面都是错误的:
if (a == 65)
{
StartProgram("mspaint");
}
else if (a != 65);
{
StartProgram("devenv");
}
首先在 if
之后的分号使它成为 noop 并终止你的 else
这样代码的编写方式就很复杂:
if (a == 65)
{
StartProgram("mspaint");
}
StartProgram("devenv");
完全删除第二个 if
:
if (a == 65)
{
StartProgram("mspaint");
}
else
{
StartProgram("devenv");
}
修复您的代码,修复您程序的逻辑只需使用标志:
int main()
{
bool found = false;
for (int a = 1; a < 100; a += 3)
{
if (a == 65) found = true;
}
if( found )
StartProgram("devenv");
else
StartProgram("mspaint");
}
我假设您已经解决了语法问题,所以我将专注于算法的高级问题。
您不需要循环来确定按 3 计数是否会打印 65。这可以通过简单的数学运算来完成:当您开始从 a
计数到 z
时 [=15] =],如果 (n-a)
除以 x
没有余数,您将命中 n
:
bool see65 = (65-1) % 3 == 0;
这假设数字 a
和 z
在 n
的相对侧。
由于您的条件控制单个参数,因此您可以将调用重写为条件表达式:
StartProgram(see65 ? "mspaint" : "devenv");
另外,如果你还记得C++中的bool
是一个整数类型,你可以排除条件:
array<string,2> prog {"mspaint", "devenv"}
...
StartProgram(prog[see65]);
#include <iostream>
#include <Windows.h>
using namespace std;
void noret()
{
for (int i = 1; i < 11; i++)
{
cout << "Line number : " << i << endl;
}
system("pause");
}
void StartProgram(string filename)
{
ShellExecute(NULL, "open", filename.c_str(), NULL, NULL, SW_SHOWNORMAL);
}
int main()
{
for (int a = 1; a < 100; a += 3)
{
cout << "The number is: " << a << endl;
if (a == 65)
{
StartProgram("mspaint");
}
else if (a != 65);
{
StartProgram("devenv");
}
}
system("pause");
return 0;
}
这是我编写的代码(我还是编程新手)。请忽略 void noret()
部分。代码完全有效,但在 else if (a != 65)
部分,我想让它仅在不等于 65 时打开程序。
程序从 1-100 计数。 a = a+3 其中 "a" 等于 1。当计数为 100 时,如果 "a" 永远不等于 65,它将打开 "devenv"。但是我这样做的方式是 "devenv" 将打开到不等于 65 的数字。如果在整个计数过程中它从来没有达到 65,我怎样才能让它打开一次...这有什么意义吗?
如果你想知道循环中的所有数字是否都不是 65,你需要记住你是否在循环中看到了 65:
auto found65 = false;
for (int a = 1; a < 100; a += 3)
{
cout << "The number is: " << a << endl;
found65 = found65 || (a == 65);
}
if (found65)
{
StartProgram("mspaint");
}
else
{
StartProgram("devenv");
}
此代码在很多方面都是错误的:
if (a == 65)
{
StartProgram("mspaint");
}
else if (a != 65);
{
StartProgram("devenv");
}
首先在 if
之后的分号使它成为 noop 并终止你的 else
这样代码的编写方式就很复杂:
if (a == 65)
{
StartProgram("mspaint");
}
StartProgram("devenv");
完全删除第二个 if
:
if (a == 65)
{
StartProgram("mspaint");
}
else
{
StartProgram("devenv");
}
修复您的代码,修复您程序的逻辑只需使用标志:
int main()
{
bool found = false;
for (int a = 1; a < 100; a += 3)
{
if (a == 65) found = true;
}
if( found )
StartProgram("devenv");
else
StartProgram("mspaint");
}
我假设您已经解决了语法问题,所以我将专注于算法的高级问题。
您不需要循环来确定按 3 计数是否会打印 65。这可以通过简单的数学运算来完成:当您开始从 a
计数到 z
时 [=15] =],如果 (n-a)
除以 x
没有余数,您将命中 n
:
bool see65 = (65-1) % 3 == 0;
这假设数字 a
和 z
在 n
的相对侧。
由于您的条件控制单个参数,因此您可以将调用重写为条件表达式:
StartProgram(see65 ? "mspaint" : "devenv");
另外,如果你还记得C++中的bool
是一个整数类型,你可以排除条件:
array<string,2> prog {"mspaint", "devenv"}
...
StartProgram(prog[see65]);