You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++统计质数代码输入合数后后续质数无法正确计数问题求解

问题排查结果

错误原因

  • 质数标记变量j未每次重置:j定义在do-while循环外部,仅在程序启动时初始化为0。当第一次输入合数(示例中的4)时j被赋值为1,后续循环没有重置逻辑,j始终保持为1,导致后续所有质数都无法触发j==0的计数条件。
  • 0/1判断存在语法错误:num == 0 || num == 1分支中的j == 1是比较运算,没有赋值效果,输入0或1时无法正确标记为非质数。
  • 隐式依赖缺失:代码使用了INT_MIN、INT_MAX但未引入<climits>头,使用string未引入<string>头,部分编译器会编译失败。
  • 缓冲区清理逻辑错误:cin.ignore(sum, '\n')的第一个参数应为要忽略的最大字符数,传入累计和sum完全不符合需求,可能导致输入缓冲区残留异常。

修复方案

修改点

  1. 每次进入数字判断逻辑前,先将j重置为0
  2. 将0/1分支的j == 1改为赋值语句j = 1
  3. 补全缺失的头文件引入
  4. 修正cin.ignore的参数为标准的全缓冲区忽略写法

修复后完整代码

#include <iostream>
#include <string>
#include <climits>
#include <limits>

using namespace std;

int main()
{
    int num;
    string var;
    int sum=0;
    int i;
    int largest = INT_MIN;
    int smallest = INT_MAX;
    int prime = 0;
    do {
        cout << "Please enter a series of numbers, press (Q or q) to process: ";
        cin >> num;
        // 每次处理新数字前重置质数标记
        int j = 0;
        if (cin.fail())
        {
            cin.clear();
            cin >> var;
            if (var != "Q" && var != "q")
            {
                cout << "Invalid input, try again" << endl;
            }
            else
            {
                break;
            }
        }
        if (num > largest)
        {
            largest = num;
        }
        if (num < smallest)
        {
            smallest = num;
        }
        if (num == 0 || num == 1)
        {
            j = 1;
        }
        else
        {
            for (i = 2; i <= num / 2; i++)
            {
                if (num % i == 0)
                {
                    j = 1;
                    break;
                }
            }
            if (j == 0)
            {
                prime++;
            }
        }
        sum += num;
        cout << "The corresponding element for the cumulative total sequence is: " << sum << endl;
        // 修正缓冲区清理逻辑
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
    } while (var != "Q" && var != "q");
    cout << endl;
    cout << "Largest number: " << largest << endl;
    cout << "Smallest number: " << smallest << endl;
    cout << "How many prime numbers? " << prime << endl;
    cout << "Have a great day!" << endl;
    return 0;
}

验证结果

输入示例的2、7、4、13、17后,质数计数输出为4,符合预期。

内容的提问来源于stack exchange,提问作者Abal230

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 13:06:04