杭电2024

来源:互联网 发布:关闭长城网络还原大师 编辑:程序博客网 时间:2024/05/16 04:29

这个题的输入问题比较多,防止接受n后面的那个回车,!!的那行可以改成

while(cin>>n){getchar();}

getchar有一个int型的返回值.当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).当用户键入回车之后,getchar才开始从stdin流中每次读入一个字符.


while(scanf("%d ",&n)!=EOF)


while(scanf("%d\n",&n)!=EOF)


scanf(“%*c”),作用是这个字符不读取!


while(cin>>n){cin.ignore();}

ignore()读入的字符的个数默认为1,所以,不用参数调用ignore()就意味着“丢掉下一个字符”


#include<iostream>
#include<string>
using namespace std;
int main()
{
int n,i,l,m,j;
char a[50];
while(scanf("%d%*c",&n)!=EOF)!!

    for(i=1;i<=n;i++)
    {
      m=1;
          gets(a);
      l=strlen(a);
      if((a[0]<'A'||a[0]>'Z')&&a[0]!='_'&&(a[0]<'a'||a[0]>'z'))
           m=0;
      if(l>1) 
      {
                    
           for(j=1;j<l;j++)
           {
            if((a[j]<'A'||a[j]>'Z')&&a[j]!='_'&&(a[j]<'a'||a[j]>'z')&&(a[j]<'0'||a[j]>'9'))
                {
                   m=0;
                   break;
                     }
           }
           
       }
       if(m) cout<<"yes"<<endl;
       else cout<<"no"<<endl;
      }
 }
}