从2d阵列C分配和打印

时间:2011-02-23 20:38:33

标签: c

/*
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 个答案:

答案 0 :(得分:1)

行中只有一个元素的数组维度是徒劳的。您通常只使用每行中包含多个元素的维度。

此外,您永远不会分配到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]);
}