如何将while循环转换为do while循环?

时间:2011-09-19 02:37:38

标签: c++

我有这个:

#include <iostream>

using namespace std;

int main()
{
  char ch, max = 0;
  int n = 0;
  cout << "Enter number of characters! :";
  cin >> n;
  cout << "Enter the number";
  while (n>0)
  {
      cin >> ch;
      if(max<ch)
          max = ch;
      n=n-1;

  }
  cout << "max is : " << max;
}

我试图把它变成一个do while循环 - 这就是我所拥有的:

int main()
{
char ch, max = 0;
int n = 0;
cout << "enter character";
cin >> n;
cout << "enter two";
cin >> ch;
do
      (max<ch);

while
(max = ch);
(n>0);
n= n - 1;

      cout << "max is : " << max;
}

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

第一个程序需要在使用提取器后检查EOF或其他故障:

#include <iostream>
using namespace std;

int main()
{
    char ch, max = 0;
    int n = 0;
    cout << "Enter number of characters: ";
    cin >> n;
    cout << "Enter the number: ";
    while (n > 0 && cin)
    {
        if (cin >> ch && max < ch)
            max = ch;
        n = n - 1;
    }
    cout << "max is : " << max << endl;
    return 0;
}

我注意到代码中没有任何内容强制执行'它是一个超出提示中提示的数字'。此外,大多数使用户计算计算机可能数的东西的界面都被误导了。

将代码转换为使用do ... while循环没有什么意义,但如果必须,那么最终看起来像:

#include <iostream>
using namespace std;

int main()
{
    char ch, max = 0;
    int n = 0;
    cout << "Enter number of characters: ";
    cin >> n;
    cout << "Enter the number: ";
    if (n > 0 && cin)
    {
        do
        {
            if (cin >> ch && max < ch)
                max = ch;
            n = n - 1;
        } while (n > 0 && cin);
    }

    cout << "max is : " << max << endl;
    return 0;
}

请注意,while循环顶部显示的条件现在是一个单独的if条件,并在do ... while (...)条件下重复。仅此一项就告诉您do ... while在这里不合适;如果有工作要做,你只想通过循环,但是do ... while循环会强制你完成一次循环。

答案 1 :(得分:2)

while (test) block;

相当于

if (test) {
  do block
  while (test);
}

所以你的while循环会变成

if (n>0) {
  do {
    cin >> ch;
    if(max<ch)
      max = ch;
    n=n-1;
  } while (n>0);
}