2012-05-04 108 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個數據索引,它再次看起來在邏輯上不正確。您需要維護兩個循環來遍歷數據包,並且對於每個數據包內部循環將數據讀入數據數組。