为什么if语句判断不成立还是执行了后面的自加语句啊

#请问一下大佬为什么if语句判断不成立还是执行了后面的自加语句啊
逐语句调试过了,发现第一次for循环里面if不成立的时候只执行了m++
想了好久找不出问题
是求主元素然后输出的代码
#代码片

#include<stdio.h>

int MainEle(int s[],int n) {
    int i, j;
    int m=1;  //相同数字个数
    int p = s[0]; //主元素
    for (i = 0; i < n; i++) {
        for (j = i; j < n; j++) {
            if (s[j] == s[i]) {
                p = s[i];
                m++; //有相同元素时,次数+1
            }
                
        }
        if (m > n / 2) break;//
    }
    printf("m=%d\n", m);
    if (m != 1 && m>n/2)
        return p;
    else return -1;
    
}

int main(){
    int A[] = {0,5,5,3,5,7,5,5};
    int n = 8;
    //MainEle(A);
    printf("%d\n", MainEle(A,n));
    return 0;
}

#使用的是Vs2019

修改如下,改动处见注释,供参考:

#include<stdio.h>
int MainEle(int s[], int n) {
    int i, j;
    int m = 1;  //相同数字个数
    int p = s[0]; //主元素
    for (i = 0; i < n - 1; i++) {   // 修改  for (i = 0; i < n; i++)
        for (j = i + 1, m = 1; j < n; j++) { // 修改 for (j = i; j < n; j++)
            if (s[j] == s[i]) {
                p = s[i];
                m++; //有相同元素时,次数+1
            }
        }
        if (m > n / 2) break;//
    }
    printf("m=%d\n", m);
    if (m != 1 && m > n / 2)
        return p;
    else 
        return -1;
}

int main() {
    int A[] = { 0,5,5,3,5,7,5,5 };
    int n = 8;
    //MainEle(A);
    printf("%d\n", MainEle(A, n));
    return 0;
}

【以下回答由 GPT 生成】

问题所在是变量m没有在每次循环开始时被重置为1。在代码中,变量m只在外层循环开始时被初始化为1,但在内层循环执行完毕后,m的值并没有被重置,导致m的值累加了多次。为了解决这个问题,你可以在内层循环结束后,手动将m的值重置为1。以下是修改后的代码:

#include <stdio.h>

int MainEle(int s[], int n) {
    int i, j;
    int m=1; //相同数字个数
    int p = s[0]; //主元素
    for (i=0; i<n; i++) {
        for (j=i; j<n; j++) {
            if (s[j] == s[i]) {
                p = s[i];
                m++; //有相同元素时,次数+1
            }
        }
        if (m > n / 2) break;
        m = 1; // 重置m的值为1
    }
    printf("m=%d\n", m);
    if (m != 1 && m>n/2)
        return p;
    else return -1;
}

int main() {
    int A[] = {0,5,5,3,5,7,5,5};
    int n = 8;
    printf("%d\n", MainEle(A,n));
    return 0;
}

通过在内层循环结束后将m的值重置为1,可以确保在每次比较新的元素之前,m总是被初始化为1,从而保证正确的计数。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

单步debug调试一下,看看什么情况