pressing 'q' or non-numeric char to exit loop/program

Discussion in 'C Programming' started by icarus, May 9, 2008.

  1. icarus

    icarus Guest

    Hi, this is a simple temperature converter (Fahrenheit to Celsius to
    Kelvin). Using gcc 4.0.

    The user is supposed to enter q or any other non-character to exit the
    program.

    Problem with this code:
    I enter 'q' as soon as the program starts. It hangs.
    Then run it again. Enter a number, it executes fine. But when I enter
    q, it repeats last number and it doesn't 'pay attention' to the letter
    entered.


    Any ideas on how can I fix it? thanks in advance.

    #include <stdio.h>

    const double F_TO_CELS_ONE_EIGHT = 1.8;
    const double F_TO_CELS_THIRTYTWO = 32.0;
    const double C_TO_KELVIN = 273.16;

    void Temperatures(double f_temp);

    int main(void){

    double f_temp;
    char quit;


    while (quit != "q"){
    printf("Enter temperature in Fahrenheit (q to quit):
    ");
    quit = getchar();
    scanf("%lf", &f_temp);
    Temperatures(f_temp);
    }
    printf("\nbye!");
    return 0;
    }

    void Temperatures(double f_temp){

    double celsius, kelvin;

    celsius = (F_TO_CELS_ONE_EIGHT * f_temp) + F_TO_CELS_THIRTYTWO;
    kelvin = celsius + C_TO_KELVIN;

    printf("Fahrenheit degrees: %.2f\n", f_temp);
    printf("Celsius degrees: %.2f\n", celsius);
    printf("Kelvin degrees: %.2f\n", kelvin);


    }
     
    icarus, May 9, 2008
    #1
    1. Advertising

  2. icarus

    Flash Gordon Guest

    icarus wrote, On 09/05/08 21:57:
    > Hi, this is a simple temperature converter (Fahrenheit to Celsius to
    > Kelvin). Using gcc 4.0.
    >
    > The user is supposed to enter q or any other non-character to exit the
    > program.
    >
    > Problem with this code:
    > I enter 'q' as soon as the program starts. It hangs.
    > Then run it again. Enter a number, it executes fine. But when I enter
    > q, it repeats last number and it doesn't 'pay attention' to the letter
    > entered.
    >
    >
    > Any ideas on how can I fix it? thanks in advance.
    >
    > #include <stdio.h>
    >
    > const double F_TO_CELS_ONE_EIGHT = 1.8;
    > const double F_TO_CELS_THIRTYTWO = 32.0;
    > const double C_TO_KELVIN = 273.16;
    >
    > void Temperatures(double f_temp);
    >
    > int main(void){
    >
    > double f_temp;
    > char quit;


    What value does quit have here since it has never been assigned a value?

    > while (quit != "q"){
    > printf("Enter temperature in Fahrenheit (q to quit):
    > ");
    > quit = getchar();


    So you have read one character, now you go and call scanf whatever the
    suer input! What happens to the newline you enter at the end of the line?

    > scanf("%lf", &f_temp);


    <snip>

    scanf returns a value, what does it mean?

    You need to start by thinking about how user input works, it looks like
    you did not think about it before writing this. I would suggest that
    using fgets for input and then checking and using what was entered.
    --
    Flash Gordon
     
    Flash Gordon, May 9, 2008
    #2
    1. Advertising

  3. icarus

    icarus Guest

    > You need to start by thinking about how user input works, it looks like
    > you did not think about it before writing this. I would suggest that
    > using fgets for input and then checking and using what was entered.
    > --
    > Flash Gordon


    yeah yeah yeah flash gordon, spare me the lecture.

    if you are so thoughtful,
    why don't you elaborate a little more on your possible solution then?




    On May 9, 11:48 am, Flash Gordon <> wrote:
    > icarus wrote, On 09/05/08 21:57:
    >
    >
    >
    > > Hi, this is a simple temperature converter (Fahrenheit to Celsius to
    > > Kelvin). Using gcc 4.0.

    >
    > > The user is supposed to enter q or any other non-character to exit the
    > > program.

    >
    > > Problem with this code:
    > > I enter 'q' as soon as the program starts. It hangs.
    > > Then run it again. Enter a number, it executes fine. But when I enter
    > > q, it repeats last number and it doesn't 'pay attention' to the letter
    > > entered.

    >
    > > Any ideas on how can I fix it? thanks in advance.

    >
    > > #include <stdio.h>

    >
    > > const double F_TO_CELS_ONE_EIGHT = 1.8;
    > > const double F_TO_CELS_THIRTYTWO = 32.0;
    > > const double C_TO_KELVIN = 273.16;

    >
    > > void Temperatures(double f_temp);

    >
    > > int main(void){

    >
    > > double f_temp;
    > > char quit;

    >
    > What value does quit have here since it has never been assigned a value?
    >
    > > while (quit != "q"){
    > > printf("Enter temperature in Fahrenheit (q to quit):
    > > ");
    > > quit = getchar();

    >
    > So you have read one character, now you go and call scanf whatever the
    > suer input! What happens to the newline you enter at the end of the line?
    >
    > > scanf("%lf", &f_temp);

    >
    > <snip>
    >
    > scanf returns a value, what does it mean?
    >
    > You need to start by thinking about how user input works, it looks like
    > you did not think about it before writing this. I would suggest that
    > using fgets for input and then checking and using what was entered.
    > --
    > Flash Gordon
     
    icarus, May 10, 2008
    #3
  4. icarus

    Flash Gordon Guest

    icarus wrote, On 10/05/08 01:04:
    >> You need to start by thinking about how user input works, it looks like
    >> you did not think about it before writing this. I would suggest that
    >> using fgets for input and then checking and using what was entered.
    >> --
    >> Flash Gordon

    >
    > yeah yeah yeah flash gordon, spare me the lecture.
    >
    > if you are so thoughtful,
    > why don't you elaborate a little more on your possible solution then?


    <snip>

    Because you need to learn to solve these problems yourself rather than
    being spoon fed. The final sentence you quote should be enough for you
    to solve your problem and thinking about the questions I asked should
    allow you to see what is wrong with your current code.
    --
    Flash Gordon
     
    Flash Gordon, May 10, 2008
    #4
  5. icarus

    icarus Guest

    Thanks Pete, you da man!! you've outdone yourself mate...

    I'll tweak it around to keep on learning C. I appreciate it.

    ~~
    Richard Heathfield, I liked your first message, where I could learn
    something mate.
    I got the bad vibe from "Flash Gordon", not you mate. I believe I
    stated that on the opening paragraph.

    I truly perceived a condescending tone with that fellow. And that
    won't be tolerated.
    That was confirmed by his second reply.

    What is this? do we need to start being pushovers now? worship and
    respecting bullies because they know more?

    If I got on his nerves for asking a newbie question, then he should
    have ignored my lousy post and move on.
    I think a message something like .."you can use this and that
    function, here's a quick example: " that would have been plenty and
    that's all I was asking really.

    Now I'm done. Again, thanks for your first message. That got me going
    on the right direction.
    I hope this clarifies a little. If not, too bad.



    On May 10, 3:48 am, pete <> wrote:
    > pete wrote:
    > > char **quit;
    > > f_temp = strtod(buff, quit);
    > > if (*quit == buff)

    >
    > Thats' wrong.
    > It should be
    >
    > char *quit = NULL;
    >
    > f_temp = strtod(buff, &quit);
    > if (quit == buff)
    >
    > instead.
    >
    > --
    > pete
     
    icarus, May 12, 2008
    #5
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. lovecreatesbeauty
    Replies:
    1
    Views:
    1,071
    Ian Collins
    May 9, 2006
  2. Replies:
    3
    Views:
    360
    Maulik
    Jun 8, 2007
  3. chad
    Replies:
    14
    Views:
    585
    Arnaud Delobelle
    Oct 13, 2010
  4. Nene
    Replies:
    6
    Views:
    350
    John W. Krahn
    Dec 13, 2008
  5. Isaac Won
    Replies:
    9
    Views:
    391
    Ulrich Eckhardt
    Mar 4, 2013
Loading...

Share This Page