質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

Q&A

解決済

4回答

8673閲覧

コマンドプロントで.exeファイル実行と同時に数値を入力し、その値が表示されるプログラムを作成したい。

harrier

総合スコア14

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

0グッド

0クリップ

投稿2017/11/21 08:12

編集2017/11/21 08:13

現在C++のプログラミングをVisualStudioを使って行っています
.exeファイルを作成した上で、コマンドプロント上にて
”.exeファイル 数値” 
と入力し数値がコマンドプロント上へと表示されるプログラムを作成したいと考えています

.exeファイルの出力とscanfを使い表示することについては実装することが出来るのですが、.exeファイル実行と同時に数値を与え、その値がコマンド上に表示されるプログラムを作成していきたく試行錯誤をしています。
どなたか使用関数や方法をご存知の方がいらっしゃればご教授の程よろしくおねがいします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

main関数のコマンドライン引数というもので受け取ることができます。
詳しくはマニュアル参照。
https://msdn.microsoft.com/ja-jp/library/6wd819wh.aspx
https://msdn.microsoft.com/ja-jp/library/17w5ykft.aspx

簡単に説明すると、main関数の第二引数の要素[1]に値が入ってきます。

c++

1int main( int argc, char *argv[], char *envp[] ) 2{ 3 cout << argv[1]; 4}

投稿2017/11/21 08:19

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

harrier

2017/11/21 08:59

コメントありがとうございます 記載して下さったコードで.exeファイルを構築し, ファイル名.exe 数値 と入力を行った結果,7ケタの数字がランダムに表示され、入力した数値が帰ってこない状態になってしまいました
guest

0

ベストアンサー

コマンドライン引数で受け取ればいいです。

main関数の引数の int argc, int char* argv[] っていうやつで。

argc が 実行ファイル名( 場合によっては絶対パスだったりする。 ) と 引数の 和になっていまして、

(以下はコードではなく、イメージ。 )

argv[0] = (実行ファイルの)ファイルパス argv[1] = 引数1 argv[2] = 引数2 ...

となっています。

で、ttyp03さんの回答にあるコード、なんか不思議だなぁと思っていたら、

第三引数がある!

なんだろ?と思って「int main( int argc, char *argv[], char *envp[] )」で検索してみると、

envp - main関数3つ目の引数

がヒットした。

これによると、環境変数が格納されるらしいです。

ですが、今回は使わないので

int main( int argc, char *argv[] )

でいいと思う。

また、今回はただ単に表示するだけのようなので問題ないかもしれませんが、
引き受けたコマンドライン引数はすべて文字列になっています。

なので、どうしても計算するとかで数値が欲しいなら atoi関数 ( C++なら std::atoi関数? ) 等のような変換用の関数で変換して計算する...
っていう感じになるかと。( もしかすると C++11以降とかみたいに条件があるかもしれませんが。 )

あるいは、ほかの方法として、

Windows APIとかのようなAPIでコマンドライン引数を取得するとか。
ただし、少なくとも Windows APIの場合は 一列の文字列になっていたり、wchar_t みたいな感じで若干扱いにくかったりするし、
Windows APIなら Windows上でしか使えない。

投稿2017/11/25 05:51

BeatStar

総合スコア4958

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

harrier

2017/11/27 05:48

こちらで無事解決することが出来ました! ありがとうございました!
guest

0

C++

1#include <iostream> 2 3int main( int argc, char *argv[]) { 4 for ( int i = 0; i < argc; ++i ) { 5 std::cout << i << ':' << argv[i] << std::endl; 6 } 7}

コレをコンパイル/リンクし、コマンドラインから
コレ.exe 123 456 789
してみよう。最初の引数 123 は argv[いくつ] に対応するかな?

投稿2017/11/22 06:08

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

exeファイルの中で引数を受けつけるように設定して、
exeファイルの中で引数の値を出力すればできそうですが、やりたいこととは違いますか?

投稿2017/11/21 08:15

King_of_Flies

総合スコア382

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

harrier

2017/11/21 09:00

コメントありがとうございます 仰る通りのことをやりたいのですが、引数を受け付ける設定が調べてもよくわからず迷っておりますので、やり方をご存知でしたらお教えいただきたいです
King_of_Flies

2017/11/22 04:31

ttypさんのやり方の説明で出ている引数のとり方は分かったのでしたら、 System.out.print(argv[1]);で出力できそうですができませんか>?
LouiS0616

2017/11/22 05:56

それJavaですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問