控制台中的新结构崩溃,原因

new structure crashing in console, why?

本文关键字:崩溃 原因 结构 新结构 控制台      更新时间:2023-10-16

只有当我要求用户在名称之前输入披萨直径时,这才会使控制台崩溃。

如果我问披萨的名字,然后问披萨的直径和重量,这似乎很好——我不明白为什么。

#include <iostream>
using namespace std;
struct pizza_structure
{
    double diameter;
    char name[100];
    double weight;
};
int main()
{   
    pizza_structure * ps = new pizza_structure;
    cout << "Enter pizza diameter: ";
    cin >> ps->diameter;
    cout << "Enter pizza name: ";
    cin.get(ps->name, 100); 
    cout << "Enter pizza weight: ";
    cin >> ps->weight;
    cout << "Name: " << ps->name << ", diameter: " << ps->diameter << ", weight: " << ps->weight;
    delete[] ps;
    cin.get();
    cin.get();
    return 0;
}

您在使用cin >> ...格式化和使用cin.get(...) 未格式化之间混合输入类型

这是"错误的",因为格式化的输入将换行符留在输入缓冲区中,然后将其作为cin.get(...)的第一个字符读取,这意味着字符串为空,然后当您读取weight时,它无法正确读取。

您需要使用备用cin.get()读取额外的换行符[并希望用户没有在输入中添加一些非数字字符],或者使用getline手动解析输入并自己拆分行[例如使用stringstream从行中读出数字]。

商业级UI肯定会使用自定义读取功能,当涉及到输入错误时,这些功能更有意义。

正如其他人所说,delete []是错误的——事实上,对于这样一个小的结构,首先没有理由使用new