【问题标题】:c++ program method errors visual studioc++程序方法错误visual studio
【发布时间】:2012-11-20 14:35:11
【问题描述】:

好的,所以我正在制作一个 C++ 程序,它有两种单独的方法来生成随机密码,另一种方法是让用户生成并验证它。但是我在方法和返回密码时遇到错误。我是 C++ 新手,所以我很感激如果有人可以给我一些指示我犯错误的地方。我在声明方法时遇到了麻烦,因为我不确定它们是否带参数以及它们是否应该是 int 或其他。我收到以下错误:

错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int

错误 C4244:'argument':从 'time_t' 转换为 'unsigned int',可能丢失数据

错误 C2082:重新定义形参 'str'

错误 C2660:'countLetters':函数不接受 6 个参数

错误 C2110: '+' : 不能添加两个指针

错误 C2660:'countLetters':函数不接受 6 个参数

错误 C2110: '+' : 不能添加两个指针

警告 C4018:“

谢谢,

#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <string>
#include <windows.h>
#include <ctime>
#include <string.h>

using namespace std;
#define MAX 80

//declaring functions
int showMenu();
int generatePass();
int validatePass();
int countLetters(char *, int *, int *, int *, int *);

main()
{
    int iChoice;
    // have menu appear, user makes decision, do work, reshow menu
    // do this until user enters 5

    do
    {
        iChoice = showMenu();
    }while(iChoice != 3);

    printf("\n\n\n");
    system("pause");
}        //end of main

//Methods placed here:

//showMenu method calls program menu,either 1.generate password,2.enter password and validate. or 3.exit(close program)
int showMenu() {
    int iChoice;
    system("cls");
    printf("\n\n\t\tWelcome to Password Generator and Validator\n\n");
    printf("\n\t\t1. Generate");
    printf("\n\t\t2. Validate");
    printf("\n\t\t3. Exit");
    printf("\n\n\t\tEnter your menu choice: ");
    fflush(stdin);
    scanf("%d", &iChoice);

    // user enters one of 3 values
    // generate,validate or exit program

    switch (iChoice) {
    case 1:     // generate
    {
        generatePass();
        break;
    }
    case 2:     // validate
    {
        validatePass();
        break;
    }
    case 3:     // exit
    {
        printf("\n\nProgram exiting!...");
        break;
    }
    default: {
        break;
    }
    }     //end of switch

    return (iChoice);
} //end of showMenu

//method to generate a random password for user following password guidelines.  
string generatePass(string str) {
    char password[MAX + 1];
    int iChar, iUpper, iLower, iSymbol, iNumber, iTotal;
    
    printf("\n\n\t\tGenerate Password selected ");
    printf("\n\n\t\tPassword creation in progress... ");
    
    srand(time(0));
    string str =
            "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!£$%^&*()_+=#@;";
    int pos;

    iChar = countLetters(password, &iUpper, &iLower, &iSymbol, &iNumber,
            &iTotal);

    if (iUpper < 2) {
        printf("Not enough uppercase letters!!!\n");
    } else if (iLower < 2) {
        printf("Not enough lowercase letters!!!\n");
    } else if (iSymbol < 1) {
        printf("Not enough symbols!!!\n");
    } else if (iNumber < 2) {
        printf("Not enough numbers!!!\n");
    } else if (iTotal < 9 && iTotal > 15) {
        printf("Not enough characters!!!\n");
    }
    
    printf("\n\n\n Your new password is verified " + password);
    printf("\n\n\n");
    system("pause");
} //end of generatePass method.

//method to validate a user generated password following password guidelines.
int validatePass() {
    char password[MAX + 1];
    int iChar, iUpper, iLower, iSymbol, iNumber, iTotal;

    //shows user password guidelines
    printf("\n\n\t\tPassword rules: ");
    printf(
            "\n\n\t\t 1. Passwords must be at least 9 characters long and less than 15 characters. ");
    printf("\n\n\t\t 2. Passwords must have at least 2 numbers in them.");
    printf(
            "\n\n\t\t 3. Passwords must have at least 2 uppercase letters and 2 lowercase letters in them.");
    printf(
            "\n\n\t\t 4. Passwords must have at least 1 symbol in them (eg ?, $, £, %).");
    printf(
            "\n\n\t\t 5. Passwords may not have small, common words in them eg hat, pow or ate.");
    //gets user password input
    printf("\n\n\t\tEnter your password following password rules: ");
    gets(password);

    iChar = countLetters(password, &iUpper, &iLower, &iSymbol, &iNumber,
            &iTotal);

    if (iUpper < 2) {
        printf("Not enough uppercase letters!!!\n");
    } else if (iLower < 2) {
        printf("Not enough lowercase letters!!!\n");
    } else if (iSymbol < 1) {
        printf("Not enough symbols!!!\n");
    } else if (iNumber < 2) {
        printf("Not enough numbers!!!\n");
    } else if (iTotal < 9 && iTotal > 15) {
        printf("Not enough characters!!!\n");
    }
    
    printf("\n\n\n Your new password is verified " + password);
    printf("\n\n\n");
    system("pause");

} //end validatePass method

int countLetters(char * Password, int * Upper, int * Lower, int * Symbol,
        int * Number) {
    int iTotal = 0, iC, tU = 0, tL = 0, tS = 0, tN = 0;

    //strlen- function that returns length
    for (iC = 0; iC < strlen(Password); iC++) {
        printf("%d", Password[iC]);
        //uppercase letters are in the range 65 - 90
        //lowercase letters are in the range 97 - 122
        //check upper case
        if ((Password[iC] < 64) && (Password[iC] < 91)) {
            tU++;
            iTotal++;
        } else if ((Password[iC] > 96) && (Password[iC] < 123)) {
            tL++;
            iTotal++;
        } else if ((Password[iC] > 32) && (Password[iC] < 48)) {
            tS++;
            iTotal++;
        } else if ((Password[iC] > 47) && (Password[iC] < 58)) {
            tN++;
            iTotal++;
        }

        *Upper = tU;/*set value at memory address = tU,passing by reference saves memory used.*/
        *Lower = tL;
        *Symbol = tS;
        *Number = tN;
    }            //end for statement

    return (iTotal);
}            //end of countLetters

【问题讨论】:

  • 标题中的vb是关于什么的?
  • 1) 您在 C++ 程序中使用了大量的 C。 2) 错误带有行号;如果您发布它们会非常有帮助。
  • 您采取了哪些措施来解决这些问题?你自己认为'countLetters' : function does not take 6 arguments 是什么意思?
  • 其中一半通常是警告。
  • 哦,我发现了其中一个问题。 generatePass()string str 作为参数,然后在函数内部定义另一个string str。这两个strs 相互冲突,并且它们都没有被使用过。你应该把它们都拿出来。

标签: c++ visual-studio-2010 methods


【解决方案1】:

除了@ahenderson 列出的错误:

printf("\n\n\n Your new password is verified " + password);

您不能将 char[] password 添加到字符串文字中。请改用两个单独的printfs。

printf("\n\n\n Your new password is verified ");
printf(password);

【讨论】:

  • 你也可以使用printf("... %s\n", password);
【解决方案2】:

错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持默认输入

  1. main()

这应该是int main()

错误 C2082:重新定义形参 'str'

  1. generatePass(string str)
  2. 字符串 str="01234..."

将其中一个变量名改为str2

错误 C2660:'countLetters'

  1. int countLetters(char * Password, int * Upper, int * Lower, int * Symbol, int * Number) //取5
  2. iChar = countLetters(密码, &iUpper, &iLower, &iSymbol, &iNumber, &i总); //给出6

计算参数,它们不匹配

【讨论】:

  • 感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-01
  • 2013-08-20
  • 1970-01-01
  • 1970-01-01
  • 2012-02-11
  • 2018-12-04
  • 2014-10-04
相关资源
最近更新 更多