[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/09 10:52 / Filesize : 232 KB / Number-of Response : 957
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け(入門篇) Part 18



1 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 06:39:50 ]
C言語の入門者向け解説スレです。
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
C言語なら俺に聞け(入門篇) Part 17
pc11.2ch.net/test/read.cgi/tech/1185286631/

教えて欲しいのではなく丸投げしたいならこちらへ
C/C++の宿題を片付けます 94代目
pc11.2ch.net/test/read.cgi/tech/1185452895/

522 名前:デフォルトの名無しさん [2007/09/06(木) 02:48:24 ]
struct node *hoge(struct node* a)
{
struct node *b;
    b = a;
    a = NULL;
 free( b );
 return a;
}

free関数の形式を調べてみるとvoid free(void *ptr);と書いてありました
ttp://www.bohyoh.com/CandCPP/C/Library/free.html

つまり、上記の関数を実行すると、引き数で渡されたポインタaがNULLを代入される前に指していた領域を開できるということでしょうか?

自分で調べてみて「たぶんあっているな。」とは思ってもどうしても確信できなくて不安になってしまいます。みなさんはそんなことありませんでしたか?(このレス二つ目の疑問です)

523 名前:デフォルトの名無しさん [2007/09/06(木) 04:23:10 ]
適当な結果を標準出力に出力しつつ時々
y/n を聞いてくるコマンド ques が
あったとします。y/n を検知して
代わりに y を入力してくれる
プログラムを書きたいのですが、
何をキーワードに検索してよいのか
すらわかりません。パイプで検索したのですが
何か違う感じでした。
よろしくお願いします。


524 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 07:33:36 ]
>>522
・できる。
・根本的にポインタを理解できていればそんなことはないと思う。

>>523
他に標準入力する項目がなく、quesが確実に標準入力を利用しているというのなら、
yes | ques
でOK。

525 名前:デフォルトの名無しさん [2007/09/06(木) 10:22:16 ]
>>524
すいません。C言語でやりたいのです。
それと質問に応じて no と答える場面もあります。
よろしくお願いします。


526 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 11:01:35 ]
>>525
それなら、パイプで間違ってないと思う。
コマンドの標準出力/標準エラー出力を監視しながら特定のパターンを認識したら、
コマンドの標準入力に対して、yまたはnを投げる。

>何か違う感じでした。
何を期待しているか知らないが、コンソールアプリでは
WindowsのGUIアプリのように、入力待ちになったとかのイベントが
飛んできて、そこに処理を記述するわけではない。
実装はどうしても泥臭くなると思うが。

527 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 11:03:40 ]
ファイル操作について質問なのですが、
もし現在の日付をfprintf("%d %d %d %d %d %d\n",local->tm_year・・・以下略
こういう風にファイルに保存したとしますよね。
このファイルを読み込むとき、
fscanf("%d%d%d%d%d%d",&year,・・・以下略という風に読み込んだとき、
何故yearという変数にはしっかりとyearで保存した数字が格納されるのですか?
説明下手ですみません。

528 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 11:07:05 ]
fprintf("%d %d %d %d %d %d\n",local->tm_year・・・
で書き込むと当然、
2007 09 06 ・・・
となるから、fscanf("%d%d%d%d%d%d",&year,・・・で読み込むときは
空白か改行まで読まれるので
2007
09
06
・・・
と順に読み込まれる

529 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 11:08:05 ]
なぜって言われても、それが fscanf という関数の機能なんだし。
どういう結果になると思ってた?

530 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 11:10:00 ]
なるほど・・・左上から順に変数に格納されるんですね。それなら呼び出す
順番に気をつけないとメチャクチャになりますね。分かって良かった。
ありがとうございました。



531 名前: mailto:sage [2007/09/06(木) 16:45:10 ]
すいません。gccの拡張命令について知りたいのですが
どこかに命令一覧が載ってるサイトってありますか?

532 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 16:52:09 ]
配列を引数として関数にいれて、関数でその配列の中身を表示しておいて
mainでその関数を100回くらいまわしたら
値がかわってくるんだけど何が原因だと思われますか?

