Aide urgente en c++

Fermé
Bounty killah............. - 10 nov. 2004 à 05:06
 pom - 10 nov. 2004 à 15:30
Salut tout le monde .

..Voila j'ai un petit probleme a vous faire part , je ne suis malheureusement pas trop bon en programmation voila pkoi je vous fait appel , l'aide sera appreciée ! merci d'avance .

...Je dois faire un programme qui calcule la moyenne d'un etudiant en C++

..Voila ce que j'ai pu faire jusqu'a maintenant .
----------------------------------------------------------------------------
#include <iostream.h>
#include <stdio.h>
main()
{
char nom,prenom;

float tp1,tp2,tp3;


cout<< " bonjour entrez votre nom et prénom " ;
cin>>nom >>prenom;

cout<<" Entrez vos trois notes de travaux pratiques , elles doivent etre comprises entre (0 et 100 ).\n"
cin>>tp1>>tp2>>tp3;

if(tp1>=0&&tp1<=100)
{if(tp2>=0&&tp2<=100)
if(tp3>=0&&tp3<=100)
cout<<" Merci ! :votre moyenne est de "<<(tp1+tp2+tp3)/3<<endl;}
}}
---------------------------------------------------------------------------- Questions : pkoi mon programme ne lit pas mes trois tp(1,2,3) ? et comment fait-on un programme qui :
Arrive a lire trois nombres avec la condition que ces trois nombre soient entre( 0 et 100) et calcule la moyenne sans probleme ? Merci encore les gars , vous me sauvez la vie !

Besoin urgente d'aide , merci infiniment ! Bounty killah...........

6 réponses

maily Messages postés 7556 Date d'inscription lundi 26 juin 2000 Statut Contributeur Dernière intervention 23 juin 2023 453
10 nov. 2004 à 09:30
Bonjour!

Je pense que tu devrais demander de rentrer leurs notes une par une... Comme pour le nom et le prénom d'ailleurs!
Sinon, le reste me semble bon! ;-)


Maily :-))))
Boumj'chtattrape
0
Salut, ce qui plante est le fait que tu fais
char nom,prenom

un char est UN seul caractere, une string est une chaine de caractere.
donc il faut que tu fasses

char* nom;
char* prenom;

(un pointeur vers un char est une string)

Voici un prgramme qui devrait fonctionner :

#include<iostream>
using std::cout;
using std::cin;
using std::endl;

int main()
{
char* nom;
char* prenom;
float tp1,tp2,tp3;

cout<<"bonjour entrez votre nom et prenom\n";
cin>>nom>>prenom;
cout<<" Entrez vos trois notes de travaux pratiques , elles doivent etre comprises entre (0 et 100 ).\n";
cin>>tp1;
while( (tp1<0) && (tp1>100) )
{
cout<<"erreur de saisie de tp1\nRecommencez\n";
cin>>tp1;
}
cin>>tp2;
while( (tp2<0) && (tp2>100) )
{
cout<<"erreur de saisie de tp2\nRecommencez\n";
cin>>tp2;
}
cin>>tp3;
while( (tp3<0) && (tp3>100) )
{
cout<<"erreur de saisie de tp3\nRecommencez\n";
cin>>tp3;
}
cout<<"Merci "<<prenom<<" "<<nom<<" ! Votre moyenne est de "<<(tp1+tp2+tp3)/3<<endl;

return 0;
}


Pom
0
oups ! pardon, ce n'est pas

while( (tp1<0) && (tp1>100) )

mais

while( (tp1<0) || (tp1>100) )

mille excuses

pom
0
Bontykillah..........
10 nov. 2004 à 14:00
...Salut Pom et merci encore pour ton aide ,le programme arrive a compiler , mais ...juste apres avoir entrez les nom et prenom ca me met ;
SEGMENTATION FAULT ! je ne sais pas ce que c'est et je n'arrive pas a comprendre pkoi , j'ai essayer pourtant de le remodeler , mais rien .
Essaies de le compiler ,et fais moi signe des que tu peux .
je te remercie encore pour ton aide , c'est apprecié !
0
Bontykillah........
10 nov. 2004 à 13:39
...Milles merci Pom , tu me sauve la vie ! je suis toujours étonné de la facilité avec laquelle certaines personnes arrive faire de telles programmes ,

...Je vais l'essayer ! merci encore .
0
Salut Bontykillah,
Marvinrouge m'a juste donné quelques très sérieux conseils il y a quelques mois déjà, mais tu vois avec le segmentation fault j'ai toujours des choses à apprendre.
Pour moi cette erreur c'est vraiment la pire, car je mets trois plombes à la corriger.

Bonne continuation.

Pom
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
marvinrouge
10 nov. 2004 à 14:35
Salut Bontykillah, salut Pom.

La "SEGMENTATION FAULT" est du à l'écriture des nom et prénom sur 2 variables mémoires NON ALLOUEES (erreur TRES classique en C/C++)

char* nom; // pas bon !!!
char* prenom; // pas bon !!!


soit

char* nom = new char [100];
char* prenom = new char [100];

// dans ce cas sgemntation fault seulement si l'utilisateur s'AMUSE à saisir un nom ou un prénom de + de 99 caractères

(oui 99 car 100 = 99 + 1, le 1 &tan,t le '\0' caractère de fi de chaine).

marvinrouge
0
Hello!

En programmation, il faut toujours nettoyer derrière soi... donc si tu alloues de la mémoire comme suggéré par marvinrouge, n'oublie pas la désallouer quand tu n'en as plus besoin.

delete [] nom;
nom = NULL; // bonne pratique pour éviter de réutiliser une zone mémoire qui n'est plus allouée

Mais les bibliothèques standards c++ t'offrent des objets "string" qui se chargent de ces problèmes de gestion de mémoire à ta place. Il te suffit de déclarer tes variable "nom" et "prenom" comme ceci (et tu n'as même pas besoin de désallouer quoique ce soit):

std::string nom;
std::string prenom;
0
met plutot a la place de :
std::string nom;
std::string prenom;

ça :
using namespace std ;
ca va plu vit
0
Salut Baib, certes ca va plus vite mais si tu utilises une fonction de l'espace de nom standard, il risque d'y avoir un conflit.
Par
std::string nom;
std::string prenom;

tu limites la casse.

Pom
0