[Résolu] Déclaration implicite

Déclaration implicite [Résolu] - C - Programmation

Marsh Posté le 05-06-2006 à 18:52:49    

Salut tout le monde!
 Bon alors, je pense que cette question va paraïtre très facile aux programmeurs pro, mais là je bloque. J'ai pourtant fait des trucs bien plus compliqués, mais c'est la première fois que j'utilise la fonction random et sleep... :jap:  
 
En fait, mon programme consiste à écrire un texte, ici "hello" pour l'exemple, mais de façon à ce que celà crée un effet réaliste...: les lettres apparaissent les unes après les autres...Seulement, quand je compile, j'ai un warning qui me dit que je fais une déclaration implicite à sleep et à random...pourtant, j'ai bien inclus les headers  :??:  
 
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. int main (void)
  5. {
  6.     char texte[100] = "hello";
  7.     int i;
  8.     while (texte != '\0')
  9.     {
  10.         sleep (random (100));
  11.         printf ("%s", &texte[i]);
  12.         i++;
  13.     }
  14.     return 0;
  15. }


 
PS: Au niveau de la syntaxe de certaines fonctions, il est possible que celà ne soit pas juste, notemment pour les fonctions sleep et random...mais ceci n'est pas un soucis, car je consulterais la doc en ligne.
 
Voilà, alors grand merci d'avance à ceux qui me diront d'où vient le problème... :hello:  
 
.............AgUiLa73.............

Message cité 1 fois
Message édité par Aguila73 le 12-06-2006 à 13:59:55
Reply

Marsh Posté le 05-06-2006 à 18:52:49   

Reply

Marsh Posté le 05-06-2006 à 18:56:26    

tu codes sous Windows ? si oui, alors rajoute la ligne suivante au tout début de ton programme :

Code :
  1. #include <windows.h>


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 05-06-2006 à 19:04:38    

commande de compilation ?
 
si tu utilise gcc faut pas de -ansi ou de -std=c*, il faut compiler dans le mode par defaut ou en -std=gnu*

Reply

Marsh Posté le 05-06-2006 à 19:05:30    

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. int main (void)
  5. {
  6.     char texte[100] = "hello"; (pourquoi pas char texte[] = "blabla" ?)
  7.     int i;
  8.     while (texte != '\0')  (es-tu sûr de ce que tu fais? Tu compares l'adresse de ta chaîne avec 0. Ca va boucler longtemps...)
  9.     {
  10.         sleep (random (100)); (pas de paramètre pour random())
  11.         printf ("%s", &texte[i]); (tu imprimes l'adresse du caractère i, en tant que chaîne de caractères).
  12.         i++;
  13.     }
  14.     return 0;
  15. }


Message édité par simple_stupid le 05-06-2006 à 19:11:41
Reply

Marsh Posté le 05-06-2006 à 19:07:45    

Merci pour vos réponses, mais "tout est bon", sauf que çà ne marche toujours pas. J'ai rajouté le linker windows, et mes options de compilation étaient bonnes...mais rien, toujours le même message d'erreur... :heink:

Reply

Marsh Posté le 05-06-2006 à 19:13:00    

Aguila73 a écrit :

Merci pour vos réponses, mais "tout est bon", sauf que çà ne marche toujours pas. J'ai rajouté le linker windows, et mes options de compilation étaient bonnes...mais rien, toujours le même message d'erreur... :heink:


t'as vraiment inclus windows.h au tout début de ton programme ?
sinon essaye Sleep() et Random() (avec les initiales en majuscule)


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 05-06-2006 à 19:15:24    

pas de windows.h
 

Aguila73 a écrit :

Merci pour vos réponses, mais "tout est bon", sauf que çà ne marche toujours pas. J'ai rajouté le linker windows, et mes options de compilation étaient bonnes...mais rien, toujours le même message d'erreur... :heink:


 
n'inclus pas windows.h, c'est un malentendu
 
tu compiles avec quoi ?

Reply

Marsh Posté le 05-06-2006 à 21:20:20    

Aguila73 a écrit :

Salut tout le monde!
 Bon alors, je pense que cette question va paraïtre très facile aux programmeurs pro, mais là je bloque. J'ai pourtant fait des trucs bien plus compliqués, mais c'est la première fois que j'utilise la fonction random et sleep... :jap:  

Aucune de ces fonctions ne sont standards.

  • Quelle plateforme ?
  • Quel compilateur ?


Message édité par Emmanuel Delahaye le 05-06-2006 à 21:21:14

---------------
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 05-06-2006 à 21:45:57    

Désolé pour le temps de réponse, j'ai du m'absenter. :sleep:  
Alors mon compilateur ets gcc et je tourne sous windows XP...
Mais j'avais pas fais attention au message de simple_stupid, message pourtant très voyant...
 

Citation :

printf ("%s", &texte[i]); (tu imprimes l'adresse du caractère i, en tant que chaîne de caractères).


 
et je ne comprend pas pourquoi ma boucle risquerait de boucler longtemps? :??: Parce qu'en fait, je compare tout simplement la valeur de chaque case, et quand il rencontre le caractère de fin de chaîne, je dis à ma boucle de stopper,....non? :(  
 

Citation :

char texte[100] = "hello"; (pourquoi pas char texte[] = "blabla" ?)


...et pour le coup de ma déclaration de tableau, en effet oui!  :D  
 
Si jamais vous essayer le code que j'ai fais, il marche ou pas chez vous?
 
Merci encore pour vos réponses!

Reply

Marsh Posté le 05-06-2006 à 21:53:59    

Aguila73 a écrit :


Alors mon compilateur ets gcc et je tourne sous windows XP...


 
alors tu la donnes la commande de compilation ??
 

Aguila73 a écrit :


Si jamais vous essayer le code que j'ai fais, il marche ou pas chez vous?  


 
le code est faux, regarde le man de printf ou utilises putchar pour afficher un caractere

Reply

Marsh Posté le 05-06-2006 à 21:53:59   

Reply

Marsh Posté le 05-06-2006 à 21:56:55    

Code :
  1. while (texte != '\0')  (es-tu sûr de ce que tu fais? Tu compares l'adresse de ta chaîne avec 0. Ca va boucler longtemps...)


En faite tu veux examiner chaque caractère afin de déterminer si c'est le caractère de fin de chaine '\0' ?

Code :
  1. while (texte[i]!='\0')


Message édité par jlighty le 05-06-2006 à 22:05:33
Reply

Marsh Posté le 05-06-2006 à 21:58:16    

Ah ouai,  :whistle: , ca paraît bête, mais on y pense pas assez souvent à ces petits trucs... :lol:  Merci bien.

Reply

Marsh Posté le 05-06-2006 à 22:04:27    

Emmanuel Delahaye> oups, j'ai corrigé  :whistle:

Reply

Marsh Posté le 09-06-2006 à 00:08:39    

Désolé, j'ai oublié de poster la solution que j'ai trouvé, qui marche impec'! :
 

Citation :


void Ecriture (char *c)
{
    int i = 0;
 
    while (c[i] != '\0')
    {
        usleep (aleatoire(9000, 50000));
        printf ("%c", c[i]);
        i++;
    }
}


 
Et je l'appelle comme ceci: Ecriture ("Hello, world!" ); Ca marche du tonnerre!!
Merci de votre aide! Au fait, comment on fait pour marquer un probleme comme résolu? j'ai cherché, pas trouvé.  :??:  
 
Bye! :hello:  
 
................................................AgUiLa73..............................................

Reply

Marsh Posté le 09-06-2006 à 09:57:22    

tu édites le titre de ton premier post

Reply

Marsh Posté le 10-06-2006 à 05:57:07    

Aguila73 a écrit :

Citation :


void Ecriture (char *c)
{
    int i = 0;
 
    while (c[i] != '\0')
    {
        usleep (aleatoire(9000, 50000));
        printf ("%c", c[i]);
        i++;
    }
}



Déjà, l'emploi du "for" est préférable à un "while" pour ce genre de boucle.
Ensuite, tu peux éviter ce double appel à "c[i]" (deux fois l'opération de référencement d'un élément d'un tableau) en utilisant un petit pointeur.

Code :
  1. void Ecriture (char *c)
  2. {
  3.     char *pt;
  4.      for (pt=c; *pt != '\0'; pt++)   
  5.     {
  6.          usleep(aleatoire(9000, 50000));   // ptet remplacer par "sleep(aleatoire(9, 50))"
  7.          printf("%c", *pt);
  8.     }
  9. }


Et pour une fonction aussi courte où "c" n'est pas réutilisé, tu peux même éviter de déclarer "pt" et tout faire avec "c"...
 
Enfin ta coloration syntaxique est magnifique... mais tu aurais pu t'éviter beaucoup de soucis en utilisant la balise "[cpp]" au lieu de "[quote]"


Message édité par Sve@r le 10-06-2006 à 06:03:57

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 10-06-2006 à 10:04:41    

question efficacité il vaut mieux remplacer printf("%c", c[i]) par putchar(c[i])

Reply

Marsh Posté le 10-06-2006 à 10:08:43    

skelter a écrit :

question efficacité il vaut mieux remplacer printf("%c", c[i]) par putchar(c[i])


Ah oui, bonne remarque !!!  ;)


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 12-06-2006 à 13:57:13    

Oki, bon bah alors, quelques petites modif' et ce sera nickel!  :ange:  Merci bien à tous! Je vais marquer le problème comme résolu!
ByeBye! A la prochaine!

Reply

Marsh Posté le 12-06-2006 à 19:26:51    

skelter a écrit :

question efficacité il vaut mieux remplacer printf("%c", c[i]) par putchar(c[i])


Très utile effectivement quand c'est précédé par cette ligne de code

Citation :

usleep (aleatoire(9000, 50000));

:lol:  
(mais c'est vrai qu'on gagne un peu de temps machine.

Reply

Sujets relatifs:

Leave a Replay

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