配列は20要素で
引数は4つ使ってます。

533 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 16:56:09 ]
>>532
そりゃプログラムのバグでしょ
具体的にコード見せてくれないとそれ以上はわからん

534 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 17:09:10 ]
void makemake(---){ (これをmainと思ってください)
double ma[120][20];
double h1[20],h2[20],n[120];
int num;

fileinput(h1,h2,num);
for(i=0;i<120;i++){
n[i]=fmake(ma[i],h1,h2,num);
}
}

そしてfmake関数に渡します
double fmake(double a[20],double b1[20],double b2[20],int n){
int i;

for(i=0;i<20;i++){
printf("b1:%lf b2:%lf",b1[i],b2[i]);
}

}

まー一部なんでわかりにくいかもしれませんが。
fmake関数のprintfで20ループくらいまでは
きちんと表示されるんですけど途中でnanとかおかしな数字が表示されるんです。



535 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 17:10:21 ]
not a number

536 名前:532 mailto:sage [2007/09/06(木) 17:13:30 ]
534ですけどお願いします。

537 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 17:25:07 ]
そのファイルがおかしいんじゃないの

538 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 17:26:57 ]
>>536
思わず笑ってしまった。
>>535の not a number は>>534の nan を指してる。

NaN (Not a number)、日本語だと非数。

浮動小数点演算で、0除算など計算結果が正しく求められない計算を
したときに、値が正常でないことを示す特別な値が格納される。その値のこと。

繰り返しはまったく同じものを表示しているわけではないみたいだけど、
fileinputで読んできた値がすでにおかしいんじゃないの?

539 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 17:45:24 ]
>>534
fileinput をでっちあげて動かしてみたが、まったく問題ない。
省略した部分がおかしいと思われ。

540 名前:532 mailto:sage [2007/09/06(木) 17:46:27 ]
ファイル入力が間違ってるんじゃないかって指摘するってことは
プログラムはあってるってことですか
ありがとうございます。

どうしようもなくなったら直接fmakeにb1,b2のファイルいれますわ。



541 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 17:49:45 ]
>>540
プログラムもなにも、挙げられた断片だけでは何もしないコードに見え
る。fmake()は何も返してないし。


542 名前:532 mailto:sage [2007/09/06(木) 17:53:22 ]
正規分布のプログラムなんすよ。
double a[20],  データ120X20
double b1[20],  20次元の平均
double b2[20],  20次元の分散
int n      平均・分散の組。
式は書くの大変だから省いてるだけです。

543 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 18:02:25 ]
予想ではたぶんその式が悪い

544 名前:532 mailto:sage [2007/09/06(木) 18:04:15 ]
double fmake(double a[20],double b1[20],double b2[20],int n){
int i;

for(i=0;i<20;i++){
printf("b1:%lf b2:%lf",b1[i],b2[i]);
}

以上

545 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 18:06:14 ]
わからなければ計算したり配列弄るごとに中身出力してみ

546 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 18:30:27 ]
どこが悪いかわかんないのに、なんでそこが悪いと思うのか理解できない。

547 名前:デフォルトの名無しさん [2007/09/06(木) 19:15:12 ]
このソースがコンパイルできないんですけど
どこに問題があるんですかね?
コンパイラはgcc3.3.6です。
ttp://www8.uploader.jp/user/vipprog/images/vipprog_uljp00020.txt

548 名前:532 mailto:sage [2007/09/06(木) 19:33:26 ]
>>532て書いてるんですけど。
式はあってるんだよ確認ずみだから。
入力のプログラムがあやふやだからここで聞いただけ。

549 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 19:35:12 ]
はいはい。コンパイラのバグかなんかじゃねえの。

550 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 19:39:09 ]
そろそろ荒らし化しそうな予感



551 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 19:48:25 ]
こんなアホ相手にするお前ら優しいな

552 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 19:48:45 ]
よく言われる

553 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 19:51:32 ]
>>547
配列の宣言の仕方とsizeの扱い直せばいけると思う

554 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 19:53:07 ]
>>553追加でコンパイルするだけならsizeはそのままでもいいかも
連投スマン

555 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 20:18:46 ]
どんどん本性が出てきたな

556 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 21:39:02 ]
>>510 が、もう見てないだろうから、書いてみる
#include<stdio.h>

int main(void){
int x, y, width=3, height=4;

for(y=0;;y++){
for(x=0;x<width;x++) printf("+---");
printf("+\n");
if(y>=height) break;
for(x=0;x<width;x++) printf("| "" "" "); // コピペ用
printf("|\n");
}
return 0;
}

557 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:38:24 ]
殆どのネットゲームのBOTは C言語で開発されてるんでしょうか?
サイトありましたらおしえてください m)_ _m)

558 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:43:18 ]
無い

559 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 23:16:50 ]
www.google.co.jp/

560 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 10:46:15 ]
>>559
ありがとうございました



561 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 12:55:50 ]
ネトゲのBots全てがCで作成されているかは知らんが
Cで作成できないことはない。
まぁ開発にあたっては、Cの知識だけでなく、それ以上の多くの知識が求められます。

562 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 14:31:57 ]
UWSCあたりならすぐに書けそうだな。

563 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 16:02:02 ]
関数は自分で積極的に作ったほうがいいですか?
それとも既存のものの効率的な組み合わせにこだわったほうがいいですか?

564 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 16:59:44 ]
既存のものの効率的な組み合わせをする関数を自分で積極的に作ったほうがいい

565 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 19:00:20 ]
>>564
ありがとうございます。なるほど!積極的に作ります

566 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 19:21:22 ]
グローバル変数として宣言する場合と、staticを付けて関数内で宣言する場合は
どういう違いがあるんでしょう?いくつかの説明文見たところ自分では同じように
思えるんですが、グローバル変数にstaticを付けるプログラムの例を見かけたので気になりました。

567 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 19:27:15 ]
static を付けないグローバル変数 → 他のファイルからでも参照できる
static を付けたグローバル変数 → 他のファイルからは参照できないが、同じソースファイル内ならどの関数からでも参照できる
static を付けた関数内の変数 → 他の関数からは参照できない

間違って書き換えたりしないように、見える範囲をなるべく最小限にする方が良い。

568 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 19:40:10 ]
>>567
ありがとうございます、アクセスできる範囲に違いがあるんですね。
つい値を保持できる期間ばかりに目が言ってたみたいです

569 名前:デフォルトの名無しさん [2007/09/07(金) 23:03:28 ]
入力された文字列が正しい文字列かを判断するプログラムなんですけど

#include <stdio.h>
#include <string.h>

int getflg(char wd);
main()
{
int n;
char word;
printf("文字入力:");
scanf("%s",&word);
n=getflg(word);
printf("flg=%d",n);
}
int getflg(char wd)
{
int flg=0;
if ( strcmp(wd,"あいうえお")==0 ){
flg=1;
}

return flg;
}

これだとエラーがでるのですがどうすればよいのでしょうか;;

570 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 23:06:22 ]
>char word;
>printf("文字入力:");
>scanf("%s",&word);

え?w



571 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 23:08:53 ]
>>569
「文字」ではなく「文字列」だから

#include <stdio.h>
#include <string.h>

int getflg(char *wd);
main()
{
int n;
char word[20];
printf("文字入力:");
scanf("%s",word);
n=getflg(word);
printf("flg=%d",n);
}

int getflg(char *wd)
{
int flg=0;
if ( strcmp(wd,"あいうえお")==0 ){
flg=1;
}
return flg;
}

だね

572 名前:569 [2007/09/07(金) 23:13:04 ]
>>570
すいません

