Programme en c++ [Résolu]

Messages postés
48
Date d'inscription
vendredi 11 mars 2011
Dernière intervention
18 avril 2011
- - Dernière réponse : noussa44
Messages postés
48
Date d'inscription
vendredi 11 mars 2011
Dernière intervention
18 avril 2011
- 14 avril 2011 à 16:25
Bonjour à tous,
Je suis débutant en c++ et j'ai un problème dans un exercice qui demande de lire à partir d'un fichier texte des réels et les stockés dans un tableau sachant que les réels sont séparés par un espace
mais j'ai pas trouvé la solution pour cela je me suis fait recours sur votre aide et j'esper que j 'aurai des reponses svp et merci!!
j'ai fait un code mais je suis bloqué
#include <fstream>
#include 
#include <vector>
using namespace std;
void main() {
int n;
float *tab = new int [n]; 
ifstream fichier("fiche.txt");
if ( !fichier )
        cout << "fichier inexistant";
else
{
bool b=true;
while( !fichier.eof() )
{
getline(fichier, Ligne);
for(i=0;i<=n;i++)
fiche>>tab[i];
}
for(i=0;i<=n;i++){
cout<<tab[i]<<endl;}
fiche_close();			
return 0;
}

Le problème c'est comment remplir le tableau
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
Messages postés
3830
Date d'inscription
dimanche 12 décembre 2004
Dernière intervention
19 novembre 2018
3
Merci
J'avais bien compris., mais je ne peux répondre à cette question, si tu ne réponds pas d'abord à la mienne.
A quoi ressemble le fichier ? Comment est structuré celui-ci ?

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question

Merci cptpingu 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de cptpingu
Messages postés
3830
Date d'inscription
dimanche 12 décembre 2004
Dernière intervention
19 novembre 2018
3
Merci
Utilise std::getline, il permet de lire des valeurs d'un flux (fichier ou flux de caractères), séparés par un délimiteur choisi.
Tu fais d'abord un std::getline avec un \n pour les sauts de lignes, ce qui te permet de récupérer les lignes une à une.
Puis, sur chacune de ces lignes, tu refais un std::getline avec un ' ' pour avoir chacun des mots.

Au lieu de t'embêter avec un tableau, utilise une liste (std::list) qui gère le redimensionnement et la mémoire pour toi.

#include <fstream>
#include 
#include <sstream>
#include <list>
#include <cstdlib>

/* Convertit un string en n'importe quel type numérique */
template<typename T>
bool fromString(const std::string& str, T& dest)
{
    std::istringstream iss(str);
    return iss >> dest != 0;
}

int main()
{
  std::list<double> tab;
  std::ifstream fichier("fiche.txt");
  if (!fichier)
  {
    std::cout << "fichier inexistant" << std::endl;
    return 1;
  }

  std::string ligne;
  while (std::getline(fichier, ligne))
  {
    std::istringstream buff(ligne);
    std::string mot;
    while (std::getline(buff, mot, ' '))
    {
      if (!mot.empty())
      {
std::cout << """ << mot << """ << std::endl;
double f;
if (fromString(mot, f)) // Ajout uniquement si réussite de la conversion de string vers double
  tab.push_back(f);
      }
    }
  }

  // Lecture du tableau, voir ce qu'est un itérateur
  for (std::list<double>::const_iterator it = tab.begin();
      it != tab.end(); ++it)
    std::cout << *it << std::endl;

  fichier.close();

  return 0;
}


________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question

Merci cptpingu 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de cptpingu
Messages postés
3830
Date d'inscription
dimanche 12 décembre 2004
Dernière intervention
19 novembre 2018
3
Merci
mais je pense le tableau plus simple que une liste car je veux calculer la tang-1
pour chaque float

Qu'est-ce qui t'empêche de le faire ?

for (std::list<double>::const_iterator it = tab.begin();
      it != tab.end(); ++it)
    std::cout << tan(*it) << std::endl;


Si tu veux accéder aux éléments par les [], remplace std::list par std::vector. En C++, il rarement utile d'utiliser les tableaux du C.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question

Merci cptpingu 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de cptpingu
Messages postés
3830
Date d'inscription
dimanche 12 décembre 2004
Dernière intervention
19 novembre 2018
0
Merci
* Évite les "using namespace", voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace
* int main() et non void main()
* new int[n], ok, mais que vaut n ?

Comment est structuré le tableau ? Si le nombre de colonne est fixe, ça va être très facile.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Commenter la réponse de cptpingu
Messages postés
48
Date d'inscription
vendredi 11 mars 2011
Dernière intervention
18 avril 2011
0
Merci
Merci
mais le problème comment remplir le tableau sachant chaque réel doit être enregistré dans une case du tableau
Commenter la réponse de noussa44
Messages postés
48
Date d'inscription
vendredi 11 mars 2011
Dernière intervention
18 avril 2011
0
Merci
Bonjour,
je réponds à ton question mon fichier contient des "float" sont séparés par un espace je veux stocker chaque float dans une case de tab, Merci pour votre aide.
Commenter la réponse de noussa44
Messages postés
48
Date d'inscription
vendredi 11 mars 2011
Dernière intervention
18 avril 2011
0
Merci
Merci CptPingu,
j'ai modifié mon code mais j'ai pas comprit cet erreur
Erreur 1 fatal error C1075: fin de fichier rencontrée avant que l'élément accolade '{' gauche de '.\fichier1.cpp(17)' soit équilibré c:\Documents and Settings\acer1\Mes documents\Visual Studio 2008\Projects\fichier1\fichier1\fichier1.cpp 51 fichier1
Commenter la réponse de noussa44
Messages postés
48
Date d'inscription
vendredi 11 mars 2011
Dernière intervention
18 avril 2011
0
Merci
ah c'est bon j'ai oublié l'accolade de fermeture
mais je pense le tableau plus simple que une liste car je veux calculer la tang[size=50][size=50]
/size-1/size pour chaque float
Merci pour votre aide
Commenter la réponse de noussa44
Messages postés
48
Date d'inscription
vendredi 11 mars 2011
Dernière intervention
18 avril 2011
0
Merci
salut,
je peux pas afficher tous les "float" de mon fichier
voici mon fichier:0.038760 0.238095 -0.206897 0.178571 -0.058824 -0.103448 0.135135 0.250000 -0.095238 0.192308 -0.157895 0.172414 0.089286 -0.067416 0.113636
Il commence par 0.135135 et les autres........... ppfffffff je sais pas où le problème
Commenter la réponse de noussa44
Messages postés
3830
Date d'inscription
dimanche 12 décembre 2004
Dernière intervention
19 novembre 2018
0
Merci
je sais pas où le problème

Aucun problème chez moi, avec le code que je t'ai enovoyé.

Tu as du te tromper dans ton code. N'étant pas devin, il va falloir que tu le postes si tu veux de l'aide.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Commenter la réponse de cptpingu
Messages postés
48
Date d'inscription
vendredi 11 mars 2011
Dernière intervention
18 avril 2011
0
Merci
ca marche j'ai une bibliothèque qui se manque
Commenter la réponse de noussa44

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.