当使用fprintf时,我在输出中得到了字符的镜像数组

时间:2019-06-05 08:36:32

标签: c arrays char printf

我正在将数字从10个计数系统(c.s.)转换为另一个,并将其打印到文件中。

void Fileoutkey(char *res1, char *res2, int sys1, int sys2) //KANON
{
    FILE *fp;
    if(fp = fopen("task_out.cpp", "w"))
    {

        fprintf(fp, "%d: %s\n", sys1, res1);
        fprintf(fp, "%d: %s\n", sys2, res2);
        fclose(fp);
    }
    else
    {
        printf("No such file in directory.\n");
        exit(1);
    }
}

转换功能(可以)

int numSystem1 = 12;
char digits1 [13] = "0123456789AB";
char result1 [18] = "";
int digCount1 = 0;
while (num)
{
    int rem1 = num % numSystem1;
    result1 [digCount1] = digits1[rem1];
    num /= numSystem1;
    digCount1++;    
    for (int i = digCount1; i >= 0; i--)
    {
        cout << result1[i]; //here i get 10
    }   
}

从10到12 c.s.转换时例如,数字12而不是10我得到01。 控制台中的输出是正确的。

1 个答案:

答案 0 :(得分:5)

转换代码绝对无效。以将12从10转换为12的示例为例,循环执行以下操作:

第一次在num周围是12。12 % 12是0-因此存储为字符串的第一个字符。 num然后除以12等于1。

1 % 12周围的第二时间是1,并被添加为第二个字符。这意味着您的字符串现在包含“ 01”。这就是您在输出中看到的-代码正在以相反的顺序添加数字。

您可以算出数字的大小,然后从数字开始倒数以在另一个方向添加字符,或者使用反转字符串。

在循环之后,还需要添加NUL终止符,如下所示:

result1 [digCount1] = '\0';