Langage C problème avec fonctions

Statut
N'est pas ouverte pour d'autres réponses.

gogoprog

Oprahiste vaudou
null a dit:
5. Dans le main, je passe les adresses de "n1" et "n2" dans "void obtention(int *n1, int *n2)". Dedans je joue avec des pointeurs. C'est beaucoup plus simple que faire des malloc (qui d'ailleurs ne sont pas déssaloué dans le code de gogoprog)
Oops c'est vrai,

et pour redband, utilise le code de null, c'est le plus simple et propre.
 

b00msTicK

O=(*.*Q)
eSb` a dit:
Pour moi, l'intérêt du malloc c'est de réserver une taille de mémoire variable à un moment précis du programme et ensuite de libérer la mémoire.

int *n = malloc(sizeof(int) * 2);

Fait comme ça, je vois moyennement l'intérêt, un int n[2] ferait la même chose, non ?

Si ça avait été int *n = malloc(sizeof(int) * N); avec un N variable, là, ça me parait plus intéressant; ça permet de créer un "tableau" de la bonne taille dès le départ sans utiliser trop de ressources. (si tu fais un n[2], et que tu ne mets qu'un nombre, tu auras réservé 'x' octets en trop qui resteront vides)
c'est bien ce que je me disais. Mais apparamment gogoprog a un warning avec ça.

ps : la solution de null est la mieux oui. on a été bêtes ^^'
edit : ah bah tlm l'a dit.
 
1er
OP
redband59

redband59

Elite
sans la librairie <iostream.h> j'ai plusieurs erreurs avec la fonction "system("pause")"

les commentaires // et /*, on les apprend et on nous a dis qu'il n'y avais pas de différence hormi le fait de pouvoir écrire sur plusieurs lignes avec /*
 
D

duvel

ex membre
ya le C (c'est que tu apprends visiblement) et le ANSI qui est une norme de programmation pour etablir des regles de "mise en page" pour uniformiser et faciliter le partage des codes ^^
 
1er
OP
redband59

redband59

Elite
ok ... autant pour moi, mais pour l'instant je vais me limiter au C normal pcq je ne compte pas faire de la programmation plus tard mais juste réussir mon examen lundi ;)
 

null

ose();
redband59 a dit:
sans la librairie <iostream.h> j'ai plusieurs erreurs avec la fonction "system("pause")"
Utilise "<stdlib.h>" pour le "system()" (pour éviter de mélanger les librairies C++) :)

redband59 a dit:
les commentaires // et /*, on les apprend et on nous a dis qu'il n'y avais pas de différence hormi le fait de pouvoir écrire sur plusieurs lignes avec /*
C'est en C++ ça mais si vous avez le droit, c'est clair que c'est beaucoup mieux
 

ailless

Asimov, Sagan, Carlin, Hitchens
edit : j'aurais mieux fait de lire en fait, je viens de voir que tu ne comptais pas de faire de la programmation plus tard, donc ma solution est trop complexe pour que tu perdes du temps à tout comprendre. Utilise scanf si tu veux, mais relis quand même bien ton cours car beaucoup d'erreurs quand même. :)

(Je n'ai pas lu tout ce qui a été posté).

Je pense que tu devrais vraiment te plonger dans le cours ici : www.siteduzero.com ou mieux relire ton cours de C. Tu fais de trop grosses erreurs.

iostream.h est en C++ (iostream en fait)

un prototype (int fonction(int, int)) se trouve avant le main et pas dans le main

la première chose qu'on trouve dans le main est la déclaration des variables et non des fonctions ou je ne sais quoi.

main renvoie un entier donc tu auras TOUJOURS 2 sortes de main

int main (void) ou int main (int argc, char *argv[])
Tu verras plus tard à quoi sert la deuxième méthode.

N'utilises pas scanf c'est une fonction très très très compliquée à utiliser, je te conseille vraiment d'utiliser fgets qui permet de réaliser des saisies sécurisées

voire ici : http://www.siteduzero.com/tuto-3-11181-1-realiser-des-saisies-securisees-grace-a-fgets.html

Une fonction ne peux retourner qu'une seule valeur. Soit tu passes un "pointeur "(adresse d'une variable qui sera alors modifiée directement en mémoire), soit une structure (adresse aussi généralement).

Voici ton code corrigé et propre. Si tu as la moindre question (et tu en auras sûrement car c'est pas ce que tu verras a ton cours), tu peux me les poser.
Le code est complexe, oui mais c'est sécurisé donc il ne plantera pas ou bien il a beaucoup moins de chance de planter qu'avec scanf.

Code:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

/* prototypes */
void purger(void);
void clean (char chaine[]);
int somme(int, int);

int main(void)
{	
   /* declarations des variables */
   int n1, n2, sommeNombres;
   
   /* 
    * buffer temporaire qui te servira a stocker ce que l'utilisateur rentre
    * avant de le transformer en entier
    */
   char buffer[10] = "\0";
   
   /* debut du traitement des variables */
   printf("Veuillez introduire le premier nombre : \n");

   /* explication dans le lien que je t'ai file */
   fgets(buffer, sizeof buffer, stdin);
   clean(buffer);
   
   /* 
    * n1 contient un nombre "obligatoirement"
    * si l'utilisateur avait rentre 95c
    * scanf aurait plante, ici n1 vaut 95
    * si l'user rentre c pour n1 et b pour n1
    * n1 et n2 vaudront 0
    */
   n1 = strtol(buffer, NULL, 10);
   
   printf("\nVeuillez introduire le second nombre : \n");

   fgets(buffer, sizeof buffer, stdin);
   clean(buffer);
   
   n2 = strtol(buffer, NULL, 10);
  
   /* 
    * ici tu recuperes ce que renvoie somme (un entier) 
    * c'est equivalent a printf("blabla : %d", somme(n1, n2);
    */
   
   sommeNombres = somme(n1, n2);

   printf("\nsomme de vos deux nombres : %d\n", sommeNombres);
   
   /* equivalent a 0 qui veut dire tout s'est bien passe */
   return EXIT_SUCCESS; 
}

/* fonctions */

int somme(int n1, int n2)
{
   return n1 + n2;
}

void purger(void)
{
    int c;

    while ((c = getchar()) != '\n' && c != EOF);
}

void clean (char *chaine)
{
    char *p = strchr(chaine, '\n');

    if (p)
    {
        *p = 0;
    }

    else
    {
        purger();
    }
}
 
1er
OP
redband59

redband59

Elite
heu ... j'ai mieux compris la méthode précédente ... la c'est super mais super compliqué pour moi de comprendre tout ce que tu m'as noté ... surtout la fonction pour transformer en entier oO
 

ailless

Asimov, Sagan, Carlin, Hitchens
redband59 a dit:
heu ... j'ai mieux compris la méthode précédente ... la c'est super mais super compliqué pour moi de comprendre tout ce que tu m'as noté ... surtout la fonction pour transformer en entier oO
C'est normal, pour les comprendre il faut lire le lien que je t'ai noté juste avant.
Prends les versions précédentes vu que tu n'es pas dans des études de programmation ce sera beaucoup plus simple pour toi et ton prof ne tentera pas de faire planter ton programme. :)

btw, on peut avoir int main(int argc, char *argv[]) n'est pas OBLIGATOIRE vu qu'on peut très bien avoir int main(void). :)
 
1er
OP
redband59

redband59

Elite
ben jsuis en technologie de l'informatique et j'ai un examen de C ... si c'est pas de la programmation c'est pas un cours de tricot non plus hein.

Enfin soit, j'ai résolu mon problème, stop de lancer tout plein de solutions j'en peut plus la :p
 

ailless

Asimov, Sagan, Carlin, Hitchens
redband59 a dit:
ben jsuis en technologie de l'informatique et j'ai un examen de C ... si c'est pas de la programmation c'est pas un cours de tricot non plus hein.

Enfin soit, j'ai résolu mon problème, stop de lancer tout plein de solutions j'en peut plus la :p
wé mais apparemment ça a pas l'air très poussé comme programmation :), bonne chance pour lundi


edit : je partais de cette phrase là :

ok ... autant pour moi, mais pour l'instant je vais me limiter au C normal pcq je ne compte pas faire de la programmation plus tard mais juste réussir mon examen lundi ;)
 
1er
OP
redband59

redband59

Elite
oui bon ... en fait on doit aussi suivre ANSI mais tant que le programme tourne les mises en formes et autres conventions ça n'est pas grave.
 

b00msTicK

O=(*.*Q)
hivenz il programme comme ses blagues : super lourd

:-D
 

ailless

Asimov, Sagan, Carlin, Hitchens
b00msTicK a dit:
hivenz il programme comme ses blagues : super lourd

:-D
lol c'est sûr mais moi ce code là dans mon futur métier, je le ferai chaque fois que j'aurai une saisie à faire en C. :)
 

k o D

Elite
hivenz a dit:
lol c'est sûr mais moi ce code là dans mon futur métier, je le ferai chaque fois que j'aurai une saisie à faire en C. :)
Je ne veux pas t"ennuyer mais dans ce cas tu n'utiliseras jamais un getchar :p
 

Froggy

fake geek
hivenz a dit:
lol c'est sûr mais moi ce code là dans mon futur métier, je le ferai chaque fois que j'aurai une saisie à faire en C. :)
puis bon a moins de tomber sur des trucs vraiment mais alors vraiment vieillot ... t'utiliseras jamais que du C++ et la vive le cin :-D
 

ailless

Asimov, Sagan, Carlin, Hitchens
k o D a dit:
Je ne veux pas t"ennuyer mais dans ce cas tu n'utiliseras jamais un getchar :p
lol...

t'as compris ce que fait ce getchar() ?
A mon avis, non. :)
 

ailless

Asimov, Sagan, Carlin, Hitchens
Froggy a dit:
puis bon a moins de tomber sur des trucs vraiment mais alors vraiment vieillot ... t'utiliseras jamais que du C++ et la vive le cin :-D
C'est sûr que toutes les applications sont codées en C++/Java/C#, faut arrêter hein. :)
 

bOweL

Intestin
hivenz a dit:
C'est sûr que toutes les applications sont codées en C++/Java/C#, faut arrêter hein. :)
Non pas toutes mais presque =p
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut