0

main()コマンドライン引数がない場合にのみ、このプログラムに印刷を実行させたいと思います。コマンドライン引数(1つの整数である必要があります)がある場合は、関数を実行する必要がありますbitcount()

どうすればこれを行うことができますか?コマンドライン引数がない場合、これがどのように正しく機能するかわかりません。

ユーザーがコマンドライン引数を入力したかどうかを確認するにはどうすればよいですか?そして、もしそうなら、実行bitCount()してmain()ください。ただし、コマンドライン整数引数を指定しない場合は、mainを実行するだけです。

たとえば、関数./bitCount 50を呼び出す必要がありますが、実行する必要がありますbitCount./bitCountmain

これが私がこれまでに持っているものです:

#include <stdio.h>
#include <stdlib.h>

int bitCount (unsigned int n);
int main ( int argc, char** argv) {

    printf(argv);
    int a=atoi(argv);

    //   int a = atoi(argv[1]);

    printf ("# 1-bits in base 2 representation of %u = %d, should be 0\n",
      0, bitCount (0));
    printf ("# 1-bits in base 2 representation of %u = %d, should be 1\n",
      1, bitCount (1));
    printf ("# 1-bits in base 2 representation of %u = %d, should be 16\n",
      2863311530u, bitCount (2863311530u));
    printf ("# 1-bits in base 2 representation of %u = %d, should be 1\n",
      536870912, bitCount (536870912));
    printf ("# 1-bits in base 2 representation of %u = %d, should be 32\n",
      4294967295u, bitCount (4294967295u));
    return 0;
  }

  int bitCount (unsigned int n) {
      //stuff here
  }
4

2 に答える 2

0

int argcコマンドラインの引数の数が含まれます。実行可能ファイルの名前はargv[0]です。つまり、argc < 2コマンドラインパラメータが指定されていないことを意味します。コマンドラインパラメータがない場合に何を実行したいのか、実行したくないのかはよくわかりませんが、の後ろにあるはずif (argc < 2)です。

サンプルコードでは、これを念頭に置いて、かなり奇妙なことをいくつか行っています。

printf(argv);

argvは、、char **またはその配列でchar *あるため、有用なものは何も生成されません。さらに悪いことに、printfは最初の引数としてフォーマット文字列を想定しているため、上の行はあらゆる種類の奇妙なことを引き起こす可能性があります。

int a=atoi(argv);

こっちも一緒。atoiも文字列を必要としています。上記と同じ問題です。

于 2013-02-08T22:08:38.627 に答える
0

argv は、プログラム名とそれに続くすべての引数を含む文字列の配列です。argc は argv 配列のサイズです。プログラム名の argc は常に少なくとも 1 です。

パラメータ argc があった場合、> 1 になります。

そう、

if (argc > 1)
{
    /* for simplicity ignore if more than one parameter passed, just use first */
    bitCount(atoi(argv[1]));
}
else
{
    /* do stuff in main */
}
于 2013-02-08T22:12:58.343 に答える