2015-04-06 94 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; 
}