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 获取地址时,它传入并直接传入 main 的 cout。我不能为地址写任何东西。
我已经尝试清除,我已经为 getline 尝试了第二个缓冲区。我不明白发生了什么。
感谢您的帮助!
这里有几个问题:
cin >> nc 不会从流中删除结尾行。所以下一个 s.getline(Buffer,20) 实际上读取了这个 \n 字符,因此在输入任何其他内容之前退出。
似乎你认为s.clear()清除了流的剩余内容,但事实并非如此。它只是重置标志。这就是 \n 仍在流中的原因。
cin >> nc 只解析匹配的输入。所以如果有人不输入数字,它仍然会和 \n.
一起在流中
使用单个运算符>>调用来请求用户的多个输入是非常不寻常的,因为这是意想不到的副作用。想一想有人使用运算符 >> 从文件流中读取。那就奇怪了...
我的建议:不使用运算符>>,而是在俱乐部中创建一个成员函数,例如"fillFromStdin()"。最好是专门的工厂,但一开始就可以了。然后避免混合使用 getline 和 >> 运算符。这有一些ugly side effects。最好只使用 getline,然后再解析输入。
我有一个我不明白的小问题。我已经尝试了很多我在网上读到的东西,但实际上没有任何效果。
我的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 获取地址时,它传入并直接传入 main 的 cout。我不能为地址写任何东西。
我已经尝试清除,我已经为 getline 尝试了第二个缓冲区。我不明白发生了什么。
感谢您的帮助!
这里有几个问题:
cin >> nc 不会从流中删除结尾行。所以下一个 s.getline(Buffer,20) 实际上读取了这个 \n 字符,因此在输入任何其他内容之前退出。
似乎你认为s.clear()清除了流的剩余内容,但事实并非如此。它只是重置标志。这就是 \n 仍在流中的原因。
cin >> nc 只解析匹配的输入。所以如果有人不输入数字,它仍然会和 \n.
一起在流中
使用单个运算符>>调用来请求用户的多个输入是非常不寻常的,因为这是意想不到的副作用。想一想有人使用运算符 >> 从文件流中读取。那就奇怪了...
我的建议:不使用运算符>>,而是在俱乐部中创建一个成员函数,例如"fillFromStdin()"。最好是专门的工厂,但一开始就可以了。然后避免混合使用 getline 和 >> 运算符。这有一些ugly side effects。最好只使用 getline,然后再解析输入。