>>571
文字だと&が必要で
文字列だと&は必要ないということですかね?

あと*wdにするのはなんでですかね?汗

573 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 23:18:20 ]
>>572
>文字列だと&は必要ないということですかね?
必要ない

>scanf("%s",word);
>if ( strcmp(wd,"あいうえお")==0 )
文字列同士の比較をしたいわけでしょ

char wd だと1文字だけしか渡せない、文字列として渡したいならポインタとして渡すしかない
char *wd は文字列のポインタを渡している

574 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 23:30:21 ]
#include <stdio.h>
#include <string.h>

int getflg(char *wd);
main()
{
int n;
char word[20];
printf("文字入力:");
scanf("%s",word);
n=getflg(word);
printf("flg=%d",n);
}

int getflg(char *wd)
{
return !strcmp(wd,"あいうえお") ? 1 : 0;
}

575 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 23:34:11 ]
>>534
> double ma[120][20];
これでスタックフレームを何byte消費しているか理解しているか?

static double ma[120][20];
static double h1[20]
static double h2[20]
static double n[120];
にしてみろ

これで結果がお前の予想通りになったなら
コンパイラはお前の予想通りには動かないということを知っておけ


576 名前:569 [2007/09/07(金) 23:35:04 ]
>>573
char wdだと1文字だけなんですか?

577 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 23:41:55 ]
>>575
> これでスタックフレームを何byte消費しているか理解しているか? 

たった、18,9Kじゃん。


578 名前:569 [2007/09/07(金) 23:47:17 ]
>>576をちと言い換えたいんですが、

int getflg(char wd[])
と違いは何かありますか??

579 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 23:52:06 ]
>>578
int getflg(char wd[]);

int getflg(char wd);
の違いが理解できない奴はCをする資格が無い

VBかJavaScriptあたりで妥協しておくことをお勧めする


580 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 23:54:25 ]
理解できないっていうか、こういう基本的なところをネットで訊きながら進めるのって、効率悪すぎだろ。
入門書でも買えばいいのに。



581 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 00:14:43 ]
Cでは文字列変数というのはなくてバイト(char)の配列として扱っているんだよね
ほかの言語ではまずありえないことだけど

582 名前:569 [2007/09/08(土) 00:33:22 ]
>>580
基礎的なHPをいろいろ探してみてきたが

int getflg(char *wd);
これだと、ポインタによる引渡しで

int getflg(char wd[]);
これだと、wdに文字列を直接代入する的なものですか?

583 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 00:33:43 ]
haskellもそうじゃなかったっけ

584 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 00:34:39 ]
>>582
いや、ややこしいことに
int getflg(char *wd);

int getflg(char wd[]);
は同じ

585 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 00:38:23 ]
>>582
C FAQのポインタあたりを一通り読んでみるとか。

www.kouno.jp/home/c_faq/

586 名前:581 mailto:sage [2007/09/08(土) 00:38:56 ]
>>582
ちがいます

Cではchar wd[]とchar *wdはほぼ同じ扱いです

587 名前: mailto:sage [2007/09/08(土) 00:41:32 ]
でも配列とポインタだと&かましたときの値が違うんじゃないの?

588 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 00:45:14 ]
関数の宣言で使用する場合は同じ(ポインタと解釈)。

589 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 01:04:12 ]
>>586
ちがいます

Cでは関数の引き数の宣言において、char wd[]とchar * wdは全く同じ扱いです。

590 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 01:10:48 ]
char wd[10]
とか書くとまた変わって来るからややこしい。



591 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 01:45:54 ]
int getflg(char *wd); も
int getflg(char wd[]); も
int getflg(char wd[10]); も
int getflg(char wd[42]); も一緒

592 名前:デフォルトの名無しさん [2007/09/08(土) 02:30:12 ]
すみません、質問です。C言語でmallocによる動的な領域確保の勉強をしています。
char型の領域を動的に確保してそこにコマンドライン引数のargv[i]を格納していきます。

