我应该使用2个原型,还是只使用1个原型?

时间:2014-12-08 07:10:00

标签: c arrays

我试图为我的游戏创建一个评分系统。这是我的代码,我将它用作原型。但是,每当我尝试在main函数中调用它时,我的程序就会崩溃。我使用其中两个原型(得分1和得分2),因为我需要2个不同的分数。我应该只使用一个吗?这是一个骰子游戏,可以拍摄6个骰子,我想为每个数字分配一个值。

int score1( void) {
int roll1[6];
int sum = 0;
int i;
sum = roll1[0]+ roll1[1]+ roll1[2]+ roll1[3]+ roll1[4]+ roll1[5];
if( roll1[0]==1) {
    roll1[0]=100;
}else if (roll1[0]== 5){
roll1[0]= 50;
}else if( (roll1[0]!=1) || ( roll1[0]!= 5) ){
    roll1[0]=0;
}
 if( roll1[1]==1) {
    roll1[1]=100;
}else if (roll1[1]== 5){
roll1[1] =  50;
}else if( (roll1[1]!=1) || ( roll1[1]!= 5) ){
    roll1[1] =  0;
}
 if( roll1[2]==1) {
    roll1[2] =  100;
}else if (roll1[2]== 5){
roll1[2] =  50;
}else if( (roll1[2]!=1) || ( roll1[2]!= 5) ){
    roll1[2] = 0;
} if( roll1[3]==1) {
    roll1[3] =100;
}else if (roll1[3]== 5){
roll1[3] = 50;
}else if( (roll1[3]!=1) || ( roll1[3]!= 5) ){
    roll1[3] = 0;
}
if( roll1[4]==1) {
    roll1[4] = 100;
}else if (roll1[4]== 5){
roll1[4] = 50;
}else if( (roll1[4]!=1) || ( roll1[4]!= 5) ){
   roll1[4] = 0;
} if( roll1[5]==1) {
    roll1[5] = 100;
}else if (roll1[5]== 5){
roll1[5] = 50;
}else if( (roll1[5]!=1) || ( roll1[5]!= 5) ){
    roll1[5] = 0;
}
if((roll1[i]==roll1[i+1]) && (roll1[i+1]==roll1[i+2])) {
    sum = (100*i)+roll1[i+3]+roll1[i+4]+roll1[i+5];
}
if((roll1[i]==roll1[i+1])&&(roll1[i+1]==roll1[i+2])&&(roll1[i+2]== roll1[i+3])) {
    sum = (2*(100*i))+roll1[i+4]+roll1[i+5];
}
if((roll1[i]==roll1[i+1])&&(roll1[i+1]==roll1[i+2])&&(roll1[i+2]== roll1[i+3])&&(roll1[i+3]==roll1[i+4])) {
    sum = (4*(100*i))+roll1[i+5];
}
if((roll1[i]==roll1[i+1])&& (roll1[i+1]==roll1[i+2])&&(roll1[i+2]== roll1[i+3])&& (roll1[i+3]==roll1[i+4])&& (roll1[i+4]== roll1[i+5])) {
    sum = 8*(100*i);
}
if((roll1[0]==1)&& (roll1[1]==2) && (roll1[2]==3)&& (roll1[3]==4)&& (roll1[4]== 5) && (roll1[5]==6)){
    sum = 1500;
}
return sum;

}

1 个答案:

答案 0 :(得分:1)

的Bam!从未初始化的值中读取每次都会杀了你:

int roll1[6];
...
sum = roll1[0]+ roll1[1]+ roll1[2]+ roll1[3]+ roll1[4]+ roll1[5];
...

此时roll1[0]+...的值是多少?编译器不知道并飞到Undefined Behavior - 崩溃是一种选择。在设置roll1[6]中每个元素的值之前,尝试从没有值的元素中读取值是不好的(您会看到结果)。

两件事。 1。 始终使用警告进行编译。-Wall -Wextra)至少。 2。 始终初始化变量,如果没有其他初始值,则。以下内容将防止未定义的行为。

int roll1[6] = { 0 };