Почему моя программа паролей находит символы, которые не существуют в пользовательском вводе?
Привет кодерам и Кодессам!
Итак, у меня наконец-то есть рабочая программа после многих корректировок...Но когда я запускаю его, он каким-то образом умудряется подбирать символы, которых даже нет в пользовательском вводе!
Это мой код.:
#include <stdio.h> #include <ctype.h> int main() { int i; char password[50]; int upper = 0; int number = 0; int dollarSign = 0; //ask the user to input a password containing an uppercase letter and number and $ sign printf("Please enter a password containing an Uppercase letter, a number and a $ sign: "); scanf(" %s", password); //now we check if the password given contains an uppercase letter, a number and a $ sign for( i = 0; i < 50; i++) { if ( isalpha(password[i])) { if( isupper(password[i])) { upper += 1; printf("Your password contains an Uppercase letter: %c\n", password[i]); break; } } } for( i = 0; i < 50; i++) { if ( isdigit(password[i])) { number += 1; printf("Your password contains a number: %c\n", password[i]); break; } } for( i = 0; i < 50; i++) { if (password[i] == '$') { dollarSign += 1; printf("Your password contains a dollar sign: %c\n\n", password[i]); break; } } //now we give the user final feedback on whether their password is acceptable or not if ( (upper == 1) && (number == 1) && (dollarSign == 1) ) { printf("You have a strong password!\n"); } else { printf("Your password sucks!\n"); } return 0; }
(Старая часть вопроса...пожалуйста, не обращайте внимания
Я новичок и у меня есть следующая проблема вызов:
Создайте программу, в которой пользователь вводит пароль, и программа сканирует его, проверяя наличие прописной буквы, цифры и знака"$".
Поскольку я настолько Новичок, что действительно понятия не имею, как решить эту проблему, и любая помощь будет очень признательна :)
Это мой код.:
#include <stdio.h> #include <stdlib.h> #include <ctype.h> int main() { char password[50]; int i; int goodPassword = 0; printf("Enter a password containing an Uppercase letter, a number and a $ sign\n"); scanf(" %s", password); for(i=0; i<=50; i++){ if(isupper(password[i])) && (isdigit(password[i])) && (password[i] == '$'){ goodPassword = 1; printf("Good to go!"); break; }else{ printf("It sucks!"); } } return 0; } ) What I have tried: So the first user password input I ran was: eHello$1 This worked perfectly! Then I ran tested a user input of: iamsam Please enter a password containing an Uppercase letter, a number and a $ sign: iamsam Your password contains an Uppercase letter: L Your password sucks! Where does it get the 'L' from? lol and one more attempt with just a single letter: i <pre>Please enter a password containing an Uppercase letter, a number and a $ sign: i Your password contains a number: 0 Your password sucks! It now tells me the password contains a 0. Please PLEASE help! Everyone was so amazing helping me fix my first attempt of this problem.
jeron1
Пробовали ли вы инициализировать значения массива паролей перед использованием?
Richard MacCutchan
Это не обязательно, если вы используете strlen, чтобы узнать, сколько символов было введено на самом деле.
Richard MacCutchan
Вы проверяете все 50 позиций символов вашего массива паролей. Что произойдет, если пользователь введет меньше символов? Вам нужно использовать длину введенных данных (из strlen), чтобы узнать, сколько символов нужно проверить.
BooleanBabe
Спасибо, Ричард! Это очень помогло.