#include
using namespace std;
int main()
{
int n;
cin>>n;
cin.ignore();
while(n--)
{
string m; //string写在while里面
getline(cin,m);
int l=m.length();
if((m[0]>='A'&&m[0]<='Z')||(m[0]>='a'&&m[0]<='z')|| m[0]=='_')
{
int c=1;
for(int h=1;h='A'&&m[h]<='Z')||(m[h]>='a'&&m[h]<='z')||m[h]=='_'||(m[h]>='0'&&m[h]<='9'))
c++;
}
if(c==l)
cout<<"yes"<
没有考虑cin>>读入string类型空格后的会全部省略,用getline(cin,)之后又不能读入。
我们先看下cin>>与getline的工作方式,流提取运算符根据它后面的变量类型读取数据,从非空白符号开始,遇到Enter、Space、Tab键时结束。getline函数从istream中读取一行数据,当遇到“\n”时结束返回。
造成程序错误结果的原因是,用户输入完年龄后按回车结束输入,把“\n”留在了输入流里,而cin不会主动删除输入流内的换行符,这样换行符就被getline读取到,getline遇到换行符返回,因此程序不会等待用户输入。
解决的办法是手动清除换行符,在cin>>后加上 cin.ignore();
因此在使用getline函数之前要注意,输入流中是否有可能会有换行符,如果有则使用cin.ignore清除。
(转自https://www.cnblogs.com/JeasonIsCoding/p/9848286.html)
定义string类时,开始定义在了while的外面,CE了一发,改写在了里面,过了......