C++ 不要进入我的cin
C++ Don't enter in my cin
我有一个不理解的小问题。我尝试了很多我在网上读到的东西,但都不起作用。
我的main.cpp代码:
#include <iostream>
using namespace std;
#include "Equipe.h"
#include "Club.h"
//PROTOTYPE
void MenuSecClub();
void MenuSecFed();
int main(int argc,char* argv[])
{
int choice;
//cout << " Welcome heeere !!!" << endl;
Club C;
cin >> C;
cout << " hello : " << C;
cin >> choice;
return 0;
}
我的俱乐部istream代码
istream& operator>>(istream& s,Club& C)
{
int nc;
char Buffer[20],Buffer2[20];
cout << "Enter a name" << endl;
s.getline(Buffer,20);
C.setNom(Buffer);
s.clear();
cout << "Enter a num club" << endl;
cin >> nc;
C.setNumClub(nc);
s.clear();
cout << "Enter the address of the club" << endl;
s.getline(Buffer,20);
C.setAdresse(Buffer);
s.clear();
return s;
}
前两个cin工作得很好(Name和NumClub),当他到达cin的地址时,它会直接进入并进入主目录。我不能为这个地址写任何东西。
我已经尝试清除,我已经尝试为getline提供第二个缓冲区。我不明白发生了什么。
谢谢你的帮助!
这里有几个问题:
-
cin>>nc不会从流中移除尾端线。因此,下一个s.getline(Buffer,20)实际上读取了这个字符,因此在键入其他字符之前退出。
-
您似乎认为s.clear()会清除流的剩余内容,但事实并非如此。它只是重置标志。这就是\n仍在流中的原因。
-
cin>>nc只解析匹配的输入。因此,如果有人没有输入数字,它仍将与\n一起在流中。
-
使用单个运算符>>调用来请求用户的多个输入是非常不寻常的,因为这是一种意外的副作用。想象一下有人使用运算符>>读取文件流。那会很奇怪。。。
我的建议:不要使用运算符>>,而是在Club中创建一个名为"fillFromStdin()"的成员函数。最好是有一个专门的工厂,但一开始还可以。然后避免混合getline和>>运算符。这有一些丑陋的副作用。最好只使用getline,然后再解析输入。
相关文章:
- 为什么我的两个 cin 语句没有在程序结束时运行?
- 我认为我的代码很好,但它在 cin a 之后停止并且没有进一步?
- 我应该如何去缓解两次出现的cin?
- 我不明白 c++ 中的"cin"工作
- 我的程序在到达"cin << ans1 "时崩溃
- 为什么我的 cout 一次执行,尽管 cin 应该在两者之间读取?
- 为什么当我输入字符时,这个特定的 cin.get() 语句在C++中不起作用?
- 无法让我了解 cin.get 和 cout 在这里的工作方式
- 如何在我的代码中修复无穷循环?我认为它跳过了第二个CIN,因此它一直在循环
- 当读取错误类型时,CIN覆盖我的初始化值
- 为什么我的应用程序即使我的应用程序也关闭,即使我有cin.get();
- 向我解释CIN在数量变量的小数价通过时如何工作
- 尝试将未知数量的字符串推送到向量中,但我的 cin 循环没有终止
- C++ 不要进入我的cin
- 使用 crontab 运行 C++ 程序,"cin"不会等待我的输入
- 我的程序中的 CIN 无法正常工作。我该如何解决它?
- 获取热线(CIN,答案5);在我的程序结束时不起作用
- 我的 cin>> 被跳过/忽略
- 为什么我的cin在有80多行输入时会出错
- 我的 CIN 命令完全跳过输入?我什么都试过了