Search code examples
cstringscanfgets

Why can't the first string element be accessed if a limit is read using scanf() in c


int main(){
    char str[10][50],temp[50];
    int lim,i,j;
    printf("Enter lim: ");
    scanf("%d",&lim);
    for(i=0;i<lim;++i){
        printf("Enter string[%d]: ",i+1);
        gets(str[i]);
    }

Here the str[0](Enter string[1]: ) can't be read. The reading starts from 'Enter string[2]: '(str[1]).

But if instead of lim, an integer is passed to loop as below, program executes correctly. What may be reason for this scenario ?

int main(){
    char str[10][50],temp[50];
    int lim,i,j;
    for(i=0;i<5;++i){
        printf("Enter string: ");
        gets(str[i]);

    }

Solution

  • Your scanf() for the number has left a newline in the input stream, which will feed the first gets().

    Have a look here for help:
    http://sekrit.de/webdocs/c/beginners-guide-away-from-scanf.html
    How to read / parse input in C? The FAQ

    Also, you do not want to use gets() anymore.
    Why is the gets function so dangerous that it should not be used?