【问题标题】:Simple switch and case, related to cards, C language简单的switch和case,与卡片相关,C语言
【发布时间】:2020-06-27 03:52:00
【问题描述】:

我正在尝试做一个将卡片与数字相关联的程序。 我先问花色,(红心、黑桃、方块、梅花) 然后是它的值(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;

【问题讨论】:

  • 您的编译器没有收到警告吗?
  • 从第二个 switch 块中删除单引号。那就是'1' 应该只是1 等等。
  • 不,我顺便使用了代码块...为什么?
  • 事实上,您可以删除整个switch 块。 valor已经是int,可以直接使用。
  • 感谢老兄的帮助,也许它的读数像 char 值...

标签: c playing-cards


【解决方案1】:

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

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

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

【讨论】:

  • 正是问题所在,非常感谢老兄的帮助,真的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-29
  • 2020-01-01
  • 2016-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多