我有一个结构用于模拟数据包,如下所示:
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,数字在所述范围内。
请对我温柔,我对此很新。
非常感谢。
答案 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个数据索引,这些数据在逻辑上看起来也是不正确的。你需要维护两个循环来迭代数据包,对于每个数据包,内部循环将数据读入数据数组。