在c++中使用while循环测试用例未通过

Test case not passed using while loop in C++

本文关键字:测试用例 循环 while c++      更新时间:2023-10-16

My Need:

使用while循环对stdin中可用的尽可能多的名称进行问候。当您读取字符串'42'作为名称时,请停止。

我的编码:

#include<iostream>
using namespace std;
int main()
{
    int input=1;
    int i= 0;
    string name;
    while(input<=i)
    {
        cin>>name;
        if(name=="42")
        {
             break;
        }
        else
        {
           cout<<"Hello "<<name<<"!";
           i++;
        }
    }
    return 0;
}
结果:

对于输入42,测试用例通过。对于其他输入,测试用例失败。请把你的答案贴出来。

1年后的答案:

非常抱歉这个问题。这是我问我对c++一无所知时的问题。这可能对新生有用。

你的循环有缺陷

int input=1;
int i= 0;
string name;
while(input<=i)

作为input大于i

开始

认为测试用例适用于42,但实际上循环中的逻辑从未执行。这是简单的情况下,控制台输出是相同的(即没有),但你的代码永远不会得到cin远检查输入是42

您的代码从未进入while,因为条件始终是false

只使用,

....
while(1)
{
....

这将无限地运行循环,并在遇到42时中断。

当您传递42时,您的代码甚至无法运行,因为input大于i

while(input<=i) // input = 1, i = 0, 1 > 0

你可能想要的是一个无限循环:

while (true)

你的代码有这些问题:

  • 它不会进入while循环,因为input初始化为1,i初始化为0。当检查条件时* While (input<=i)*即, while(1<=0)如果为false,则不会执行下面的语句。
  • -

我的解决方案:

 #include<iostream>
using namespace std;
int main()
{
int input=0;
int i= 1;
string name;
while(input<=i)
{
    cin>>name;
    if(name=="42")
    {
         break;
    }
    else
    {
       cout<<"Hello "<<name<<"!";
       i++;
    }
}
return 0;
}

  • input初始化为0,将i初始化为1,将得到您想要的输出。

首先,抱歉我的基本问题。环路未初始化。因为input是1,i是0。但我给出的条件是input<=i。由于条件为false,控件没有进入循环