2016-03-15 26 views
-1

我正在編寫一個程序來存儲使用數組的商品和價格的名稱。 但是這裏無法從數組中檢索項目名稱。該程序崩潰。無法從數組中檢索字符串

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


void main() 
{ 
    char itemName[100]; 
    int n=0, i,j, total=0, itemPrice[1]; 

    printf("Enter number of items: \n"); 
    scanf("%d", &n); 
    //fflush(stdin); 
    for (i = 0; i < n; i++) 
    { 
     printf("Item name: \n"); 
     scanf("%s", &itemName[i]); 
      for (j = i ; j<=i; j++) 

      { 
       printf("Enter the price\n"); 

       scanf("%d", &itemPrice[j]); 

       total += itemPrice[j]; 
      } 
    } 

    for (i = 0; i < n; i++) 

     printf(" %s", itemName[i]); 

     for (j = i ; j<=i; j++) 

      printf("\t\t%s\n", itemPrice[j]); 

} 
+3

請選擇* C或C++之一。爲什麼不使用標準的'int main(void)'而不是實現定義的'void main()',這在C++中是非法的? – MikeCAT

+0

您是否試圖將超過1個物品價格推入'itemPrice [1]'? – Vishal

+0

你爲什麼使用內循環?嘗試用'scanf(「%d」,&itemPrice [i])替換它;' – Marievi

回答

0

您必須分配足夠的空間來存儲字符串和整數。 另外,您必須使用正確的格式說明符printf(),或者您可以調用未定義的行爲

循環for (j = i ; j<=i; j++)是沒有害的,但幾乎沒有意義和困惑。

另請注意,您正在迭代打印名稱,並且不會在程序的後半部分打印價格。

可能的解決辦法:

#include <stdio.h> 

#define ITEM_MAX 100 

int main(void) 
{ 
    char itemName[ITEM_MAX][1000]; 
    int n=0, i, total=0, itemPrice[ITEM_MAX]; 

    printf("Enter number of items: \n"); 
    if (scanf("%d", &n) != 1) 
    { 
     fputs("read error\n", stderr); 
     return 1; 
    } 
    for (i = 0; i < n; i++) 
    { 
     printf("Item name: \n"); 
     /* Specify the length to read in order to avoid buffer overrun. */ 
     /* Don't forget to reserve space for terminating null-character. */ 
     if (scanf("%999s", itemName[i]) != 1) 
     { 
      fputs("read error\n", stderr); 
      return 1; 
     } 

     printf("Enter the price\n"); 

     if (scanf("%d", &itemPrice[i]) != 1) 
     { 
      fputs("read error\n", stderr); 
      return 1; 
     } 

     total += itemPrice[i]; 
    } 

    for (i = 0; i < n; i++) 
    { 

     printf(" %s", itemName[i]); 

     printf("\t\t%d\n", itemPrice[i]); 
    } 

    return 0; 
} 
0

可能爲:

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


void main() 
{ 
    char itemName[100][100]; 
    int n=0, i,j, total=0, itemPrice[100]; 

    printf("Enter number of items: \n"); 
    scanf("%d", &n); 

    for (i = 0; i < n; i++) 
    { 
     printf("Item name: \n"); 
     scanf("%s", &itemName[i]); 
     printf("Enter the price\n"); 
     scanf("%d", &itemPrice[i]); 
     total += itemPrice[i]; 

    } 

    for (i = 0; i < n; i++) 
    printf(" %s", itemName[i]); 
    for (j = 0 ; j<n; j++) 
    printf("\t\t%s\n", itemPrice[j]); 

}

0
itemPrice[1]; 

,上面的語句告訴,你要只存儲一個數據太ITEMPRICE [ 0] ....如果你在itemprice [2]中保存了某些東西(或者大於0就是錯誤)

我可以看到很多錯誤,最好一步一步去