2015-04-06 97 views
0

我有個問題C程序設計 - 程序崩潰

「寫接受作爲輸入的單個整數k一個C程序,然後將寫入在第一行由單個1的圖案,在兩個2S第二行,第三行三個三分之一,等等,直到它在最後一行寫k次k次。「

例如,如果輸入是5,輸出應該是以下:

1 
2 2 
3 3 3 
4 4 4 4 
5 5 5 5 5 

我已經寫下面的代碼來實現這一點。

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


int main() { 
int k = 5; 
int i; 
int j; 
for(i = 1; i<=k; i++){ 
    for(j = 1; j<=i; j++){ 
     printf('%d',i); 
     } 
    printf('\n'); 
    } 
return 0; 
} 

當我運行這個程序時,Eclipse崩潰了。在我寫的代碼中是否缺少某些東西?

+0

應該有至少'printf的警告( '%d',我);'。 – 2015-07-24 18:46:48

回答

3

您需要更改

printf('%d',i); 

printf("%d",i); 

而且,

printf('\n'); 

printf("\n"); 

原因:由於每printf()man page,函數原型是

int printf(const char *format, ...); 

它說,第一個參數應該是一個const char *

通常," "用於表示作爲oppossed到' '其被用於表示char常數(常數)char *

注意:在編譯器中啓用警告並注意它們。大多數時候,編譯器會提醒您有關缺陷和參數類型不匹配的錯誤。

+0

非常感謝你!這非常有幫助! – 2015-04-06 07:06:01

+0

@JaeKim不客氣。 :-)順便說一句,你可以考慮[接受](http://meta.stackexchange.com/q/5234)幫助你的答案。 – 2015-04-06 07:07:02

3
printf('%d',i); 

應該

printf("%d",i); 

printf()的第一個參數預計const char *,你有什麼是性格吧。編譯器應該在你繼續前發生崩潰之前發出警告。不要忽視警告!

+0

給你太多了! – 2015-04-06 07:05:22

0

printf中,您必須傳遞字符指針。

改變這種

printf('%d',i); 

printf("%d",i); 

printf定義。

int printf(const char *format, ...); 
+0

再次非常感謝! – 2015-04-06 07:07:01

0

如果您查看C編程的文檔printf函數需要一個字符串,即const char *格式,並且字符串用雙引號(「」)表示。所以用雙引號(「」)替換單引號('')。

0

在C庫printf輸出格式

printf("data type representation", the data to be printed); 

所以在輸出流中必須使用的,而不是單一的雙引號。 下面的代碼將正常工作,

#include <stdio.h> 

int main(void) { 
    // your code goes here 
    int k,i,j; 
    scanf("%d",&k); 
    for(i=1;i<=k;i++) 
    { 
     for(j=1;j<=i;j++) 
     printf("%d",i); 

     printf("\n"); 
    } 
    return 0; 
}