问题描述
- C语言图案输出诡异的问题,这两个代码输出的图案有什么不同??
-
#include<stdio.h> void main() {int i,j,k; for(i=1;i<=4;i++) {for(j=1;j<=4-i;j++) printf(" "); for(k=1;k<=2*i-1;k++) printf("*"); printf(" ");} for(i=1;i<=3;i++) {for(j=1;j<=i;j++) printf(" "); for(k=1;k<=7-2*i;k++) printf("*"); printf(" ");} }
#include <stdio.h> int main() { char diamond[ ][7]={{' ',' ',' ','*'},{' ',' ','*','*','*'}, {' ','*','*','*','*','*'},{'*','*','*','*','*','*','*'},{' ','*','*','*','*','*'}, {' ',' ','*','*','*'},{' ',' ',' ','*'}}; int i,j; for(i=0;i<7;i++) {for(j=0;j<7;j++) printf("%c",diamond[i][j]); printf(" "); } return 0; }
上面两个都是输出同一个图案代码,在学校c语言平台测试结果第一个正确,第二个错误。可是我观察了很久这两个代码输出的结果我感觉是一样的,下图左边为期待输出的正确结果,右边为测试结果,系统提示结果为错误答案。我真的看不出来有啥不同,,,,下面的图是我在第二个平台上下载下来的文件,我用记事本打开发现确实不太一样,,,我以为是空格的问题 但是平台那里图案后面确实没有空格,,,所以好奇怪(代码一结果为正确 二为错误)
解决方案
楼主,看您的第二个代码,数组的每第二个维度长度为7,您在初始化的时候,如果没有填满这7个元素,那么后面的没有被填的元素会被默认填入【''】,也就是空元素,它的二进制形式是0.
而把它们输入到记事本中时,0元素是很可能被转换为空格符的。
解决方案二:
命令行窗口输出图案
解决方案三:
楼主,看您的第二个代码,数组的每第二个维度长度为7,您在初始化的时候,如果没有填满这7个元素,那么后面的没有被填的元素会被默认填入【''】,也就是空元素,它的二进制形式是0.
而把它们输入到记事本中时,0元素是很可能被转换为空格符的。
解决方案四:
楼主,看您的第二个代码,数组的每第二个维度长度为7,您在初始化的时候,如果没有填满这7个元素,那么后面的没有被填的元素会被默认填入【''】,也就是空元素,它的二进制形式是0.
而把它们输入到记事本中时,0元素是很可能被转换为空格符的。
解决方案五:
我晕,评论能不能删除啊,貌似刷屏了呢,电脑不给力啊。。。请题主删除一下,看着不爽,谢谢
解决方案六:
第二个程序是错误的。diamond数组每一行初始化不完整,*号后面默认初始化为0了。
第二个程序每一行都输出7个字符就出错了。
解决办法:
把diamond数组*号后面也初始化为空格。
解决方案七:
文件2中多了好几个空格,