程序跳过在第一次输入后结束

时间:2017-07-08 05:49:27

标签: c++ input structure

嘿伙计,所以我有一个披萨程序,使用结构收集重量名称和大小,并动态分配内存。在用户输入直径的数字之后我的问题出现了。我的代码看起来像这样

{{1}}

当我运行程序时,它看起来像这样 您好请输入有关披萨的一些信息

直径:40 公司名: 重量:这是我们为您的披萨公司汇总的信息 公司名: 直径:40 重量:0

1 个答案:

答案 0 :(得分:0)

出现的是您尚未使用该代码清除缓冲区。

什么是缓冲区?

临时存储区域称为缓冲区。所有标准输入和输出设备都包含输入和输出缓冲区。在标准C / C ++中,流被缓冲,例如在标准输入的情况下,当我们按下键盘上的键时,它不会发送到您的程序,而是由操作系统缓冲,直到时间被分配给程序

如何影响编程? 在各种情况下,您可能需要清除不需要的缓冲区,以便在所需容器中获取下一个输入,而不是在上一个变量的缓冲区中。

cin.clear();
fflush(stdin);

这是您需要在程序中添加的代码。

int main()
{
struct pizza
{
 char name[15];
 float diameter;
 int weight;

 };

 pizza*user= new pizza{
 };
 cout<<"Hello please enter some information about your pizza"<<endl;
 cout<<endl<<"Diameter: ";

 cin>>user->diameter;
 cout<<"company name: ";
 cin.clear();    //for clearing the input buffer
fflush(stdin);

cin.get(user->name,15);

cout<<endl<<"Weight: ";
cin.clear();
fflush(stdin);

cin>>user->weight;

cout<<"here is the information that we have assembled about your pizza 
company"<<endl;
cout<<"Company name: "<<user->name<<endl;
cout<<"diameter: " <<user->diameter<<endl;
cout<<"weight: "<<user->weight<<endl;
return 0;



}

遇到“cin”语句后,我们要求输入字符数组或字符串,我们需要清除输入缓冲区,否则所需的输入被前一个变量的缓冲区占用,而不是由所需的容器占用。按“在第一次输入后在输出屏幕上输入“(回车)”,因为前一个变量的缓冲区是新容器的空间(因为我们没有清除它),程序会跳过以下容器输入。