[英]Trouble with struct() and arrays C++
所以,我必須為大學做這個項目。 我必須編寫一個程序來管理比薩餐廳的訂單。 到目前為止,這是我所做的:
#include <iostream>
#include <array>
#include <string>
#include <cctype>
#include <cmath>
#include <locale>
#include <algorithm>
using namespace std;
const int MAX_INGREDIENTES_PIZZA=10;
const int MAX_PEDIDOS=20;
enum TIngrediente
{
TOMATE,
QUESO,
NATA,
CEBOLLA,
POLLO,
HUEVO,
SALAMI,
ANCHOA,
BACON,
GAMBA
};
struct TPedido
{
string nombre_cliente;
int telefono;
int numero_pedido;
int numero_ingredientes;
TIngrediente ingredientes;
};
typedef array<float, MAX_PEDIDOS> listado_pedidos;
const array<string, MAX_INGREDIENTES_PIZZA> TIngredientes2 = {{"tomate", "queso", "nata", "cebolla", "pollo", "huevo", "salami", "anchoa", "bacon", "gamba"}};
TIngrediente StrToIngrediente(string s);
string IngredienteTostr(TIngrediente c);
string tolower(string s);
string tolower(string s)
{
string r = s;
for (int i = 0; i < s.size(); ++i)
r[i] = tolower(r[i]);
return r;
}
TIngrediente StrToIngrediente(string s)
{
s=tolower(s);
int i;
while (i < TIngredientes2.size() and TIngredientes2[i] != s)
++i;
return (TIngrediente)i;
}
string IngredienteTostr(TIngrediente c)
{
return TIngredientes2[c];
}
TIngredientes2 leer_ingrediente()
{
TIngredientes2 r;
for (int i=0; i<MAX_INGREDIENTES_PIZZA;i++){
cin>>r[i];
r[i]=tolower(r[i]);
}
StrToIngrediente(TIngredientes2);
return r;
}
TIngredientes2 escribir_ingrediente()
{
TIngredientes2 s;
for(int i=0; i<s.size(); i++){
cout<<s[i]<<endl;
}
return s;
}
TPedido leer_pedido()
{
TPedido p;
string ingredientes;
bool ok=true;
getline (cin, p.nombre_cliente);
cin >> p.telefono;
cin >> p.numero_pedido;
cin >> p.numero_ingredientes;
cin.ignore(100,'\n');
//getline (cin, p.ingredientes);
StrToIngrediente(ingredientes);
//necesitamos inicializar la variable booleana
if( numero_ingredientes > MAX_INGREDIENTES_PIZZA)
ok=false;
else if (numero_pedido > MAX_PEDIDOS)
ok=false;
else if (ingredientes != TIngrediente[i])
ok=false;
return p;
}
好的,但是我有一些問題:
1)我已經聲明TIngredientes2
為數組,但編譯器對我說Tingredientes2
沒有命名類型。
2)我已經設法在TIngrediente
(枚舉)中編寫了用於轉換String
的函數,反之亦然,但是現在我必須使2個函數來讀取屏幕上的鍵盤輸入/寫入,並且我不知道如何使用這些函數。 我在下面寫了一些東西,但我不知道是否可以。
3)當涉及到讀取在leer_pedido()
鍵盤輸入時,由於結構和最重要的原因,我不知道這是否可以,我不知道如何使用布爾值來表示引入的數據是否正確。
4)下一個功能在於將來自最后一個功能leer_pedido()
的數據存儲在列表中,我leer_pedido()
。
我希望有一個人可以幫助我
1)如果您尚未使類型為“ Tingrediente2”的類,則函數無法返回類型為“ Ttingrediente2”的對象。
在您的職能:
TIngredientes2 escribir_ingrediente()
{
TIngredientes2 s;
for(int i=0; i<s.size(); i++){
cout<<s[i]<<endl;
}
您在聲明變量'Tingredientes s',然后在屏幕上打印出來,但是沒有大小(s中沒有元素)。
嘗試這樣:
void escribir_ingrediente(array<string,MAX_INGREDIENTES_PIZZA> s)
{
for(int i=0; i<s.size(); i++)
cout<<s[i]<<endl;
}
您將已經存在的數組傳遞給函數,並在其中打印出s數組的元素。
2)只需閱讀有關枚舉的更多信息,遍歷它們並插入新元素。
3)在開始測試用戶輸入時使用boolean變量,如下所示:
bool good_Input = true; // suppose user's input is ok
if( p.numero_ingredientes > MAX_INGREDIENTES_PIZZA || p.numero_pedido > MAX_PEDIDOS)
good_input=false; // input is not good if there is more ingredients than max number of ingredients
if(good_Input)
cout<<"Input is good"<<endl;
else cout << "Input is not good"<<endl;
因此,您在代碼中使用了布爾變量,因此如果有錯誤,請將其值更改為“ false”,最后將其設置為“ false”,這樣您就知道如何在代碼中進一步處理它。
4)將結構的數據存儲在矢量中是最簡單的方法:
vector<Tpedido> structuresVector;
sturcturesVector.push_back(leer_pedido());
leer_pedido函數返回“ Tpedido”類型,因此您可以直接將其插入向量中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.