2014-10-08 47 views
0

我在下面的代碼中有一個問題,請求是選項2。每次我打印出請求表時,不是顯示用戶輸入的待處理請求,而是給我一個隨機數。有人可以幫我找到問題嗎?代碼應該與選項1相似,但如果它的請求相同,它不應該將用戶輸入相加。示例輸出:基本的食品銀行程序幫助需要

1 
Milk 20 
1 
Milk 20 
2 
Milk 10 
2 
Milk 5 
4 
Donations: 
Milk 40 
Requests: 
Milk 10 
Milk 5 

這是我的代碼

int main() { 

int don_count=0, don_amt[100], found, i, don_quant, option, req_count=0, req_amt[100],req_quant; 

char word[20], don_inv_type[100][20], req_word[20], req_inv_type[100][20]; 

printf("Welcome to the food bank program!); 
printf("1.Enter a Donation\n2.Enter a Request\n3.Fulfill the earliest Request\n4.Print status report\n5.Exit\n"); 
scanf("%d", &option); 

while (option != 5) { 

     // Execute a deposit. 
     if (option == 1) { 
       scanf ("%s", word); 
       scanf ("%d", &don_quant); 
       found = -99; 
       for (i=0;i<don_count; i++){ 
        if (strcmp(don_inv_type[i], word)==0) 
        found = i; 
        } 
       if (found == -99){ 
           strcpy(don_inv_type[i],word); 
           don_amt[i] = don_quant; 
           don_count ++; 
           } 
       else 
         don_amt[found] += don_quant; 
     } 

     else if (option == 2) { 
      scanf ("%s", req_word); 
      scanf ("%d", &req_quant); 
      req_count++; 
      for(i=0; i<req_count; i++) 
      { 
        strcpy(req_inv_type[i],req_word); 
        req_amt[i] += req_quant; 
      } 
     } 

     else if (option == 3) { 


     } 

     else if (option == 4) { 
      printf("Donations:\n"); 
      for(i=0;i<don_count;i++){ 
            printf("%8s", don_inv_type[i]); 
            printf("%5d\n", don_amt[i]); 
            } 
      printf("Requests: \n"); 
      for(i=0;i<req_count;i++){ 
            printf("%8s", req_inv_type[i]); 
            printf("%5d\n", req_amt[i]); 
            } 


     } 

     else if (option == 5) { 
      printf(" Thanks bye");  

     } 

     // Reprompt the menu. 
     printf("1.Enter a Donation\n2.Enter a Request\n3.Fulfill the earliest Request\n4.Print status report\n5.Exit\n\n"); 
     scanf("%d", &option); 
} // end while 

system("PAUSE"); 
return 0; 
} // end main 
+1

瞭解如何使用調試器來調試您的程序。 – 2014-10-08 23:51:07

+0

@BryanChen-是的,就像這樣會發生,永遠:(( – 2014-10-08 23:54:02

+0

它的一個問題,說req_amt [i] + = req_quant; – Perez 2014-10-09 00:03:07

回答

0

你永遠不會初始化req_amt,所以req_amt[i] += req_quant只是增加req_quant到在以前這些內存位置的任何垃圾。

你需要做的是這樣的:

int req_amt[100] = {0}; 
       ^^^^^^ <--- Add this 

或手動初始化一些其他方式的元素。

+0

謝謝,這有助於巨大的數字錯誤,但現在無論何時在que中輸入另一個項目數量,比如說第一個輸入是5,那麼第二個輸入是10.它打印說牛奶15牛奶10,而不是牛奶5然後牛奶10 – Perez 2014-10-09 00:13:32

+0

@Tristen:那麼你有一個單獨的問題,所以如果你願意的話,你可以單獨將其發佈到Stack Overflow上,但是,我建議花一些時間調試它,首先 - 對於在同一個程序中出現的每個連續錯誤,連續發佈問題通常都不被接受,因爲它遇到了因爲你想讓其他人爲你調試你的程序。 – 2014-10-09 00:15:13

+0

好的,我的道歉 – Perez 2014-10-09 00:23:30