【问题标题】:How Can I Stop Newline at the Very End of a Loop?如何在循环的最后停止换行?
【发布时间】:2019-09-09 03:17:23
【问题描述】:

我有一个类的编程作业,其中输出必须与文件的内容完全匹配。对于这个问题,我必须使用一个循环来连续打印出具有指定格式的值。我的问题是在循环完成时停止出现最后一个换行符。

由于类策略的原因,我无法包含我的实际代码或我想要完成的最终目标,但假设我正在尝试使用 for 循环打印出数字的阶乘。我想用行分隔答案,除了我不希望最后一个在它下面开始一个新行。我怎样才能解决这个问题,而无需提前停止新的或事后创建另一个循环?

int count; 
int number; // some random value
int sum = 1;

for(count = 1; count <= number; count++)
{
  sum *= count;
  printf("Current Sum: %d\n", sum);
}

假设数字是 3。 我期望输出:

Current Sum: 1
Current Sum: 2
Current Sum: 6 //ends here, no newline

但是,我得到:

Current Sum: 1
Current Sum: 2
Current Sum: 6
               //new line that I don't want

【问题讨论】:

  • 如果在循环的开头而不是结尾输出换行符会发生什么?也许是一个简单的putchar ('\n');
  • 非常邪恶,但有效:printf("Current Sum: %d%s", sum, &amp;"\n"[count&gt;=number]);

标签: c loops newline


【解决方案1】:
int count; 
int number; // some random value
int sum = 1;

for(count = 1; count <= number; count++)
{
  sum *= count;
  printf("Current Sum: %d", sum);
  if(count+1 <= number)
    printf("\n");
}

这是我目前能想到的解决这个问题的最快和最简单的方法。

【讨论】:

    【解决方案2】:

    解决这个问题的一种常见方法是将第一种情况视为特殊情况,而不是最后一种情况。由于总是有第一种情况,这实际上更简单。

    int count; 
    int number; // some random value
    int sum = 1;
    
    printf("Current Sum: %d", sum);
    for (count = 2; count <= number; count++) {
      sum *= count;
      printf("\nCurrent Sum: %d", sum);
    }
    

    [为什么叫“sum”,其实它是一个产品?当number 为 0 或负数时,你想发生什么?]

    【讨论】:

    • 你是对的。它应该是产品,这也是一个很好的测试用例。但是,我只是使用我想到的第一个示例,因为我不会向在线资源透露我的课程内容。如果将来再次发生此问题,我只需要适当的指导来纠正此问题。
    【解决方案3】:

    只需将这种情况(最后一行)排除在循环之外

    for(count = 1; count < number; count++)
    {
      sum *= count;
      printf("Current Sum: %d\n", sum);
    }
    sum *= count;
    printf("Current Sum: %d", sum);
    

    【讨论】:

      【解决方案4】:

      这是因为 printf("Current Sum: %d\n", sum) ,每个循环都会生成新行。使用 count

      int count; 
      int number; // sum random value
      int sum = 1;
      
      for(count = 1; count <= number; count++)
      {
        sum *= count;
        printf("Current Sum: %d", sum);
        if(count!=number){
          printf("\n");
        }
      }
      

      但是如果你使用 count

      int count; 
      int number; // sum random value
      int sum = 1;
      
      for(count = 1; count < number; count++)
      {
        sum *= count;
        printf("Current Sum: %d", sum);
        if(count!=number-1){
          printf("\n");
        }
      }
      

      【讨论】:

        【解决方案5】:

        您可以在循环内添加带有条件的断词

        #include <iostream>
        
        using namespace std;
        
        int main() {
            int count; 
            int number=3; // sum random value
            int sum = 1;
        
            for(count = 1; count <= number; count++) {
                sum *= count;
                printf("Current Sum: %d", sum);
                if(count==3) { 
                    break;
                }  
                printf("\n");
            }
        
            return 0;
        }
        

        当 count 等于 3 时,循环将结束,因此 printf("\n");不会在最后一次迭代中执行

        【讨论】:

        • 更好地使用if(count==number)
        猜你喜欢
        • 2021-05-15
        • 2017-05-10
        • 2019-10-17
        • 2015-04-14
        • 1970-01-01
        • 2022-01-11
        • 2015-08-26
        • 2019-10-16
        • 1970-01-01
        相关资源
        最近更新 更多