我已经知道如何转换,但是"while“不停,它一遍又一遍地重复。我不知道为什么?是否“string !='\0‘”不起作用?字符总是以'\0‘结尾吗?
#include <stdio.h>
int ascii_integer(char *string){
int result = 0;
while (string !='\0')
{
if (*string >='0' && *string <='9')
{
result *= 10;
result += *string - '0';
}
string++;
}
return result;
}
int main(){
char string[] = "12345";
int result = ascii_integer(string);
printf("%d\n",result);
}
发布于 2014-07-13 07:18:15
这条线
while (string !='\0')
应该是
while (*string)
我很惊讶你没有收到编译器的警告
发布于 2014-07-13 08:54:10
错误是将指针与零进行比较,而不是解除引用并将字符与零进行比较。在我看来,如果你选择更好的变量名和更好的循环结构,你就不太可能犯这个错误。下面是我可能编写的代码。我喜欢短发。
// my preference
int ascii_integer(char *pstring) {
int result = 0;
for ( ; *pstring != NULL; ++pstring) {
if (*pstring >= '0' && *pstring <= '9')
result = result * 10 + *pstring - '0';
}
return result;
}
发布于 2014-07-13 09:44:56
while (string !='\0')行应该是while(*string!='\0') OR while(*string)
https://stackoverflow.com/questions/24720386
复制