qui peut dire ce qui cloche dans mon mini prog ?? [ RESOLU ]

qui peut dire ce qui cloche dans mon mini prog ?? [ RESOLU ] - C - Programmation

Marsh Posté le 21-04-2005 à 00:11:14    

qui sait me dire pq rien ne s'affiche ??
 
 
 
 
 
 

Code :
  1. #include "stdio.h"
  2. #include "conio.h"
  3. #define TAILLE 14
  4. short * fonction(short * , short []);
  5. void main()
  6. {
  7. short nb=12,*p=NULL;
  8. static short v[TAILLE]={1,2,3,5,7,11,13,17,19,23,29,31,37,41};
  9.     p=fonction(&nb,v);
  10.    
  11. printf("%p\n",p);
  12. getche();
  13. }
  14. short * fonction(short * nb, short v[])
  15. {
  16. short somme=0,i=0,*p;
  17. bool g=0;
  18.   while( nb )
  19. {
  20.  somme+=*nb%10;
  21.  *nb/=10;
  22. }
  23.  
  24.   for (i=0;i<=TAILLE;++i)
  25.   {
  26.   printf("%d",v[i]);
  27.   if( v[i] == somme )
  28.   {
  29.    g=1;
  30.    p=&v[i];
  31.   }
  32.   }
  33.   return ( g ? p : NULL);
  34. }


Message édité par fullnight le 21-04-2005 à 00:46:50
Reply

Marsh Posté le 21-04-2005 à 00:11:14   

Reply

Marsh Posté le 21-04-2005 à 00:15:38    

active les warnings, et regarde tes deux premieres lignes.

Reply

Marsh Posté le 21-04-2005 à 00:23:16    

je vais ou avec visual c++ 6.0  pr activer les warning?
 
g 0 error et  0 warning
 
alors que faire??


Message édité par fullnight le 21-04-2005 à 00:30:33
Reply

Marsh Posté le 21-04-2005 à 00:37:01    

oula, en plus court :
#include <stdio.h>
#include <stdbool.h> // bool C99
 
ton while dans fonction s'emballe ...
ton for dans fonction va un coup trop loin.
 
et pitié int main por favor :o

Reply

Marsh Posté le 21-04-2005 à 00:44:44    

oui enfin bon..
tout ce qui manquait pour que mon prog tourne était ETOILE
 
devant nb dans la boucle while
 
 
MERCI QD MEME :)

Reply

Marsh Posté le 21-04-2005 à 00:50:15    

ça compile, ça s'affiche, donc ça marche  [:sinking]  
o yeah  :sleep:

Reply

Marsh Posté le 21-04-2005 à 09:22:54    

fullnight a écrit :

oui enfin bon..
tout ce qui manquait pour que mon prog tourne était ETOILE
 
devant nb dans la boucle while


Non, ça ne suffit pas.  

  • La boucle for() va trop loin (Comportement indéfini)
  • Le formatteur pour short est "%hd". (Au fait, pourquoi short et pas int ?)
  • le type pour "%p" est (void*) (cast obligatoire)



#include "stdio.h"
 
int *fonction (int *p_nb, int v[], size_t taille)
{
   int *p = NULL;
   int somme = 0;
   int g = 0;
 
   if (p_nb != NULL)
   {
      while (*p_nb > 0)
      {
         somme += *p_nb;
         somme %= 10;
         *p_nb /= 10;
      }
   }
 
   {
      size_t i = 0;
      for (i = 0; i < taille; ++i)
      {
         printf ("%3d", v[i]);
         if (v[i] == somme)
         {
            g = 1;
            p = &v[i];
         }
      }
      printf ("\n" );
   }
   return (g ? p : NULL);
}
 
int main (void)
{
   int v[] =
   {1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41};
   int nb = 12;
 
   int *p = fonction (&nb, v, sizeof v / sizeof *v);
   if (p != NULL)
   {
      printf ("*p=%d nb=%d\n", *p, nb);
   }
   else
   {
      printf ("error\n" );
   }
   return 0;
}



Message édité par Emmanuel Delahaye le 21-04-2005 à 09:23:19

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 21-04-2005 à 21:21:17    

même si elle va trop loin
 
il suffit de mettre l'étoile pour que le programme fonctionne..c tout ski manquait.
 
 
pour le formateur d'un short oui c hd, bizarrement g oublié de le remettre.
 
j'avais fait des modifs avec un int puis g remis en short mais j'ai pas rechangé partout ce qu'il fallait pour correspondre !
 
pq un short et pas un int? bein paske la taille d'un int est variable selon le compilo et mon prof préfere qu'on employe un short comme ca on sait directement combien de bytes on manipule(meme si un sizeof aura vite fait de nous dire de combien de bytes retourne le int...)
 
soit !!
 
 
"le type pour "%p" est (void*) (cast obligatoire) "
 
je sais absolument pas de quoi tu parles.
g déclaré p en tant ke pointeur sur short  
 

Reply

Marsh Posté le 21-04-2005 à 21:58:19    

Citation :

il suffit de mettre l'étoile pour que le programme fonctionne..c tout ski manquait.


 :sarcastic:  
Emmanuel va apprécier ...
 
il faut voir le fait que la taille d'un int varie selon l'implémentation comme un avantage pour la performance.  
 

Citation :

mon prof préfere qu'on employe un short


au lieu de vous inciter au tourisme, ton prof ferait mieux de se poser cette question existencielle : sizeof(short) = ???

Reply

Marsh Posté le 21-04-2005 à 22:14:25    

j'avais dit no comment a propos du sizeof please..

Reply

Marsh Posté le 21-04-2005 à 22:14:25   

Reply

Marsh Posté le 21-04-2005 à 22:26:26    

fullnight a écrit :

même si elle va trop loin


Si ça va trop loin, le comportement est indéfini, c'est tout.

Citation :


il suffit de mettre l'étoile pour que le programme fonctionne..c tout ski manquait.


Il ne suffit pas qu'un programme ait l'air de fonctionner pour qu'il soit correct.

Citation :


pq un short et pas un int? bein paske la taille d'un int est variable selon le compilo et mon prof préfere qu'on employe un short comme ca on sait directement combien de bytes on manipule(meme si un sizeof aura vite fait de nous dire de combien de bytes retourne le int...)


Mauvais prof, changer de prof. Seule la taille minimale des types sont définis par le langage C. Le type short n'echappe pas à cette regle. J'ai déjà vu des short de 32 bits (DSP Motorola 56156).
 
En fait, les types sont définis par des plages de valeurs, dont les limites pour ton compilateur se trouvent dans ... <limits.h>.

Citation :


"le type pour "%p" est (void*) (cast obligatoire) "
 
je sais absolument pas de quoi tu parles.
g déclaré p en tant ke pointeur sur short

printf("%p\n",p);




doit être modfié en:

printf("%p\n",(void *) p);


pour être conforme.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 21-04-2005 à 23:02:58    

pour mon prof un short vaut 2 bytes :)
 
et cette histoire de printf("%p\n",(void *) p);
 
me laisse perplexe !
 
je ne comprend pas du tout cette conformité
jamais mon prof n'a parlé de ca.
 
selon le prof le printf a besoin d'une adresse .
 
je pige pas pq il faut changer le type du pointeur en void * pour l'afficher
 
ca marche bien sans :|
 
on en apprend ici :) merci les pros


Message édité par fullnight le 21-04-2005 à 23:22:20
Reply

Marsh Posté le 21-04-2005 à 23:16:58    

fullnight a écrit :

pour mon prof un short vaut 2 bytes :)


C'est possible, mais c'est pas garanti. Le C dit 16 bit minimum. Point (et encore ce n'est pas exprimé comme ça, mais en plage de valeurs : -32767..32767)

Citation :


et cette histoire de printf("%p\n",(void *) p);
 
me laisse perplexe !
 
je ne comprend pas du tout cette conformité
jamais mon prof n'a parlé de ca.


Bah, il ne connait pas la norme. Normal, il ne bosse pas dans l'industrie...

Citation :

selon le prof le printf a besoin d'une adresse .


Exact.

Citation :

je pige pas pq il faut changer le type du pointeur en void * pour l'afficher


C'est exigé par la norme.

Citation :

ca marche bien sans :|


Ca ne prouve rien. "Ca marche bien" != "c'est conforme".

Citation :

on en apprend ici :)


On est là pour ça...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed