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

C++报错‘expression is not assignable’:求数组第二大值求助

解决数组找第二大值的报错与逻辑问题

嘿,刚入门编程遇到这种问题太正常啦,我来帮你揪出问题所在,再把代码捋顺!

首先说你遇到的「expression is not assignable」错误原因

你看这段代码:

(largest_value - array[i]) = large_value;

这行是把large_value的值赋给largest_value - array[i]这个表达式,但在C++里,只有变量(比如large_value、array[i]这种)才能被赋值,表达式是不能接收赋值的,这就导致了这个报错,而且这行逻辑本身也不对,完全可以删掉~

还有其他几个需要修正的逻辑问题

  • 第一个循环里,你写了array[i]=temp;,这是把未初始化的temp值覆盖到数组里了,反过来才对!应该是temp = array[i];,先把当前数组元素取出来再和最大值比较。
  • 直接把largest_value和large_value初始化为0是有坑的:如果数组里全是负数,最大值就会被错误地当成0,应该用数组的第一个元素来初始化(记得先判断数组不为空)。
  • 第二个循环找第二大值的时候,temp没被赋值,而且逻辑不对:应该跳过已经找到的最大值的那个元素,然后找剩下元素里的最大值。

修正后的完整代码

#include<iostream>
int main(){
    int i = 0, N = 0;
    int largest_value, large_value;
    int* array = nullptr; // 用nullptr比NULL更规范哦

    std::cout << "Enter the Number of elements: ";
    std::cin >> N;

    // 先判断输入的N是否合法
    if (N <= 0) {
        std::cout << "Please enter a positive number!" << std::endl;
        return 1;
    }

    array = new int[N];
    // 读取数组元素
    std::cout << "Enter the elements: " << std::endl;
    for(i = 0; i < N; i++){
        std::cin >> array[i];
    }

    // 初始化最大值和第二大值
    largest_value = array[0];
    large_value = array[0];
    int idx_largest = 0, idx_large = 0;

    // 第一次遍历找最大值
    for(i = 0; i < N; i++){
        if(array[i] > largest_value){
            largest_value = array[i];
            idx_largest = i;
        }
    }

    // 第二次遍历找第二大值(跳过最大值的位置)
    for(i = 0; i < N; i++){
        if(i == idx_largest){
            continue; // 跳过最大值的元素
        }
        if(array[i] > large_value){
            large_value = array[i];
            idx_large = i;
        }
    }

    std::cout << "The Equilibrium is between index " << idx_largest << " and " << idx_large << std::endl;
    std::cout << "Largest value: " << largest_value << ", Second largest value: " << large_value << std::endl;

    // 记得释放动态分配的内存,避免内存泄漏
    delete[] array;
    return 0;
}

代码里的关键改进点

  • 加了输入合法性判断,避免用户输入负数或0导致的错误。
  • 用数组第一个元素初始化最大值和第二大值,适配负数场景。
  • 找第二大值时跳过了最大值的位置,确保拿到真正的第二大值。
  • 释放了动态分配的数组内存,避免内存泄漏(新手容易忘这个哦)。

你可以运行修正后的代码试试,应该就能正常工作啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 15:47:41