C Programming - Strings - Discussion

Discussion Forum : Strings - Find Output of Program (Q.No. 6)
6.
What will be the output of the program If characters 'a', 'b' and 'c' enter are supplied as input?
#include<stdio.h>

int main()
{
    void fun();
    fun();
    printf("\n");
    return 0;
}
void fun()
{
    char c;
    if((c = getchar())!= '\n')
        fun();
    printf("%c", c);
}
abc abc
bca
Infinite loop
cba
Answer: Option
Explanation:

Step 1: void fun(); This is the prototype for the function fun().

Step 2: fun(); The function fun() is called here.

The function fun() gets a character input and the input is terminated by an enter key(New line character). It prints the given character in the reverse order.

The given input characters are "abc"

Output: cba

Discussion:
31 comments Page 1 of 4.

Vasuveer singh said:   1 decade ago
Hello friend,

At the very beginning the input is "a" so condition holds true hence it creates the first recursive call.

Now the input is "b" so condition holds true hence it creates the second recursive call.
Now the input is "c" so condition holds true hence it creates the third recursive call.

Now the input is "enter" so condition holds false hence it do not creates the recursive call but goes to print command, which prints "c".

Now control goes back to 2nd call of fun() in which c = 'b'.
Now control goes back to 1st call of fun() in which c = 'a'.

Manisha said:   9 years ago
In order to understand it clearly, we can break this program as below (considering input as abc)

void fun()
{
char c;
if((c = getchar())!= '\n')
{
char c;
if ((c = getchar())!= '\n')
{
char c;
if ((c = getchar())!= '\n')
{
..
}
else
{
printf("%c", c);
}
}
else
{
printf("%c", c);
}

}
else
{
printf("%c", c);
}

}

Kamal dua said:   1 decade ago
It is based on flow of control.

Firstly in function fun() 'a' is entered then condition is checked. as it is not equal to '\0' so again fun() is called and this time 'b' is entered. similarly 'c' and at last in 4th recursive call of fuction fun()when enter is pressed, condition satisfies. so cursor goes to next line. now contol goes back to 3rd call of fun() in which c='c'.

Similarly control goes back to 2nd and 1st fun() call in which 'b' and 'a' get printed.

Sundar said:   1 decade ago
@All

In Turbo C, I have compiled the program myprogram.c and executed as given below.

C:\Turboc>myprogram.exe
kumar
ramuk

C:\Turboc>myprogram.exe
sundar kumar
ramuk radnus

C:\Turboc> _


Note: Give the input by simply typing any string and press .

The given program prints the given string in reversed order.

I hope this example will help you. Have a nice day!

Shubh said:   1 decade ago
I am still not understanding this program.
When does it asks to enter the character?
There is no printf statemnt asking the user to enter the character.
Someone please clear my this doubt.

@Kamal Dua:
As per your explanation, you said at 4th recursive call, the condition satisfies. How come at 4th? There is no. number 4 in the condition.

Hey can anyone clear it in more detailed way?

Thank You.

Navdeep Jain said:   1 decade ago
Its very simple if you have studied a little bit about STACKS.

Stack work in LIFO (Last In First Out) policy.

So, lets look at Push process -

First input, "a"
Second input, "b"
Last input, "c"

Now, Pop one by one and you get "cba".

Amandeep said:   9 years ago
I'm not getting this. Once we press enter the if statement is not satisfied hence it should execute the printf statement and print the last char entered and that's it. There is no further call to the function. How can it print it in reverse order? please somebody explain me.

Deepak Chauhan said:   10 years ago
@Vasuveer singh what you wrote is theoretically correct but here after asking for a character again it is asking for character.

Hence after 'a' is typed and enter key is pressed it will take enter ='\0' as input for next character and will exit the loop.

Ruku said:   7 years ago
Hello all.

Everyone recalled the program of factorial 5 = 5 * 4 * 3 * 2 * 1.
Here what is recursion is a function called its self.
Similarly in this program fun() function calling itself.
Therefore output is in reverse order.
(1)

Sony Sharma said:   1 decade ago
I am not understanding this prblm.

@Navdeep Jain can you please explain it more? Why we are only giving a, b and c as input. We can give other alphabets also.

And which part of code is working as stack?


Post your comments here:

Your comments will be displayed after verification.