1

我正在做一个开关案例,其中案例值需要是二进制数字01,010,0100,0,00,000,,依此类推。

switch(Code)
{
          case 0:
               {
                   printf("A");
                   break;
                   }
          case 00:
               {
                   printf("B");
                   break;
                   }
          case 000:
               {
                   printf("C");
                   break;
}

我知道如果我输入000,它将被存储为0。我的问题是你如何输入000以便我可以得到printf("C")

4

3 回答 3

3

我无法想象您为什么要区分这些数字,因为在任何表示中它们都是相同的数字,但我想您将不得不将它们作为字符串进行检查。您不能将字符串放入 C 中的 switch 语句中,因此您只需要有一系列 if/else 语句:

void selectString(char *input)
{
    if(strcmp(input, "0") == 0)
    {
        printf("A");
    }
    else if(strcmp(input, "00") == 0)
    {
        printf("B");
    }
    else if(strcmp(input, "000") == 0)
    {
        printf("C");
    }
}

话虽如此,你所问的问题看起来很像一个XY 问题,也就是说,你在问如何做奇怪的事情 Y,因为你认为你需要这样做来解决 X。你想做什么?

于 2012-08-10T15:29:59.827 回答
3

您的问题是您有一系列要解码的位(线上的信号)。但是您不知道您的信息包何时开始。您在编码中缺少的是字母的开头。(您也没有单词开头,我建议编一个未使用的数字来表示单词之间的空格)。

在您的程序中,建议在每个系列的位前加上 1 个起始位(请注意,这实际上并没有被传输,而是隐含的,因为没有传输任何内容的持续时间)。那么您的值是 10、100 和 1000。您可以轻松地以二进制表示形式比较它们。请注意,最小的有效位系列是字母“e”,二进制为 10。单个 1 位不是有效值。只看这里的摩尔斯电码条目,字母表就形成了一个编号系统,可以存储在查找表中以便快速实现。

于 2012-08-10T16:14:45.457 回答
0

鉴于您在变量中将其用于 Morse(我猜 0 = 点,1 = 破折号)。“代码”必须是字符串。

switch(Code)
{
    case "01":   //".-"
        printf("A");
        break;
    case "100":   //"-.."
        printf("B");
        break;
    case "0001":   //"...-"
        printf("V");
    break;
}
于 2012-11-06T17:32:00.993 回答