将结构数转换为C中的字母?

时间:2016-01-19 21:22:47

标签: c letters-and-numbers

我想读取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); 
    }
}

现在我需要一些东西将每个数字转换成一个字母,我确实用二十五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 ++,我知道这是一个noob问题,但请帮忙!

2 个答案:

答案 0 :(得分:4)

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代码)。

答案 1 :(得分:3)

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

所以'A'= <connectionStrings> <add name="PracticeDB" connectionString="Data Source=81.211.69.78; Initial Catalog=Practice; Integrated Security=True; MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" /> </connectionStrings> ,'B'= 'A' + 0等。

'A' + 1

(注意使用单引号括起一个char,双引号用于字符串 - 包含0个或更多字符)