CS50绘图功能仅绘制零

时间:2017-01-23 09:20:36

标签: c cs50

这是我的第一篇stackoverflow帖子。

我在edx上做CS50课程,目前我遇到问题集3.我正在实施十五岁的游戏。 init()函数初始化板,draw函数应该绘制它,但是存在问题。

draw函数没有从init()函数中获取值。我试验过它,在init()函数中值是正确的,但在draw函数中它们都是0。

有什么问题?

error_reporting(E_ALL);
ini_set('display_errors','1'); 
   $dsn = 'mysql:dbname=testdb;host=127.0.0.1';
    $user = 'dbuser';
    $password = 'dbpass';

    try {
        $dbh = new PDO($dsn, $user, $password);
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch (PDOException $e) {
        echo 'Connection failed: ' . $e->getMessage();
    }

2 个答案:

答案 0 :(得分:1)

这可能会对您有所帮助:https://www.tutorialspoint.com/cprogramming/c_scope_rules.htm

基本上你在init函数中所做的一切(变量名和值)只在这个函数或块中有效。

要解决这个问题,您可以通过在主函数上方声明它来使int board[d][d];成为全局变量(非常不鼓励!):

int board[d][d];

int main(int argc, char** argv){ ... }

或者您可以将变量board[d][d]作为对函数draw的引用。 这有效但效率低,因为整个变量将被复制。

void draw(int board[][]){...}

或者您可以使用c命令board[d][d]在堆上为malloc分配内存,请参阅man malloc。那么你的代码应该是这样的。

void *ptr = malloc(sizeof(board));    //you need to error check this. See man malloc

如果这样做,您只需将指针传递给函数中的数据即可。这样更有效,因为数据保留在堆内存中。

答案 1 :(得分:1)

您的board[][]是一个局部变量,因此只能在init()环境中使用。

我也参加了CS50x课程,他们处理我们的fifteen.c文件实际上已经在第27行声明了board[][]变量:int board[DIM_MAX][DIM_MAX];,它已经是全局的。

所以你不需要创建另一块板子,只需使用他们处理的板子。