C 中的案例/开关不起作用

标签 c switch-statement

我正在为学校制作游戏,这是一个基本的老虎机,它会随机生成数字并将数字转换为单独数组中的字符。这似乎不起作用,因为语句被完全忽略了。它没有提供正确的输出,有时它们会变成空白。

输出:http://distorts.me/imgs/files/132ca7cc1da6fc459de3e498d8e12b9f.png

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
/*
George Mason
Slots
Date Started: 4/25/16
Date Finished:
Dr K.
*/
void loadScreen();
void spacer();
void tabSpacer();
void clearScr();
int printMachine(char*, int);
int randomNum(int*, int);
int convertNum(int*, char*, int);
int rand_int();
void game();
int main(){
    srand(time(NULL));
    int stop;
    loadScreen();
    clearScr();
    game();
    scanf("%d", &stop);
}
void game(){
    int tokens = 5, randomNums[9], x, y = 9;
    char randomChars[9], userInput;
    randomNum(randomNums, 9);
    convertNum(randomNums, randomChars, 9);
    printMachine(randomChars, 9);

}
int printMachine(char* randomChars, int y){
    printf("-------------\n");
    printf("| %c | %c | %c | \n", randomChars[0], randomChars[1], randomChars[2]);
    printf("| %c | %c | %c | \n", randomChars[3], randomChars[4], randomChars[5]);
    printf("| %c | %c | %c | \n", randomChars[6], randomChars[7], randomChars[8]);
    printf("-------------");
}
int randomNum(int* randomNums, int y){
    int x,a = 0, b = 9;
    for(x = 0; x < y; x++){
        randomNums[x] = ((rand() % (b-a+1)) + a);
    }
}
int convertNum(int* randomNums, char* randomChars, int y){
    int x;
    for(x = 0; x < 9; x++){
            switch(randomNums[x]){
                case 1:
                     randomChars[x] = '@';
                     break;
                case 2:
                     randomChars[x] = '#';
                     break;
                case 3:
                     randomChars[x] = '$';
                     break;
                case 4:
                     randomChars[x] = '+';
                     break;
                case 5:
                     randomChars[x] = '&';
                     break;
                case 6:
                     randomChars[x] = '*';
                     break;
                case 7:
                     randomChars[x] = '?';
                     break;
                case 8:
                     randomChars[x] = '!';
                     break;
                case 9:
                     randomChars[x] = '~';
                     break;
                default:
                     randomChars[x] = 'e';
                     break;
          } 
    }
}
void loadScreen(){
     int x;
     for(x = 0; x < 3; x++){
         spacer();
     }
     tabSpacer();
     printf("Please wait 5 seconds while we load the saved data.\n");
     tabSpacer();
     printf("   If there is no saved data one will be created.");
     sleep(5);
}
void spacer(){
     int x;
     for(x = 0; x < 3; x++){
           printf("\n");
     }
}
void tabSpacer(){
     printf("\t    ");
}
void clearScr(){
     system("cls");
}

最佳答案

您忘记了在每个案例之后保留 break;,因此它将运行所有案例,即从案例 1 到案例 9。
最后它将保存 randomChars[x] = '~';(案例 9)。

case 1:
    randomChars[x] = '@';
    break;
case 2:
    randomChars[x] = '#';
    break;
    .
    .
    .
    .

case 7:
    randomChars[x] = '?';
    break;
case 8:
    randomChars[x] = '!';
    break;
case 9:
    randomChars[x] = '~';
    break;

编辑:

  • 当您不返回任何值时,为什么您的函数返回类型是 int。将 int 更改为 void

  • 函数 game() 没有在 main() 之前声明

  • 我得到这样的输出:
    enter image description here

关于C 中的案例/开关不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36929322/

相关文章:

c - 解释 C 中的一些函数

在C中比较两个数据文件的int值

c - 程序未收到所需的输入

java - 使用 switch 语句运行方法时出现 StackOverflowError

javascript - 如何滑动 div 并在每次单击 google-slide 时显示不同的内容?

java - 如何使用设计模式代替开关盒

c - Windows 和 Linux 系统如何实现物理到虚拟 IRQ 映射?

c - 通过 C 中的空格将用户输入的字符串拆分为单独的标记

java - 何时在 Java 中使用 switch 语句

c - 两个不同的 pragma for-s 之间是否有障碍