0

私は現在、ファイルからパラメータ「P」を読み取り、それをRAMにロードしてさらに操作するc++Linuxプログラムを持っています。このファイルには次の行があります。

P = 123

プログラムでファイルではなくシェル入力からPを取得したいのですが。SSHで接続しているときに手動でPを入力できる限り、すべてのオプションを利用できます。私が念頭に置いているのは、入力プロンプトのようなものです:

sudo myprogram start
enter P value : (I would manually enter "123" here)

または多分議論:

sudo myprogram start 123

簡単なことですが、方法がわからないので、助けていただければ幸いです。

4

4 に答える 4

1

これがファイルにある唯一のデータである場合、ファイル操作は不要です。123(またはその他)をC ++プログラムに渡して、文字列を整数に変換するだけです。

2番目の引数として整数を渡すと仮定すると、次のようになります。

int  p = atoi(argv[2]);

より良いオプションは、strtolを使用することです。

char *s, *ptr;

s = argv[1];
int p = strtol(s, &ptr, 10);

C ++コードに変更を加えることができない場合は、次のようにしてください。

echo "P = 123" > file && myprogram start 

ファイルにさらに多くのコンテンツがあり、単純にエコーを実行できない場合は、既存の行を新しい値に置き換えます。

 sed -i "s/P = [0-9]*/P = 123/" file && myprogram start
于 2012-10-29T13:37:40.393 に答える
0

C ++プログラム内で、値を入力するように求められるだけではありませんか?それがあなたが望むものであるならば、この単純なコードは仕事をします:

#include <iostream>
int main(int argc, char **argv) {
  int p = 0;
  std::cout << "Enter P value: ";
  std::cin >> p;
  std::cout << "Entered value: " << p << std::endl;
  return 0;
}
于 2012-10-29T13:49:12.283 に答える
0

これは基本的なC++です。以下のサンプルコードを参照するか、コピー元のサイトにアクセスしてください。

#include <iostream>

// When passing char arrays as parameters they must be pointers
int main(int argc, char* argv[]) {
    if (argc < 5) { // Check the value of argc. If not enough parameters have been passed, inform user and exit.
        std::cout << "Usage is -in <infile> -out <outdir>\n"; // Inform the user of how to use the program
        std::cin.get();
        exit(0);
    } else { // if we got enough parameters...
        char* myFile, myPath, myOutPath;
        std::cout << argv[0];
        for (int i = 1; i < argc; i++) { /* We will iterate over argv[] to get the parameters stored inside.
                                          * Note that we're starting on 1 because we don't need to know the 
                                          * path of the program, which is stored in argv[0] */
            if (i + 1 != argc) // Check that we haven't finished parsing already
                if (argv[i] == "-f") {
                    // We know the next argument *should* be the filename:
                    myFile = argv[i + 1];
                } else if (argv[i] == "-p") {
                    myPath = argv[i + 1];
                } else if (argv[i] == "-o") {
                    myOutPath = argv[i + 1];
                } else {
                    std::cout << "Not enough or invalid arguments, please try again.\n";
                    Sleep(2000); 
                    exit(0);
            }
            std::cout << argv[i] << " ";
        }
        //... some more code
        std::cin.get();
        return 0;
    }
}
于 2012-10-29T13:36:33.750 に答える
0

最初のバージョン(キーボードから入力):

echo -n "enter P value: "
read P

2番目のバージョン(シェルスクリプト引数として渡す):

P=$1

3番目のバージョン(bash /シェルプログラミングを学ぶ):

于 2012-10-29T13:33:44.610 に答える