我有一个简单的代码只打印字符串中的数字,但它不打印我想要的东西,我完全不知道为什么。它应该打印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);
}
答案 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;
}