打印由数字和字母组成的 int 数组
Printing int array consisiting of both numbers and letters
我正在用 C 编写一个将十进制整数转换为十六进制的基本函数,但我对数据类型的组合感到困惑。我得到随机数作为输出。
- 我知道数组中有字符和数字,但只有数字在打印。
- 行不行
char k=j+55;
bb[i] = k;
有待改进?
下面是函数
int decToHex(int b){
int bb[50];
int i=0,j=0;
while(b!=0){
j=b%16;
if(j>9){
char k=j+55;
bb[i] = k;
}
else {
bb[i] = j;
}
b = b/2;
i++;
}
for(j=i-1; j>=0; j--){
printf("%s",bb[j]);
}
}
看起来你真的想创建一个字符数组:
char b[50];
这样写可能更清楚
char k = j - 10 + 'A';
你可能想要替换
// bb[i] = j
bb[i] = j + '0'
除以2将用于转换为二进制,您需要除以16:
// b = b / 2;
b = b / 16;
最后输出的行大概应该是
printf("%c", bb[j]);
您可能想在输出循环后打印换行符:
printf("\n");
函数签名需要一个整数 return,但我需要更多信息才能告诉您如何修复它。现在,我们只是 return 零。
通过这些最小的更改,我们得到
#include <stdio.h>
int decToHex(int b){
char bb[50];
int i=0,j=0;
while(b!=0){
j=b%16;
if(j>9){
char k = j - 10 + 'A';
bb[i] = k;
}
else {
bb[i] = j + '0';
}
b = b/16;
i++;
}
for(j=i-1; j>=0; j--){
printf("%c", bb[j]);
}
printf("\n");
return 0;
}
int main(void) {
decToHex(1000);
return 0;
}
输出
3E8
首先,你必须将 b 除以 16。因为它是十六进制。
其次,如果j <= 9,则需要在j中添加'0'(ascii码48)。
而你的函数 return 什么都没有,所以 return 类型必须无效。 bb[j] 是 char,不是 char[]。格式字符串必须是 %c.
解决方案:
#include <stdio.h>
void decToHex(int b) {
int bb[50];
int i = 0, j = 0;
while (b != 0) {
j = b % 16;
char k;
if (j > 9) {
k = j - 10 + 'A';
} else {
k = j + '0';
}
bb[i] = k;
b = b / 16;
i++;
}
for (j = i - 1; j >= 0; j--) {
char c = bb[j];
printf("%c", c);
}
}
如果你想创建一个可以存储 char
和 int
的数组,我们需要一个可以同时容纳两者的特殊类型。我选择了 struct
和 union
:
mixed_type.h
#ifndef MIXED_TYPE_H
#define MIXED_TYPE_H
typedef enum {
CHAR = 0,
INT
} type_t;
typedef struct {
type_t type;
union {
int number;
char letter;
};
} entry_t;
#endif
main.c
#include <stdio.h>
#include "mixed_type.h"
void decToHex(int decimal) {
int hex_digits = 0, copy_decimal = decimal;
while (copy_decimal) { ++hex_digits; copy_decimal /= 16; }
entry_t result[hex_digits];
int index = hex_digits - 1;
while (decimal) {
int nibble = decimal % 16;
if (nibble >= 10) {
result[index].type = CHAR;
result[index].letter = nibble - 10 + 'A';
}
else {
result[index].type = INT;
result[index].number = nibble;
}
--index;
decimal /= 16;
}
for (index = 0; index < hex_digits; index++) {
if (result[index].type == CHAR)
printf("%c", result[index].letter);
else
printf("%d", result[index].number);
}
printf("\n");
}
int main(void) {
decToHex(1000);
return 0;
}
输出
3E8
通过将新类型放在单独的头文件中,我们可以使其更易于重用。
我正在用 C 编写一个将十进制整数转换为十六进制的基本函数,但我对数据类型的组合感到困惑。我得到随机数作为输出。
- 我知道数组中有字符和数字,但只有数字在打印。
- 行不行
char k=j+55;
bb[i] = k;
有待改进?
下面是函数
int decToHex(int b){
int bb[50];
int i=0,j=0;
while(b!=0){
j=b%16;
if(j>9){
char k=j+55;
bb[i] = k;
}
else {
bb[i] = j;
}
b = b/2;
i++;
}
for(j=i-1; j>=0; j--){
printf("%s",bb[j]);
}
}
看起来你真的想创建一个字符数组:
char b[50];
这样写可能更清楚
char k = j - 10 + 'A';
你可能想要替换
// bb[i] = j
bb[i] = j + '0'
除以2将用于转换为二进制,您需要除以16:
// b = b / 2;
b = b / 16;
最后输出的行大概应该是
printf("%c", bb[j]);
您可能想在输出循环后打印换行符:
printf("\n");
函数签名需要一个整数 return,但我需要更多信息才能告诉您如何修复它。现在,我们只是 return 零。
通过这些最小的更改,我们得到
#include <stdio.h>
int decToHex(int b){
char bb[50];
int i=0,j=0;
while(b!=0){
j=b%16;
if(j>9){
char k = j - 10 + 'A';
bb[i] = k;
}
else {
bb[i] = j + '0';
}
b = b/16;
i++;
}
for(j=i-1; j>=0; j--){
printf("%c", bb[j]);
}
printf("\n");
return 0;
}
int main(void) {
decToHex(1000);
return 0;
}
输出
3E8
首先,你必须将 b 除以 16。因为它是十六进制。
其次,如果j <= 9,则需要在j中添加'0'(ascii码48)。
而你的函数 return 什么都没有,所以 return 类型必须无效。 bb[j] 是 char,不是 char[]。格式字符串必须是 %c.
解决方案:
#include <stdio.h>
void decToHex(int b) {
int bb[50];
int i = 0, j = 0;
while (b != 0) {
j = b % 16;
char k;
if (j > 9) {
k = j - 10 + 'A';
} else {
k = j + '0';
}
bb[i] = k;
b = b / 16;
i++;
}
for (j = i - 1; j >= 0; j--) {
char c = bb[j];
printf("%c", c);
}
}
如果你想创建一个可以存储 char
和 int
的数组,我们需要一个可以同时容纳两者的特殊类型。我选择了 struct
和 union
:
mixed_type.h
#ifndef MIXED_TYPE_H
#define MIXED_TYPE_H
typedef enum {
CHAR = 0,
INT
} type_t;
typedef struct {
type_t type;
union {
int number;
char letter;
};
} entry_t;
#endif
main.c
#include <stdio.h>
#include "mixed_type.h"
void decToHex(int decimal) {
int hex_digits = 0, copy_decimal = decimal;
while (copy_decimal) { ++hex_digits; copy_decimal /= 16; }
entry_t result[hex_digits];
int index = hex_digits - 1;
while (decimal) {
int nibble = decimal % 16;
if (nibble >= 10) {
result[index].type = CHAR;
result[index].letter = nibble - 10 + 'A';
}
else {
result[index].type = INT;
result[index].number = nibble;
}
--index;
decimal /= 16;
}
for (index = 0; index < hex_digits; index++) {
if (result[index].type == CHAR)
printf("%c", result[index].letter);
else
printf("%d", result[index].number);
}
printf("\n");
}
int main(void) {
decToHex(1000);
return 0;
}
输出
3E8
通过将新类型放在单独的头文件中,我们可以使其更易于重用。