簡體   English   中英

為什么在我正確輸入程序的輸入后我的循環不斷重復

[英]why my loop keeps repeating after I entered the input of the program correctly

我的代碼有問題。 我輸入了正確的輸入,但程序繼續運行。 我想我聲明它不正確,但我不知道它是哪一部分。 我應該如何初始化它?

我的節目是關於座位預訂的。 我的目標是根據用戶的輸入標記“X”。 如果那個座位已經被占用,我需要提示一個問題,詢問他們是否要重新輸入一個座位,如果沒有,我會將他們引導到主菜單,他們的預訂將被取消。

我所做的輸出:

Enter your seat number: (EX: 1A)1a
Invalid option!
Enter your seat number: (EX: 1A)1A

Enter your seat number: (EX: 1A)

這是我程序的一部分

#define ROWS 11
#define COLS 8
#define PASSENGERSIZE sizeof(passenger)

typedef struct{
    char city[20], name[50], seatcol;
    int age, seatrow, id;

}passenger;

char seat[ROWS][COLS];

int selection;
int seatavailable=60;
int i,j,x,k;
char answer, Y ;
int status=0;


void chooseseat(){
    passenger p;
   do{
    printf("\n\t\t\tEnter your seat number: (EX: 1A)");
    scanf("%d%c",&p.seatrow, &p.seatcol);

    if(p.seatrow == 1 && p.seatcol == 'A'){
        seat[0][0]= 'X';}
    else if(p.seatrow == 1 && p.seatcol == 'B'){
        seat[0][2]= 'X';}
    else if(p.seatrow == 1 && p.seatcol == 'C'){
        seat[0][2]= 'X';}
    else if(p.seatrow == 1 && p.seatcol == 'D'){
        seat[0][3]= 'X';}
    else if(p.seatrow == 1 && p.seatcol == 'E'){
        seat[0][4]= 'X';}
    else if(p.seatrow == 1 && p.seatcol == 'F'){
        seat[0][5]= 'X';}
    //2
.........

    //10
    else if(p.seatrow == 10 && p.seatcol == 'A'){
        seat[9][0]= 'X';}
    else if(p.seatrow == 10 && p.seatcol == 'B'){
        seat[9][2]= 'X';}
    else if(p.seatrow == 10 && p.seatcol == 'C'){
        seat[9][2]= 'X';}
    else if(p.seatrow == 10 && p.seatcol == 'D'){
        seat[9][3]= 'X';}
    else if(p.seatrow == 10 && p.seatcol == 'E'){
        seat[9][4]= 'X';}
    else if(p.seatrow == 10 && p.seatcol == 'F'){
        seat[9][5]= 'X';}

    else{
        printf("Invalid option!");
        p.id--;
        getch();
    } 
    p.id++;

    status = (p.seatrow && p.seatcol != seat[ROWS][COLS]);

    }while(status);

    if(!status){
        printf("\n\t\t Already allocate seat. Choose another seat? (Y/N)");
        scanf("%c", answer);

        if(answer == 'Y'){
        chooseseat();
        }
        else{
            printf("Your data will be not saved and will be returned to main menu:");
            main();
        }
    }

}


嘗試這個:

#include <ctype.h>
#include <stdio.h>
#define ROWS 11
#define COLS 8

typedef struct
{
    char city[20], name[50], seatcol;
    int age, seatrow, id;
} passenger;

int seat[ROWS][COLS]; //0=available, >1: passenger number

void chooseSeat(int PassengerNumber)
{
    passenger p;
    for(;;)
    {
        unsigned SeatRowIndex;  //0=1st, 1=2nd, ...
        unsigned SeatColIndex;  //0=A, 1=B, ...
        int ParsedValues;
        printf("\n\t\t\tEnter seat number for passenger %d: (EX: 1A)", PassengerNumber);

        ParsedValues=scanf("%d%c", &p.seatrow, &p.seatcol);

        SeatColIndex = toupper(p.seatcol)-'A'; //no matter if seat 1a or 1A, just get it 0-based
        SeatRowIndex = p.seatrow - 1; //get it 0-based

        if (ParsedValues==2 && SeatRowIndex<ROWS && SeatColIndex<COLS)
        {
            /***legal seat given.***/
            if (seat[SeatRowIndex][SeatColIndex])
            {
                printf("\n\t\t Seat %d%c already allocated by passenger %d. Choose another seat? (Y/N)", p.seatrow, p.seatcol, seat[SeatRowIndex][SeatColIndex]);
                for(;;) //until valid answer given
                {
                    switch(toupper(getchar()))
                    {
                        case 'Y':
                            break;
                        case 'N':
                            printf("Passenger %d will have no seat.", PassengerNumber);
                            return;
                        default: //invalid answer
                            continue;
                    }
                    break;
                }
                continue;
            }
            seat[SeatRowIndex][SeatColIndex] = PassengerNumber; //now occupied
            return; //done.
        }
        printf("Seat %d%c not exist!", p.seatrow, p.seatcol);
    }
}

int main(int /*argc*/, char ** /*argv*/)
{
    int i;
    for (i=1; i<5; i++)
        chooseSeat(i);

    int col;
    printf("\n\n SEAT MAP\n   ");
    for(col=0; col<COLS; col++) //print ruler
        putchar(col+'A');

    for (i=0; i<ROWS; i++)
    {
        printf ("\n%2d ", i+1);
        for(col=0; col<COLS; col++)
            putchar(seat[i][col] ? 'X' : '.');
    }
    puts("\nDone.");
    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM