Простой переключатель и кейс, относящийся к карточкам, C язык - PullRequest
0 голосов
/ 16 марта 2020

Я пытаюсь создать программу, которая связывает карту с номером. Я начинаю с вопроса о костюме (сердца, пики, алмазы, булавы), а затем о его стоимости (туз-1, 2, 3 ... К-13). Когда я выполняю эту программу, она всегда возвращает мне число 0, вы можете мне помочь? Извините за запутанные слова для костюмов или ценностей, я надеюсь, что это не доставит вам проблем. Кстати, в португальских костюмах: кеды; значения: доблесть;

#include <stdio.h>
#include <stdlib.h>

char naipe;//suit
int valor;//value (ace,1,queen...)
int num;//nunumber associated to the card in question
int main(){
int naip, val;
scanf("%c", &naipe);
scanf("%d", &valor);
switch (naipe){

case 'C':
        naip= 0;
        break;
case 'E':
        naip= 13;
        break;
case 'O':
        naip= 26;
        break;
case 'P':
        naip= 39;
        break;
return naip;
        }

switch (valor){

case '1':
        val= 1;
        break;
case '2':
        val= 2;
        break;
case '3':
        val= 3;
        break;
case '4':
        val= 4;
        break;
case '5':
        val= 5;
        break;
case '6':
        val= 6;
        break;
case '7':
        val= 7;
        break;
case '8':
        val= 8;
        break;
case '9':
        val= 9;
        break;
case '10':
        val= 10;
        break;
case '11':
        val= 11;
        break;
case '12':
        val= 12;
        break;
case '13':
        val= 13;
        break;
return val;
}
num= (naip + val);

printf("%d", num);
return 0;

1 Ответ

1 голос
/ 16 марта 2020

valor является int. Его значения: 1, 2, 3 и т. Д., Но в метках дел у вас есть '1', '2', '3' и т. Д. Это символы «1», «2», «3» и т. Д., А не целые значения 1, 2 и 3. Измените метки регистра на case 1:, case 2:, case 3: и т. Д. Или, лучше, просто используйте value в качестве добавляемого значения: поскольку это уже желаемое значение, нет смысла использовать switch для его декодирования. (Вы можете добавить код sh, чтобы проверить, находится ли он в диапазоне от 1 до 13, и admoni sh пользователя, если это не так. Аналогично, switch для naip может иметь default случаев который предупреждает пользователя, если костюм не распознан. И вы должны проверить, что каждый scanf возвращает 1, указывая, что он успешно преобразовал один вход.)

Значения символов, таких как '1', являются кодами в набор символов, например 49 для '1' в ASCII. Таким образом, case '1': эквивалентно case 49: (при использовании ASCII) и не будет соответствовать значению valor от 1 до 13.

Также, когда в «одинарных кавычках» есть два символа как в '10', это формирует многосимвольную константу. Его значение определяется реализацией. Редко можно использовать такую ​​форму.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...