Ich habe eine TXT-Datei in meinem Projektverzeichnis, die ich erstellt und mit Daten gefüllt habe.
die Verzeichnisstruktur sieht folgendermaßen aus:
/Users/asd/ClionProjects/ProjectWithTemplates/
main.cpp
cmake
twoday.txt
hier ist mein code:
#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());
}
Alles andere funktioniert gut, abgesehen von meiner IO-Datei. Sehr eigenartig.
hinzufügen einiger Details :(
wenn inputFile.is_open()
immer false
zurückgibt, öffnet inputFile.open("twoday.txt");
die Datei nicht korrekt, vermutlich weil "twoday.txt"
nicht gefunden werden kann.
Legen Sie einen expliziten Pfad wie "c:/path/twoday.txt"
oder "/path/twoday.txt"
fest, wenn Sie Linux verwenden. Sie können auch versuchen, eine Datei zu schreiben, um zu sehen, wo sie angezeigt wird, oder etwas Exotischeres, um den aktuellen Pfad zurückzugeben.
Clion sucht nach Eingabedateien und schreibt die Ausgabedateien in den Debug-Ordner. Wenn Sie Ihre Eingabedateien dort ablegen, werden sie angezeigt.
Ich gehe davon aus, dass das Arbeitsverzeichnis auf den Pfad zur ausführbaren Datei anstatt auf die Datei CMakeLists.txt gesetzt wird.
Um dies zu beheben, entweder
Die anderen Antworten identifizieren das Problem, das wirklich nichts mit CLion zu tun hat. Wenn eine ausführbare Datei gestartet wird, verfügt sie über ein aktuelles Arbeitsverzeichnis. Standardmäßig ist dies das Verzeichnis, in dem sich die ausführbare Datei befindet. Wenn die Datei, die Sie lesen möchten, an einem anderen Ort lebt, müssen Sie eine der folgenden drei Aktionen ausführen:
Ich habe ein kurzes Tutorial-Video erstellt, wie Sie das Letzte erreichen können: https://youtu.be/dTtZEAfh_LM
Ich habe herausgefunden, wie Sie CMake so einrichten, dass es Ihr Projektverzeichnis in CLion erstellt.
Ich habe nur ".\Build" eingestellt und jetzt wird es immer in mein Projekt eingefügt, einschließlich der von Ihnen erstellten Datei.
Clion arrangiert ein c/c ++ Projekt via cmake. Mein Betriebssystem ist Windows 10. Die von cmake generierte ausführbare Datei befindet sich in cmake-build-debug. Sie können den absoluten Pfad oder "../" verwenden.