2017-01-02 112 views
-1

我正在CS50 PSET1上工作。我到目前爲止的代碼如下:C告訴我初始化變量,即使它已經初始化

#include <stdio.h> 
#include <cs50.h> 

int main(void) { 

    float change; 

    do { 
     printf("Change: "); 
     change = get_float(); 
    } while(change < 0); 

    int coins; 

    for(int q = change; q < 25; q++) { 
     q = 25/q; 
     coins += 1; 
    } 
    printf("%i", coins); 

} 

我有問題。當我嘗試編譯我與make命令代碼我得到一個錯誤說這個

greedy.c:17:9: error: variable 'coins' is uninitialized when used here [-> Werror,-Wuninitialized] coins += 1;

+4

硬幣根本沒有初始化。 「for」循環中的第一個「硬幣」的價值是什麼?初始化它:'int coins = 0;'。 –

回答

2

編譯器是正確的。你從來沒有分配任何東西到coins首先。你所做的只是增加它的(未初始化的)值。

要指派初始值,寫

int coins = 0; /* or whatever the correct initial value is */ 

順便說一句,我不是很確定的意圖是什麼,但下面是極不可能是你想要的東西:

for(int q = change; q < 25; q++) { 
    q = 25/q; 

請注意賦值如何修改循環變量。雖然這是允許的,但在這種情況下,它不太可能是故意的。

+0

downvoter會關注評論嗎? – NPE

0
int coins; 

是一個局部變量,而不是一個靜態變量,並且您在之前使用它來初始化它。