Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

toothyXdip

macrumors newbie
Original poster
Aug 27, 2008
17
0
Ok I would have no problem doing this using cout <<, and cin >>, but I am having trouble doing it with ncurses.

Code:
#include <ncurses.h>
#include <string.h>
#include <iostream>

int row, col;
char mesg[] = "Whats your name?\n";
char name[50];

void userinput()
{	
	initscr();
	printw("Hey! I know you.");
	refresh();
	getch();
	endwin();
}

int main()
{	
	initscr();
	getmaxyx(stdscr,row,col);
	mvprintw(1, (col-strlen(mesg))/2, mesg);	
	getstr(name);
	if (name == "Bob")
	{
		userinput();
	}
	refresh();		
	getch();				
	endwin();
	
	return 0;
}

It compiles but when I type in the name "Bob" nothing happens. I have a feeling that its not even considering the if statement because it reacts as if it wasn't even there.

Also, when I try to make name a string variable I get the errors:
Code:
cpp:7: error: ‘string’ does not name a type
cpp: In function ‘int main()’:
cpp:23: error: ‘name’ was not declared in this scope
 

kainjow

Moderator emeritus
Jun 15, 2000
7,958
7
== here is comparing the pointer values. Use strcmp() which returns 0 if the two strings are equal.
 

kpua

macrumors 6502
Jul 25, 2006
294
0
Also, the string class isn't in the top-level namespace. To switch to using C++ strings, you need to either use "std::string" or "using namespace std;"

Of course, you can't pass a std::string to getstr(). You'd need to pass a buffer (like you do now), then create a std::string with the buffer. If you do that, then you can use ==.

Also, watch out for buffer overflows ;-)
 

toothyXdip

macrumors newbie
Original poster
Aug 27, 2008
17
0
Sorry for this but I just started learning c++ yesterday so I am just going on online tuts. I'm probably going to order a book so I might put a thread up for recommendations.

I have no problem with someone just pointing me in the direction of a website/online tutorial that will explain the problems I'm having. I did google both errors and things involved but didn't find much. These are most likely very simple problems to solve, so again sorry.

@kainjow
When I change the if statement to:
Code:
	if (strcmp(name, "Bob") = 0)
	{
		userinput();
	}

I get the error:
Code:
invalid lvalue in assignment
and im guessing its because name isn't a string, but I cant make it a string without using a buffer? And if you continue to read you will see I really have no clue on how to use a buffer.

@kpua
I didn't really know what a buffer was, so I Googled it. What I learned was a buffer is a resource which can hold a number of tokens. And even after looking at examples and looking up more one them, I still wasnt sure how to use them with my problem. I don't want to be spoon fed this, so if you could tell me where to start, or ways buffers are used, or link/write an example using buffers I would be very appreciative.

Thanks
 

kpua

macrumors 6502
Jul 25, 2006
294
0
Use ==, not = in your if statement.

The term "buffer" in practice essentially means an array (usually statically allocated). We usually call an array a "buffer" when it's the destination of some data we're receiving. (In this example, we're receiving data from getstr())

The code you posted original had a buffer called "name". If the buffer contains a sequence of characters followed by a null terminator, it can also be called a "C string".

So, when searching tutorials/documentation, understand that "buffers" and "C strings" are often interchangeable.

A task for you (since you don't want to be spoon fed): Find out how to create a C++ string from a C string (or in other words, the 'name' array in your code).
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.