c用gets()函数输入字符串按回车后,回车符号是否也被输入到字符串当中?如果是,怎么避免回车符被写入

#include<stdio.h>
#include<string.h>
#include<ctype.h>
char* stmcpy(char s1[],char s2[],int n);
int main()
{
char a[50]={0};
char b[50];
char c[50]={0};
char pd='y';
int n;
while((tolower(pd)=='y'))
{
printf("请输入字符串!\n");
gets(b);
printf("请输入复制长度!\n");
scanf("%d",&n);
strcpy(c,stmcpy(a,b,n));
puts(c);
printf("是否继续(y/n)?\n");
pd=getchar();
}
return 0;
}
char* stmcpy(char s1[],char s2[],int n)
{
int m;
for(m=0;m<n;m++)
{
s1[m]=s2[m];
}
return s1;
}

为什么在第二次循环的时候gets()函数被跳过没有执行?

第1个回答  推荐于2016-01-23
不会被输入到字符串中。
附:
【1】函数:gets
【2】头文件:stdio.h
【3】功能:从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在str指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字符串。
【4】注意:本函数可以无限读取,不会判断上限,所以程序员应该确保str的空间足够大,以便在执行读操作时不发生溢出。追问

谢谢,我在循环输入中用到了scanf(),和getchar(),为什么在函数第二次循环的时候gets()函数没有被执行到呢?

追答

手头没编译器,没法帮你调试。
可能是pd=getchar();这步你输入y打了回车之后,在缓冲区中遗留了这个回车,gets()会将这个回车取走,不再等待键盘输入。

本回答被提问者采纳
相似回答