• ベストアンサー

visual Stdio、C++.net

visual Stdio、C++.netでC言語で書いたソースをコンパイルしたのですが・ 以下のようにmain関数で引数を受け取るように記述しているにも関わらず この記述のところで止まらず通り抜けて次の処理に進んでしまいます・・ 対処法知っている方いましたらお願いします。 int main(int argc,char *argv[]) { (省略) }

質問者が選んだベストアンサー

  • ベストアンサー
  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.5

>>(1)ビルドした後にコマンドラインにて引数付きで実行する >helpでやり方を調べてみたのですがわかりません・・ >どのようにすればコマンドラインにて引数付きで実行できるのでしょうか・ コマンドラインは、 [スタート]-[プログラム]-[コマンドプロンプト] などで表示されるいわゆるDOSコマンドです。 VC++6.0の場合ですが、ビルドを実行するとソースファイルのあるフォルダの配下にReleaseあるいはDebugのフォルダが作成され、その中に実行可能なexeファイルが作られています。 これを実行する方法として、ダブルクリック、コマンドラインから「c:\~\~\hoge.exe」などと入力します。 コマンドラインの使い方として、 C:\WINNT\system32\calc.exe などと入力するとそのプログラム(電卓)が実行できます。 電卓は引数を受け取りませんが、もし引数を渡すのなら、 C:\WINNT\system32\calc.exe abc def のようにすると、abc,defという2つの引数を渡してプログラムの内部で処理する事が出来ます。 main関数の引数は上記のように起動時にしか渡せませんので、プログラム中で外からの入力を受け取るにはscanfなどの入力関数を使います。 int main() {  int a,b;  printf("数を2コ入れてね。");  scanf("%d %d",&a,&b); //入力処理  printf("2つの数の和は%dです。\n",a+b);  return 0; } mainに渡す起動引数を使用する方が便利な場合もあるので、 A) tasu.exe 2 3[Enter] 2つの数の和は5です。 B) tasu.exe[Enter] 数を2コ入れてね。2 3[Enter] 2つの数の和は5です。 どういう使われ方をしたいか?によって使い分けます。

ono1011
質問者

お礼

おかげさまで問題が解決致しました。 詳しく丁寧にそして例を上げて説明していただてとてもよくわかりました。 またなにかありましたら宜しくお願い致します。

その他の回答 (4)

  • mcq
  • ベストアンサー率48% (45/93)
回答No.4

VC++では実行ボタンを押せば、ビルド後にプログラムを実行してくれますが、 ビルドをしただけでもプログラム自体は完成しており、 ソースファイルが保存されているフォルダの中のDebugサブフォルダに拡張子がexeのファイルがあるはずです。 そこで、コマンドプロンプトなりMS-DOSプロンプトなりを開いて、そのDebugフォルダに移動し、「実行ファイル名 引数1 引数2」と入力してEnterを押せば実行できます。 「コマンドラインにて」というのは「CUIで」とほぼ同義なので、WindowsならばコマンドプロンプトやMS-DOSプロンプトになるわけです。Windowsの基礎知識なのでVCのヘルプには載っていません。同様に、C言語の基礎知識もVCのヘルプにはありません。参考書を見ましょう。

参考URL:
http://www9.plala.or.jp/sgwr-t/
ono1011
質問者

お礼

おかげさまで問題が解決致しました。 迅速で丁寧な対応にとても感謝しております。 参考URLもありがとうございます。 (このページとっても読みやすくて良いですね。) またなにかありましたら宜しくお願い致します。

  • mcq
  • ベストアンサー率48% (45/93)
回答No.3

もしかしてC言語自体あまり慣れていないのですか? 今まで、どのような言語をどの位使った事がありますか? どうやら、「関数の先頭では引数を入力する為にプログラムが一時停止して入力を待ってくれる」というような理解をされているかもしれませんが、だとしたら他の言語と混同していませんか?もう一度C言語について勉強してみると良いかもしれません。 ちなみに、VC++において実行時引数を与える方法は、 (1)ビルドした後にコマンドラインにて引数付きで実行する (2)(VC6.0の場合ですが)プロジェクト→設定→デバッグ→プログラムの引数で設定する

ono1011
質問者

補足

はい。慣れていないです・・ VBは3ヶ月ほど独学で勉強しました。 Cに関しては独学1ヶ月と会社の研修で2ヶ月学びました。 まだ開発経験はありませんが今後Cで開発する予定です。 >(1)ビルドした後にコマンドラインにて引数付きで実行する helpでやり方を調べてみたのですがわかりません・・ どのようにすればコマンドラインにて引数付きで実行できるのでしょうか・

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

>記述のところで止まらず通り抜けて 普通、止まりませんけど・

ono1011
質問者

お礼

はい、おっしゃる通りです・・理解不足でした・・ またなにかありましたら宜しくお願い致します。

  • mcq
  • ベストアンサー率48% (45/93)
回答No.1

>この記述のところで止まらず通り抜けて次の処理に進んでしまいます・・ というのは、どのような症状なのでしょうか? 実行時に引数を与えて実行すればmain関数が最初に呼び出されてmain関数の最後まで行った所で終了するはずですが、 その引数が格納されていなかったのでしょうか? .netのCと古いCでは、かなり考え方が異なります。その点は大丈夫ですか?

ono1011
質問者

補足

>どのような症状なのでしょうか? コンパイルし実行すると、main関数の引数を与えるところで止まらずに 先に進んでしまうのです。(あ、実行前に引数を与えてないから当たり前ですか・・) 実行時に引数を与えるやり方ってどのようにすればいいのでしょうか? >.netのCと古いCでは、かなり考え方が異なります そうなんですか。Visual C++を使用すること自体初めてでして。

関連するQ&A

  • main の引数には const 付けた方が

    C言語での質問です。 引数を取るような main 関数は int main( int argc, char *argv[]){~} とされていますが、argvの指す文字列を変更する、というのはいくら何でもまずいので、 int main( int argc, const char *argv[]){~} あるいは int main( int argc, const char const * const * argv){~} の方がいいのではないでしょうか? 何故、constを付けない形が出回っているのでしょうか?

  • main関数について

    最近C言語を勉強し始めた者です。 main関数について分からないことがあるので質問致します。main関数は自作関数ですよね。ということは自由に引数を決めていいのですか?つまり int main(int argc , char *argv[]) 以外の引数を決めることは出来るのでしょうか。

  • main(int argc,char **argv[])の意味を教えて下さい

     今晩は、Cの初心者です宜しくお願いします。  main関数の引数で、int main(int argc,char **argv[])とint main(int argc,char *argv[])と書かれている場合がありますが、 「**argv」と「*argv」の意味の違いはどのようなもので、どのように使い分けるのでしょうか。 また、必ずポインタ型でとるという決まりでしょうか。 宜しくお願いします。

  • c言語

    (c++ではなくC89準拠) c言語について質問 (1) 関数名()と関数名(void)は違う意味 (2) mainの引数の型は(void)か(int argc, char *argv[]) (3) K&Rは標準c準拠でmain()という表記があります ということは、(1)の関数名とはmain以外の関数名で、 main()とmain(void)は同じなんでしょうか。

  • コマンドプロンプトを使用してのコマンドライン引数

    winXPのコマンドプロンプトを利用して 参考書「独習C」を使い、C言語の学習をしています。 その本の7.4の項目~main()の引数~で main(int argc,char *avgv[])を利用すると コマンドラインから引数をとることができるとありますが 私の学習環境ではうまくいきません。 具体的には #include <stdio.h> int main(int argc, char *argv[]) { int i; for(i=1; i<argc; i++) printf("%s ", argv[i]); return 0; } というプログラムを実行しても何も表示されません。 どうすればコマンドライン引数を利用できますか?

  • コマンドライン引数 *argv[]はなぜポインタ?

    C言語初心者です。 コマンドライン引数、 int main(int argc, char *argv[]) というのを最近勉強しましたが、引数2番目がポインタになっている理由について、 どなたか教えて下さい。 そういう仕様なんだから、それに従いましょう、ということでしょうか? int main(int argc, char argv[]) では、ダメなのでしょうか? このポインタでの引数渡しについて、 なんらかの納得のいく考え方をご存知の方がいらしたら、教えて下さい。 宜しくお願い致します。

  • Visual Stdioで、C言語のプログラミングを勉強してるのですが

    Visual Stdioで、C言語のプログラミングを勉強してるのですが、 不明点があるため質問させて頂きます。 【前提条件】 ---------------------------------------------------- < TestHeader.h > typedef struct A { int (*a)(struct B* x, char* y, struct C** z); } A; ---------------------------------------------------- < TestSource.c > static int func(struct B* x, char* y, struct C** z) { return 0; } struct A D = { .a = func, }; ---------------------------------------------------- 上記の条件で、< main.c >を作成し、 main関数からfunc関数へ遷移するようにしたいです。 書籍などで調べたのですが、main関数の作成方法が分かりません。 ご教授のほど、よろしくお願いします。

  • 関数へ引数を渡す時・・・(C言語)

    Cを始めたばかりです。 レベルの低い質問だと思いますがお願いします。 【ソース】 /* a1.c */ #include <stdio.h> void aaa(char); int main( int argc, char *argv[] ) { char box[] = "test"; aaa(box); return 0; } /* a2.c */ #include <stdio.h> void aaa(char box) { printf( "%s",box ); } 【質問】 変数boxの中身を関数aaaに渡したいだけですが、 上記ソースをコンパイルすると、a1.cの aaa(box) の部分でエラーが出てしまいます。 どうもデータ型(ポインタ?)がまずいようですが、 何が問題なのでしょうか? 御回答宜しくお願い致します。

  • C言語でコマンドラインの引数について。

    コマンドラインで引数をわたす基本的なプログラムは main(int argc,char *argv[]){....] ですよね。 今回実行時に、 >実行ファイル名 123 + 233 といれたら、123+233を計算してくれるプログラムを作ろうとしています。 その場合、main(int argc,int *argv[]){} としたら、argv[1]に123が入って、argv[2]に+が入って、argv[3]に233が、入るというわけではないんでしょうか? とりあえず、確認で #include<stdio.h> main(int argc,int *argv[]) { printf("%d\n%d\n",argv[1],argv[3]); } としてみたんですが、実行結果は、とても長い数字がでてきてきました。 なにがいけないのか教えてください。 お願いします。 あとWindows MEでVC++6を使ってます。

  • 漢字のコメントをはずすとコンパイルできる

    Visual Stadio 2008 の C++ で以下の簡単なプログラムをコンパイルすると、  error C2059: 構文エラー : 'else'  error C2059: 構文エラー : 'return'  error C2059: 構文エラー : '}' のようにエラーが出ます。 ------------- #include <stdio.h> int main(int argc, char** argv) {  // 引数が指定されていた場合  if( argc == 2 ){   printf("引数があります");  }else{   printf("引数がありません");  }  return 0; } ---------- いろいろ試してみたところ、  ・コメントをはずすと、コンパイルできる  ・ソースリストはUTF-8である  ・同内容をShiftJISで記載すると、コンパイルできる ことに気がつき、  「UTF-8の日本語コメントを、コメントとして正しく認識していない」らしい ことが原因らしいところまでわかりました。 で質問になりますが、 「UTF-8の日本語コメントを、コメントとして認識させる」 ためには、どうしたらよいのかお教えください。

専門家に質問してみよう