首页 > 解决方案 > 简单的switch和case,与卡片相关,C语言

问题描述

我正在尝试做一个将卡与数字相关联的程序。我首先问花色(红桃、黑桃、方块、梅花)然后问它的价值(ace-1、2、3...K-13)。当我执行这个程序时,它总是返回数字 0,你能帮帮我吗?抱歉,对于西装或价值观的混淆词,我希望它不会给您带来任何问题。顺便说一句,葡萄牙西装:naipes;价值观:勇气;

#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;

标签: cplaying-cards

解决方案


valor是一个int。它的值是1, 2, 3, 等等,但在案例标签中,您有'1', '2', '3', 等等。这些是字符“1”、“2”、“3”等,而不是整数值 1、2 和 3。将大小写标签更改为case 1:case 2:case 3:等。或者,更好的是,简单地value用作要添加的值:由于它已经是所需的值,因此没有理由使用 aswitch对其进行解码。(您可能希望添加代码来检查它是否在 1 到 13 的范围内,如果不是则警告用户。类似地,switchfornaip可能有一个default案例,如果西装未被识别,则警告用户。你应该检查每个scanf返回 1,表示它成功转换了一个输入。)

例如字符的值是'1'字符集中的代码,例如'1'ASCII 中的 49。Socase '1':等价于case 49:(当使用 ASCII 时),并且不会匹配valor1 到 13 的值。

此外,当“单引号”中有两个字符时,如'10',则形成一个多字符常量。它的值是实现定义的。这种形式很少有任何用途。


推荐阅读