将ascii转换为整数

时间:2014-07-13 07:14:52

标签: c int ascii

我已经知道如何转换,但“while”并没有停止,它一遍又一遍地运行。我不知道为什么? “string!='\ 0'”不起作用吗? char总是以'\ 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);
}

4 个答案:

答案 0 :(得分:4)

该行

while (string !='\0')

应该是

while (*string)

我很惊讶你没有收到编译器的警告

答案 1 :(得分:1)

该错误是将指针与零进行比较,而不是取消引用并将字符与零进行比较。在我看来,如果你选择更好的变量名和更好的循环结构,你就不太可能犯这个错误。以下是我编写该代码的方法。我喜欢简短。

// 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;
}

答案 2 :(得分:0)

这条线   while(string!='\ 0') 应该   而(*字符串!= '\ 0')   要么   而(*字符串)

答案 3 :(得分:0)

键入时:

while(string != '\0')

&#39; \ 0&#39;是NULL,ascii值为0的符号,您将字符串 - 这是一个指针 - 与NULL进行比较。它不是NULL,它指向一些内容,我猜的字符串。 你应该把它改成:

while(*string != '\0')

虽然该字符串指针的CONTENT(*)不为零,并且为了快捷方式:

while(*string)

表示 - *string为TRUE。虽然它与零不同。