I checked this but it didn't help - For loop scans one less time in c So, I'm new to programming and I was trying to solve this question from SPOJ (my doubt is general and hence didn't post it in SPOJ forums). http://www.spoj.com/problems/STRHH I made and ran this code in CodeBlocks using GCC where it runs as intended but runs differently when I ran it through Ideone.
#include<stdio.h>
#include<malloc.h>
#include<string.h>
int main()
{
int n,i,length,j;
char **ptrarray; //creating a pointer array that holds addresses of the strings
fscanf(stdin,"%d",&n);
ptrarray = (int *)malloc(n*sizeof(int)); //dynamically allocating memory for 'n' strings and storing their addresses in 'ptrarray'
for (i=0;i<=n;i++)
ptrarray[i] = (char *)malloc(201); //dynamically allocating memory for the strings
for (i=0;i<=n;i++)
fgets(ptrarray[i],201,stdin); //receiving string
for (i=0;i<=n;i++)
{
length=strlen(ptrarray[i])-1; //string length
for (j=0;j<(length)/2;j+=2) //obtain every other character up to half of the string length
printf("%c",ptrarray[i][j]);
printf("\n");
}
return 0;
}
Input:
4
your
progress
is
noticeable
Expected Output:
y
po
i
ntc
So, I get the expected output when I run it in Codeblocks but when running it on ideone (and submitting it on SPOJ), the printf loop only runs thrice instead of 4 times and the output I get is:
y
po
i
My question is why I'm not getting the fourth "ntc" in ideone and why is it not being accepted?
Edit: Changed "200" to "201" bytes, used fscanf instead of scanf, removed fflush and updated loop condition. So, I get the required answer if I change loop condition from '