C 多字符常量,分配数组值时出现分段错误
所以我创建了一个玩围棋的程序,我从洗牌开始,然后打印它。我的问题是:C 多字符常量,分配数组值时出现分段错误,c,arrays,segmentation-fault,C,Arrays,Segmentation Fault,所以我创建了一个玩围棋的程序,我从洗牌开始,然后打印它。我的问题是: 在分配数组值的过程中,“shuffle”函数的某个地方出现了分段错误 GCC正在抱怨“deck”中的多字符字符常量。我不知道如何申报一副牌 在尝试打印数组值时,我不断得到“下标值既不是数组,也不是指针,也不是向量” 我知道我的代码中可能有很多明显的错误。请原谅我。我是初学者 下面是代码(最后一个主要功能): #包括 #包括 #包括 #包括 #包括 整数洗牌(整数组[52],整数版本) {//这是在洗牌完成后存储洗牌牌组 int
#包括
#包括
#包括
#包括
#包括
整数洗牌(整数组[52],整数版本)
{//这是在洗牌完成后存储洗牌牌组
int newdeck[52]={0};
printf(“在洗牌中\n”);
//我计划为洗牌组创建其他组合,但只从一个开始
交换机(版本)
{//这会将newdeck中的值设置为deck中的值,显然会混淆顺序
//这也是我的细分错误所在。
案例1:newdeck[0]=deck[26];
新甲板[1]=甲板[13];
新甲板[2]=甲板[33];
新甲板[3]=甲板[45];
新甲板[4]=甲板[19];
新甲板[5]=甲板[36];
新甲板[6]=甲板[42];
新甲板[7]=甲板[24];
新甲板[8]=甲板[51];
新甲板[9]=甲板[22];
新甲板[10]=甲板[15];
新甲板[11]=甲板[10];
新甲板[12]=甲板[3];
新甲板[13]=甲板[6];
新甲板[14]=甲板[43];
新甲板[15]=甲板[48];
新甲板[16]=甲板[27];
新甲板[17]=甲板[18];
新甲板[18]=甲板[1];
新甲板[19]=甲板[31];
新甲板[20]=甲板[14];
新甲板[21]=甲板[0];
新甲板[22]=甲板[21];
新甲板[23]=甲板[12];
新甲板[24]=甲板[41];
新甲板[25]=甲板[35];
新甲板[26]=甲板[16];
新甲板[27]=甲板[4];
新甲板[28]=甲板[9];
新甲板[29]=甲板[40];
新甲板[30]=甲板[25];
新甲板[31]=甲板[34];
新甲板[32]=甲板[44];
新甲板[33]=甲板[7];
新甲板[34]=甲板[5];
新甲板[35]=甲板[38];
新甲板[36]=甲板[46];
新甲板[37]=甲板[37];
新甲板[38]=甲板[49];
新甲板[39]=甲板[39];
新甲板[40]=甲板[23];
新甲板[41]=甲板[50];
新甲板[42]=甲板[20];
新甲板[43]=甲板[2];
新甲板[44]=甲板[11];
新甲板[45]=甲板[47];
新甲板[46]=甲板[28];
新甲板[47]=甲板[17];
新甲板[48]=甲板[30];
新甲板[49]=甲板[8];
新甲板[50]=甲板[29];
新甲板[51]=甲板[32];
打破
}
printf(“离开洗牌\n”);
//返回洗牌牌组
返回新甲板;
}
内部主(空)
{//宣布一副牌。
int CACK={'2S','3S','4S','5S','6S','7S','8S','9S','TS','JS','QS','AS','2H','3H','4H','5H','6H','7H','TH','JH','QH','KH','AH 2C','3C','7C','9C','TC JC','QC','AC','2D 3D','4D','6D','7D','9D','TD','JD','QD','QD','KD AD';
//柜台
int i;
//此处用于调试目的以及其他类似事件
printf(“进入洗牌\n”);
//洗牌
牌组=洗牌(牌组,1);
printf(“打印组”);
对于(i=0;i<52;i++)
{
printf(“%d”,deck[i]);//打印deck中的值(现在已洗牌,并从“洗牌”函数中设置为等于newdeck。我还得到错误“下标值是niether数组、指针或向量。”
}
返回0;
}
问题代码试图分配:
int CACK={'2S','3S','4S','5S','6S','7S','8S','9S','TS','JS','QS','AS','2H','3H','4H','5H','6H','7H','TH','JH','QH','KH','AH 2C','3C','7C','9C','TC JC','QC','AC','2D 3D','4D','6D','7D','9D','TD','JD','QD','QD','KD AD'
此尝试的分配存在多个问题。
deck
是一个整数。不能为一个整数分配多个值“
在C中用于定义字符常量。(即:“a”、“b”、“C”、“X”、“Y”、“Z”、“1”、“2”、“3”和……)。上述赋值中的字符值都是非法的,因为它们都是两个字符。
也许这就是我们的初衷:
char*deck[]=
{
“2S”、“3S”、“4S”、“5S”、“6S”、“7S”、“8S”、“9S”、“TS”、“JS”、“QS”、“KS”、“AS”,
“2H”、“3H”、“4H”、“5H”、“6H”、“7H”、“8H”、“9H”、“TH”、“JH”、“QH”、“KH”、“AH”,
“2C”、“3C”、“4C”、“5C”、“6C”、“7C”、“8C”、“9C”、“TC”、“JC”、“QC”、“KC”、“AC”,
“2D”、“3D”、“4D”、“5D”、“6D”、“7D”、“8D”、“9D”、“TD”、“JD”、“QD”、“KD”、“AD”
})
上面将deck定义为字符指针数组。字符指针可以指向字符数组(或字符串)的第一个字符。字符指针数组初始化为指向每个3个字符的字符串(两个可见字符,加上一个字符串终止字符'\0'
)
上述问题(对C类型、指针等的有限理解)贯穿于问题代码中
查看问题代码的“更正确”版本的扰流器。在您的机器上,
int
有多大。'xx'
结构有多大?东西是以小端还是大端存储的?您是
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>
int shuffle(int deck[52], int version)
{ //this is to store the shuffled deck after it is finished
int newdeck[52] = {0};
printf("In shuffle\n");
//I plan to create other combinations for a shuffled deck, but starting with only one
switch (version)
{ //this sets a value in newdeck to a value in deck, obviously mixing the order
//this is also where I get my segmentation fault.
case 1: newdeck[0] = deck[26];
newdeck[1] = deck[13];
newdeck[2] = deck[33];
newdeck[3] = deck[45];
newdeck[4] = deck[19];
newdeck[5] = deck[36];
newdeck[6] = deck[42];
newdeck[7] = deck[24];
newdeck[8] = deck[51];
newdeck[9] = deck[22];
newdeck[10] = deck[15];
newdeck[11] = deck[10];
newdeck[12] = deck[3];
newdeck[13] = deck[6];
newdeck[14] = deck[43];
newdeck[15] = deck[48];
newdeck[16] = deck[27];
newdeck[17] = deck[18];
newdeck[18] = deck[1];
newdeck[19] = deck[31];
newdeck[20] = deck[14];
newdeck[21] = deck[0];
newdeck[22] = deck[21];
newdeck[23] = deck[12];
newdeck[24] = deck[41];
newdeck[25] = deck[35];
newdeck[26] = deck[16];
newdeck[27] = deck[4];
newdeck[28] = deck[9];
newdeck[29] = deck[40];
newdeck[30] = deck[25];
newdeck[31] = deck[34];
newdeck[32] = deck[44];
newdeck[33] = deck[7];
newdeck[34] = deck[5];
newdeck[35] = deck[38];
newdeck[36] = deck[46];
newdeck[37] = deck[37];
newdeck[38] = deck[49];
newdeck[39] = deck[39];
newdeck[40] = deck[23];
newdeck[41] = deck[50];
newdeck[42] = deck[20];
newdeck[43] = deck[2];
newdeck[44] = deck[11];
newdeck[45] = deck[47];
newdeck[46] = deck[28];
newdeck[47] = deck[17];
newdeck[48] = deck[30];
newdeck[49] = deck[8];
newdeck[50] = deck[29];
newdeck[51] = deck[32];
break;
}
printf("Leaving shuffle\n");
//return the shuffled deck
return newdeck;
}
int main(void)
{ //declare a deck of cards.
int deck = {'2S', '3S', '4S', '5S', '6S', '7S', '8S', '9S', 'TS', 'JS', 'QS', 'KS', 'AS', '2H', '3H', '4H', '5H', '6H', '7H', '8H', '9H', 'TH', 'JH', 'QH', 'KH', 'AH', '2C', '3C', '4C', '5C', '6C', '7C', '8C', '9C', 'TC', 'JC', 'QC', 'KC', 'AC', '2D', '3D', '4D', '5D', '6D', '7D', '8D', '9D', 'TD', 'JD', 'QD', 'KD', 'AD'};
//a counter
int i;
//this is here for debugging purposes as well as the other similar occurrences
printf("Entering shuffle\n");
//shuffles the deck
deck = shuffle(deck, 1);
printf("Printing deck\n");
for ( i = 0 ; i < 52 ; i++ )
{
printf("%d ", deck[i]);//print the values in deck (now shuffled and set equal to newdeck from "shuffle" function. I also get the error "Subscripted value is niether array, nor pointer, nor vector."
}
return 0;
}