c - 简单二维数组程序中的意外输出

标签 c arrays output

作为家庭作业,我必须创建一个简单的程序,从标准的 52 张卡片组中输出 5 张不同的卡片。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>

void deal(char input_array[5][4]);

char deck[52][4]={"AcS","02S","03S","04S","05S","06S","07S","08S","09S","10S","JaS","QuS","KiS",
"AcH","02H","03H","04H","05H","06H","07H","08H","09H","10H","JaH","QuH","KiH","AcD","02D",
"03D","04D","05D","06D","07D","08D","09D","10D","JaD","QuD","KiD","AcC","02C","03C","04C",
"05C","06C","07C","08C","09C","10C","JaC","QuC","KiC"};

main()
{
    int index;
    char hand[5][4];
    deal(hand);

    for(index = 0; index < 5; index++){
        printf("%s\n", hand[index]);
    }
}

void deal(char input_array[5][4])
{
    int i, j, randInt, count = 0;
    //srand((unsigned int)time(NULL));
    srand(time(NULL));

    /* outer for loop used to assign 5 cards to array */
    for (i = 0; i < 5; i++){

        /* random int generated between 0 and 51, so a random card can be picked from the deck array */
        randInt = (rand() % 52);

        /* inner for loop checks each time whether the card already exists in the input_array. if it exists, count is incremented by 1 */
        for(j = 0; j < 5; j++){

            if(strcmp(input_array[j], deck[randInt]) == 0){
                ++count;
            }

        }

        /* after exiting inner for loop, if count is still 0, the card chosen from the deck isn't already in input_array. so it's added to input_array */
        if(count == 0){
            strcpy(input_array[i], deck[randInt]);
        }

    }
}

但是一旦我一遍又一遍地运行它,最终我会得到奇怪的/意外的/随机的值(见下面的输出图像)。

http://i.imgur.com/7HBQIwR.jpg

http://i.imgur.com/PgpFoda.jpg

我检查了每一行代码并仔细检查了所有内容。我不知道这里出了什么问题。任何帮助表示赞赏。

最佳答案

您的代码在此处表现出未定义的行为:

if(strcmp(input_array[j], deck [randInt]) == 0){

因为 input_array 没有初始化并且包含“垃圾”值。

要修复它,改变

for(j = 0; j < 5; j++){

for(j = i-1; j >= 0; j--){

同时添加一个 else 部分:

if(count == 0){
         strcpy(input_array[i], deck [randInt]);
     }
else{
         input_array[i][0]='\0';
     }

input_array[i][0]='\0'; 完成以 NUL 终止 input_array[i] 以便它被初始化并且 main 中的 printf 不打印奇怪的东西。

关于c - 简单二维数组程序中的意外输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29044965/

相关文章:

c - 在 C 中将所有数字从字符串导入到数组

javascript - 从数组中生成 n 组唯一对

r - 在 R 中抑制来自 zip 的消息

c memcpy 按值结构

c++ - 退出 while 循环

javascript - 首先将多个 div 的高度存储在数组中,然后将它们应用到其他元素

javascript - jQuery/Javascript 中的 sum Floatnumber 输出错误

r - 将输出从一个 R session 复制到另一个 R session

这些C代码可以这样重构吗?

php - 在php中访问数组中的数据