ruchita
ruchita

Reputation: 13

unable to take two input strings in C on Ubuntu

I am unable to take two inputs strings simultaneously in C on Ubuntu. It shows the wrong output. Simple program:

#include <stdio.h>
main()
{
    char s1[20],char s2[20],printf("\nEnter job:");
    scanf("%[^\n]s",s1);
    printf("Enter hobby:");
    scanf("%[^\n]s",s2);
}

Output:

Enter job:student
Enter hobby:
student

It does not allow the input of a second string. How can I overcome this bug?

Upvotes: 1

Views: 1154

Answers (1)

chqrlie
chqrlie

Reputation: 145287

If you want to allow embedded spaces, modify the scanf formats this way:

#include <stdio.h>

int main(void) {
    char job[100], hobby[100];
    printf("Enter job:");
    scanf("%99[^\n]%*c", job);
    printf("Enter hobby:");
    scanf("%99[^\n]%*c", hobby);
    printf("%s,%s", job, hobby);
    return 0;
}

But be aware that empty lines will not be accepted by this scanf format. The linefeed will stay in the input stream, the second scanf will fail too and job and/or hobby will have indeterminate contents, letting printf invoke undefined behavior.

Is is much more reliable to use fgets() and strip the '\n'.

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

int main(void) {
    char job[100], hobby[100];

    printf("Enter job:");
    if (!fgets(job, sizeof job, stdin))
        return 1;
    job[strcspn(job, "\n")] = '\0';

    printf("Enter hobby:");
    if (!fgets(hobby, sizeof hobby, stdin))
        return 1;
    hobby[strcspn(hobby, "\n")] = '\0';

    printf("%s,%s", job, hobby);
    return 0;
}

Upvotes: 1

Related Questions