为什么我的 C++ 代码在执行前没有接受所有输入?它只接受输入并打印所有 cout 内容

Why my C++ code is not taking all inputs before execution? It just take a input and print all cout content

这是我的代码和结果 我只是先创建一个结构,然后设置一个 for 循环以使用该元素并从用户那里获取输入并在代码部分的最后显示。 请帮助我

#include <iostream>
using namespace std;
struct person
{
    char name[30]; 
    int age;
    int phone_no;
    
}p[5];

int main()
{
    for (int i=0; i<5; ++i)
{    
    cout<<"Enter you details \n\n\n";
    cout<<"     Enter your name : ";
    cin.get(p[i].name,30);
    cout<<"\n       Enter your age : ";
    cin>>p[i].age;
    cout<<"\n       Enter your phone no : ";
    cin>>p[i].phone_no;
}
for (int i=0; i<5; ++i)
{
    cout<<"\n\n\n Person's name : "<<p[i].name<<"\n Age : "<<p[i].age<<"\n Phone no : "<<p[i].phone_no;
}

return 0;

} 

结果

Enter you details


                Enter your name : Ram

                Enter your age : 12

                Enter your phone no : 9898874645
Enter you details


                Enter your name :
                Enter your age :
                Enter your phone no : Enter you details


                Enter your name :
                Enter your age :
                Enter your phone no : Enter you details


                Enter your name :
                Enter your age :
                Enter your phone no : Enter you details


                Enter your name :
                Enter your age :
                Enter your phone no :

 Person's name : Ram
 Age : 12
 Phone no : 2147483647


 Person's name :
 Age : 0
 Phone no : 0


 Person's name :
 Age : 0
 Phone no : 0


 Person's name :
 Age : 0
 Phone no : 0


 Person's name :
 Age : 0
 Phone no : 0
Process exited after 12.16 seconds with return value 0
Press any key to continue . . . 

如果您对我的代码技巧有了解,我也想给您一些有用的建议

啊,我真的不知道为什么,但是 c++ 在 cin.get(); 上有问题 它在 cin 上工作得很好:

#include "iostream"
using namespace std;
struct person
{
    char name[30]; 
    int age;
    int phone_no;
    
}p[5];

int main()
{
    for (int i=0; i<5; ++i)
{    
    cout<<"Enter you details \n\n\n";
    cout<<"     Enter your name : ";
    cin>>p[i].name;
    cout<<"\n       Enter your age : ";
    cin>>p[i].age;
    cout<<"\n       Enter your phone no : ";
    cin>>p[i].phone_no;
}
for (int i=0; i<5; ++i)
{
    cout<<"\n\n\n Person's name : "<<p[i].name<<"\n Age : "<<p[i].age<<"\n Phone no : "<<p[i].phone_no;
}

return 0;

} 

问题是:

  • phone 数字太大,无法放入此环境中的 int。它应该存储为字符串。
  • >> cin 的运算符在流中留下换行符,因此下一个 cin.get() 将读取它并停在那里。您可以阅读直到换行符并删除通过 cin.ignore() 阅读的内容。请注意 cin.get() 也会留下换行符,但 >> 运算符会善意地忽略它。

试试这个:

#include <iostream>
#include <limits>
using namespace std;
struct person
{
    char name[30]; 
    int age;
    char phone_no[30];
    
}p[5];

int main()
{
    for (int i=0; i<5; ++i)
    {
        cout<<"Enter you details \n\n\n";
        cout<<"     Enter your name : ";
        cin.get(p[i].name,30);
        cout<<"\n       Enter your age : ";
        cin>>p[i].age;
        cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        cout<<"\n       Enter your phone no : ";
        cin.get(p[i].phone_no,30);
        cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }
    for (int i=0; i<5; ++i)
    {
        cout<<"\n\n\n Person's name : "<<p[i].name<<"\n Age : "<<p[i].age<<"\n Phone no : "<<p[i].phone_no;
    }

    return 0;

}