![](/img/trans.png)
[英]Why does the while loop keeps running after I entered the termination parameters?
[英]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.