2014-02-15 38 views
1

我寫的程序在用戶輸入後停止,我不知道爲什麼會發生這種情況。用戶應該給出6個整數,之後程序應該對它進行一些數學計算,現在不是這樣,因爲在插入整數後它結束了,沒有錯誤。程序在用戶輸入後結束

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


int main(int argc, char *argv[]) { 

    int T,i; 
    int x[5]; 

    scanf("%d", &T); 
    while(T > 0) { 
     for(i = 0; i <= 4; i++) { 
      scanf("%d", &x[i]); 
      } 
      int size_tax = x[0] + x[1] + x[2]; 
      int tax[size_tax]; 

      for(i = 0; i <= size_tax; i++) { 
       if(i == 0) { 
        tax[i] = x[0]; 
        if(x[4] == 1) { 
         printf("%d", tax[0]); 
         break; 
        } 
       } else if(i > 0 && i <= x[1] - 1) { 
        tax[i] = tax[i-1] + 1; 
        if(x[4] == i + 1) { 
         printf("%d", tax[i]); 
         break; 
        } 
       } else if(i > x[1] - 1 && i <= x[2] - 1) { 
        tax[i] = tax[i-1] * 2; 
         if(x[4] == i + 1) { 
         printf("%d", tax[i]); 
         break; 
        } 
       } 
      } 

     if(x[4] > x[0] + x[1] + x[2]) { 
       int result = x[3] - 1; 
       for(i = x[3]; i <= x[4] - 1; i++) { 
        result = result * x[i]; 

       } 

       printf("%d", result); 
     } 

     T--; 
     } 
} 
+0

哪位用戶輸入? while循環之前? – Mozzie

+0

你有兩個scanf()調用。哪一個導致問題? –

+0

'int tax [size_tax]'無效。你不能像這樣初始化一個數組。 size_tax在運行時動態確定,並且在編譯時不可用。你需要malloc()一些內存第一... –

回答

1

這裏的問題是:

int tax[size_tax]; 

for(i = 0; i <= size_tax; i++) { 
    ... 
} 

tax聲明大小爲size_tax,所以迴路必須上去size_tax-1,所以它應該是

for(i = 0; i < size_tax; i++) { // Less than, not less than or equal to 
    ... 
} 
0

如果輸入你的測試是1 2 3 4 5 6,那很正常。在最後一個else之後插入一個else if。 看來這個輸入不會驗證任何其他情況。

相關問題