c - 无法在 Ubuntu 上用 C 语言接受两个输入字符串

标签 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

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

最佳答案

如果要允许嵌入空格,请按以下方式修改 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;
}

关于c - 无法在 Ubuntu 上用 C 语言接受两个输入字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34195358/

相关文章:

c - 自制内核中的三重故障

c - 我是否通过创建虚拟结构数据类型违反了严格的别名规则?

c - 如何让 printf 分组工作

c - 动态调整字符串数组的大小

c - FILE 结构中未使用的变量

c - POSIX 文件锁是否可重入?

c - 在 C 中使用 mmap 写入内存。

android - 是否可以使用 C Hook android gsm 调制解调器

c++ - 不支持 VARIADIC 的宏自动注入(inject)参数

c - scanf() 在 malloc 结构成员中不起作用