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

timon44 Messages postés 53 Date d'inscription   Statut Membre Dernière intervention   -  
Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   663
 
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
aimac
 
#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   Statut Membre Dernière intervention   663
 
bonjour,

votre code est incorrect.
0