Débutant C : pourquoi ça marche pas ?

françois -  
 nz_janvier -
Bonjour à tous,

je voudrais vous demander pourquoi mon programme C ne marche pas :

/* exercice 5 p 40 : multiplier 5 par 3, et afficher le résultat*/
#include <stdio.h>
int MyFunction (int x, int y)
{
x=3;
y=5;
int result;
result=x*y;
return result;
printf("3*5 font :", MyFunction);
return(0);
}

Merci

22 réponses

  • 1
  • 2
  1. poof65
     
    et le main() il est où ? et pourquoi tu fais 2 return ?

    --------------------------------------------------------
    L'informatique est un long fleuve pas tranquille !!!
    0
  2. françois
     
    Les deux return, c'est parce que je voulais, pour le premier renvoyer la valeur x*y à MyFunction... Le deuxième pour finir mon programme, je croyait qu'il fallait soit mettre return(0), soit exit(0). C'est pas ça qui faut faire pour dire que le programme c'est correctement terminé ?

    La fonction main() est toujours obligatoire ? Pourtant, dans un autre exercice, ma réponse était de trouver le programme suivant :

    int MyFunction( int x, int y)
    {
    return (x*y);
    }

    Ya pas de main() et pourtant c'est le corrigé du bouquin... ya pas d'erreur. Dans ce cas, ça voudrais dire qu'il faut main() quand il y a printf ?

    Aide moi à y voir un peu plus clair... je vais finir par faire péter mon ordi avec des programmes aussi foireux...

    A tt de suite & merci !
    0
  3. Guki
     
    Sans main ou équivalent le compilo le compliera jamais. Ton bouquin est mauvais s'il ne le précise pas.
    0
  4. poof65
     
    Oui la fonction main() est obligatoire. Si dans le corrigé elle y est pas c'est qu'elle est sous entendue.

    #include <stdio.h> 
    int MyFunction (int x, int y) 
    { 
    	int result; 
    	result=x*y; 
    	return result; 
    
    } 
    void main()
    {
    	printf("3 et 5 font %d",MyFunction(3,5));
    	return (0);
    }
    

    PS: Je suis pas sur de tout, ya longtemps que j'ai pas fait de C

    --------------------------------------------------------
    L'informatique est un long fleuve pas tranquille !!!
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Utilisateur anonyme
     
    Oui c'est ça, sauf une petite erreur : il n'y a pas de void avant main() car return renvoie une valeur. On met void quand il n'y a pas de valeur à renvoyer. En tout cas, merci ! ça m'aide à progresser d'avoir des reponses aussi vite...

    Une autre question : return(0) quand tu mets pas void, il renvoie la valeur à main() ? Ca peut prendre une valeur ?

    Merci :-)

    françois
    0
  7. poof65
     
    Tu peux renvoyer la valeur que tu veux, mais 0 veut souvent dire que le programme s'est terminé normalement, donc qu'il n'y a pas eu d'erreur lors de son execution.

    --------------------------------------------------------
    L'informatique est un long fleuve pas tranquille !!!
    0
  8. Guki
     
    Stocker le résultat dans un "result" est une instruction inutile parce que le return implique également une affectation d'une variable typé "int" d'où le type de la fonction.
    De même que "return 0" c'est pas bon parce que le type de la fonction est "void" donc aucun entier à affecter sinon le reste me semble correct.

    /* version alternative */

    /*
    <stdio.h> pour utiliser la fonction printf
    <stdlib.h> pour utiliser la macrosubstitution EXIT_SUCCESS qui vaut 0
    */

    #include <stdio.h>
    #include <stdlib.h>

    /* prototype de fonction */

    int produit(int x, int y);

    /* fonction principale ou debute le programe */

    int main()
    {
    printf("3 * 5 %i =", produit(3, 5));
    return EXIT_SUCCESS;
    }

    /* definition de fonction */

    int produit(int x, int y)
    {
    return x * y;
    }
    0
  9. Utilisateur anonyme
     
    Merci pour la réponse.
    En revanche, tu m'as dit ou allait la valeur ?
    Dans main() ?

    Chui allé voir ton site : il est excellent ! (la musique, pas mal ! en +, c'est rapide, je suis en 56k et ça marche super bien !). On peut télécharger ou il y a des droits d'auteurs ?

    Merci, je suis en rtain de faire l'inventaire des musique de ton site. Là c'est Robert Miles, children qui tourne

    Allez, A+

    françois
    0
  10. Guki
     
    correction:

    printf("3 * 5 = %i", produit(3, 5));

    rien de bien méchant ;-)
    0
  11. nab
     
    /* exercice 5 p 40 : multiplier 5 par 3, et afficher le résultat*/ 
    #include <stdio.h> 
    void main()
    {
                        int result;
                         result= 3 * 5;
    	printf("3 et 5 font %d",result);
    	return (0);
    }
    

    voilà la seule solution interessante dans un cas comme celui là

    il est totalement stupide de faire une fonction pour un programme si simple pourquoi ?
    1-taille de l'executable
    2-mémoire utilisée par l'application = (varaiables+executable+fichiers quand il y en a à traiter.)
    Il est inutile de definir des variables pour s'en servir comme constantes c'est meme une erreur qui peut provoquer des erreurs sur un programme complexe...

    exemple
    programme 9000octets
    variables 1000octests
    lors de l'execution le programme utilise 100000octets.

    le même programme BIEN ecrit
    programme 7500octets
    variables750octets dont maxi 125 simultanément
    constantes250 octets
    soit lors de l'execution seulement 7875octets utilisés

    alors sur un programme complexe imaginez la difference de l'ordre de la 10zaine de Mo en Ram ou pire en swap (donc acces disque donc ralentissements) !!!!
    0
  12. Guki
     
    C'est pas un exercice pour apprendre les fonctions?
    0
  13. poof65
     
    Pour les midis je pense qu'ils sont diffusables partout sans problèmes (je ne sais pas s'il y a des droits).
    Merci pour mon jukebox, j'ai quand même ecouter plus de 2000 midis avant de selectionner les meilleurs ;-)
    Bon alors la valeur retournée par main() est récupérée par le programme qui l'appelle. Par exemple tu es sous DOS et tu lance ton programme et a la fin du programme tu tapes
    IF ERRORLEVEL 0 ECHO PROGRAMME CORRECTEMEMNT TERMINE

    Et si le message s'affiche a la ligne en dessous c'est que le DOS a bien recu le code 0.

    --------------------------------------------------------
    L'informatique est un long fleuve pas tranquille !!!
    0
  14. Utilisateur anonyme
     
    Alors, il y a plein de messages qui sont arrivés...

    Nab : en effet ton programme est bien plus simple. Mais si le corrigé est plus complexe, c'est surement pour m'apprendre à utiliser variables et fonctions car je ne fais que commencer ! C'est quelque chose de complètement nouveau, donc ça m'entraîne un peu...

    poof65 : j'ai trouvé ma réponse tt seul pour le téléchargement : c'est pas marqué très loin de la chanson, juste en dessous...

    A tt le monde :
    Ce que je comprends pas c'est une fois on met main(), une autre fois on met int main().
    int main() sert à mettre une valeur à main ? Alors main() à ne pas en mettre. Dans ce cas là, je ne vois pas à quoi sert void main() : ya marqué dans le bouquin que c'est pour pas affecter de valeur à main().

    J'espère que j'ai correctement formulé ma phrase... elle est pas terrible, chè pas si on comprends quelque chose... à part le mot 'main()' ya pas grand chose... je sais pas comment la formuler ma phrase !

    Merci à celui qui pourra répondre à ce charabia
    françois
    0
  15. Guki
     
    En C il y a plusieurs type de variable void (qui ne contient rien), char (entier 8 bits), int (entier 32 bits sur CPU 32 bits), float (nombre à virgule flottante) + dérivés (long, signed, unsigned, etc).
    A chaque fonction on associe un type de valeur de retour (une sorte de variable pour stocker le résultat de la fonction) et la fonction main n'échappe pas à la règle. Voilà tout.
    0
  16. Guki
     
    Toute variable en C DOIT être typé à l'opposé de Java si je ne me trompe pas.
    0
  17. Lupin
     
    Bonjour,

    Autre version !

    // Essai de fonction
    #include <iostream>
    using namespace std;

    // Prototype de fonction et définition
    int MaFonction(int x, int y) { return x*y;};

    /* fonction principale ou debute le programe */

    int main()
    {
    cout << MaFonction(3,5) << endl;
    }

    Lupin
    0
    1. Lupin
       
      Oups !

      Petite erreur :

      // Essai de fonction
      #include <iostream>
      using namespace std;

      // Prototype de fonction et définition
      int MaFonction(int x, int y) { return x*y;};

      /* fonction principale ou debute le programe */

      void main()
      {
      cout << MaFonction(3,5) << endl;
      }
      0
      1. Guki > Lupin
         
        int MaFonction(int x, int y) { return x*y;}

        serait mieux je pense car ce n'est pas une instruction mais une définition de fonction donc pas d'opération à faire au sens propore.
        0
      2. Guki > Guki
         
        propre*
        0
      3. Guki > Lupin
         
        Pour encore être plus chiant :-P les commentaire avec // proviennent du C++ et ont été seulement ajoutés à la dernière révision de la norme C donc pour rendre le code le plus portable possible il est conseillé de conserver /* blablabla */ des fois qu'on compile sur un vieux machin de la préhistoire.
        0
  18. Utilisateur anonyme
     
    Donc si je comprends bien, il faut toujours mettre int devant main() ?
    En tt cas, encore merci de répondre aussi vite que tu le fais !
    A+

    françois
    0
  19. Guki
     
    Pas toujours int mais c'est un type possible voir obligatoire depuis la dernière norme. En ANSI/ISO9899:1990 le void est valide pas en ISO9899:1999.
    0
  20. Utilisateur anonyme
     
    OK !
    thank you tt le monde et à plus

    françois
    0
  • 1
  • 2