Comp Sci Troubleshooting a Test Program in Visual C++ 6

AI Thread Summary
A user is troubleshooting a test program in Visual C++ 6, encountering two main issues: needing to press enter twice after input and the console window closing immediately after execution, preventing output visibility. Suggestions include using `cin.get()` to pause the program and modifying the input method to `cin >> name;` to avoid the double-enter problem. The discussion also touches on passing strings by reference for efficiency and mentions using a batch file with a pause command to keep the console window open. The user found that recompiling in Visual C++.net resolved the double-enter issue but introduced new problems, highlighting the challenges of transitioning between different C++ versions.
Math Is Hard
Staff Emeritus
Science Advisor
Gold Member
Messages
4,650
Reaction score
39
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. :redface: Thanks for your advice.
 
Physics news on Phys.org
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.
 
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 Maybe of help.
 
Last edited by a moderator:
Another point:

Why not use "cin >> name;"
 
Hurkyl said:
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 want to use my program.:wink:
 
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.
 
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!
 
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?
 
  • #10
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:
  • #11
If your using C++ you should code in C++... overloading the printf functionis very messy looking compared to overloading cout which is nice and clean.
 
  • #12
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
 
  • #13
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.
 

Similar threads

Replies
2
Views
3K
Replies
3
Views
1K
Replies
2
Views
2K
Replies
7
Views
2K
Replies
8
Views
1K
Replies
3
Views
2K
Replies
15
Views
3K
Back
Top