我已经知道如何转换,但“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);
}
答案 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。虽然它与零不同。