Home > Back-end >  C program giving incorrect output
C program giving incorrect output

Time:10-02

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?

CodePudding user response:

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.

CodePudding user response:

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.

  •  Tags:  
  • c
  • Related