Почему эта функция C не возвращает целочисленное значение? - PullRequest
0 голосов
/ 30 июля 2009

Когда я пытаюсь выполнить свою программу, я получаю сообщение об ошибке. Я не могу прочитать последнее значение в "ch":

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;
}

Что может быть причиной такого поведения?

Ответы [ 2 ]

6 голосов
/ 30 июля 2009

Вы должны иметь

scanf("%d",&ch);

не

scanf("%d",ch);

Поскольку результат scanf сохраняется в переменной с именем ch.

0 голосов
/ 30 июля 2009

Ваша основная проблема в том, что C использует массивы на основе 0. Доступ к массиву размера 24 осуществляется с 0 по 23), но вы обращаетесь к ним с 1 по 24, поэтому последний доступ находится за пределами массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...