C:不打印我想要的东西

时间:2014-12-11 22:28:36

标签: c printf

我有一个简单的代码只打印字符串中的数字,但它不打印我想要的东西,我完全不知道为什么。它应该打印1和10但它打印1,10和100.现在为什么100? :■

char string[50] = "1 10 +";
int value = 0;

for (int i = 0; i != strlen(string); i++)
{
    if (isdigit(string[i])){
            value = value*10 + atoi(&string[i]);
            printf(" %d\n", value);
    }
    else
    {
        if (string[i] == ' ')
        {
                value = 0;
        }
    }
}
return(0);
}

2 个答案:

答案 0 :(得分:1)

假设函数isdigit()正确执行,if块内的字符串[i]将介于'0'...'9'之间。

替换你的行:

value = value*10 + atoi(&string[i]);

value = value*10 + string[i] - '0'; // the difference between string[i] and '0' 
                                    // are the integer value you're looking for.
                                    // i.e.  '9' - '0' equals to 9.

此外,您可能不希望在循环内打印值。相反,最后打印最终值可能会更好。

答案 1 :(得分:-3)

这是一个解决方案,它只打印由单个空格分隔的给定字符串的数字。

int main(void) {
        char *string = "1   10  +";
        int len = strlen(string);
        for( int i = 0 ; i < len ; ) {
                while (i < len && isdigit(string[i])) printf("%c", string[i++]);
                while (i < len && ! isdigit(string[i])) i++;
                printf(" ");
        }
        return 0;
}
相关问题