为啥我的数组或函数不起作用?

Posted

技术标签:

【中文标题】为啥我的数组或函数不起作用?【英文标题】:Why doesn't my array or my function work?为什么我的数组或函数不起作用? 【发布时间】:2020-05-19 00:26:38 【问题描述】:

为什么我的数组(或我的函数)不起作用? 我一直在想这个问题。 我没有收到来自 GCC 的错误或警告,我想从手卡或玩家卡中移动一张卡,但我没有得到任何可见的结果... 最小可重现示例(我相信它在函数 'centerCardStack' 或数组 'move' 中,在 main() 中编辑):

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
char playerName;
int row, col, toStack;
int validityCheck;
int move[4];
int centerCardsOne, centerCardsTwo, centerCardsThree, centerCardsFour, centerCardsFive;
int playerCardsComOne, playerCardsComTwo, playerCardsComThree, playerCardsComFour, playerCardsComFive;
void centerCardStack(int section, int card, int toCenterStack)
    //edit the center stacks from a persons selection
    //and edit the persons handCards or playerCards
    if(playerName == 'P') //test who player is, later code is 'P'
        if(section==1) //test secion. 1 is playercards, 2 is handcards
            if(card==1) //test card. if card is one, first card...
                if(toCenterStack==1) //test which stack
                    if(playerCardsComOne-1==centerCardsOne) //test if valid
                        centerCardsOne++;
                    else //or not
                        validityCheck=1;
                
                if(toCenterStack==2)
                    if(playerCardsComOne-1==centerCardsTwo)
                        centerCardsTwo++;
                    else
                        validityCheck=1;
                
                if(toCenterStack==3)
                    if(playerCardsComOne-1==centerCardsThree)
                        centerCardsThree++;
                    else
                        validityCheck=1;
                
                if(toCenterStack==4)
                    if(playerCardsComOne-1==centerCardsFour)
                        centerCardsFour++;
                    else
                        validityCheck=1;
                
            
        
    

void beginCode()
    srand(time(0));
    playerCardsComOne = (rand() % 12) + 1;
    playerCardsComTwo = (rand() % 12) + 1;
    playerCardsComThree = (rand() % 12) + 1;
    playerCardsComFour = (rand() % 12) + 1;
    playerCardsComFive = (rand() % 12) + 1;

//run the above
int main()
    playerName='P';
    beginCode();
    printf("handcards: %2d|%2d|%2d|%2d|%2d\n", playerCardsComOne, playerCardsComTwo, playerCardsComThree, playerCardsComFour, playerCardsComFive);
    printf("center---: %2d|%2d|%2d|%2d|%2d\n", centerCardsOne, centerCardsTwo, centerCardsThree, centerCardsFour, centerCardsFive);
    printf("move> ");
    scanf("%d", move);
    row=move[0];
    col=move[1];
    toStack=move[2];
    centerCardStack(row, col, toStack);
    printf("aftermove: %2d|%2d|%2d|%2d|%2d\n", centerCardsOne, centerCardsTwo, centerCardsThree, centerCardsFour, centerCardsFive);

我正在使用 Linux Mint 19.3 64 位,使用 GCC 7.4.0,在带有 Intel Core 2 Duo @ 2.2 Ghz (Intel Centrino) 的 Gateway NV78 笔记本电脑上运行。 我还没有看到任何对我有帮助的东西。 谁能帮我?我从代码中得到的只是头痛......

【问题讨论】:

运行代码时发生了什么?应用程序会崩溃吗? scanf("%d", move); 那只会存储一个int。看来您希望它做的不止于此:row=move[0]; col=move[1]; toStack=move[2]; 您显然使用了另一种语言,并没有检查 C 或 C++ 中的工作方式是否相同。 scanf("%d", move); 其中move 是一个数组,不会读取该数组的所有元素。它将单个int 读入move[0] 并保持其余数组元素不变。是的,我知道在其他一些语言中调用 scanf() 会读取数组的所有元素,但在 C 和 C++ 中都不起作用。 哦。那么我必须进行多次 scanf 调用,还是他们的另一种方式? 不,应用程序不会崩溃。 【参考方案1】:

我找到了答案! 感谢 kaylum 的建议,我使用了scanf("%d%d%d", &amp;row, &amp;col, &amp;toStack); 并解决了我的问题。我试图 scanf("%d", move); 读取整个 scanf 以分隔移动区域,但这没有用。现在,我可以用一个函数编辑我不同的 int。

谢谢!

【讨论】:

以上是关于为啥我的数组或函数不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

检查数组是不是具有特定字符,为啥我的代码不起作用?

为啥我的函数在调用时不起作用? [关闭]

为核密度估计选择带宽和空间。 (为啥我的带宽不起作用?)

为啥我的基本指数函数不起作用? [关闭]

为啥这个 PHP 递归函数不起作用

为啥我的 Pandas 引用多个列的“应用”函数不起作用? [关闭]