为什么我的 cout 一次执行,尽管 cin 应该在两者之间读取?

Why is my cout executing all at once in though cin should be read inbetween?

本文关键字:cin 尽管 读取 两者之间 执行 cout 我的 一次 为什么      更新时间:2023-10-16

我对C++代码很陌生,当我为任何cin输入除数字以外的任何内容时,它会自动执行其余的cout
基本上,如果我想将第一个水果命名为"苹果",它将执行所有其他cout。如果我只用数字命名它,其他cout就可以了。

#include "stdafx.h"
#include <iostream>
using namespace std;
struct Fruit {
char Name;
double Weight;
int Calories;
};
int main(){
struct Fruit TodaysFruit;
struct Fruit FruitA;
struct Fruit FruitB;
struct Fruit FruitC;
struct Fruit FruitD;
struct Fruit FruitE;
cout << "Enter Name For Fruit" << endl;
cin >> FruitA.Name;
cout << "Enter Weight For Fruit" << endl;
cin >> FruitA.Weight;
cout << "Enter Calories for Fruit" << endl;
cin >> FruitA.Calories;
//break
cout << "Enter Name For Fruit" << endl;
cin >> FruitB.Name;
cout << "Enter Weight For Fruit" << endl;
cin >> FruitB.Weight;
cout << "Enter Calories for Fruit" << endl;
cin >> FruitB.Calories;
//break
cout << "Enter Name For Fruit" << endl;
cin >> FruitC.Name;
cout << "Enter Weight For Fruit" << endl;
cin >> FruitC.Weight;
cout << "Enter Calories for Fruit" << endl;
cin >> FruitC.Calories;
return 0;
};

如果您输入"Apple"

cin >> FruitA.Name;

然后"A"将进入结构中的单个字符Name
"people"将保留在输入流中,并且无法读取以下所有数字,导致输入流进入错误状态,所有后续读取都将失败(感谢Pete Becker(。

要修复,请替换

char Name;

std::string Name;   

您需要#include <string>来支持这一点(信用 Ap31(。
std::(Peter 的一个很好的输入,信用(将确保使用预期的字符串,即使任何活动using会使混淆成为可能。