# C++ problems

• Comp Sci
Staff Emeritus
Gold Member
I wrote a little test program to try to figure out some problems I am having in another program I'm working on.

Code:
# include <iostream>
# include <string>
using namespace std;

void ahoy(string nameEntered)
{
cout << "Ahoy, " << nameEntered << "!" << endl;
}

int main()
{
string name;
cout << "enter your name: ";
getline(cin, name);
ahoy(name);
return 0;
}
I am using Visual C++ 6.
Problem 1: After I enter keyboard input I have to press enter twice. Why not once? I see this both when I am testing the program in the editor, and also when I run the .exe.
Problem 2: In the .exe, the window closes so I never see the output from the function. How can I make it pause?
I haven't dealt with C++ in a couple of years so I may have just forgotten some simple things. Thanks for your advice.

Related Engineering and Comp Sci Homework Help News on Phys.org
Hurkyl
Staff Emeritus
Gold Member
When I compile with gcc 3.4.4, I only have to hit enter once. I have more faith that the version compiled with gcc is correct than I do the version compiled by VS.

OTOH, there's probably a perfectly reasonable explanation for what's going on. I just haven't figured it out yet.

For problem 2, simply waiting for more input... say cin.get()... will suffice. I suspect your double-enter problem will foil that plan, though. (Though you could do it twice)

An aside: your argument to ahoy' should probably be

const string &nameEntered

and not

string nameEntered

. What you wrote will make a brand new copy of the string object for the ahoy function to use; the alternative I suggested will pass it by reference (and states that ahoy promises not to modify it), so that copies aren't made.

Staff Emeritus
Gold Member
hmm.. I actually do need to make modifications to the string in the function of the larger program I am working on. But, if I can do a pass by reference, can I just output the original string in main() after the function has done it's work on it? I get a little confused about what I can do with strings vs. what I can do with char arrays regarding pass by reference.

WRT 2) you can also run the program from a .bat shortcut using the pause command. This keeps the console window open after the program terminates so you can see the output.

For example:
Example test.bat file
Code:
@A shortcut that starts your console program and pauses so you read output
START C:\MYPROGGY\foo.exe
pause`
I assume your using windows, i think you can also do the same by creating a windows shortcut and adjusting the properties options for it.

WRT 1) http://support.microsoft.com/default.aspx?scid=kb;EN-US;q240015 [Broken] Maybe of help.

Last edited by a moderator:
J77
Another point:

Why not use "cin >> name;"

Staff Emeritus
Gold Member
For problem 2, simply waiting for more input... say cin.get()... will suffice. I suspect your double-enter problem will foil that plan, though. (Though you could do it twice)
You were right. I threw in a couple of getchar(); lines and it behaved.
3trQN said:
WRT 1) See here Maybe of help.
aha! I am going down to the school labs and see if they have Visual C++ .net.
J77 said:
Another point:

Why not use "cin >> name;"
'cause Betty Lou or Zsa Zsa might wanna use my program.

VC++6.0 is awesome, printf is your friend..but i don't get the double enter problem when compilng your code...

getch() from conio.h is good to use if your on windows...its not a standardized library thogh.

Staff Emeritus
Gold Member
My double enter problem vanished when I recompiled in Visual C++.net in the lab. But then that brought me a few new last minute problems to work out. Fortunately I got it all sorted out before the deadline. whew!

Hurkyl
Staff Emeritus
Gold Member
getch() is from conio.h and is nonstandard. getchar() is in stdio.h and is standard. Why would you prefer printf when using C++, though?

easier to control for , for me anyways. and ... . there's no difference to using native C functions in C++..isn't iostream in C++ based on printf?

Last edited:

Hi all!

Im markus from finland.I have aproblem (sorry my english is not the best..)

I try to make program, whic ask numbers, and put thme in different tables. The number of tables comes from user. how can i make code, which make as many tabels as user tell?

Marksu

markushwalber:

what type of numbers are being asked? just integers, decimals (float) , imaginary?

given a number how should they be formated into tables?

reply back with more details and i will assist.