标题:请用给定的数字画边长为n的正方形,一切正常但是运行出错
只看楼主
zz3390786qwe
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2017-12-1
结帖率:0
已结贴  问题点数:10 回复次数:6 
请用给定的数字画边长为n的正方形,一切正常但是运行出错
第一行有一个T,表示有T组测试数据。
每一组测试数据有两个整数,第一个表示需要画的正方形的边长,第二个表示正方形中的填充值x(0<=x<=9)
每一组测试输出符合题意的正方形,组与组之间有且仅有一个空行,用以区分正方形。
样例输入
2
2 1
3 2
样例输出
11
11

222
222
222

#include<stdio.h>
int main()
{
    int m,n,k;
    scanf("%d",&m);
    for(int i=0;i<m;i++){
        scanf("%d",&n);
        scanf("%d",&k);
        for(int j=0;j<n*n;j++){
            printf("%d",k);
            if(j==n-1)printf("\n");
        }
    }
}
运行出错,感觉换行的代码有问题,但是又感觉没问题
搜索更多相关主题的帖子: 数字 正方形 运行 出错 int 
2018-11-08 12:35
豆豆的滴
Rank: 9Rank: 9Rank: 9
来 自:湖南
等 级:贵宾
威 望:33
帖 子:368
专家分:1087
注 册:2018-5-7
得分:2 
为啥我觉的运行没问题
换行的话其实用数组做会更好
2018-11-08 12:43
zbjzbj
Rank: 12Rank: 12Rank: 12
来 自:郑州
等 级:贵宾
威 望:52
帖 子:620
专家分:3020
注 册:2011-4-22
得分:2 
if((j+1) % n == 0)  printf("\n");
2018-11-08 15:23
wmk666
Rank: 2
等 级:论坛游民
帖 子:9
专家分:38
注 册:2018-11-8
得分:2 
这道题挺有意思的,我也想要这题的正确代码,别看我什么都不会(不,其实说到底还是有点简单的基础),我来这里就是求大神指点的,最近学到指针觉得很难,现在发现连这个基础代码也改不好了

2018-11-09 07:49
亚妮拉丝
Rank: 1
等 级:新手上路
帖 子:1
专家分:2
注 册:2018-11-9
得分:2 
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>

#pragma pack (1)

typedef struct Load
{
    unsigned n;
    unsigned char m;
}Load;

#pragma pop

Load* init( unsigned );

void fun( unsigned ,char );

int main( void )
{
    unsigned t;
    Load* load;
    
    unsigned i;
    
    if ((scanf("%u",&t))!=1)
        return 1;

    if (t==0)
        return 0;
        
    load=init(t--);
    
    for (i=0;i!=t;++i)
    {
        fun(load[i].n,( char )load[i].m);
        puts("");
    }
    
    fun(load[i].n,( char )load[i].m);
        
    free(load);

   return 0;
}

Load* init( unsigned t )
{
    unsigned i;
    
    Load* load=( Load* )malloc(t*sizeof ( Load ));
    
    assert(load);
    
    unsigned char* s=( unsigned char* )malloc(sizeof ( s ));
        
    assert(s);
    
    for (i=0;i!=t;load[i++].m=*s)
    {        
        if ( (scanf("%u%hhu",&load[i].n,&load[i].m))!=2&&load[i].m>9)
        exit(EXIT_FAILURE);
                
        sprintf(s,"%hhu",load[i].m);
    }
    
    free(s);
            
    return load;
}

void fun( unsigned n,char m )
{
    char* p=malloc(n*sizeof ( m )+sizeof ( char ));

    assert(p);
    
    memset(p,m,n*sizeof ( m ));
    
    p[n]='\0';
    
    while (n--)
        puts(p);
    
    free(p);
}
2018-11-09 12:59
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:2 
以下是引用亚妮拉丝在2018-11-9 12:59:58的发言:
    for (i=0;i!=t;load.m=*s)
    {        
        if ( (scanf("%u%hhu",&load.n,&load.m))!=2&&load.m>9)
        exit(EXIT_FAILURE);
               
        sprintf(s,"%hhu",load.m);
    }

这个循环写得实在是太笨拙了

你的目的是希望输入的填充字符 按照字符形式保存在 m 里面
直接 %c 不就可以了

来来回回的转换做什么

https://zh.
2018-11-09 14:19
C基础
Rank: 6Rank: 6
等 级:侠之大者
威 望:6
帖 子:133
专家分:421
注 册:2018-10-15
得分:2 
我觉得你要是不想改动太大,用三楼的方法最好,你的问题主要出在if(j==n-1);如果你输入的数据是3,2的话,那么你的正方形中是需要两次换行的,但是if(j==n-1);这条语句只有在j等于2的时候会出现换行,在循环中,j=2只出现了一次,所以你的程序只换行一次,但是按道理是需要两次,所以你的if条件判断错了,引用三楼的方法是在你的程序基础上改动最小又能正确运行的解决方法了,还有就是主函数是int main()的话,最后应当加上return 0;不过我个人建议,你要是没学过二维数组的话就算了,要是学过二维数组的话,用二维数组应该更好些。希望对你有所帮助

[此贴子已经被作者于2018-11-9 20:48编辑过]

2018-11-09 20:29



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-491083-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.308003 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved