USBカメラからノートパソコンにつないで、
動画像をファイルとして保存するようなプログラムを
つくりたいのですが、どのようにしてよいかまったくわかりません。
静止画像の取り込みは出来たのですが、動画像となるとわからなくなってしまいました。
OpenCVというIntelが提供しているライブラリも多少はわかります。
なにか参考になるサイトや書籍、アドバイス等お願いします。
開発環境はVC++6.0、WindowsXPです。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

VCならDirectshowでやっても簡単に出来るかもです。



http://vision.kuee.kyoto-u.ac.jp/~hiroaki/firewi …
このサイトは基本的にはマイクロソフトのヘルプに解説を加えた感じですが、素っ気無いヘルプよりは大分分かりやすくまとまっていると思います。

参考URL:http://vision.kuee.kyoto-u.ac.jp/~hiroaki/firewi …
    • good
    • 0
この回答へのお礼

ありがとうございました。
カメラからPCに映像は流せるのですが、
やはりそれをファイルとして保存するやり方はわかりませんでした。

お礼日時:2003/10/27 19:18

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qゲームプログラミングについて

ゲームプログラミングについて
ゲームをプログラミングしたいのですが、(初心者なので・・)プログラミング方法がわかりません。
使う予定のソフトはMicrosoft Visual C++ 2010 Expressなのですが、
ウェブを調べると使ってるソフトが古くて参考になりません。

Aベストアンサー

プログラミング方法といっても
1)「プログラムの仕様」
2)「仕様」を満すために必要な「手段」「方法」
3)「手段」「方法」をプログラム言語で「表現」する方法
4)実際にプログラム言語で記述して、実行できる状態にする方法
などあります。

このうち、本当に「最新」の情報が必要なのは、4)くらい。
つまり、あなたの場合なら「Visual C++ 2010 Expressの操作方法」くらいのものです。

それ以外の「プログラミングの基礎」は20年前とそうかわってません。

Qカメラを用いて動画から画像を取り込みトリミングしようとするプログラムを

カメラを用いて動画から画像を取り込みトリミングしようとするプログラムを作っています.
最下部のプログラムを貼り付けているところまででデバックしつつ実行すると

"OpenCVwithDShow.exe の 0x00462614 でハンドルされていない例外が発生しました: 0xC0000094: Integer division by zero"

とエラー文がでてきます.
色々考えたのですが、原因が分からないのでどなたかご教授お願いします.
よろしくお願いします.


//トリミング
CvRect cvClipRect(IplImage *frame, CvRect r)
{
r.x = 240;
r.y = 0;
r.width = 1080;
r.height = 1680;
if (r.x < 0) {r.width += r.x; r.x = 0;}
if (r.y < 0) {r.height += r.y; r.y = 0;}
if (r.x >= frame->width ) {r.width -= r.x - frame->width ; r.x = frame->width - 1;}
if (r.y >= frame->height) {r.height -= r.y - frame->height; r.y = frame->height - 1;}
if (r.width > frame->width - r.x) {r.width = frame->width - r.x;}
if (r.height > frame->height - r.y) {r.height = frame->height - r.y;}
return r;
}

IplImage *cvCreateSubRectImage(IplImage *frame, CvRect r)
{
IplImage tmp;
CvMat submat;
cvGetSubRect(frame, &submat, cvClipRect(frame, r));
cvGetImage(&submat, &tmp);
return cvCloneImage(&tmp);
}
//トリミング終了



