2016-04-29 3 views
0

Я делаю игру для школы, это базовый игровой автомат, который будет случайным образом генерировать числа и преобразовывать числа в символы в отдельном массиве. Кажется, что это не работает, поскольку утверждение полностью игнорируется. Это не дает правильного выхода, и некоторое время они просто перейдут к пробелам.Case/Switch in C не работает

Выход: 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"); 
} 
+0

Кроме того, вы, кажется, забыли использовать 'y' в нескольких функций , Кроме того, добавьте 'srand (time (NULL));' в начале 'main'. –

+0

@CoolGuy кажется, что я все еще получаю тот же результат. Я обновил код в сообщении – Distorts

ответ

5

Вы забыли сохранить 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; 

EDIT:

  • почему ваша функция возвращает тип int, когда вы не возвращает значение. изменить int до void.

  • функция game() не объявлена ​​до main()

  • Я получаю выход, как это:
    enter image description here

+0

Мой вывод по-прежнему кажется таким же – Distorts

+0

^^^^^^, пожалуйста, прочитайте, что – Distorts

+0

, пожалуйста, прочитайте, я не могу определить – Distorts

Смежные вопросы