Fonction compte sous unix
Bonjour,
J'aimerai créer une fonction sous unix qui joue le role d'un compteur,c'est à dire qu'à chaque fois que je vais apeler la fonction ,elle doit me retourner la valeur incrementé de 1 sachant que la valeur initiale sera 0.
Merci d'avance.
J'aimerai créer une fonction sous unix qui joue le role d'un compteur,c'est à dire qu'à chaque fois que je vais apeler la fonction ,elle doit me retourner la valeur incrementé de 1 sachant que la valeur initiale sera 0.
Merci d'avance.
Configuration: Windows Vista Internet Explorer 7.0
1 réponse
-
1) Si quand tu dis "appeler une fonction", la dite fonction est contenue dans un programme et appelée plusieurs fois dans ce programme, ce que tu cherches s'appelle un variable statique (en C et en C++).
2) S'il s'agit d'un script ou d'un programme, appelé par un autre programme, le plus simple (et la seule solution que je vois comme ça à froid) c'est de stocker la valeur dans un fichier que ta fonction va incrémenter.
Exemple en C++ :
1) Avec des variables statiques :#include <iostream> void f(){ static unsigned i = 0; std::cout << i++ << std::endl; } int main(){ f(); f(); f(); f(); return 0; }
ce qui donne à l'exécution :0 1 2 3
2) Via un fichier :#include <iostream> #include <fstream> #include <string> #include <cstdlib> int main(){ const char *filename = "compteur.txt"; std::ifstream ifs(filename); unsigned compteur = 0; // Lire le fichier compteur s'il existe if(ifs){ std::string s; if(std::getline(ifs,s)){ if((sscanf(s.c_str()," %i ",&compteur)) != 1){ std::cerr << "invalid file " << filename << std::endl; return 2; } }else{ std::cerr << "invalid file " << filename << std::endl; return 2; } ifs.close(); } // Mettre à jour le fichier compteur std::ofstream ofs(filename); if(!ofs){ std::cerr << "can't open " << filename << std::endl; return 1; } ofs << compteur + 1 << std::endl; ofs.close(); return 0; }
À l'exécution :(mando@aldur) (~) $ g++ plop.cpp (mando@aldur) (~) $ cat compteur.txt cat: compteur.txt: Aucun fichier ou répertoire de ce type (mando@aldur) (~) $ ./a.out (mando@aldur) (~) $ cat compteur.txt 1 (mando@aldur) (~) $ ./a.out (mando@aldur) (~) $ cat compteur.txt 2 (mando@aldur) (~) $ ./a.out (mando@aldur) (~) $ cat compteur.txt 3
Bonne chance