gpt4 book ai didi

c - sscanf() 如何查看字符串中的数字?

转载 作者:行者123 更新时间:2023-12-02 07:37:45 26 4
gpt4 key购买 nike

我在以下代码中遇到 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,因此变量 number=23,并且 sum_num=23,但循环中的下一步是:number=3sum_num=26。在下一步中 sum_num= 30...这让我很困惑。由于我不相信 sscanf() 有如此古怪的缺陷,我做错了什么?

最佳答案

你总是在循环中前进一个字符:ps1++。您可能希望将 ps1 提高到第一位。

更好的是,有一个名为 strtol 的函数。它尝试从字符串中解析整数,并可以返回无法读取的第一个字符的位置。因此,您可以在循环中使用 strtol 对字符串中看起来像数字的所有内容求和。


如果您想对数字求和而不是对字符串中的数字求和,则更容易:

while (*p) {
if (isdigit(*p))
sum_num += *p - '0';
}

关于c - sscanf() 如何查看字符串中的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14469519/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com