-2

我在我的 CS 书中看到了一个 C++ 程序,其源代码是:-

#include <iostream>
using namespace std;
 
int main()
{
  char choice=‘y’; //why is this required?
  int marks, classx, test;
 
  while (choice=='y'||choice==‘Y') {
    cout<<"Enter marks:";
    cin>>marks;
    cout<<"\nEnter class:";
    cin>>classx;
    cout<<"\nWant to Enter more? (y/n)";
    cin>>choice; //Can't understand why **choice** is assigned **'y'** before while loop?
  }
  return 0;
}

在这段代码中,我不明白为什么我们在循环'y'之前分配了字符。while我省略了第 5 行choice中分配的值'y',但之后它不会运行,即使没有显示任何错误!

请解释一下为什么我们在循环之前分配'y'给角色。choicewhile

请注意,我是编程世界的新手,从 C++ 开始

4

8 回答 8

3

因为 while 循环的最开始条件是 if choice=='y',如果最开始的选择不等于 'y' 那么它甚至永远不会进入循环开始。

如果您真的不想先初始化choice,请将您的 while 循环更改为 do~while:

do
{
     cout<<"Enter marks:";
     cin>>marks;
         cout<<"\nEnter class:";
      cin>>classx;
          cout<<"\nWant to Enter more? (y/n)";
      cin>>choice; //Can't understand why **choice** is assigned **'y'** before while loop?

} while (choice=='y'||choice==‘Y');

在这种情况下,do开始一个没有条件的循环,你的第一个循环总是会发生。在循环的最后,如果while条件为真,它只会再次循环。

于 2013-07-31T17:56:52.340 回答
1

这里需要它只是因为while循环的构造方式。

注意循环条件:

while (choice=='y'||choice==‘Y')

如果choice未设置为yYwhile第一次执行之前,条件将永远不会满足,并且循环永远不会开始。

在调试器下自己尝试一下,你会看到。

于 2013-07-31T17:57:22.230 回答
1

该值是在开始时分配的,因为只有这样它才会进入循环或条件

while (choice=='y'||choice==‘Y')

失败。所以选择变量被初始化

于 2013-07-31T17:57:41.857 回答
1

否则choice将有一个可能不等于'y' or的垃圾值,'Y'并且您的循环条件第一次变为 false。如果您使用 初始化,y那么第一次循环肯定会执行(choice使用'y'或初始化'Y'意味着代码行为已明确定义 = 始终第一次执行)。

如果您希望用户第一次输入选项,请cin在循环之前添加额外的内容。

// here you may leave choice uninitialized, know behavior is defined 
cout<< "\nWant to Enter more? (y/n)";
cin>> choice; 
while (choice == 'y' || choice == 'Y'){
     cout<< "Enter marks:";
     cin>> marks;
     cout<< "\nEnter class:";
     cin>> classx;

     cout<< "\nWant to Enter more? (y/n)";
     cin>> choice; 
}

请记住:垃圾值会衍生出未定义的行为。
此外,它总是使用默认值初始化代码中的变量。

于 2013-07-31T17:56:06.830 回答
1

choice = 'y'确保while循环中的代码至少执行了 1 次。否则,循环可能会执行一次,也可能根本不执行,具体取决于平台/编译器。

此外,使用调试器将帮助您更快地回答一些问题。

于 2013-07-31T18:00:35.433 回答
1

您问

但是为什么我们只使用'y'(即while循环的条件值)作为“选择”的初始值?

while 循环while (choice=='y'||choice==‘Y')使用 || 指定 2 个条件。(逻辑或运算符)它们之间。这意味着,无论哪个条件为真,while 循环都会执行。

我们需要将选项设置为初始值,以确保循环第一次执行。该初始值可能是“Y”或“y”,它们中的任何一个都会允许 while 循环第一次运行。

于 2013-07-31T18:08:18.707 回答
0

如果你不给它赋值,它会有一个不确定的值,并且while(choice == 'y' || choice == 'Y')会看到一个不是yor的值Y,因此不会第一次进入循环,不允许用户输入任何内容。

顺便说一句,您在代码中混合了反引号(`)和单引号('),编译器不会接受。仅使用单引号。

于 2013-07-31T17:56:57.087 回答
0

在这个程序中,While循环首先检查'choice'的值,然后代码被执行,因此它应该首先由'y'或'Y'初始化以第一次执行代码

于 2013-07-31T17:59:25.740 回答