2017-01-02 117 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; 

是一个局部变量,而不是一个静态变量,并且您在之前使用它来初始化它。