二者都是从终端读入字符串。功能为 1、 gets功能为读入一行,并将换行符转换为字符串结束符。 2、 scanf("%s",s);读入时,遇到空白字符,包括空格,制表符,换行符时均会停止输入。 从功能上可以看出不同之处: 1 终止条件不同。gets只有遇到\n时才会结束输入,而scanf遇到空格或制表符时,也会结束输入。 比如输入"test string\n"。 用gets得到的字符串为"test string", 二用scanf得到的是"test"。 2 终止后,对终止字符处理不同。 比如输入为"test\nabcd"。 执行gets后,\n不会留在缓冲区中,即这时调用getchar得到的字符是'a'。 执行scanf后,\n会留在缓冲区,这时调用getchar得到的字符是'\n'。 # include <iostream> # include <cstdio> # include <cstring> using namespace std; int main(){ char st[1005]; char tp[1003]; int i,j,k,len1,len2; while(scanf("%s",st),st[0]!='#'){ gets(tp); //scanf("%s",tp); cout<<tp<<endl; } return 0; }