+ 2

Why this code isn't accepted as a solution for Extra-Terrestrials? It works perfect in Code Playground.

#include <stdio.h> #include <string.h> int main() { char a[]= "garbage"; int i; for(i=strlen(a);i>=0;i--) { printf("%c",a[i]); } return 0; }

30th Dec 2019, 11:29 PM
Karkoran
Karkoran - avatar
6 Respuestas
+ 3
A string is an array of characters. Like with arrays of any other type, the last element is located not at position size but at size - 1 since arrays are zero-indexed. Keep this in mind when initializing the loop variable.
30th Dec 2019, 11:40 PM
Shadow
Shadow - avatar
+ 1
Hi Shadow, I played with the loop a little bit and these are some outputs on Code Playground: ... strlen(a); egabrag \\ output strlen(a)-1; egabrag \\ I'm not sure if I propperly understood your answer, but this one you probably suggested. strlen(a)+1; egabrag strlen(a)-2; gabra strlen(a)+2; egabrag strlen(a)+10; @?egabrag Could someone please explain me why this code(any of the mentioned except strlen(a)-2;)) isn't accepted as a solution for extra-terrestrials with more details?
31st Dec 2019, 12:18 PM
Karkoran
Karkoran - avatar
+ 1
It depends on how they evaluate your solution. I am not an expert when it comes to this stuff, but this is how I would see it. You might have heard that C-strings are null-terminated: https://en.m.wikipedia.org/wiki/Null-terminated_string That means that for a string s, the condition s[ strlen( s ) ] == '\0' holds true. However, the null-termination character has no visual represantation, so upon printing it, you won't actually notice it, although it is still send to the output buffer. So my guess is that SoloLearn gets what you wrote to the output buffer, and compares that to their solution. When initializing the running variable to strlen( s ) you print the null-termination character too, so it is also 'part of your solution', although not visually. Due to that extra character, the comparison fails and your solution is evaluated to be wrong. Here is an example of this process: https://code.sololearn.com/cnrekTMmuKLO/?ref=app Try playing around with the 'i' in the first loop and see what happens.
31st Dec 2019, 4:54 PM
Shadow
Shadow - avatar
+ 1
Danke Shadow, your Buffer Example really helped me. Although neither my last solution was accepted. Could you please look at it? Again it works in Code Playground...
1st Jan 2020, 4:30 PM
Karkoran
Karkoran - avatar
+ 1
You are the best! Thanx again..
1st Jan 2020, 4:46 PM
Karkoran
Karkoran - avatar
0
It is not accepted because you still start printing at the null-termination character, not the actual last character in the string, which is what I've been trying to explain earlier. You should start printing at position strlen( s ) - 1 in the string.
1st Jan 2020, 4:36 PM
Shadow
Shadow - avatar