为什么这个代码中的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;
}
展开
 我来答
White_MouseYBZ
2019-12-23 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6482万
展开全部
早些时候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);效果就都一样了……
万物凋零时遇见

2019-12-22 · TA获得超过4437个赞
知道大有可为答主
回答量:8630
采纳率:70%
帮助的人:246万
展开全部
cin>>a就是将用户输入的信息保存到变量a中,等价于C语言里的 scanf("%d",&a)。 cin是C++编程语言互换流中的标准输入流,需要iostream.h支持
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
最大的宝宝
2019-12-22 · TA获得超过828个赞
知道小有建树答主
回答量:1569
采纳率:67%
帮助的人:399万
展开全部
cin和gets本来就不是同一个门派的,它们对于缓冲区中回车符的处理是不同的,最好不要混用,也没必要混用。
如果for里面用gets(或gets_s),外面的cin下一行可以用getchar(),把多余的回车符给抓出来,这样就不会有捣蛋的了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式