如何打印整数数组

时间:2012-05-04 15:27:02

标签: arrays int ascii

我有一个结构用于模拟数据包,如下所示:

typedef struct{
int source;
int dest;
int type;
int port;
char data[50];
}test;

test packet[50];

我正在尝试将数据字段中的任何内容打印到屏幕上。我目前的代码如下:

 printf("Enter a series of data numbers from 1-50: ");
    scanf("%c", &packet[i].data[i]);

    while (packet[i].data[i]  > 48 || packet[i].data[i] > 57)
        {
        printf("Data series needs to be between 1-50, try again: ");
        scanf("%c", &packet[i].data[i]);
        }
   printf("%c \n", packet[i].data[i]);

通过玩它我已经能够编译 - 有时它会让我回到402018,有时候是X,有时只是完全跳过代码。

谁能看到我哪里出错了?我想在packet [i]的当前实例中打印出整个char数组(每次创建数据包时都会递增)

while语句用于确保输入的字符是数字,并且根据ASCII,数字在所述范围内。

请对我温柔,我对此很新。

非常感谢。

2 个答案:

答案 0 :(得分:0)

您必须使用不同的循环变量来输入该特定数据包的数组。 现在,你使用相同的变量用于数据包索引和字符数组索引“i”,而不是“scanf”,我建议使用“getche()”函数进行单个字符输入。

并将你的while条件更改为:

 while (packet[i].data[x]  >= 48 || packet[i].data[x] <= 57)

其中“x”是额外的循环变量。

for(i=0;i<=49;i++)
    printf("Enter a series of data numbers from 1-50: ");
    for(x=0;x<=49;x++){
        packet[i].data[x] = getche();
         printf("%c \n", packet[i].data[x]);
        if(packet[i].data[x]  >= 48 || packet[i].data[x] <= 57)
            {
            printf("Data series needs to be between 1-50, try again: ");
            packet[i].data[x] = getche();

            }
else
{
  break;
}

    }

答案 1 :(得分:0)

这在逻辑上是不正确的:

while (packet[i].data[i]  > 48 || packet[i].data[i] > 57)
                          ^^                        ^^

将第一个>更改为<

此外,您正在写入第i个数组成员的第i个数据索引,这些数据在逻辑上看起来也是不正确的。你需要维护两个循环来迭代数据包,对于每个数据包,内部循环将数据读入数据数组。