Для цикла / над записанной переменной - PullRequest
0 голосов
/ 28 февраля 2011
/*
  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 - это число, которое используется при:

для (n = 0; n

EDITED

Таким образом, когда я ставлю 2 поездки, поездка # 1 имеет 3 ноги, поездка # 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 Ответ

1 голос
/ 28 февраля 2011
  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++)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...