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 :

Petit soucis dans mon programme/compilation


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 54
    Par défaut Petit soucis dans mon programme/compilation
    Bonjour, voilà j'ai créer un petit programme (demander en exercice à la fac) qui donne la date du lendemain. Le problème est qu'à la compilation je reçois des messages d'erreurs que je ne comprend pas...

    Voici le programme en question:

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    // Alessandro giuliani M12
     
    // ** Exercice 1 **
    // ** Partie c) **
     
    #include <stdio.h>
    #include <math.h>
     
     
     
    int bissextile(i){
      int bis;
      if (i % 4 == 0) { if (i % 100 == 0 && i % 400 != 0) { bis=0;}
    		    else { bis=1;}
    		  }
      else bis=0;
      return bis;
    }
     
    int main(){
    int i;
    scanf("%d",&i);
    printf("%d", bissextile(i) ) ;
    return 0;
    }
     
     
    void lendemain(j,m,a){
    int jj,mm,aa;
    switch (m) { case 1: if(j==31) {jj=1, mm=2, aa=a;}
    		     else if (j>31) {jj=0,mm=0,aa=0;}
    		     else {jj=j+1, mm=m, aa=a;}
    		     break;
     
    	     case 2: if(bissextile(a)==1) {
    	     		if(j==29) {jj=1, mm=3, aa=a;}
    		        else if (j>29) {jj=0,mm=0,aa=0;}
    		        else {jj=j+1, mm=m, aa=a;}}
    		     else {
    		        if(j==28) {jj=1, mm=3, aa=a;}
    		        else if (j>28) {jj=0,mm=0,aa=0;}
    		        else {jj=j+1, mm=m, aa=a;}}
    		     break;
     
    	     case 3: if(j==31) {jj=1, mm=4, aa=a;}
    		     else if (j>31) {jj=0,mm=0,aa=0;}
    		     else {jj=j+1, mm=m, aa=a;}
    		     break;
     
    	     case 4: if(j==30) {jj=1, mm=5, aa=a;}
    		     else if (j>30) {jj=0,mm=0,aa=0;}
    		     else {jj=j+1, mm=m, aa=a;}
    		     break;
     
    	     case 5: if(j==31) {jj=1, mm=6, aa=a;}
    		     else if (j>31) {jj=0,mm=0,aa=0;}
    		     else {jj=j+1, mm=m, aa=a;}
    		     break;
     
    	     case 6: if(j==30) {jj=1, mm=7, aa=a;}
    		     else if (j>30) {jj=0,mm=0,aa=0;}
    		     else {jj=j+1, mm=m, aa=a;}
    		     break;
     
    	     case 7: if(j==31) {jj=1, mm=8, aa=a;}
    		     else if (j>31) {jj=0,mm=0,aa=0;}
    		     else {jj=j+1, mm=m, aa=a;}
    		     break;
     
    	     case 8: if(j==31) {jj=1, mm=9, aa=a;}
    		     else if (j>31) {jj=0,mm=0,aa=0;}
    		     else {jj=j+1, mm=m, aa=a;}
    		     break;
     
    	     case 9: if(j==30) {jj=1, mm=10, aa=a;}
    		     else if (j>30) {jj=0,mm=0,aa=0;}
    		     else {jj=j+1, mm=m, aa=a;}
    		     break;
     
    	     case 10: if(j==31) {jj=1, mm=11, aa=a;}
    		     else if (j>31) {jj=0,mm=0,aa=0;}
    		     else {jj=j+1, mm=m, aa=a;}
    		     break;
     
    	     case 11: if(j==30) {jj=1, mm=12, aa=a;}
    		     else if (j>30) {jj=0,mm=0,aa=0;}
    		     else {jj=j+1, mm=m, aa=a;}
    		     break;
     
    	     case 12: if(j==31) {jj=1, mm=1, aa=a+1;}
    		     else if (j>31) {jj=0,mm=0,aa=0;}
    		     else {jj=j+1, mm=m, aa=a;}
    		     break;
     
    	     default:{jj=0,mm=0,aa=0;}}
     
    if(jj==0) {printf("Date invalide!\n");}
    else {printf("Demain nous serons le : %d/%d/%d\n" ,jj,mm,aa);}
    return;
    }
     
    int main(){
    int j,m,a;
    printf("Entrez le jour: ");
    scanf("%d",&j);
    printf("Entrez le mois: ");
    scanf("%d",&m);
    printf("Entrez l'annee': ");
    scanf("%d",&a);
    printf("Nous sommes le : %d/%d/%d\n", j,m,a);
    lendemain(j,m,a);
    return 0;
    }
     
     
    // ** Partie d) **
     
    // Comme jeu de test je propose les dates suivantes: * 31/12/2009 ==>> pour testez le passage à l'année suivante (affiche 1/1/2010)
    //				    		     * 28/2/2009 ==>> pour testez le passage au mois de mars (affiche 1/3/2009)
    //						     * 32/1/2009 ==>> pour testez un cas impossible (affiche "Date invalide!")
    //						     * 5/13/2009 ==>> pour testez un autre cas impossible (affiche "Date invalide!")
    Et le message d'erreur:
    lendem1.c: Dans la fonction «lendemain» :
    lendem1.c:102: attention : «main» is normally a non-static function
    lendem1.c:113: erreur: expected declaration or statement at end of input
    Et si je compile la fonction bissextile elle seule, le terminal ne fait rien et je dois arreter la compilation avec ctrl+C sinon c'est infini...

    Je suis tout ouïe à vos réponses (enfin même si vous écrivez ^^)

    P.S: Je ne souhaite pas que vous me fassiez l'exo, j'aimerais savoir ou sa coince et pourquoi!

  2. #2
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 53
    Par défaut
    Je crois que tu as oublié une } pour fermer la fonction lendemain

    Edit : quoique tu as deux main c surement ça le prob

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 54
    Par défaut
    Oui deux main.
    Un autre soucis se pose.. Quand je fait un programme pour la fonction bissextile, quand je le compile rien ne se passe:

    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
    #include <stdio.h>
    #include <math.h>
     
     
     
    int bissextile(i){
      int bis;
      if (i % 4 == 0) { if (i % 100 == 0 && i % 400 != 0) { bis=0;}
    		    else { bis=1;}
    		  }
      else bis=0;
      return bis;
    }
     
    int main(){
    int i;
    scanf("%d",&i);
    printf("%d", bissextile(i) ) ;
    return 0;
    }
    Pourtant à la fac, sous KDE (la je suis sous gnome), la compilation marchait :s

  4. #4
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Par défaut
    int bissextile(i){
    int bis;
    if (i % 4 == 0) { if (i % 100 == 0 && i % 400 != 0) { bis=0;}
    else { bis=1;}
    }
    else bis=0;
    return bis;
    }
    Je crois que tu as aussi oublié d'indiquer le type du parametre i
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int bissextile(int i){
      int bis;
      if (i % 4 == 0) { if (i % 100 == 0 && i % 400 != 0) { bis=0;}
    		    else { bis=1;}
    		  }
      else bis=0;
      return bis;
    }

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 54
    Par défaut
    Sa ne change rien au problème de compilation

    Et un dernier petit problème, après j'arrête promis

    Code:

    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
    #include <stdio.h>
    #include <math.h>
     
    int main(){
      float a,b;
      char op;
      printf("Entrer le premier nombre : ");
      scanf("%f", &a);
      printf("Entrer le deuxieme nombre : ");
      scanf("%f", &b);
      printf("Entrer l'operateur (+, -, *, /) : ");
      scanf("%c", &op);  
      switch (op){
      	case '+': printf("%f+%f=%f",a,b,a+b);
      	case '-': printf("%f-%f=%f",a,b,a-b);
      	case '*': printf("%f*%f=%f",a,b,a*b);
      	case '/': printf("%f/%f=%f",a,b,a/b);
      	default: printf("Operateur non pris en charge");
      	}
      return 0;
      }
    Lancement du programme:

    aless@aless-laptop:~/Bureau/TP/TP2$ ./calculatrice
    Entrer le premier nombre : 20
    Entrer le deuxieme nombre : 10
    Entrer l'operateur (+, -, *, /) : Operateur non pris en chargealess@aless-laptop:~/Bureau/TP/TP2$
    Quand je le lance dans le terminal, j'entre les nombres, mais quand sa arrive à la demande de l'opérateur, il m'affiche directement le mesage d'erreur sans que je ne puisse rentrer un + ou un - auparavant...
    Je comprend pas <_<

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    C'est que ta fonction scanf("%f",&b); , va certe prendre le nombre que tu aura rentrée avec le clavier, mais elle va laisser dans le buffer le retour chariot ( ou la touche entrée si tu préfère ).
    Donc le prochain scanf qui prend un caractère , il va regarder le buffer et voir un caractère ( le \n ; retour charriot ). Ainsi donc , entre les deux scanf il faut que tu vide le buffer ( je ne sais plus comment on fait , mais cela doit être marqué dans la faq C du site ).
    Au sinon si tu trouve pas dans l'immédiat ( mais pas conseillé ) tu peux faire un deuxième scanf("%c"); ( juste pour prendre le stupide '\n' )
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. petit souci dans mon code
    Par Cyang dans le forum Débuter
    Réponses: 3
    Dernier message: 05/07/2010, 12h30
  2. [Débutant] Petit problème dans mon programme
    Par bsangoku dans le forum MATLAB
    Réponses: 8
    Dernier message: 22/04/2010, 16h19
  3. un petit souci dans mon script !
    Par kerberos dans le forum VBScript
    Réponses: 1
    Dernier message: 25/06/2008, 15h42
  4. Petit souci de recherche dans mon programme
    Par jojo72000 dans le forum Débuter
    Réponses: 4
    Dernier message: 03/06/2008, 18h54
  5. [] Utiliser AVI d'une DLL dans mon programme
    Par seb.49 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 02/05/2003, 14h52

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