0

EMSO(生年月日、州、性別、その他のものを示す数字)を読み取るプログラムがあります。生成され、13 桁の数字です。最後の 1 つはコントロール、最初の 2 つは日、次の 2 つは月、次の 3 つは年です。EMSO と現在のコンピュータの日付から計算して、プログラムにあなたの年齢を教えてもらいたいのですが。これまでに書いたものは次のとおりです。

#include <stdio.h>
#include <windows.h>

int main (void) 
{
unsigned long long int  emso;
int kontrola;
int a,b,c,d,e,f,g,h,i,j,k,l;
int x,y;
int kraj;

system("cls");  

printf("Enter your EMSO: ");
while(scanf("%lld",&emso)!=1)fflush(stdin);



    while(emso!=-1){

    kontrola=emso%10;
    emso/=10;
    l=emso%10;
    emso/=10;
    k=emso%10;
    emso/=10;
    j=emso%10;
    emso/=10;
    i=emso%10;
    emso/=10;
    h=emso%10;
    emso/=10;
    g=emso%10;
    emso/=10;
    f=emso%10;
    emso/=10;
    e=emso%10;
    emso/=10;
    d=emso%10;
    emso/=10;
    c=emso%10;
    emso/=10;
    b=emso%10;
    emso/=10;
    a=emso%10;

    x= (7*a+ 6*b+ 5*c+ 4*d+ 3*e+ 2*f+ 7*g+ 6*h+ 5*i+ 4*j+ 3*k+ 2*l);
    x=x%11;

    if (x!=0){
        x=11-x;     
    }


    kraj=h*10+i;

    if (x==kontrola){
        printf("\n\nEMSO is legitimate!\n");
        if(j==0){
            printf("\nPerson is MALE\n");
        }
            else if (j==5){
                printf("\nPerson in FEMALE\n");
            }


        if (e==9){
            y=1;
        }

        else if (e==0){
            y=2;
        }

        printf("\nDate of birth: %d%d.%d    %d.%d%d%d%d.\n",a,b,c,d,y,e,f,g);   

        if (kraj >=00 && kraj <10){
            printf("\nPerson was born abroad!\n");
        }

        if (kraj>=10 && kraj < 20){
            printf("\nPerson was born in BiH.\n");
        }

        if(kraj >=20 && kraj < 30){
            printf("\nPerson was born in Montenegro.\n");
        }

        if (kraj >= 30 && kraj < 40){
            printf("\nPerson was born in Croatia.\n");
            if (kraj == 33){
                printf("\tPerson was born in Zagreb.\n");
            }
        }

        if (kraj >=40 && kraj < 50){
            printf("\nPerson was born in Macedoniji.\n");
        }

        if (kraj >= 50 && kraj < 60){
            printf("\nPerson was born in Slovenia.\n");
        }

        if (kraj >=70 && kraj < 80){
            printf("\nPerson was born in Srbia.\n");
            if (kraj == 71){
                printf("\tPerson was born in Beogerad.\n");
                }
        }

        if (kraj >=80 && kraj < 90){
            printf("\nPerson was born in Vojvodina.\n");
            if(kraj == 80){
                printf("\tPerson was born in Novi Sad.\n");
                }
        }

        if (kraj >=90 && kraj < 100){
            printf("\nPerson was born in Kosovo.\n");
        }
    }

    if (x!=kontrola){
        printf("\nEMSO is NOT legitimate!\n");
    }

    printf("\n");
    system("pause");
    system("cls");  


    printf("Enter your EMSO: ");
    while(scanf("%lld",&emso)!=1)fflush(stdin);
}


return 0;

}

このすべての混乱において、a&bは日を表し、cdは月を表し、 はefg年を表します。

また、フラッシュが正しく機能していません。誕生プリントを破壊します。

理解を深めるために、私の emso は 0701996500037 です。通常の日に出てくる whar は次のとおりです。EMSO は合法です。

人は男性です

生年月日: 07.01.1996.

人はスロベニアで生まれました。

そして、私は幸せです.0701996500037ž と書いても問題ありません。同じ出力です。しかし、z0701996500037 と入力すると、何も入力されていないかのように応答がありません。0701u996500037 と書いた場合、検証は問題ありませんが、その他はすべて間違っています。出身地と出身地が違う

4

2 に答える 2

0

timeエポックからの秒数を返します。引数mktimeのエポックからの秒数を返します。struct tm *したがって:

struct tm date = { /* fill tm_year, tm_mon, etc. */ };
double seconds_since_date = difftime(time(0), mktime(&date));

日付から経過した秒数が表示されます。(これはタイムゾーンを考慮していません。)

于 2012-08-20T21:53:34.903 に答える
-1

以下のリンクを確認してください。これが役立つかもしれません

http://www.cplusplus.com/reference/clibrary/ctime/time/

于 2012-08-20T22:09:25.700 に答える