这个C++代码有什么问题

What is wrong with this C++ code?

本文关键字:什么 问题 代码 C++ 这个      更新时间:2023-10-16
#include <iostream>
using namespace std;
int main()
{
    char ch;
    int  n;
    do {
        cout << "Enter a number:";
        cin >> n;
        if (n % 2 == 0)
            cout << "The number is even.n";
        else
            cout << "The number is odd.n";
        bool prime;
        for (int i = 2; i < n; ++i) {
            if (n % i == 0)
                prime = true;
        }
        if (prime) {
            cout << "The number is not prime.";
        }
        else
            cout << "The number is prime.";
        cout << "Do you want to continue?[y/n]";
        cin >> ch;
    } while (ch == 'y' || ch == 'Y');
}

如果循环进入 if(prime(,那么它永远不会进入 else。在第一次运行循环时,如果输入 3,则输出素数。然后在下一个如果输入 4 它显示不是素数,但之后每当输入任何素数时,它都会显示不是素数。

首先是你的

bool prime;

未初始化。其次,它应该在循环do while()内初始化,最好将该变量声明移动到那里:

    bool prime = false; // move it here and initialize
    for (i = 2; i < n; ++i) {
        if (n % i == 0)
            prime = true;
    }

并且您反向使用布尔标志,这使您的程序不可读,您最好修复它:

    bool prime = true; // move it here and initialize
    for (i = 2; i < n and prime; ++i) {
        if (n % i == 0) 
            prime = false;
    }
    if (prime) 
        cout << "The number is prime.";
    else
        cout << "The number is not prime.";