C++ 如何将字符串中的多个浮点数转换为多个浮点数?(sscanf)

C++ 如何将字符串中的多个浮点数转换为多个浮点数?(sscanf),c++,type-conversion,C++,Type Conversion,易于理解: string=" 2.34 5.21 7.22\n"; 我想将字符串的浮点值转换为浮点变量: float x,y,z; sscanf(string, " %f %f %f\n",&x,&y,&z); 它应该是这样的,但它不工作,如何正确地转换它 --编辑-- 由于这不起作用,让我们看看我的其余代码是否有问题: #include <iostream> #include <stdio.h> #include <tchar.h>

易于理解:

string=" 2.34 5.21 7.22\n";
我想将字符串的浮点值转换为浮点变量:

float x,y,z;
sscanf(string, " %f %f %f\n",&x,&y,&z);
它应该是这样的,但它不工作,如何正确地转换它

--编辑--

由于这不起作用,让我们看看我的其余代码是否有问题:

#include <iostream>
#include <stdio.h>
#include <tchar.h>
#include "SerialClass.h"    // Library described above
#include <string>
using namespace std;

bool acabou(char str[]){
    for(int i=0;str[i]!='\0';i++){
        if(str[i]=='\n'){
            return true;
        }
    }
    return false;
}

int main(){
    float x,y,z;
    char buffer[256] = "";
    Serial* SP = new Serial("\\\\.\\COM5");
    if (SP->IsConnected())
        printf("Conectado com sucesso\n");
    while(SP->IsConnected()){
        char incomingData[256] = "";
        int dataLength = 256;
        int readResult = 0;
        readResult = SP->ReadData(incomingData,dataLength);
        if(readResult!=-1){
            strcat(buffer,incomingData);
            if(acabou(incomingData)){
                printf("%s",buffer);
                sscanf(buffer,"%f %f %f\n",&x,&y,&z);
                cout << x << " " << y << " " << z << endl;
                strcpy(buffer,"");
            }
        }else if(acabou(incomingData)){
            printf("%s",buffer);
            sscanf(buffer,"%f %f %f\n",&x,&y,&z);
            cout << x << " " << y << " " << z << endl;
            strcpy(buffer,"");
        }
    }
    return 0;
}
#包括
#包括
#包括
#包括上述“SerialClass.h”//Library
#包括
使用名称空间std;
bool-acabou(char-str[]){
对于(int i=0;str[i]!='\0';i++){
如果(str[i]='\n'){
返回true;
}
}
返回false;
}
int main(){
浮动x,y,z;
字符缓冲区[256]=“”;
串行*SP=新串行(“\\.\\COM5”);
如果(SP->IsConnected())
printf(“Conectado com successo\n”);
而(SP->IsConnected()){
字符输入数据[256]=“”;
int dataLength=256;
int readResult=0;
readResult=SP->ReadData(输入数据,数据长度);
如果(readResult!=-1){
strcat(缓冲区、输入数据);
if(acabou(收入数据)){
printf(“%s”,缓冲区);
sscanf(缓冲区,“%f%f%f\n”、&x、&y、&z);
不能坚持用C++

std::istringstream iss{string};

float x{}, y{}, z{};

iss >> x >> y >> z;

也就是说,假设
string
char const*
类型,您的代码应该按原样工作。

代码从一开始就是正确的,@user657267的代码也在工作

问题出在我的代码中,字符串带有
作为变量从十进制到整数的分隔符,我做了一个简单的函数,将
更改为
,现在它就可以工作了


谢谢你的帮助。

解释一下那里发生了什么?@ GuelHeMGGILADADARSA。我不确定我说的话是否能使代码更清晰,你不理解哪个部分?这是非常基础的C++。哦,我现在明白了,哈哈,但是为什么浮体有括号?{}@Guillhermegarciadarosa我只是习惯于使用统一初始化,这与编写
x=0;
它不起作用一样,我的字符串是一个char str[256],只是说“它不起作用”这是对问题的糟糕描述。你是如何测试的?你得到了什么结果?你期望得到什么结果?字符串是a
char*
?我在屏幕上打印收到的值,它们都是0或一些疯狂的东西,但没有十进制值是receivedYes@Ben its a char*它在这里编译并运行良好: