【问题标题】:C++ While Loop to workC++ While循环工作
【发布时间】:2015-02-19 21:19:45
【问题描述】:

由于我了解 Python 的基础知识 (3),所以我决定将我在 Python 中编写的程序用 C++ 键入以掌握 C++ 的窍门。

问题:当您输入“TheEnd”作为名称时,我希望程序结束,但由于某种原因,如果您输入“TheEnd”,它会询问其他字段一次,然后结尾。 有没有办法让用户在要求输入名称时输入“TheEnd”而程序刚刚结束?(我尝试将 while 循环放在不同的区域,但无济于事。)

这是我所拥有的:

#include <iostream>
#include <string>

//While loop.

using namespace std;

main()
{

   string name;
   string major;
   float hours, qualityPoints, GPA;

   while (name!="TheEnd") //Here's the while loop

   {
   cout<<"Please enter your name. "<<endl;
   cin>>name;

   cout<<"Please enter your major. "<<endl;
   cin>>major;

   cout<<"List the hours you've completed so far. "<<endl;
   cin>>hours;

   cout<<"List how many quality points you have. "<<endl;
   cin>>qualityPoints;

   GPA = qualityPoints / hours;

   if (GPA >= 3.4 and hours >= 12)

   {

   cout<<name<<endl;
   cout<<major<<endl;
   cout<<"You made the Dean's List."<<endl;
   }

   else

   {

   cout<<"You did not make the Dean's List."<<endl;

   }
}

}

【问题讨论】:

  • 是的,当然有。您只需要在要求其他输入之前检查名称。
  • 很好奇,你的python程序是怎么写的?无论是 python 还是 c++,您都必须检查名称。
  • 阅读您的代码 - 它完全按照您的编写(当然总是如此,但这里非常清楚)
  • if (name == "TheEnd") break;放在cin&gt;&gt;name之后
  • @TonyJiang 我不确定如何向您展示我用于 Python 的代码,但它与我拥有的 C++ 代码几乎完全相同。 (我认为有一种方法可以在这个网站上发送私人消息,猜不出来。)

标签: c++ loops while-loop


【解决方案1】:

询问是因为您的条件在开始时经过测试,然后在询问所有字段之后。

您的代码的最小更改将是以下更改:

 for(;;) // Former while(name!="TheEnd")
 {
   cout<<"Please enter your name. "<<endl;
   cin>>name;

   if(name=="TheEnd")
       break;

一些解释:

通常使用for(;;) 而不是while(true) 作为无限循环是常见的做法。原因在于某些编译器会针对 if/while 中的常量表达式发出(ted)警告(例如,AFAIK 广泛使用的 VS 2005)。在大多数专业项目中,警告被视为错误。

每个循环(for/while)都可以使用break 退出。因此,您没有循环条件,而是退出条件。我决定编写此解决方案,因为它需要对您的示例代码进行最小的更改。此外,没有(简单的)方法可以将您的中断条件作为 while 条件的一部分。

保留while(name!="TheEnd") 并仅在cin 之后添加if 是不好的做法。你用它生成“货物崇拜编程”代码。

【讨论】:

  • “通常使用for(;;)而不是while(true)是常见的做法” 嗯,什么?这对这些有显着影响?请详细说明。 BTW OP 要求 while (name!="TheEnd") 而不是无限循环。之后使用do {} while() 检查cin 结果应该可以很好地完成这项工作。
  • @πάνταῥεῖ 一些编译器会在 if/while 结构(例如 VC2005 C4127)中对常量表达式发出(ted)警告。顺便说一句 do{} while() 检查 cin 强制用户输入至少一个完整的条目。在输入“TheEnd”后输入“major”、“points”和“hour”看起来不是一个好习惯。同样在我的答案中,我尝试尽可能少地更改给定的代码。除了 OP 要求。我会扩展我的答案。
猜你喜欢
  • 1970-01-01
  • 2015-05-14
  • 2021-07-18
  • 1970-01-01
  • 2016-01-11
  • 1970-01-01
  • 2017-03-29
  • 2015-01-06
  • 1970-01-01
相关资源
最近更新 更多