cfor-loopcharc-stringsputs

missing first character when printing string


# include <stdio.h>
# include <stdlib.h>
#include <string.h>
void main (void)

{
int size, i,j;
printf("enter no. of employee\n");
scanf("%d", &j);
printf("size of employee id\n");
scanf("%d",&size);
char *m[j];
for (i=0; i<j;i++) {
m[i] = (char*) malloc(size*sizeof(char));
}

for (i=0; i<j;i++) {
printf("Enter employee id of %d\n ",i+1);
getchar();
gets(m[i]);
}
printf("employee id are\n ");
for (i=0; i<j;i++){
puts(m[i]);
}
}

i made a programme that would dynamically take input from user about no. of employee and their id size then print it however my output lack first character every time when printing and i haven't been able to spot the error


Solution

  • For starters according to the C Standard the function main without parameters shall be declared like

    int main( void )
    

    The function gets is unsafe and is not supported by the C Standard, Instead use standard C function either scanf or fgets.

    As for your problem then the first character is lost due to this call

    getchar();
    

    within the for loop.

    You could write instead.

    while ( getchar() != '\n' );
    for ( i = 0; i < j; i++ ) 
    {
        printf("Enter employee id of %d\n ",i+1);
        fgets( m[i], size, stdon );
        m[i][ strcspn( m[i], "\n" ) ] = '\0';
    }
    

    And you should free all the allocated memory before exiting the program

    for ( i = 0; i < j; i++ )
    {
        free( m[i] );
    }
    

    Also the program will be much more safer if you will check the result of these calls of scanf

    scanf("%d", &j);
    

    and

    scanf("%d",&size);
    

    at least that the entered values are greater than 0.