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

Utilisateur anonyme
 
et le main() il est où ? et pourquoi tu fais 2 return ?

--------------------------------------------------------
L'informatique est un long fleuve pas tranquille !!!
0
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
Guki
 
Sans main ou équivalent le compilo le compliera jamais. Ton bouquin est mauvais s'il ne le précise pas.
0
Utilisateur anonyme
 
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

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

Posez votre question
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
Utilisateur anonyme
 
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
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
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
Guki
 
correction:

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

rien de bien méchant ;-)
0
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
Guki
 
C'est pas un exercice pour apprendre les fonctions?
0
Utilisateur anonyme
 
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
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
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
Guki
 
Toute variable en C DOIT être typé à l'opposé de Java si je ne me trompe pas.
0
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
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
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
Guki > Guki
 
propre*
0
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
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
Guki
 
C++ et mal écrit qui plus est --> []

:-P
0
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
Utilisateur anonyme
 
OK !
thank you tt le monde et à plus

françois
0