void main(int argc, char *argv[]){
  int i;
  char *hikisu;

  for(i=0; i<argc; i++){
    hikisu[i] = (char *)malloc(sizeof(char));
    memset(hikisu[i], NULL, sizeof(char));
    strcpy(hikisuu[i], argv[i]);
  }
}

これでコンパイルが通らないのですが、何が悪いのかよくわかりません。
ご教授お願いします。


593 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 02:38:44 ]
>>592
動的確保以前のポインタの勉強をしなおせ。
--
// インクルードファイルを適切にインクルードしていない
void main(int argc, char *argv[]){
// mainの戻り値型はintにするべき
// 中括弧は別の行に書くのが一般的
  int i;
// 一文字変数はインクリメンタルサーチしにくいからお勧めしない
  char *hikisu;
// ポインタ変数は、ポインタ一個しか保持できない。引き数を複数保持したいなら、これではダメ

  for(i=0; i<argc; i++){
    hikisu[i] = (char *)malloc(sizeof(char));
// malloc()の引き数はバイト数。これでは1バイトしか確保できない
    memset(hikisu[i], NULL, sizeof(char));
// malloc()したエリアをmemset()で潰してしまうのはナンセンス(一部に妄信者はいるが)
// つーか、引き数が無茶苦茶
    strcpy(hikisuu[i], argv[i]);
// これも引き数が間違っている
  }
}
--
まぁ、取り敢えずこの辺にしておいてやるかw

594 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 02:44:46 ]
>>592
stdlib.hがincludeされてない。
strcpy(hikisuu[i], argv[i]);
「hikisuu」はどっから出てきた?(タイプミス?)

この2つ直すととりあえずコンパイルは通るかもしれない。(コンパイラ次第)
が、落ちる可能性が高いな。

ていうかコンパイルのエラーを書け。

595 名前:デフォルトの名無しさん mailto:age [2007/09/08(土) 21:00:46 ]
Javaにはメソッドのコメントの書き方で、
/**
@param
@return
*/
のようなのが決まっていて、これでHTMLのドキュメントを自動作成できますが、
Cにはそのようなものはありますか?

596 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 21:03:28 ]
つ[Doxygen]

597 名前:595 mailto:age [2007/09/08(土) 21:25:58 ]
レスありがとうございます。
できるだけ標準的なものを使いたいのですが、そのDoxygenというのはよく使われていますか?
もしJISやISOやその他の標準化団体の制定した書式があるようならば、教えて欲しいのですが。

598 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 21:28:38 ]
標準化はされてない

デファクトスタンダードには近いかも

599 名前:デフォルトの名無しさん [2007/09/08(土) 23:08:08 ]
戻り値で成功か失敗かの判定だけ必要なとき、
成功は0で、失敗は-1で返すのがいいんでしょうか?
古いCの関数はこれが多いですよね。
成功は1で失敗は0にすると、判定側でif(!func()){ printf("error"); }
のような書き方ができるので、これの方が便利な気もするのですが、
どっちがいいんでしょうか。

600 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 23:16:04 ]
>>599
古いCの関数っていうか、unixのシステムコールだろ。



601 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 23:24:16 ]
>>599
俺は自分でSUCCESSとFAILUREをdefineして使うのが好き。
SUCCESSが1でも0でもif(func!=SUCCESS)と書く。

この辺は好みじゃね?

602 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 23:40:14 ]
シンプルに0か0以外がいいよ。
いろいろ値が定義してあると、読むのに負担がかかる。

単純なTRUE,FALSEでも、0以外と0になっているかとか、定義が一箇所かとか気にする必要あるし。
いまやってる仕事なんて、RTN_OKとRTN_ERRだけかと思ってたら、RTN_NODATAとか返してたり返した無かったり
するし。

