- Koda,
Bonjour, j’essaie de m’entrainer à utiliser les fichiers après avoir lu le chapitre sur les flux du tutoriel disponible sur ce site. J’ai essayé de faire un programme résolvant le problème "3X+1" (on prend un nombre, si celui-ci est pair on le divise par deux, sinon on le multiplie par 3 et on ajoute 1, et ainsi de suite pour finalement arriver à une boucle qui fait 1, 4, 2, 1) avec un système de sauvegarde mais, quand j’essaie de compiler, je reçoit le message d’erreur suivant dans la section output:
Build started… 1>——— Build started: Project: Project1, Configuration: Debug x64 ———
1>Source.cpp
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\xutility(5268,21): error C2446: '==’: no conversion from '_Ty (__cdecl *)' to 'int'
1> with
1> [
1> _Ty=int (int)
1> ]
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\xutility(5268,24): message : There is no context in which this conversion is possible
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\xutility(5277): message : see reference to function template instantiation '_InIt std::_Find_unchecked<char*,_Ty>(_InIt,const _InIt,_Ty (__cdecl &))' being compiled
1> with
1> [
1> _InIt=char *,
1> _Ty=int (int)
1> ]
1>C:\Users*mon nom*\Documents\Programing\Project1\Source.cpp(58): message : see reference to function template instantiation '_InIt std::find<std::_String_iterator<std::_String_val<std::_Simple_types<_Elem»>,int(int)>(_InIt,const _InIt,_Ty (__cdecl &))' being compiled
1> with
1> [
1> _InIt=std::_String_iterator<std::_String_val<std::_Simple_types<char>»,
1> _Elem=char,
1> _Ty=int (int)
1> ]
1>Done building project "Project1.vcxproj" — FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Voici mon code (je sais qu’il y a une boucle infinie, mais ça n’empêche d’habitude pas le code de compiler, et je l’utilise pour répéter l’action à l’infini pour ne pas avoir à relancer le programme à chaque fois):
#include <fstream>
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
#include <string>
#include <cctype>
void calculation(int number, std::string fileName) //makes the calculations
{
std::ofstream oFile(fileName);
int generation{ 0 };
std::cout << number << ", ";
if (number % 2 == 0)
{
number /= 2;
++generation;
if (number == 1)
{
std::cout << number << std::endl << std::endl;
oFile << generation << std::endl;
}
else
{
std::cout << ", ";
}
}
else
{
number *= 3;
number++;
++generation;
std::cout << number << ", ";
}
}
int main()
{
//recuperation of the last processed number
std::ifstream iFile{"save.txt"};
std::string line;
std::vector<int> originNbr;
std::vector<int> generationNbr;
while (getline(iFile, line))
{
//finding the last origin nbr
std::string strCurrentNbr;
for (auto i{ std::find(std::begin(line), std::end(line), isdigit) }; isdigit(*i); i++)
{
if (isdigit(*i))
{
strCurrentNbr.push_back(*i);
}
}
originNbr.push_back(std::stoi(strCurrentNbr));
for (auto i{ std::find(std::rbegin(line), std::rend(line), isdigit)}; isdigit(*i); i++)
{
if (isdigit(*i))
{
strCurrentNbr.insert(0, 1, *i);
}
}
generationNbr.push_back(std::stoi(strCurrentNbr));
}
std::ofstream oFile{ "save.txt", std::ios::app};
int number;
if (!(originNbr.empty()))
{
number = originNbr.back();
}
else
{
number = 1;
oFile << "Origin number: " << number << ", number of generation : " << 1 << std::endl;
std::cout << 1 << std::endl << std::endl;
}
//calculation
while (true)
{
if (number != 1)
{
calculation(number, "save.txt");
}
++number;
}
return 0;
}
Je n’ai pas de message d’erreur dans la section 'erreur’, mais le code ne veut pas compiler, quelqu’un aurait-il une solution?
Merci