下のプログラムなのですが、
色々と調べていくとfindnext();でフリーズしてしまうことがわかりました。
しかし、なぜフリーズするのかわからないのです。
dir.hの書いてある通りに使っているつもりなのですが・・・
助言お願いいたします。
仕事にいるので早急にお願いいたします。

ちなみにコンパイラはBC4.5++です。

/*****************************************************************/
test.c
/*****************************************************************/
#include <stdio.h>
#include <dir.h>
#include <string.h>

#define MAX 10

int main(){
structffblk*data;
inti;
charname[MAX];
charpath[MAX];

strcpy(path,"c:\\*.*");

if(findfirst(path,data,0)==0){
while(1){
strcpy(name,data->ff_name);
printf("%s",name);
if(findnext(data)!=0)break;
}
}

return 0;
}

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

A 回答 (4件)

ディレクトリはattribに指定しないといけません。


ヘルプを見てください。
または、dir.hを覗いてみて下さい。

#include <dir.h>
int findfirst(const char *pathname, struct ffblk *ffblk, int attrib);

ここの最後の引数attribをしていてください。
つぎのように定義してあるようです。
FA_DIRECディレクトリ
では、
    • good
    • 0
この回答へのお礼

お返事有難うございます。
何とかできるようになりました。
これって、コンパイラのヘルプに細かく載っているのですね。
大変有難うございます。

お礼日時:2001/11/25 09:58

朝から、Cの勉強とは関心ですネ!


10年前まではチョコチョコとCで書いていましたが、
今は引退しています。
自信はありませんが、

次の文
>strcpy(path,"c:\\*.*");

"c:\\*.*"をそのパス名にして下さい。

この回答への補足

お返事有難うございます。
やってみたのですが出来ませんでした。
Cドライブのルートなら
"C:\\"
でよろしいのでしょうか?

補足日時:2001/11/25 08:27
    • good
    • 0

#define MAX 10



この大きさは大丈夫でしょうか?
普通は
#define MAX 256
と大きめに書くようですが?

findnext();はANCI Cではないのでしょうか?
Win32 Nt専用です。

この回答への補足

有難うございます。
MAX値を多くすると動きました。

あと、ついでにですが、あるディレクトリ下にある、
ディレクトリ名を参照するにはどうしたらよいでしょうか?

findnext();はどうやらファイル名の取得の見みたいでしたので、
実際には、ディレクトリを取得したいのですが、何かありませんでしょうか?

補足日時:2001/11/25 07:53
    • good
    • 0

構造体がポインタで宣言されていて、実体がないからではないですか?


まずそこから修正してみましょう。
あとは、直値(0等)ではなく、定義された値を使いましょう。

この回答への補足

すみませんが、具体的にどういうことでしょう?

関数はディレクトリの値を返すだけのものだと思っていたのですが、
違うのでしょうか?

findfirst();から値を引き取ってきているのだと思っていたのですが・・・

ひょっとして、
findnext();はANCI Cではないのでしょうか?
ANSI Cだと聞いてやっているのですが違うのでしょうか?

もし違うのなら、ANCI Cでディレクトリ名や、
ファイル名を取得する方法があれば教えていただけませんでしょうか?

補足日時:2001/11/25 07:11
    • good
    • 0

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

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

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

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

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 をお奨めします:

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

Qtry{}catch(){}とデストラクタの関係を教えてください。

try-catchでメモリ確保を含むクラスをスローした場合、デストラクタはどの時点で働くのか、教えてください。たとえば、↓の使いかたは大丈夫でしょうか?

【1】
try{
 throw(CError(100, "エラー情報"));
}catch(CError& err){
 //ここでerrを参照しても問題ないのでしょうか?
}

【2】
try{
 CError err(100, "エラー情報");
 throw(err); // (1)
}catch(CError& err){
 //ここでerrを参照しても問題ないのでしょうか?
 //まだデストラクタはちゃんと動作するのでしょうか?
 //catchが呼び出し元のメンバであったりしても大丈夫なのでしょうか?
}

宜しくお願いします。

Aベストアンサー

【1】【2】どちらの場合も問題がありません。
コンパイラが必要に応じてerrオブジェクトのコピーを作成します。
デストラクタが呼び出されるタイミングはコンパイラに依存するところもあると思いますが、
例えばVC7.1では【2】は以下のように動作します。
(1) errオブジェクトのコンストラクタが呼び出される
(2) CErrorクラスのテンポラリオブジェクト(以下a)のコピーコンストラクタが呼び出される。
(3) errオブジェクトのデストラクタが呼び出される
(4) catch文まで到達
(5) aオブジェクトのデストラクタが呼び出される。

VC7.1では、【1】は以下のように動作します。
(1) errオブジェクトのコンストラクタが呼び出される
(2) catch文まで到達
(3) errオブジェクトのデストラクタが呼び出される。

コンパイラがオブジェクトのコピーを省略しているようです。

Q初心者が選ぶべきプログラミング言語は?

初心者が選ぶべきプログラミング言語は?

プログラミングの勉強を始めようと思っている超初心者です。この手の質問はこちらでもかなり検索すればヒットしますが、いまいち良くわからないのであえて質問します。

私のような初心者がプログラミングをはじめるときどの言語を選んだらよいでしょうか?
重視することは「将来性があって」「有用性のある」「標準的な」言語です。
言語選びにはしたいことの明確なビジョンがないといけないと言われますよね
私の目的はwindowsのフリーソフトのようなツールを作りたいことを第一目標にしています
後々は勉強の具合により目的も変えてゆきたいと思っていますが・・・

今現在の理解では・・・
基礎はCで、ビジネスではJavaで、WebはPHP、ぐらいしか解りません。どれもプログラミングの共通点を
有していて勉強すればある程度は共通知識を身につけられることも言われてはいますが
言語選びを間違えたくないなと思いまして。

Cをすこし勉強したときいつwindowsアプリのようなウィンドウをつくれるかももわかりませんでした。
現在自分ができることといったらExcelでVBAを組んで(かなり低レベルですが)自動化させる程度です。


ビジネスの世界、SEなどのプログラマーの世界で今注目されている言語や花形言語など、現在業界のオーバービューも知りたいです、詳しい方どうぞよろしくお願いします。

※個人的にはRubyが面白そうで、いろんなことができそうだなと思っています。

初心者が選ぶべきプログラミング言語は?

プログラミングの勉強を始めようと思っている超初心者です。この手の質問はこちらでもかなり検索すればヒットしますが、いまいち良くわからないのであえて質問します。

私のような初心者がプログラミングをはじめるときどの言語を選んだらよいでしょうか?
重視することは「将来性があって」「有用性のある」「標準的な」言語です。
言語選びにはしたいことの明確なビジョンがないといけないと言われますよね
私の目的はwindowsのフリーソフトのようなツールを作りたい...続きを読む

Aベストアンサー

私は10数年Windows用のクライアントソフトを開発していますが・・・

>重視することは「将来性があって」「有用性のある」「標準的な」言語です。



>私の目的はwindowsのフリーソフトのようなツールを作りたいことを第一目標にしています

が、合致しません。

WindowsというクライアントPC 用のアプリ開発自体が、「将来性がなく」「標準的でない」方向にあると思います。エンジニアの求人情報を調べればわかります。


それから、身につけたい技術の選び方として、「言語」はあまり意味がないです。
C言語をマスターしたからといって、WindowsやiPhoneで思い通りにソフト開発ができるわけじゃないです。

なので、最初は「どのプラットフォームの開発を身につけたいか」を決めた方が適切なアドバイスがもらえると思います。

Windows?iPhone?Webアプリ? SaaS系?などなど

プラットフォームが決まれば、今習得すべき言語は(本人の希望によらず)勝手に決まってしまいます。AndoroidならJavaとか。

