While reversing the user's inputted string...This code won't work properly.Why?In C programming. Please take time to view code.. | SoloLearn: Learn to code for FREE!

+5

While reversing the user's inputted string...This code won't work properly.Why?In C programming. Please take time to view code..

I divide this code into two sections.... ------------------------------------------------------------------------------------------------------------ First section (OUTPUT-1): In this section,I tend to reverse the users inputted string.... In this process, i initialise the Reversed string character in (char array) i.e char c[100] one by one... And after that process,I output that initialised characters one by one Eg: printf("%c",c[0]); printf("%c",c[1]); printf("%c",c[2]); .... etc It's output also work very well.... --------------------------------------------------------------------- --------------------------------------------------------------------- Second section (OUTPUT - 2); In this section,I tend to output that whole reversed string....Which is stored in a char array(i.e char c[100]) Like this printf("%s",c); But, while doing this process.I found unexpected output in second section (OUTPUT - 2) and also OUTPUT - 1 != OUTPUT - 2 https://code.sololearn.com/cTtpn9bz6HLg/?ref=app

10/29/2020 7:49:51 AM

Yogeshwaran

17 Answers

New Answer

+12

int k = 0; Should be outside of the for(){} loop. Solved see: https://code.sololearn.com/c2WpIRCNkSNL/?ref=app

+10

Yup Arsenic said it all. In the second doubt u are declaring k as static which means it can be initialized only once in the whole program. On each iteration(loop cycle) it's not reinitialising it's value back to 0. That's why the 2nd cases is working.

+5

Yogeshwaran you are initialising *k* back to zero on every iteration of the loop. So everytime it overwriting first value of the reversed string "c". the fix as mentioned by Aakaanksha 💕 is to put it outside the loop.

+5

For the second doubt. Static variables are only initialised once that's why for the next iterations it is not reinitialising its value back to 0

+5

Just keep in mind every time loop runs it will set k = 0 That's why it's being reset. Hope u got it & You are welcome Yogeshwaran

+4

Thank you so much Aakaanksha 💕 and Arsenic for clearing my doubt....😊

+4

Yogeshwaran that's because " int k = 0 " is a part inside the loop. So everytime the it loops, this statment also gets executed hence *k* is again set to 0 in the begining of the loop

+4

Indeed, it can't be accessed outside the loop.

+4

Thanks a lot Aakaanksha 💕 😊

+3

Can you tell me why we should include int k = 0. Outside the for loop?in practical or theoretical way Aakaanksha 💕 also see this code... It work well when int k = 0 inside a for loop.... but one exception is, I placed a static keyword before a int k... please tell, how this change the output entirely static int k vs int k (Inside for loop) https://code.sololearn.com/cVOP71Apmsf9/?ref=app

+3

Thank you so much 🙌 Arsenic...... Now I understood.... And also tell me.Is the variable declared inside the for loop has a local scope?

+3

Thank you very Arsenic for yours quick answer🙌🙏😊 and thank you so much Aakaanksha 💕 for yours answers which clear my doubts😊🙏🙌

+3

Aakaanksha 💕 and Arsenic again i have a doubt in my code......... You said that,int k value inside the for loop is always initialised to Zero.... while running the loop....(due to int k = 0 inside a for loop) Then how does OUTPUT-1(first section) work properly.... (eg) if b == 5(length of string) c[k] = a[b- i] // 4 c[0] = a[3] c[1] = a[2] c[2] = a[1] c[3] = a[0] here,how does the "k" value initialise to 0,1,2,3....? please tell me... https://code.sololearn.com/cTtpn9bz6HLg/?ref=app

+3

Yogeshwaran just have a look at this altered version of your code. (I have just changed the stuf you are printing inside the loop) 👇 https://code.sololearn.com/c1KdjXooRlG6/?ref=app if you still have doubts then feel free to ask.🙂

+2

Aakaanksha 💕 and Arsenic can you please tell me.... Why for loop reinitialise (reset) the int k value[present inside the for loop] Is it nature of for loop? If yes means, please tell me.How it was implemented and what is the use of it? https://code.sololearn.com/cTtpn9bz6HLg/?ref=app

+2

Thank you so much Arsenic for yours clear explanation via code🙌😊

+1

Regarding static vs non-static in C. In your example that uses 'static', the initialization is part of the static definition and in fact it is done at *compile time*. A fixed memory address is allocated for k, and initialized with 0. When your compiled code is loaded it is already 0,and has no runtime initialization. If you have separated it into static k; k = 0; It would also not have worked because k would get written by 0 every loop iteration as in the non-static example. As a rule of thumb, don't put static declarations inside loops.