我编写了一个代码,用于扫描字符值并将其存储到数组中。我输入'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
所以,请告诉我问题出在哪里
答案 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++;
}