Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2103 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [Résolu] Déclaration implicite

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] Déclaration implicite

n°1381576
Aguila73
Posté le 05-06-2006 à 18:52:49  profilanswer
 

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
mood
Publicité
Posté le 05-06-2006 à 18:52:49  profilanswer
 

n°1381580
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 05-06-2006 à 18:56:26  profilanswer
 

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)
n°1381584
skelter
Posté le 05-06-2006 à 19:04:38  profilanswer
 

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*

n°1381585
simple_stu​pid
Keep It Simple Stupid
Posté le 05-06-2006 à 19:05:30  profilanswer
 

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
n°1381588
Aguila73
Posté le 05-06-2006 à 19:07:45  profilanswer
 

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°1381592
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 05-06-2006 à 19:13:00  profilanswer
 

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)
n°1381593
skelter
Posté le 05-06-2006 à 19:15:24  profilanswer
 

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 ?

n°1381665
Emmanuel D​elahaye
C is a sharp tool
Posté le 05-06-2006 à 21:20:20  profilanswer
 

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/
n°1381673
Aguila73
Posté le 05-06-2006 à 21:45:57  profilanswer
 

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!

n°1381675
skelter
Posté le 05-06-2006 à 21:53:59  profilanswer
 

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

mood
Publicité
Posté le 05-06-2006 à 21:53:59  profilanswer
 

n°1381678
jlighty
Posté le 05-06-2006 à 21:56:55  profilanswer
 

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
n°1381680
Aguila73
Posté le 05-06-2006 à 21:58:16  profilanswer
 

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

n°1381684
jlighty
Posté le 05-06-2006 à 22:04:27  profilanswer
 

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

n°1384182
Aguila73
Posté le 09-06-2006 à 00:08:39  profilanswer
 

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..............................................

n°1384269
_darkalt3_
Proctopathe
Posté le 09-06-2006 à 09:57:22  profilanswer
 

tu édites le titre de ton premier post

n°1384975
Sve@r
Posté le 10-06-2006 à 05:57:07  profilanswer
 

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.
n°1384994
skelter
Posté le 10-06-2006 à 10:04:41  profilanswer
 

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

n°1384995
Sve@r
Posté le 10-06-2006 à 10:08:43  profilanswer
 

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.
n°1385777
Aguila73
Posté le 12-06-2006 à 13:57:13  profilanswer
 

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!

n°1386040
Trap D
Posté le 12-06-2006 à 19:26:51  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [Résolu] Déclaration implicite

 

Sujets relatifs
[RESOLU]Envoie via outlook d'un mail "préformatté" depuis un formulair[résolu]mon update n'est pas accepté
[Résolu] SqlServer procédure de lancer à heure fixe"RESOLU" Macro ou lien hypertexte pour ouvrir un fichier .xls
[resolu] pourquoi phpadmin ne marche pas[Résolu]Perfectionner mon code VBA
[Résolu] Problème MySQL 1&1 : plus de protection de chaine !Problème excel... [RESOLU]
division de string[resolu][Resolu] string.lenght qui marche une fois sur deux
Plus de sujets relatifs à : [Résolu] Déclaration implicite


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR