Probléme en c
Fermé
star
-
15 mars 2009 à 14:27
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 15 mars 2009 à 23:23
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 15 mars 2009 à 23:23
3 réponses
Bonjour,
J'ai déjà tapé ce début de code à améliorer :
J'ai déjà tapé ce début de code à améliorer :
#include <stdio.h> #include <tchar.h> #include <math.h> #include <ctype.h> void Affiche_Couleurs_No() { printf("Noir : 0\n"); printf("Magenta : 1\n"); printf("Rouge : 2\n"); printf("Orange : 3\n"); printf("Jaune : 4\n"); printf("Vert : 5\n"); printf("Bleu : 6\n"); printf("Violet : 7\n"); printf("Gris : 8\n"); printf("Blanc : 9\n"); } char *substr(const char *s, int deb, int len) { char *str = calloc (len + 1, sizeof(char)); strncpy (str,deb + s,len); return str; } int main() { char Couleur_1[2]; char Couleur_2[2]; char Couleur_3[2]; char Res_Ohms_Char_Dig_2[3]; int Res_Ohms_Int_Dig = 0; printf(" -----------------------------------------------------------------------------------------------\n"); printf(" ------------------------------ CALCUL RESISTANCE --------------\n"); printf(" -----------------------------------------------------------------------------------------------\n\n"); Affiche_Couleurs_No(); printf("\n > Entrez la 1ere couleur : "); scanf("%s", &Couleur_1); printf(" > Entrez la 2eme couleur : "); scanf("%s", &Couleur_2); printf(" > Entrez la 3eme couleur : "); scanf("%s", &Couleur_3); strcpy(Res_Ohms_Char_Dig_2, substr(&Couleur_1,0,1)); strcat(Res_Ohms_Char_Dig_2, substr(&Couleur_2,0,1)); Res_Ohms_Int_Dig = atoi(Res_Ohms_Char_Dig_2); Res_Ohms_Int_Dig = Res_Ohms_Int_Dig * pow(10,atoi(Couleur_3)); printf(" > Resistance : %d Ohms", Res_Ohms_Int_Dig); return(0); }
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
15 mars 2009 à 17:58
15 mars 2009 à 17:58
Salut,
scanf("%s", &Couleur_1);
Couleur_1 est un une chaîne de caractère, pas besoin de &, etc.
substr c'est quoi?
scanf("%s", &Couleur_1);
Couleur_1 est un une chaîne de caractère, pas besoin de &, etc.
substr c'est quoi?
mamiemando
Messages postés
33346
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
8 novembre 2024
7 803
15 mars 2009 à 23:18
15 mars 2009 à 23:18
Ce qui a de bien c'est qu'on est pas perdu avec les élèves :-)
http://www.commentcamarche.net/forum/affich 11519691 un bon exercice programmation
Bon mais on a progressé, là au moins on sent qu'il y a du progret et un début de travail.
Sinon lami20j substr est une fonction qui extrait une sous chaîne et qu'il a réécrit dans son code.
Quelques remarques :
- en C il faut éviter les allocations quand ce n'est pas nécessaire, surtout que là tu n'en as pas besoin et que là tu ne désalloue pas ce que substr a alloué. En l'occurrence une sous chaîne n'est qu'un sous tableau. et là tu pousses le vice à n'extraire qu'un caractère... il suffit d'écrire my_str[i] pour extaire le ième char !
- return n'est pas une fonction. Ecris directement "return 0;"
- évite les headers non standards et inutiles comme <tchar.h>.
- pourquoi passer par une chaîne quand un scanf permet de lire directement un entier ???? Surtout si c'est pour faire un atoi derrière ?
Bonne chance
http://www.commentcamarche.net/forum/affich 11519691 un bon exercice programmation
Bon mais on a progressé, là au moins on sent qu'il y a du progret et un début de travail.
Sinon lami20j substr est une fonction qui extrait une sous chaîne et qu'il a réécrit dans son code.
Quelques remarques :
- en C il faut éviter les allocations quand ce n'est pas nécessaire, surtout que là tu n'en as pas besoin et que là tu ne désalloue pas ce que substr a alloué. En l'occurrence une sous chaîne n'est qu'un sous tableau. et là tu pousses le vice à n'extraire qu'un caractère... il suffit d'écrire my_str[i] pour extaire le ième char !
- return n'est pas une fonction. Ecris directement "return 0;"
- évite les headers non standards et inutiles comme <tchar.h>.
- pourquoi passer par une chaîne quand un scanf permet de lire directement un entier ???? Surtout si c'est pour faire un atoi derrière ?
int x; do{ printf("saisissez un entier compris entre 0 et 9\n"); } while(!scanf("%d",&x) || x < 0 || x > 9);
Bonne chance
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
15 mars 2009 à 23:23
15 mars 2009 à 23:23
Salut,
il a réécrit dans son code.
Je suis aveugle ;-).
Je n'ai même pas vu la fonction et je me suis posé la question où il a trouvé cette fonction en C.
J'ai été induit en erreur puisque cette fonction existe déjà dans d'autre langages.
il a réécrit dans son code.
Je suis aveugle ;-).
Je n'ai même pas vu la fonction et je me suis posé la question où il a trouvé cette fonction en C.
J'ai été induit en erreur puisque cette fonction existe déjà dans d'autre langages.