Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;Don';不要进入我的房间_C++_Operator Overloading_Cin_Istream - Fatal编程技术网

C++ C++;Don';不要进入我的房间

C++ C++;Don';不要进入我的房间,c++,operator-overloading,cin,istream,C++,Operator Overloading,Cin,Istream,我有一个小问题,我不明白。我在网上读了很多东西,但都没用 My 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 <&l

我有一个小问题,我不明白。我在网上读了很多东西,但都没用

My 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;
}
#包括
使用名称空间std;
#包括“设备h”
#包括“Club.h”
//原型
void menuseclub();
void MenuSecFed();
int main(int argc,char*argv[])
{
智力选择;
//coutc;
不能选择;
返回0;
}
我的俱乐部是流代码

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;   
}
istream&operator>>(istream&s、Club&C)
{
int nc;
字符缓冲区[20],缓冲区2[20];

您在这里有几个问题:

  • cin>>nc不会从流中删除尾随的结束行。因此,下一个s.getline(缓冲区,20)实际上会读取此字符,\n因此会在键入任何其他字符之前退出

  • 您似乎认为s.clear()会清除流中剩余的内容,但事实并非如此。它只是重置标志。这就是\n仍在流中的原因

  • cin>>nc只解析匹配的输入。因此,如果有人没有输入数字,它仍将与\n一起出现在流中

  • 使用单个操作符>>调用请求用户的多个输入是非常不寻常的,因为这是一个意外的副作用。想想有人使用操作符>>读取文件流。这会很奇怪


  • 我的建议是:不要使用操作符>>,而是在Club中创建一个名为“fillFromStdin()”的成员函数。最好是一个专用工厂,但从一开始就可以。然后避免混合使用getline和>>操作符。这有一些问题。最好只使用getline,然后再分析输入。

    这里有几个问题:

  • cin>>nc不会从流中删除尾随的结束行。因此,下一个s.getline(缓冲区,20)实际上会读取此字符,\n因此会在键入任何其他字符之前退出

  • 您似乎认为s.clear()会清除流中剩余的内容,但事实并非如此。它只是重置标志。这就是\n仍在流中的原因

  • cin>>nc只解析匹配的输入。因此,如果有人没有输入数字,它仍将与\n一起出现在流中

  • 使用单个操作符>>调用请求用户的多个输入是非常不寻常的,因为这是一个意外的副作用。想想有人使用操作符>>读取文件流。这会很奇怪


  • 我的建议是:不要使用操作符>>,而是在Club中创建一个名为“fillFromStdin()的成员函数”。最好是一个专门的工厂,但从一开始就可以。然后避免混合使用getline和>>运算符。这有一些。最好只使用getline,然后再分析输入。

    哦,好吧!这在我的脑海中更清晰了!谢谢你的帮助,我看到了我必须做的更改!哦,好吧!这在我脑海中更清晰了!谢谢你的帮助,我明白了我必须做的改变!