|
|
 |
 |
 |
 |
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:
> 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??????
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...
> /* > 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; > }
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:
> 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.
[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.
> 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.
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,
Samuel.Codd @gmail.com wrote: > 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; > }
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 |
 |
 |
 |
 |
|