IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

un programme en c


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2007
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 285
    Par défaut un programme en c
    bonjour tout le monde,j'aimerais bien que vous m'aidiez à comprendre ce à quoi sert ce programme,en fait ce qui m'empeche à le comprendre c'est l 'utilisation de continue et return 1,bon voila le programme que j'ai dans les mains:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include<stdio.h>
    main()
     
    {
      int i,j;
      char c;
      for(i=0,j=0;(c= getchar())!=' \n';i++)
        { if(c==' ') continue; 
            j++;}
     printf ("i=%d\n",i);
     printf("i=%d\n",j)
    return 1;
    }

  2. #2
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Salut,

    Je sais pas à quoi sert ce programme mais je dois dire que c'est de toute beauté
    • mauvaise définition du main(), c'est "int main(void)" (version sans arguments)
    • il manque un point virgule
    • main qui retourne jamais 0 (alors que ça devrait etre le code de retour si tout va bien)
    • on peut souvent se passer de "continue", son utilisation est aussi discutable que goto
    • indentation à la one aigain


    La signification de continue est dans ton bookain de C

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2007
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 285
    Par défaut
    en fait je n'ai fait que copier le programme d'un devoir qui s'est passé l année derniere ,et c'est par un prof en informatique

  4. #4
    Membre éclairé
    Inscrit en
    Octobre 2007
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 285
    Par défaut
    1) Que fait-on dans le programme suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <stdio.h>
     
    main () 
    { int i, j;
      char c;
      for (i = 0, j = 0; (c = getchar()) != ‘\n’; i++)
            {if (c == ‘ ’)  continue;
              j++;
             }
      printf (“i = %d \n”, i);
      printf (“j = %d \n”, j);
      return 1;
    }

  5. #5
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    C'est pas sorcier, fais un effort !.
    Citation Envoyé par s-ehtp Voir le message
    1) Que fait-on dans le programme suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #include <stdio.h>
    
    int main ()   // main renvoie int. Le préciser
    { 
      int i, j;
      char c;
      for (i = 0, j = 0 ;      // initialise i et j à 0 
           (c = getchar()) != ‘\n’;  // Début de la boucle for :
                               // on lit un caractère sur la console et on le met dans c.
                               // Si ce caractère est différent de '\n', le bloc {} du for est exécuté
                               // sinon, la boucle for est terminée
            i++)               // (incrément de i à faire en fin du bloc for)
      {                          // début du bloc for
       if (c == ‘ ’)  continue;  // si le caractère est un blanc ' ', on saute à la fin du bloc for
       j++;                      // (sinon,) on incrémente j
       }                         // fin du bloc for. On incrémente i et on retourne en début de boucle
    // A ce stade, i contient le nombre total  de caractères entrés au clavier  ('\n' exclu) 
    //et j le nombre de caractères non blanc
      printf (“i = %d \n”, i);  // affichage de i
      printf (“j = %d \n”, j); // affichage de j
      return 1;   // Fin du programme. renvoi de la valeur 1 au système d'exploitation qui en fera ce qu'il voudra
    }

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Gruik Voir le message
    Salut,[*]main qui retourne jamais 0 (alors que ça devrait etre le code de retour si tout va bien)
    hmmm hmmm..

    C'est le fameux cas : est-ce que False est "Non-vrai" ou True est "non-faux" ...


    La seule VRAIE règle est qu'un code de retour négatif est une erreur....

    L'utilisation d'EXIT_SUCCESS et EXIT_FAILURE est légèrement plus portable (vers des environnements non-Unix) que celle de zéro et d'une valeur non-nulle comme 1 ou -1. En particulier, VMS utilise une convention différente
    tout dépend du système utilisé

    et pas exemple, pour fork (appelée par system() ) :

    En cas de succès, le PID du fils est renvoyé au processus parent, et 0 est renvoyé au processus fils. En cas d'échec -1 est renvoyé dans le contexte du parent, aucun processus fils n'est créé, et errno contient le code d'erreur.

  7. #7
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    La seule VRAIE règle est qu'un code de retour négatif est une erreur....
    Je me demande où t'as vu ça..
    Mais c'est vrai qu'il faudrait utiliser EXIT_SUCCESS

    et pas exemple, pour fork (appelée par system() ) :
    Oui mais les fonctions C et le code de retour des programmes c'est pas pareil

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Gruik Voir le message
    Oui mais les fonctions C et le code de retour des programmes c'est pas pareil
    je répète : un programme C (donc contenant main), appelé via system(), retournera ce qu'on lui aura dit de retourner..

    Et bien entendu que LA fonction C main et le code de retour des programmes est pareil.. Quand tu fais return (ou exit), c'est ce que le système (ou sh ou ksh ou n'importe quel shell) traduira...

    Suivant le shell, si un programme se termine par 1 (ou non zero), pour lui il comprendra succès, ou au contraire erreur.... et réciproquement...

  9. #9
    Membre éclairé
    Inscrit en
    Octobre 2007
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 285
    Par défaut
    alors ,pouvez vous me faire comprendre ce programme?

  10. #10
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    je répète : un programme C (donc contenant main), appelé via system(), retournera ce qu'on lui aura dit de retourner..
    Okay, mais on avait l'impression que tu voulais executer fork() avec un system()

    ça serait trés gentil si vous ma faire comprendre ligne par ligne ce programme et merci!
    Ca serait plus interessant que tu apprenes à analyser les sources par toi meme, surtout que là c'est quand meme pas dur. Si tu peux pas te permettre de lire un bookain sur le C ou chercher sur internet, ptet que ya la reponse à toutes tes questions dans ton cours.

  11. #11
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    La seule VRAIE règle est qu'un code de retour négatif est une erreur....
    Ben non. C'est une convention unixoïde pour les fonctions système. C'est tout ce qu'on peut dire... Attention à ne pas centrer le monde autour de son unique expérience...

    Beaucoup de fonctions retournent 0 pour OK et <> 0 (souvent >0) pour KO. C'est d'ailleurs la règle C pour errno.

    Par exemple, en C standard, fgetc() retourne EOF (int < 0) en cas d'arrêt de la lecture. Ca peut être une fin de fichier (feof() retourne alors 1) ou une erreur (ferror() retourne 1 et on est prié d'aller lire le détail dans errno ou d'utiliser strerror() ou perror()...)

  12. #12
    Membre éclairé
    Inscrit en
    Octobre 2007
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 285
    Par défaut
    alors personne ne voulait m'aider à comprendre!
    mais merci quand meme!

Discussions similaires

  1. Programme de boot qui passe la main à Windows
    Par Bob dans le forum Assembleur
    Réponses: 7
    Dernier message: 25/11/2002, 03h08
  2. [Kylix] Probleme d'execution de programmes...
    Par yopziggy dans le forum EDI
    Réponses: 19
    Dernier message: 03/05/2002, 14h50
  3. communication entre programmes
    Par jérôme dans le forum C
    Réponses: 12
    Dernier message: 16/04/2002, 08h05
  4. Comment débuter en programmation ?
    Par Marc Lussac dans le forum Débuter
    Réponses: 0
    Dernier message: 08/04/2002, 11h29
  5. [Kylix] icone associée à un programme
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 09h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo