2012-05-04 74 views
0

我已经得到了我使用的模拟数据包,其一个结构数组,它看起来像这样:如何打印整数

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,有时只是跳过的代码完全。

任何人都可以看到我要去哪里错了吗?我想在当前数据包[i]的实例中打印出整个字符数组(每次创建数据包时递增)

while语句是要确保输入的字符是一个数字,并根据到ASCII,数字在所述范围内。

请温和我,我对此很新。

非常感谢。

+0

请显示外部循环(控制'i'的值)。你也想通过文件输入测试数据,而不是交互式 - 程序员不要输入数据! :D – trojanfoe

回答

0

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

,改变你的,而条件:

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; 
} 

    } 
+0

另外''while'的测试是狡猾的;他*可能*意味着'包[我] .data [我] <57',但不知道... – trojanfoe

+0

对不起,这就是我的意思是循环。另外,我没有使用单个字符输入,它可以在一个字符串中多达50个字符。 – user1373475

0

这是逻辑上不正确:

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

更改第一><

此外,您正在写入到第i个数组成员的第i个数据索引,它再次看起来在逻辑上不正确。您需要维护两个循环来遍历数据包,并且对于每个数据包内部循环将数据读入数据数组。