「将来性」はともかく、Windowsアプリを作りたいのであれば、.NET Framework で VBでもC#でもお好きな方を使って開発するのが一般的ですが、それでもハード性能を100%使い切るばりばりの3Dゲームソフトを作りたいなら Win32API & C++ & DirectXでどうぞ、という感じです。その前にWindowsで3Dゲームを作ること自体が今となっては疑問です。XBOX + XNAの方がいいかもしれません。
将来性をもってゲームを作りたいなら、AndroidやiPhone で OpenGLアプリを勧めたいですね。

という感じで、言語を選ぶこととプラットフォームを選ぶことは別で、多くの場合プラットフォームが決まれば最適な言語をマスターするしかないということです。

私は10数年Windows用のクライアントソフトを開発していますが・・・

>重視することは「将来性があって」「有用性のある」「標準的な」言語です。



>私の目的はwindowsのフリーソフトのようなツールを作りたいことを第一目標にしています

が、合致しません。

WindowsというクライアントPC 用のアプリ開発自体が、「将来性がなく」「標準的でない」方向にあると思います。エンジニアの求人情報を調べればわかります。


それから、身につけたい技術の選び方として、「言語」はあまり意味がないです。
C言語を...続きを読む

Q{x = x>y ? x:y; return x;}

#include <iostream>
using namespace std;

inline int max(int x, int y){x = x>y ? x:y; return x;}

int main()
{
int num1, num2, ans;

cout << "2つの整数を入力して。\n";
cin >> num1 >> num2;

ans = max(num1, num2);

cout << "最大値は" << ans << "です。\n";

return 0;
}
の{x = x>y ? x:y; return x;}の部分の意味が解りません。

Aベストアンサー

inline int max(int x, int y){x = x>y ? x:y; return x;}
これを普通に関数で書くと

int max(int x, int y)
{
x = x>y ? x:y;
return x;
}

です。

x = 部分は右辺の結果が代入されます。これはわかりますよね。
x>y?x:y;
と書くと?より左にある条件式を判定し、その結果が真である場合は:で区切られた左側の値を、偽である場合は右の値を帰します。
x>yが真であればxを、偽であればyを返します。
それが、左辺値xに代入され、関数の戻り値として帰ります。

従って、2つの値をこの関数に入れると、大きいほうの値が帰ることになります。

Q僕は高校生なんですがプログラミング言語を将来のために学びたいと思っています。まだ初心者なので調べた結

僕は高校生なんですがプログラミング言語を将来のために学びたいと思っています。まだ初心者なので調べた結果RubyかPythonのどちらかにしようと思うのですがどちらがいいでしょうか?
なるべく多くの意見を参考にしたいです。

Aベストアンサー

入門書とか入門サイトとか少し読んでみて、直感的に「なんとかなりそう」と思った方。
悩んでないで、直感を信じてとにかく始めることです。


プログラムは大きく
・やろうとしていることをどうやって実現するか?
・それをプログラミング言語でどうやって記述するか?
の2つの要素があります。

前者の「やり方」は、言語によろ違いが少ないので、一度身に付くと、言語が変わっても応用が効きます。
後者の「書き方」は(多少似たところはあるものの)言語毎に違うので、「やり方」程は応用が効きません。

「最初の言語」はどうしても「やり方」「書き方」の両方を学習しなければなりません。
ですが、次からは「書き方」中心の学習になるので、「最初の言語」ほどは苦労しないはずです。


なので、とにかく早く始めて、「やり方」を身に付けていきましょう。
直感がはずれて、「この言語は無理」と感じたとしても、「次の言語」へは1から始めるよりははるかに楽になっているはずです。

QC言語のプログラムで#includeを使わず#includeだけで

C言語のプログラムで#include<math.h>を使わず#include<stdio.h>だけで√(sqrt)を表現することは可能でしょうか?

Aベストアンサー

ご自分で sqrt 関数を作れば可能です。
こんな感じでしょうか。

#include <stdio.h>

static double
sqrt (double s)
{
 double x = s / 2.0;
 double last_x = 0.0;

 while (x != last_x)
 {
  last_x = x;
  x = (x + s / x) / 2.0;
 }

 return (x);
}

int
main (int argc, char * argv[])
{
 printf ("sqrt (%f) = %f\n", 3.0, sqrt (3.0));
}

