Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Homework Help: C++ problems

  1. Jan 11, 2007 #1

    Math Is Hard

    User Avatar
    Staff Emeritus
    Science Advisor
    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 (Text):

    # 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.
     
  2. jcsd
  3. Jan 11, 2007 #2

    Hurkyl

    User Avatar
    Staff Emeritus
    Science Advisor
    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.
     
  4. Jan 11, 2007 #3

    Math Is Hard

    User Avatar
    Staff Emeritus
    Science Advisor
    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.
     
  5. Jan 12, 2007 #4
    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 (Text):

    @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: May 2, 2017
  6. Jan 12, 2007 #5

    J77

    User Avatar

    Another point:

    Why not use "cin >> name;"
     
  7. Jan 12, 2007 #6

    Math Is Hard

    User Avatar
    Staff Emeritus
    Science Advisor
    Gold Member

    You were right. I threw in a couple of getchar(); lines and it behaved.
    aha! I am going down to the school labs and see if they have Visual C++ .net.
    'cause Betty Lou or Zsa Zsa might wanna use my program.:wink:
     
  8. Jan 14, 2007 #7
    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.
     
  9. Jan 14, 2007 #8

    Math Is Hard

    User Avatar
    Staff Emeritus
    Science Advisor
    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!
     
  10. Jan 14, 2007 #9

    Hurkyl

    User Avatar
    Staff Emeritus
    Science Advisor
    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?
     
  11. Jan 14, 2007 #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: Jan 14, 2007
  12. Jan 15, 2007 #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.
     
  13. Oct 4, 2008 #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
     
  14. Oct 4, 2008 #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.
     
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook