Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中将整型和浮点型字符串转换为浮点型数组_C_Arrays_String_Casting_Floating Point - Fatal编程技术网

在C语言中将整型和浮点型字符串转换为浮点型数组

在C语言中将整型和浮点型字符串转换为浮点型数组,c,arrays,string,casting,floating-point,C,Arrays,String,Casting,Floating Point,我想做的是通过网络发送一个字符串。关键是接收字符串的服务器必须计算所有数字的总和并将其发送回。因此,我认为最简单的方法是获取字符串并将其放入浮点数组中(int是否也在其中并不重要,因为最终的和将是一个浮点数) 不幸的是,我不知道该怎么做,或者更确切地说,我不知道该怎么做。如何从字符串中提取1乘1的数字(假设每个数字之间用空格分隔)?一定有一些功能,但我找不到 unix下的语言是纯C语言 用于将字符串中的第一个数字转换为double。将其添加到总和中,然后使用endptr返回值参数确定是否需要转换

我想做的是通过网络发送一个字符串。关键是接收字符串的服务器必须计算所有数字的总和并将其发送回。因此,我认为最简单的方法是获取字符串并将其放入浮点数组中(int是否也在其中并不重要,因为最终的和将是一个浮点数)

不幸的是,我不知道该怎么做,或者更确切地说,我不知道该怎么做。如何从字符串中提取1乘1的数字(假设每个数字之间用空格分隔)?一定有一些功能,但我找不到

unix下的语言是纯C语言

用于将字符串中的第一个数字转换为
double
。将其添加到总和中,然后使用
endptr
返回值参数确定是否需要转换另一个值,如果需要,从何处转换。迭代直到处理完整个字符串

strod()
的原型是:

double strtod(const char *nptr, char **endptr);
还请注意,将整数视为浮点时可能会遇到精度问题。

用于将字符串中的第一个数字转换为
双精度。将其添加到总和中,然后使用
endptr
返回值参数确定是否需要转换另一个值,如果需要,从何处转换。迭代直到处理完整个字符串

strod()
的原型是:

double strtod(const char *nptr, char **endptr);
还请注意,当将整数视为浮点时,可能会遇到精度问题。

可以使用scanf从流中读取,就像使用scanf从stdin读取一样。

可以使用scanf从流中读取,就像使用scanf从stdin读取一样。

可以使用sscanf()从字符串读取格式化输入。
你可以用像

string=strtok(input," ")
while(string!=NULL)
{ sscanf(string,"%f",&a[i]);
  i++;
string=strtok(NULL," ");
}
在一个循环中。您甚至可以使用atof()而不是将sscanf()与%f一起使用。

您可以使用sscanf()从字符串读取格式化输入。
你可以用像

string=strtok(input," ")
while(string!=NULL)
{ sscanf(string,"%f",&a[i]);
  i++;
string=strtok(NULL," ");
}

在一个循环中。您可以使用偶数atof()而不是将sscanf()与%f一起使用。

您可以使用
strtok
拆分字符串,并使用
atof
将其转换为float

char* p;
float farr[100];
int i = 0;
//str is your incoming string
p = strtok(str," ");
while (p != NULL)
{
    farr[i] = atof(p);
    p = strtok(NULL, " ");
}

我刚刚在一个在线编译器中运行了它-

您可以使用
strtok
拆分字符串,并使用
atof
将其转换为float

char* p;
float farr[100];
int i = 0;
//str is your incoming string
p = strtok(str," ");
while (p != NULL)
{
    farr[i] = atof(p);
    p = strtok(NULL, " ");
}

我刚刚在一个在线编译器中运行了它-

在您的示例中,您在
sscanf()
上遗漏了一个“s”。这并没有说明如何跳过
string
的开头以获得下一个数字。@unwind ya right。现在我已经指定了如何获取字符串。在您的示例中,您在
sscanf()
上遗漏了一个“s”。这并没有说明如何跳过
string
的开头以获取下一个数字。@unwind ya right。现在我已经指定了如何获取string.IMO,这是最好的解决方案。其他解决方案都使用“邪恶”函数来修改参数或维护内部状态。这显然是最简单的解决方案,这正是我想要的。我对此有点争论,因为我不知道终结器应该从哪里来,但唉,我让它工作了。谢谢。IMO,这是最好的解决方案。其他解决方案都使用“邪恶”函数来修改参数或维护内部状态。这显然是最简单的解决方案,这正是我想要的。我对此有点争论,因为我不知道终结器应该从哪里来,但唉,我让它工作了。非常感谢。