1. ホーム
  2. c++

[解決済み】エラー。ISO C++はポインタと整数の比較を禁止している [-fpermissive]| [closed].

2022-02-08 04:17:42

質問

入力文字列の数字、特殊文字、文字列の長さ、小文字と大文字がチェックされます。 文字列要素が特殊文字と比較されるforループの特定のブロックでは、このエラーが発生します。比較のために、これらの特殊文字をchar変数に初期化してみましたが、エラーは継続します。

char k='@';
char n='#';
char m='$';
for(i=0; i<l; i++)
        {
            if(password[i]==k || password[i]==n || password==m)     
            {
                counts++;
            }
        }

このように比較してみましたが、同じエラーです。

 if(password[i]=='@' || password[i]=='#' || password=='$')     
            {
                counts++;
            }

これはコードです。

    #include <iostream>
    #include<string.h>

    using namespace std;

    int main()
    {
     char password[20];
     char k='@';
     char n='#';
     char m='$';
     int i,j,l,countd=0,counts=0,countl=0,countu=0;
     cout<<"enter a password with following conditions :\n1. There should be atleast one digit. \n2. 
 there should be atleast one of #, @, $";
    cout<<"3. password should be between 6 to 20 characters \n4.there should be more uppercase 
letters than lower case\n";
cout<<"5. Should start with uppercase and end with lowercase";

do
{
    countd=0,counts=0,countl=0,countu=0;
    cout<<endl<<"ENTER PASSWORD :";
    cin.getline(password,20);
    l=strlen(password);
    if(l>20 || l<6)
    {
        cout<<"password length should be between 6 to 20 characters \n";
    }
    if(islower(password[0]))
    {
        cout<<" first letter should be uppercase \n";
    }
    if(isupper(password[l-1]))
    {
        cout<<" last letter should be lowercase \n";
    }


    for(i=0; i<l; i++)
    {
        for(j='0'; j<='9'; j++)
        {
            if(password[i]==j)
            {
                countd++;

            }

        }
    }
    if(countd<1)
    {
        cout<<" password should contain atleast one digit \n";
    }

    for(i=0; i<l; i++)
    {
        if(password[i]==k || password[i]==n || password==m)     //char k='@'; char n='#'; char m='$'; |56|error: ISO C++ forbids comparison between pointer and integer [-fpermissive]|
        {
            counts++;
        }
    }


    if(counts<1)
    {
        cout<<"password should contain atleast one of the three special character \n";
    }


    for(i=0; i<l; i++)
    {
        for(j='A'; j<='Z'; j++)
        {
            if(password[i]==j)
            {
                countu++;
            }
        }
    }
    for(i=0; i<l; i++)
    {
        for(j='a'; j<='z'; j++)
        {
            if(password[i]==j)
            {
                countl++;
            }
        }
    }
    if(countu<countl)
    {
        cout<<"number of uppercase letters should be more than lowercase \n";
    }

}

while((countu<countl) || (counts<1) (isupper(password[l-1])) || (islower(password[0])) || l>20 || l<6 || (countd<1));

cout<<endl<<"password accepted/validated "<<endl;


return 0;
}

再現性のある最小限の例です。 ただ、入力文字列を特殊文字と比較する方法が欲しいだけです。

char password[20];
char k='@';
char n='#';
char m='$';
for(i=0; i<l; i++)
        {
            if(password[i]==k || password[i]==n || password==m)   
            {
                counts++;
            }
        }

どうすればこの比較を実現できるのでしょうか? ガイドをお願いします。

どのように解決するのですか?

この行

if(password[i]==k || password[i]==n || password==m) 

は、次のように読みます。

if(password[i]==k || password[i]==n || password[i]==m) 

最後の項の括弧がないことに注意してください。