【问题标题】:How to convert a while loop into a for loop? C++如何将while循环转换为for循环? C++
【发布时间】:2020-11-11 11:35:22
【问题描述】:

我已经检查了与我的问题相似的问题的解决方案,但它们在我的情况下不起作用。 我想让这个程序使用 for 循环而不是 while 循环。

#include <stdio.h>

#define SENTINEL -99

int main(void) {
  int sum = 0, number;

  printf("Enter first number (or %d to quit)> ", SENTINEL);
  scanf_s("%d", &number);
  while (number != SENTINEL) {
    sum += number;
    printf("Enter next number (%d to quit)> ", SENTINEL);
    scanf_s("%d", &number);
  }
  printf("\nThe sum of 5, 52, 31, and 65 is %d\n", sum);

  return (0);
}

【问题讨论】:

  • while (&lt;whatever&gt;) ==> for( ; &lt;whatever&gt; ; )
  • O.T.:您的代码看起来不像惯用的 C++。我看不到任何标准 C 编译器不接受的东西,但我看到很多可以/应该在 C++ 中做不同的事情。
  • Imo a while 是这里更好的选择。你认为使用for-loop 可以达到什么目的?
  • 出于好奇:你怎么知道用户会输入5, 52, 31, and 65? ;-)
  • 就我个人而言,我会改进 while 循环的结构,并在考虑之前消除重复代码(例如提示用户并在两个不同的地方读取输入)将while 循环变成for 循环。但是,一般来说,你不能在这里期望太多的答案 - 通常,只有当有人明确要求将 while 循环转换为其他循环时,这是一个家庭作业 - 任何有经验的人都知道你通过自己解决问题,而不是乞求和被灌输解决方案,将学到更多。

标签: c++ for-loop while-loop


【解决方案1】:
#include <stdio.h>
#include <vector>

#define SENTINEL -99

int 
main(void)
{
int sum = 0, number;
    std::vector<int> v;
    
printf("Enter first number (or %d to quit)> ", SENTINEL);
scanf_s("%d", &number);
for(int i = 0; number != SENTINEL; i++) {
    sum += number;
    v.push_back(number);
    printf("Enter next number (%d to quit)> ", SENTINEL);
    scanf_s("%d", &number);
}
    for(int n : v) {
        printf("%d, ", n);
    }
printf(" = %d\n", sum);
return (0);
}

您使用了 C++ 标记,但您的代码使用了 C 库。

您可以使用如下参数进行编译: g++ code.cpp

【讨论】:

  • 为什么要引入一个未使用的变量int i = 0?
  • @mch 用户可能想知道循环运行了多少次。我认为这对于他的其他陈述是必要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-19
  • 2018-02-22
  • 2017-04-26
  • 2018-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多