Help Pour un débutant

Help Pour un débutant - Programmation

Marsh Posté le 06-08-2002 à 19:36:21    

je suis sous Xp et donc j'ai prit borland, parcque j'ai aussi un pc sous linux met e-mac est encore bien compliquer pour moi il me demande plein de truc.
donc avec borland j'est essayer de faire un 1er programe et j'ai un probleme. voila le code du programme:
 
 
#include <stdio.h>
main()
{
float valeur= 12.85;
float carre, cube;
int ent;
carre= valeur*valeur;
cube= carre*valeur;
printf ("la valeur%f a pour carré %f et pour cube %f\n", valeur, carre, cube);
ent= cube;
printf ("la partie enrière de son cube est: %d", ent);
}
 
 
et il me met comme erreur :  
[C++ Warning] File1.c(12): W8070 Function should return a value
soit une erreur sur la ligne 12 cad le "}"
donc si qq1 pourrais m'aider la!!!

Reply

Marsh Posté le 06-08-2002 à 19:36:21   

Reply

Marsh Posté le 06-08-2002 à 19:39:30    

la fonction main doit toujours retourner une valeur !  
 
voici ta fonction rectifiée :

Code :
  1. #include <stdio.h>
  2. int main(int argc, char **argv)
  3. {
  4.     float valeur= 12.85;
  5.     float carre, cube;
  6.     int ent;
  7.     carre= valeur*valeur;
  8.     cube= carre*valeur;
  9.     printf ("la valeur%f a pour carré %f et pour cube %f\n",valeur, carre, cube);
  10.     ent= cube;
  11.     printf ("la partie enrière de son cube est: %d", ent);
  12.     return 0;
  13. }


Message édité par Harkonnen le 06-08-2002 à 19:39:49

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 06-08-2002 à 19:55:54    

merci harkonnen met dans mon bouquin ou j'est tirer ce code il dise pas de rajoutée ca, je me demande pk?
Entoucas comme ca ya plus d'erreur et ca compile bien et me creait mon .exe
 
parcontre il me reste alors 2 petite question: d'une le .exe lorsque je le lance ne fait aucune action, rien ne se passe???
je suis sous Windows Xp ca vient de ca ou alors ya un autre pb?
 
et ensuite tu pourrais me dire pk a ton avis c'etait pas marquer dans mon bouquin de C?enfin ce que je veut savoir c a qoi serve précisement tes commandes en plus?
 
enfin voila et merci boy

Reply

Marsh Posté le 06-08-2002 à 20:20:55    

bon, c'est parti pour un cours abrégé de C !
 
La définition du C Ansi indique que la fonction main doit toujours retourner une valeur. Ca permet par exemple de voir si l'éxécution du programme s'est bien passée ou non. Généralement, si tu retournes 0 (return 0), ça veut dire que l'éxécution s'est faite sans problème. Au fur et à mesure de l'éxécution de ton code, tu peux être amené à faire différents tests de validité, et en fonction de ce test, tu retournes une valeur.
 
Exemple : quand tu créé un socket, tu testes si l'initialisation s'est correctement passée. Si oui, tu continues ton programme, sinon tu renvoies une valeur (2 par exemple) qui te permettra de voir que ton programme ne marche pas parce que l'initialisation du socket s'est mal passée.
 
Le return 0 que je t'ai rajouté est nécessaire, et indique que le programme s'est terminé normalement.
 
La signature de ta fonction signifie ceci :
 
int main(int argc, char **argv)
 
le "int main" signifie que la fonction renverra un integer (une valeur entière).
 
le paramètre argc est le nombre de paramètres que tu as passé en ligne de commandes, +1 pour le nom du programme.  
 
le paramètre argv est un tableau de chaines de caractères qui contient les chaines correspondant aux différents arguments.
 
Ex : test.exe toto1 toto2
 
ici, argc vaudra 3, car il y a 2 paramètres (toto1 et toto2) et le nom du programme (test.exe)
 
argv contiendra les chaines suivantes :
argv[0] = "test.exe";
argv[1] = "toto1";
argv[2] = "toto2";
 
tu pourras ainsi traiter les différentes options de la ligne de commande.
 
Enfin, ton programme fonctionne correctement sous XP. Le problème est qu'il s'agit d'une application console, et donc ça t'affiche le résultat dans la console, qui se referme aussitot. C'est pour ça que tu as l'impression que ça marche pas. Lance ton programme à partir d'une fenêtre MS-DOS.
 
