Sunday, July 12, 2009

C++: Adding user inputs into a C-String Array?

Here's my program:


#include %26lt;iostream%26gt;


#include %26lt;iomanip%26gt;





using namespace std;





void main ()


{


char name_list[9]; //10 names max





cout%26lt;%26lt;"Enter Name: ";


cin.get(name_list[0], 100);


cout%26lt;%26lt;endl;





}





Here's the error:


error C2664: 'class std::basic_istream%26lt;char,struct std::char_traits%26lt;char%26gt; %26gt; %26amp;__thiscall std::basic_istream%26lt;char,struct std::char_traits%26lt;char%26gt; %26gt;::get(char *,int)' : cannot c


onvert parameter 1 from 'char' to 'char *'


Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast





------





I'm pretty new to C++ and I know this must be something very basic about syntax or C-String. I DON'T want to replace the c-string array with a "string" (i.e.: string name_list[] instead of char name_list[])





I've been working on this all day - been trying to find help online online, but this seems to be too simple of a mistake that it's not online.

C++: Adding user inputs into a C-String Array?
3paul is correct. It would be much easier if you simply use the Standard Library class 'string'. I don't understand why you don't want to use it, unless your instructor is forbidding it. I'm also confused with your term C-String. It sounds like the MFC class CString (which you should not be using).





If you do use the Standard Library class string, you can simply declare an array of string:





string name_list[10];





// your stuff


cin %26gt;%26gt; name_list[0];


// etc.





Even better, if you use the template vector, you can have a variable sized array:





vector%26lt;string%26gt; name_list;


string input;





do {


cout %26lt;%26lt; "Enter name (blank to stop)\n";


cin %26gt;%26gt; input;


if (!input.empty())


name_list,push_back(input);


}


while (!input.empty());
Reply:char name_list[9]; does not create an array of 10 character strings. It's an array of 9 (not 10) characters. Period. So when you reference name_list[0] in the cin.get call, you're referencing a char, not a char*.





Now, char* name_list[9] would create an array of nine character pointers, but they wouldn't automatically point to character strings either. That's more detail you'd have to work out.





Hope that helps some.
Reply:You have name_list as something like a "string" right now instead of an array of "strings." Try char name_list[9][100].





But you can just do this with std::string which would make your life much simpler, and you're using the newer standard library stuff anyway so shouldn't make much of a difference in overhead. You'd probably prefer to just go that route.

thank you cards

No comments:

Post a Comment