argv[1] パラメータに 4 つの文字のうちの 1 つだけを入力できるようにするコードを作成しようとしています。別の文字の場合は、文字 q が表示されます。
そう書いた
#include <iostream>
#include <cstdlib>
char D, A , R, B;
if(argv[1] != D||A||R||B)
{
cout << "Q" << endl;
return(0);
}
誰でも私を助けてくれませんか
これif(argv[1] != D||A||R||B)
は適切な構文ではありません
D
、、、および何も初期A
化されていません! それらは変数と呼ばれるものです。R
B
また、機能もありませんmain()
。ここでかなり抜けていますが、正しいかどうかの確認方法をお答えしますchar
。
あなたはおそらくより良いサービスを受けるでしょうswitch statement
:
switch (*argv[1])
{
case 'D':
case 'A':
case 'R':
case 'B':
cout << "Not Q" << endl;
break;
case 'Q':
cout << "We have a Q" << endl;
break;
default:
cout << "unknown char" << endl;
break;
}
プログラムを適切に構築する方法や一般的な C/C++ の質問など、ここで取り上げることができることは他にもたくさんありますが、これで少なくとも開始することができます。
これはC++では不可能です。必ず
if (argv[1] != D && argv[1] != A && ...)
また、一般的には、実際に存在するパラメーターの数を確認することをお勧めします(ただしargv[0]
、argv[1]
常に存在します)。
また、main()
関数が不足しているため、次のことさえchar *argv[]
定義していません。
int main (int argc, char *argv[]) {
...
}
3 番目のオプションは C++11 です。
#include <set>
#include <iostream>
int main(int argc, char** argv) {
if (argc < 2)
return 1;
// here is the actual check:
if (std::set<char>{'D','A','R','B'}.insert(argv[1][0]).second) {
std::cout << "Q" << std::endl;
} else {
std::cout << "OK" << std::endl;
}
return 0;
}
これは、すべての値を保持する一時的なセットと、必要な値をセットに入れるための初期化リストを使用します。次にinsert
、渡された値 (つまりargv[1][0]
) をセットに入れようとし、要素の挿入 ( へのアクセスsecond
) に成功したかどうかをチェックします。
arvg[1][0]
すべての配列には少なくとも 1 つの要素が position にあるため、チェックする必要がないことに注意してください0
。