PAT B 1031身分証明書検査学会断点デバッグ!文字列は2つの結果を入力します.循環自増はどこで申明するかはっきり見える


//                !!!   !
//        ,    gets scanf("%s",str)   , gets()          !           !  
//  ,    gets getchar() oj       !              
//    ,       !  ! 
#include<stdio.h>
#include<string.h>
//#define LOCAL
int rate[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
char change[11]={'1','0','X','9','8','7','6','5','4','3','2'};
int main(){
    #ifdef LOCAL
    freopen("B1031data.in","r",stdin);
    freopen("B1031data.out","w",stdout);
    #endif
    //           ,         
    //         ,       ‘0’~‘9’   
    // 0     str 
    int n=0,count=0,last=0,i;//n<=100
    int number;
    bool flag=true;
    char str[20];//           
    scanf("%d",&n);
    number=n;
    //getchar();//      ,          
    
    while(n--){
        last=0;
        //gets(str);
        scanf("%s",str);
        flag=true;
        for(i=0;i<17;i++){//               。              ,                 
            if(!(str[i]>='0'&&str[i]<='9')) break;
            last+=(str[i]-'0')*rate[i];//          100,        
        }
         if(i<17){//  =17    
            flag=false;
            puts(str);
         }
         else{
             //       ,        
             if(str[17]!=change[last%11])
                 {
                     flag=false;
                     puts(str);
                 }
         }
         if(flag==true){
             count++;
         }
         /*else{
             puts(str);//       
         }*/
    }
    if(count==number){
        printf("All passed
"); } return 0; }