使用gets()和fgets()前注意吸收回车

    xiaoxiao2025-01-05  64

    当使用gets()和fgets()给字符数组赋值时,如果前面使用过scanf,那么scanf遗留下来的回车将会被他们取出来并赋值给该字符串,并且只能获取这个回车符,从而导致字符数组赋值失败,

    #include<stdio.h> int main(void) { int i; char str[10]; scanf("%d", &i); gets(str); printf("%s\n", str); return 0; }

    我们看到,输入“10”回车之后就直接退出了,根本没有机会输入字符串。下面再来看一下fgets();

    #include<stdio.h> int main(void) { int i; char str[10]; scanf("%d", &i); fgets(str, 9, stdin); printf("%s", str); return 0; }

    同样输入 10后就直接退出了,所以当使用gets()和fgets()给字符数组赋值时,如果前面使用过scanf,那么必须使用getchar()将回车吸收,

    #include<stdio.h> int main(void) { int i; char str[10]; scanf("%d", &i); gets(str); printf("str = %s\n", str); return 0; }
    最新回复(0)