Sponsored Content
Top Forums Programming What is the difference between printf and putchar() or scanf and getchar() ? Post 302739587 by Don Cragun on Tuesday 4th of December 2012 12:34:54 PM
Old 12-04-2012
Quote:
Originally Posted by kris26
okay thanks, Smilie

---------- Post updated at 09:57 AM ---------- Previous update was at 09:36 AM ----------

btw i still hav a question abt tis program, it is a program to count then number of occurrences of each digit. At the "while" part, why shud we nid to put [c-'0'] and not [c] for the ++ndigit to execute tis program? Smilie
Code:
#include <stdio.h>

int main()
{
	int i, c;
	int ndigit[10];
	for (i = 0; i < 100; ++i)
		ndigit[i] = 0;
	
	while ((c = getchar()) != EOF)
		++ndigit[c-'0'];
		
	printf("digits =");
	for (i = 0; i < 10; ++i)
		printf(" %d", ndigit[i]);
}

In addition to what Corona688 has already said, I need to comment on other aspects of your program. Any results that you get from this code are unreliable and suspect. First let me add line numbers to your C code for reference in the remainder of my comments:
Code:
 1 #include <stdio.h>
 2
 3 int main()
 4 {
 5	int i, c;
 6	int ndigit[10];
 7	for (i = 0; i < 100; ++i)
 8		ndigit[i] = 0;
 9	
10	while ((c = getchar()) != EOF)
11		++ndigit[c-'0'];
12		
13	printf("digits =");
14	for (i = 0; i < 10; ++i)
15		printf(" %d", ndigit[i]);
16 }

If you would move line 6 to come after line 1 but before line 3 (making the array global instead of local) or if you would declare the array to be static, the array would be guaranteed to be initialized to 0 without needing the for loop on lines 7 and 8 to initialize the array.

Clearing the 1st 100 elements of an array of 10 elements (as you do on lines 7 and 8) will overwrite other data in your address space (or attempt to write into unallocated space causing your program to crash). You might be lucky and not overwrite anything useful, but once you try to set ndigits[10] to 0 the results of this program are undefined. On some combinations of hardware architecture and C compiler design it would be common for this construct to overwrite the value of i while processing this loop (thereby turning lines 7 and 8 into an infinite loop).

You are reading data from an unknown source. If there is any character read from standard input by this program that is not a numeric digit, if an end-of-file condition is detected by getchar() while it tries to read 100 bytes from standard input, or if an error is detected while getchar() tries to read 100 bytes from standard input, you will again try to modify an integer value that is outside space allocated to the ndigits[] array. If that happens, the behavior of your program is undefined.

Most applications like this one produce text files that can be processed reliably by all of the UNIX/Linux text processing utilities. Since this program does not terminate its output with a <newline> character, the output is not a text file. If the output is just intended to be viewed by a human at a terminal, that might not be a problem, but the user will be disappointed to see that the shell prompt for the next command to be run starts in the middle of a line (possibly making the count you report for the number of '9' characters found ambiguous depending on the value of you shell's current setting for its command prompt).

I don't want to scare you off from programming, but realize that programming is an art and a science. Attention to tiny details is crucial when writing programs.

Last edited by Don Cragun; 12-04-2012 at 01:37 PM.. Reason: fixed 2 typos
These 2 Users Gave Thanks to Don Cragun For This Post:
 

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

getchar()

hey everyone! got another problem here. how would i use the getchar() in a prompt: Press any key to continue the way i did it was to define a char variable named ch and then wrotechar ch ... ch = getchar(); printf("Press any key to continue"); getchar():if you press enter it exits, but... (2 Replies)
Discussion started by: primal
2 Replies

2. Programming

scanf with strings... please help

hi i am a beginner to C i have encountered a problem with my assignment, and i have researched it on the internet, but unfortunately i didn't find anything related to that. i am writing a simple program that takes user's input by prompt command, and parse the whole line into an array of... (1 Reply)
Discussion started by: inkfish
1 Replies

3. Programming

problem with scanf

hi all! i've written a simple c program: #include<stdio.h> #include<stdlib.h> int main() { int a; char b; char c; ... (4 Replies)
Discussion started by: mridula
4 Replies

4. Programming

diff in putchar(c) and printf("%c",c);

hi all , could any tell me the diffrence between main() { char c='h'; printf("%c",c); } and main() { char c = 'h'; printf("c",putchar(c)); } (2 Replies)
Discussion started by: useless79
2 Replies

5. Shell Programming and Scripting

Bash replacement to getchar

There's a replacement in bash for getchar or get functions of C and C++?Those functions read the next char avaliable in the input stream. I've tried something like: OLD_STTY=`stty -g` stty cbreak -echo look=`dd if=/dev/tty bs=1 count=1 2>/dev/null` stty $OLD_STTY But it is not working... (3 Replies)
Discussion started by: Asafe
3 Replies

6. Programming

Better than scanf

I don't know how to do this: printf("creazione nuovo messaggio\n"); printf("insert dest\n"); scanf("%s",dest); printf("insert object\n"); scanf("%s",ogg); printf("inserire text\n"); scanf("%s",test); ... (7 Replies)
Discussion started by: italian_boy
7 Replies

7. Programming

How to skip getchar in C?

Hi, I would like to read an input from keyboard using getchar. However, if no input (No Carriage return/new line none whatsoever) is given after say, 5 seconds, I would like to skip the getchar and move on. How do I do this in C. I'm using GNU compiler set. Thanks, (5 Replies)
Discussion started by: cprogdude
5 Replies

8. Programming

Help on getchar

I wanted to make a simple program that writes chracters in a file but i didnt want to press enter .So i found the getchar which doesnt need enter.If i pass (int) getchar to putc ,in the file it shows a P character.The (int) getchar says it is equal to1734747216 so i do (int) getchar-1734747216... (4 Replies)
Discussion started by: fireblast
4 Replies

9. Programming

How to kill disowned process which calls getchar() in code

Hi, What happens to process state when getchar() is called? I wrote a C code in which I call getchar() somewhere down the road. I forgot about that, I started the process, put it in bg and disowned it using "disown". Now, how do I see where that process has gone/how do kill it? Thanks, Amrut (1 Reply)
Discussion started by: 17amrut29
1 Replies

10. Shell Programming and Scripting

What's the difference between print and printf in command?

For example, in this command: ls /etc/rc0.d/ -print ls /etc/rc0.d/ -printfThe outputs are quite different, why? (7 Replies)
Discussion started by: Henryyy
7 Replies
All times are GMT -4. The time now is 03:36 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy