簡體   English   中英

C 程序給出不正確 output

[英]C program giving incorrect output

我正在編寫一個 C 程序來總結低於某個限制(目前為 9)的質數。
我期望 17,但編譯器給了我一個意外的 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;
  }
}

有誰明白為什么會這樣?

你聲明了int sum; 但沒有給 sum 一個起始值,所以它基本上是從 memory 中讀取垃圾。在 c 中,您需要正確初始化變量。 int sum = 0; 應該解決問題。

如果您使用 clang 作為編譯器,使用 -Wall 進行編譯應該會警告您這一點。

局部變量沒有被初始化,因此需要在聲明時或使用前進行初始化。

int sum = 0;

或者...

int sum;

for (sum = 0; bla; bla)

如果該變量已全局聲明(在任何 function 之外... main 是一個函數),它將自動初始化為 0。

#include <stdio.h>

int a;

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

    return 0;
}

變量“a”將為 0 而“b”將是垃圾,因為它是一個未初始化的局部變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM