我在以下代码中遇到了 sscanf() 的问题:
void num_check(const char*ps){
char *ps1=NULL;
int number=0;
unsigned sum_num=0;
ps1=ps;
for(;*ps1!='\0';ps1++){
if (isdigit(*ps1)){
sscanf(ps1,"%d",&number);
sum_num+=number;
}
}
printf("Sum of digits is: %d",sum_num);
}
int main(){
printf("Enter a string:\n");
char str[20];
gets(str);
num_check(str);
return 0;
}
问题是:当我以“w2b4e”的形式输入一个字符串时,它对我的数字求和,我得到了想要的结果。但是当我尝试输入诸如“w23b4e”之类的字符串时,它所做的是:它在循环中看到数字 23,所以 variablenumber=23
和 s um_num=23
,但循环中的下一步是:number=3
和sum_num=26
。在下一步中sum_num= 30
......这让我很困惑。既然我不相信 sscanf() 有这么古怪的缺陷,我做错了什么?