C exercises(c) Command line arg.

今まで、main 関数へ引数なしを意味する

int main(void) と記述、

実は main関数にも引数を渡すことができます。 この main関数に渡す引数のことを「コマンドライン引数」といいます。

コマンドライン引数

main関数へ渡せる引数は、

  1. 引数の総個数
  2. 引数の文字列を指すポインタの配列

の 2つです。

一般に

  • int main(int argc, char *argv[]) と記述し、
  • int argc: 引数の総個数(プログラム名も含む)
  • char *argv[]: 引数の文字列を指すポインタの配列を表します。

とりあえず、下の例を見てみましょう。

(例)

#include <stdio.h>

int main(int argc,char *argv[])
{
	int i;
	
	printf("引数の総個数 = %d\n", argc);
	for (i = 0; i < argc; i++) {
		printf("%d番目の引数 = %s\n", i, argv[i]);
	}
	return 0;
}

例題は、command_line.c と保存して、コンパイルだけしてください。

dir コマンドで、command.exe ファイル生成されたと確認。

2016-07-04 (1)

実行結果

Ctrl-Qでコマンドプロンプトを起動、 下記のコマンドを入れてください。

> command_line Kitty on your lap

 

E:\chen\My Documents\C>command_line Kitty on your lap
引数の総個数 = 5
0番目の引数 = E:\chen\My Documents\C\command_line.exe
1番目の引数 = Kitty
2番目の引数 = on
3番目の引数 = your
4番目の引数 = lap

E:\chen\My Documents\C>

演習

演習1

教科書 P291
コマンドラインで数値を入力し、その合計値を求めるプログラムを作成してください。

プログラムソースファイルは、a8-5-1.c とする。

実行結果

> a8-5-1 10 15 22 45 9 66 71 4 37 82
合計は 361です

演習2

C exercises(8) Pointer Summary

 

を改造し、整数は配列ではなく、コマンドライン引数として引き渡し、引数を順に調べ、奇数の値のみ、別の大きさ10の整数型配列に代入しなさい。また、配列の中身と、何個格納したかを画面表示しなさい。

実行結果

> find_odd_number 10 15 22 45 9 66 71 4 37 82
実行結果

15
45
9
71
37
格納個数 = 5

 

C# exercises (b) Web2 Form

Visual Studio community 2015 アカウントについて (学内専用)

  1. WebBrowser (基本)
  2. Form(自動操作)←今週
  3. HttpClient
  4. REST & JSON

WebBrowser コントロールを利用した、ブラウザをコントロールアプリケーションの作成手順を紹介します。

Googleの検索ページを利用し、ページに表示されているテキストボックスに文字列が自動的に入力、フォームのサブミットボタンのクリックができ、ページを解析し、含まれるすべてのリンク文字列とそのURLを表示するなどもできる。

このようにプログラムからWebページを操作する場合、事前にそのHTMLのソースをチェックして、操作対象となるHTML要素を明確にしておく必要がある。Googleの検索ページのソースを見ると、フォームの定義部分で次のような記述を見つけることができる。

<form action="/search" name=f >
<input name=q size=55 value="" …… >
<input name=btnG type=submit value="Google 検索" …… >
……

Googleの検索ページ内のフォーム定義部分(抜粋)

この記述から、フォーム(<form>要素)には「f」という名前(name属性)が付けられており、またテキストボックス(<input>要素)には「q」、[Google検索]ボタン(サブミット・ボタン。「type=submit」という属性が付いている<input>要素)には「btnG」という名前が付けられていることが分かる。

 

コントロールの配置

Visual Studioを起動し、新しいWindows Formプロジェクトを作成します。

フォーム上次のコントロールを配置してください

ボタン:

  • button1
  • button2
  • button3
  • button4

リストビュー:

  • listView1
    • listView1.View = View.Details;
    • columnHeader1=HERF
    • columnHeader2=text

ウェブブラウザ:

  • webBrowser1

 

スクリーンショット 2016-07-01 11.28.26

イベントハンドラ

Form1_Load

private void Form1_Load(object sender, EventArgs e)
{
    webBrowser1.Navigate("http://www.google.co.jp");
}

 

button1_Click

private void button1_Click(object sender, EventArgs e)
{
    HtmlElementCollection all = webBrowser1.Document.All;
    HtmlElementCollection forms = all.GetElementsByName("q");
    forms[0].InnerText = "c#"; // テキストボックスに「C#」を入力
}

 

button2_Click

private void button2_Click(object sender, EventArgs e)
{
    HtmlElementCollection all = webBrowser1.Document.All;
    HtmlElementCollection forms = all.GetElementsByName("f");
    forms[0].InvokeMember("submit"); // フォームのサブミット
}

 

button3_Click

private void button3_Click(object sender, EventArgs e)
{
    HtmlElementCollection all = webBrowser1.Document.All;
    HtmlElementCollection forms = all.GetElementsByName("btnG");
    forms[0].InvokeMember("click"); // ボタンのクリック
}

 

button4_Click

private void button4_Click(object sender, EventArgs e)
{
    HtmlDocument doc = webBrowser1.Document;

    // リンク文字列とそのURLの列挙
    foreach (HtmlElement he in doc.GetElementsByTagName("A"))
    {

        string href = he.GetAttribute("href"); // HREF属性の値
        string text = he.InnerText; // リンク文字列

        if (!string.IsNullOrEmpty(href)
            && !string.IsNullOrEmpty(text))
        {
            text = text.Replace("\r\n", ""); // 改行文字の削除
            string[] row_1 = { href, text };
            listView1.Items.Add(new ListViewItem(row_1));
        }
    }
}

 

実行結果

button1クリックすると、ページに表示されているテキストボックスに「C#」という文字列が自動的に入力される。

スクリーンショット 2016-07-01 12.20.27

 

button2、button3のボタンをクリックすると、検索が実行されて検索結果ページが表示される。

スクリーンショット 2016-07-01 12.20.34

button4のボタンをクリックすると、ページに含まれるすべてのリンク文字列とそのURLを表示する。

スクリーンショット 2016-07-01 12.20.47

機能追加

フォーム上textbox などを追加て、検索は「C#」に固定するではなく、textbox などの内容を利用するように機能追加する。