Erreur avec code en langage C
Résolu/Fermé
unfortic
Messages postés
24
Date d'inscription
vendredi 1 février 2008
Statut
Membre
Dernière intervention
16 mai 2012
-
19 déc. 2009 à 08:59
koyo - 22 déc. 2010 à 02:47
koyo - 22 déc. 2010 à 02:47
A voir également:
- Erreur avec code en langage C
- Erreur 0x80070643 - Accueil - Windows
- Langage ascii - Guide
- Code puk bloqué - Guide
- Code telephone oublié - Guide
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
7 réponses
Salut
Déjà, faudrait synchroniser tes commentaires avec ton code, tu y verrais peut-être un peu plus clair
Déjà, faudrait synchroniser tes commentaires avec ton code, tu y verrais peut-être un peu plus clair
Utilisateur anonyme
19 déc. 2009 à 10:13
19 déc. 2009 à 10:13
Salut,
et petite question à part : conio.h ? puisque tu l'inclues, il contient quoi ?
et petite question à part : conio.h ? puisque tu l'inclues, il contient quoi ?
unfortic
Messages postés
24
Date d'inscription
vendredi 1 février 2008
Statut
Membre
Dernière intervention
16 mai 2012
3
19 déc. 2009 à 11:47
19 déc. 2009 à 11:47
Salut
Il faut dire que je ne sais pas encore entièrement son rôle. Mais elle sert parfois quand la console ne veut pas démarrer sous Windows à l'exécution du code. Si tu l'utilise tu dois mettre avant la dernière accolade: getch();
Elle peut être remplacé par la bibliothèque stdlib.h en mettant à la fin system("pause").
Cordialement.
Il faut dire que je ne sais pas encore entièrement son rôle. Mais elle sert parfois quand la console ne veut pas démarrer sous Windows à l'exécution du code. Si tu l'utilise tu dois mettre avant la dernière accolade: getch();
Elle peut être remplacé par la bibliothèque stdlib.h en mettant à la fin system("pause").
Cordialement.
je ne sais pas ton niveau en C mais si ta deja appris le passage des parametres en lignes de commande que tu passe ensuite a main c pas mieu pour toi au lieu de faire compliqué avec des commentaires qui ne vont avec le code.
essaye un truc du genre
essaye un truc du genre
/* compilation: gcc -Wall -std=c99 -o affiche_min_max affiche.c test : ./affiche_min_max 12 48 98 2 45 0 -98 1565 */ #include <stdio.h> #include <stdlib.h> int main(int argc , char *argv[]){ /* argc est le nombre d'argument de la ligne de commande et argv contient les arguments attention le nom du programme est compté par argc et fait partir de argv il te faut au moins deux arguments: usage : ./nom_programme entier_1 ... entier_i.... entier_n pour i allant de 1 à n */ if(argc < 2 ){ // traiter le cas d'erreur ici par exple fprintf(stderr," usage: %s entier_1 ... entier_i.... entier_n\n\t il faut au moins un entier\n",argv[0]); exit(EXIT_FAILURE); // tu arete le programme avec une terminaison anormale } /* les argument fournis a la ligne de commande sont des chaines de caracteres donc il faut les convertirs en entier : on a en notre disposition atoi et strtoul pour ça: man ton_choix pour plus d'info */ int tab[argc - 1 ]; for (int i = 1 /* et oui pour i = 0 , c le nom du programme */; i < argc ; i++) tab[i - 1] = atoi(argv[i]); /* maintenant tu a ton tableau d'entier, tu peux donc faire le traitement que tu veux */ int min = tab[0], max = tab[0] ; for( int i = 0; i < argc -1 ; i ++){ if( min > tab[i] ) min = tab[i]; // tu a trouvé un plus petit, donc tu met a jour ton min if( max < tab[i]) max = tab[i]; // tu met a jour max } printf(" min = %d et max = %d\n",min, max); return EXIT_SUCCESS; }
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
19 déc. 2009 à 13:13
19 déc. 2009 à 13:13
Oui, mais l'énoncé dit qu'il ne faut pas stocker les nombres en mémoire, chose que tu fais avec ton tableau.
Cdlt,
Cdlt,
unfortic
Messages postés
24
Date d'inscription
vendredi 1 février 2008
Statut
Membre
Dernière intervention
16 mai 2012
3
19 déc. 2009 à 11:40
19 déc. 2009 à 11:40
Salut tout le monde;
Merci alphon5o pour ces explications. On n'a pas encore étudié le passage des paramètres en lignes de commande et j'ai eu du mal à suivre. Ce que j'ai trouvé bizarre toutefois, c'est qu'il y as pas de "scanf" dans ton code..Pourtant c'est l'utilisateur qui saisie les suites de nombres. Pourrait tu m'expliquer ça?
sinon, est ce qu'on peut proposer une solutions grâce aux boucles répétitives?
Merci d'avance.
Merci alphon5o pour ces explications. On n'a pas encore étudié le passage des paramètres en lignes de commande et j'ai eu du mal à suivre. Ce que j'ai trouvé bizarre toutefois, c'est qu'il y as pas de "scanf" dans ton code..Pourtant c'est l'utilisateur qui saisie les suites de nombres. Pourrait tu m'expliquer ça?
sinon, est ce qu'on peut proposer une solutions grâce aux boucles répétitives?
Merci d'avance.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
unfortic
Messages postés
24
Date d'inscription
vendredi 1 février 2008
Statut
Membre
Dernière intervention
16 mai 2012
3
19 déc. 2009 à 12:26
19 déc. 2009 à 12:26
Re tout le monde!
si on ne m'avait pas prévenu je ne l'aurais jamais su :D
il y'as deux fautes dans ce code
la première dans la ligne 10 ou j'ai ajouté % a d et l'autre dans la ligne 17 ou il faut remplacer min par n.ça y est mnt ça marche! :D
Sinon alphon j'attend tjrs ta réponse à propos des "scanf".
A bientôt.
si on ne m'avait pas prévenu je ne l'aurais jamais su :D
il y'as deux fautes dans ce code
la première dans la ligne 10 ou j'ai ajouté % a d et l'autre dans la ligne 17 ou il faut remplacer min par n.ça y est mnt ça marche! :D
Sinon alphon j'attend tjrs ta réponse à propos des "scanf".
A bientôt.
j'avais zappé !!!! lol
pour les scan refere toi a tes pages de manuel: man scan sscanf fscanf ...
mais deja retient que les fonction de la famille scanf permettent de convertir une entree en respectant un certains formats.en gros la fonction scanf permet de lire des données. Pour chaque format, la fonction lit une valeur et la dépose dans la prochaine variable. j'orai pu m'en servir d'une d'entre elle (sscanf pour la convertion)
dailleurs remplace la ligne tab[i-1] = atoi(argv[i]) par sscanf(argv[i], "%d", &tab[i-1]) pour voir que ça revient au meme c'est une question de choix et d'habitude sinon la mieu adapté pour faire ça est strtoul.
ce qui me gene dans ton code , g ne sait pas c l'ennoncé qui le specifie tu ne peux avoir 0 dans ta suite sinon bienvenue les degat vu ke c ton test d'arret .
en realité le tableau n'est pas stocké en memoire, il est sur la pile d'execution du programme et des qu'on sort de sa porté ( son bloc) il est detruit, c'est une variable locale, g n'ai fait aucune allocation memoire donc pas de souci a ce nivo. mais je pense que ta deja trouvé ta solution.
pour les scan refere toi a tes pages de manuel: man scan sscanf fscanf ...
mais deja retient que les fonction de la famille scanf permettent de convertir une entree en respectant un certains formats.en gros la fonction scanf permet de lire des données. Pour chaque format, la fonction lit une valeur et la dépose dans la prochaine variable. j'orai pu m'en servir d'une d'entre elle (sscanf pour la convertion)
dailleurs remplace la ligne tab[i-1] = atoi(argv[i]) par sscanf(argv[i], "%d", &tab[i-1]) pour voir que ça revient au meme c'est une question de choix et d'habitude sinon la mieu adapté pour faire ça est strtoul.
ce qui me gene dans ton code , g ne sait pas c l'ennoncé qui le specifie tu ne peux avoir 0 dans ta suite sinon bienvenue les degat vu ke c ton test d'arret .
en realité le tableau n'est pas stocké en memoire, il est sur la pile d'execution du programme et des qu'on sort de sa porté ( son bloc) il est detruit, c'est une variable locale, g n'ai fait aucune allocation memoire donc pas de souci a ce nivo. mais je pense que ta deja trouvé ta solution.
bonjour,
Je vais essayer de te corriger l'exo:
#include<stdio.h>
#include<conio.h>
int main ()
{
//Déclaration des variables entiers max et min
int max, min;
//declaration de l'entier saisie
int n;
//saisie de l'entier par l'utilisateur
printf("entier "); scanf("%d%",&n);
//Initialisation de max et min à n
//l'entier n n'est pas initialisé donc il peut avoir n'importe quelle valeur
//max=min=n;
max=0 ; min=0;
//Tant que l'utilisateur saisie un entier différent de 0
while(n)
{
//Si max est plus petit que n
//ici il faut comparer max à n et non a min
//if(max<min)
if (max<n)
//alors max devient n
max=n;
//sinon max est plus grand que n
else
//si min est plus grand que n
if(min>n)
//alors min devient n
min=n;
//nouvelle saisie par l'utilisateur
printf("entier: "); scanf("%d",&n);
}//fin du while(n)
//Afichage de max et min
printf("entier le plus grand: %d, et entier le plus petit: %d",max,min);
getch();
}
Je vais essayer de te corriger l'exo:
#include<stdio.h>
#include<conio.h>
int main ()
{
//Déclaration des variables entiers max et min
int max, min;
//declaration de l'entier saisie
int n;
//saisie de l'entier par l'utilisateur
printf("entier "); scanf("%d%",&n);
//Initialisation de max et min à n
//l'entier n n'est pas initialisé donc il peut avoir n'importe quelle valeur
//max=min=n;
max=0 ; min=0;
//Tant que l'utilisateur saisie un entier différent de 0
while(n)
{
//Si max est plus petit que n
//ici il faut comparer max à n et non a min
//if(max<min)
if (max<n)
//alors max devient n
max=n;
//sinon max est plus grand que n
else
//si min est plus grand que n
if(min>n)
//alors min devient n
min=n;
//nouvelle saisie par l'utilisateur
printf("entier: "); scanf("%d",&n);
}//fin du while(n)
//Afichage de max et min
printf("entier le plus grand: %d, et entier le plus petit: %d",max,min);
getch();
}
unfortic
Messages postés
24
Date d'inscription
vendredi 1 février 2008
Statut
Membre
Dernière intervention
16 mai 2012
3
19 déc. 2009 à 16:52
19 déc. 2009 à 16:52
Re calibos;
Merci pour préciser les fautes d'une manière plus claire.
Merci pour préciser les fautes d'une manière plus claire.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
19 déc. 2009 à 13:06
19 déc. 2009 à 13:06
Salut,
Voici un exemple de programme qui fait ce que tu souhaites. Lorsque l'utilisateur tape 0, cela stoppe le programme. Tu peux changer la condition, bien sûr.
Attention, par contre, le programme ne gère pas les mauvaises entrées de la part de l'utilisateur.
J'ai pas mis de commentaires. S'il y a des parties que tu comprends pas, n'hésite pas.
Cdlt,
Voici un exemple de programme qui fait ce que tu souhaites. Lorsque l'utilisateur tape 0, cela stoppe le programme. Tu peux changer la condition, bien sûr.
Attention, par contre, le programme ne gère pas les mauvaises entrées de la part de l'utilisateur.
#include <stdio.h> #include <limits.h> int main(void) { int min=INT_MAX,max=INT_MIN; int n; do { printf("nombre: "); scanf("%d",&n); getchar(); if(n<min) min=n; if(n>max) max=n; } while(n!=0); printf("min=%d\nmax=%d\n",min,max); puts("entree pour continuer"); getchar(); return 0; }
J'ai pas mis de commentaires. S'il y a des parties que tu comprends pas, n'hésite pas.
Cdlt,
loupius
Messages postés
697
Date d'inscription
dimanche 1 novembre 2009
Statut
Membre
Dernière intervention
31 décembre 2017
148
19 déc. 2009 à 15:16
19 déc. 2009 à 15:16
Sauf si l'utilisateur saisit un nombre négatif, 'min' vaudra zéro ;-)
Bon après-midi.
Bon après-midi.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
>
loupius
Messages postés
697
Date d'inscription
dimanche 1 novembre 2009
Statut
Membre
Dernière intervention
31 décembre 2017
19 déc. 2009 à 15:20
19 déc. 2009 à 15:20
C'est tout à fait juste ^^.
Juste à enrichir les if pour ne pas prendre en compte le 0 ^^.
Ou alors beaucoup mieux, détecter les lettres en passant par fgets pour quitter.
Juste à enrichir les if pour ne pas prendre en compte le 0 ^^.
Ou alors beaucoup mieux, détecter les lettres en passant par fgets pour quitter.
unfortic
Messages postés
24
Date d'inscription
vendredi 1 février 2008
Statut
Membre
Dernière intervention
16 mai 2012
3
19 déc. 2009 à 17:13
19 déc. 2009 à 17:13
Salut
Merci, c'est un code plus lisible et pratique. Mais vu que je suis encore débutant en C, je connais pas encore cette biblio que t'as utilisé : limits.h ni "do" ni que while peut se mettre à la fin. je suppose que puts est là car elle est precédé d'un printf avec 2 saut de ligne dedans.
Pourrais tu m'éclairer ça stp?
Merci.
PS:Au passage, je me demande si c'est possible d'avoir comme variables la date actuel actualisé à chaque fois que le programme s'exécute, j'en ai besoin pour un autre programme pour calculer l'âge d'une personne.
Merci, c'est un code plus lisible et pratique. Mais vu que je suis encore débutant en C, je connais pas encore cette biblio que t'as utilisé : limits.h ni "do" ni que while peut se mettre à la fin. je suppose que puts est là car elle est precédé d'un printf avec 2 saut de ligne dedans.
Pourrais tu m'éclairer ça stp?
Merci.
PS:Au passage, je me demande si c'est possible d'avoir comme variables la date actuel actualisé à chaque fois que le programme s'exécute, j'en ai besoin pour un autre programme pour calculer l'âge d'une personne.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
>
unfortic
Messages postés
24
Date d'inscription
vendredi 1 février 2008
Statut
Membre
Dernière intervention
16 mai 2012
19 déc. 2009 à 19:08
19 déc. 2009 à 19:08
limits.h c'est pour récupérer les constantes INT_MIN et INT_MAX qui sont respectivement les valeurs minimale et maximale d'un integer. Toi tu en as pas eu besoin car tu as initialisé les variables min et max à n et fait la boucle ensuite.
Moi, j'ai mis tout dans une boucle, mais dans ce cas-là, j'avais besoin d'INT_MIN et INT_MAX pour initialiser les variables min et max.
do while, ça permet de répondre à l'algorithme : répéter ... tant que. En gros, c'est comme while... mais en plaçant la condition d'arrêt à la fin.
Pour la date, tu peux récupérer localtime().
Cdlt,
Moi, j'ai mis tout dans une boucle, mais dans ce cas-là, j'avais besoin d'INT_MIN et INT_MAX pour initialiser les variables min et max.
do while, ça permet de répondre à l'algorithme : répéter ... tant que. En gros, c'est comme while... mais en plaçant la condition d'arrêt à la fin.
Pour la date, tu peux récupérer localtime().
Cdlt,
19 déc. 2009 à 11:57
Oui c'est vrai moi aussi je l'ai est trouvé mal placés. C'est en fait la solution de l'exo que je vous est réécrite littéralement, le code ne pouvant pas être copier/coller de la page pdf. pourtant, ce code ne marche pas..avez vous une idée pourquoi, sinon une autre solution en utiisant les boucles.
Merci d'avance.
22 déc. 2010 à 02:47