为什么我的程序在For循环的第一个循环后跳过cin>>?

李艾略特

我的程序正确运行了第一个For循环,然后在第2个和第3个循环中跳过了Cin。然后,当循环完成时,它会继续计算第一个索引[0]的BMI,并正确执行此操作并给出正确的答案,但是对于索引1和[2]则什么也不做,因为没有输入任何信息,因为已跳过cin的信息。

#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;

struct Patient
{
  double height;
  double weight;
  int age;
  bool isMale;
};


int main()
{
Patient Patients[3];

for (int i = 0; i < 3; i++) {
    cout << "Patient "<< i << " Height: ";
    cin >> Patients[i].height;
    cout << "Patient " << i << " Weight: ";
    cin >> Patients[i].weight;
    cout << "Patient " << i << " Age: ";
    cin >> Patients[i].age;
    cout << "Is Patient " << i << " Male True or False: ";
    cin >> Patients[i].isMale;
    cout << endl << endl;

   }

    cout << endl << endl;

    for (int i = 0; i < 3; i++) {
        float BMI = Patients[i].weight / (Patients[i].height *Patients[i].height);
        cout << "Patient " << i << " Has A BMI of: " << BMI << endl << endl;
      }

return 0;
 }

在第一个循环之后,您可以在此控制台看到所有cin都被跳过,但是在计算第一个索引的BMI时,第一个循环已正确存储:

马特

您会发现循环结束时出现错误。从迭代2和3中可以看出,cin每次的行为方式都不相同。来自几个错误状态标志,ios它们将帮助您了解这里出了什么问题。有关详细信息,请参见iso :: good如果添加这些检查:

for (int i = 0; i < 3; i++) {
cout << "Patient " << i << " Height: ";
cin >> Patients[i].height;
cout << "Patient " << i << " Weight: ";
cin >> Patients[i].weight;
cout << "Patient " << i << " Age: ";
cin >> Patients[i].age;
cout << "Is Patient " << i << " Male True or False: ";
cin >> Patients[i].isMale;
cout << cin.good() << '\n';
cout << cin.eof() << '\n';
cout << cin.fail() << '\n';
cout << cin.bad() << '\n';
cout << endl << endl;
}

您将看到的cin不再good是,不是eof,不是fail,不是bad当该fail位置1时,cin将不起作用。因此,您会看到结果。查看链接中的图表,您会看到以下内容:

I / O操作上的逻辑错误

您正在执行将“ true”插入的I / O操作bool单词true可能存储为字符数组或字符串,而不是布尔值。应该如何将其cin转换为布尔值?您需要捕获输入并将其转换为bool或,以使用可以显式转换为的输入bool

例如:

cout << "Is Patient " << i << " Male? (1 for Male, 0 for Female):";
cin >> Patients[i].isMale;

在这种情况下,cin识别10为整数,并且可以整数转换成一个布尔值。0为假,其他所有为真。另一种选择是让库执行和使用boolalpha您可以在这里阅读有关内容

这显示了一个更大的问题。如果我写“两点五”作为身高的答案怎么办?在这种情况下,我们可以假定用户具有一定的智能,但是考虑这样的事情将有助于将来编写更健壮的代码。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么for循环会更改for循环中的列表后跳过第一个元素?

程序在循环后跳过第一个输入

为什么在第一个foreach循环后我的变量数据丢失了?

为什么 for 循环跳过第一个 i++

为什么这个程序在我输入第一个单词时结束并且不循环

为什么第一个是无限循环?

试图使我的第一个程序循环(C ++)

程序为什么在循环链接列表中的第一个元素之后插入节点?

为什么我的 for 循环只抓取第一个元素?

为什么我的for循环仅在第一个元素上起作用?

为什么我的 Javascript 循环只返回第一个值?

遍历 for 循环:为什么我的第一个 if 语句不运行?

为什么我的 for 循环只打印第一个结果?

为什么我的 for 循环只重复打印第一个 if 语句?

为什么使用扫描仪要求用户输入的 Java while 循环会跳过第一个输入

Selenium / Python:为什么在我的for循环迭代中找到第一个元素后,为什么Selenium find_element_不再通过查找元素了?

跳过循环的第一个值

跳过python for循环中的第一个值

为什么第一个循环总是比第二个循环快?

嵌套JavaScript“ for”循环-为什么第一个循环没有遍历整个长度?

为什么我的程序自动为scanf取值,导致程序自动循环并跳过下一个scanf?

为什么在下面的node js程序中S函数内的第一个for循环无限运行?

为什么我不能在Angular ngFor循环中设置第一个单词的样式?

为什么循环浏览元组会给我字符串的第一个字符?

为什么我的 jQuery show() 函数在 php foreach 循环中仅适用于第一个元素

为什么用MatLab编写的.GIF总是在第一个显示循环中跳过第二个图像帧?

货币转换器 - 为什么我在交换机不会工作循环?当我运行我的代码只有第一个for循环工程

如何在获得第一个输入后让我的代码循环到输入?

我在SQL中的第一个for循环