C语言简单问题,请专家解答

题目:有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。

img

我的代码:在要求输入格式同上的情况下,请问为什么在输入s1时不能用gets函数呢?

#include <stdio.h>

int main()
{
    char s1[100];
    int n, m;
    scanf_s("%d", &n);
    scanf_s("%s",s1,100);
    scanf_s("%d",&m);
    char s2[100] = {0};
    int i, j = 0;
    for (i = m - 1; i < n; i++)
    {
        s2[j] = s1[i];
        j++;
    }
    printf("%s", s2);
    return 0;

}

我的代码:在要求输入格式同上的情况下,请问为什么在输入s1时不能用gets函数呢?
回复:可以用gets函数,但在gets之前,你必须加一句getchar(),用来接收掉n值输入后的换行符才行,否则gets会接收这个换行符,导致接收的是空串

使用 gets() 时,系统会将最后“敲”的换行符从缓冲区中取出来,然后丢弃,所以缓冲区中不会遗留换行符。
如果使用的不是 gets() 而是 scanf,那么需要再次通过键盘给变量赋值前就必须先使用 getchar() 清空缓冲区。

改动如下,供参考:

#include <stdio.h>
int main()
{
    char s1[100];
    int n, m;
    scanf_s("%d", &n);
    getchar();
    gets(s1);  //scanf_s("%s", s1, 100);
    scanf_s("%d", &m);
    char s2[100] = { 0 };
    int i, j = 0;
    for (i = m - 1; i < n; i++)
    {
        s2[j] = s1[i];
        j++;
    }
    printf("%s", s2);
    return 0;

}

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^