-8

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);
}

誰でも私を助けてくれませんか

4

3 に答える 3

2

これif(argv[1] != D||A||R||B)

は適切な構文ではありません

D、、、および何も初期A化されていません! それらは変数と呼ばれるものです。RB

また、機能もありません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++ の質問など、ここで取り上げることができることは他にもたくさんありますが、これで少なくとも開始することができます。

于 2012-07-25T13:12:47.290 に答える
0

これはC++では不可能です。必ず

if (argv[1] != D && argv[1] != A && ...)

また、一般的には、実際に存在するパラメーターの数を確認することをお勧めします(ただしargv[0]argv[1]常に存在します)。

また、main()関数が不足しているため、次のことさえchar *argv[]定義していません。

int main (int argc, char *argv[]) {
 ...
}
于 2012-07-25T13:11:08.683 に答える
0

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

于 2012-07-25T13:28:59.393 に答える