How do you use a pointer-to-struct to get input that will be stored in a string variable? I thought simply passing pz->szCompany to getline() would behave the same as if I had used the . operator on a normal instance of Pizza (instead of a pointer-to), but when I run this program it skips over the company name prompt completely.
// Parts of the program omitted.
struct Pizza {
string szCompany;
float diameter;
float weight;
};
Pizza* pz = new Pizza;
cout << "Enter the weight: ";
cin >> pz->weight;
cout << "Enter the company name: ";
// use getline because the company name can have spaces in it.
getline(cin, pz->szCompany);
cout << "Enter the diameter: ";
cin >> pz->diameter;
cout << "\nCompany name: " << pz->szCompany;
cout << "\nWeight: " << pz->weight;
cout << "\nDiameter: " << pz->diameter;
// cannot forget this step.
delete pz;
return 0;
When you use
>>to read input, it will leave unread characters in the stream (those, that couldn’t be converted to integer, at least the return character you type to enter input), which the followinggetlinewill consume thinking it has already read an (empty) line.Your problem has nothing to do with the struct or pointers, just the normal behavior of input streams.
You may also have to deal with incorrect input. For example, entering a non-number where a number is expected would put the stream in an error state, so that all subsequent attempts to read would fail unless you deal with it. Better take Neil’s advice, but for getting input from the user, it might also make sense to use a function for formatted input that prompts you until you get valid input: