#include <stdio.h> #include <stdlib.h> void funcb(int a,char* b) { int i=0; int j,k; char buff[50]; while(a!=0) { b[i]=a%2+'0'; a=a/2; i++; } #if 1 j=i-1; for(k=0;k<i;k++) { buff[k]=b[j]; j--; } #endif printf("%s\n",buff); } void funcd(int a,char* b) { int i=0; int j,k; char buff[50]; while(a!=0) { b[i]=a%10+'0'; a=a/10; i++; } #if 1 j=i-1; for(k=0;k<i;k++) { buff[k]=b[j]; j--; } #endif printf("%s\n",buff); } void funch(int a,char* b) { int i=0; int j,k; char buff[50]; while(a!=0) { if(a%16<10) { b[i]=a%16+'0'; a=a/16; i++; } else { b[i]=a%16-10+'A'; i++; } } #if 1 j=i-1; for(k=0;k<i;k++) { buff[k]=b[j]; j--; } #endif printf("%s\n",buff); } int main() { int a; scanf("%d",&a); char b[50]; char d[50]; char h[50]; //funcb(a,b); //funcd(a,b); funch(a,b); return 0; }上述代码输入123,函数无法正确输出十六进制,应该怎么改
时间: 2023-12-03 20:42:38 浏览: 77
问题出在输出时并没有使用正确的字符数组。在函数中虽然将转换后的结果存入了字符数组b中,但在输出时却直接输出了buff数组,而buff数组并没有正确的存储转换后的结果。
可以将函数中的printf语句改为输出字符数组b即可:
```
void funch(int a,char* b) {
int i=0;
while(a!=0)
{
if(a%16<10)
{
b[i]=a%16+'0';
a=a/16;
i++;
}
else
{
b[i]=a%16-10+'A';
i++;
}
}
b[i]='\0'; // 添加字符串结束符
int j=i-1;
for(int k=0;k<i;k++)
{
printf("%c",b[j]);
j--;
}
}
```
同时,为了避免输出时出现未知字符,还需要在字符数组的末尾添加一个字符串结束符`\0`。
相关问题
在主函数的最开始会初始化一个全部变量 g_i4event 为 0。 本关的编程任务是补全右侧代码片段中两段Begin至End中间的代码,具体要求如下: 在 do _signal中分别为信号 SIGUSR1 、 SIGUSR2 注册信号处理函数 funcA 和 funcB ,而后将 g_i4event 置为 1; 完成两个信号处理函数,其中 funcA 中将 g_i4event 置为 2, funcB 中将 g_i4event 为 3。#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <signal.h> int g_i4event; typedef void (*sighandler_t)(int); /********Begin********/ /*实现funcA和funcB*/ /*********End*********/ int do_signal(void) { /********Begin********/ /*********End*********/ }
下面是代码实现:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>
int g_i4event;
typedef void (*sighandler_t)(int);
void funcA(int signum) {
g_i4event = 2;
}
void funcB(int signum) {
g_i4event = 3;
}
int do_signal(void) {
signal(SIGUSR1, funcA);
signal(SIGUSR2, funcB);
g_i4event = 1;
}
需要注意的是,信号处理函数要求是 void 类型,参数是 int 类型的信号编号。在这个问题中,我们需要实现两个信号处理函数 funcA 和 funcB,并在函数 do_signal 中分别为 SIGUSR1 和 SIGUSR2 注册这两个信号处理函数,同时将 g_i4event 置为 1。
阅读全文