简体   繁体   中英

C program giving incorrect output

I am writing a C program to sum up prime numbers below a certain limit (9 for now).
I expect 17 but the compiler gave me an unexpected output of 32781.

#include <stdio.h>
#include <stdbool.h>
bool isprime(int n);
int main(){
    const int LIMIT=9;
    int sum;
    for (int j=1;j<LIMIT;j++){
        if (isprime(j)){
            sum+=j;
        }
    }
    printf("%d",sum);
    return 0;
}
bool isprime(int n){
  if (n<=1){
    return false;
  }
  else{
    for(int i=2;i<n;i++){
      if (n%i==0){
        return false;
        break;
      }
    }
    return true;
  }
}

Does anyone understand why this happened?

You declarred int sum; but didn't give sum a starting value, so it's basically reading garbage from memory. In c you need to initialize your variables properly. int sum = 0; should fix the problem.

If you are using clang as your compiler, compiling using -Wall should warn you about this.

Local variables are not initialized, so you need to initialize at declaration or before use.

int sum = 0;

or...

int sum;

for (sum = 0; bla; bla)

If the variable had been declared globally (outside of any function... main is a function) it will automatically initialize to 0.

#include <stdio.h>

int a;

int main(void)
{
    int b;
    
    printf("%d\n%d\n", a, b);

    return 0;
}

Variable 'a' will be 0 and 'b' will be garbage because it's an uninitialized local variable.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM