将结构数字转换为 C 中的字母?
Converting struct numbers into letters in C?
我想读取 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++,我知道这是一个菜鸟问题,但请帮忙!
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 代码)。
您可以将 char 视为数字类型(其中 'A' 是字符 65)。
所以'A' = 'A' + 0
, 'B' = 'A' + 1
等等
num[i].letter = 'A' + num[i].number - 1;
(注意使用单引号将单个字符括起来,双引号用于包含 0 个或更多字符的字符串)
我想读取 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++,我知道这是一个菜鸟问题,但请帮忙!
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 代码)。
您可以将 char 视为数字类型(其中 'A' 是字符 65)。
所以'A' = 'A' + 0
, 'B' = 'A' + 1
等等
num[i].letter = 'A' + num[i].number - 1;
(注意使用单引号将单个字符括起来,双引号用于包含 0 个或更多字符的字符串)