Compiling Errors That Shouldn't Be

I don't know if I've just been staring at this too long or what, but I cannot for life of me understand the compiling errors I am getting. Care to run it yourself and see if you get the same?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
//Assignment:	4
//Date:		10/8/2012
//Purpose:	To verify a password entered by the user by certain guidelines

#include <iostream>
#include <string>
#include <cstring>
#include <cmath>
#include <iomanip>
#include <cstdlib>
#include <Windows.h>
using namespace std;

void CharCheck(char[], int);
void UpperCheck(char[], int);
void LowerCheck(char[], int);
bool DigitCheck(char[], int);

int main()
{
	//variables
	const int LENGTH = 80;			//max length for password
	char password[LENGTH];			//array of char
	bool correct = false;
    
	//title
	cout << "\t\t\t\tPASSWORD VALIDATOR\n\n\n\n\n";
        
    //get password
    cout << "\tPlease enter a password containing at least six characters \n"
        << "\twith at least one digit 0-9, one uppercase letter, and one \n"
        << "\tlowercase letter. ";
    cin.getline(password, LENGTH);
    
    CharCheck(password, LENGTH);			//Character check function
        
	if (correct)
    {
        //clear screen
        system("cls");
    
        //title
        cout << "\t\t\t\tPASSWORD VALIDATOR\n\n\n\n\n";
    
        //display password verified
        cout << "\t\t****************************************************\n";
        cout << "\t\t\t\t   CONGRATULATIONS!\n";
        cout << "\t\t****************************************************\n";
        cout << "\n\n\n\n\t\t\t   Your Password Has Been Verified!";
    
        cout << endl << endl << endl << endl << endl << endl;
        
	
	system("pause");
	return 0;
};

/********************************************************************************************
|--------------------------------------------------------------------------------------------|
|=========================================FUNCTIONS==========================================|
|--------------------------------------------------------------------------------------------|
 *********************************************************************************************/

//Character check function
void CharCheck(char password[], int size)
{
	bool correct = false;
    
    int length = strlen(password);
	
	//error check
	if (length >= 6)					//if length is >= 6 char return false
		correct = true;
	else					//if length is < 6 char return true
		correct = false;
    
	if (correct)
        UpperCheck(password, size);
    else
    {
        do {
            cout << "\n\n\tOops! Your password must contain at least 6 characters. ";
            cin.getline(password, size);
            length = strlen((password));
        } while (length < 6);
    }

}

//Uppercase check function
void UpperCheck(char password[], int size)
{
    bool correct = false;
    
	int length = strlen(password);
    
	for (int i = 0; i < length; i++)
	{
		if (isupper(password[i]))
        {
			correct = true;
            i = length;
        }
		else
			correct = false;
	}
    
	if (correct)
        LowerCheck(password, size);
    else
    {
        do {
            cout << "\n\n\tOops! Your password must contain at least 1 uppercase letter. ";
            cin.getline(password, size);
            for (int i = 0; i < length; i++)
            {
                if (isupper(password[i]))
                {
                    correct = true;
                    i = length;
                }
                else
                    correct = false;
            }
        } while (!correct);
    }
}

//Lowercase check function
void LowerCheck(char password[], int size)
{
    bool correct = false;
    
	int length = strlen(password);
    
	for (int i = 0; i < length; i++)
	{
		if (islower(password[i]))
        {
			correct = true;
            i = length;
        }
		else
			correct = false;
	}
    
    if (correct)
        DigitCheck(password, size);
    else
    {
        do {
            cout << "\n\n\tOops! Your password must contain at least 1 lowercase letter. ";
            cin.getline(password, size);
            for (int i = 0; i < length; i++)
            {
                if (islower(password[i]))
                {
                    correct = true;
                    i = length;
                }
                else
                    correct = false;
            }
        } while (!correct);
    }
}

//Digit check function
bool DigitCheck(char password[], int size)
{
    bool correct = false;
    
	int length = strlen(password);
    
	for (int i = 0; i < length; i++)
	{=		if (isdigit(password[i]))
        {
			correct = true;
            i = length;
        }
		else
			correct = false;
	}
    
    if (correct)
        return correct;
    else
    {
        do {
            cout << "\n\n\tOops! Your password must contain at least 1 digit. ";
            cin.getline(password, size);
            for (int i = 0; i < length; i++)
            {
                if (isdigit(password[i]))
                {
                    correct = true;
                    i = length;
                }
                else
                    correct = false;
            }
        } while (!correct);
    }
}
Next time, post your error messages. We would rather not compile your code if we don't have to.

test.cpp: In function 'int main()':
test.cpp:66:1: error: a function-definition is not allowed here before '{' token
test.cpp:204:1: error: expected '}' at end of input
The if on line 37 doesn't have a matching closing brace. When you think on line 56 that you're closing main(), you're actually closing this if.

After fixing this, more errors crop up:
test.cpp: In function 'bool DigitCheck(char*, int)':
test.cpp:176:3: error: expected primary-expression before '=' token
test.cpp:176:6: error: expected primary-expression before 'if'
test.cpp:176:6: error: expected ';' before 'if'
test.cpp:181:3: error: 'else' without a previous 'if'
Line 176: This simply makes no sense: {= if (isdigit(password[i]))

There's also a misplaced brace on line 183.
Last edited on
If you are having problems with braces:

1. Set up your IDE to automatically do closing braces, paretheses etc
2. If no IDE, get into the habit of typing the opening & closing braces, then go back & fill in between the braces. Like this:

1
2
3
4
5
for(;;) {
    if() {

    }
}


then:

1
2
3
4
5
for(int i = 0; i < length; i++) {
    if(isdigit(password[i])) {

    }
}


With the code below:


1
2
3
4
5
6
7
8
9
10
for (int i = 0; i < length; i++)
            {
                if (isdigit(password[i]))
                {
                    correct = true;
                    i = length;
                }
                else
                    correct = false;
            }


You seem to have something similar to this, twice in each function. This makes it a candidate for being a function itself. Can you figure out the best way to do this?

With boolean values such as correct, which is false to start with, the else correct = false; isn't necessary.

With this:

1
2
if (correct)
        return correct;


The return could be put somewhere else to avoid the if test again.

Hope all goes well.
This whole thing could be done with 2 simple parts:

1. An IsValid function which combines the tests for Upper & lower case & numbers within one for loop.The function would return an int that signified where the problem is - 0 is OK, 1 Upper, 2 lower, 3 digit.
2. Logic that asks for input again, if the original wasn't valid.

I reckon it could be done with 10-15 lines or less.
TheIdeasMan, I took your advice. I scrapped the entire thing and made one IsValid function. It works great now. Thanks all.
Did you manage to meet the 10-15 line challenge?
Topic archived. No new replies allowed.