[英]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.