2016-02-27 111 views
1

screenshot 嗨,大家好我想读取一个文本文件,在一行中有3个双打,然后将这三个值保存到我的变量(每变量1个变量)。C++从文本文件读取双打

到目前为止,我的代码看起来像这样:

cout<<"ready to read file...:"; 
ifstream theFile("pose.txt"); 
double first,second,third; 
while(theFile >> first >> second >> third){ 
    cout<<"In while loop and got following values: "; 
    cout<< first<<endl<< second <<endl<< third; 
} 

我的输入文件看起来像这样打开时:

1.5 2.4 3.3 

然而,即使第一COUT运行,它告诉我,程序准备好读取文件,它不会进入while循环。

我试过使用其他读取文件的方法,这也是无效的。

欢迎任何帮助, 谢谢。

+2

发布您的输入文件... –

+1

您是否试图在调试器中逐行执行代码? –

+0

我也发布了我的输入文件,是的,我试过调试,但我不确定它看起来好像跳过while循环的开始。 –

回答

0

我在StackOverflow的另一个问题上找到了答案。 这是链接到了答案: https://stackoverflow.com/a/23448835/4117002

基本上我不得不在Xcode指定文本文件的路径,尽管我已经创造了它在该项目。

感谢无论如何每个人的帮助!

0

我不从截图中认识你的IDE,但如果它像其他的IDE, 你的程序将不会被默认包含 源文件main.cpp的目录中运行,数据文件example.txt。 它将在项目 设置中配置的目录中运行,可能是创建可执行文件的目录。

所以让我们假装在Products/Debug和 在那里运行创建(调试版本)可执行文件。在这种情况下:

std::ifstream theFile("example.txt"); 

会失败,因为没有在Products/Debug称为example.txt文件。 您需要打开theFile与相对路径:

std::ifstream theFile("../../InputFileExample/example.txt"); 

或者指定的绝对路径。

0

假设你熟悉CPP:

  1. 缓冲区每一行ifstream数据为std::string。例如:

    std::getline(std::ifstream , std::string) 
    
  2. 缓冲区的std::stringstd::istringstream。例如:

    std::istringstream (std::string) 
    
  3. 拆分std::istringstream到你所需要的双重价值。例如:

    istringstream iss 
    

iss >> first >> second >> third 

祝您好运!