Si tout ça n'est pas marqué dans ton bouquin, c'est parce qu'il est pourri !!! (c'est quoi comme bouquin ?)
Pour le C, un seul bouquin possible : "Le Langage C" de Kernighan et Ritchie, les créateurs du langage. LA référence.
 
Une dernière chose à propos de ton source ! J'espère qu'il ne vient pas de ton bouquin, sinon je te conseille de te faire rembourser !!
 
Pour retourner la partie entière d'un décimal, tu as la fonction modf, incluse dans <math.h>. Ce que tu fais est du bricolage archi faux !!
 
ent = cube;
=> FAUX !! cube est un flottant et ent un entier ! tu auras un cast implicite absolument merdique
 
printf ("la partie enrière de son cube est: %d", ent);
oh la la la .... [:leg9]
 
float valeur= 12.85;
 
à remplacer par const float valeur = 12.85
 
bref... achete le bouquin !!!
 
 


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 06-08-2002 à 20:25:24    

Autre solution qui marchera :
 

Code :
  1. #include <stdio.h> 
  2.   void main(void
  3.   { 
  4.         float valeur= 12.85; 
  5.         float carre, cube; 
  6.         int ent; 
  7.         carre= valeur*valeur; 
  8.         cube= carre*valeur; 
  9.         printf ("la valeur%f a pour carré %f et pour cube %f\n",valeur, carre, cube); 
  10.         ent= cube; 
  11.         printf ("la partie enrière de son cube est: %d", ent);
  12.   }


 
void signifie pas de valeur, c'est à dire que ton programme n'aura pas besoin d'argument et ne retournera aucune valeur (ce n'est pas pour ça que tu ne pourras rien afficher ou autre ...)
 
Et maintenant tu devrais voir qqch avec ça, j'ai rajouter la fonction getch() (dans conio.h) qui attends l'appuis d'un touche ...
 

Code :
  1. #include <stdio.h> 
  2.   #include <conio.h> 
  3.   void main(void
  4.   { 
  5.         float valeur= 12.85; 
  6.         float carre, cube; 
  7.         int ent; 
  8.         carre= valeur*valeur; 
  9.         cube= carre*valeur; 
  10.         printf ("la valeur%f a pour carré %f et pour cube %f\n",valeur, carre, cube); 
  11.         ent= cube; 
  12.         printf ("la partie enrière de son cube est: %d", ent);
  13.         getch();
  14.   }


Reply

Marsh Posté le 06-08-2002 à 20:51:26    

Merci a vous deux pour vos réponse

Reply

Marsh Posté le 06-08-2002 à 21:57:38    

suis-je donc le seul a penser que

Code :
  1. ent= cube; 
  2.         printf ("la partie enrière de son cube est: %d", ent);
  3.   }


est du code dégueulasse, et que la fonction modf est bien plus propre ?  :??:


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 06-08-2002 à 22:33:29    

Harkonnen a écrit a écrit :

suis-je donc le seul a penser que

Code :
  1. ent= cube; 
  2.         printf ("la partie enrière de son cube est: %d", ent);
  3.   }


est du code dégueulasse, et que la fonction modf est bien plus propre ?  :??:  




 
oui
lu dans le kernighan et ritchie (2e édition page 151) :
"printf convertit, met en forme, et imprime ses arguments sur la sortie standard"
 
edit : correction d'une faute de frappe


Message édité par HappyHarry le 06-08-2002 à 22:33:53
Reply

Marsh Posté le 06-08-2002 à 22:42:24    

HappyHarry a écrit a écrit :

 
 
oui
lu dans le kernighan et ritchie (2e édition page 151) :
"printf convertit, met en forme, et imprime ses arguments sur la sortie standard"



 
OK
compile moi ça, utilise GCC, VC, BCB, ce que tu veux ! et si y'en a un qui ne te sort pas un warning, je m'incline.  
et si y'a un warning, c'est qu'il y a du code dégueulasse !


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 06-08-2002 à 22:51:45    

Harkonnen a écrit a écrit :

 
 
OK
compile moi ça, utilise GCC, VC, BCB, ce que tu veux ! et si y'en a un qui ne te sort pas un warning, je m'incline.  
et si y'a un warning, c'est qu'il y a du code dégueulasse !




 
en -Wall je te le concede, et pis de toutes facons ca devrait pas faire ce qu'il veut  ;)

Reply

Marsh Posté le 06-08-2002 à 22:51:45   

Reply

Marsh Posté le 07-08-2002 à 12:49:02    

And ze winner is..... :d
 
http://forum.hardware.fr/images/feydrautha.jpg


Message édité par Harkonnen le 07-08-2002 à 12:49:42

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed