J'ai un fichier .txt dans mon répertoire de projet que j'ai créé et rempli de données.
la structure de répertoire ressemble à:
/Users/asd/ClionProjects/ProjectWithTemplates/
main.cpp
cmake
twoday.txt
voici mon 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());
}
Tout le reste fonctionne bien en plus de mon fichier IO. Très étrange.
ajout de quelques détails .............. plus de détails? :(
si inputFile.is_open()
renvoie toujours false
, inputFile.open("twoday.txt");
n'ouvre pas le fichier correctement, probablement parce qu'il ne trouve pas "twoday.txt"
Essayez de définir un chemin explicite comme "c:/path/twoday.txt"
ou "/path/twoday.txt"
si vous utilisez Linux. Vous pouvez également essayer d’écrire un fichier à la place pour voir où il apparaît, ou quelque chose de plus exotique pour renvoyer le chemin actuel.
Clion recherche les fichiers d'entrée et écrit les fichiers de sortie dans le dossier Debug. Si vous mettez vos fichiers d'entrée ici, ils les verront.
Je suppose que le répertoire de travail est défini sur le chemin du fichier exécutable au lieu de votre fichier CMakeLists.txt.
Pour résoudre ce problème, soit:
Les autres réponses identifient le problème, qui n’a en réalité rien à voir avec CLion. Quand un exécutable démarre, il a un répertoire de travail en cours. Par défaut, c'est le répertoire où réside l'exécutable. Si le fichier que vous voulez lire se trouve ailleurs, vous devez effectuer l'une des trois opérations suivantes:
J'ai créé un bref didacticiel vidéo sur la manière d'accomplir le dernier: https://youtu.be/dTtZEAfh_LM
J'ai découvert comment configurer CMake pour qu'il intègre le répertoire de votre projet dans CLion.
Je viens de définir le mien sur ".\Build" et maintenant, il intègre toujours mon projet, y compris le fichier que vous créez.