次のコードの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」の形式で文字列を入力すると、数値が合計されてOKになり、目的の結果が得られることです。しかし、「w23b4e」などの文字列を入力しようとすると、次のようになります。ループ内に数値23が表示されるため、変数number=23
、およびsum_num=23
が表示されますが、ループ内の次のステップは次のとおりです。 number=3
、およびsum_num=26
。そして次のステップでsum_num= 30
...これは私をかなり混乱させます。sscanf()にこのような風変わりな欠陥があるとは思わないので、何が間違っているのでしょうか。