int main (int argc, char **argv){
CvCapture *capture = 0;
IplImage *frame = NULL;
IplImage *frame1 = NULL;
IplImage *reduce = NULL;
int c;
int x,y;
int max,min;
int h,s;
uchar p[3];
LabelingSS labeling;
short *src_buf;
float centerX,centerY;
HANDLE hCom;

//トリミング関数

// (1)コマンド引数によって指定された番号のカメラに対するキャプチャ構造体を作成する
if (argc == 1 || (argc == 2 && strlen (argv[1]) == 1 && isdigit (argv[1][0])))
capture = cvCreateCameraCapture (argc == 2 ? argv[1][0] - '0' : 0);
/* この設定は,利用するカメラに依存する */
// (2)キャプチャサイズを設定する.
cvNamedWindow ("Capture", CV_WINDOW_AUTOSIZE);
frame1 = cvQueryFrame (capture);
src_buf = new short[ frame1->width * frame1->height ];
// (3)カメラから画像をキャプチャする
while (1) {
frame1 = cvQueryFrame (capture);
frame = cvCloneImage(frame1);

//トリミング呼び出し
CvRect cvClipRect(IplImage *frame, CvRect r);
IplImage *cvCreateSubRectImage(IplImage *frame, CvRect r);

カメラを用いて動画から画像を取り込みトリミングしようとするプログラムを作っています.
最下部のプログラムを貼り付けているところまででデバックしつつ実行すると

"OpenCVwithDShow.exe の 0x00462614 でハンドルされていない例外が発生しました: 0xC0000094: Integer division by zero"

とエラー文がでてきます.
色々考えたのですが、原因が分からないのでどなたかご教授お願いします.
よろしくお願いします.


//トリミング
CvRect cvClipRect(IplImage *frame, CvRect r)
{
r.x = 240;
...続きを読む

Aベストアンサー

あの~、mittiさんが今まで同じような質問をして
回答がほとんどついていないかと思うのですが、
それには原因がありましてね、
1.OpenCVを使っている人が少ないこと
2.再現環境を持っていない人が多いこと
3.説明がヘタクソなこと(失礼)
4.やれることをやっていないこと
の4つぐらいの原因があるのですよ。
で、1,2,3はどうしようもないのでアレなんですが、
Integer division by zeroってのは、いわゆる0割ってやつでしてね、
割り算の分母に0を持ってきちゃいけないというルールがありますよね。
それを発生する可能性のある箇所をちょっとは調べたのかってことなんですよ。

ソースコードを拝見していると、ポインタのNULLチェックもしていないし、
そもそもね、キャプチャに問題があるか、トリミングに問題があるかね、
そこら辺は質問する前に切り分けができるんじゃないかと思うんですよ。
キャプチャが正常なら、トリミング処理をコメントアウトして、その画像を表示できればいいわけですから。
そこは確認されたんですかね。

キャプチャが正常なら、トリミング関数の変数の値をデバッガで
逐次表示したり、fprintfなどを使って表示させたりしてね、
問題の範囲を絞り込むことができるんですよ。

一般的な質問でしたら親切な回答者はね、手元で問題を再現させながら
回答するんですよ。しかし貴方の質問の場合はね、前述の1と2の理由でそれができないんですよ。
そうすると、貴方のソースコードから原因を類推するしかない。

結局ね、できるアドバイスは1つだけ。
トリミングが問題なのか、キャプチャが問題なのか、つまりは
正常に動いている部分はどこからどこまでなのか、まずチェックして下さい。
そして動かない部分のみを回答者に提示して下さい。
以上です。

あの~、mittiさんが今まで同じような質問をして
回答がほとんどついていないかと思うのですが、
それには原因がありましてね、
1.OpenCVを使っている人が少ないこと
2.再現環境を持っていない人が多いこと
3.説明がヘタクソなこと(失礼)
4.やれることをやっていないこと
の4つぐらいの原因があるのですよ。
で、1,2,3はどうしようもないのでアレなんですが、
Integer division by zeroってのは、いわゆる0割ってやつでしてね、
割り算の分母に0を持ってきちゃいけないというルールがありますよね...続きを読む

Q初心者がまず始めるプログラミング言語はなにはおすすめ?

こんにちは。
プログラムについてほぼまったくの初心者です。
シューティングゲームやファミコンの頃のようなマリオ系アクションがつくりたいです。また、就職時や特技として履歴書に書ける、役に立つプログラミング言語が学びたいです。
使っているOSはXPです。
C言語というものの初歩の初歩を本で学んだんですが、とても難しく感じ、途中で挫折してしまいました。
たくさんあるプログラミング言語の中から、初心者にもわかりやすくて、また、他のプログラミング言語への勉強にもなるようなプログラミング言語はあるでしょうか?
おねがいします。

Aベストアンサー

> C言語というものの初歩の初歩を本で学んだんですが、とても難しく感じ、途中で挫折してしまいました。

 厳しいですね。C言語の初歩程度でへこたれているようでは「就職時や特技として履歴書に書ける、役に立つプログラミング言語」のマスターはおぼつかないでしょう。が,C言語が初心者向きでないのもまた事実です。

 私としては,初心者には Python をお奨めします:

  ‐汚いプログラムが書きにくいような文法になっており,ああも書ける,こうも書けるといった,初心者を戸惑わせる文法事項が少ない
  ‐綺麗なプログラムを書かないと気持ち悪くなるという,良い習慣が身につく
  ‐文法が比較的単純
  ‐処理系が無料で手に入る
  ‐世界的に広く使われている
  ‐オブジェクト指向もできる

 その後で,JavaScript に進んでみてはいかがでしょうか。毛色の異なるいろいろな言語に慣れておく必要があり,将来,Java, C#, C, C++ などの言語に進むためにも。

 また,視野を広げるために Scheme, Common Lisp や ML, OCaml, Haskell, Erlang など関数言語のたぐいや,Perl や Ruby, sed, Awk などのスクリプト言語の本にも目を通されることをお勧めします(いずれも世界的に有名で,処理系が無料で手に入ります)。

 それから Java や C# などに取り組めば良いと思います。そして,C や C++ も勉強しておく必要があります。

 私自身は,仕事の都合でCOBOLとアセンブラを先に勉強し,かなり後になってC言語を勉強したので,C言語のポインタのどこが難しいのか分かりませんでした(C言語のポインタは簡単です(^^;)。ただし,アセンブラは余力があるときに限り取り組めばよいでしょう(でも,CASL関連の本には目を通しておくべき)。

> C言語というものの初歩の初歩を本で学んだんですが、とても難しく感じ、途中で挫折してしまいました。

 厳しいですね。C言語の初歩程度でへこたれているようでは「就職時や特技として履歴書に書ける、役に立つプログラミング言語」のマスターはおぼつかないでしょう。が,C言語が初心者向きでないのもまた事実です。

 私としては,初心者には Python をお奨めします:

  ‐汚いプログラムが書きにくいような文法になっており,ああも書ける,こうも書けるといった,初心者を戸惑わせる文法事項が少...続きを読む

Qはじめての動画像処理

はじめての動画像処理
http://www.cqpub.co.jp/shoseki/mycomputer/pic019/

こちらの7章list701.cppのプログラムを使っています。
このプログラムでは、フレームごとに画像の各特徴量を計算し、外部ファイルに結果を出力しています。
buffer(各rgbの値が格納されている)の数値を使って計算をするだけなので、これでは実行結果で表示させる画像は何も変化が得られず、ただフレームごとに画像を描画しているだけです。

私が行いたいことは、bufferに数値を代入して、表示させるビットマップの結果を変えることなのです。
例えば、画像中の白い部分を赤色に変更して結果をフレームごとに表示するなどです。
その場合、

buffer[ij*3]=255
buffer[ij*3+1]=0
buffer[ij*3+2]=0

という代入の表記を書き、その後InvalidateRectで再描画を促して結果を反映させようとしたのですが、

error C2064: 1 引数を取り込む関数には評価されません。

と出てしまいうまく行うことができませんでした。bufferはBYTE型で定義してあったのですが、そこに整数を格納しようとしていることがいけないのでしょうか?
計算結果を反映させた動画の表示方法があれば教えていただきたいです。
動画像処理は初めてでかなり困っています; よろしくお願いします。

はじめての動画像処理
http://www.cqpub.co.jp/shoseki/mycomputer/pic019/

こちらの7章list701.cppのプログラムを使っています。
このプログラムでは、フレームごとに画像の各特徴量を計算し、外部ファイルに結果を出力しています。
buffer(各rgbの値が格納されている)の数値を使って計算をするだけなので、これでは実行結果で表示させる画像は何も変化が得られず、ただフレームごとに画像を描画しているだけです。

私が行いたいことは、bufferに数値を代入して、表示させるビットマップの結果を変えることな...続きを読む

Aベストアンサー

>int ij=i*width+j;
>int rr = img00.lpBmpData[ij*3];
>int gg = img00.lpBmpData[ij*3+1];
>int bb = img00.lpBmpData[ij*3+2];
>if(rr==255 && gg==255 && bb==255){
>img00.lpBmpData [(i+3)(j+3)*3]=255;
>img00.lpBmpData [(i+3)(j+3)*3+1]=0;
>img00.lpBmpData [(i+3)(j+3)*3+2]=0;
>}

1.読み込み・判断してるデータ位置と書き換えしてる位置が一致してません
2.転記ミスなのかもしれませんが元々のソースのコメントでも
  データ配列は BGR のはずですがなぜかこのソースの
  コメントでは勝手に RGB に変えてます
  (BMPファイルのデータ配列は BGR が正解です)
3.(i+3)(j+3)*3 なんて書き方は出来ません
(何で突然こんな話が出てるのでしょうか?)
4.上記を全て直したとして赤色にセットしているのではなくて
青色にセットしていることになります

一番最初に書いてあったようにもともとのオリジナルに対して
代入を加えただけですか?
何か他の部分に要らない加工をしている気がします
転記コードやその内容を見てそのようにやっているといわれてること事態が
疑わしくなってしまうのですが

元々書かれているコード部分
bb = buffer[ ij * 3 ] ;// b
gg = buffer[ ij * 3 +1 ] ;// g
rr = buffer[ ij * 3 +2 ] ;// r
の下に
if ((bb==255) && (gg==255) &&(rr==255)) {
bb = buffer[ ij * 3 ] = 0;// b
gg = buffer[ ij * 3 +1 ] = 0 ;// g
rr = buffer[ ij * 3 +2 ] = 255 ;// r
}

と付け足すだけで動きませんか?

>int ij=i*width+j;
>int rr = img00.lpBmpData[ij*3];
>int gg = img00.lpBmpData[ij*3+1];
>int bb = img00.lpBmpData[ij*3+2];
>if(rr==255 && gg==255 && bb==255){
>img00.lpBmpData [(i+3)(j+3)*3]=255;
>img00.lpBmpData [(i+3)(j+3)*3+1]=0;
>img00.lpBmpData [(i+3)(j+3)*3+2]=0;
>}

1.読み込み・判断してるデータ位置と書き換えしてる位置が一致してません
2.転記ミスなのかもしれませんが元々のソースのコメントでも
  データ配列は BGR のはずですがなぜかこのソースの
  コ...続きを読む

Qプログラミング入門に最適な言語

プログラミング入門に最適な言語
最近プログラミングに興味をもって、プログラミングに挑戦しようと思ってます。

最終的にC++へ行くつもりですが、何の言語からはじめるのがいいでしょうか。
よろしくお願いします。

Aベストアンサー

議論百出だろうと思います。

「Cを身につけてからC++を学ぶべきである」
と言う人もいるでしょう。

私は、そうは思いません。
(Cをバイパスし)いきなりC++で構わないと思います。

プログラミングが全く未経験であれば、
やはりGUIで結果がグラフィカルに出た方が楽しいと思います。

有償になってしまいますが
MFCを搭載したVC++ Standerd以上をお勧めします。

また、別の方法として
多少回り道になりますが
C#という手もあります。

これなら無償のExpressでも十分にGUI制作が楽しめます。

まずは、プログラミングの楽しさ、醍醐味を味わってみてください。

入門書等についてですが
あなたが趣味でコツコツプログラミングをし、
出来たものを自分だけで使うのが目的なら
何でもいいです。

ただし、プログラムを公開する
(フリー、商用問わず)
また、ソースコード(一部でも)
(こういうサイトで質問の為に提示することを含む)
つもりがあるなら、

「きちんとした書籍」

で学ぶことをお勧めします。
「10日で・・・」
とかうたっている物の中には
「動けばいい!」
という姿勢で書かれたものが多く、
ソースコードが非常に読みにくいです。

読みやすいソースコードであれば
こういうサイトでも回答が付きやすいですが、
読みにくいソースコードは
分析に非常に時間がかかるので
回答がなかなかつきません。

また、読みやすいソースコードは
バージョンアップも簡単ですし、

一般に
(例外はありますが)
動作も早く、コンパクトです。

頑張ってください!!!

議論百出だろうと思います。

「Cを身につけてからC++を学ぶべきである」
と言う人もいるでしょう。

私は、そうは思いません。
(Cをバイパスし)いきなりC++で構わないと思います。

プログラミングが全く未経験であれば、
やはりGUIで結果がグラフィカルに出た方が楽しいと思います。

有償になってしまいますが
MFCを搭載したVC++ Standerd以上をお勧めします。

また、別の方法として
多少回り道になりますが
C#という手もあります。

これなら無償のExpressでも十分にGUI制作が楽しめま...続きを読む

QUSBカメラを使ったカメラの制御を教えてください!

USBカメラを使って通信ロボットを制御したいいですが
どうしたらいいかさっぱりわかりません

その仕組を誰か教えてぐれませんか!?
お願いします!

Aベストアンサー

何をどうしたくてどうわからないのかがわかりません。
カメラの制御なのか、ロボットの制御なのかもわかりません。
わからない部分を整理してから質問したほうが明確な回答が得られますよ。

で、カメラですが
よくあるパターンだとDirectShowを利用することが多い。
それからカメラの画像を処理して目標物のチェックを行う。
チェック結果によりロボットの制御を行い、何らかの対応をさせる。

ってな感じで回答になりますか?

Qおすすめのプログラミング言語を教えてください

おすすめのプログラミング言語を教えてください

理由とともに回答をお願いいたします。

ちなみに私はこれからプログラミング言語を覚えようと思っている初学者です。

Aベストアンサー

うーん?
プログラミング言語を覚えることが目的ですか?
そのプログラミング言語で何らかのソフトウェアを作ることが目的ではないのでしょうか?

言語によって得意/不得意があります。
例えばWebアプリケーションを作るなら、Java,Perl,PHP,Ruby,ASP.NETなどの言語を使うのが良いです。
Windowsアプリケーションなら、VB.NET,C,C++,C#.NETの方が良いです。
Flashでゲームを作るのならAdobe Flash(Action Script)になりますし、
機械を直接制御するならCやアセンブラを使います。

何をしたいかによってお勧めが変わってきますので、やりたいことを補足してください。

Q作成したプログラムファイルの管理を行うプログラムというものを学校の課題

作成したプログラムファイルの管理を行うプログラムというものを学校の課題で行っているのですが、
この課題の制作にあたって、手始めにファイルの保存と読み込みを行う関数を作ろうと思うのですが、ファイルを保存する関数(save)と読み込む関数(load)の作り方、ファイルポインタに格納する方法がわかりません。

現在の途中経過を示します。

#include <stdio.h>
#include <stdlib.h>
struct date {/*作成日付を格納*/
int year;/*年*/
int month;/*月*/
int day;/*日*/
};

struct record {/*レコード*/
char title[30];/*タイトル名*/
char stitle[50];/*副タイトル名*/
struct date adate;/*作成日付*/
char path[50];/*パス名(ファイルがどこのフォルダにあるか)*/
char category[30];/*分類*/
};

int save(struct record file)/*ファイルを保存する*/
{
FILE *fp;
int c;

fp = fopen("program.txt","w");
if (fp == NULL){
fprintf(stderr,"Cannot open file: composition.txt\n");
return -1;
}
fprintf("");
fclose(fp);

}

int load(struct record file)/*ファイルを読み込む*/
{

}

int main()
{
int num;
char file;

int sortnum;

printf("プログラムファイル管理プログラムへようこそ!\n");
do{
printf("何をしますか?\n");
printf("[0:終了、1:保存、2:読み込み]\n");
printf("入力してください: ");
scanf("%d",&num);
if(num==1 && num == 2){
printf("ファイル名を指定してください: ");
scanf("%s",&file);
if(num==1)
save(file);
if(num==2)
load(file);
}else printf("入力された数値が正しくありません。\n");
}while(num != 0)
return 0;
}

作成したプログラムファイルの管理を行うプログラムというものを学校の課題で行っているのですが、
この課題の制作にあたって、手始めにファイルの保存と読み込みを行う関数を作ろうと思うのですが、ファイルを保存する関数(save)と読み込む関数(load)の作り方、ファイルポインタに格納する方法がわかりません。

現在の途中経過を示します。

#include <stdio.h>
#include <stdlib.h>
struct date {/*作成日付を格納*/
int year;/*年*/
int month;/*月*/
int day;/*日*/
};

struct record {/*レコード...続きを読む

Aベストアンサー

テキストで保存する方法を考えたけど、あまり良くない。(スペースが含まれてるとfscanfはそこで区切ってしまい、以降は正常に読めなくなる)
これを防ぐにはそれなりの処理を考える必要があるけど、面倒ならバイナリで構造体ごと保存・読み込みをした方が楽。


それにしても、元のソースは誤りが多い。
main関数内をどう直したかぐらいはチェックしてほしい。


#include <stdio.h>

struct date {/*作成日付を格納*/
int year;/*年*/
int month;/*月*/
int day;/*日*/
};

struct record {/*レコード*/
char title[30];/*タイトル名*/
char stitle[50];/*副タイトル名*/
struct date adate;/*作成日付*/
char path[50];/*パス名(ファイルがどこのフォルダにあるか)*/
char category[30];/*分類*/
};

int save(struct record data, const char *fname)/*ファイルを保存する*/
{
FILE *fp;

fp = fopen(fname,"w");
if (fp == NULL){
fprintf(stderr,"Cannot open file: %s\n", fname);
return -1;
}
fprintf(fp, "title=%s\n", data.title);
fprintf(fp, "stitle=%s\n", data.stitle);
fprintf(fp, "date=%04d-%02d-%02d\n", data.adate.year, data.adate.month, data.adate.day);
fprintf(fp, "path=%s\n", data.path);
fprintf(fp, "category=%s\n", data.category);

fclose(fp);
return(0);
}

int load(struct record *pdata, const char *fname)/*ファイルを読み込む*/
{
FILE *fp;

fp = fopen(fname,"r");
if (fp == NULL){
fprintf(stderr,"Cannot open file: %s\n", fname);
return -1;
}
fscanf(fp, "title=%s\n", pdata->title);
fscanf(fp, "stitle=%s\n", pdata->stitle);
fscanf(fp, "date=%04d-%02d-%02d\n", &(pdata->adate.year), &(pdata->adate.month), &(pdata->adate.day));
fscanf(fp, "path=%s\n", pdata->path);
fscanf(fp, "category=%s\n", pdata->category);

fclose(fp);
return(0);
}


int main(void)
{
int num;
char file[256];

int sortnum;

struct record recdata;

printf("プログラムファイル管理プログラムへようこそ!\n");
do{
printf("何をしますか?\n");
printf("[0:終了、1:保存、2:読み込み]\n");
printf("入力してください: ");
scanf("%d",&num);
if(num==1 || num == 2){
printf("ファイル名を指定してください: ");
scanf("%s",&file);
if(num==1)
save(recdata, (const char *)file);
if(num==2)
load(&recdata, (const char *)file);
}else if (num != 0) {
printf("入力された数値が正しくありません。\n");
}
}while(num != 0);
return 0;
}

テキストで保存する方法を考えたけど、あまり良くない。(スペースが含まれてるとfscanfはそこで区切ってしまい、以降は正常に読めなくなる)
これを防ぐにはそれなりの処理を考える必要があるけど、面倒ならバイナリで構造体ごと保存・読み込みをした方が楽。


それにしても、元のソースは誤りが多い。
main関数内をどう直したかぐらいはチェックしてほしい。


#include <stdio.h>

struct date {/*作成日付を格納*/
int year;/*年*/
int month;/*月*/
int day;/*日*/
};

struct record {/*レコード*/
char ti...続きを読む

QVBではじめてプログラミングを始めてみようと思うのですが、おすすめの本

VBではじめてプログラミングを始めてみようと思うのですが、おすすめの本を教えてください

プログラミングをするのが初めてなのでわかりやすいものがいいです

できれば勉強しながら簡単なプログラムを作れるようなものがいいのですが

よろしくお願いします

Aベストアンサー

私はソコソコの年齢なので、最近の本はよく知りません。他の方の意見の方が参考になると思います。


私の場合、昔は本を買っておりました。
所持しているほとんどが「技術評論社」が出版している本です。
(まわし者ではありません^^;)

駆け出しのプログラマには「入門」と書いてある本であれば、それほど大きな差は無いと思います。
「高い」「安い」はそれほど関係無いです。(と勝手に思っております。)
現在の主流はVisualStudio2008ですので、それにさえ対応していれば問題ないと思います。

私の場合ですが、VBを覚えようと思い本を買おうと思った時、最初はケチってCDが付いていない最安値の付録CD無しを購入いたしました。すぐさま「CD付きを買うべきだった」と後悔いたしました。
本のサンプルコードを、全て手打ちしなければならなかったからです。はっきり言ってダルイです。飽きます。

プログラムを0(ゼロ)から打つより、簡潔で簡素なプログラムを改造した方が、断然覚えが早いです。
動くサンプルが最強だと思います。

1冊を2・3回繰り返すと、ネットで拾うことができる実例サンプルが読めるようになってきます。
さらに自分の興味分野が見いだせると思います。

それもまた自分なりのアレンジをして、思うような動きをしない場合、ここの掲示板に質問するようにしたらよいと思います。

--------------
ここからは今後
--------------
これ移行に買う本は、進む方向性によって異なってきます。
現在であればほとんどネットでサンプルが拾えるので、必要無いかもしれません。
(ExcelやAccessのVBA入門も、一冊ぐらいあってもよいかも?)

このころに重宝するのが「リファレンス本」と呼ばれる物です。
VB以外に、DB・ASP・JavaScript・AJAX などなど・・・
作る物によって異なりますが、ちょっとした調べ物をする場合に便利です。
辞書みたいな本です。入門者はあっても損はしませんが、中級になる頃に便利さが実感できます。
(この業界に20年近くいますが、今でも私はリファレンス本だけは購入します。)



最初に書いたように「まずは入門編を一冊(DVD付き)」を繰り返し行う事です。
その後に本屋に行って他の入門編を見たときに、自身で「必要な本/不要な本」というのが見えてくると思います。
(あくまで、私的感覚で物を申しております。)

私はソコソコの年齢なので、最近の本はよく知りません。他の方の意見の方が参考になると思います。


私の場合、昔は本を買っておりました。
所持しているほとんどが「技術評論社」が出版している本です。
(まわし者ではありません^^;)

駆け出しのプログラマには「入門」と書いてある本であれば、それほど大きな差は無いと思います。
「高い」「安い」はそれほど関係無いです。(と勝手に思っております。)
現在の主流はVisualStudio2008ですので、それにさえ対応していれば問題ないと思います。

私の場合で...続きを読む

Q任意のファイルを別のファイルにコピーするプログラム。

コマンドラインからコピー元、コピー先ファイル名を指定してファイルをコピーするプログラムなんですが…

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

main(int argc, char *argv[])
{
FILE *fp;
if ((fp = fopen(argv[0],"r") == NULL){
printf("ファイル%sが存在しません。\n",argv[0]);exit(-1);
}
if ((fp = fopen(argv[1],"w") == NULL){
printf("ファイル%sがコピーできません。\n",argv[1]);exit(-1);
}
fclose(fp);
}

どこか間違っているところがあるでしょうか?
ありましたら詳しく教えてもらえると幸いです。
少し自信がないのでわかる方はよろしくおねがいします。

Aベストアンサー

おそらくこのソースだとかなり問題があると思います。

1.argv[0]は自分です。
 test.exe aaa bbbとした場合、
 argv[0]="test.exe"
 argv[1]="aaa"
 argv[2]="bbb"
 となります。

2.fpが一つしか定義されていません。
 FILE *fp1, *fp2として二つ定義しそれぞれのポインタを格納しましょう。
 ⇒一回目のfopenのfpを二回目で又使ってしまっています。

3.fcloseはファイルごとに行いましょう。

4.これではファイルを開いているだけで、
 書き込んでいる作業がどこにもありません
 書き込むにはfwriteです。

簡単なフローとしては、
1.argv[1]をオープンして内容を読込み内部バッファに保存しておく。
2.argv[2]をオープンして内部バッファの内容を書き込む。
3.両方クローズする。
ですね。

これ以外にも方法はいろいろあります。
わからなかったら補足して下さい。


人気Q&Aランキング

おすすめ情報