无法将字符串转换为float

时间:2015-03-23 08:07:16

标签: c++ arrays string visual-studio-2010

我编写了一个代码,用于扫描字符值并将其存储到数组中。我输入'x'以停止扫描字符。现在我将'\0'放在数组的末尾,将数组转换为字符串。现在我尝试使用std::stof将此字符串转换为float。这是我的代码

#include "stdafx.h"
#include<stdio.h>
#include <stdlib.h>
#include <iostream>   
#include <string>     

int _tmain(int argc, _TCHAR* argv[])
{
    char str[100];;
    char rec;  
    char count=0;
    double n;
    std::string::size_type sz;  

    while(1)
    {
        scanf("%c",&rec);
        if(rec=='x')
        {
            str[count]='\0';
            printf("%s\n",str);
            sz = strlen(str);
            float value = std::stof (str,&sz);
            printf("%f",value);
        }
        else
        {
            str[count]=rec;
            count++;
        }

    }
    return 0;
}

但是这段代码只将第一个字符转换为浮点值。例如,我提供输入:

1
2
3
.
4
x

我的输出是: -

1.000000

所以,请告诉我问题出在哪里

2 个答案:

答案 0 :(得分:1)

出现此问题是因为未清除输入缓冲区。按Enter键时,换行符\n将添加到输入缓冲区。这可以通过在调用while(getchar()!='\n');后添加scanf来解决。

在评论中,πάνταῥε提到使用std::cout代替printf()std::cin代替scanf()可以简化您的代码。它也可以解决这个问题。

答案 1 :(得分:0)

如果您确实在每个数字后输入带换行符的数字,那么您应该从字符串中过滤掉这些换行符。所以使用类似的东西:

if (rec != '\n') {
  str[count]=rec;
  count++;
}

而不仅仅是:

{
  str[count]=rec;
  count++;
}