在Ubuntu上无法在C中获取两个输入字符串

时间:2015-12-10 06:43:17

标签: c

我无法在Ubuntu上的C中同时获取两个输入字符串。它显示错误的输出。 简单程序:

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

输出:

Enter job:student
Enter hobby:
student

它不允许输入第二个字符串。我怎样才能克服这个错误?

1 个答案:

答案 0 :(得分:1)

如果您想允许嵌入空格,请以这种方式修改scanf格式:

#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;
}

但请注意,此scanf格式不接受空行。换行将保留在输入流中,第二个scanf也将失败,job和/或hobby将具有不确定的内容,让printf调用未定义的行为。

使用fgets()并删除'\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;
}