题目:有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。
我的代码:在要求输入格式同上的情况下,请问为什么在输入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;
}
不知道你这个问题是否已经解决, 如果还没有解决的话: