473,467 Members | 1,974 Online
Bytes | Software Development & Data Engineering Community
Create Post

Home Posts Topics Members FAQ

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;
}

Jun 1 '07 #1
14 3040
Tak
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??????

Jun 1 '07 #2
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;

}

Jun 1 '07 #3
Sa************@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

Jun 1 '07 #4
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 '07 #5
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.
Jun 1 '07 #6
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.

Jun 1 '07 #7
ma**********@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.
Jun 1 '07 #8
Sa************@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.
Jun 1 '07 #9
On 1 Jun, 11:27, Richard Heathfield <r...@see.sig.invalidwrote:
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...

Jun 1 '07 #10
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.

Jun 1 '07 #11
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 '07 #12
Sa************@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

Jun 1 '07 #13
ma**********@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

Jun 1 '07 #14
On Fri, 01 Jun 2007 09:25:00 -0000, Sa************@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
Jun 2 '07 #15

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

32
by: Toby Newman | last post by:
At the page: http://www.strath.ac.uk/IT/Docs/Ccourse/subsection3_8_3.html#SECTION0008300000000000000 or http://tinyurl.com/4ptzs the author warns: "The for loop is frequently used, usually...
13
by: Redduck | last post by:
Hello everyone. I am frustrated, I have written the simple program below for a class and I am having problems with the DO-WHILE loop. On the first run through the loop, everything works well, the...
24
by: Tweaxor | last post by:
This has been puzzling me all this week. This is actually a homework assignment from last semesmter. But the teacher wouldn't tell us why certain things didn't work, but it didn't just work. My...
9
by: JS | last post by:
#include <stdio.h> main(){ int c, i, nwhite, nother; int ndigit; nwhite = nother = 0; for (i = 0; i < 10; ++i)
14
by: morpheus | last post by:
Hi Group, May I ask the following? for (i=0; (c=getchar()) != EOF && c != '\n'; ++i) line=c; What I am finding is that when c == '\n' is true, the loop is terminated but i is still...
5
by: Roy Smith | last post by:
The following code appears to be illegal: while ((int c = getchar()) != EOF) { putchar (c); } I tried it on two different compilers (Sun workshop and gcc), and both give some variation on...
6
by: Alan | last post by:
I am using Standard C compiled with GCC under Linux Fedora Core 4 When I run this program and enter a character at the prompt, I have to press the ENTER key as well. This gives me 2 input...
26
by: tesh.uk | last post by:
Hi Gurus, I have written the following code with the help of Ivor Horton's Beginning C : // Structures, Arrays of Structures. #include "stdafx.h" #include "stdio.h" #define MY_ARRAY 15
22
by: arnuld | last post by:
Mostly when I want to take input from stdin I use getchar() but I get this from man page itself: "If the integer value returned by getchar() is stored into a variable of type char and then...
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
0
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and...
0
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The...
0
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
0
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated ...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.