2016-11-20 61 views
0

任何人都可以建議爲什麼值不會存儲在結構數組中嗎? 我試圖將值存儲在緩衝區數組中,我注意到存儲0或1而非用戶輸入的值。結構C:將值存儲在數組中

這是我的嘗試:

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

int menu(void); 
struct item 
{ 
    int i_SKU; 
    int i_QUANTITY; 
    int i_PRICE; 
}; 

int main() 
{ 
    int i,j = 0;; 
    int n; 
    int input; 
    //struct item item1[10] = { {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0} }; 
    struct item item1[]={0}; 
    struct item buff[]={0}; 
    //printf("size of %d", sizeof(item1)/sizeof(item1[0])); 
    printf("Welcome to the Inventory\n"); 
    printf("===================\n"); 
B: printf("Please select from the following:\n"); 

A: menu(); 
    scanf("%d", &input); 

    switch (input) 
    { 
     case 1: 
      printf("Inventory\n"); 
      printf("=========================================\n"); 
      printf("ku  Price  Quant\n"); 
      for (i = 0; i < sizeof(buff)/sizeof(buff[0]); i++) 
      { 
       printf("%d  %d  %d\n", buff[i].i_SKU, buff[i].i_PRICE, buff[i].i_QUANTITY); 
      } 
      printf("=========================================\n"); 
      goto B; 

     case 2: 
      //n = sizeof(item1)/sizeof(item1[0]) + 1; 
      //for (i=n; i < ; i++) 
      printf("Please input a KU number:"); 
      buff[j].i_SKU=scanf("%d", &item1[j].i_SKU); 
      printf("Quantity:"); 
      buff[j].i_QUANTITY=scanf("%d", &item1[j].i_QUANTITY); 
      printf("Price:"); 
      buff[j].i_PRICE=scanf("%d", &item1[j].i_PRICE); 
      printf("The item added.\n"); 
      j=j+1; 
      goto B; 

     case 0: 
      printf("bye!"); 
      exit(1); 

     default: 
      printf("Invalid input, try again:\n"); 
      goto A; 
    } 

    return 0; 
} 

int menu(void) 
{ 
    printf("1) Display.\n"); 
    printf("2) Add to inventory.\n"); 
    printf("0) Leave.\n"); 
    printf("Select:"); 
    return 0; 
} 

我試圖存儲在緩衝器陣列的值和我注意到,越來越存儲0或1不是用戶輸入值。

+0

閱讀goto聲明被認爲是有害的[經典文章](http://www.u.arizona.edu/~rubinson/copyright_violations/Go_To_Considered_Harmful.html)。 – selbie

回答

0

scanf不返回它讀取的值,它返回它讀取的字符數。

那麼這些行:

buff[j].i_SKU=scanf("%d", &item1[j].i_SKU); 
buff[j].i_SKU=scanf("%d", &item1[j].i_QUANTITY); 
buff[j].i_SKU=scanf("%d", &item1[j].i_PRICE); 

不要做你想做的。他們將整數轉換爲item1[j].i_X,但將buff[j].i_X分配給讀取的字符數。

此外,我猜你打算這三個方程式的左手側有所不同,並不都是指i_SKU

另一個可能的問題是:你的緩衝區沒有指定的長度,所以它們可能只存儲一個元素。

編輯

我不知道該items1陣列服務於你的代碼的目的是什麼,但如果你想在兩個數組的值,你可以嘗試以下方法:

int sku; 
printf("Please input a KU number:"); 
buff[j].i_SKU=scanf("%d", &sku); 
item1[j].i_SKU = sku; 
buff[j].i_SKU = sku; 
// etc. 
+0

如何儲存其他值? – John

+0

您正在使用的方法將值存儲在'item1 [j] .i_X'中應該有效。 – andars

+0

值不會被儲存在buff仍然 – John