2015-12-13 30 views
-6

我寫這段代碼:C程序保持returnig 1

#include <stdio.h> 
int main() 
    { 
    int t[50],n,i,test=1; 
    printf("Donner la Taille N du tableau :");scanf("%d",&n); 
    for(i=0;i<n;i++,scanf("%d",&t[i])); 
    for(i=0;i<n-1;i++) 
     { 
      if(t[i]>t[i+1]){test=0;break;}; 
     }; 
    return test != 0); 
    } 

它應該返回1,如果陣列上升,但它始終返回1

+4

能否請您發佈您的代碼沒有語法錯誤,還發表您的投入? – dasblinkenlight

+1

請在所有警告和調試信息('gcc -Wall -Wextra -g')和**使用調試器**('gdb')*進行編譯之後,請求*我們完成您的功課! –

+0

哪裏是語法錯誤,你可以採取任何輸入ex = 5/1,2,3,4,5它返回1,但是當你輸入n = 5/5,4,3,2,1它也返回1當它應該返回0 – HiDDeN

回答

0

別把它prsonally,但是這個代碼是醜陋的。如果您努力編寫更好的代碼,閱讀它並查找錯誤將會更容易。

我建議這樣的:

#include <stdio.h> 

int main() { 
    int t[50]; 
    int n; 
    int i; 
    int test=1; 

    printf("Donner la Taille N du tableau:"); 
    scanf("%d", &n); 

    // here you will want to make sure that n <= 50! 

    for(i=0; i<n; i++) { 
    scanf("%d", &t[i]); 
    } 

    for(i=0; i<n-1; i++) { 
    if(t[i] > t[i+1]) { 
     test=0; 
     break; 
    } 
    } 
    return test != 0; 
} 

廣告的bug應該已經固定;)

6

之前遞增 scanf運行...而不是

for(i=0;i<n;i++) { 
    scanf("%d",&t[i]) 
} 

這個fo [R

for(INIT ; COND ; INCREMENT) ACTION; 

相當於

INIT; 
while (COND) { 
    ACTION; 
    INCREMENT; 
} 

在你的程序中,實際行動是增量部分,並完成後i++(逗號分隔的語句進行評估,並執行從左至右),0值被跳過,而且t[n]被寫入,n邏輯上超出界限(因爲它不是問題,而n是< = 49)。

請注意,INIT和INCREMENT是約定,因爲您可能會做很多事情,既沒有初始化,也沒有增量! - 因爲你實際上

下面,只使用一個循環,沒有陣列和少變量的版本一樣,注視着解釋

#include <stdio.h> 
#include <limits.h> 

int main(){ 
    int n,v,previous = INT_MIN; // INT_MIN: minimal int value 
    printf("Donner N le nombre de valeurs :"); 
    scanf("%d",&n); 

    while (n-- > 0) { 
    scanf("%d", &v); 
    if (v < previous) return 0; 
    previous = v; 
    } 
    return 1; 
} 

說明

  • previous分配可能的最小整值
  • while (n-- > 0)確保n最初> 0,將循環n次
  • 讀取的值v,如果v < previous這意味着序列不上升
  • 直接返回1或0

盂蘭盆勇氣 :-)

+0

很好解釋! – zvone