2009-07-30 4 views
-7

Lorsque j'essaie d'exécuter mon programme, j'obtiens une erreur. Je ne peux pas lire la dernière valeur « ch »:Pourquoi cette fonction C ne retourne-t-elle pas une valeur entière?

int choi(char *Tvide[48])//permet de choisir la place selon les choix de l utilisateur 
{ 
    char fum, classe, pos; 

    printf("\n S.V.P choisissez votre Classe (A:1 ere classe)/(B: 2 eme classe): "); 
    classe = getche(); 
    printf("\n Est ce que vous etes fumeur (O:fumeur)/(N:non fumeur):"); 
    fum = getche(); 
    printf("\n S.V.P vous preferez s''assoir pres de la fenetre ou du couloir(C:couloir)/(F:fenetre):"); 
    pos=getche(); 

    int Tfum[24] = {3,4,7,8,11,12,15,16,19,20,23,24,27,28,31,32,35,36,39,40,43,44,47,48}; 
    int Tnfum[24] = {1,2,5,6,9,10,13,14,17,18,21,22,25,26,29,30,33,34,37,38,41,42,45,46}; 
    int Tfen[24] = {1,4,5,8,9,12,13,16,17,20,21,24,25,28,29,32,33,36,37,40,41,44,45,48}; 
    int Tcol[24] = {2,3,6,7,10,11,14,15,18,19,22,23,26,27,30,31,34,35,38,39,42,43,46,47}; 
    int k; 

    char Tdispo[48]; 

    for(k=1; k<=48; k++) { Tdispo[k]='o'; } // on met içi le tableau des places vides 

    if (classe=='A') 
    { 
     for(k=9;k<=48;k++) { Tdispo[k]='n'; } 
    } 
    if (classe=='B') 
    { 
     for(k=1;k<=9;k++) { Tdispo[k]='n'; } 
    } 
    if (fum=='O') 
    { 
     for(k=1;k<=24;k++) { Tdispo[Tnfum[k]]='n'; } 
    } 
    if (fum=='N') 
    { 
     for(k=1;k<=24;k++) { Tdispo[Tfum[k]]='n'; } 
    } 
    if (pos=='C') 
    { 
     for(k=1;k<=24;k++) { Tdispo[Tfen[k]]='n'; } 
    } 
    if (pos=='F') 
    { 
     for(k=1; k<=24; k++) { Tdispo[Tcol[k]]='n'; } 
    } 

    int s; 

    printf("Les places disponibles sont:"); 

    for(s=1; s<=48; s++) 
    { 
     if(Tdispo[s] == 'o') { printf("%d",s,"~"); } 
    } 

    int ch; 
    printf("\n S.V.P introduire votre choix :"); 
    scanf("%d",ch); 

    Tvide[ch]=='n'; 
    int ch1 = ch; 
    return ch1; 
} 

Ce qui pourrait être la cause de ce comportement?

+1

Pourriez-vous s'il-vous-plaît essayer de formater ce message un peu mieux? – senfo

+1

Ne publiez pas de code commenté. Publier un programme minimal et autonome qui présente toujours le problème. Essayez d'utiliser les fonctions C standard le cas échéant ou spécifiez la combinaison compilateur/plate-forme. –

+2

Vous êtes beaucoup plus susceptible d'obtenir des réponses utiles si vous simplifiez le problème que vous essayez de résoudre. Plus précisément, faites bouillir votre problème pour être aussi simple que possible. Expliquez ce que vous essayez de faire, ce que vous attendez et ce que vous voyez réellement. La plupart des gens verront votre rame de code et cliqueront sur leur bouton de retour pour passer à une question différente. – jason

Répondre

6

Vous devriez avoir

scanf("%d",&ch); 

pas

scanf("%d",ch); 

Parce que le résultat de scanf est stockée dans la variable nommée ch.

0

Votre principal problème est que C utilise des tableaux basés sur 0. Un tableau de taille 24 est accédé de 0 à 23) mais vous y accédez de 1 à 24, donc le dernier accès est en dehors du tableau.

Questions connexes