我在读取文件并将内容转换为 double 时遇到问题。我已经阅读了 stackoverflow 的解决方案,但没有任何效果。
我有这个输入文件:
1291.23
291.493
558.089
309.266
513.656
491.44
429.234
851.345
589.192
535.873
802.469
713.604
1002.42
997.973
513.656
313.709
407.018
624.738
460.337
526.986
473.667
1202.36
和程序:
#include <math.h>
#include <string>
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <sstream>
using namespace std;
void main() {
char* filename = "mr1.txt";
ifstream fin;
fin.open(filename);
float d;// = 0.0;
int v = 0;
while (v < 21){
fin>>d;
if(v >= 2 || v < 15){
cout<<d<<endl;
}
v++;
}
}
输出为:1291 12次
我怎样才能毫无问题地将这些文件转换为 double?谢谢!
最佳答案
你的代码有几处错误,但没有一个会 解释您描述的症状(代码不可能 你已经发布了:你循环了 40 次,并且每次都在循环中输出)。 无论如何:
- 你在 `if` 中的条件是错误的,所以它总是正确的: `v` 总是大于 2 或小于 15,
- 你在 `while` 中的条件是错误的;你在尝试 读取 40 个值,不管文件中有什么
你的循环可能应该是这样的:
while ( fin >> d ) {
if ( v >= 2 && v < 15 ) {
std::cout << v << std::endl;
}
++ v;
}
这将导致显示元素 [2, 15),前提是它们是 目前。
如果你总是显示相同的值,可能是输入 在该值失败后,假设您不测试您的输入是否 成功与否。一种可能的解释是提到的一只莫拉 注意:当你打开一个文件时,它会充满当前的全局 语言环境。尝试:
fin.imbue(std::locale("C"));
打开文件后立即;在大多数地区,十进制 分隔符是逗号,不是点。 (另外:检查打开的 成功了。)
关于c++ - 从文件中读取并在 C++ 中转换为 double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5501496/