missing first character when printing string

Advertisements
# 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 if these calls of scanf

scanf("%d", &j);

and

scanf("%d",&size);

at least that the entered values are greater than 0.

Leave a ReplyCancel reply