c -我需要修复for循环在示例屏幕上打印相同的形状

  • 本文关键字:打印 屏幕 循环 for c for-loop
  • 更新时间 :
  • 英文 :


基本上我有一个学校的任务,编写一个C程序,要求用户输入宽度= n,并制作一个平行四边形/菱形的形状。

Enter width: 4
/
/  
/    
/      
      /
    /
  /
/

这是我的输出:

Enter width: 4
/
/ 
/   
/     
   /
 /

这是我当前的代码:

#include <stdio.h>
int main() {
int n, i, j, l;
printf("Enter width: ");
scanf("%d", &n);
for (i = 1; i <= n; i++) {
for (j = i; j <= n; j++) {
printf(" ");
}
for (l = 1; l <= 2 * i - 1; l++) {
if (l == 1)
printf("/");
else if (l == (2 * i - 1))
printf("\");
else
printf(" ");
}
printf("n"); // novi red
}
for (i = n - 1; i >= 1; i--) {
for (j = n; j >= i; j--) {
printf(" ");
}
for (l = 1; l <= 2 * i - 1; l++) {
if (l == 1)
printf("/");
else if (l == (2 * i - 1))
printf("\");
else
printf(" ");
}
printf("n"); // novi red
}
return 0;
}

但是它不像示例输出那样打印它。我真的试图解决这个问题,但我似乎就是不能使它工作。我认为问题出在第二个for循环的某个地方就在中间注释//novi red

好,工作和优化代码:

#include <stdio.h>
void printSpaces(int count);
int main() {
int n;
printf("Enter width: ");
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
printSpaces(n-i);
printf("/");
printSpaces(2*i-2);
printf("\");
printf("n"); // new line
}

for (int i = n; i >= 1; i--) {
printSpaces(n-i);
printf("\");
printSpaces(2*i-2);
printf("/");
printf("n"); // new line
}

return 0;
}
void printSpaces(int count){
for(int i = 0; i < count; i++){
printf(" ");
}
}

但不要只是复制粘贴,阅读我的解释和提示,因为你需要学习一些东西。

首先,当您在代码中多次执行某项操作时,不要将该部分代码提取到函数中,然后每次需要该代码时都调用它。这是函数式编程的原则,它使你的代码更清晰,节省了你很多时间。在本例中,我创建了一个函数来打印空格,因为有许多for循环只是为了打印空格。

我在你的代码中做的第二个主要改变是你的for循环打印一行。我完全用我的代码替换了它,我将试着解释为什么。当您想到for循环时,它在第一次运行时打印/,然后打印空格,最后打印1。当你只在循环的第一次运行时做一些事情时,这是没有意义的,因为你可以在循环之前写它,你会得到同样的结果。所以不是:

for(int i = 0; i<n; i++){
if(i==0){
//doSomething
}else{
//doSomethigElse
}
}

:

//doSomething    
for(int i = 1; i<n; i++){
//doSomethigElse
}

这样更容易读,更符合逻辑,也更快。

所以当我对你的代码做这个修正时,我最终得到:

for (int i = 1; i <= n; i++) {
printSpaces(n-i);
printf("/");
for (int j = 2; j <= 2 * i - 1; j++) {
printf(" ");
}
printf("\");
printf("n"); // new line
}

因为for循环现在只是打印空格,所以我调用了printSpaces函数:

for (int i = 1; i <= n; i++) {
printSpaces(n-i);
printf("/");
printSpaces(2*i-2);
printf("\");
printf("n"); // new line
}

但是你的错误在哪里?它在你的"如果-否则"条件的第二种情况中,但这并不重要。更重要的是编写干净和合乎逻辑的代码,因为这样更容易发现错误和错误。希望我帮助你编码风格。

最新更新