QC言語でプログラミングできるソフト(初心者)

大学1年で今年から始めてプログラミング(C言語)を学ぶものです。
今のところif文やfor文、関数などの基本をかじった程度なのですが
なんとか自分の家のパソコンでプログラミングを行いたいので、
何か良いソフトのようなものはないでしょうか?(有料でも構いません)

実際に文などが書けて、コンパイルし、結果を出力してくれるものです。
パソコン自体がまだ初心者なので、できればで良いのですが、分りやすいものをお願いします<m(__)m>

Aベストアンサー

#4さんも書かれてますが、大学であればunixかLinuxの環境だと思います。
なので、私もcygwinをお勧めします。windows上にuinxの環境を構築できて、gccという無料のコンパイラが利用できます。
それにunixやlinuxの環境構築の良い勉強になります。

簡単な導入の仕方がありますので試してみてください。
http://www.twcu.ac.jp/~osada/comp2a/cygwin.html
こちらも参考に。
http://programnet.hp.infoseek.co.jp/coloum/colum.html

Qchar AA[]{"全角文字"};から"全"という一字を取り出したい

 今晩は、Cの初心者です、宜しくお願いします。
 全角文字の入ったchar AA[]{"全角文字"};から"全"という文字一字を取り出す時にAA[0]とかくとエラーになります。
 どのようにしたら取り出せるのでしょう。
 ポインタを使う方法と使わない方法を教えて下さい。
 宜しくお願いします。

Aベストアンサー

お疲れ様です。

まずお伺いしたのがOSおよび開発するためのコンパイラです。

ロケール等の話は分かりませんが、昔のC言語で日本語を扱う場合には全角文字1文字で2個つのchar領域を使用していました。
(マルチバイト文字セットと言います。)

詳細は参考URLを参照の事。

windowsでVCと仮定した場合、charを使われていると言うことは、多分、shift-jis(シフトJIS)で文字列を扱っていると思われます。

結論として全角文字1文字だけを取り出したいという場合は、結局char2個分のデータを取り出す必要があります。

>char AA[]={'全','角'};

char AA[]="全角";
とし
>printf("%s%s\n" , AA[0],AA[1] ) ;

printf("%c%c\n" , AA[0],AA[1] ) ;
とすれば、「全」だけを表示する事が可能と思われます。

日本語を文字列で表示する為の文字コードについては
Shift-JISだけでなく、UnicodeやUTF・EUC・JISなどがあります。

もう少し詳しく記載してあるホームページはないか探してみましたが、ちょっと無理でした。

参考URL:http://marupeke296.com/CPP_charUnicodeWideChar.html

お疲れ様です。

まずお伺いしたのがOSおよび開発するためのコンパイラです。

ロケール等の話は分かりませんが、昔のC言語で日本語を扱う場合には全角文字1文字で2個つのchar領域を使用していました。
(マルチバイト文字セットと言います。)

詳細は参考URLを参照の事。

windowsでVCと仮定した場合、charを使われていると言うことは、多分、shift-jis(シフトJIS)で文字列を扱っていると思われます。

結論として全角文字1文字だけを取り出したいという場合は、結局char2個分のデータを取り出...続きを読む

Q初心者におススメのプログラミング言語は何ですか?

C C++ Java などの言語がありますが、中でも初心者(素人)が始めるにあたって一番おススメの言語は何ですか。

 教えてください。 よろしくお願いします。

Aベストアンサー

JavaScriptがオススメです。
理由は
1)ネット上に情報がたくさんある
2)開発環境の構築が容易
3)実行環境の構築が容易
4)実行時の動作がグラフィカルなので「達成感」がある
特に4は重要です。

必要に迫られない勉強は、やる気を継続させる事が結構難しかったりします。
コマンドプロンプト上で実行するような言語の場合、せっかく苦労してプログラムを組んでも
動作結果が地味な事が多いため、動いた事に対する感動が薄くなります。
これが積み重なると、途中で投げ出す結果につながりかねません。
その点、JavaScriptのようにダイアログを出したり色を変えたりといった
動作をさせる言語であれば、やる気の低下を抑える事が出来ます。

