再会!该任务要求打印字符串中的所有数字。我用 atof 读取数字 x 并用 sprintf 将其“跳转”到一个缓冲区中,该缓冲区返回 x 中的字符数 - 然后更改指针的位置。有一个退出循环的条件。请告诉我,我的代码的根本问题是什么,它不是从输入行输出所有实数,而是循环打印。能否更正此片段 - 或者 co sprintf 的想法本质上是错误的?感谢您的关注。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
int main(void){
char str[50];
char buffer[50];
double x;
puts("enter a string: \n");
fgets(str, 50, stdin);
str[strlen(str) - 1] = '\0';
//print all doubles from string;
char* strptr = str;
while(*strptr != '\0'){
if(isdigit(*strptr)){
x = atof(strptr);
printf("%f\n", x);
strptr = strptr + (sprintf(buffer, "%f", x));
}
else strptr++;
}
return 0;
}
如果您运行以下演示程序,您可以看到问题
将程序输出到控制台
从输出可以看出,输出的数字在小数符号的数量上与原始数字不匹配。因此,指针在循环中可能没有正确的值。
与其使用你正在使用的方法,不如使用基于函数应用的方法
strtod,它在头文件中声明<stdlib.h>如下下面是一个使用此功能的演示程序。
程序输出到控制台:
在您的程序中,您还可以添加检查是否存在数字符号,也就是说,如果遇到其中一个字符
'-'or'+',则后跟一个数字。实际上浮点常量也可以用十六进制格式给出,但我认为你不需要那样。