用于循环/重写变量

时间:2011-02-27 21:05:57

标签: c arrays for-loop

/*
  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保存到一个数组并使用它,但不知道该怎么做,加上这是一个功课的一部分,我们的教授除了基本的循环简单数组之外几乎限制了所有东西。

1 个答案:

答案 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++)