Home     |     .Net Programming    |     cSharp Home    |     Sql Server Home    |     Javascript / Client Side Development     |     Ajax Programming

Ruby on Rails Development     |     Perl Programming     |     C Programming Language     |     C++ Programming     |     IT Jobs

Python Programming Language     |     Laptop Suggestions?    |     TCL Scripting     |     Fortran Programming     |     Scheme Programming Language


 
 
Cervo Technologies
The Right Source to Outsource

MS Dynamics CRM 3.0

C Programming Language

Loop and getchar problems


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;

On 6 1 , 5 25 , Samuel.Codd@gmail.com wrote:

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??????
On 1 Jun, 10:25, Samuel.Codd@gmail.com 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...

 Samuel.Codd@gmail.com 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

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.

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.

On 1 Jun, 10:53, mark_blue@pobox.com wrote:

[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.

 mark_blue@pobox.com said:

> On 1 Jun, 10:25, Samuel.Codd@gmail.com 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.

 Samuel.Codd@gmail.com 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.
On 1 Jun, 11:27, Richard Heathfield <r@see.sig.invalid> wrote:

>  mark_blue@pobox.com said:

> > On 1 Jun, 10:25, Samuel.Codd@gmail.com 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...

On 1 Jun, 11:00, Samuel.Codd@gmail.com 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.

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,

Here's a slightly different program, which should work.  Note the
proper indentation etc.

#include <stdio.h>

int main (void) {
   int a;

   while ((EOF != (a = getchar()) && (a != '\n'))
      printf("%c",a);
   printf("\nThat's it for today.\n");
   return 0

} /* untested */

--
 <http://www.cs.auckland.ac.nz/~pgut001/pubs/vista_cost.txt>
 <http://www.securityfocus.com/columnists/423>
 <http://www.aaxnet.com/editor/edit043.html>
 <http://kadaitcha.cx/vista/dogsbreakfast/index.html>
                        cbfalconer at maineline dot net

--
Posted via a free Usenet account from http://www.teranews.com

mark_blue@pobox.com wrote:

... 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.

None of that is a nit.

--
 <http://www.cs.auckland.ac.nz/~pgut001/pubs/vista_cost.txt>
 <http://www.securityfocus.com/columnists/423>
 <http://www.aaxnet.com/editor/edit043.html>
 <http://kadaitcha.cx/vista/dogsbreakfast/index.html>
                        cbfalconer at maineline dot net

--
Posted via a free Usenet account from http://www.teranews.com

On Fri, 01 Jun 2007 09:25:00 -0000, Samuel.Codd@gmail.com 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

Add to del.icio.us | Digg this | Stumble it | Powered by Megasolutions Inc