2016-02-22 26 views
-2

我寫這個C程序:我的程序中有什麼錯誤?

main() 
{ 
int i,k; 
char a[]="ilovefootbalonly\n"; 
printf("enter 1 or 2\n"); 
scanf("%d",&k); 
switch(k) 
{ 
    case'1':for(i=0;i<=16;i++) 
    { 
     i+=1; 
     printf("%-16.*s\n",i,a); 
    } 
    break; 
    case'2':for(i=16;i>=0;i--) 
    { 
     i+=1; 
     printf("%*.*s\n",16,i,a); 

    } 
    break; 
} 

}

而且我希望我的輸出是這樣的我輸入後1:

i 

il 

ilo 

ilov 

. 

. 

. 

. 

ilovefootbal 

即使我的程序編譯錯誤免費,但當我運行它後,我輸入12,它停在那裏,那麼我犯了什麼錯誤?

我是一個堆棧溢出和C的新手,所以如果您在發佈這樣的問題時請原諒任何小錯誤,我將不勝感激。

+2

「case'1'」您將字符常量與輸入值作爲整數進行比較。 1!='1' –

回答

1

您的案例標籤不正確。你的意思是1和2,而不是'1''2'。後者是字符文字(其數值爲49和50)。

此外,由於「足球」錯字,您的字符串實際上包含16個字符(加終止符)。要麼修復這個問題,要麼運行你的循環到15而不是16.

另一件事,是你的循環案例2永遠不會終止:i--將取消循環體中的i += 1。類似的情況下,案例1將以預期頻率的兩倍遍歷索引。

並且考慮使用int main()作爲函數原型。

1

程序停止,因爲它到達程序結束。更改「案例'1':」到case 1:case '2':case 2:,那麼它應該跳到案例1或2中。此外,您正在增加兩次。首先在for(i=0;i<=16;i++){i+=1;。我不確定這種行爲是否正確;-)。

+0

我增加了'i',因爲我認爲自從我分配了20個地方中的16個地方,所以在末尾有一個額外的'\ 0',因爲它是一個字符串。 –

+0

好,你是否實施了這些改變?所以你可以告訴我們你的輸出是什麼。我想它會滑雪2.每個角色。 – xy36

+0

嘿,它確實工作.......你是正確的關於'case'1''改爲'case 1'。 –

相關問題