プロジェクトディレクトリに.txtファイルを作成し、データを入力しました。
ディレクトリ構造は次のようになります。
/Users/asd/ClionProjects/ProjectWithTemplates/
main.cpp
cmake
twoday.txt
これが私のコードです:
#include <iostream>
#include <array>
#include <cmath>
#include <fstream>
using namespace std;
/* print array prototype */
template <size_t N>
void printArray(const array<double , N> & arr);
/* mean function prototype */
template <size_t N>
double meanArray(const array<double , N> & arr);
/* standard deviation prototype */
template <size_t N>
double sDeviation(const array<double , N> & arr);
int main() {
string date1;
string date2;
array<double, 24> day1Temps;
array<double, 24> day2Temps;
array<double, 3> testarr = {75,70,65};
/* TESTING PURPOSES */
printArray(testarr);
sDeviation(testarr);
cout << "standard deviation of array is: " << sDeviation(testarr) << endl;
cout << "mean of array is: " << meanArray(testarr) << endl;
/* END TESTING */
ifstream inputFile;
inputFile.open("twoday.txt");
if(inputFile.is_open())
{
inputFile >> date1;
inputFile >> date2;
for(int i = 1; i < day1Temps.size(); ++i)
{
inputFile >> day1Temps[i];
}
for (int j = 1; j < day2Temps.size(); ++j) {
inputFile >> day2Temps[j];
}
} else cout << "File unable to open. File does not exist." << endl;
return 0;
}
/* print array defination */
template <size_t N>
void printArray(const array<double , N> & arr){
for(const auto & i : arr)
{
cout << i << " ";
}
cout << endl;
}
/* mean function defination */
template <size_t N>
double meanArray(const array<double , N> & arr){
double sum;
for (const auto & i : arr) {
sum+=i;
}
return sum/arr.size();
}
/* standard deviation defination */
template <size_t N>
double sDeviation(const array<double , N> & arr){
double mean = meanArray(arr);
double total;
for (const auto & i : arr){
total+=pow(i - mean, 2);
}
return sqrt(total/arr.size());
}
私のファイルIO以外のすべてが正常に動作します。非常に奇妙な。
いくつかの詳細を追加します..............詳細を追加しますか? :(
inputFile.is_open()
が常にfalse
を返す場合、inputFile.open("twoday.txt");
はファイルを正しく開いていません。おそらく"twoday.txt"
が見つからないためです。
Linuxを使用している場合は、"c:/path/twoday.txt"
または"/path/twoday.txt"
のような明示的なパスを設定してみてください。代わりにファイルを書き込んで、それがどこに表示されるかを確認したり、現在のパスを返すよりエキゾチックなものを試したりすることもできます。
Clionは入力ファイルを検索し、出力ファイルをDebugフォルダーに書き込みます。入力ファイルをそこに置くと、それらが表示されます。
作業ディレクトリがCMakeLists.txtファイルではなく実行可能ファイルへのパスに設定されていると仮定します。
これを修正するには、どちらか:
他の回答は問題を特定しますが、これは実際にはCLionとは何の関係もありません。実行可能ファイルが起動すると、現在の作業ディレクトリがあります。デフォルトでは、これは実行可能ファイルが存在するディレクトリです。読み取りたいファイルが他の場所にある場合は、次の3つのいずれかを行う必要があります。
最後を達成する方法についての簡単なチュートリアルビデオを作成しました: https://youtu.be/dTtZEAfh_LM
CLionのプロジェクトディレクトリにビルドするようにCMakeを設定する方法を見つけました。
私は「。\ build」に設定しただけで、作成したファイルを含め、常にプロジェクトにビルドされます。
Clionはcmakeを介してc/c ++プロジェクトを手配します。私のOSはWindows 10です。cmakeが生成する実行可能ファイルは、cmake-build-debugにあります。絶対パスまたは「../」を使用できます。