C言語なら俺に聞け! Part 112
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2005/08/08(月) 01:32:01質問する前には最低限検索を。
GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
C言語なら俺に聞け! Part 111
http://pc8.2ch.net/test/read.cgi/tech/1121657911/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
0002デフォルトの名無しさん
2005/08/08(月) 02:07:250003デフォルトの名無しさん
2005/08/08(月) 03:30:15計算量がもっとも少ない双方向リストのソートアルゴリズムは何か
教えてもらえないでしょうか。
よろしくお願いします。
0004デフォルトの名無しさん
2005/08/08(月) 03:35:45いったんmallocで配列作ってそれを、qsort
そのあとリストを作り直す
大きさにもよるが速度と汎用性でピカイチだこれ
0005デフォルトの名無しさん
2005/08/08(月) 09:36:290006デフォルトの名無しさん
2005/08/08(月) 09:37:46あまりわからないのか。そうかそうか。
0007デフォルトの名無しさん
2005/08/08(月) 09:52:11ここは標準C言語のスレです。
書籍、宿題、コンパイラなどの使い方などはそれぞれ該当スレへ、
初心者丸出しの質問は初心者歓迎の質問スレへ、
その他、他言語の質問、日記などは適宜移動してください。
http://pc8.2ch.net/test/read.cgi/tech/1118072681/
0008デフォルトの名無しさん
2005/08/08(月) 12:48:51scanf()で取得した文字列をhogeに入れ、atoi()したいのですが、
この場合、atoiに失敗した(数値に直せない)場合も、atoiに成功して戻り値が0の場合も、どっちも0が返ってきてしまいます。
今はstrcmpでマッチ文字列を0、00、000(ryとforでループさせて調べるようにしていますが、
もっと簡単な方法があれば教えてください。
VS.NET、gccを使っています。
0009デフォルトの名無しさん
2005/08/08(月) 12:56:41ここは標準C言語のスレです。
書籍、宿題、コンパイラなどの使い方などはそれぞれ該当スレへ、
初心者丸出しの質問は初心者歓迎の質問スレへ、
その他、他言語の質問、日記などは適宜移動してください。
http://pc8.2ch.net/test/read.cgi/tech/1118072681/
0010デフォルトの名無しさん
2005/08/08(月) 13:09:59strtol
0011デフォルトの名無しさん
2005/08/08(月) 13:16:060012デフォルトの名無しさん
2005/08/08(月) 13:39:25ポインタ変数には文字列は入らない訳だが。
文字列が入っている領域へのポインタ値を入れるべきだ。
0013おれ ◆dHe9wXXwgk
2005/08/08(月) 13:57:59文字列の取得にscanf()は辞めたほうがいいと思われ
というのは古いのか?
それと、>>12にもあるが
*hogeの宣言でだけでなく、mallocなりでメモリをアロケートしなくちゃむりぽ
小規模コードなら、配列で世伊部?
0014デフォルトの名無しさん
2005/08/08(月) 16:15:52実はJava/Perl/C#から移転してきて、ポインタについてよく分かっていませんでした。
このサイトを参考にもうちょっと考えます。
ttp://www9.plala.or.jp/sgwr-t/lib/strtol.html
>>13
そうだったんですか…知りませんでした。
ttp://f1.aaa.livedoor.jp/~pointc/log70.html
こう書けば良いようですね。fgets(buf, sizeof(BUF_SIZE), stdin);
メモリの動的確保についてですが、ググっでもすでにchar str[256]するようなソースしか見つからず
入力ストリームの文字数は代入するまで取得できないようですね。。
趣味レベルなので、今はstrの末端に\0を代入することにして、正しい取得方法は引き続き調べようと思います。
0015デフォルトの名無しさん
2005/08/08(月) 16:18:08エーッ、マジっすか?
てっきり横着者の手法だと。。。
回答ありがとうございますm(_ _)m
0016デフォルトの名無しさん
NGNG0017デフォルトの名無しさん
2005/08/08(月) 18:10:46char *hoge;
はどう違うのでしょうか?
0018デフォルトの名無しさん
2005/08/08(月) 18:14:000019デフォルトの名無しさん
2005/08/08(月) 18:14:08002017
2005/08/08(月) 18:14:380021デフォルトの名無しさん
2005/08/08(月) 18:28:09自分は
char* hoge;
が好き。
その上で、
char* hoge, *fugo;
は書かず、必ず
char* hoge;
char* fugo;
と書くようにしてる。
0022デフォルトの名無しさん
2005/08/08(月) 18:32:39で?
002317
2005/08/08(月) 18:33:37ってかけないんだ しらなかった
0024デフォルトの名無しさん
2005/08/08(月) 18:48:53int j;
int k;
だるー
0025デフォルトの名無しさん
2005/08/08(月) 18:49:55書けるけど、
char *hoge;
char geho;
と同意になる。
char* hoge, geho; だと、どっちもポインタに見えて厄介でしょ。
002623
2005/08/08(月) 18:53:13char* って、キャラ型のポインタ宣言じゃなかったんだ
いつも char *hogeでやってて使ったこと無いからしらんかったよ
0027デフォルトの名無しさん
2005/08/08(月) 18:53:18そのいい加減な変数名もだるー
0028デフォルトの名無しさん
2005/08/08(月) 18:59:300029デフォルトの名無しさん
2005/08/08(月) 19:00:390030デフォルトの名無しさん
2005/08/08(月) 19:11:06なんか理由あるの?
0031デフォルトの名無しさん
2005/08/08(月) 19:13:57fortranはIからNで始まる変数名は整数型と決まっていた。
その頃からの流れで、Iterationの頭文字でもあることから
basicやCでも未だにi一文字の変数名が幅を利かせている。
0032デフォルトの名無しさん
2005/08/08(月) 19:14:360033デフォルトの名無しさん
2005/08/08(月) 19:25:07003434
2005/08/08(月) 19:50:47ファイル読み込みの時に1行ずつファイル名を書いて読み込ませるのが、とても面倒臭く苦しんでおります。
ファイル名に数字を入れてループ文を使い一気に読み込ませる方法があると聞きましたが詳しいやり方がわかりません。
すみませんが、教えてください。
0035デフォルトの名無しさん
2005/08/08(月) 19:53:35書いてるまんま
0036デフォルトの名無しさん
NGNGそのファイルの命名に、規則性があれば、いくらでもやりようがあるけど。
003734
2005/08/08(月) 19:57:51for(int i=0;i<10;i++)
{
ファイル読み込み("a"+i+".txt");
}
のようにやってみたのですがうまく行きません。
まいりました・・。
0038デフォルトの名無しさん
2005/08/08(月) 19:58:460039デフォルトの名無しさん
2005/08/08(月) 19:58:52君は阿呆なのか?
0040デフォルトの名無しさん
2005/08/08(月) 19:59:08知ってるけど?それで?
0041デフォルトの名無しさん
2005/08/08(月) 19:59:470042デフォルトの名無しさん
2005/08/08(月) 19:59:53始めてみた
0043デフォルトの名無しさん
2005/08/08(月) 20:00:190044デフォルトの名無しさん
2005/08/08(月) 20:00:27しかもfor-statementで変数宣言ですか
0045デフォルトの名無しさん
2005/08/08(月) 20:00:55ベーシックとかスクリプト系ではよくみかけるな
0046デフォルトの名無しさん
2005/08/08(月) 20:01:10それは別に問題ないだろ
0047デフォルトの名無しさん
NGNGとりあえず、入門書の一冊でも読んでください。
0048デフォルトの名無しさん
2005/08/08(月) 20:01:360049デフォルトの名無しさん
2005/08/08(月) 20:01:45どういう意味なの?
0050デフォルトの名無しさん
2005/08/08(月) 20:02:31文字列編集だよ
0051デフォルトの名無しさん
2005/08/08(月) 20:02:45005234
2005/08/08(月) 20:02:57そのsprintfについて少し調べてみます。
0053デフォルトの名無しさん
2005/08/08(月) 20:05:53処理系によってスコープ範囲が違うからあまり使わないようにしてます。
>>51
初期のころはfor-statementが出てきたところのスコープの末尾まで。
改定された規格ではforの中だけ。
未だにこれ引きずってる処理系はあります。
0054デフォルトの名無しさん
2005/08/08(月) 20:10:33>初期
for(int i=0;i<10;i++)
{
...
}
for(int i=0;i<10;i++)
{
...
}
これがエラーになるのはどう考えてもバグだろw
改定だぁ? はぁ?
0055デフォルトの名無しさん
2005/08/08(月) 20:10:55そうです
005634
2005/08/08(月) 20:14:32皆さんの討論にすらついて行けません・・・。
とにかく"a0.txt"と"a1.txt"と"a2.txt"をループ文で一気に読み込めればよいのです。
一番簡単な方法を教えてください。
くだらないと思った人は無視してください。
身勝手な申し出ですみません。
0057デフォルトの名無しさん
2005/08/08(月) 20:16:01そのファイル名を使う!
0058デフォルトの名無しさん
2005/08/08(月) 20:16:12sprintfだっていわれてるだろ
0059デフォルトの名無しさん
2005/08/08(月) 20:18:53char filename[256];
for(int i = 0; i < 10; ++i)
{
sprintf(filename, "a%d.txt",i);
fp = fopen(filename, "r");
;
fclose(fp);
}
0060デフォルトの名無しさん
NGNG改定されたのってC++の話でしょ。
0061デフォルトの名無しさん
2005/08/08(月) 20:25:49006234
2005/08/08(月) 20:26:01ありがとうございます。
自分の知らないプログラムを見ると、そんな手があったか〜と毎度思ってしまうほど鮮やかです。
毎度と言えるほどプログラムを書いた事はありませぬが。
本当にありがとうございました!!
0063デフォルトの名無しさん
2005/08/08(月) 21:18:230064デフォルトの名無しさん
2005/08/08(月) 21:29:31>>63
>>63
0065デフォルトの名無しさん
2005/08/08(月) 21:30:370066デフォルトの名無しさん
2005/08/08(月) 21:34:440067デフォルトの名無しさん
2005/08/08(月) 22:23:190068デフォルトの名無しさん
2005/08/08(月) 22:35:540069デフォルトの名無しさん
2005/08/08(月) 22:55:24ありました
0070デフォルトの名無しさん
2005/08/08(月) 22:57:41正規表現でどうしろっていうの?
自分で抜けって事?
>>69
過去形なのはどういう意味?
0071デフォルトの名無しさん
2005/08/08(月) 23:03:41char* path = (ファイルパス)
char html[MAX_HTML];
char url[MAX_URL]
char *link_begin, *link_end;
FILE* fp;
fp = fopen(path, "r");
fread(html, sizeof(char), MAX_SIZE-1, fp);
fclose(fp);
link_begin = html;
while((link_begin = strstr(link_begin, "href=\"") != NULL) {
link_begin += 6;
link_end = strchr(link_begin, '\"');
*link_end = 0;
strcpy(url, link_begin);
*link_end = '\"';
}
(目的の処理)
link_begin = link_end+1;
}
適当に書いてみた。
007271
2005/08/08(月) 23:05:30ミス。括弧が足りなかった。
while((link_begin = strstr(link_begin, "href=\"")) != NULL) {
0073デフォルトの名無しさん
2005/08/08(月) 23:09:210074デフォルトの名無しさん
2005/08/08(月) 23:14:57007571
2005/08/08(月) 23:16:46恥かくだけだからもうやめるわ
0076デフォルトの名無しさん
2005/08/08(月) 23:42:28うちも書いて欲しいから
めっちゃ応援してる
頑張って書いてくれ
0077デフォルトの名無しさん
2005/08/09(火) 00:08:48/*ノーワーニング、ノーエラーなら彼女がよりを戻しに来る*/
//"href=\""があるか調べる
char *ishref(char *str)
{
int len[2], i, cmp;
char *ret;
len[0] = strlen("href=\"");len[1]=strlen(str);
cmp = -1;
for(i=0;i+len[0]<len[1]&&cmp!=0;i++){
cmp = strcmp("href=\"", str);
if(cmp==0){
ret = str+i+len[0];
}else{
ret = NULL;
}
return ret;
}
void folink(FILE *fo, FILE *fhtml)
{
char ss[256];
char *p[2];
while(fgets(ss, 256-1, fhtml) != NULL){
if((p[0]=ishref(ss))!=NULL){
p[1]=p[0];
while(*p[1]!='\"')p[1]++;
*p[1]='\0';
fprintf(fo, p[0]);
}
}
}
0078デフォルトの名無しさん
2005/08/09(火) 00:11:45だった・・・
もう駄目だな。。
0079デフォルトの名無しさん
2005/08/09(火) 00:19:420080デフォルトの名無しさん
2005/08/09(火) 00:21:03読むと失恋する
0081デフォルトの名無しさん
2005/08/09(火) 00:23:110082デフォルトの名無しさん
2005/08/09(火) 00:40:19涙忘れるソース
■ このスレッドは過去ログ倉庫に格納されています