HDU2024

#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了一发,改写在了里面,过了......

你可能感兴趣的:(HDU2024)