C++ 通过删除重复代码使do-while循环更整洁

C++ 通过删除重复代码使do-while循环更整洁,c++,do-while,C++,Do While,嗨,这是我的问题 编写一个使用do while语句的程序。它读取一个整数 n从键盘上。如果n不在1到10的范围内,则会发出声音 “嘟嘟”并要求输入另一个整数。如果n在正确的范围内,它将写入 退出“youhaveinput n”,然后退出 这是我的答案 #include <iostream> #include <Windows.h> using namespace std; void main() { int number = 0; do {

嗨,这是我的问题

编写一个使用do while语句的程序。它读取一个整数 n从键盘上。如果n不在1到10的范围内,则会发出声音 “嘟嘟”并要求输入另一个整数。如果n在正确的范围内,它将写入 退出“youhaveinput n”,然后退出

这是我的答案

#include <iostream>
#include <Windows.h>
using namespace std;

void main()
{
    int number = 0;
    do
    {
      cout << "Enter an integer." << endl;
      cin >> number;
      if (!(number >= 1 && number <= 10))
      {
        Beep(400, 400);
      }
    }
    while (!(number >= 1 && number <= 10));
    cout << "You have input " << number << endl;
    system("PAUSE");
}
#包括
#包括
使用名称空间std;
void main()
{
整数=0;
做
{
库特数;
如果(!(数字>=1&&number=1&&number
#包括
#包括
使用名称空间std;
void main()
{
整数=0;
bool invalid_input=真;
做
{
库特数;
无效的输入=!(数字>=1&&number
#包括
#包括
使用名称空间std;
void main()
{
整数=0;
bool invalid_input=真;
做
{
库特数;
无效的输入=!(数字>=1&&number可能

int number = 0;
while (true)
{
  cout << "Enter an integer." << endl;
  if (cin >> number && number >= 1 && number <= 10)
      break;
  Beep(400, 400);
}
cout << "You have input " << number << endl;
system("PAUSE");
int number=0;
while(true)
{
cout number&&number>=1&&number也许

int number = 0;
while (true)
{
  cout << "Enter an integer." << endl;
  if (cin >> number && number >= 1 && number <= 10)
      break;
  Beep(400, 400);
}
cout << "You have input " << number << endl;
system("PAUSE");
int number=0;
while(true)
{
cout number&&number>=1&&number
int GetNumber()
{
整数;
库特数;
返回号码;
}
void main()
{
int n=GetNumber();
而(n<1 | | n>10)
{
嘟嘟声(400400);
n=GetNumber();
}
cout
int GetNumber()
{
整数;
库特数;
返回号码;
}
void main()
{
int n=GetNumber();
而(n<1 | | n>10)
{
嘟嘟声(400400);
n=GetNumber();
}


是否有一种更标准的面向C++的蜂鸣方式:
'\a'
.1.使用函数。2.执行一次检查并将其保存到变量。3.即使用户输入了无效的数字(一个“蜂鸣”的数字),循环也会结束。顺便说一句,您的情况很奇怪。如果(数字<1 |数字>10)
if如何
?@EdS.,有人一直在练习使用DeMorgan定律并将其应用于比较运算符。有一种更标准的面向C++的哔哔声方式:
'\a'
.1.使用函数。2.执行一次检查并将其保存到变量。3.即使用户输入了无效数字(一个“哔哔”声),循环也会结束顺便说一句,你的情况很奇怪。如果(数字<1 | |数字>10)是不是
if(数字<1 | |数字>10)
?@EdS,有人一直在练习使用DeMorgan定律并将其应用于比较运算符。这称为功能滥用。@EdS。因此,将其作为函数而不是lambda。没有任何区别。这会使代码的清晰度有所不同。您对过去完全直接的循环稍微有些模糊。@EdS。在这里,我使之成为旧式。只为你。我想这不是lambda,更多的是循环的结构……无论如何,+1这叫做功能滥用。@EdS。因此,将其作为函数而不是lambda。没有区别。它在代码的清晰性上有区别。你稍微混淆了过去完全直接的循环。@Ed在美国,我把它做成了旧式。只是为了你。我想这不是lambda,更多的是循环的结构……无论如何,+1这是我更喜欢的版本;它避免了代码重复,也不执行冗余检查。@jamesdlin我写它的时候也有同样的想法。即使是被接受的答案也只会改变条件检查布尔标志时,不管怎样都会立即检查两次。优化后的asm(我写这篇文章时笑了,这是一个UI提示,看在上帝的份上)完成后可能最终会显示为这样。这也是检查流输入有效性的唯一答案。这是我更喜欢的版本;它避免了代码重复,并且不执行冗余检查。@jamesdlin我写它时也有同样的想法。即使接受的答案也只会移动条件ch选中一个布尔标志,不管怎样,它都会被立即检查两次。优化后的asm(我写这篇文章的时候笑了,这是一个UI提示)可能会在完成时最终显示为这样。这也是检查流输入有效性的唯一答案。
int number = 0;
while (true)
{
  cout << "Enter an integer." << endl;
  if (cin >> number && number >= 1 && number <= 10)
      break;
  Beep(400, 400);
}
cout << "You have input " << number << endl;
system("PAUSE");
int GetNumber()
{
    int number;
    cout << "Enter an integer." << endl;
    cin >> number;
    return number;
}

void main()
{
    int n = GetNumber();

    while(n < 1 || n > 10)
    {
        Beep(400, 400);
        n = GetNumber();
    }

    cout << "You have input " << n << endl;
    system("PAUSE");
}