为什么这个代码中的cin>>a;换成get(a)之后只能输入n-1次字符,而cin>>a可以输入(转化)n次呢?
#include<iostream>#include<cstring>#include<cstdio>usingnamespacestd;intmain(){intn;c...
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int main()
{ int n;
char a[25];
int len;
int j,i;
cin>>n;
for(i=0;i<n;i++)
{ cin>>a; //为什么不能是gets(a)???
if(a[0]>='a'&&a[0]<='z')
a[0]=a[0]-32;
len=strlen(a);
for(j=1;j<len;j++)
if(a[j]>='A'&&a[j]<='Z')
a[j]+=32;
puts(a);}
return 0;
} 展开
#include<cstring>
#include<cstdio>
using namespace std;
int main()
{ int n;
char a[25];
int len;
int j,i;
cin>>n;
for(i=0;i<n;i++)
{ cin>>a; //为什么不能是gets(a)???
if(a[0]>='a'&&a[0]<='z')
a[0]=a[0]-32;
len=strlen(a);
for(j=1;j<len;j++)
if(a[j]>='A'&&a[j]<='Z')
a[j]+=32;
puts(a);}
return 0;
} 展开
3个回答
展开全部
早些时候C++的cin >> a;与C的gets(a);(a是字符数组名)是一样的,后来cin>>作了些改进,在开头就遇到'\n'时会自动放弃,只有'\n'跟在有效字符后时才认为前面的输入结束。而C的gets没有被改进,即使在开头遇到'\n'也认为输入结束了。此题中前面的cin >> n;输入时最后打入的'\n'被gets接收,认为已经输入了一个字符串,所以只会看到n-1个字符串显示(实际在开头会显示一个空行,那算一个字符串的话总数还是n并未少);而cin >>却把那个前面cin >>n;遗留下来的'\n'放弃了,所以还能再输入n个字符串。在cin>>n;后加一条getchar();、fflush(stdin);或cin.get();把cin>>n;遗留在输入缓冲区里的'\n'吸收掉,用cin>>a;或gets(a);效果就都一样了……
展开全部
cin>>a就是将用户输入的信息保存到变量a中,等价于C语言里的 scanf("%d",&a)。 cin是C++编程语言互换流中的标准输入流,需要iostream.h支持
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
cin和gets本来就不是同一个门派的,它们对于缓冲区中回车符的处理是不同的,最好不要混用,也没必要混用。
如果for里面用gets(或gets_s),外面的cin下一行可以用getchar(),把多余的回车符给抓出来,这样就不会有捣蛋的了
如果for里面用gets(或gets_s),外面的cin下一行可以用getchar(),把多余的回车符给抓出来,这样就不会有捣蛋的了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询