c - fgets() 和 scanf ("%[^\n]")都被跳过

标签 c

我正在开发我的 c 项目,刚刚开始。我需要从用户输入中获取“名称”。

fgets() 在主函数内部工作正常,但在主函数外部使用时会跳过。我发现了很多相关问题,所以我阅读了所有答案,但无法解决我的问题。

阅读一些答案后,我尝试使用“fflush(stdin)”,scanf(“[%^\n]”) 但没有再爱。

void newacc()
    {       
        struct tenant new;
        printf("Enter Name:");
        fgets(new.name,20,stdin);
        printf("\nEnter Phone number:\n");
        scanf("%d",&new.ph);
        printf("Enter Rental Date (DD-MM-YYYY):\n");
        scanf("%d%d%d",&new.td.dd,&new.td.mm,&new.td.yy);
    }

最佳答案

我不熟悉 scanf,但你是第二个 scanf (“%d%d%d”)似乎容易出错。你怎么知道某些内容被跳过了?

此版本要求 DD、MM 和 YYYY 之间有空格(“%d %d %d”),以便清楚地分隔每个数字。您收集输入的方式还存在其他问题,但我没有看到任何跳过。

#include <stdio.h>

void newacc()
{
    char    name[20];
    int     phone;
    int     day;
    int     month;
    int     year;

    printf("Enter Name: ");
    fgets(name,20,stdin);
    printf("Enter Phone number: ");
    scanf("%d",&phone);
    printf("Enter Rental Date (DD MM YYYY):\n");
    scanf("%d %d %d",&day, &month, &year);
    printf("%s %d %02d-%02d-%04d\n", name, phone, day, month, year);
}

int main(void)
{
    newacc();
    return (0);
}

关于c - fgets() 和 scanf ("%[^\n]")都被跳过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57661591/

相关文章:

c - 搜索/等待 MS-MPI 中的任何传输

c - 在 Mac 和 CentOS 上使用 vmalloc (libvmalloc.a) - 无法包含 vmalloc header

c - 从C语言的文本文件中读取信息

c - 分配int存储?

c - 为什么使用宏 #define FREE_ARG char* 来分配由 malloc 分配的空闲内存(数值配方)

c - 将两条短裤存放在一条短裤中

java - Java 或 C 中字符的位操作?

本地计算机上的 c 代码很好,但算法预热练习 "angry children"中 hackerrank 的运行时错误?

c - 如何使用 for() 表达式枚举循环链表?

c - 检测到堆损坏 C