C 迷你游戏总数不合计

C 迷你游戏总数不合计,c,C,长话短说,我目前正在学习C编程,今天我正在尝试构建一个迷你游戏,根据玩家掷骰子的结果计算玩家总数 我有一个程序的功能,它提示用户输入,并比较他们的卷,以确保他们输入了正确的信息 我遇到的问题是,显示在程序末尾的总数似乎没有加起来。无论输入的结果如何,总值始终为1 有人能把我引向正确的方向吗 多谢各位 #include <stdio.h> int main(void) { int R1, R2, R3; int totalScore = 0; puts("W

长话短说,我目前正在学习C编程,今天我正在尝试构建一个迷你游戏,根据玩家掷骰子的结果计算玩家总数

我有一个程序的功能,它提示用户输入,并比较他们的卷,以确保他们输入了正确的信息

我遇到的问题是,显示在程序末尾的总数似乎没有加起来。无论输入的结果如何,总值始终为1

有人能把我引向正确的方向吗

多谢各位

#include <stdio.h>
int main(void)
{

    int R1, R2, R3;
    int totalScore = 0;

    puts("Welcome to CRAZY dice game!");

    puts("Enter Roll 1 Value: ");
    scanf("%d", &R1);

    while (R1 < 1 || R1 > 6) {
        puts("Value is outside accepted input, try again: ");
        scanf("%d", &R1);
    }

    puts("Enter Roll 2 Value: ");
    scanf("%d", &R2);

    while (R2 < 1 || R2 > 6) {
        puts("Value is outside accepted input, try again: ");
        scanf("%d", &R2);
    }

    puts("Enter Roll 3 Value: ");
    scanf("%d", &R3);

    while (R3 < 1 || R3 > 6) {
        puts("Value is outside accepted input, try again: ");
        scanf("%d", &R3);

    }

    if (R1 == 1 || 2) {
        totalScore = totalScore + 1;
    }
    else if (R1 == 3 || 4) {
        totalScore = totalScore + 2;
    }
    else if (R1 == 5 || 6) {
        totalScore = totalScore + 3;
    }


    if (R2 < R1) {

        switch (R2){

            case '1':
            case '2':
                totalScore = totalScore + 1;

            case '3':
            case '4':
                totalScore = totalScore + 2;

            case '5':
            case '6':
                totalScore = totalScore + 3;
        }
    }


    else {
        totalScore = totalScore;
    }


    if (R3 < R2) {

        switch (R3){

            case '1':
            case '2':
                totalScore = totalScore + 2;

            case '3':
            case '4':
                totalScore = totalScore + 4;

            case '5':
            case '6':
                totalScore = totalScore + 6;
        }
    }

    else if (R3 < R1) {

        switch (R3){

            case '1':
            case '2':
                totalScore = totalScore + 1;

            case '3':
            case '4':
                totalScore = totalScore + 2;

            case '5':
            case '6':
                totalScore = totalScore + 3;

        }
    }

    printf("Total Score is: %d", totalScore);
}
#包括
内部主(空)
{
int R1,R2,R3;
整数总分=0;
puts(“欢迎参加疯狂骰子游戏!”);
放置(“输入滚动1值:”);
scanf(“%d”和&R1);
而(R1<1 | | R1>6){
puts(“值在接受的输入之外,请重试:”;
scanf(“%d”和&R1);
}
放置(“输入滚动2值:”);
scanf(“%d”和&R2);
而(R2<1 | | R2>6){
puts(“值在接受的输入之外,请重试:”;
scanf(“%d”和&R2);
}
放置(“输入滚动3值:”);
scanf(“%d”和&R3);
而(R3<1 | | R3>6){
puts(“值在接受的输入之外,请重试:”;
scanf(“%d”和&R3);
}
如果(R1==1 | | 2){
总分=总分+1;
}
else if(R1==3 | | 4){
总分=总分+2;
}
否则如果(R1==5 | | 6){
总分=总分+3;
}
if(R2
这并不像您认为的那样:

if (R1 == 1 || 2)
它需要写成:

if (R1 == 1 || R1 == 2)
其他情况也是如此

开关
s中还有两个问题-您似乎缺少
break
语句,并且您已将
大小写
标签当作字符来编写,例如

    case '1':
    case '2':
        totalScore = totalScore + 2;
应该是:

    case 1:
    case 2:
        totalScore = totalScore + 2;
        break;
(除非您真的打算“跳转”到下一个案例标签?)。

问题:
  • 这些:

    if (R1 == 1 || 2)
    else if (R1 == 3 || 4)
    else if (R1 == 5 || 6)
    
    没有达到你的期望。他们应该是

    if (R1 == 1 || R1 == 2)
    else if (R1 == 3 || R1 == 4)
    else if (R1 == 5 || R1 == 6)
    
  • 这:

    switch (R2){
    
        case '1':
        case '2':
            totalScore = totalScore + 1;
    
        case '3':
        case '4':
            totalScore = totalScore + 2;
    
        case '5':
        case '6':
            totalScore = totalScore + 3;
    }
    
    else {
        totalScore = totalScore;
    }
    
    应该是

    if (R1 == 1 || R1 == 2)
    else if (R1 == 3 || R1 == 4)
    else if (R1 == 5 || R1 == 6)
    
    switch (R2){
    
        /* Remove the '' as R2 is not a character, but an integer */
        /* Add breaks so that execution does not slip into subsequent cases */
        case 1:
        case 2:
            totalScore = totalScore + 1;
            break;
    
        case 3:
        case 4:
            totalScore = totalScore + 2;
            break;        
    
        case 5:
        case 6:
            totalScore = totalScore + 3
            break;
    }
    
    其他的
    开关箱也一样

  • 建议:
  • 这是大量重复的代码:

    puts("Enter Roll 1 Value: ");
    scanf("%d", &R1);
    
    while (R1 < 1 || R1 > 6) {
        puts("Value is outside accepted input, try again: ");
        scanf("%d", &R1);
    }
    
    puts("Enter Roll 2 Value: ");
    scanf("%d", &R2);
    
    while (R2 < 1 || R2 > 6) {
        puts("Value is outside accepted input, try again: ");
        scanf("%d", &R2);
    }
    
    puts("Enter Roll 3 Value: ");
    scanf("%d", &R3);
    
    while (R3 < 1 || R3 > 6) {
        puts("Value is outside accepted input, try again: ");
        scanf("%d", &R3);
    }
    
    或者在
    main
    中使用数组,如:

    int R[3];
    
    而不是

    int R1, R2, R3;
    
    以便您可以使用:

    int i;
    for(i = 0; i < 3; i++)
    {
        R[i] = getVal();
    }
    
    什么都不做。移除它


  • 所以,当对变量使用OR语句时,我需要在两侧对变量进行分类?真不敢相信我竟然忘了休息。。。这就是我在凌晨2点尝试这样做的结果。谢谢。@MichaelRice“所以当对变量使用OR语句时,我需要对两边的变量进行分类?”--是的。您是否也可以添加一些场景,包括实际输入和实际输出与预期输出的对比。如果您编辑您的问题以包括您的程序应该做什么,我可以提出更多建议。
    else {
        totalScore = totalScore;
    }