这是我在这里的第一篇文章,所以我希望我做的一切都是正确的。
在最近的编程挑战中,我遇到了一点问题。目标是让用户输入一个数字,并让程序输出0到输入的数字之间的所有质数。我的策略是让for循环对从1到输入的数字的每个数字运行一次简单的检查,方法是将它除以前面的每个数字,直到循环达到1。如果在检查过程中的任何点,程序遇到一个划分为循环当前所在数字的数字,则循环的这一部分将“中断”并继续到下一个数字。如果除数达到1,那么程序将成功地确定没有任何东西可以均匀地划分为原始数字,并将该数字输出为质数。
我对编程非常陌生,但我认为这是我使用break的一个问题。当编译程序时,它只打印输入的原始数字,而不打印其他任何数字。不过,我已经检查过了,以确保我的所有整数和循环都正常工作。任何关于我的上述问题的帮助,或者如果我可以使我的代码更有效或“正确”,我将不胜感激。
#include "stdafx.h"
#include <iostream>
int _tmain()
{
using namespace std;
int iUserInput;
cin >> iUserInput;
for(;iUserInput > 0; iUserInput--)
{
int iDivisor = iUserInput - 1;
for (; iDivisor > 0; iDivisor--)
{
if (iUserInput%iDivisor == 0)
break;
if (iDivisor == 1)
cout << iUserInput << endl;
}
}
return 0;
}发布于 2015-03-12 05:01:30
以下部分:
if (iDivisor == 1) cout << iUserInput << endl;
在错误的位置。你需要把它放在内部循环之外:
for(;iUserInput > 0; iUserInput--)
{
int iDivisor = iUserInput - 1;
for (; iDivisor > 0; iDivisor--)
{
if (iUserInput%iDivisor == 0)
break;
}
if (iDivisor == 1)
cout << iUserInput << endl;
}其他观察结果:
#include "stdafx.h"在这里是完全不必要的。删除it.int _tmain()不是标准做法。将其设置为int main(),并确保其编译方式类似于匈牙利符号this.iUserInput。把它看作是90年代以来微软的一次失败的实验,这在现代的C++中是完全无用的。如果将变量称为userInput.userInput变量的值可能会损害代码的可读性。毕竟,用户输入在输入之后不会更改。考虑倒计时一个userInput的副本,例如for(int count = userInput; count > 0; count--).for (int divisor = userInput - 1; divisor > 0; divisor--).userInput的人来说太高级了,但你应该尝试处理非法用户输入,例如有人输入"X“而不是数字。您可以在每次输入操作后检查std::cin的状态,查看上一次操作是否成功。否则,您的程序可能会出现未定义的行为。https://stackoverflow.com/questions/28996992
复制相似问题