назначение и печать из 2d массивов C - PullRequest
0 голосов
/ 23 февраля 2011
/*
Program to calculate trip and plan flights
*/
#define TRIP 6 
#define DEST 1
#include <stdio.h>

int main(void)
{
  int type_num, cont_num, index, i, dest_code, trip_num, row, col;
  int travelint[TRIP][DEST]= {{0}};

  printf("Please enter the number of trips:");
  scanf("%d", &trip_num);
  for (i=0; i < trip_num ; i++)
  {
      printf("Please enter destination code:");
      scanf("%d", &dest_code); 

      cont_num = dest_code / 10000;
      type_num = dest_code/1000 - cont_num*10;

      if ( (cont_num <= 7) && (cont_num > 0) &&  (type_num <= 5) && (type_num >=0) )
          dest_code = travelint[i][0];  
      else
          printf("Invalid code\n");

   }
   printf("%2d", travelint[0][0]);  
   return 0;  
}

У меня проблемы с печатью из массива. Я не уверен, что я его печатаю неправильно или что номер не назначается в массиве.У меня все еще проблемы с концепцией присваивания значений из ввода в массив ..

1 Ответ

1 голос
/ 23 февраля 2011

Измерение массива с одним элементом в строке - бессмысленная мелочь. Обычно вы используете только измерения с более чем одним элементом в каждой строке.

Кроме того, вы никогда не назначаете массив travelint - только чтение из него. Итак, поскольку он инициализируется для всех нулей, все, что вы когда-либо увидите при печати, это нули.

Вам, вероятно, просто нужно изменить это:

  if ( (cont_num <= 7) && (cont_num > 0) &&  (type_num <= 5) && (type_num >=0) )
      dest_code = travelint[i][0];  

до:

  if ( (cont_num <= 7) && (cont_num > 0) &&  (type_num <= 5) && (type_num >=0) )
      travelint[i][0] = dest_code; 

Это присваивает travelint.

Чтобы распечатать полный 2D-массив, вы обычно используете:

for (int j = 0; j < TRIP; j++)
{
    for (int k = 0; k < DEST; k++)
        printf("Trip[%d][%d] = %d\n", j, k, travelint[j][k]);
}

Учитывая, что внутренний цикл будет выполняться только один раз за итерацию внешнего цикла (в вашем примере, где DEST равен 1), вы можете упростить это до:

for (int j = 0; j < TRIP; j++)
{
    printf("Trip[%d][%d] = %d\n", j, 0, travelint[j][0]);
}

Вы должны проверить trip_num после того, как пользователь введет его. Вам следует проверить, что scanf() действительно преобразовало значение; если пользователь введет «A», то ваша программа будет быстро зацикливаться на выводе «Неверный код» каждый раз Всегда проверяйте, что входные данные успешны. Теоретически, вы также должны проверить, что результаты успешны, но это правило чаще игнорируется, чем соблюдается. Кроме того, если пользователь злой и набирает 200, то ваша программа не будет счастлива после того, как пользователь войдет в шестое место назначения поездки. Конечно, оно должно быть между 0 и TRIP (включительно). Конечно, вы должны правильно обращаться с вырожденным (0) случаем. И цикл печати становится:

for (int j = 0; j < trip_num; j++)
{
    printf("Trip[%d][%d] = %d\n", j, 0, travelint[j][0]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...