#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的数字。我怎么能这样做才能打开ONCE如果整个计数它永远不会是65 ...它是否会任何意义?
答案 0 :(得分:4)
这段代码错误很多:
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");
}
要修复代码,修改程序的逻辑只需使用flag:
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");
}
答案 1 :(得分:2)
如果你想知道循环中的所有数字是否都不是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");
}
答案 2 :(得分:0)
我认为您已经弄清楚了语法的问题,因此我将专注于算法的高级问题。
您不需要循环来确定按3计算是否会打印65.这可以通过简单的数学运算完成:当您从a
开始计数到z
x
时如果n
除以(n-a)
时没有产生余数,你会点击x
:
bool see65 = (65-1) % 3 == 0;
这假设数字a
和z
位于n
的相对位置。
由于条件控制单个参数,您可以将调用重写为条件表达式:
StartProgram(see65 ? "mspaint" : "devenv");
此外,如果你还记得C ++中的bool
是一个整数类型,你可以消除条件:
array<string,2> prog {"mspaint", "devenv"}
...
StartProgram(prog[see65]);