c - 我应该使用 2 个原型(prototype),还是只使用 1 个?

标签 c arrays

我正在尝试为我的游戏创建一个评分系统。这是我的代码,我将其用作原型(prototype)。然而,每次我尝试在主函数中调用它时,我的程序都会崩溃。我使用其中 2 个原型(prototype)(score1 和 Score2),因为我需要 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;

}

最佳答案

嘭!每次读取未初始化的值都会杀死你:

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

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

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

int roll1[6] = { 0 };

关于c - 我应该使用 2 个原型(prototype),还是只使用 1 个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27353040/

相关文章:

cuda - 零拷贝内存,内存映射文件

c - 尝试执行缓冲区溢出攻击时获取 SIGILL

c - 如何使用 open 以 "append"模式打开文件?打开?

c - 如何在 `c`中获取 `GCC`程序的抽象语法树

javascript - if 条件中的递归混淆,JS 是如何解释 "truthly/falsely"条件的?

javascript - JavaScript 中的聚合记录

javascript - 找出数组中缺失的字母

php - 在postgres中的多行中插入数组

java - 通过哈希码比较两个数组

python - 访问 PyObject 的底层结构