もっとダイナミックな動きをさせたいのであれば、
Delphi(Pascal)、C#、VBなどを使うのもいいでしょう。
どれも無料版の開発環境を配布しています。

将来プロになる事を考えているのであれば現在よく使われているPHPや
今後よく使われることになると思われるPython、Rubyなどを勉強するのもいいかもしれませんが
1つのプログラミング言語を身に付ければ他の言語に移るのは割と楽ですので
最初は勉強のしやすさを基準に選ばれると良いかと思います。

JavaScriptがオススメです。
理由は
1)ネット上に情報がたくさんある
2)開発環境の構築が容易
3)実行環境の構築が容易
4)実行時の動作がグラフィカルなので「達成感」がある
特に4は重要です。

必要に迫られない勉強は、やる気を継続させる事が結構難しかったりします。
コマンドプロンプト上で実行するような言語の場合、せっかく苦労してプログラムを組んでも
動作結果が地味な事が多いため、動いた事に対する感動が薄くなります。
これが積み重なると、途中で投げ出す結果につながりかね...続きを読む

Qブロックで };ついているのと }だけの差はなんでしょうか

皆様こんにちは^^
 さて、以下のプログラムの{}ブロックで質問があります。
 {ブロック+セミコロン};と{セミコロンなし}があります。
 };で最後にセミコロン;がついていますが!これは何の意味があるのでしょうか!?
 1時間ぐらい調べましたが、該当する項目がありませんでした。
 よろしくお願いいたします。
#include <stdio.h>
#include <string.h>

/* 学生の人数 */
#define GAKUSEI_NUM 3

/* 構造体の定義 */
struct TestKekka
{
char shimei[80];
int kokugo;
int sugaku;
int eigo;
};
int main(int argc, char* argv[])
{
int i,heikin;
/* 構造体の配列の宣言 */
struct TestKekka gakusei[GAKUSEI_NUM];

/* 学生のデータ入力する */
for (i = 0; i < GAKUSEI_NUM; i++)
{
printf("氏名:");
scanf("%s", &gakusei[i].shimei);
printf("国語の得点:");
scanf("%d", &gakusei[i].kokugo);
printf("数学の得点:");
scanf("%d", &gakusei[i].sugaku);
printf("英語の得点:");
scanf("%d", &gakusei[i].eigo);
printf("---------------\n");
}

/* 学生ごとの平均点を表示する */
for (i = 0; i < GAKUSEI_NUM; i++)
{
heikin = (gakusei[i].kokugo + gakusei[i].sugaku + gakusei[i].eigo)/ 3;
printf("%sの平均点%d\n", gakusei[i].shimei, heikin);
printf("----------------\n");
}

return 0;
}

皆様こんにちは^^
 さて、以下のプログラムの{}ブロックで質問があります。
 {ブロック+セミコロン};と{セミコロンなし}があります。
 };で最後にセミコロン;がついていますが!これは何の意味があるのでしょうか!?
 1時間ぐらい調べましたが、該当する項目がありませんでした。
 よろしくお願いいたします。
#include <stdio.h>
#include <string.h>

/* 学生の人数 */
#define GAKUSEI_NUM 3

/* 構造体の定義 */
struct TestKekka
{
char shimei[80];
int kokugo;
int sugaku;
...続きを読む

Aベストアンサー

for文、関数の{}はそれで完結しているので文法上 ; は必要ありません。
構造体 struct の {}は、 } の後に変数名(もしくは別名)を書くことも可能なので、終端を示す ; が必要になります。

いずれも、C言語の文法で定義されています。

struct TestKekka
{
 char shimei[80];
 int kokugo;
 int sugaku;
 int eigo;
};



struct TestKekka
{
 char shimei[80];
 int kokugo;
 int sugaku;
 int eigo;
} testkekka; ← 変数名

もしくは、

typedef struct TestKekka
{
 char shimei[80];
 int kokugo;
 int sugaku;
 int eigo;
} TESTKEKKA; ← 別名

など。


人気Q&Aランキング

おすすめ情報