Challenge 1# Completed

+3 Aleksander Olewinski · January 11, 2015
Hello. Here is my first challenge :)


#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <math.h>

int main()
{
    char password[21];
    char rpassword[21];
    char decision;
    int i=0;
    int big=0;
    int number=0;
    int howLong=0;

    printf("Welcome. Before you type your password please read this carefully!\nPassword should have minimum length of 6 and maximum length of 20 characters.\nPassword should include one or more: capital letter and number.");
    COMEBACK:printf("\nPlease enter your password: ");
    scanf(" %s", password);
    printf("\nPlease repeat your password: ");
    scanf(" %s", rpassword);
    if(strcmp(password, rpassword) !=0){
        printf("\nPassword does not match repeated password. Please try again.");
        printf("\nPlease enter your password: ");
        scanf(" %s", password);
        printf("\nPlease repeat your password: ");
        scanf(" %s", rpassword);
    }

    while(password!='\0'){
        if(isupper(password)){
            big+=1;
            howLong+=1;
            i++;
        }
        else if(isdigit(password)){
            number+=1;
            howLong+=1;
            i++;
        }
        else{
            i++;
            howLong+=1;
        }
    }

    printf("%d %d %d",big, number, howLong); //just checking if it is working :)

    if((big>0) && (number>0) && (howLong>=6)){
        printf("\nYour password match the criteria!");
    }
    else{
        printf("\nYour password does not match the criteria! Try again!");
        printf("\nDo you want try enter your password again? (y/n): " );
        scanf(" %c", &decision);
        switch(decision){

        case 'y' : howLong=0;
        int i=0;
        int big=0;
        int number=0;
        goto COMEBACK;

        case 'n' : printf("\nSee you soon");
        break;

        default : printf("\nI do not know what does this mean. Bye!");
        break;}

    }
    
    getchar();
    return 0;
}

Post a Reply

Replies

- page 1
Oldest  Newest  Rating
+2 Bucky Roberts · January 11, 2015
+2 c student · January 17, 2015
challenge accepted
messing up your buffers:
http://i.imgur.com/3ymsElt.png

finishing you off with a classic segmentation fault:
http://i.imgur.com/khJdfmR.png

flawless victory... fatality.   8-)
0 Aleksander Olewinski · January 11, 2015
Thanks Bucky :). You are very good teacher!
0 c student · January 12, 2015
http://i.imgur.com/eGbg7eC.png
it doesn't matter if you're telling someone you can only have a max number of input, if it can break, it will break.
0 Lazar Bulic · January 24, 2015
Boom my first code here. Here is the improved version of your code :) 

thing i changed: 

I don't like scanf when using strings and characters. I always use getchar() and gets()
Also i changed your variable declaration its more neater now.
I removed the variable that counts the length of string as you have a function strlen()
Also removed libraries that aren't used.
Also i added goto COMEBACK if user passwords don't math, this way he can make more mistakes and correct them. Your code just game an option to make mistake once.


I would remove variable index and do the check with a pointer on string (would declare your strings like pointers char *passowrd[21]) but dnk if your are familiar with pointers so i didn't use that.


#include <stdio.h>
#include <string.h>

main()
{
    char password[21], rpassword[21], decision;
    int index, number=0, big=0;

    printf("Welcome. Before you type your password please read this carefully!\nPassword should have minimum length of 6 and maximum length of 20 characters.\nPassword should include one or more: capital letter and number.");
    COMEBACK: printf("\nPlease enter your password: ");
    gets(password);
    printf("\nPlease repeat your password: ");
    gets(rpassword);
    if(strcmp(password, rpassword) != 0){
        printf("Yuor password doesn't match! Try again!\n");
        goto COMEBACK;
    }

    for(index=0; index<=strlen(password); index++){
        if(isupper(password[index]))
            big++;
        else{
            if(isdigit(password[index]))
                number++;
        }
    }

    printf("%d %d %d",big, number, strlen(password));

    if((big > 0) && (number > 0) && (strlen(password) >= 6)){
        printf("\nYour password match the criteria!");
    }
    else{
        printf("\nYour password does not match the criteria! Try again!");
        printf("\nDo you want try enter your password again? (y/n): " );
        decision = getchar();
        switch(decision){

        case 'y' :
        index=0;
        big=0;
        number=0;
        fflush(stdin);
        goto COMEBACK;

        case 'n' : printf("\nSee you soon");
        break;

        default : printf("\nI do not know what does this mean. Bye!");
        break;}

    }

    getchar();
    return 0;
}
0 c student · January 24, 2015
here is your gets() function:
warning: the `gets' function is dangerous and should not be used.
it is still susceptible to overflowing

also, you attempt to return a value where main has no declared return type.
0 Aleksander Olewinski · January 17, 2015
Wow... That is a punch. I am begging for mercy ;). I see there is many things to learn to make the program completely unbreakable. Thank you for your advice about posting my code :D. You win.  
0 Aleksander Olewinski · January 21, 2015
?????????
Mathias, with all respect. In my code 'while' loop is checking every single character until it reach end of string. God help me but I do not understand what is your point. If anything is wrong in your opinion explain it like c student did!
Maybe you just mistook it with put and gets method? Just can You explain it clearly?
0 c student · January 21, 2015
there's a bug where you cant see the array element i because it's read as an italics tag.  look at your own comment.
0 Aleksander Olewinski · January 13, 2015
Hi c student. Your are right. It is not completely dumbuserproof. I am thinking about solutions for this issue. Maybe you have some ideas?
 
  • 1
  • 2

C

129,914 followers
About

One of the most popular languages of all time.

Links
Moderators
Bucky Roberts Administrator