[C++] cin - entrée d'un int

Fermé
timon44 Messages postés 53 Date d'inscription dimanche 28 décembre 2008 Statut Membre Dernière intervention 17 décembre 2010 - 22 janv. 2010 à 23:04
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 - 23 janv. 2010 à 14:29
Bonsoir, je suis en train d'apprendre à programmer en C++ (connaissances en Java/ un peu de C, Cobol,Pascal...) et je voudrais faire un programme tout simple qui, aprés que l'utilisateur ai donné un nombre de minutes, transforme en heures et minutes

#include <iostream> // il n'y a pas d'extension ; "flux entrée-sortie"
#include <string>
#include "structure.h" //header fait par moi !
using namespace std;

int main (int argc, char * const argv[]) 
{

	/********** test de renvoyer 2 valeurs ***/
	int minutes=0;
	int heures=0;
	cout << "Traduction de minutes en Heures Minutes\nNombre de minutes : ";
	cin >> minutes;
	
	minutesToHeuresMinutes(minutes);
	cout << "Résultat :\n" << heures << " heures et "<< minutes <<" minutes."<< endl;
	
    return 0; // car main doit retourner un int !
}


void minutesToHeuresMinutes(int m)
{
	int h = m/60;
	m = m%60; //reste m/60
}


Il y a bien la déclaration dans le .h

Mais le problème c'est que le prog n'enregistre pas l'entier saisie dans 'minutes', il ne fait rien quand je rentre un entier, par contre s'arrete lors d'un charactere, mais affiche quand même 'Résultat :0 heures et 0 minutes.'

Si quelqu'un a une explication ...
merci !!!

ps: je sais que le prog ne fera pas ce que je lui demande, je dois utiliser les pointeurs

2 réponses

Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
23 janv. 2010 à 00:13
1) tu ne calcules pas les heures

2) minutes n'est pas modifié car l'argument que tu passes dans ta fonction est passé, en C++, par valeur.

Pour etre plus précis, le m dans ta fonction est une variable locale crée dans la fonction, et elle prend une copie de la valeur que tu donnes dans le main

minutesToHeuresMinutes(minutes);

m va être une variable locale qui contient la valeur de minutes, mais c'est une autre variable.

donc minutes n'est pas modifiée et vaut toujours 0 après la fonction.


Si tu veux une fonction qui modifie son argument, il faut que tu passes ta variable par référence.

Ceci se fait à l'aide de l'esperluette " & " dans la déclaration (et le prototype) de la fonction:

void minutesToHeuresMinutes(int& m)
0
#include<iostream>

using namespace std;

int transformer_min_hr (int m)
{ int h ;
h = m/60;
m = m%60;
cout<<"le temps est"<<h<<"h."<<m<<"min"<<endl;
}


int main ()
{
int m;
cout<<"saisir votre temps en minutes"<<endl;
cin>>m;
transformer_min_hr (m);

system("pause");
return 0;
}
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
23 janv. 2010 à 14:29
bonjour,

votre code est incorrect.
0