【问题标题】:The While loop is not terminating even i tried decrementing t即使我尝试递减 t,While 循环也没有终止
【发布时间】:2020-02-10 06:49:15
【问题描述】:

解决方案的问题是第一行将包含总数。输入和下一行将取三个整数,然后我们必须根据输入计算结果。所以我的解决方案的问题是 While 循环没有终止。

我已经检查了几次代码,并认为这是由于条件语句和 if-else 导致 --t 语句没有被执行。所以,我应该做些什么修改才能使程序在之后终止输入。

#include<iostream>
using namespace std;

int main()
{
int t{0};
cin>>t;
while(t)
{
    double h{0},c{0},t(0);
    cin>>h>>c>>t;
    if(h>50 and c<0.7 and t>5600)
        cout<<"10\n";
    else if(h>50 and c<0.7)
        cout<<"9\n";
    else if(c<0.7 and t>5600)
        cout<<"8\n";
    else if(h>50 and t>5600)
        cout<<"7\n";
    else if(h>50 or c<0.7 or t>5600)
        cout<<"6\n";
    else
        cout<<"5\n";
    --t;
}
return 0;
}

我希望程序在输入 t 后终止,但它没有发生。

【问题讨论】:

  • 与您当前的问题无关,但您应该添加一些输入验证。解决问题后,请考虑如果用户输入负值(非零,因此为“真”)会发生什么。
  • @Someprogrammerdude 这是一个关于 codechef 的问题,第一行将包含测试用例的总数。所以,它不能是负数。

标签: c++ if-statement gcc while-loop conditional-statements


【解决方案1】:

在你拥有的循环之外

int t{0};

在循环内你有

double h{0},c{0},t(0);

您有两个不同且独特的变量t,它们相互影响。在循环内部,当您执行--t 时,您会减少循环内的变量,而不是用于循环条件的变量。

您可以通过对变量使用描述性名称而不是简短的单字母名称来解决此问题。

【讨论】:

  • 这是真的,但另一个直接的问题是每个循环迭代都有一个cin&gt;&gt;h&gt;&gt;c&gt;&gt;t;。因此,如果t&gt;0 仅仅为t 提供输入不足以让程序完成。输入t后会立即阻塞。
猜你喜欢
  • 2017-03-10
  • 2013-04-08
  • 2013-04-22
  • 1970-01-01
  • 1970-01-01
  • 2023-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多