【问题标题】:Converting struct numbers into letters in C?在C中将结构数字转换为字母?
【发布时间】:2023-04-01 02:21:01
【问题描述】:

我想读取 15 个数字,然后将它们转换为字母,例如: 1 = A,2 = B,3 = C,4 = D... 我这里有这个结构:

struct Num {    
    int number;
    char letter;
};

struct Num num[150];

这是读取数字:

void read_num() {
    int i;
    for (i = 0; i < 15; i++) {
        printf("Insert number\n");
        scanf("%d", &num[i].number);
        fflush(stdin); 
    }
}

现在我需要一些东西来将每个数字转换成一个字母,我确实创建了一个包含 25 个 if 的巨大函数,但它似乎不起作用。 顺便说一句,我只需要转到号码25,所以它在字母表中的 A 到 Y。 不起作用的功能是这样的:

void convert() {    
    int i, ii;
    for (i = 0; i < 15; i++) {
        if (num[i].number = 1){
            num[i].letter = "A";
        } else
        if (num[i].number = 2) {
            num[i].letter = "B";
        } else
        if (num[i].number = 3) {
            num[i].letter = "C";
        } else
        if (num[i].number = 4) {
            num[i].letter = "D";
        } else
        if (num[i].number = 5) {
            num[i].letter = "E";
        ...
        }
    }
}

我在 Windows 和 C 编程中使用 Dev C++,我知道这是一个菜鸟问题,但请帮忙!

【问题讨论】:

  • fflush(stdin); 是 UB,删除它。
  • 哦,好的,继续。

标签: c letters-and-numbers


【解决方案1】:

1) 永远不要使用 fflush(stdin),这是未定义的行为 = 在 C 编程中可能发生在您身上的最糟糕的事情。

2) 使用== 进行比较,例如:if (num[i].number == 5)

3) "a" 是一个const char[2] 类型的字符串文字。你想要一个char,用单引号括起来:'a'

话虽如此,在当今使用的几乎所有编码中,字母都是按字典顺序排列的,因此您可以使用num[i].letter = (char)(num[i].number + 'A' - 1),只要您确定num[i].number 在您想要的范围内。如果没有,您将需要条件,但使用 switch 构造会更好,如下所示:

switch (num[i].number)
{
    case 1:
        num[i].letter = 'A';
    break;

    ...
}

顺便说一句,请不要使用 Dev-C++,它已经过时并且不再维护。如果您想继续使用 MinGW,您可以使用 Code::Blocks,或者您可以使用 Visual C++ 的社区版本之一,它是免费的(也可用于编译 C 代码)。

【讨论】:

  • 我用 C b4 编程已经有一段时间了,我只是注意到我的代码现在看起来有多糟糕,哈哈,现在要测试一下
【解决方案2】:

您可以将 char 视为数字类型(其中 'A' 是字符 65)。

所以'A' = 'A' + 0,'B' = 'A' + 1 等等。

num[i].letter = 'A' + num[i].number - 1;

(注意使用单引号将单个字符括起来,双引号用于字符串 - 0个或多个字符)

【讨论】:

    猜你喜欢
    • 2012-03-31
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    • 2011-05-30
    相关资源
    最近更新 更多