while(cin>>n) 或者while(scanf('%d',&n)
for(int i=0;i<n;++i)
{
gets(s)或者 getline(cin,s);
}
对于c语言的输入:
那一行中把scanf("%s",a[i])改成gets(a[i])是完全没有问题的,在输入不带间隔的字符串时是完全等价的。若输入有间隔的字符串,那么gets(a[i])能正确识别,而scanf("%s",a[i])将把间隔后的字符串认为是下一个字符串,而且会丢弃间隔。其他一样。不过要注意一下,因为前面的scanf("%d",&n);会把'\n'留在缓冲区,那么gets第一次只接收了一个'\n',所以会少一行。所以要在gets(a[i])前或在scanf("%d",&n)后加一句fflush(stdin)把缓冲区清空才能正确运行。注意一下,gets不会在缓冲区留下'\n',它接收'\n'并将其转换成'\0',而scanf("%s",X)是不接收'\n'的,把'\n'留在了缓冲区……
对于c++
一定要在getline之前加入cin.ignore( ),清楚留在缓冲区内的endl,才能进行正确的输入。