603 名前:デフォルトの名無しさん [2007/09/08(土) 23:55:20 ]
あるディレクトリにある、大量のファイル(ファイル名は***1.dat、***2.dat、***3.datと1000個ぐらい続く)
を順番に読み込みたいのですが、どのようにすれば良いのでしょうか?
通常のファイルを開く方法(fopen)では、指定ファイル名をしてforループで回して変更するとかいう事が出来ない
みたいなので困っています。どなたかご教授よろしくお願い致します。

604 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 23:58:01 ]
普通に一個ずつ順番に読めばいいんじゃないの?

605 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 23:58:21 ]
>>603
OSのAPIに頼ってディレクトリのファイル名一覧を作る。
で、順番にfopenか何かで開く。

606 名前:デフォルトの名無しさん [2007/09/08(土) 23:58:49 ]
ファイルシステムを直接読めばいいのでは?

607 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 23:59:52 ]
ファイル名が連番になってるのならforループで舞わせばいいい。

608 名前:デフォルトの名無しさん [2007/09/09(日) 00:00:30 ]
つ system

609 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 00:00:39 ]
>>603
ファイル名が規則的なら、、ループで回して処理できるよ。

610 名前:デフォルトの名無しさん [2007/09/09(日) 00:10:34 ]
age



611 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 00:31:10 ]
***1.dat、***2.dat、***3.dat てことは連番だな

612 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 00:42:52 ]
int i;
FILE *fp;
char filename[12];
for (i = 1; i <= 1000; i++) {
sprintf(filename, "***%d.dat", i);
fp = fopen(filename, "r");
以下略

613 名前:603 [2007/09/09(日) 00:50:17 ]
>>612
どうもありがとうございます。
sprintfという関数を知りませんでした。
非常に助かりました。

614 名前:デフォルトの名無しさん [2007/09/09(日) 12:21:33 ]
すみません 初心者です。
この最後のFor文は何をしているのですか?
よろしくお願いします。

int wk1;
char DateT[10+1];
char bufs[128];

DateT[0] = "2007/10/01"
memset( bufs, 0x0, sizeof(bufs) );
memcpy( bufs, DateT+ 5, 2 );
wk1= atoi(bufs); wk1-= 1;

for( i=6; i>=5; i--, wk1/=10 )
DateT[i]= (char)((wk1%10)+'0');

615 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 12:31:14 ]
10 月を 09 月に変えてるんじゃね?

616 名前:デフォルトの名無しさん [2007/09/09(日) 12:33:45 ]
月の値、01〜12を00〜11に置き換えている。

617 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 12:37:52 ]
>614
とりあえずそのコード、コンパイル通らなくない?
質問するくらいだから自分で書いたコードじゃないんだろうけど、あんまり参考にしたくないコードだと思う。
で、for 文限定だと

短い答え:数値を文字列に変換している。
もうちょっと長い答え:
wk1 % 10 で wk1 の一の位の数値を得る。
これに '0' ('0' の文字コード値を足すと 0 なら '0' に 1 なら '1' と数値→文字の変換が出来る。
wk1 /= 10 で十の位が一の位に移って繰り返し。

618 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 12:51:37 ]
>>614
?? DataT[0] = "2007/10/01"
そいつは、通らねえよ。

それにしても、俺の現場にあるソースに似てるwまさかww



619 名前:sage [2007/09/09(日) 13:47:36 ]
>>615
>>616
>>617
>>618
どうもありがとうございました。助かりました。
私の知り合いが解析しているソースを
出来ないなりに私も手伝おうかと思って頭から調べているときに
ひっかかった次第です。
自分はもう少しCの勉強が必要ですね。orz






620 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 13:50:39 ]
恥ずかしいんでsageます。
失礼しました。




621 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 20:40:55 ]
2chのスレッドの仕組みについても学んでください
sageで書き込んでもスレッドは下がりません

622 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 21:54:44 ]
いまリストでキューを実現しようと考えてるのですが、うまくデータを入れることができません
どうすれば改善できるか見てもらえないでしょうか?

www.dotup.org/ C言語ってコメント入れているファイルです






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<232KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef