gpt4 book ai didi

c++ cin.getline() 失败

转载 作者:太空狗 更新时间:2023-10-29 21:50:51 42 4
gpt4 key购买 nike

我的问题是我的程序不读取我通过键盘输入的值,只读取第一个、第二个和最后一个。我试过 cin.ignore();和其他解决方案,但不起作用。

这是输入:

Insurance 1
Model: mazda

serial number: 60

Price: 9999

Contract number: 76Z

Contract money: 12

//所有字符后,有一个\n回车。

这是输出:

Insurance 1
Model: mazda

serial number: 60

Price: 0

Contract number:

Contract money: 12

我这里只写一个函数,不写程序的全部:

struct tseg{
char model[15]; //nombre del modelo
char serialnumber[15]; //número de serie del coche
double price; //precio de compra del coche
char contractnumber[15]; //numero del seguro
double contractmoney; //importe del contrato
};

bool registrarSeguro(tconces *a, int p, int total){ //p is the position!!!

a[p].contrato = new tseg[a[p].numSegurosActuales];

cout << "Enter model: " <<endl;
cin.ignore();
cin.getline(a[p].contrato[a[p].numSegurosActuales].model, 15);
cout << "Enter serial number: " <<endl;
cin.ignore();
cin.getline(a[p].contrato[a[p].numSegurosActuales].serialnumber, 15);
cout << "Enter price: " <<endl;
cin.ignore();
cin >> a[p].contrato[a[p].numSegurosActuales].price;
cout << "Enter contract number: " <<endl;
cin.ignore();
cin.getline(a[p].contrato[a[p].numSegurosActuales].numContrato, 15);
cout << "Enter contract number: " <<endl;
cin >> a[p].contrato[a[p].numSegurosActuales].impContrato;

a[p].numSegurosActuales++;
sw = true;

return (sw);
}

最佳答案

您可以使用 std::getline() 将数据读入字符串,然后将内容复制到您的字段中,并在需要时限制要复制的字符数。

#include <util>
#include <cstring>

// ...

std::string input;
std::getline( cin, input );

// +1 char for end of string
std::strncpy( a[p].contrato[a[p].numSegurosActuales].model, input.c_str(), 14 );

这样一来,您的输入将始终不会出现故障。没有待定字符,没有流错误,完全没有问题。缺点是如果需要,您将不得不转换数字,但您已经在这样做了。 ¡Buena suerte!

关于c++ cin.getline() 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5208152/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com