Mockingbird
Mockingbird

Reputation: 1031

scanf is not waiting for input

I'm trying to find the bug here, but still don't get it. I've been debugging and googling it and found some close topics, but there are only solutions which I don't need ATM, and I'm curious why this code is not working:

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

#define BUFFER 256

int main()
{   
    int missionCode;
    char *desc = (char*)malloc(sizeof(char)*BUFFER);

    do {
        printf("Please enter the mission code (or -1 for exit): ");
        scanf("%d", &missionCode);
        fflush(NULL);
        if (missionCode==-1)
            return 1;
    } while (missionCode>10);

    do {
        printf("Please enter a string:\n");
        scanf("%[^\n]s", desc); //it doesn't stop here!
        fflush(NULL);
        if (!strcmp("exit",desc))
            return 1;
    } while (strlen(desc)<20);

    printf("your string:\n%s", desc);
    return 0;
}

There's something wrong with the scanf\flushall in the second loop, but I don't find out what. BTW, this is C ofcourse.

Upvotes: 4

Views: 4036

Answers (1)

Daniel Fischer
Daniel Fischer

Reputation: 183878

scanf("%d", &missionCode);

leaves the newline in the buffer, so

scanf("%[^\n]s", desc);

immediately finds one and stops. You can add a space

scanf(" %[^\n]s", desc);

to the format to skip initial whitespace.

Upvotes: 6

Related Questions