Loop and getchar problems

Discussion in 'C Programming' started by Samuel.Coddler@gmail.com, Jun 1, 2007.

  1. Guest

    Hi,

    I'm a newbie programmer. I can't get work the following code.

    /*
    Objective:

    Use a loop to print out all of the input characters until a newline is
    found.

    */


    #include <stdio.h>

    int main (){
    /* Declare variable, Assign a initial value x. */
    char a = 'x';

    while (a != '\n') {


    /* Get a user input */
    a = getchar();

    if (a == '\n'){
    /* If the input is a new line, say good bye to user */
    printf("\nThat's it for today.\n");

    } else {
    /* Prints a user input */
    printf("%c",a);
    }

    }



    return 1;
    }
     
    , Jun 1, 2007
    #1
    1. Advertising

  2. Tak Guest

    On 6ÔÂ1ÈÕ, ÏÂÎç5ʱ25·Ö, wrote:
    > Hi,
    >
    > I'm a newbie programmer. I can't get work the following code.
    >
    > /*
    > Objective:
    >
    > Use a loop to print out all of the input characters until a newline is
    > found.
    >
    > */
    >
    > #include <stdio.h>
    >
    > int main (){
    > /* Declare variable, Assign a initial value x. */
    > char a = 'x';
    >
    > while (a != '\n') {
    >
    > /* Get a user input */
    > a = getchar();
    >
    > if (a == '\n'){
    > /* If the input is a new line, say good bye to user */
    > printf("\nThat's it for today.\n");
    >
    > } else {
    > /* Prints a user input */
    > printf("%c",a);
    > }
    >
    > }
    >
    > return 1;
    >
    > }


    It's my program:
    #include <stdio.h>

    int main (){
    char a;

    while ((a = getchar()) != '\n') {
    printf("%c",a);
    }
    printf("\nThat's it for today.\n");

    return 1;
    }

    right??????
     
    Tak, Jun 1, 2007
    #2
    1. Advertising

  3. Chris Dollin Guest

    wrote:

    Minor notes (since Mark has started the major ones):

    > #include <stdio.h>
    >
    > int main (){
    > /* Declare variable, Assign a initial value x. */


    Pointless comment.

    > char a = 'x';
    >
    > while (a != '\n') {
    >
    >
    > /* Get a user input */


    Ditto.

    > a = getchar();


    `getchar` returns `int`. So `a` should be `int`. (This is because
    the result of `getchar` has to allow for every character /and/
    EOF.)

    (fx:snip)

    > return 1;


    Not portable. 0, EXIT_SUCCESS, EXIT_FAILURE (those from stdlib)
    are portable.

    > }


    --
    "- born in the lab under strict supervision -", - Magenta, /Genetesis/

    Hewlett-Packard Limited Cain Road, Bracknell, registered no:
    registered office: Berks RG12 1HN 690597 England
     
    Chris Dollin, Jun 1, 2007
    #3
  4. Guest

    On 1 Jun, 10:25, wrote:
    > Hi,
    >
    > I'm a newbie programmer. I can't get work the following code.


    "I can't get work" doesn't tell me much about your problem.

    Generally if there's a problem you need help with, it's helpful to
    tell us
    * What did you expect to happen?
    * What did happen?

    Your code works for me, and behaves exactly as I expect, but that's
    not necessarily what you expected, so you probably need to tell us
    what you expected.

    I'll give you a hint - standard input is probably line-buffered...

    >
    > /*
    > Objective:
    >
    > Use a loop to print out all of the input characters until a newline is
    > found.
    >
    > */
    >
    > #include <stdio.h>
    >
    > int main (){
    > /* Declare variable, Assign a initial value x. */
    > char a = 'x';
    >
    > while (a != '\n') {
    >
    > /* Get a user input */
    > a = getchar();
    >
    > if (a == '\n'){
    > /* If the input is a new line, say good bye to user */
    > printf("\nThat's it for today.\n");
    >
    > } else {
    > /* Prints a user input */
    > printf("%c",a);
    > }
    >
    > }
    >
    > return 1;
    >
    > }
     
    , Jun 1, 2007
    #4
  5. Guest

    Hi, Tak,

    Your code is much clearner. But the result on my end is the same.

    I wanna make the program so that the program prints all the inputs
    until a user input a new like (generally by pressing return).

    So, it should open for a new input.


    That string "That's it for today" should be displayed only when a user
    type a newline.
     
    , Jun 1, 2007
    #5
  6. Tak said:

    > It's my program:
    > #include <stdio.h>
    >
    > int main (){
    > char a;
    >
    > while ((a = getchar()) != '\n') {
    > printf("%c",a);
    > }
    > printf("\nThat's it for today.\n");
    >
    > return 1;
    > }
    >
    > right??????


    Wrong. Well, you're right that it's your program, but you're wrong that
    it's right. It's wrong.

    --
    Richard Heathfield
    "Usenet is a strange place" - dmr 29/7/1999
    http://www.cpax.org.uk
    email: rjh at the above domain, - www.
     
    Richard Heathfield, Jun 1, 2007
    #6
  7. Guest

    On 1 Jun, 10:53, wrote:
    > On 1 Jun, 10:25, wrote:
    >
    > > Hi,

    >
    > > I'm a newbie programmer. I can't get work the following code.

    >
    > "I can't get work" doesn't tell me much about your problem.
    >
    > Generally if there's a problem you need help with, it's helpful to
    > tell us
    > * What did you expect to happen?
    > * What did happen?
    >
    > Your code works for me, and behaves exactly as I expect, but that's
    > not necessarily what you expected, so you probably need to tell us
    > what you expected.
    >

    [Snip]

    I'd better qualify my comments by saying that I didn't bother with the
    nitpicking about whether you should declare main as "int main(void)"
    or that a should be an int.
     
    , Jun 1, 2007
    #7
  8. said:

    > On 1 Jun, 10:25, wrote:
    >> Hi,
    >>
    >> I'm a newbie programmer. I can't get work the following code.

    >
    > "I can't get work" doesn't tell me much about your problem.


    Actually, I think it tells you all you need to know.

    --
    Richard Heathfield
    "Usenet is a strange place" - dmr 29/7/1999
    http://www.cpax.org.uk
    email: rjh at the above domain, - www.
     
    Richard Heathfield, Jun 1, 2007
    #8
  9. Guest

    On 1 Jun, 11:27, Richard Heathfield <> wrote:
    > said:
    >
    > > On 1 Jun, 10:25, wrote:
    > >> Hi,

    >
    > >> I'm a newbie programmer. I can't get work the following code.

    >
    > > "I can't get work" doesn't tell me much about your problem.

    >
    > Actually, I think it tells you all you need to know.


    Meow! Harsh but essentially fair, I guess.

    However, he did post a complete, compilable, relatively cleanly
    formatted program - give him some points for that...
     
    , Jun 1, 2007
    #9
  10. said:

    > Hi,
    >
    > I'm a newbie programmer. I can't get work the following code.


    Here's your program again, properly indented for readability:

    #include <stdio.h>

    int main()
    {
    /* Declare variable, Assign a initial value x. */
    char a = 'x';

    while(a != '\n')
    {
    /* Get a user input */
    a = getchar();

    if(a == '\n')
    {
    /* If the input is a new line, say good bye to user */
    printf("\nThat's it for today.\n");
    }
    else
    {
    /* Prints a user input */
    printf("%c", a);
    }
    }

    return 1;
    }

    Problems:

    1) a has a lousy name!
    2) a has the wrong type - it should be int.

    Whilst I wouldn't want to suggest that your program is otherwise devoid
    of problems, it does appear to do what is asked of it, except in cases
    where it hits the end-of-file, where it does get a bit messy, but you
    presumably aren't worried about that.

    For the record, here's how I'd have written it:

    #include <stdio.h>

    int main(void)
    {
    int ch = 0;
    while((ch = getchar()) != EOF && ch != '\n')
    {
    putchar(ch);
    }

    printf("\nThat's it for today.\n");

    return 0;
    }

    --
    Richard Heathfield
    "Usenet is a strange place" - dmr 29/7/1999
    http://www.cpax.org.uk
    email: rjh at the above domain, - www.
     
    Richard Heathfield, Jun 1, 2007
    #10
  11. Guest

    On 1 Jun, 11:00, wrote:
    > Hi, Tak,
    >
    > Your code is much clearner. But the result on my end is the same.
    >
    > I wanna make the program so that the program prints all the inputs
    > until a user input a new like (generally by pressing return).


    That's what I thought you wanted - why didn't you say so in your
    original posting.

    What you are saying, I think, is that you want to read and echo the
    characters typed as they are typed, without waiting for a line-full of
    input. Am I right? I'll assume so.

    Do you know, the C language specification doesn't give you a way that
    you can guarantee to do this. Input will frequently be buffered, in
    some way. You might spend some time with the FAQ at c-faq.com,
    especially http://c-faq.com/stdio/index.html questions 12.1 and 12.5,
    to understand about this and other issues with your code.

    > So, it should open for a new input.
    >
    > That string "That's it for today" should be displayed only when a user
    > type a newline.
     
    , Jun 1, 2007
    #11
  12. Guest

    Thanks, guys. Sorry for my ill-mannered post.

    I started programming a few days ago. I will read more about what you
    wrote.

    I need to spend more time before understanding your posts.

    Regards,
     
    , Jun 1, 2007
    #12
  13. On Fri, 01 Jun 2007 09:25:00 -0000, wrote:

    >Hi,
    >
    >I'm a newbie programmer. I can't get work the following code.
    >

    snip code

    It helps a whole bunch if you tell us what is happening that is
    different than what you expect.


    Remove del for email
     
    Barry Schwarz, Jun 2, 2007
    #13
    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. Martin Dickopp

    Re: EOF and getchar/fgetc

    Martin Dickopp, Feb 14, 2004, in forum: C Programming
    Replies:
    0
    Views:
    2,203
    Martin Dickopp
    Feb 14, 2004
  2. Replies:
    26
    Views:
    1,971
    Richard Heathfield
    Mar 4, 2007
  3. Daz

    GetChar loop

    Daz, Jun 26, 2006, in forum: C++
    Replies:
    4
    Views:
    514
    Stuart Moore
    Jun 26, 2006
  4. Replies:
    42
    Views:
    3,055
    Richard Bos
    Aug 31, 2009
  5. Isaac Won
    Replies:
    9
    Views:
    453
    Ulrich Eckhardt
    Mar 4, 2013
Loading...

Share This Page