2017-11-18 69 views
0

因为我的代码有点长,而且听说只要符合本论坛的特定标准,我们就可以提出问题,我已经上传了我的code into Google Drive在一个循环中中继2D数组的状态

把我的问题纳入的话,假设compare功能是在我main执行后的第一个循环完成后,while循环我主要是因为currentprogress[x][y]!=finalpuzzle[x][y]compare功能的一部分;当执行第二个循环时,用户选择的选项不会保留在currentprogress 2D阵列中,因此无论在currentprogress函数中的变量choice处记录了多少次输入,程序都不会继续。

如何将2D阵列的状态从第一个循环传递到第二个循环等等?

谢谢!

+2

我没有按照链接,但:无论你可能听说过 - 恕我直言,最好忘记它。请阅读[如何创建最小,完整和可验证示例](https://stackoverflow.com/help/mcve)。如果您无法通过适合问题文本的小例子重现您的问题,那么这是您问题的错误平台。 – Scheff

+0

您正在将'stat'按值传递给'compare',所以函数会修改该变量的一个副本。将签名更改为传递指针或仅返回该值:'stat = compare(temp,store);'。我没有阅读你的其他代码,它太长了。 –

+0

@Scheff,对不起,麻烦。 – Raph

回答

0

在您的main()我注意到有关键词do但从来没有while,它可以防止你屈曲。

然后,为了能够恢复值state,有两种解决方案。第一个是返回您state变量的值,

char compare(char currentprogress[NROW][NCOL], char finalpuzzle[NROW][NCOL], char status) { 
    // Your code 
    return (status); 
} 

,第二个是通过指针参数访问相同的存储器区域作为您的“主”的变量中。

void compare(char currentprogress[NROW][NCOL], char finalpuzzle[NROW][NCOL], char *status){ 
    *status = 'f'; // now your state variable has the same value in your main() 
} 

为了理解这个机制,我建议你重新定位范围,并通过复制发送参数。换句话说,compare中的变量state与您的main中的变量具有相同的值,但不一样,它是副本。