/*
Program to calculate trip and plan flights
*/
#define TRIP 6
#define NUMLEG 10
#include <stdio.h>
#include <string.h>
int input_trip(void);
int input_leg(int travel_leg[NUMLEG], int index);
char input_travel_type(char leg_type[TRIP][NUMLEG], int n, int index, int leg_num);
int main(void)
{
int row, col, trip_num, index, travel_leg[NUMLEG], leg_num, n;
char leg_type[TRIP][NUMLEG];
trip_num = input_trip();
for (index =0; index < trip_num; index++)
{
leg_num = input_leg(travel_leg,index);
printf("At Trip Number:%d\n", index);
printf("Number of legs %d\n", leg_num );
printf("A Airplane\n");
printf("R Train and rail travel\n");
printf("B Bus\n");
printf("C Car\n");
printf("F Ferry\n");
printf("S Cruise ship\n");
printf("M Motorcycle\n");
printf("Y Bicycle\n");
printf("T Boat other than a ferry or cruise ship\n");
printf("D Dirigible\n");
printf("O Other\n");
printf("NOTE!!:Please using capital letters (case sensitive).\n");
for (n = 0; n < leg_num; n ++)
{
printf("At leg Number%d\n", n);
input_travel_type(leg_type, n, index, leg_num);
}
}
for (index = 0; index < trip_num; index++)
{
printf("Trip#:%d Num_leg:%d ", index+1, travel_leg[index]);
for (n = 0; n < leg_num ; n++)
printf("Leg_type(#%d):%c ",n+1, leg_type[index][n]);
printf("\n");
}
return 0;
}
int input_trip(void)
{
int trip_num;
printf("Please enter the number of trips:");
scanf("%d", &trip_num);
// if( (trip_num <= TRIP) && (trip_num >= 3))
if( (trip_num <= TRIP) && (trip_num >=1) )
{
return trip_num;
}
else
{
while ((trip_num < 1) || ( trip_num > TRIP))
{
printf("Invalid number of trip. (Min of 3 trips and Max 6 trips).\n"); /*input number of trips*/
printf("Please enter the number of trips:");
scanf("%d", &trip_num);
if( (trip_num <= TRIP) && (trip_num >= 1))
{
return trip_num;
}
}
}
}
int input_leg(int travel_leg[NUMLEG], int index)
{
int leg_num, i;
char travel_type, checkA, A, R, B, C, F, S, M, Y, T, D, O;
printf("Please enter the number of legs in your trip:");
scanf("%d", &leg_num);
if ( (leg_num <= NUMLEG) && (leg_num > 0) )
{
travel_leg[index]=leg_num;
return leg_num;
}
else
{
while ( (leg_num < 0) || (leg_num > NUMLEG))
{
printf("Invalid number of legs(min 1 and max 10 legs).\n");
printf("Please enter the number of legs in your trip:");
scanf("%d", &leg_num);
if ( (leg_num <= NUMLEG) && (leg_num > 0) )
{
travel_leg[index]=leg_num;
return leg_num;
}
}
}
}
char input_travel_type(char leg_type[TRIP][NUMLEG], int n, int index, int leg_num)
{
char travel_type, checkA;
printf("Please enter the leg type for leg#%d:", n+1);
scanf("%c", &travel_type);
checkA = ( (travel_type == 'A') || (travel_type == 'R') || (travel_type == 'B') ||
(travel_type == 'C') || (travel_type == 'F') || (travel_type == 'S') ||
(travel_type == 'M') || (travel_type == 'Y') || (travel_type == 'T') ||
(travel_type == 'D') || (travel_type == '0') );
if (checkA == 1)
{
leg_type[index][n]=travel_type;
}
else
{
while (checkA != 1)
{
printf("Please enter the leg type for leg#%d:", n+1);
scanf("%c", &travel_type);
checkA = ( (travel_type == 'A') || (travel_type == 'R') || (travel_type == 'B') ||
(travel_type == 'C') || (travel_type == 'F') || (travel_type == 'S') ||
(travel_type == 'M') || (travel_type == 'Y') || (travel_type == 'T') ||
(travel_type == 'D') || (travel_type == '0') );
if (checkA == 1)
leg_type[index][n]=travel_type;
}
}
}
(我回过头来问这个问题,但是我的代码太乱了,所以我在函数中重写了它,因此更容易阅读)
我遇到的问题是每次我走出循环时我的leg_num都会被写入,所以当我尝试在printf中打印出来时,我输入的最后一个leg_num是正在使用的数字:
for(n = 0; n&lt; leg_num; n ++)打印循环中的第二个
EDITED
因此,当我进行2次旅行时,#1有3条腿旅行#2有2条腿,当它穿过打印循环时,每次旅行只打印2条腿。
Trip#:1 Num_leg:3 Leg_type(#1):C Leg_type(#2):B
Trip#:2 Num_leg:2 Leg_type(#1):A Leg_type(#2):R
Trip#:1 Num_leg:1 Leg_type(#1):S Leg_type(#2):
Trip#:2 Num_leg:2 Leg_type(#1):F Leg_type(#2):S
所有其他工作正常,因为我在路上放置了printf语句,以检查是否是问题,但事实并非如此。我正在考虑将leg_num保存到一个数组并使用它,但不知道该怎么做,加上这是一个功课的一部分,我们的教授除了基本的循环简单数组之外几乎限制了所有东西。
答案 0 :(得分:1)
printf("Trip#:%d Num_leg:%d ", index+1, travel_leg[index]);
for (n = 0; n < leg_num ; n++)
更改为
printf("Trip#:%d Num_leg:%d ", index+1, travel_leg[index]);
for (n = 0; n < travel_leg[index] ; n++)