Python与C:不同的输出

2024-10-06 12:29:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个小程序,可以把10进制的数字转换成36进制的数字。下面是Python代码,它按预期工作。你知道吗

def numToKey(num):
    start = 0x04;
    i = 0;
    for i in range(0,num):
        start+=1
    return start;


def largeNumToKeyboard(num):
    a = num / 1296;
    ar = num % 1296;
    b = ar / 36;
    c = ar % 36;

    a = numToKey(a);
    b = numToKey(b);
    c = numToKey(c);

    newb = b;
    if(a == b):
        newb = 0x2D;

    if(c == b):
        c = 0x2E;


    print a,newb,c
    print

largeNumToKeyboard(0)
largeNumToKeyboard(200)

输出为

4 45 46
4 9 24

“4 45 46”正确表示0,“4 9 24”正确表示200。你知道吗

但问题是,在我把它转换成C代码后,它就停止工作了。你知道吗

#include <stdio.h>

int main(int argc, char **argv)
{
    printf("hello world\n");
    largeNumToKeyboard(0);
    largeNumToKeyboard(200);
    return 0;
}

char numToKey(char num) {
    char start = 0x04;
    char i = 0;
    for (i = 0; i < num; i++) {
        start++;
    }
    return start;
}

void largeNumToKeyboard(int num) {
    char a = num / 1296;
    char ar = num % 1296;
    char b = ar / 36;
    char c = ar % 36;

    a = numToKey(a);
    b = numToKey(b);
    c = numToKey(c);
    char newb = b;
    if(a == b){
        newb = 0x2D;
    }
    if(c == b){
        c = 0x2E;
    }
    printf("%d ",a);
    printf("%d ",newb);
    printf("%d\r\n",c);

}

现在输出是

4 45 46
4 45 46

我不明白为什么对于200的输入,C代码给出了错误的输出,而python代码给出了正确的输出。我觉得这和模量有关,但我搞不懂。请帮帮我!谢谢!你知道吗


Tags: 代码forreturnifdef数字startnum
2条回答

问题是您正在void largeNumToKeyboard(int num)函数中使用char类型,并且您正在测试的值可能会溢出char。您至少需要将前三个更改为int。。。你知道吗

void largeNumToKeyboard(int num) {
    int a = num / 1296;
    int ar = num % 1296;
    int b = ar / 36;
    char c = ar % 36;

    a = numToKey(a);
    b = numToKey(b);
    c = numToKey(c);
    char newb = b;
    if(a == b){
        newb = 0x2D;
    }
    if(c == b){
        c = 0x2E;
    }
    printf("%d ",a);
    printf("%d ",newb);
    printf("%d\r\n",c);

}

…然后打印输出。。。你知道吗

4 45 46
4 9 24

在C代码中,应该使用int类型。字符类型的范围仅为0到255。你知道吗

char a = num / 1296;
char ar = num % 1296;
char b = ar / 36;
char c = ar % 36; the C code 

相关问题 更多 >