C++ 初学者C++;:奇怪的行为

C++ 初学者C++;:奇怪的行为,c++,C++,感谢您抽出时间阅读此问题 这个程序是找到十亿后的最小素数。在int main()的末尾,我包含了一个控制台输入cin>>x旨在防止命令提示符关闭过快,以便查看结果。然而,我意识到我必须先输入一些东西,然后它才能显示我想要的结果 所以问题是:为什么即使控制台输出语句coutx #include <iostream> #include <math.h> using namespace std; int is_prime(int x); int main() { f

感谢您抽出时间阅读此问题

这个程序是找到十亿后的最小素数。在int main()的末尾,我包含了一个控制台输入
cin>>x
旨在防止命令提示符关闭过快,以便查看结果。然而,我意识到我必须先输入一些东西,然后它才能显示我想要的结果

所以问题是:为什么即使控制台输出语句
coutx

#include <iostream>
#include <math.h>
using namespace std;

int is_prime(int x);

int main()
{
    for (int i=100000000;;i++){ 
        if(is_prime(i)){ 
                cout<<i;
                break;}
    int x;
    cin>>x;

       }

}

int is_prime(int x)
{
    double maxvalue = sqrt(static_cast<double>(x));
    for ( int i=2;i<=maxvalue;i++){
        if (x%i == 0 ) return false; }
        return true;
}
#包括
#包括
使用名称空间std;
int是_素数(intx);
int main()
{
对于(int i=100000000;;i++){
如果(是_素数(i)){
coutx;
}
}
整数是素数(整数x)
{
double maxvalue=sqrt(静态_cast(x));
对于(int i=2;i
为什么即使控制台输出语句
coutx;
,也是如此

#include <iostream>
#include <math.h>
using namespace std;

int is_prime(int x);

int main()
{
    for (int i=100000000;;i++){ 
        if(is_prime(i)){ 
                cout<<i;
                break;}
    int x;
    cin>>x;

       }

}

int is_prime(int x)
{
    double maxvalue = sqrt(static_cast<double>(x));
    for ( int i=2;i<=maxvalue;i++){
        if (x%i == 0 ) return false; }
        return true;
}
因为
break
改变了执行顺序,一旦找到素数,控件就可以跳过
cin>>x
。您需要将
cin>>x
移出循环


你可以做几件事来优化事情:而不是试图通过
sqrt(N)除以每个数字
1
,您应该只划分到目前为止找到的素数。这将大大加快速度。您还可以通过使用
i*i
作为退出条件来放弃调用
sqrt

似乎cin>>x在for循环中。因此,循环的每次迭代,您都会尝试从s读取一些内容所以,在i变成素数之前,你需要输入一些数字

编辑:显然,1000003是素数,所以你不必输入很多数字