![](/img/trans.png)
[英]How do I print Unicode to the output console in C with Visual Studio?
[英]How do I print a cross to the console in C?
我刚刚开始研究信息技术,目前正从事编程工作。
我必须用C编写一个代码,该代码在控制台上显示一个叉号,叉号由初始输入确定。
因此,控制台输出应如下所示:
size?: 5(user input)
xooox
oxoxo
ooxoo
oxoxo
xooox
(用空格替换操作系统)
我现在谈到的是:
#include <stdio.h>
int main(void)
{
int n;
printf("size?: ");
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if( (i==j) )
printf("*");
else
printf(" ");
}
printf("\n");
}
return 0;
}
但是,这仅显示了十字架的一个对角线,我想如果在某个条件之后我不知所措之后,可以通过另一种条件来创建对角线。
您绝对是在正确的轨道上! 不要放弃
考虑这一点的方法是考虑循环计数器。 您已经解决了一半。 如果行和列相同,则需要输出*
。 那还有什么其他条件呢? 好吧,请考虑倒数。 如果该行与向后计数的列相同,则我们还需要*
。
我不想为您做家庭作业,因此我将暂不编写代码,但希望可以为您提供有关您需要做什么的提示。
如果需要帮助,还必须从另一侧检查该列:
#include <stdio.h>
int n;
int main(void) {
printf("size?: ");
scanf("%d",&n);
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
if (i == j || i == n - j + 1) printf("*");
else printf(" ");
}
printf("\n");
}
return 0;
}
编辑:有建议做i + j == n + 1
,但我相信i == n - j + 1
更有意义,因为:
i
是你当前的行 j
是您当前的列 n
是正方形的大小(最大行/最大列) i == n - j + 1
表示max - current + 1
*
max - current + 1
*
max - current + 1
列 将if( (i==j) )
替换为if( (i==j)||(i+j)==n+1 )
,即:
#include <stdio.h>
int main(void)
{
int n;
printf("size?: ");
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if( (i==j)||(i+j)==n+1 )
printf("*");
else
printf(" ");
}
printf("\n");
}
return 0;
}
首先是C编译器不喜欢
for (int i = 0; i < n; i++)
他们喜欢
int i = 0;
for (i = 0; i < n; i++)
但是,如果您使用的是C ++编译器,则可能不会遇到该问题。
现在; 回到解决眼前的问题!
在线上:
if( (i==j) )
在此条件下,您将在(1、1),(2、2),(3、3)...处绘制点
您还希望在(1,n),(2,n-1),(3,n-2)...处绘制点
因此,您需要在此if语句中添加第二个条件:
if ( (i==j) || (i == (n - j) + 1 ) )
然后,您可以根据需要简化此操作...
if ( (i==j) || (i == n - j + 1 ) )
然后你走了! 现在,它会打印一个叉号,就像您在问题中所描述的那样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.