[解決済み】エラー。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)
最後の項の括弧がないことに注意してください。
関連
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み】「Expected '(' for function-style cast or type construction」エラーの意味とは?
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み】C++の余分な資格エラー
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] 0から9までのランダムな整数を生成する
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] 私的相続、公的相続、保護相続の違いについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み】「corrupted size vs. prev_size」glibc エラーを理解する。
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?
-
[解決済み】VC++の致命的なエラーLNK1168:書き込みのためにfilename.exeを開くことができません。
-
[解決済み】デバッグアサーションに失敗しました