C言語なら俺に聞け! Part 114
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2005/09/17(土) 00:26:58質問する前には最低限検索を。
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 113
http://pc8.2ch.net/test/read.cgi/tech/1125136478/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
00022
2005/09/17(土) 00:40:460003デフォルトの名無しさん
2005/09/17(土) 00:41:22うんこの汁の部分
http://ex11.2ch.net/test/read.cgi/news4vip/1126884499/
0004デフォルトの名無しさん
2005/09/17(土) 00:51:06乙!
0005デフォルトの名無しさん
2005/09/17(土) 01:19:210006デフォルトの名無しさん
2005/09/17(土) 01:19:590007デフォルトの名無しさん
2005/09/17(土) 08:05:57generic.hというものがあったそうな。
今でもTurboC++を落とせば手にはいるでしょう。
Cで使えるかはわからんけど。
0008デフォルトの名無しさん
2005/09/17(土) 08:19:39struct Node* prev;
struct Node* next;
FooType val;
};
って構造体を定義して、とか言うレベルの話でないの?
Mapはただの2分探索木(VC++の奴の場合)だから1次元配列でも実現できるし
0009デフォルトの名無しさん
2005/09/17(土) 09:13:55単純な2分木だと、最悪条件ができる可能性があって、
STLのset/mapはそれを許さないから。
で、結局どの実装も赤黒木になってると思った。
0010デフォルトの名無しさん
2005/09/17(土) 09:29:090011デフォルトの名無しさん
2005/09/17(土) 10:36:40べつにそれは、言語関係ないだろ。
Cで実現するためのテクニックの話じゃねーの?
0012デフォルトの名無しさん
2005/09/17(土) 12:55:55struct ListNode_* prev;
struct ListNode_* next;
char value[1]; /* 可変長 */
};
として、リストの関数内ではこれで扱ってるフリをし、
外では
struct ListNodeInt {
struct ListNodeInt* prev;
struct ListNodeInt* next;
int value;
};
とかを使うってのもできないこともない。
ただ、色々と型チェックできないのが欠点。
俺は、多少気持悪くても、テンプレート紛いのマクロの方が好きかな。
0013デフォルトの名無しさん
2005/09/17(土) 13:03:520014デフォルトの名無しさん
2005/09/17(土) 13:12:270015デフォルトの名無しさん
2005/09/17(土) 13:14:310016デフォルトの名無しさん
2005/09/17(土) 14:34:35http://seclan.dll.jp/c99d/c99d04.htm#dt19990726
0017デフォルトの名無しさん
2005/09/17(土) 14:37:080018デフォルトの名無しさん
2005/09/17(土) 15:57:24んなもん知っとるわ。
C89 も考慮して 1 を書いたんじゃ。
あと、そのページでは 1 引いてるけど、
offsetof(ListNode_, value) + sizeof (int) * num
のようにしたんでも構わない。
0019デフォルトの名無しさん
2005/09/17(土) 16:55:060020デフォルトの名無しさん
2005/09/17(土) 17:00:37んなもん知っとるわ。
C89 も考慮して 1 を書いたんじゃ。
あと、そのページでは 1 引いてるけど、
offsetof(ListNode_, value) + sizeof (int) * num
のようにしたんでも構わない。
0021デフォルトの名無しさん
2005/09/17(土) 17:11:23前スレの
>981
>realloc(0, size); realloc(p, 0); とかって書いてる奴は馬鹿。
それって結局名前と固定観念の問題だろうよ?
alloc(0,size);alloc(p,size);alloc(p,0);
と普通に書いてて、敢えてmallocやfreeなんて
余分な関数を使う奴が居るかねぇ?
0022デフォルトの名無しさん
2005/09/17(土) 17:26:15reallocはreallocであってallocでは無い。
名前と固定観念と言うが、
文脈を考えたらそれぞれを利用するのは当然だろ。
とりあえず、お前の書いたソースは、
人に見せられるような物ではないことも分かったからいいや。
0023デフォルトの名無しさん
2005/09/17(土) 17:28:250024デフォルトの名無しさん
2005/09/17(土) 17:52:49void god(void* info, void* res, ...);
info に何をしたいかに関する情報を入れて、
第3引数以降はそれに対応する引数を書けば、
res に答えが返ってくるんだ。
この関数1つで何でもできるように作ってあるから、
常にこの関数を使えばいいよね!
これ普通に使ってるから、
他の関数を使う奴なんていないよねぇ?
ってのがナンセンスなのと同じようなことだな。
0025デフォルトの名無しさん
2005/09/17(土) 18:19:27#include <stdlib.h>
#include <string.h>
struct student {
char number[20];
char name[20];
char shumi[20];
};
int main(int argc, char *argv[]){
int i, n=256, j=0, k=1;
FILE *fp;
char name[20];
char number[20];
char koumoku[20];
char s[201];
char word[200][200];
char *p1;
char *p;
struct student seito[100];
if(argc <= 1)
return 1;
if(strcmp(argv[1], "data")==0)
printf("file name:%s\n", argv[2]);
つづく。
0026デフォルトの名無しさん
2005/09/17(土) 18:20:580027デフォルトの名無しさん
2005/09/17(土) 18:21:13if(fp==NULL)
return(0);
while(!(feof(fp))){
fgets(s, 20, fp);
p=s;
i=0;
while(1){
p1=word[i];
while(!(*p==','||*p=='.')){
*p1=*p;
p1++; p++;
}
i++;
*p1='\0';
if(*p=='.')
break;
p++;
}
strcpy(seito[j].number, word[0]);
strcpy(seito[j].name, word[1]);
strcpy(seito[j].shumi, word[2]);
j++;
}
fclose(fp);
つづく。
0028デフォルトの名無しさん
2005/09/17(土) 18:21:560029デフォルトの名無しさん
2005/09/17(土) 18:22:26printf("調べたい項目を入力して下さい(number or name or shumi or end):");
scanf("%s",koumoku);
if(strcmp(koumoku, "number")==0)
while (k > 0) {
printf("名前を入力して下さい。(終了はend入力)");
scanf("%s", name);
k = strcmp(name, "end");
if (k != 0) {
for (j = 0; j < n && k != 0; j++) {
k = strcmp(name, seito[j].name);
if (k == 0)
printf("学籍番号は %s\n", seito[j].number);
}
if (k != 0)
printf("見つかりません\n");
k = 1;
}
}
else if(strcmp(koumoku, "name")==0)
while (k > 0) {
printf("学籍番号を入力して下さい。(終了はend入力)");
scanf("%s", number);
k = strcmp(number, "end");
if (k != 0) {
つづく。
0030デフォルトの名無しさん
2005/09/17(土) 18:23:290031デフォルトの名無しさん
2005/09/17(土) 18:25:58k = strcmp(number, seito[j].number);
if (k == 0)
printf("名前は %s\n", seito[j].name);
}
if (k != 0)
printf("見つかりません\n");
k = 1;
}
}
else if(strcmp(koumoku, "shumi")==0)
while (k > 0) {
printf("名前を入力して下さい。(終了はend入力)");
scanf("%s", name);
k = strcmp(name, "end");
if (k != 0) {
for (j = 0; j < n && k != 0; j++){
k = strcmp(name, seito[j].name);
if (k == 0)
printf("趣味は %s\n", seito[j].shumi);
}
if (k != 0)
printf("見つかりません\n");
k = 1;
}
}
else if(strcmp(koumoku, "end")==0)
k = 0;
}return 0;
}
これってどうなの?
0032デフォルトの名無しさん
2005/09/17(土) 18:28:41で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?
で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?
で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?
で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?
で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?
0033デフォルトの名無しさん
2005/09/17(土) 18:28:56極端に言えばそういうことだわな。
ってかオマエオモシロスwwwww
0034デフォルトの名無しさん
2005/09/17(土) 18:32:340035デフォルトの名無しさん
2005/09/17(土) 18:34:590036デフォルトの名無しさん
2005/09/17(土) 18:41:15どうなんでしょうね? 分かりません。
0037デフォルトの名無しさん
2005/09/17(土) 19:02:57>俺こんな関数作った。
>void god(void* info, void* res, ...);
reallocもmallocとfreeの関数ポインタを使って
定義可能だよね?
そういった意味では高階関数かもしれない。
>22
>お前がめんどくさがりなのは分かったが
Lazyじゃないとプログラマじゃないんだろう?
>文脈を考えたらそれぞれを利用するのは当然だろ。
それが頭が固いって言っている訳です。
常に既存文脈自体を疑わないと言語は進歩しない。
そんな頭が固い人が、えてして
「おい!おい!alloc一つで済んでる文脈に
なんでmallocとかfreeとかをわざわざ持ち込む
必要があるんだぁ???」
と叫ぶんじゃないでしょうか?
つまり何が効率的か?ではなくて
既存の文脈から「しか」判断出来ないように
なってはいないでしょうか?
0038デフォルトの名無しさん
2005/09/17(土) 19:15:29> Lazyじゃないとプログラマじゃないんだろう?
楽をするための努力は惜しまないのがプログラマ。
あらゆる点で怠惰なだけなのはタダのバカ。
> 常に既存文脈自体を疑わないと言語は進歩しない。
言語を進歩させるためにプログラム書いてるんじゃない。
ちゃんと動作して、動くものを作り、
また、場合によってはそのソースを
他人に引き渡すことも考えてプログラムを書くものだ。
自分世界に引きこもって自分言語で書いていいのは日用プログラマだけ。
0039デフォルトの名無しさん
2005/09/17(土) 20:06:12何がどうなんだよ
C勉強する前に日本語勉強してこい
0040デフォルトの名無しさん
2005/09/17(土) 20:20:01天才が故に既存の文脈を疑いすぎて、
自分しか理解できないコードを書くタイプ。
言語の進化自体は、意思を対象に分かりやすく伝える方向で、
進化するもんじゃないのかねぇ。
まぁ本人は分かり易いと思ってるのかもしれないけど。
俺みたいな低脳プログラマは可読性の高い方を支持させてもらうよ。
0042デフォルトの名無しさん
2005/09/17(土) 21:04:58各タブを\tに、各バックスペースを\bに、各バックスラッシュを\\に置き換えながら、
入力を出力に複写するプログラムを書け。
こうすれば、タブとバックスペースははっきり目に見えるようになる。
K&Rの問題ですけど、\bをgetchar()で入力確認って出来るんですか?
もしかしてUNIXとかならOKってことですか?
0043デフォルトの名無しさん
2005/09/17(土) 21:16:210044デフォルトの名無しさん
2005/09/17(土) 21:57:100045デフォルトの名無しさん
2005/09/17(土) 22:09:27そのK&Rの演習問題の回答は何処にありますか?
0046デフォルトの名無しさん
2005/09/17(土) 22:30:41while ( (c = getchar) != EOF ) {
switch( c ) {
case '\b': printf("\\b"); break;
case '\t': printf("\\t"); break;
default: putchar( c );
}
}
実際の動作は別にして、騙し騙しコードを書く知恵も必要です。
0047デフォルトの名無しさん
2005/09/17(土) 22:35:26コメントも無い、インデントも入ってない、処理の説明すらない
そんなソースを出されて、ただ一言「これってどうなの?」
質問の意味がわからんし、ソース読む気にもならんし。
お前の頭の方こそ「どうなの?」って聞き返したくなるわい
0048デフォルトの名無しさん
2005/09/17(土) 22:44:12> 各バックスラッシュを\\に置き換えながら、
がないぞ。
0049デフォルトの名無しさん
2005/09/17(土) 22:46:22while ( (c = getchar) != EOF ) {
switch( c ) {
case '\b': printf("\\b"); break;
case '\t': printf("\\t"); break;
case '\\': printf("\\\\"); break;
default: putchar( c );
}
}
すまそ
0050デフォルトの名無しさん
2005/09/17(土) 22:49:02『プログラミング言語Cアンサー・ブック』
ttp://www.amazon.co.jp/exec/obidos/ASIN/4320027485/
0051デフォルトの名無しさん
2005/09/17(土) 22:51:04#include<stdio.h>
#include<string.h>
int main(){
int i;
char t[256][3];
for(i=0;i<256;++i)sprintf(t[i],"%c",i);
strcpy(t['\b'],"\\b");
strcpy(t['\t'],"\\t");
strcpy(t['\\'],"\\\\");
while((i=getchar())!= EOF)
fputs(t[i],stdout);
}
0053デフォルトの名無しさん
2005/09/17(土) 22:53:31char が signed だと...
005453
2005/09/17(土) 22:55:100055デフォルトの名無しさん
2005/09/17(土) 22:58:070056デフォルトの名無しさん
2005/09/17(土) 23:04:07ごめん、関数コールだったorz
Ruby厨だから違和感感じなかった
0057デフォルトの名無しさん
2005/09/17(土) 23:06:55なんかかっこええ。
実用的じゃないとはいえそういうのも思いついときたいな。
005851
2005/09/17(土) 23:17:26×fputs(t[i],stdout);
○fwrite(t[i],1,2-!t[i][1],stdout);
ま、コンソールに出すのには問題ないから別に良いか
0059デフォルトの名無しさん
2005/09/17(土) 23:22:36いろいろ回ったんですが、ぱっとしない内容ばかりで。。。
「プログラミング言語で関数やメソッドを呼び出す際に、その関数やメソッドを実行するために渡さなければならない値のこと。」
っていう答えばかり。
0060デフォルトの名無しさん
2005/09/17(土) 23:23:41んなら、
int main(int argc, char **argv)
はい、具体例。
0061デフォルトの名無しさん
2005/09/17(土) 23:27:580062デフォルトの名無しさん
2005/09/17(土) 23:30:21printf("%d\n", hikisuu);
}
int main(void) {
func(10);
}
006359
2005/09/17(土) 23:36:13なるほど、
int main(void) {
func(10);
っていうのが、引数を返すって事なんですか?
で、
引数を設定してるのが、
void func(int hikisuu) {
printf("%d\n", hikisuu);
}
って事ですかね。
0064デフォルトの名無しさん
2005/09/17(土) 23:43:50006559
2005/09/17(土) 23:45:13混乱してきた。
0066デフォルトの名無しさん
2005/09/17(土) 23:46:48function (arg1, arg2) ;
などと呼び出していることが引数を渡していて、貴方方の言っている引数を返すという行為は
関数内部におけるreturn文の実行のことではないですか?
int function {
...
return [値] ;
}
0067デフォルトの名無しさん
2005/09/17(土) 23:53:53関数に渡す変数の値、て覚えときゃ十分。
また、関数は通常は1つの値しか返せないので、2つ以上返す場合は
ポインタ変数で渡す必要がある。
a = 4; b = 7;
x = sum(a,b); // x = 7
int sum(int a,int b) { return a+b; }
swap(&a,&b); // aとbの値を交換する。
void swap(int *p,int *q) { int tmp = *p; *p = *q; *q = tmp; }
うえの2つの違いが分かったらポインタも同時にばっちしです。
0068デフォルトの名無しさん
2005/09/18(日) 00:00:04using namespace int main std;
()
[ cout<
0069デフォルトの名無しさん
2005/09/18(日) 00:00:44007059
2005/09/18(日) 00:02:26なるほど、確かにそうですね。
って事は、
void func(int hikisuu)
int main(void) {
func(10);
}
void func1(int hikisuu) {
printf("%d\n", hikisuu);
}
ってやると引数の関係がわかりやすいですね。
こうなると、なんで"hikisuu"が引数の意味になるんですかね?
なんとなく、"10"っていう数字が引数に見えちゃう。
0071デフォルトの名無しさん
2005/09/18(日) 00:04:16勝手な用語を作るなよ。
0073デフォルトの名無しさん
2005/09/18(日) 00:08:44返さなきゃならないときにそういう方法をとるって意味だ、ボケ。
返さなくてもいいし、返さなきゃ不都合が起きるときに返すんだよ。アホか。
0076デフォルトの名無しさん
2005/09/18(日) 00:11:54ちゃんと初心者の本でも読み返した後で、だけど。
言葉なんてどうでもいいから、自分で足し算ゲームでも作って見るのが
一番の上達の近道だ。
007759
2005/09/18(日) 00:15:32まだまだ初心者だけど、今も本見ながら頑張ってるんで、よろしくお願いします。
もうすぐ、Cでコンパイラを開発しないといけないんですが、どんな事するんですかねー。
コンパイラとか開発された方いますか?
0078デフォルトの名無しさん
2005/09/18(日) 00:27:28コンパイラ・スクリプトエンジンのスレを一度見れ。
0079引数とはこういうもの
2005/09/18(日) 01:10:42例・・・ strcmp( str, "aaa"); この場合第1引数がstr 第2引数が文字列"aaa"
戻り値・・・ return (戻り値);
例・・・ return (0); この場合戻り値は0
*実例
int main(void); //引数がvoidの場合は引数なしと同じ
{
char str[255];
int rc; //エラー判定用の変数
scanf("%s",str); //配列strに文字を入れる
if ((rc = strcmp( str, "aaa")) == 0 ) { //配列strの値がaaaかどうかを判断して、戻り値をrcに格納
printf("aaaを入力しやがったなテメー!!!\n"); //↑の戻り値が0の場合はこの処理をする
} else {
printf("aaaを入力しろよボケ!!!\n");
}
return 0; //returnは()を省略できる
}
strcmpは実際以下の処理をしている
渡された第1引数と第2引数の値を比べる
等しい場合はreturn 0;で戻り値を0で返す、すると↑のソースで rc に0が入ることになる
等しくない場合は大きさを見て0以外の負の値もしくは正の値をreturnで返している
0080デフォルトの名無しさん
2005/09/18(日) 01:14:56よくこうゆう嘘を見かけるんだが
"(つけても意味がないが)つける事ができる" が正解
0081デフォルトの名無しさん
2005/09/18(日) 01:16:46そんな事より
>引数がvoidの場合は引数なしと同じ
どーよw
0082デフォルトの名無しさん
2005/09/18(日) 01:22:14void f (void) ;
さんしゅるいのぼいどおー
0083デフォルトの名無しさん
2005/09/18(日) 01:23:49returnに関しては初耳だな、てか今まで気にしてもいなかったが、考えてみると納得
まあ初心者に説明してるんだから、ざっくりでいいかなって
細かく説明しすぎるとまたこんがらがるし
0084デフォルトの名無しさん
2005/09/18(日) 01:25:37時々「指定されたネットワーク名は利用できません」が出るんですが・・・
一応エクスプローラーでは認識してるし、DirもOK。
(ネットワーク系のエラーは・・・多分無いはず)
ただそのフォルダには10万以上のファイルが存在してるんだけど・・・
(ローカルだと問題なし)
このファイル数が影響してるんですかね?
OSはWin2000Serv同士です。
もし原因知ってる方がいましたら教えてください。
0085デフォルトの名無しさん
2005/09/18(日) 01:25:390086デフォルトの名無しさん
2005/09/18(日) 01:26:51原因はスレも選べぬお前の頭
008784
2005/09/18(日) 01:28:160088デフォルトの名無しさん
2005/09/18(日) 01:28:56では初心者にも分かりやすいように簡素に説明してくださいよ、お代官様
0089デフォルトの名無しさん
2005/09/18(日) 01:29:21馬鹿につける薬は無いな。去れ。
0090デフォルトの名無しさん
2005/09/18(日) 01:30:27何を?
009184
2005/09/18(日) 01:30:57知らないなら無理にレス付けなくてもいいよ。
0092デフォルトの名無しさん
2005/09/18(日) 01:31:06まあいいや
つかvoidを引数として使う場合って引数なしと同じでいいんじゃん
0093デフォルトの名無しさん
2005/09/18(日) 01:33:590094デフォルトの名無しさん
2005/09/18(日) 01:34:150095猛勉強中(59)
2005/09/18(日) 01:34:33すっごいわかりやすいです!
ありがとうございます、テキストファイルに保存しておきましたw
こうみると、引数って言葉をしらなくても、知らない間にプログラム組む時に
使ってるんですねー。
けど、これでよりプログラムを組みやすくなったと思います。
ありがとうございます。
>>80
なるほどって感じです。
0096デフォルトの名無しさん
2005/09/18(日) 01:35:380097猛勉強中(59)
2005/09/18(日) 01:37:18と言う事は、voidとすることの意味は何なんですか?
0098デフォルトの名無しさん
2005/09/18(日) 01:37:33それこそウソじゃん?
使えんわけないじゃんか
※ 関数は一般に引数によって値を受け取り、returnで返却値を返すものですが、
中には引数が必要無い関数や返却値の無い関数も存在します。
そのような場合、「引数が無い」ことや「return値が無い」ことを
明示するために「void」は用いられます。
ぐぐったぞ
0100デフォルトの名無しさん
2005/09/18(日) 01:39:27main(void) == main()
0101デフォルトの名無しさん
2005/09/18(日) 01:45:48解釈の違いだ
voidが引数として使えないって言ってるのって、
呼ばれたほうの関数に引数として渡らないってことだな?
俺は記述として引数と同じ記述のことを言ってたわ
まあいいや
どうでもいいよ
電池キレタ
送ってくれよ
0102デフォルトの名無しさん
2005/09/18(日) 01:48:14気にするな
馬鹿には慣れてる
0103デフォルトの名無しさん
2005/09/18(日) 01:50:19別に気にしてない
プログラムはおまえのほうが上でも
俺のほうがイケメンだから気にしない
0104デフォルトの名無しさん
2005/09/18(日) 01:52:11引数に 60゚ を入れると 1/2 が戻り値として返ってくる
これでいいんじゃまいか
最初の理解は
0105猛勉強中(59)
2005/09/18(日) 01:52:28っていう本すごいいいっすね。
0106デフォルトの名無しさん
2005/09/18(日) 01:52:430107デフォルトの名無しさん
2005/09/18(日) 02:16:22宣言とか定義とか、正しく用語は使え。
0108デフォルトの名無しさん
2005/09/18(日) 02:21:200109デフォルトの名無しさん
2005/09/18(日) 02:22:15新規格の策定になら参加できるかもしれないけどな。
0110デフォルトの名無しさん
2005/09/18(日) 02:26:13すんません伍長殿
自分独学っすから宣言と定義以外で正しい用語とか知りません
0111デフォルトの名無しさん
2005/09/18(日) 02:27:23そういうやつは、他人に教えようとするな。
0112デフォルトの名無しさん
2005/09/18(日) 02:27:34教えたじゃねえか
無視しやがって
0113デフォルトの名無しさん
2005/09/18(日) 02:36:13パソコンと2チャンを用意する
聞きたい事を2チャンに書く
返事を待つ
0114デフォルトの名無しさん
2005/09/18(日) 02:54:35C言語の規格なんて長い時間かけてあちこち変更されて
きたものなので「何故どうして」を考えても無駄。
そういうものだと暗記しろ。
0115デフォルトの名無しさん
2005/09/18(日) 06:19:59sinの引数ってラジアン単位だろ?
0116トラックバック ★
2005/09/18(日) 07:03:33[発ブログ] superfree
http://2chplus.2ch.net/test/read.cgi/superfree/1126994613/l50
0117トラックバック ★
2005/09/18(日) 07:05:30[発ブログ] superfree
http://2chplus.2ch.net/test/read.cgi/superfree/1126994730/l50
0118デフォルトの名無しさん
2005/09/18(日) 07:52:500119デフォルトの名無しさん
2005/09/18(日) 07:55:46このスレッドで「test」って何だ、「test」って。
おいおいおいおいおい
0120デフォルトの名無しさん
2005/09/18(日) 08:43:080121デフォルトの名無しさん
2005/09/18(日) 08:55:22argv[]
0122デフォルトの名無しさん
2005/09/18(日) 08:57:38�d
0123デフォルトの名無しさん
2005/09/18(日) 10:03:03コンパイルしようとしたら
can't open:stdio.h :No such file or directory
とでます。
いままでコンパイルできたファイルもこれでできまくなりました。
もしかしたら環境変数を下手にいじくりまわしたせいなのでしょうか。
もしよかったら教えてください。
0124デフォルトの名無しさん
2005/09/18(日) 10:14:17そうかもね。
>もしよかったら教えてください。
個々のコンパイラや開発環境の話はスレ違いです。
もちろん>>120などもスレ違いです。
0125120
2005/09/18(日) 10:54:300126デフォルトの名無しさん
2005/09/18(日) 10:56:56自分でぶった切れ。
0127120
2005/09/18(日) 11:09:09ってファイルをstrlenで文字数取得して、拡張子とピリオドの分減らして
strlen(argv[1]) - 4 ってやったらファイル名が文字化けしちゃって・・
ドコが間違ってるのかわかんない
0128デフォルトの名無しさん
2005/09/18(日) 11:23:17スレ違いと言われても尚居座っているお前が判らない。
初心者スレ辺りでコードを晒せば誰か答えてくれるんでない?
0129デフォルトの名無しさん
2005/09/18(日) 11:23:22ポインタと変数が分かってないでしょ。
先頭アドレス(ポインタ)+文字列の長さ(拡張子分差し引き)
ってやってる?
0130デフォルトの名無しさん
2005/09/18(日) 11:42:38はきだめC/C++下級者の質問箱
http://pc8.2ch.net/test/read.cgi/tech/1124256027/l50
0131デフォルトの名無しさん
2005/09/18(日) 11:54:17この質問の仕方を見るに Windows 使いと判断する。
このスレ的には strcpy, strtok, strrchr, strncpy あたりを駆使としか言えないが、
環境依存でいいなら _splitpath という選択肢もある。
ただ、Windows で D&D して得られるファイル名は
短縮形(例えば あほばかまぬけ.txt → あほば~1.txt)な点に注意。
これ以上の話は自分で調べて、
分かんなかったら Win32API質問箱 スレで聞け。
0132デフォルトの名無しさん
2005/09/18(日) 11:57:24相手にするから居座るんだろボケ
0134デフォルトの名無しさん
2005/09/18(日) 12:07:25お前は相手にされなくても居座ってるようだけどなwww
0135120
2005/09/18(日) 12:07:300136デフォルトの名無しさん
2005/09/18(日) 12:16:17わかんねーくせに下手にでしゃべってんじゃねぞぼけ
0137デフォルトの名無しさん
2005/09/18(日) 12:16:52>ただ、Windows で D&D して得られるファイル名は短縮形
95、98はそうだったと思うけど、
NT、XPでは長いファイル名そのまま。
0138デフォルトの名無しさん
2005/09/18(日) 12:23:59テキストファイルの1行だけを削除することは、できるのでしょうか。
0139デフォルトの名無しさん
2005/09/18(日) 12:27:110140デフォルトの名無しさん
2005/09/18(日) 12:39:090141デフォルトの名無しさん
2005/09/18(日) 12:45:082.テンポラリファイルも開く。
3.ファイルから、テンポラリファイルへデータをコピーする。
4.削除したい行はコピーせずに飛ばす。
5.残りを全部コピーする。
6.両方ファイルをクローズ。
7.テンポラリから、元のファイルへ、ファイル全体を上書き。
おわり。
0142デフォルトの名無しさん
2005/09/18(日) 12:47:502.ファイルないデータを全部メモリ上へ読み込み。
3.ファイル閉じる。
4.同じファイルを上書きモードでオープン。
5.削除したい行以外を全部書き込む。
6.ファイル閉じる。
こうすればテンポラリいらんわ。
0143デフォルトの名無しさん
2005/09/18(日) 12:57:26メモリに全部読み込めないテキストファイルなんてない
ならばそれでも良いのかしら
0144デフォルトの名無しさん
2005/09/18(日) 13:02:10あー自分もそれで成績伸びたよー。良い本ですよね。
その後は先生が良書だって言ってたポインタ本で勉強してる。
いま猛勉強中なんですか?
頑張って下さい、お互い頑張りましょう。^^
0145デフォルトの名無しさん
2005/09/18(日) 13:13:380146デフォルトの名無しさん
2005/09/18(日) 13:14:15質問者ですか?
まだまだ夏ですね。
0147デフォルトの名無しさん
2005/09/18(日) 13:22:34(1)最初はこう書いてた
void get_foolist(int *count, struct foo **list);
(2)なんか汚いなあと思い始めて、こうしてみた
struct foolist {
int nelem;
struct foo **list;
};
struct foolist *get_foolist(void);
(3)しばらくして、あれ?これでいいんじゃないの?と思った
struct foo get_foolist(void);
私の少ない経験では(3)の方法を使っているプログラムを
見たことがないのですが、何か致命的な欠点でも
あるんでしょうか?
0148デフォルトの名無しさん
2005/09/18(日) 13:31:34別に何も
0149デフォルトの名無しさん
2005/09/18(日) 13:33:27ディスクがいっぱいの時にあぼーん
0150猛勉強中(59)
2005/09/18(日) 13:44:56そうですね、そういう感じがします。
とりあえず、俺は興味のある事に対して、どうしてそうなるのかっていう
考えを必ずしてしますので、覚えるべき所とそうでない所を割り切って、
勉強してりこうと思います。
>>144
ですよねー、基本中の基本っていいながら、スルーされがちな所をしっ
かりおさえてるから、自分に足りなかったとこと補える感じでいいです。
ポインタの本というのは、「C言語ポインタ完全制覇 」ってやつですか?
俺もこれよさそうとおもってたんですが、内容はポインタの事だけなん
ですかね?
0151デフォルトの名無しさん
2005/09/18(日) 13:46:46上書きでオープンするとサイズ0でしょ?
>>147
まず関数内でソースを開き、取得データも領域を準備しておかなければならなくなる。
3の戻りが関数内でアロケートしたメモリのアドレスを返すならそれでいけるが、
いろいろ制限がある。
すべて決めうちになるのは関数の再利用性がない。
もちろん、レジストリとか共通で利用するデータを使うならそれでいいが。
それかグローバル変数とかに格納すれば決めうちにはならなくなるが、
それだと関数の独立性がなくなり、複雑になると管理できなくなる。
0152デフォルトの名無しさん
2005/09/18(日) 13:50:23ディスク使ってるのが自分だけと思うな
エラー出たから消えました、と、エラー出たから更新できませんでしたじゃあ
被害の度合いが全然違うだろ
0153デフォルトの名無しさん
2005/09/18(日) 13:56:320154デフォルトの名無しさん
2005/09/18(日) 14:00:220155デフォルトの名無しさん
2005/09/18(日) 14:12:24よく本には「0が偽で、0以外が真」と説明されてるけど、
int型とか、unsined型とか、ポインタ型とか、float型とか、
特に変換とかかからず、個別の型ごとに判別されてるのですか?
C++みたいに、bool型に変換されてから判別されるみたいな
感じとは違うの?
0156デフォルトの名無しさん
2005/09/18(日) 14:12:47自分だけだとしても、途中でエラーになったら
トランザクションを復帰できない >142 は
危険ですな。
まあ >>141 も、折角だから
7. 元ファイルを一時的な別の名前に変更
8. 新ファイルを元ファイルの名前に変更
9. 元ファイルを削除。
までやって欲しいところ。
(システムによっては unlink/link が適切か)
0157デフォルトの名無しさん
2005/09/18(日) 14:13:14そうか。
ポインタだけ先頭に戻して、最後は消せばいいんだな。
消し方知らないけど。
0158デフォルトの名無しさん
2005/09/18(日) 14:17:10そのやり方はファイルをロックしておかないと。
>>155
実際なんでもいい。
ただfloatはだめだろ。
0159デフォルトの名無しさん
2005/09/18(日) 14:21:30戻り値はポインタじゃないと、リストの先頭部分が解放できなくなる。
あと、リストを作るなら、リストサイズも返して欲しいところ。
戻り値が0なら失敗、それ以外なら成功という感じで成否判定にも使えるし。
(ポインタがNULLかどうかを見てもいいんだけどね)
0160デフォルトの名無しさん
2005/09/18(日) 14:32:15もしかして最初の一件を値で返し、2件目以降はそのつどメモリ割り当てなわけですか?
それだと最初の一件目は開放しなくていいわけですが、
そんな非効率なことするんですか?
そういうやり方するならC++でも使ったらどうかと思うんですがね。
メモリサイズが大きくなると、オーバーヘッドの大きい
Windowsのメモリアロケートを使うことになるからめちゃめちゃ遅いよ
ヒープだけで済む小さいのならC標準ので1件ずつアロケートしても使えるが、
そもそも開放がめちゃめちゃ大変だ。
データが壊されたらそっから先は開放できなくなるし。
0161どりーむ
2005/09/18(日) 15:08:39うまい事いきません。
もし足りない所があれば助言よろしくおねがいします。
コード
struct MovieItem{
long callNo;
char title[50];
bool status;
int frequency;
MovieItem *next;
};
0162どりーむ
2005/09/18(日) 15:09:58貼り付ける場所間違えました^−^;
当方はC++ですので。
ではw
0163デフォルトの名無しさん
2005/09/18(日) 16:06:04>>141さん以下いろいろ教えてくださった皆様。
ありがとうございます。
実は、その場で、一行だけ削除する関数かなんかあればいい名と考えていましたが、
ないようで、
メモリを沢山食いそうで落ちてしまいそうな感じもあり、
テキストファイルの分割も考えに入れ、
教えていただいた方法で、やっていこうと思います。
ありがとうございました。
0164デフォルトの名無しさん
2005/09/18(日) 16:32:49いつまでも、こだわるようで申し訳ありませんが、
例えば下記プログラムなんかreallocだけでスッキリ
と分かりやすい、と思われませんか?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
char *jo;
jo = realloc(NULL,30 );
strcpy( jo, "Nissyは馬鹿じゃない、" );
jo = realloc( jo, 60 );
strcat( jo, "しかし、頭が固い!\n" );
printf( jo );
realloc( jo,0 );
return 0;
}
0165デフォルトの名無しさん
2005/09/18(日) 16:33:54思わない。最初のNULLをタイプするだけ無駄。
0166デフォルトの名無しさん
2005/09/18(日) 16:39:14jo=NULL;
とやってからループ内で1回だけ
jo = realloc( jo, size * i );
と書くんなら意味があるけどね。
size が0の時は開放のみなんだろうか?
0167デフォルトの名無しさん
2005/09/18(日) 16:48:26>size が0の時は開放のみなんだろうか?
C言語辞典にはそう書いてありました。
別の本にもmallocやfreeの代わりに使える。
が、
それは好ましくない…とは。
0168デフォルトの名無しさん
2005/09/18(日) 16:52:28解放にはその名の通りfreeがあるんだから
それ使った方がすっきりするしわかりやすい
0169デフォルトの名無しさん
2005/09/18(日) 16:53:510170デフォルトの名無しさん
2005/09/18(日) 16:54:07どう、こっちの方がもっとスッキリしない?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
char *po;
po = malloc( 30 );
strcpy( po, "確かに常識的ではない、" );
po = realloc( po, 60 );
strcat( po, "さらに、その上、馬鹿だ!\n" );
printf( po );
free( po );
return 0;
}
0171デフォルトの名無しさん
2005/09/18(日) 17:13:25void expand(struct vec *v, int n)
{
if (v->capacity < n)
v->data = realloc(v->data, v->capacity = n);
}
みたいのがあって、expand()はv->dataが0の場合にも呼ばれ得る、
みたいなケースなら、わざわざif()で分けるよりは
realloc()一本のほうがすっきりする、かも知れない。
0172デフォルトの名無しさん
2005/09/18(日) 17:20:01お前ならそう言い出すと思ったから、
おまえは俺ら常人とは違い、天才だと教えてやったろう。
天才は天才の集まる所でやっててくれ。何時までもウザイから。
0173デフォルトの名無しさん
2005/09/18(日) 17:26:39センスゼロ。
いいたい・やりたいことをいかにクリアに表現するか、そのためだけに
現在に至る言語の進歩があったと言っても過言じゃない。
「可能」「不可能」だけで言ったら、高水準言語なんてものはこの世に
いらなくなるんだよ。
「メモリを解放したい」んなら単にfree()と言え。それがそのものズバリ
であって、一番クリアだから。
realloc()は一般には「メモリを再確保する」するための関数だから、
そうしたいときに使え。realloc()をfree()やmalloc()の代わりに
使っているコードを見た人は、プログラマの真意をまず疑う必要が
出てくる。バグなのか、アホなのか、etc...
余計な手間がここで生じる。
0174デフォルトの名無しさん
2005/09/18(日) 17:26:42>>164の場合は同じ関数使ってるから、
文字の関係で綺麗にかかれているように見える”のかもしれない”けど、
>>170のソースの方が自然に理解できると思う。
>>164のソースは正直コメント無しでぱっと見たら、一瞬???と思うよ。
0175デフォルトの名無しさん
2005/09/18(日) 17:38:560176デフォルトの名無しさん
2005/09/18(日) 17:41:17ふつう、そういうのをしたかったら
そういう機能を持ったラッパー関数を作るんですよ
ライブラリの仕様変更にも追従できるし
0177デフォルトの名無しさん
2005/09/18(日) 17:43:34ソースを見渡したときに引数がないことが明示されていてわかりやすい。
0178デフォルトの名無しさん
2005/09/18(日) 17:53:16ANSI/ISO以前のいわゆるK&R Cにはプロトタイプが存在せず、
関数は
char *foo();
のように仮引数無しで宣言された。
ANSI規格においても、後方互換性の点からこのスタイルでの
宣言が認められ、その場合は(C++のように)「引数無し」
ではなく、古いC同様に「引数は任意であり型チェックはしない」
という意味とされた。そのため、「引数無し」を明示するために
別途voidが導入された訳だ。
0179デフォルトの名無しさん
2005/09/18(日) 17:53:20引数がこれの時はこうなって云々...
0180デフォルトの名無しさん
2005/09/18(日) 17:56:32なんでもsedやawkでやる人。
で、
head -10よりsed 10qの方が美しくわかりやすいと信じて疑わない。
0181デフォルトの名無しさん
2005/09/18(日) 18:09:52全ての会話が"ダァ"で成り立つと理解している
0182デフォルトの名無しさん
2005/09/18(日) 18:14:230183デフォルトの名無しさん
2005/09/18(日) 18:15:44「イエスサー」以外の言葉を話せないw
0184猛勉強中(59)
2005/09/18(日) 18:25:48なるほどです!
わざわざ返事くれてありがとうございます。
今日は、「ポインタ完全制覇」っていう本がいい感じだったんで、
読んでますー。
・配列の中身を参照する時に、a[i]とかするけど、この[]は配列とは全く無関係だ。
・Cには多次元配列は存在しない。
この二つはなかなか知られてないみたいですね。
0185デフォルトの名無しさん
2005/09/18(日) 18:31:41なんか、誤解を招く表現だな。
気をつけろよ。へんな理解の仕方すると、混乱するぞ。
0186デフォルトの名無しさん
2005/09/18(日) 18:32:19意味ワカンネ
a[i]が*(a+i)のシンタックスシュガーである つうこと?
>・Cには多次元配列は存在しない。
Cを書く人間なら全員知っているのでは?
・・・ああ。配列の配列を使ったことのない人もいるか
0187猛勉強中(59)
2005/09/18(日) 18:33:54これに対する説明が書いてないんですが、これってどういう事なんですかね?
多次元配列は存在しないなら、
word[256][256]
とかは何なんでしょう・・・
0188デフォルトの名無しさん
2005/09/18(日) 18:37:58多次元配列、これは二次元配列。
0189デフォルトの名無しさん
2005/09/18(日) 18:41:040190デフォルトの名無しさん
2005/09/18(日) 18:41:27説明もなくそんなわけわからん主張してるのか、その本?
結構有名だから、マトモな本かとおもっていたが、大丈夫かそれ?
ちなみに、俺は読んだことない。
>・配列の中身を参照する時に、a[i]とかするけど、この[]は配列とは全く無関係だ
無関係ってことはない。メモリ上の連続したエリアを配列として使用するときに[]を使う。
ちなみにこれは演算子です。
プログラミング言語には、同じものを表現するのに複数の異なる方法がある場合があり、
これをシンタックスシュガー(構文糖)という。
特に、Cでは、本来異なる概念である「ポインタ」と「配列」が、表現上同じように見えたり、
暗黙に変換されたりするシンタックスシュガーがある。
わかりやすいところでは、関数の引数で、
void foo(int a[])
こういう宣言方法があるが、これは配列を表していない。見た目は配列に似ているがこれは
void foo(int *a)
の別の記述法なだけ。
だからといって、a[] と *a が常に同じわけではないことに注意。
関数の引数の表現時にのみ発生するシンタックスシュガーがあり、いわばこれは特例だとい
うことをゆめゆめわするるべからず。
0191デフォルトの名無しさん
2005/09/18(日) 18:43:40読んで初めて知ったな。それ以外で驚いたことはなかった。
0192デフォルトの名無しさん
2005/09/18(日) 18:45:52読んで初めて知ったな。それ以外で驚いたことはなかった。
0193デフォルトの名無しさん
2005/09/18(日) 18:48:08それ、ちゃんと理由も書かれていたか?
かかれていなけりゃ、そりゃ糞本かもだな。
0194猛勉強中(59)
2005/09/18(日) 18:48:18二次元配列以上のものを多次元配列っていうんじゃないんですか?
本によっては、「Cでは多次元配列を定義できる」ってなってるし
いまいち理解に困ります。
配列の配列ってのはわかりますが、それは多次元配列(2次元配列)
とはいわないんですかね?
>>190
すっごいわかりやすいです。
テキストファイルに保存しときますw
いやー、まじでこのスレ良すぎる。
すごい人達全員にカテキョしてもらってるみたいだ。
0195デフォルトの名無しさん
2005/09/18(日) 18:48:58どうなんでしょう?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
//必ずポインタをNULLで初期化する安全第一のプログラマにとっては
char *jo=NULL;
jo = realloc(jo,30 );//と統一した書き方が出来る。
strcpy( jo, "Nissyは馬鹿じゃない、" );
//さらに、誤ってもう一度
jo = realloc(jo,30 );
//と、やっても悪影響はない。
//jo = malloc( 30 );と2回やると中味が消えてしまうけど。
jo = realloc( jo, 60 );
strcat( jo, "しかし、頭が固い!\n" );
printf( jo );
realloc( jo,0 );
//但し、これをもう一度やったらOUT!だけどね。freeも同じだけど。
return 0;
}
0196デフォルトの名無しさん
2005/09/18(日) 18:50:230197デフォルトの名無しさん
2005/09/18(日) 18:53:29うん君が正しいよ。目から鱗だ有難う。
0198デフォルトの名無しさん
2005/09/18(日) 18:54:02>>197は>>195宛な
0199デフォルトの名無しさん
2005/09/18(日) 18:58:57>・Cには多次元配列は存在しない。
ある意味では正しいが、ある意味では正しくない。
プログラミング言語(の実装)が多次元配列をどうあつかっているかは、いろいろあるが、
多次元配列の実装は2つに分類される。
(1)まとまったメモリエリアを一次元配列として確保し、それは次元の数だけ分割して多次元配列として使う。
Cはこの方法をとっていて、
int a[10][10];
int data = a[y][x];
は内部的には、
int a[100];
int data = a[ y * 10 + x]:
と実装されているかもしれないということ。
見方によってはこれはあくまでも一次元配列であり、「多次元配列は存在しない」といえるかもしれない。
(2)配列への配列をつかった表現。
int a[10], b[10];
int *p[2];
p[0] = &a[0]; p[1] = &b[0];
こうすることで、data = p[y][x] というアクセス方法が取れる。
この場合、a, と bは必ずしも、連続したメモリ上にある必要はなく、またサイズも同じである必要がない。
可変長配列をサポートする言語では、たいていこれに似た方法がとられている。
どっちも、結果的に多次元配列を扱うことはできている。
あとは何を基準に判断するかの問題。
0200デフォルトの名無しさん
2005/09/18(日) 18:59:12dat[a][b]ってのが配列の配列
dat[a]ってだけで意味があるところ(使う事ができる)なのがミソ
0201199
2005/09/18(日) 19:00:22○ それを次元の数だけ等分割して多次元配列として使う。
0202デフォルトの名無しさん
2005/09/18(日) 19:10:11コテハン名乗ってくれ。あぼーんするから。
0203猛勉強中(59)
2005/09/18(日) 19:11:10また保存行きですw
なるほどー、Cでは(1)の方を使うから、解釈の仕方で両方の意味に考えられると。
で、(2)の方なんですが、これは確実の多次元配列として扱えてますよね?
これがCで使えるなら、多次元配列としていいような気がします。
>>200
呼び方の問題なんですかねー、多次元配列として扱う>>199の(2)のようにできるなら
多次元配列は存在するといってもいい気がしますが、dat[a,b]っていう書き方ができ
ない以上、多次元配列は存在しないと言わざるを得ないって事なのかな。
0204デフォルトの名無しさん
2005/09/18(日) 19:11:23> realloc( jo,0 );
> //但し、これをもう一度やったらOUT!だけどね。freeも同じだけど。
freeの代わりに使うとしても、
jo = realloc( jo,0 );
と、常に戻り値を入れておけば事故もないんじゃないかな。
free したいのかどうかはコードなめないと分からないと思うけど。
0205デフォルトの名無しさん
2005/09/18(日) 19:11:25FORTRAN77 は dat(a, b) とか書けるけど、
dat(1, b) というのを関数に渡して、
その関数内部では列行列であるかのように扱うことができるぞ。
0206猛勉強中(59)
2005/09/18(日) 19:31:48けど、ノーパソと「Cの掟」と「ポインター完全制覇」もって、勉強はするんで、
質問したい事とかめっちゃたまるっぽいですが、そん時はよろしくお願いします。
0207猛勉強中(59)
2005/09/18(日) 19:35:390208デフォルトの名無しさん
2005/09/18(日) 19:36:49ウザいからもうこないでくれ
0209猛勉強中(59)
2005/09/18(日) 19:40:22おふぉな質問して申し訳ない。
0210デフォルトの名無しさん
2005/09/18(日) 19:50:09初歩的なことからわからないんです。
できれば、ファイル入出力だけでなく、C全般についてのいい本もお願いします
0211デフォルトの名無しさん
2005/09/18(日) 19:52:30>必ずポインタをNULLで初期化する安全第一のプログラマにとっては
安全第一というより、安直第一というべきだろう。
そういう、「0フィルしておけば安全」という間違った考えがバグを生みデバッグを困難にすることに繋がることも理解すべきだ。
0212デフォルトの名無しさん
2005/09/18(日) 19:55:45これは、展開図に直して連結リストで作ってみると考えたのですがどうでしょうか?
0213デフォルトの名無しさん
2005/09/18(日) 19:57:00> C言語で立方体のさいころをつくりたい
立方体さいころ組立工作機械の制御でもやるのかね?
0214デフォルトの名無しさん
2005/09/18(日) 19:58:08それはCの質問なのか?
アルゴリズムの質問のように読めるのだが。
#そうだとしても、言葉足らずではあるが。
0215デフォルトの名無しさん
2005/09/18(日) 20:00:42稜線のリストか何かを作りたいのか?
0216デフォルトの名無しさん
2005/09/18(日) 20:03:030217デフォルトの名無しさん
2005/09/18(日) 20:06:32以前就職活動で受けてた会社の入社テストに、さいころの展開図の問題があったんです。
内容はさいころをこの角度から見て(3面だけ見えてました)
展開図に直すと次のいずれになりますか?というものだったんですけども、、、。
それをC言語でつくってみようと思ったんです。
0218デフォルトの名無しさん
2005/09/18(日) 20:09:110219212
2005/09/18(日) 20:12:32今からアルゴリズムの本の「連結リスト」の部分をわからないなりに読んでみようと思います。
また、行き詰まったらすいませんが知恵を貸して下さい。
0220デフォルトの名無しさん
2005/09/18(日) 20:12:340221デフォルトの名無しさん
2005/09/18(日) 20:25:06int x[A][B]; の時に x[a][B-1] と x[a+1][0] のメモリが
連続してることが規格上保証されている、
ということを言いたいわけなのだろうか?
離してもいいものも作ろうと思えば作れるが、
言語的にパッと書けるものでもない、と。
もしくは、内部的には x[a][b] は (*x)[a * B + b] のように
一次元的なインデックスに直され、B という値が再利用されるので、
配列へのポインタで int(*)[B] のように
サイズが必要になってしまうというようなことを言いたいのか。
x を int** へ代入できないよ、全くの別物だよ、
というようなことが言いたいのか。
0222デフォルトの名無しさん
2005/09/18(日) 20:40:32サポートレベルが低いってことじゃまいか。
実際ただの(一次元)配列に比べて不便で扱いづらいでしょ、
例えばサイズの不定な多次元配列を扱ったりする場合に。
0223デフォルトの名無しさん
2005/09/18(日) 20:43:220224デフォルトの名無しさん
2005/09/18(日) 20:44:47行列にしたって、行や列が可変サイズじゃ意味がないし。
0225デフォルトの名無しさん
2005/09/18(日) 20:47:40サイズを問わない汎用的な関数を書きたい
というケースなら珍しくないでしょ?
0226デフォルトの名無しさん
2005/09/18(日) 20:53:020227デフォルトの名無しさん
2005/09/18(日) 20:55:41どこまでで限界が来るか、一度試してみたいな。
0228デフォルトの名無しさん
2005/09/18(日) 22:15:43分かってて言ってるんだろうが
ただの1次元配列の場合は
void vector_fn(int array[], int size)
のようにすればよい。
2次元配列の場合は
void matrix_fn(int array[], int m, int n)
のようにして、キャストを使い1次元配列の「ふり」をして渡すしかない。
で、関数内では1次元配列上で明示的にオフセット計算をする羽目になる。
マクロを使えば多少は楽になるとは言え、これは醜いし、不便だろう。
少なくとも、Cが多次元配列に対して良きサポートを提供しているとは
お世辞にもいえない。
0229デフォルトの名無しさん
2005/09/18(日) 22:24:28一次元配列でも、サイズ情報は別に渡さなきゃならないわけだし。
0230デフォルトの名無しさん
2005/09/18(日) 22:47:04ポインタテーブル作れってことだけど、面倒っちいわな。
void foo(int array[][B]) のようなこともできはするけど、サイズ固定だしな。
0231デフォルトの名無しさん
2005/09/19(月) 01:24:25char buf[128];
と
char *buffer = malloc(128);
ってどっちがいいんですか?
0232デフォルトの名無しさん
2005/09/19(月) 01:28:290233デフォルトの名無しさん
2005/09/19(月) 01:30:05ケースバイケースです。以上。
0234デフォルトの名無しさん
2005/09/19(月) 01:30:47普通は
・確保したバッファを呼び出し元の関数に返したい場合
・途中でバッファのサイズを拡張する可能性がある場合
・サイズが128ではなくてデカ過ぎる場合
はmallocを使う。それ以外なら上で良いでしょう。
0235デフォルトの名無しさん
2005/09/19(月) 01:48:56デバッグ用にprintfっぽく使えるメッセージボックスを作ろうと思ったんですが・・・
しょっちゅう呼び出す関数は確保→開放ってやると遅くなるかと思って・・・
>>234
ありがとうございます。
0236デフォルトの名無しさん
2005/09/19(月) 02:05:02デバッグでパフォーマンスは気にしない。
0237デフォルトの名無しさん
2005/09/19(月) 02:29:41メッセージボックスの表示のオーバーヘッドで
全く気にならないはずだ。
0238デフォルトの名無しさん
2005/09/19(月) 02:31:56メモリを保持してないポインタはNULLにしておくべきだろ
アロケート目的に使わないならfreeしないから関係ないけど。
>、「0フィルしておけば安全」という間違った考えがバグを生みデバッグを困難にする
それはどんな状況ですか?
そういう経験はしたことないんですけど。
0239デフォルトの名無しさん
2005/09/19(月) 02:59:03○NULL フィルしておけば、NULL フィルしないよりは安全
NULL フィルしたからといってバグがなくなるわけではないが、バグ検出に役に立つ。
NULL へのアクセスは大抵の環境で実行時エラーが出る。
NULL フィルしなかった場合は、偶然どこかの正常なアドレスを指してる可能性がある。
例えば、昔ポインタとして使われたスタック領域と同じところに
そのポインタが割り当てられたときなどは、可能性としては十分あり得る。
代入が直後にある場合などは必要ないと思うかもしれないし、
実際入れなくても現時点では何も問題はないが、
後の拡張やコードの移動により問題が発生する可能性はある。
NULL フィルのオーバーヘッドが気になるような状況でもない限り、
NULL フィルしといた方が安全ってのは正しい。
0240デフォルトの名無しさん
2005/09/19(月) 03:07:090241デフォルトの名無しさん
2005/09/19(月) 03:12:140242デフォルトの名無しさん
2005/09/19(月) 04:01:36詳しく
0243デフォルトの名無しさん
2005/09/19(月) 04:23:47それは紛らわしい書き方なんだが、
かといって正確に書こうとするとややこしい。
>>242
http://www.kouno.jp/home/c_faq/c5.html#0
0244デフォルトの名無しさん
2005/09/19(月) 04:54:06それはコンパイラに依存すると言うことですよね?
いちいちコンパイラの仕様を確認しなければならず、
違っていればやり方を変えなければならないと言うことですよね?
デバッグビルドとリリースビルドで動作が違ってくるって事ですよね?
デバッグビルドで取り除けるバグを、リリースビルドで見つけなければならないと言うことで、
デバッグが大変になりますよね?
0245デフォルトの名無しさん
2005/09/19(月) 04:57:230246デフォルトの名無しさん
2005/09/19(月) 05:07:280247デフォルトの名無しさん
2005/09/19(月) 05:09:44自分の主張と、間違ってると思われる発言を書けよ
自分のアホは指摘されたくないってか?
0248デフォルトの名無しさん
2005/09/19(月) 05:20:59もしかしてコンパイラに固定値突っ込ませてデバッグ後、
固定値突っ込むのをOFFにするオプションつけたデバッグビルドでもデバッグするのかな?
少しでもコードを取り除きたいならそれもいいかもね。
めんどくさ。
0249デフォルトの名無しさん
2005/09/19(月) 05:22:12ねーよwwwwwwwwwwww
0250デフォルトの名無しさん
2005/09/19(月) 05:25:000251デフォルトの名無しさん
2005/09/19(月) 05:33:59間違って上書きしちゃったどうしようdocだけ最インストできそうだけど
manはどうしようってなってる俺をどうにかしてみろよおめーら
0252251
2005/09/19(月) 05:36:21激しく誤爆しちまったじゃねえか
ついでにすれ違い覚悟で聞いてみるけど
どうしたら一番効率よくもどにもどせれる?
0253デフォルトの名無しさん
2005/09/19(月) 05:36:34VC5のコンパイラのバグでlongdoubleの演算最適化ができなかった。
リリースビルドでしか再現しなかった。
MSにコード渡してチェックしてもらったけど、コーディングの問題はないと言われた。
プラグマでその部分の最適化を外して対応した。
>>250
実務未経験プログラマから見れば必死に見えるのか。
0254デフォルトの名無しさん
2005/09/19(月) 05:40:57コピー元ファイル一覧をつくり、
delコマンドのバッチファイルにし、実行する。
0255デフォルトの名無しさん
2005/09/19(月) 05:49:50DOSでもいいけど
ファイル一覧をパイプでdelコマンドに渡すのが一番早いかな。
でも僕は使い慣れてないからテストしてからじゃないと実行しない。
テストするならバッチに書いたほうが確実で早いと。
VZエディタからのキーボードマクロにはお世話になった。
0256デフォルトの名無しさん
2005/09/19(月) 10:11:110257デフォルトの名無しさん
2005/09/19(月) 11:16:07ヘキサかよw
0258デフォルトの名無しさん
2005/09/19(月) 11:44:07ttp://aferieito.gozaru.jp/
0259デフォルトの名無しさん
2005/09/19(月) 11:50:560260デフォルトの名無しさん
2005/09/19(月) 11:56:050261デフォルトの名無しさん
2005/09/19(月) 13:44:52私は一回ありましたよ。
詳細は忘れてしまいましたが法線を求めた時にデバッグビルドだと0、
リリースビルドだとINFになりました。
数学関数の挙動に違いがあったとかそんな感じです。
0262デフォルトの名無しさん
2005/09/19(月) 14:02:44メモリリークを調べるため、
自作のアロケーターでmalloc関数群を隠そうと思います。
void *chk_malloc(size_t size, file, line) {
}
#define malloc(size) chk_malloc(size, __FILE__,__LINE__)
こんな感じです。
この場合、
int (*f)() = malloc;
の様に値として代入が発生した場合は関数マクロは効力が発揮できませんが、
この場合でもchk_mallocを代入するように細工する方法はないでしょうか。
#define malloc chk_malloc
とすると fileとlineの情報が欠落してしまいます。
0263デフォルトの名無しさん
2005/09/19(月) 14:16:24グローバル変数へパラメータを追い出してみるのはどうだろう
const char*chk_malloc_file;int chk_malloc_line;
void* chk_malloc_(size_t sz){
}
void*(*chk_malloc(const char*file,int line))(size_t){
chk_malloc_file = file;chk_malloc_line = line;
return chk_malloc_;
}
#define malloc chk_malloc(__FILE__,__LINE__)
まぁこの実装だと同時に2箇所以上で使うと破綻するけど
0264デフォルトの名無しさん
2005/09/19(月) 14:17:13ありがとうございます。
面白いですね。
試してみます。
0265デフォルトの名無しさん
2005/09/19(月) 14:21:11そりゃ、関数ポインタ自体に file と line 用の引数がない限り、どうしようもないわな。
#ifdef NDEBUG
typedef void* (*malloc_fp_t)(size_t size);
#define MALLOC_FP malloc
#define MALLOC_CALL(fp, size) fp(size)
#else
void* chk_malloc(size_t size, const char* file, int line);
typedef void* (*malloc_fp_t)(size_t size, const char* file, int line);
#define MALLOC_FP chk_malloc
#define MALLOC_CALL(fp, size) fp(size, __FILE__, __LINE__)
#define malloc(size) chk_malloc(size, __FILE__, __LINE)
#endif
malloc_fp_t fp = MALLOC_FP;
char* buf = MALLOC_CALL(fp, size);
こんなところだと思うが・・・。
0266263
2005/09/19(月) 14:21:22const char*chk_malloc_file;int chk_malloc_line;
void* chk_malloc(size_t sz){
return malloc(sz);
}
#define malloc (chk_malloc_file = __FILE__ , chk_malloc_line = __LINE__ , chk_malloc)
0267デフォルトの名無しさん
2005/09/19(月) 14:24:24それだと、関数ポインタを使ったとき(メモリを確保したとき)の情報じゃなくて、
関数ポインタに代入したときの情報が表示されてしまうと思うのだが。
発想の面白さは買うけど。
0268デフォルトの名無しさん
2005/09/19(月) 14:28:37大変勉強になります。
ありがとうございます。
0269デフォルトの名無しさん
2005/09/19(月) 14:32:10#define MALLOC_CALL(fp, size) (fp)((size), __FILE__, __LINE__)
#define malloc(size) chk_malloc((size), __FILE__, __LINE)
こうしといた方が安全か。
0270デフォルトの名無しさん
2005/09/19(月) 15:03:210271デフォルトの名無しさん
2005/09/19(月) 15:05:57C++ならともかく、Cでmalloc無しってどうすればいいんだよ。(calloc realloc をつかえとか言うなよ)
0272デフォルトの名無しさん
2005/09/19(月) 15:09:40API使えって句とかと。
0273デフォルトの名無しさん
2005/09/19(月) 15:10:300274デフォルトの名無しさん
2005/09/19(月) 15:10:43 ̄ ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄
______
/:::::::::::::::::::::\
/::::::::::::::::::::::::::::::::\
|:::::::::::::::: |
|::::::::::::::: ∪ \,, ,,/)
|::( 6::ー──◎─◎|
ノ::: (∵∴∪ ( ・ ・))
/ ∵ 3 丿 ブフィ
/\ U ___ノ
/ .\ ____ノ\
\______ノ .\
0275デフォルトの名無しさん
2005/09/19(月) 15:16:53realloc じゃないか? 上のアレ。
0276デフォルトの名無しさん
2005/09/19(月) 15:30:21スタックに予め大きく取って分ければ良いとか言ってたっけな。
そいつもかなり鬱陶しかった。
0277デフォルトの名無しさん
2005/09/19(月) 15:42:560278デフォルトの名無しさん
2005/09/19(月) 15:47:270279デフォルトの名無しさん
2005/09/19(月) 16:11:570280デフォルトの名無しさん
2005/09/19(月) 16:36:14お好きなように。プロジェクト単位で使い方のルールが統一されていると読み易くて宜しいかと。
0281デフォルトの名無しさん
2005/09/19(月) 16:47:540282デフォルトの名無しさん
2005/09/19(月) 16:55:19エラー時に、中途半端にデータが埋められるってのがないから。
でも、calloc はよく分からん。
何か、環境依存で問題があったりするんだろうか。
0283デフォルトの名無しさん
2005/09/19(月) 17:05:28デフォルトでは、Linux は楽観的メモリ配置戦略を用いている。
つまり、 malloc() が NULL でない値を返しても、そのメモリが
実際に利用可能であることが保証されない。これは本当にまずいバグである。
Linuxてこわいな。
0284デフォルトの名無しさん
2005/09/19(月) 17:10:290285デフォルトの名無しさん
2005/09/19(月) 17:11:210286デフォルトの名無しさん
2005/09/19(月) 17:21:43このメモリを割り当て過ぎる動作を以下のコマンドで無効にできる。
# echo 2 > /proc/sys/vm/overcommit_memory
0287デフォルトの名無しさん
2005/09/19(月) 17:30:15だから、ソフトウェアが普通に組まれてても、
コマンド発行するまで危険な動作をする可能性があるということでしょ。
素人がLinux構築するとバグだしまくりなのは、
素人が使うことを前提としたWindowsとはやはり違うということで。
ま、Linux単体で使う人もあまりいないでしょうけど、
Linuxを盲目的に信奉すると危険てことですね。
0288デフォルトの名無しさん
2005/09/19(月) 18:11:52はやくバグフィクスしろよ。
0289デフォルトの名無しさん
2005/09/19(月) 18:38:090290デフォルトの名無しさん
2005/09/19(月) 19:04:10やる気0だなw
0291デフォルトの名無しさん
2005/09/19(月) 19:11:58今まで1次元配列の方が早いだろうと思って多次元配列を1次元で書いてたんだが、>>199見る限り速度的にそんなに差はないってこと?
0292デフォルトの名無しさん
2005/09/19(月) 19:14:16あんま変なことしてると、
最適化がうまく効いてくれないかもしれないぞ。
0293デフォルトの名無しさん
2005/09/19(月) 19:16:59んなことが気になるぐらいならasmのソースでも比較すりゃいいじゃねえか
0294デフォルトの名無しさん
2005/09/19(月) 19:24:270295デフォルトの名無しさん
2005/09/19(月) 19:28:17人生が環境依存になりますがよろしいでしょうか?
0296デフォルトの名無しさん
2005/09/19(月) 19:54:15int ReturnValue[5][5];と宣言して
return ReturnValue;としたいのですが,
関数宣言の仕方が分かりません<m(__)m>
int** ThisFunction();これではだめでした!
このint**がエラーのようですが,正しくはどのように宣言するのでしょうか?
0297デフォルトの名無しさん
2005/09/19(月) 19:56:050298デフォルトの名無しさん
2005/09/19(月) 20:20:530299デフォルトの名無しさん
2005/09/19(月) 20:31:11一応型だけを見れば
int (*ThisFunction())[5];
か
typedef int ArrayType[5];
ArrayType* ThisFunction();
か
typedef int (*ReturnType)[5];
ReturnType ThisFunction();
で、int** がダメな理由は >>221 。
ただ、配列を内部変数として取ってるのに
そうやって返すことはできないぜ。
0300デフォルトの名無しさん
2005/09/19(月) 20:40:52int (*ThisFunction())[5];でできました!
ありがとうございます
全く予想付かない形でした
>>ただ、配列を内部変数として取ってるのに
>>そうやって返すことはできないぜ。
実際はクラスの中の変数を,Public関数から返します
0301デフォルトの名無しさん
2005/09/19(月) 21:08:29まあ、C++ 関係ない話だったからいいけどさ。
0302デフォルトの名無しさん
2005/09/19(月) 21:25:13ところでint型の配列を高速で初期化する方法はないのでしょうか?
int BigArray[100][100];
for(int x=0;x<100;x++){
for(int y=0;y<100;y++)
BigArray[x][y]=10;
}
↑これを高速化したいのです!
0303デフォルトの名無しさん
2005/09/19(月) 21:31:04memset使えばいいじゃないか
0304デフォルトの名無しさん
2005/09/19(月) 21:39:050305デフォルトの名無しさん
2005/09/19(月) 21:42:19memset はバイト単位じゃねぇか
0306デフォルトの名無しさん
2005/09/19(月) 21:43:01for(int i = 0; i < 10000; i++) {
BigArray[0][i] = 10;
}
で少しくらいは速くならないかな?
0307デフォルトの名無しさん
2005/09/19(月) 21:44:13int もバイト単位でアクセスできますが?
0308デフォルトの名無しさん
2005/09/19(月) 21:48:220309デフォルトの名無しさん
2005/09/19(月) 21:50:15これがはやいんじゃねーの?
0310デフォルトの名無しさん
2005/09/19(月) 21:52:17よく見ろ。0 じゃなくて 10 で埋めるんだぞ?
0311デフォルトの名無しさん
2005/09/19(月) 21:59:54void *memset(void *s, int c, size_t n);
で。
速度云々は別としてmemsetで問題ないと思う。
0312デフォルトの名無しさん
2005/09/19(月) 22:00:54w
0313デフォルトの名無しさん
2005/09/19(月) 22:02:36てことは、逆にキャラ配列で10 padding するには、0x0a0a0a0a で生めにゃならんのか?
そういう使い方したことないから、気づかんかった。
0314デフォルトの名無しさん
2005/09/19(月) 22:04:42何を言っとるんだw
c の型は int だけど、実際に使われるのは下位1バイトだけだぞ!
c の型が int なのは、標準関数の引数には char を使わないから(ポインタ除く)。
0315デフォルトの名無しさん
2005/09/19(月) 22:08:14memsetは0で初期化する場合はintにも使えますが,10では無理です
0316デフォルトの名無しさん
2005/09/19(月) 22:10:00だから、さっきからそう言ってるじゃないか。
0317デフォルトの名無しさん
2005/09/19(月) 22:13:18int BigArrayBuf[100][100];
for(int x=0;x<100;x++){
for(int y=0;y<100;y++)
BigArrayBuf[x][y]=10;
}
ってしといて、使うとこで
int BigArray[100][100];
memcpy(BigArray,BigArrayBif,sizeof(BigArray));
ってすりゃええやん
0318デフォルトの名無しさん
2005/09/19(月) 22:16:570319デフォルトの名無しさん
2005/09/19(月) 22:18:070320デフォルトの名無しさん
2005/09/19(月) 22:19:41代入の方が速い気がするけど、実測してみないと結論は出せぬ。
0321デフォルトの名無しさん
2005/09/19(月) 22:20:34でいいじゃん
10000個の要素はawkなりPerlなり前処理で
自動生成すればいい
0322デフォルトの名無しさん
2005/09/19(月) 22:25:16初期化は宣言と同時に行うものだよ
うざがれそうだが…
0323デフォルトの名無しさん
2005/09/19(月) 22:31:030324デフォルトの名無しさん
2005/09/19(月) 22:37:57作業としての初期化だ。
0325デフォルトの名無しさん
2005/09/19(月) 22:44:410326SSE2依存
2005/09/20(火) 02:49:10void foo()
{
__declspec(align(16)) int BigArray[100][100];
int i;
const __m128i v = { 10, 10, 10, 10 };
for ( i = 0; i < 100 * 100; i += 4 ) {
_mm_store_si128( (__m128i*)&(BigArray[0][i]) , v);
}
}
0327デフォルトの名無しさん
2005/09/20(火) 02:51:02約40KBバイナリファイルサイズが増えます
0328デフォルトの名無しさん
2005/09/20(火) 06:08:46scanfで数値を一文で横に入力するようにするにはどのようにプログラムすればいいでしょうか?
100 200 300 と入力する感じにしたいのです
よくわからなかったので
scanf("%d %d %d",&a,&b,&c)みたいにやってみたのですが
これだと縦に
100
200
300
と入力するようになってしまいます
やりかた教えてください
あと小数点つき123.45とか入力した場合
途中で終わってしまいます
小数点入り数値を入力しても大丈夫なやり方も教えてほしいです
0329デフォルトの名無しさん
2005/09/20(火) 06:24:07VC++スレの人だな
変換指定子が%d %d %dなら、「100 200 300」だろうと
「100[ret]200 300」でも「100[ret]200[ret]300」でも読み込めた希ガス
小数の場合は放り込む変数をfloatなりdoubleで用意して
変換指定子を%f
0330デフォルトの名無しさん
2005/09/20(火) 06:50:45ありがとうございます
とりあえず数値を入力して出力だけ出来るように今やってるんですが、現在こんな感じ
#include <stdio.h>
int main (void)
{
float a;
int b,c,d;
scanf("%f",&a);
scanf("%d %d %d",&b,&c,&d);
printf("%f %d %d %d",a,b,c,d);
return 0;
}
入力するのはa=123.45 b=100 c=200 d=300って感じです
出力すると123.45が123.449997になってしまいます
あと[ret]入れるのは数値を入力するときでしょうか?入れてみたらすごい数値がでちゃったり
できれば[ret]なしで横に入力させるようにしたいです
連投が返事がおそく(´・ω・`)
0331300
2005/09/20(火) 06:56:06横に入力まではできてました
あと残る問題は123.45を入れると123.49997って出るだけです
そのまま123.45って出したい
0332デフォルトの名無しさん
2005/09/20(火) 06:58:260333デフォルトの名無しさん
2005/09/20(火) 07:02:17ありがとう
これでスキーリできました
0334デフォルトの名無しさん
2005/09/20(火) 07:48:40floatの精度はそんなもん。もっと精度が必要ならdoubleを使え。
0335デフォルトの名無しさん
2005/09/20(火) 07:58:32まず何を始めたらいいか、この俺様におまえら愚民ども、
丁寧かつ迅速に教えろや!
0336デフォルトの名無しさん
2005/09/20(火) 08:20:57スレ違い。初心者スレへでもどうぞ。
http://pc8.2ch.net/test/read.cgi/tech/1124511889/
0337デフォルトの名無しさん
2005/09/20(火) 08:38:22俺のお気に入りスレに誘導すんなよw
0338トラックバック ★
2005/09/20(火) 10:23:22[発ブログ] superfree
http://2chplus.2ch.net/test/read.cgi/superfree/1127179402/l50
0339トラックバック ★
2005/09/20(火) 10:25:13[発ブログ] superfree
http://2chplus.2ch.net/test/read.cgi/superfree/1127179513/l50
0340デフォルトの名無しさん
2005/09/20(火) 12:37:16回線切って首吊る
0341デフォルトの名無しさん
2005/09/20(火) 12:39:140342デフォルトの名無しさん
2005/09/20(火) 14:02:09必ず戻り値を受け取らなければならないのでしょうか。
例えば、int foo();という関数を定義した場合、
int test;
test = foo();
のように使用しますが
もし戻り値を受け取っていなかったら
不都合とかあるのでしょうか。
0343デフォルトの名無しさん
2005/09/20(火) 14:02:38ない
0344デフォルトの名無しさん
2005/09/20(火) 14:20:14その返値でエラー処理やリソース開放などが必要だとしても、
Cの知った事ではない
0345デフォルトの名無しさん
2005/09/20(火) 14:22:480346デフォルトの名無しさん
2005/09/20(火) 14:23:240347デフォルトの名無しさん
2005/09/20(火) 14:30:400349デフォルトの名無しさん
2005/09/20(火) 14:54:15scanf 系のは使うこともあるが。
0350デフォルトの名無しさん
2005/09/20(火) 15:04:02○scanf()系の戻り値は見なきゃダメ
0351デフォルトの名無しさん
2005/09/20(火) 15:18:040352デフォルトの名無しさん
2005/09/20(火) 16:00:220353デフォルトの名無しさん
2005/09/20(火) 16:04:270354デフォルトの名無しさん
2005/09/20(火) 16:05:300355デフォルトの名無しさん
2005/09/20(火) 16:05:490356デフォルトの名無しさん
2005/09/20(火) 17:08:54たとえば
Hello World
っていう文字列が変数に入っていて
スペースまでを別の変数に取り出す
0357デフォルトの名無しさん
2005/09/20(火) 17:12:230358デフォルトの名無しさん
2005/09/20(火) 17:13:480359デフォルトの名無しさん
2005/09/20(火) 17:14:580360デフォルトの名無しさん
2005/09/20(火) 17:22:18けどstrtokって手もあったな
0361デフォルトの名無しさん
2005/09/20(火) 17:27:52・元文字列が長いのでコピーしたくない
という場合なら、strchr でスペース検索して、
そこまでを strncpy で抜き出してヌル終端付ける。
0362デフォルトの名無しさん
2005/09/20(火) 19:03:00最初からそこまで取り出す
0363デフォルトの名無しさん
2005/09/20(火) 19:23:13それどうやるの?
関数の使い方がわからん
0364デフォルトの名無しさん
2005/09/20(火) 19:27:390365デフォルトの名無しさん
2005/09/20(火) 19:42:08俺は態度でかいよ
strtokで出来たからもういいよ
0366デフォルトの名無しさん
2005/09/20(火) 19:42:42http://www.linux.or.jp/JM/html/LDP_man-pages/man3/strchr.3.html
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/strncpy.3.html
0367デフォルトの名無しさん
2005/09/20(火) 20:05:050368デフォルトの名無しさん
2005/09/20(火) 20:27:09に加えて
・最大文字数制限
を加えるなら >>360 で終了。
0369デフォルトの名無しさん
2005/09/20(火) 20:51:23C++が大学の研究室にあるのですが、Cの本でも勉強できますか?
C++というくらいですし、Cのプログラムは普通にできますよね?
0370デフォルトの名無しさん
2005/09/20(火) 20:53:21ガタガタ言ってねえでまずはやってみろ
0371デフォルトの名無しさん
2005/09/20(火) 21:34:15一応C++のコンパイラがあればまともなCを動かすことは出来る。
ANSI以前の古いCやプロトタイプ宣言のないなどの変なCは動かない可能性はある。
0373デフォルトの名無しさん
2005/09/20(火) 22:04:160375デフォルトの名無しさん
2005/09/20(火) 22:09:050376Addicted to C++ ◆nrBjarne.g
2005/09/20(火) 22:15:150377デフォルトの名無しさん
2005/09/20(火) 22:20:23しかし、C++ コンパイラは同時に C コンパイラもついてることが多いから、
C のプログラムをそのまま C としてコンパイルできるはずだと思う。
C++ 専用のもあるだろうけど。
0378デフォルトの名無しさん
2005/09/20(火) 22:53:150379デフォルトの名無しさん
2005/09/20(火) 22:54:16どっかにあんのか?
0380デフォルトの名無しさん
2005/09/20(火) 23:00:210381デフォルトの名無しさん
2005/09/20(火) 23:06:02いやだからC++コンパイラもくっついてるだろうけど
CとC++ではあくまで別モンだろ?
int main() { int class = 0; return class; }
はCソースとしては正当だがC++ソースとしては不当な訳で。
で、これを食えねえ純粋のC++コンパイラしかついてねーような
やつがあるかってこと。
0382デフォルトの名無しさん
2005/09/20(火) 23:43:170383デフォルトの名無しさん
2005/09/20(火) 23:51:44K&Rスタイルを拒否るCコンパイラも、俺は見たことが無いぞ
0384デフォルトの名無しさん
2005/09/20(火) 23:58:26地獄だぞ。
まあへたなオープン系SIよりはマシか。
0385369
2005/09/21(水) 00:01:56>>384
詳しくお願いします(汗)
あまりやりたがるヒトがいない、というのを聞いていて、
がんばれば将来食いっぱぐれることがないかなぁ、と思っているのですが・・・
地味というのは聞きましたが、地獄なんでしょうか??
携帯はしんどいので避けるつもりですが・・・
ハードとソフトの両方に接することができる組込みに魅力を感じています!
0386デフォルトの名無しさん
2005/09/21(水) 00:02:18xが1〜9の整数の時、
#include <math.h>
int sisu(int x)
{
return (int)pow(2, x-1);
}
と、
int sisu(int x)
{
switch (x){
case 1: return 1;
case 2: return 2;
case 3: return 4
case 4: return 8
case 5: return 16
case 6: return 32
case 7: return 64
case 8: return 128
case 9: return 256;
}
return 0;
}
とでは、どちらを使ったほうがイイのでしょうか?
0387デフォルトの名無しさん
2005/09/21(水) 00:05:13俺ならこうする。
int sisu(int x)
{
return 1 << --x;
}
0388デフォルトの名無しさん
2005/09/21(水) 00:10:50return t[x];
書いてて一寸、馬鹿らしく(ry
0389デフォルトの名無しさん
2005/09/21(水) 00:18:51sscanf関数の戻り値をチェックする時って
if(sscanf(何とかかんとか)!=1){
と書くのと
if((sscanf(何とかかんとか))!=1){
と書くのとではどちらの方がいいんでしょうか。
別にsscanf関数に限らず、他の関数の戻り値のチェックの時もなんですけど……。
0390デフォルトの名無しさん
2005/09/21(水) 00:23:22別にどうでもいいが、後者は冗長だろう
手前そんなにカッコが好きならカッコウとでも結婚してlisperでも産みやがれ!
ぐらいのことは言われるかもしれない
0391デフォルトの名無しさん
2005/09/21(水) 00:25:53どうもありがとうございました。
超高速レスで助かりました。ふんとに。
0392デフォルトの名無しさん
2005/09/21(水) 00:28:50ふんとに。
0393デフォルトの名無しさん
2005/09/21(水) 00:32:37俺ならこうする。
#define SISU(n) (1u << ((n) - 1))
0394デフォルトの名無しさん
2005/09/21(水) 00:56:03#define SISU(puri) (1<<((puri)-1))
0395デフォルトの名無しさん
2005/09/21(水) 02:11:35Xの範囲を1〜12に拡張しないとコンパイルが通りません
と、お兄ちゃんが言ってました。
0396デフォルトの名無しさん
2005/09/21(水) 02:12:430397デフォルトの名無しさん
2005/09/21(水) 02:36:07忙しいときは土日出勤で家に帰れないこともあたりまえかな。
基本的に派遣に近い勤務形態になるからプロパーと仲良くしなきゃかなり気まずくなるし。
俺なんかは初っ端から同じ会社の人間一人もいないような状況で仕事することが
結構あったりして、軽く欝になりかけた。
今はWeb系に転向してASPとかServletとかやってる。これでもまだ20代前半だ。
俺もCは大学からはじめた。まあ頑張りたまえ。
あと、PGの話題は板違いになるのでマ板か情シスで。
0398デフォルトの名無しさん
2005/09/21(水) 06:17:20>388
>393
>394
ありがとうございました。
0400デフォルトの名無しさん
2005/09/21(水) 07:41:410402デフォルトの名無しさん
2005/09/21(水) 13:12:07それらを印刷したり保存したりする方法はないでしょうか?
0403デフォルトの名無しさん
2005/09/21(水) 13:14:080404デフォルトの名無しさん
2005/09/21(水) 13:14:58それをCで実装する方法が知りたいのか?
ならば環境依存だ。
0405デフォルトの名無しさん
2005/09/21(水) 17:14:03大学の教授より教えるのうまいし
0406デフォルトの名無しさん
2005/09/21(水) 17:16:590407デフォルトの名無しさん
2005/09/21(水) 19:31:30struct S{
int a;
int c;
};
S *s;
s->a = 2;
s->b = 3;
s++;
で、
s->a = 4;
s->b = 5;
のように配列のようにできるのでしょうか。
0408デフォルトの名無しさん
2005/09/21(水) 19:36:490409デフォルトの名無しさん
2005/09/21(水) 19:38:140410デフォルトの名無しさん
2005/09/21(水) 19:40:30変数などの宣言時にSと書けるのはC++。Cではできない。
sはポインタ型の変数を宣言しただけで、まだどこも指していないのに->でアクセスしている。
0411デフォルトの名無しさん
2005/09/21(水) 20:16:14間違っているのでしょうか
struct Skakidasi {
int member;
int sasizu;
};
呼び出し側
Skakidasi skakidasi;
visibe(&skakidasi);
関数
void visibe(Skakidasi *skakidasi){
skakidasi->member = 4;
skakidasi->sasizu = 9;
skakidasi++;
skakidasi->mamber = 8;
skakidasi->sasizu = 12;
}
0412デフォルトの名無しさん
2005/09/21(水) 20:20:55^^^^^^
0413412
2005/09/21(水) 20:22:280414デフォルトの名無しさん
2005/09/21(水) 20:27:40visibe(skakidasi);
こうだろ
0415デフォルトの名無しさん
2005/09/21(水) 20:33:44>>413さん
配列数が決まっていないので、ポインタにしたいのですが、
どうすればよいのでしょう。
0416デフォルトの名無しさん
2005/09/21(水) 20:39:44配列数が最初に分からないのです。
0417デフォルトの名無しさん
2005/09/21(水) 20:40:28あのなー
ポインタにしたから配列の縛りが無くなったと思うのは間違い。
malloc/freeで適宜メモリを割り当ててやらないといけない。
その調子だと全然わかってなさそうだから、とりあえず配列を大きめにとって使ったら
どうですか?
0418デフォルトの名無しさん
2005/09/21(水) 20:45:21reallocで増減するのがいいだろうな
もしくは線形リストとか
0419デフォルトの名無しさん
2005/09/21(水) 20:46:28そうです。つかったことないです。malloc/free
配列大きめにして使います。
すみませんでした。
0420デフォルトの名無しさん
2005/09/21(水) 20:48:55そうですね、やはりメモリ管理ちゃんとして他方がいいのでしょうね。
その、malloc がんばって、勉強してみます。
線形リストですか、名前だけは聞いたことあります。
また、調べないと、思い出しそうもないです。
ありがとうございます。
0421デフォルトの名無しさん
2005/09/21(水) 21:01:370422デフォルトの名無しさん
2005/09/21(水) 21:16:21ポインタにする意味あるわけ?
0423デフォルトの名無しさん
2005/09/21(水) 21:18:33俺の糞上司と交換してくれ
いらなかったら生ゴミの日に出すなりトイレに流すなり好きにしていいから
0424デフォルトの名無しさん
2005/09/21(水) 21:33:14int a;
int b;
} S[1];
void S_init(S s) {
s->a = 0;
s->b = 0;
}
S s;
S_init(s);
こういうテクニックもあるのぅ。
0425デフォルトの名無しさん
2005/09/21(水) 22:05:260426デフォルトの名無しさん
2005/09/21(水) 22:08:58カッコが30とかもう見る気も失せる
当然コメントなし
0427デフォルトの名無しさん
2005/09/21(水) 22:10:180428デフォルトの名無しさん
2005/09/21(水) 22:34:05if (b) {
if (c) {
hoge();
}
}
}
if (a && b && c) {
hoge();
}
どっちがいい?
0429デフォルトの名無しさん
2005/09/21(水) 22:37:210430デフォルトの名無しさん
2005/09/21(水) 22:45:17中括弧略せないの?
0431デフォルトの名無しさん
2005/09/21(水) 22:47:34仕事じゃともかく趣味じゃこーやってる。
foo = (a ? 4 : 0) | (b? 2 : 0) | (c ? 1 : 0);
switch ( foo ) {
・・・
}
0432デフォルトの名無しさん
2005/09/21(水) 22:47:360433デフォルトの名無しさん
2005/09/21(水) 22:50:49こんな感じに書いて、何で常に実行されるんだぁああああああああああ!!!
と悩んだ馬鹿な俺が来ましたよ
0434デフォルトの名無しさん
2005/09/21(水) 22:54:51a==bが真なら実行されない場合あるじゃん
0435デフォルトの名無しさん
2005/09/21(水) 23:05:26こう書く勇気がなかった>>433?
0436369
2005/09/22(木) 00:06:39エラー内容
エラー E2209 hello.c 1: インクルードファイル 'stdio.h' をオープンできない
です。
stdio.hファイルはたしかにあるんですが・・・
0437デフォルトの名無しさん
2005/09/22(木) 00:09:17ディレクトリ指定は?
パス通してる?
0438デフォルトの名無しさん
2005/09/22(木) 00:10:38まずどんな環境でやってるかいえよはげ
0439デフォルトの名無しさん
2005/09/22(木) 00:12:550440369
2005/09/22(木) 00:18:47ディレクトリは絶対パス指定で、
dirコマンドでディレクトリを開き、対象ファイルを確認した上で行っているので、
大丈夫です。
>>438
すみません・・・
環境は
OS : WindowsXP SP2
エディタ : サクラエディタ
コンパイラ : Borland C++ Compiler 5.5
です。
0441デフォルトの名無しさん
2005/09/22(木) 00:21:53>ディレクトリは絶対パス指定で、
>dirコマンドでディレクトリを開き、対象ファイルを確認した上で行っているので、
>大丈夫です。
言ってることの意味がよく分かりませんね。
環境設定でヘッダファイルの置き場所を・・・
まあデフォルトで入ってるとは思いますが。
あとはソースコードでどう指定したのか。
0442デフォルトの名無しさん
2005/09/22(木) 00:24:21Borland C++ Compiler 5.5使ってるなら
http://pc8.2ch.net/test/read.cgi/tech/1091066805/10
のCpadというソフト使うと楽ですよ
0443デフォルトの名無しさん
2005/09/22(木) 00:26:16腐るほど出てる質問のはずだから過去スレ検索汁!
0444デフォルトの名無しさん
2005/09/22(木) 00:29:36{
char *p;
p=s;
while(*s++);
for(--s;*s++=*t++;);
return p;
}
これによって文字列の結合が出来るのですが、for(--s;*s++=*t++;);この部分が
どういった処理をしているのか判りませんご教授ください。
0445369
2005/09/22(木) 00:37:21>>443
解決しました!
本をよく読んでなくて、cfgファイルの作成をしていませんでした(汗)
ありがとうございました!
>>442
ご助言ありがとうございます!
0446デフォルトの名無しさん
2005/09/22(木) 00:48:34> これによって文字列の結合が出来るのですが
出来ないだろ。
コンパイル位通せや
0447デフォルトの名無しさん
2005/09/22(木) 01:00:24for文中に各ポインタの中身を見ればいいと思うよ
0448デフォルトの名無しさん
2005/09/22(木) 01:07:19while(*s++); /* sのケツ探し
for(--s;*s++=*t++;); /* sのポインタをひとつ戻し('\0'の前)
*tを*sにコピー
sとtのポインタをそれぞれインクリメント
コピーしたものが0じゃなければループ */
0449デフォルトの名無しさん
2005/09/22(木) 01:21:47この関数によって文字列の結合の処理を行うのですがと書いた方が良かったですね。
釣りかと思いました。
>>447>>448
おかげさまで解決しました!本当にありがとうございます!!
0450デフォルトの名無しさん
2005/09/22(木) 01:30:32引数の,が抜けてることを指摘してるのかと
0451デフォルトの名無しさん
2005/09/22(木) 01:32:08strcat だな。
FreeBSDのstrcat
ttp://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/string/strcat.c?rev=1.7&content-type=text/x-cvsweb-markup
0452デフォルトの名無しさん
2005/09/22(木) 05:49:52最後に合計をだすプログラム
#include <stdio.h>
int main (void)
{
int a=1,c=0;
int dt[8];
for (a;a<=8;a++){
printf("数値?");
scanf("%d",&dt[a]);
c = c + dt[a];
}
printf("合計%d\n",c);
return 0;
}
まったく違う答えが・・・
どこが間違ってるかわからなす(´・ω・`)
教えてください
0453デフォルトの名無しさん
2005/09/22(木) 05:59:566行目を
for ( a = 0; a < 8; a++ ) {
に変更すべし
0454デフォルトの名無しさん
2005/09/22(木) 06:02:36でけたー
ありがとう〜
0455デフォルトの名無しさん
2005/09/22(木) 06:32:27さっきのちょっと進化した型なのですが
今度は合計のあとに
[番号]”数値=”配列に入れた数値 その数値は全体のなん% って感じにしたいのです
[番号]”数値=”配列に入れた数値 まではたぶんできたと思うのですが
その後に入れる全体のなん%かと表示するやり方がわかりません
しかも8桁にしないといけないらしくて10.000000%みたいな
お願いします
#include <stdio.h>
int main (void)
{
int a,c=0;
int dt[8];
for ( a = 0; a < 8; a++ ) {
printf("数値?");
scanf("%d",&dt[a]);
c = c + dt[a];
}
d = c;
printf("合計%d\n",c);
for(a = 0; a < 8 ; a++){
printf("[%d]数値=%d\n",a+1,dt[a]); ←ここが不明(;´Д`)
}
return 0;
}
0456デフォルトの名無しさん
2005/09/22(木) 07:29:12printf("[%d]数値=%d これは全体の%.8f%%\n",a+1,dt[a], ((double)dt[a]/(double)c)*100.0)
寝ぼけてるからコンパイルが通らないor通ってもおかしいor不要なのがあるかも
0457printf("%.8g", dt[a] * 100 / c)
2005/09/22(木) 07:33:49宿題スレか初心者スレに行けよ。
0458デフォルトの名無しさん
2005/09/22(木) 09:27:50ビットシフトはなんの役に立つのでしょうか?
0459デフォルトの名無しさん
2005/09/22(木) 09:40:28何の役にも立ちません
0460デフォルトの名無しさん
2005/09/22(木) 09:47:46NASAのコンピュータをハッキングするときに役立ちます。
0461デフォルトの名無しさん
2005/09/22(木) 09:53:12パズルのようなプログラムを組むことができます。
0462デフォルトの名無しさん
2005/09/22(木) 09:56:390463ビタミンC初心者
2005/09/22(木) 10:10:07void func(int *a){
(*a)++;
}
void func2(int a){
a++;
}
main( ){
int i;
i = 5;
printf("%d",i);
func(&i);
printf("\n%d\n", i );
func2(i);
printf("%d",i);
return 0;
}
0464ビタミンC初心者
2005/09/22(木) 10:11:57というエラーがでました。どこがおかしいんでしょうか?
どなたかおしえてください。おねがいします。
(初心者なので、基本的なことですいません)
0465デフォルトの名無しさん
2005/09/22(木) 10:13:42#include<stdio.h>
void func(int *a){ (*a)++; }
void func2(int a){ a++; }
int main()
{
int i = 5; printf("%d\n",i);
func(&i); printf("%d\n",i);
func2(i); printf("%d\n",i);
return 0;
}
0466デフォルトの名無しさん
2005/09/22(木) 10:23:21本当にエラーか?ワーニングじゃなくて?
func2内のaは関数から出たら消滅するので、a++は意味がない
0467デフォルトの名無しさん
2005/09/22(木) 10:24:20a に対して入力しかないんでしょ。
なんのために入れてるのかと。
エラーチェックならif文で使えと。
それか
return a;
とでもしろよと。
0468デフォルトの名無しさん
2005/09/22(木) 10:27:53void func2(int a){ a++; }
a を受け取って a++ してるが、関数が終了して捨てられる。
0469デフォルトの名無しさん
2005/09/22(木) 11:20:58int *a = 5;
のような式って意味ありますか?このとき右辺に
なにを代入するんですか?
おしえてください、よろしくです。
0470デフォルトの名無しさん
2005/09/22(木) 11:21:56a = &b;のような形ならわかります・・
0471デフォルトの名無しさん
2005/09/22(木) 11:28:34charと同じ感覚で考えれば、5という数値が格納されたintの空間を参照するんじゃねーの?
どっちにしろそんなことする必要もないし、したこともないんで詳しいことはシラネ
0472デフォルトの名無しさん
2005/09/22(木) 11:35:19んなわけねーだろ。
とにかくここ数日分の奴ら初心者スレに逝ってやれよ。sigh.
0473デフォルトの名無しさん
2005/09/22(木) 11:40:30同一人物なんじゃないのか?
この短期間にバカが大増殖するなんて不自然だし
0474デフォルトの名無しさん
2005/09/22(木) 12:00:15ポインタaにアドレス5を代入している
0475デフォルトの名無しさん
2005/09/22(木) 12:02:50でもそれ、コンパイルエラーになると思うけど。
0476デフォルトの名無しさん
2005/09/22(木) 12:28:26char str[] = "hello !";
char *p = str;
for ( ; *p; p++ )
{
}
strの文字をpで一文字ずつ操作
0477デフォルトの名無しさん
2005/09/22(木) 12:37:46そんなのをエラーにしてたら、直接メモリ弄る時に不便なんじゃないか?
0478デフォルトの名無しさん
2005/09/22(木) 12:52:49┌──┐ ┌───┐
│ │─→ │整数 │
└──┘ └───┘
この図に対するC言語コードってなんですか?
structを使うらしいですがわかんないんです
0479デフォルトの名無しさん
2005/09/22(木) 12:58:27ドット演算子?
0480デフォルトの名無しさん
2005/09/22(木) 13:16:07で、レッドカード。初心者スレかこっちで
つ http://pc8.2ch.net/test/read.cgi/tech/1124511889/
(もうどうせかぶってるんだろうけど sigh.)
0481デフォルトの名無しさん
2005/09/22(木) 13:16:16char a[1] = {0xff};
char *b;
unsigned char c, d;
b = a;
c = *(unsigned char *)b;
d = (unsigned char)*b;
cとdはどちらも0xffになることが保証されているんでしょうか?
0482デフォルトの名無しさん
2005/09/22(木) 13:41:24ドット演算子じゃなくて普通のプログラムです
0483デフォルトの名無しさん
2005/09/22(木) 13:50:13保証されています。
というか、汚いです。
0484デフォルトの名無しさん
2005/09/22(木) 13:53:22それから読み取れるのはドット演算子程度しかありません。どれも普通のプログラムです。
struct {
int i ;
} test ;
test.i = 2 ;
0485デフォルトの名無しさん
2005/09/22(木) 16:50:54後の実行文で、scanf("%c",&zz); と書いているのはどういう命令になるでしょうか?
Enterキーを押せという命令でしょうか?
0486デフォルトの名無しさん
2005/09/22(木) 16:53:20て言うかscanfは暴走の申し子だから使わん方が
0487デフォルトの名無しさん
2005/09/22(木) 16:59:04unsigned long a;
これは両方とも同じ意味ですか?
0488デフォルトの名無しさん
2005/09/22(木) 17:01:02DWORDは標準のキーワードではないから、環境によって答えが変わる。
インクルードしているファイルにも関係ある。
0489デフォルトの名無しさん
2005/09/22(木) 17:01:15少しは自分でだな(ry
0490デフォルトの名無しさん
2005/09/22(木) 17:08:22どうもです。
timeGetTime();の値を代入するので、unsigned long の方を使います。
0491デフォルトの名無しさん
2005/09/22(木) 17:12:02MSDNを見る事をお勧めする。
0492デフォルトの名無しさん
2005/09/22(木) 17:16:21> GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
Win32API質問箱 Build35
http://pc8.2ch.net/test/read.cgi/tech/1125850096/l50
> timeGetTime();の値を代入するので
DWORD timeGetTime(VOID);
0493デフォルトの名無しさん
2005/09/22(木) 17:27:02はーい
0494デフォルトの名無しさん
2005/09/22(木) 17:58:28getsを使うのは知識不足
strtokでハマルのは理解力不足
よって、馬鹿はscanf, gets, strtokは使わない方が良い。
0495デフォルトの名無しさん
2005/09/22(木) 17:59:180496デフォルトの名無しさん
2005/09/22(木) 18:08:540497デフォルトの名無しさん
2005/09/22(木) 18:13:591度はこれで遊ぶ
0498デフォルトの名無しさん
2005/09/22(木) 18:15:08scanfの暴走は作る側がどうにかできる物じゃねーだろ
0499デフォルトの名無しさん
2005/09/22(木) 18:18:49ヒント:返り値
0500デフォルトの名無しさん
2005/09/22(木) 18:25:280501デフォルトの名無しさん
2005/09/22(木) 18:27:193.整数データのキー入力
〜ちゃんと整数データを入力するまで繰り返す〜
scanfは取り込めたデータ数を返すから、
整数データが読み込まれたことをチェックし、
誤った入力なら再入力を要求すれば!...ところが...
/* scanf */
#include <stdio.h>
main()
{
charbuf[256];
inti;
do
{
printf("終了は Ctrl+C \n");
printf("Input number: ");
} while( scanf("%d", &i ) != 1 );
printf("%d\n", i );
}
/* scanfd1.c */
整数データを入力すれば大丈夫だが、
それ以外のデータを入力するとどうなる?!
scanfは空白文字までを目処に、整数とパターンマッチさせていく
それ以外の文字が入力されていると、パターンにマッチしないので、
マッチングの候補として残ったままになる→だから暴走する!
0502デフォルトの名無しさん
2005/09/22(木) 18:27:250504訂正
2005/09/22(木) 18:31:110505デフォルトの名無しさん
2005/09/22(木) 18:33:340506デフォルトの名無しさん
2005/09/22(木) 18:37:29どこでそんな奥義を教えられたのかが気になる。
0507こっちのほうが綺麗かもな
2005/09/22(木) 18:47:190508デフォルトの名無しさん
2005/09/22(木) 18:56:57というより今時業務でコンソール入力とか有り得ない
0509マジレス
2005/09/22(木) 19:02:41scanfを使うと必ず改行か終端コード、拾い損ないの文字が入力バッファに残る。
だからscanf使用後にgetcharとかgets系使うと、scanfの成功可否に関わらず必ずゴミが入る。
scanf系で統一するならともかく(scanfは改行をただの区切り文字同様に読み飛ばす)、必ず後始末は必要。
俺はC言語見習い1年目で解決法を編み出した。大学の講義よりも2chを見ながら育った。
今は・・・廃人orz
0510デフォルトの名無しさん
2005/09/22(木) 19:39:05scanfはコンソールから入力するなんて誰がそんな嘘を教えたんだ?
scanfは標準入力から入力するんだよ
0511デフォルトの名無しさん
2005/09/22(木) 19:43:42Queenがいつの間にか無くなってるし...
0512デフォルトの名無しさん
2005/09/22(木) 19:46:53今話題になってるのは「scanf()からのエラー回復と再入力の方法」であって、
それはインタラクティブな利用が前提でしょ。
でもその前提そのものが有り得ない、と言ってるの。
0513デフォルトの名無しさん
2005/09/22(木) 19:51:28>それはインタラクティブな利用が前提でしょ。
>それはインタラクティブな利用が前提でしょ。
>それはインタラクティブな利用が前提でしょ。
>それはインタラクティブな利用が前提でしょ。
>それはインタラクティブな利用が前提でしょ。
>それはインタラクティブな利用が前提でしょ。
0514デフォルトの名無しさん
2005/09/22(木) 19:52:56インタラクティブな利用以外で、「単に行末まで読み捨てて再入力を求める」
形式のエラー回復を求める例って何があるの?
0515デフォルトの名無しさん
2005/09/22(木) 19:57:120516デフォルトの名無しさん
2005/09/22(木) 20:00:40今時カードとかテレタイプとかの話をしてもナンセンスでしょ
scanf()のインタラクティブな利用における典型的な問題を議論しても
これまたナンセンス。
(暗黙にインタラクティブな利用を前提とした)下らないエラー回復方法が
不要であれば、単に
while (scanf("%d", &n) == 1) {
/* do something */
}
if (ferror(stdin)) {
/* なんかエラーがあった */
}
のように書けばよいだけの話。
0517デフォルトの名無しさん
2005/09/22(木) 20:01:000518デフォルトの名無しさん
2005/09/22(木) 20:02:25俺に言ってるの?
なら、>>512 >>514 >>516の「どこが」間違ってるのか
具体的に指摘してみ?
0519デフォルトの名無しさん
2005/09/22(木) 20:04:310520デフォルトの名無しさん
2005/09/22(木) 20:05:18誰のどのレスのどこが都合が悪いんだかちゃんと言えよ
0521デフォルトの名無しさん
2005/09/22(木) 20:06:060522デフォルトの名無しさん
2005/09/22(木) 20:07:51>>512 >>514 >>516に具体的に反論できる人間は居ないということだね
にもかかわらず前時代的で手垢のついたどころじゃない
scanf()のエラー回復と再入力の問題を未だにやってるという訳だ
バカばっかだな
0523デフォルトの名無しさん
2005/09/22(木) 20:11:140524デフォルトの名無しさん
2005/09/22(木) 20:12:180525デフォルトの名無しさん
2005/09/22(木) 20:12:22>カードとかテレタイプ
違うって。そのころはCそのものがまだなかったよ。
電算機を使える時間は限られてるし、プログラムは多くを使いまわしてたから、
自然とキーボードから入力するようにプログラムを組んで、実際に走らせる時は
リダイレクトを使ってファイルから読み込ませて結果を吐かせるわけで、
しかもそのファイルの一部にミスがあったとしてもある程度の結果がないと
飯が食えなくなるわけだから、そういう場合のエラー回避等々が非常に重要になってくる。
0526デフォルトの名無しさん
2005/09/22(木) 20:14:580527デフォルトの名無しさん
2005/09/22(木) 20:16:00テレタイプの時代にはあるでしょ。UNIXのttyはその名残なんだから。
そういう利用を行うテキストアプリケーション
(と呼ぶべきかどうかは微妙だが)
に対してユーザ入力をさせる、そういう「業務」形態はもう有り得ないでしょ?
と言ってるの。
で、「有る」としても、そのようなものを作る場合、エラー個所を示すために
普通は行番号が欲しいから、どのみちscanf()なんてものを使うことは
業務では絶対にありえないの。
だから、scanf()でインタラクティブな入力をさせてエラー回復を試みる、
といった想定そのものがナンセンスなの。
0528デフォルトの名無しさん
2005/09/22(木) 20:18:310529デフォルトの名無しさん
2005/09/22(木) 20:19:060530デフォルトの名無しさん
2005/09/22(木) 20:20:54「業務であり得ない事は話題にして悪いのか否か」は決まっているの?
0531デフォルトの名無しさん
2005/09/22(木) 20:21:23そんなくだらないことよりビットシフトの使い道を教えろよ。
0532デフォルトの名無しさん
2005/09/22(木) 20:22:340533デフォルトの名無しさん
2005/09/22(木) 20:24:25fgets ?
0534デフォルトの名無しさん
2005/09/22(木) 20:24:31単に>>516のような方法を教えればよい。「scanf()なんかを使う」ケースでは
事実上それで十分なんだから。
それ以上の議論は無駄でしかない。
0535デフォルトの名無しさん
2005/09/22(木) 20:27:06> そういう利用を行うテキストアプリケーション
> (と呼ぶべきかどうかは微妙だが)
> に対してユーザ入力をさせる、そういう「業務」形態はもう有り得ないでしょ?
> 普通は行番号が欲しいから、どのみちscanf()なんてものを使うことは
> 業務では絶対にありえないの。
君の言う『業務』ならありえないだろうな。
研究職じゃまだあるよ。
欲しいのが行番号というのは扱うものの違いもあるだろうね。
修正は行番号で行うのは結構大変だよ?
正規表現でやった方がいいからマーカー挟めばいいんだし。
最近じゃ時間単位じゃなくて年契約だったり(並列処理ってすばらしい)、
プロジェクトの審査とかで割り当てられたりで状況はある程度変わってるけどね。
#しかしあのころのCをCだと主張してほしくなかったな。
0536デフォルトの名無しさん
2005/09/22(木) 20:28:08> 修正は行番号で行うのは結構大変だよ?
viならnGで一発ですが。
行番号指定して移動できないエディタのがめずらしかろう。
0537デフォルトの名無しさん
2005/09/22(木) 20:30:10んなもん色々だろ
Content-Length信じてガバっとmalloc()してfread()の場合もあるだろうし
0538デフォルトの名無しさん
2005/09/22(木) 20:31:05つうか、もともとラインエディタをスクリーン表示に対応させただけの代物だから
行指定できないほうがおかしい罠。
漏れは禿丸でスクラッチしてFTPで転送したり、小物ならcatで垂れ流したりする罠。
0539デフォルトの名無しさん
2005/09/22(木) 20:32:30あなたが想定するファイルは何行あるんです?
まさか一行一行移動して手で添削するんじゃないでしょうね?
それに数値解析系の入力データのミスは似たり寄ったりなものが多くて
正規表現で一括置き換えやんないと間に合いませんよ。
0540デフォルトの名無しさん
2005/09/22(木) 20:32:31ここはやはりed
0541デフォルトの名無しさん
2005/09/22(木) 20:33:100542デフォルトの名無しさん
2005/09/22(木) 20:35:110543デフォルトの名無しさん
2005/09/22(木) 20:37:05無論「エラー情報をどう出すのが適切か」ってのは
扱うデータやプログラムの性質に依存するよ。んなの当たり前。
「行番号」はもっとも典型的で汎用的な伝達手段であるから
示したに過ぎない。コンパイラやインタプリタの類なども
普通はそれを示すしな。
あんたの言うケースのように、もっと別のもの(例えば正規表現
パターンとして利用可能なエラー行のリスト)のようなものが欲しい場合は、
エラー行そのものをstderrなどに流し、それをそのまま再利用する
のが一番単純で確実。
そして、いずれにせよそうするなら、行志向でないscanf()は
ふさわしくないわけだ。
0544503=504=507=509の廃人だが
2005/09/22(木) 20:37:230545emacs党員
2005/09/22(木) 20:37:23大人しく降伏したまえ
0546デフォルトの名無しさん
2005/09/22(木) 20:38:14キモイだめしですか?
0547emacs党xyzzy派
2005/09/22(木) 20:39:070548503=504=507=509の廃人だが
2005/09/22(木) 20:40:010549デフォルトの名無しさん
2005/09/22(木) 20:40:41もうめろめろです
0550デフォルトの名無しさん
2005/09/22(木) 20:49:21普通は普通はってそれしか言えないんですかね?
失礼。
なぜ行志向にこだわるんです?
キーボードから入力する時の利便性と、リダイレクトする時の整合性とを考えれば
行志向そのものがあまり重要ではなくなりませんか?
#エラー行そのものを吐いた時、そのデータ分の金は天引きですよ?
#と書いていてそろそろC言語そのものから遠ざかっているような気が
0551デフォルトの名無しさん
2005/09/22(木) 20:53:58課金が五月蝿いメインフレームorスパコン系の人?
行志向に拘るのは、あんたの想定してるようなテキストアプリケーション
主体の環境において、それがもっとも自然な形態だから、だよ。
システムお仕着せのレコード区切りの無いUNIXのようなシステムでは
多くの場合行がレコードの代わりであって、
事実UNIXの多くのコマンドラインツールは行志向だ。
すまんがメインフレームやスパコンの話はよく知らん。
データセットからscanf()で読むのが自然か?といわれると
俺はうーむ、と思ってしまうが、まあよく知らんのでなんとも言えない。
0552デフォルトの名無しさん
2005/09/22(木) 20:59:34このスレにいる奴らも頭いいのか悪いのか分かんない
0553デフォルトの名無しさん
2005/09/22(木) 21:00:57viは現存するUNIXなら普通は入ってる。
emacsは入ってはいないものと思わなければならない。
0554デフォルトの名無しさん
2005/09/22(木) 21:01:16頭が悪い人間は来なくていいですよ
0555デフォルトの名無しさん
2005/09/22(木) 21:02:21真面目につっかかってきてくれる人が約一名いるけど
他にただ煽ってただけの奴等は、まあバカだな
まともに反論もできない、煽るしか能のない奴等だ
0556503=504=507=509の廃人だが
2005/09/22(木) 21:04:09Emacsはデカイからコンパクトなシステムには向かない。
telnetさえ使えればWindows上で好きなエディタを使うよ俺は。
0557デフォルトの名無しさん
2005/09/22(木) 21:04:18ここまで読んだ。
お前が一番バカだと自覚してる?
0558デフォルトの名無しさん
2005/09/22(木) 21:05:54telnetでファイル転送するのはつらくないか?
ssh, scpの間違いだろ?
0559デフォルトの名無しさん
2005/09/22(木) 21:06:53反論できない以上、お前は煽るしか能の無い馬鹿
0560デフォルトの名無しさん
2005/09/22(木) 21:07:00今までそんな切実な現場に立ち会ったことがないです
0561503=504=507=509の廃人だが
2005/09/22(木) 21:07:01だから俺は廃人なのさ('A`)
0562デフォルトの名無しさん
2005/09/22(木) 21:08:03おまえが無視してるだけじゃんwww
0563デフォルトの名無しさん
2005/09/22(木) 21:08:35そーか?
仕事で使うUNIX鯖とか、いちいちemacs入れないぞ?
不要なものは入れない、これ基本
まあ、他でエディットしてファイル転送すりゃいいから、
困らないっちゃ困らないかもしれないけどな
0564デフォルトの名無しさん
2005/09/22(木) 21:09:15だから、俺が何を無視してるんだか言ってみろって。
0565デフォルトの名無しさん
2005/09/22(木) 21:11:05error: tow types specified in one empty declaration
というエラーが出てきたのですが,これの原因ってどんなことが考えられますか?
また,簡単な事例はありませんか?
よろしくお願いします
0566デフォルトの名無しさん
2005/09/22(木) 21:11:12自分でスレ読めよwww
0567デフォルトの名無しさん
2005/09/22(木) 21:11:56要するに何も指摘できない馬鹿かw
0568503=504=507=509の廃人だが
2005/09/22(木) 21:13:21ソースコードを適当なうpろだにうp
0569デフォルトの名無しさん
2005/09/22(木) 21:14:12すみません。ようやく認識のずれが分かりましたよ。
>あんたの想定してるようなテキストアプリケーション
ここですね。自然と思うものが違うのだから言い合いになるのは当然でした。
私は君の言う『業務』なら(ryってところで伝わったと思い込んでましたしね。
私が想定しているのはテキストアプリケーションではなく、数値解析や有限要素法等の物理シミュです。
シミュレーションとかでモデルデータを叩き込む場合、自分の所の環境では手で小規模のを入力して試し、
課金が五月蝿い(w)メインフレームorスパコンで走らせる時にリコンパイルだけで済ます
ためにリダイレクトでそのままやるわけですが、質量分布の指定等を手入力する時に
行志向だと大勢くたばりますので。
ある意味好き勝手に入力できるscanfの方が使い勝手がいいんです。
よって、そのエラー回避が非常に重要になるわけです。
0570デフォルトの名無しさん
2005/09/22(木) 21:19:59ろくな研究やってないくせにww
0571デフォルトの名無しさん
2005/09/22(木) 21:20:12了解。
0572デフォルトの名無しさん
2005/09/22(木) 21:48:260573デフォルトの名無しさん
2005/09/22(木) 21:53:31struct Chip
{
int m_nNumber;
BYTE m_byImage;
};
↑の構造体を
cout << sizeof(Chip) << endl;
とやってみたらサイズは8と出たんですが、
int + BYTE = 5 ではないんでしょうか?
どういう計算で8と出るのでしょうか
どなたかお願いします m(__)m
0574デフォルトの名無しさん
2005/09/22(木) 21:56:40>>1を嫁。
で、終わらしてもいいんだが
ttp://www.kouno.jp/home/c_faq/c2.html#13
でも見ろ。
0575デフォルトの名無しさん
2005/09/22(木) 22:05:35ありがとうございます
0576デフォルトの名無しさん
2005/09/22(木) 22:05:56感謝です!
コンパイラによって変わるのか orz
0577デフォルトの名無しさん
2005/09/22(木) 22:23:41そのほうが少しは他の迷惑にならないから。sigh.
0578デフォルトの名無しさん
2005/09/22(木) 22:26:46まずはオマエから名乗れ
0579デフォルトの名無しさん
2005/09/22(木) 22:46:35おすすめの書籍やサイト等を教えてほしいです。
よろしくお願いします。
0580デフォルトの名無しさん
2005/09/22(木) 22:51:21>>1の過去ログのHPを参照。
0581デフォルトの名無しさん
2005/09/22(木) 23:35:20おまえ、ここに来た時点で独学じゃない。
0582デフォルトの名無しさん
2005/09/22(木) 23:38:14( ´∀`) おまえ
/, つ おちけつ
(_(_, )
しし'
0583デフォルトの名無しさん
2005/09/23(金) 00:40:41本を読んだ時点で独学失格!
でも、独学失格した方が絶対いい。
0584デフォルトの名無しさん
2005/09/23(金) 01:42:39教えてもらえる人がいて
その人が素直に教えるかが問題
俺の場合は ヘソ曲がりだったので独学だった
つーか 他人アテにしたらなんにもミニつかん
効率はいいけどな 多分
0585デフォルトの名無しさん
2005/09/23(金) 01:53:18やっぱり教えてもらうにしろ、
自分でいろいろ試行錯誤しないと身につかん。
ただ、全くの独学は効率悪すぎると感じた。
0586デフォルトの名無しさん
2005/09/23(金) 01:54:190587デフォルトの名無しさん
2005/09/23(金) 04:01:07雑誌に連載されるC言語講座だったなぁ
0588デフォルトの名無しさん
2005/09/23(金) 05:06:15Windows上のC言語でお勧めの環境はどれですか?
いろんな前提要件抜きでバシッとマジレス希望。
或いは、各々の特徴を述べ立てて比較検討希望。
よろしくお願いします。マジでお願いします。
0589503=504=507=509の廃人だが
2005/09/23(金) 05:11:28CはUNIX系OSでやるものだ。
あとMacOS Xかな。
0590デフォルトの名無しさん
2005/09/23(金) 05:15:370591503=504=507=509の廃人だが
2005/09/23(金) 05:21:30学生なら禿丸使っとけ。タダだ。
0592デフォルトの名無しさん
2005/09/23(金) 05:56:250593デフォルトの名無しさん
2005/09/23(金) 05:59:11>CはUNIX系OSでやるものだ。
早朝から馬鹿はっけん!
0594デフォルトの名無しさん
2005/09/23(金) 05:59:50#define Xstr(x) Str(x)
#define OP plus
char *opname = Xstr(OP);
main() {
printf("%s\n", opname);
}
これで
plus
が出力される理屈を教えてください。
OP -> plusはいつ変換されるんですか?
0595デフォルトの名無しさん
2005/09/23(金) 06:03:17んなもんはコンパイル時だろ
0596デフォルトの名無しさん
2005/09/23(金) 06:05:03誰かお願いします
0597503=504=507=509の廃人だが
2005/09/23(金) 06:16:32ごめんw 軽くボケてみた。
つか、Windowsだと、かえって実行環境整えるのが面倒だろ。
コマンドラインシェルとかフルセット揃ってる環境から入るのが一番いいかと。
文部科学省の方針で大学の情報系学科ではUNIX環境を使うことを推奨している
いちおうCygwinもその範疇に入っているはずだが。
0598デフォルトの名無しさん
2005/09/23(金) 06:49:190599デフォルトの名無しさん
2005/09/23(金) 06:56:28#define Str(x) #x
#define Xstr(x) Str(x)
#define OP plus
#define plus minus
char *opname = Xstr(OP);
char *opname2 = Str(OP);
main() {
printf("%s %s\n", opname, opname2);
}
の結果は
minus OP
でした。
2つはどこで変わったのでしょうか
0600デフォルトの名無しさん
2005/09/23(金) 07:03:19それと
氏ね>595
0601デフォルトの名無しさん
2005/09/23(金) 07:17:03はげ丸は秀丸の間違いじゃないか?
0602デフォルトの名無しさん
2005/09/23(金) 07:17:450603503=504=507=509の廃人だが
2005/09/23(金) 07:24:40ただの2ちゃん語のノリで言ってみたのだが
(参考)http://www.google.co.jp/search?hl=ja&c2coff=1&rls=GGLG%2CGGLG%3A2005-37%2CGGLG%3Aja&q=%22%E7%A6%BF%E4%B8%B8%22+site%3A2ch.net&lr=
ぶっちゃけこんな反応されたのは想定外だ。
吊ってくる。
0604デフォルトの名無しさん
2005/09/23(金) 10:53:35ツリに見えるがマジレスしておくと、(unixの処理系に限った話かも知れないが)
コンパイル以前のプリプロセシングフェーズ(cpp)において
char *opname = Xstr(OP);
が
char *opname ="plus";
に変換される。
0605デフォルトの名無しさん
2005/09/23(金) 12:21:040606デフォルトの名無しさん
2005/09/23(金) 13:20:12XStr(OP) => Str(plus) => "plus"
一回目の展開でOPも展開させて、二回目の展開でstringizeする。
これって、C FAQ の 11.17だよね。
ttp://www.kouno.jp/home/c_faq/c11.html#17
0607デフォルトの名無しさん
2005/09/23(金) 14:51:260608デフォルトの名無しさん
2005/09/23(金) 15:36:21http://www.google.com/search?hl=ja&lr=&ie=UTF-8&oe=UTF-8&q=BCC&num=50
0609デフォルトの名無しさん
2005/09/23(金) 15:39:530610588
2005/09/23(金) 16:14:05『有識者の人へ。
Windows上のC言語でお勧めの環境はどれですか?
いろんな前提要件抜きでバシッとマジレス希望。
或いは、各々の特徴を述べ立てて比較検討希望。
よろしくお願いします。マジでお願いします。 』
0611デフォルトの名無しさん
2005/09/23(金) 16:19:03前提要件抜きでバシッとマジレス
LSI-C86
おまいには、これで十分。
0612デフォルトの名無しさん
2005/09/23(金) 16:42:22んじゃ、マズレス。
Windows上で今更Cを使うメリットは皆無であり、せめてC++を使え。
以上。
0613篠
2005/09/23(金) 17:10:54有識者に意見を求めるのなら、分別ある言動をとってください。
3つのスレでその書き込みを確認しましたが、マルチと呼ばれる行為です。
荒らしにもなりかねず、嫌われる行為です。
議論が発散しているなんてことでは全然ないんですよ。
頭の悪さを露呈する言動は止めるべきです。出直しなさい。
「いい加減目覚めなさい」
”運が良ければ”誰かが教えてくれますよw
0614デフォルトの名無しさん
2005/09/23(金) 17:19:56前提要件抜きで決められるわけないだろボケ
討論はスレ違いだボケ
0615デフォルトの名無しさん
2005/09/23(金) 18:00:140616デフォルトの名無しさん
2005/09/23(金) 18:08:03のが嫌な場合、
SFUじゃないかな
無料版あるし
コンパイラはgccと、cl(あれば)が使える
0618デフォルトの名無しさん
2005/09/23(金) 18:17:52結局のところ、オマイ自身は588に対してなんの回答もしてないくせに
エラそうだな
イバりたかったらまず回答しろ
それでオマイの力量がわかるw
0619デフォルトの名無しさん
2005/09/23(金) 18:27:300620豆
2005/09/23(金) 18:29:44ライブラリの違いとか、正直何がいいかようわからん。
0621デフォルトの名無しさん
2005/09/23(金) 18:33:170622デフォルトの名無しさん
2005/09/23(金) 18:35:59VC++ MinGW gcc Boland あたりがメジャーどころ。
差が出るのはコンパイラじゃなく開発環境の方。
VC++ は統合開発環境がついててとっつきやすいかも。
Boland にはフリーソフトで統合開発環境がある。
gcc と MinGW は純粋にコンパイラだけ。コンソールでコンパイル。
あと、boost と STLport は使っといて損はないと思う。
いじょ、マジレス。
0623豆
2005/09/23(金) 18:36:00Windows用のものを開発するって決まっているんであれば、
なんだかんだVS.netがいいのか?それともBorlandとか?
評判も賛否両論だし、ようわからん。詳しいやついねーか?
CLIだったらUnix系のCygwin+GCCあわせ技とかがいいのかなぁ。
UNIXに乗り換えも簡単そうだし。。
誰か結論をまとめてくれ。
0624デフォルトの名無しさん
2005/09/23(金) 18:50:49さ ぁ 熱 く な っ て ま い り ま し た 。
0625デフォルトの名無しさん
2005/09/23(金) 18:53:13SFU vs Cygwin
http://pcweb.mycom.co.jp/special/2004/sfu/
0626メーカー勤務
2005/09/23(金) 19:03:46・LinuxとWindowsのデュアルブート。
・LinuxでGCC+GDB。
・WindowsでVS.net(有償の場合)、Borland(無償の場合)。
・当然Windows上にはTeraterm、X必須(Win ClientからのUnix Server
remote accessのため)。あとTeratermにSSH仕込むの忘れないで。
これでほとんどパーペキな環境。あとはプログラマのポテンシャルだなw
0627デフォルトの名無しさん
2005/09/23(金) 19:07:13void in(int *a,int *b)
{
scanf("%d %d",a,b);
}
int main(void)
{
int a,b;
in(&a,&b);
printf("%d %d",a,b);
}
というのができますよね?
これと同じことを構造体の場合でもやりたいのですがうまくいきません
とりあえず今わかる知識でソースを書いて見ましたがエラーが出ます
やりたいことは構造体のメンバreとimがあり、関数inで数値を入力しメイン関数で表示
したいんです
struct comp{
int re,im;
};
void in(int a.re,int a.im){
scanf("%d %d",a.re,a.im);
}
int main(void)
{
struct *a;
in(a->re,a->im);
printf("%d %d",a.re,a.im);
}
0628デフォルトの名無しさん
2005/09/23(金) 19:18:29struct comp {
int re, im;
};
void in(struct comp *c)
{
scanf("%d %d", &c->re, &c->im);
}
int main()
{
struct comp a;
in(&a);
printf("%d %d", a.re, a.im);
}
0629デフォルトの名無しさん
2005/09/23(金) 19:19:58>struct *a;
structだけじゃだめだろうに。
しかもこれだけじゃ実体がないじゃないか。
>void in(int a.re,int a.im){
意味不明。関数にaは関係ない。
void in(int *re, int *im)
か
void in(struct comp *a)
にしろ。
>in(a->re,a->im);
これは値渡し
0630デフォルトの名無しさん
2005/09/23(金) 19:20:13やりたいことは分かるが、まず宣言が違う
structだけじゃ意味がない。構造体変数の宣言はstruct タグ名 変数名;
それにポインタだけを宣言しても意味がない
mallocなりcalloc、allocで別途領域を作ってやる必要がある
それとin()の仮引数名もおかしい
0631デフォルトの名無しさん
2005/09/23(金) 19:28:43・・・で、VSとBorlandどっちがいいんだ?
または他のIDEとの差異(長短)は?
論点は「Windows上のC」だろ。そこが問題なのでは?
0632デフォルトの名無しさん
2005/09/23(金) 19:32:530633デフォルトの名無しさん
2005/09/23(金) 19:40:27勉強やそれに毛の生えた程度ならVSとかのIDE使うのは冗長
Cygwinが一番手っ取り早い+扱いやすい
逆に有る程度の規模のを作るならIDE必須
要は場合に依りけりだろ
0634世話焼き暇人
2005/09/23(金) 19:57:04#include <stdio.h>
#include <stdlib.h>
struct comp{
int re,im;
};
void in( int *re, int *im ) {
scanf("%d %d",re,im);
}
int main(void)
{
struct comp *a,b;
a = &b; // ミソ [a = (struct comp*)malloc(sizeof(struct comp));]でもいい
in( &a->re, &(*a).im ); // &a->re つまりは &b.re に同じ reのアドレスを渡す (*a).im もまた同様の解釈
printf("%d %d\n",a->re, b.im);
}
色々改造してポインタを理解するよろし
0635デフォルトの名無しさん
2005/09/23(金) 20:08:18Cygwinってそんなに手軽か?
お絵かきソフトとかちょろっとしたCOMサーバ、
COMのホスティングとか簡単に出来る?
Windowsプログラミングの典型的な例だが
俺は何も考えずVisualStudio.NET推奨
BoostとATL/WTLで逝け
Cは使い物にならんから捨てろ
ただしVS.NET2003を「今」買うのはタイミング的にアレなのでやめとけ
0636デフォルトの名無しさん
2005/09/23(金) 20:11:320637デフォルトの名無しさん
2005/09/23(金) 20:17:15あれってコンパイルして他環境で使えるの?
0639デフォルトの名無しさん
2005/09/23(金) 20:29:07「わたしはコレで廃人になりますた」
とでも言いたいのか、チミは!
0640デフォルトの名無しさん
2005/09/23(金) 21:21:36if( 0==abc( x, y) )
みたいに、if文の条件を慣習的に書いてるのですが
if( abc( x, y)==0 )
と書くよりも何か利点があったような覚えがあるのですが
忘れてしまいました。
ご存知の方、教えてください。
0641デフォルトの名無しさん
2005/09/23(金) 21:26:15=を一個打ちそびれて
a = 1 これはコンパイル通る
1 = a これ書き間違えたらエラーとなるけど、これの場合は・・・
0642デフォルトの名無しさん
2005/09/23(金) 21:27:12abc()がポインタを返す場合等、
if(abc(x,y)=0)と間違った場合、コンパイル時にエラーとして発見できない
0643デフォルトの名無しさん
2005/09/23(金) 21:28:06それfjとかではヒンシュク買ってたテクだな
0644デフォルトの名無しさん
2005/09/23(金) 21:30:32とは書かないが
if ("0".equals(str))
とは書くな、Javaとかで。strがnullでも大丈夫だから。
0645640
2005/09/23(金) 21:32:17もやもやが晴れますた。
社内にクソなmyコーディング規約を押し付ける厨がいるので
これで反論できます。
>>643
なぜ、ヒンシュクなんでしょう?
>>644 Javaは関係ないです
0646デフォルトの名無しさん
2005/09/23(金) 21:33:10初心者っぽい書き方をしておけば、注意深くソースを見てもらえる。
0647デフォルトの名無しさん
2005/09/23(金) 21:33:40反対派から言えば「直感的じゃない。」
それに最近のコンパイラは警告出してくれるしね
0648デフォルトの名無しさん
2005/09/23(金) 21:35:26if 内で代入文書いたら、普通コンパイラが警告を吐く。
読みにくくなるだけで、大した効果はないオナニーテクだから。
0649デフォルトの名無しさん
2005/09/23(金) 21:36:44改修なんか昔のだったりする。
0650デフォルトの名無しさん
2005/09/23(金) 21:37:44自然に読めるように「if (abc(x, y) == 0)」と書きなさい。
日本語にすればわかるでしょ?
「もしゼロがabc(x,y)ならば」と「もしabc(x,y)がゼロならば」と
どちらがわかりやすいか。
タイピングミスを怖がって、不細工なコーディングをするものではありません。
0651デフォルトの名無しさん
2005/09/23(金) 21:38:01*p = '\0';
のようなコードを良く書く俺にとっては
警告も余計なお世話なんだが、まあ広い目で見たら
しょーがないやね
0652デフォルトの名無しさん
2005/09/23(金) 21:40:00コードをチェックする方法として、コンパイラしか知らないってのは
プロとしてどうかと思う。
0653デフォルトの名無しさん
2005/09/23(金) 21:40:320654デフォルトの名無しさん
2005/09/23(金) 21:41:22普通英語で考えろよ。
おまえ、クソコーディング規約厨だろ。
0655デフォルトの名無しさん
2005/09/23(金) 21:42:36書いてる厨が、人をクソなmyコーディング規約が押し付けで反論の
余地と必要があると思っている点だなあ。どっちもクソ厨だからやめれ。
0656デフォルトの名無しさん
2005/09/23(金) 21:43:220657デフォルトの名無しさん
2005/09/23(金) 21:43:31英語でも同じだけどな。
if abc(x,y) equals to zero, ....
0658デフォルトの名無しさん
2005/09/23(金) 21:44:180659デフォルトの名無しさん
2005/09/23(金) 21:45:17昔の端末なら80x24程度で24ポイントのフォントだったりするから
全然見づらくない気がするんだが
いずれにせよ気になるんならlintを使え、が昔のやり方。
昔のコンパイラは今ほど親切でもお節介でもなかったからな。
0660デフォルトの名無しさん
2005/09/23(金) 21:46:00なにが?
0661デフォルトの名無しさん
2005/09/23(金) 21:46:27昔はソースリストを打ち出して、チーム全員で赤ペン持ちながらコードチェックだ。
0662デフォルトの名無しさん
2005/09/23(金) 21:46:42昔は、プロポーショナルフォントでコーディングすることなんてなかったから、
= と == は、幅だけで十分に区別できます。
0663デフォルトの名無しさん
2005/09/23(金) 21:48:03少なくともC界隈では。
やってる奴がいるとしたら、信じられない
0664デフォルトの名無しさん
2005/09/23(金) 21:48:07if (*abc(x,y) = 0) じゃないんだよ。 アンダスタン?
0665デフォルトの名無しさん
2005/09/23(金) 21:49:20年寄りの昔話スレじゃないのでこのへんでやめときますけど。
0666デフォルトの名無しさん
2005/09/23(金) 21:51:19int* abc(x, y){
static int p;
return &p;
}
のつもりだったんだけど
0667デフォルトの名無しさん
2005/09/23(金) 21:58:080668デフォルトの名無しさん
2005/09/23(金) 22:04:300669デフォルトの名無しさん
2005/09/23(金) 22:08:170との比較は構わんと思う。
0670デフォルトの名無しさん
2005/09/23(金) 22:10:27全角と半角の区別ができないやつとか、
大文字と小文字の区別ができないやつとか
ー と − の区別ができないやつとか
= と == の区別ができないやつとか
注意力が不足しているやつはプログラムしなくていいよ。
0671デフォルトの名無しさん
2005/09/23(金) 22:13:59falseでも明示的にif文の条件に書けと規約厨は言う。
0672デフォルトの名無しさん
2005/09/23(金) 22:19:03んで、Cはある程度知ってるんですがC++はまるで知らないわけでして
何で勉強するのがお勧めでしょう?
質問スレで推薦図書池言われましたが、にぎわってないみたいなんで、
できればよろしくお願いします
0673デフォルトの名無しさん
2005/09/23(金) 22:21:16推薦図書池
大丈夫、あそこは質問を投げかければ自然と人が集まってくる。
0674デフォルトの名無しさん
2005/09/23(金) 22:21:290675デフォルトの名無しさん
2005/09/23(金) 22:23:300676デフォルトの名無しさん
2005/09/23(金) 22:23:350677デフォルトの名無しさん
2005/09/23(金) 22:25:54ほーい、いってみます。
0678デフォルトの名無しさん
2005/09/23(金) 22:36:52愛の鞭
0680デフォルトの名無しさん
2005/09/23(金) 22:44:41例のif文
0681デフォルトの名無しさん
2005/09/23(金) 22:48:150682デフォルトの名無しさん
2005/09/23(金) 22:55:25プログラマの心理をまじめに分析すると、
普段プログラムで概ね思い通りの物を作ってるからじゃないかな。
うまくいかない事象に対面すると、どうしていいか判断できなくて、
癇癪を起こしたり、普段行っているプログラムを書くように
高圧的になったりする。
0683デフォルトの名無しさん
2005/09/23(金) 22:55:40C言語をはじめたばかりであまりわからないのです。
ビットシフトはなんの役に立つのでしょうか?
0684デフォルトの名無しさん
2005/09/23(金) 22:57:060685デフォルトの名無しさん
2005/09/23(金) 22:57:08何の役にも立ちません
0686675
2005/09/23(金) 22:59:46なるほど・・・
純粋なかんじですねw
でも、気難しいヒトほど、プログラムやその他創作活動に優れているような印象を受けます。
環境に馴染むことでなく、創作対象によりエネルギーを注がれているからかもしれませんね。
0687デフォルトの名無しさん
2005/09/23(金) 22:59:51現実にも写像したがる。
現実を眺める時間よりも、プログラムを読み書きしている時間の方が
長かったりするとこういった症状が出やすくなる。
つまりプログラマは人付き合いが下手糞なんだよね。
0688デフォルトの名無しさん
2005/09/23(金) 23:00:36ツマンネェヨ
0689デフォルトの名無しさん
2005/09/23(金) 23:04:58例えば症状が重い人の場合プログラムを読み書きすること自体が
現実逃避の手段になってるわけだから、その人からパソコンを
取り上げてしまえば、自殺するかもしれないね。
0690デフォルトの名無しさん
2005/09/23(金) 23:08:44犬なんかより、よっぽど忠実に働く
0691デフォルトの名無しさん
2005/09/23(金) 23:10:260692select
2005/09/23(金) 23:10:58呼び出し元の関数名を取得するにはどうしたらよいのでしょうか?
どなたかご教授願います。
(続く)
0693select
2005/09/23(金) 23:11:51----------------------------------------------
(gdb) bt
#0 0x400f5a92 in select () at regexec.c:1576
#1 0x40155968 in __DTOR_END__ () from /lib/i686/libc.so.6
#2 0x40034c1f in __libc_start_main (main=0x8048348 <main>, argc=1, ubp_av=0x0,
init=0x80483b0 <__libc_csu_init>, fini=0x80483f8 <__libc_csu_fini>, rtld_fini=0, stack_end=0x0)
at ../sysdeps/generic/libc-start.c:225
【環境】
----------------------------------------------
OS : Vine Linux 3.1
kernel: kernel-2.4.27
libc : glibc-2.3.3
gcc : gcc-3.3.2
gdb : gdb-5.2.1
【ソース】
----------------------------------------------
int
main(void)
{
fd_set readfd;
FD_ZERO(&readfd);
FD_SET(0, &readfd);
select(1, &readfd, NULL, NULL, NULL);
return 0;
}
0694デフォルトの名無しさん
2005/09/23(金) 23:15:17たぶんthunkが噛んでいるので、その一つ上(下?)が呼びだし関数。
0695select
2005/09/23(金) 23:23:05thunk ですか・・。
ググッってみたのですが、thunk というものが何なのか分かりませんでした^^;
もしよかったらお教え願います。
あと追加情報ですが、待ち状態に入る直前までは、次のように main() から select() が呼び出されていることが分かります。
------------------------------------------------------------
#0 0x400f5a60 in select () at regexec.c:1576
#1 0x080483a2 in main () at a.c:11
#2 0x40034c1f in __libc_start_main (main=0x8048348 <main>, argc=1, ubp_av=0x1,
init=0x80483b0 <__libc_csu_init>, fini=0x80483f8 <__libc_csu_fini>,
rtld_fini=0x400144a0 <_rtld_local>, stack_end=0x0) at ../sysdeps/generic/libc-start.c:225
0696デフォルトの名無しさん
2005/09/23(金) 23:33:59俺なんかフリーランス月収60マソ@26歳
0697デフォルトの名無しさん
2005/09/23(金) 23:37:05フリーで1人月60って別に高くないような・・・。
0698デフォルトの名無しさん
2005/09/23(金) 23:37:480699デフォルトの名無しさん
2005/09/23(金) 23:39:290700デフォルトの名無しさん
2005/09/23(金) 23:39:410701デフォルトの名無しさん
2005/09/23(金) 23:42:14【名-2】 《コ》サンク◆16ビットのメモリアドレスを32ビットに変換すること。
またはその逆。転じて別アーキテクチャのコードを読み出すこと。
16ビットと32ビットのプログラムではメモリアドレスの振り方が異なるので、アドレスの変換をして呼び出す必要がある。
0702デフォルトの名無しさん
2005/09/23(金) 23:54:39中間マージンなど諸経費は?
0703select
2005/09/23(金) 23:58:20thunk の意味はなんとなく理解できましたが、
この現象とどのように関わっているのかが正直分かりません。
難しいです・・・;;
0704デフォルトの名無しさん
2005/09/24(土) 00:06:39バグまで忠実に再現するがな。
0705デフォルトの名無しさん
2005/09/24(土) 00:54:10つけたがる人がいるんですけど
これってどうよ。
0706デフォルトの名無しさん
2005/09/24(土) 00:55:06そんだけ
0707デフォルトの名無しさん
2005/09/24(土) 00:56:01カーネルやライブラリのコード追ってりゃ嫌でも慣れる罠
0708廃人
2005/09/24(土) 00:56:380709デフォルトの名無しさん
2005/09/24(土) 01:01:390710廃人
2005/09/24(土) 01:04:50処理系依存でデフォで用意されてる関数に使うものだろ。
0711デフォルトの名無しさん
2005/09/24(土) 01:05:200712デフォルトの名無しさん
2005/09/24(土) 01:15:48答えになってない
なぜC++の話がでてくるんだ?
0713デフォルトの名無しさん
2005/09/24(土) 01:20:280714デフォルトの名無しさん
2005/09/24(土) 01:28:32builderX personalでいいの?
これって十分使えるの?
0715デフォルトの名無しさん
2005/09/24(土) 01:29:58はいそうです
0716デフォルトの名無しさん
2005/09/24(土) 01:48:240717デフォルトの名無しさん
2005/09/24(土) 02:02:56製品版との機能差ならBoland行って自分で調べて来い。
そんな事より、自分で試してみたらどうだ?
お前にとって使えるものかどうか。
0718デフォルトの名無しさん
2005/09/24(土) 02:57:18だいたい試すったって初心者にはよく分からんだろが
いろいろ聞いてやってみるかどうか考えてんだろ
だいたいこのスレはこういうことを聞くスレじゃないのかよ
自分で試したらどうだ?って・・・
0719デフォルトの名無しさん
2005/09/24(土) 03:07:33自作自演乙
0721デフォルトの名無しさん
2005/09/24(土) 03:18:37>>705-707 >>710 という流れじゃないのか?
正確に言うと、
(1) 下線に続き大文字か下線で始まる識別子は予約識別子である。
(2) 一般識別子とタグがファイル有効範囲で使われる場合については、
下線で始まる識別氏は予約識別子である。
つまりは、ファイルスコープでなければ、
下線に続き小文字か数字で始まる識別子は予約識別子ではない。
まあ、普通は使わないけど。
下線使いたければ、最後につけるべし。
0723デフォルトの名無しさん
2005/09/24(土) 03:26:040724デフォルトの名無しさん
2005/09/24(土) 11:53:130725デフォルトの名無しさん
2005/09/24(土) 12:03:160726デフォルトの名無しさん
2005/09/24(土) 12:26:27それもくだらんことで
0727デフォルトの名無しさん
2005/09/24(土) 12:48:060728デフォルトの名無しさん
2005/09/24(土) 12:50:590729722=720
2005/09/24(土) 12:59:590730デフォルトの名無しさん
2005/09/24(土) 13:03:50最低だ
0731デフォルトの名無しさん
2005/09/24(土) 13:10:27だってreallocしたときにアドレス変わってたんだもん
とかいうやついるよね。
0732デフォルトの名無しさん
2005/09/24(土) 13:20:58これ以上自分の不得意分野での議論が始まることを避けたいという深層心理に
よる言動ナリ
ダセ
0733デフォルトの名無しさん
2005/09/24(土) 13:24:03これでも遊んで気を落ち着けろ
0734デフォルトの名無しさん
2005/09/24(土) 13:36:45びっくりしたじゃないか
0735デフォルトの名無しさん
2005/09/24(土) 14:01:19どこにいるのか分からない…
突然出てきた奴がウォーリーでつか?
0736デフォルトの名無しさん
2005/09/24(土) 14:50:20ひさしぶりにやってみたけど、これほどつまんないものだとは思わなかった。
0737デフォルトの名無しさん
2005/09/24(土) 15:18:10while (!fgets(buf, sizeof(buf), fp))
printf(buf);
だと問題ないけど、
while (!feof(fp)) {
fgets(buf, sizeof(buf), fp);
printf(buf);
}
だと、最後の行が二度表示されるんだ。どうしてなんだ?
0738デフォルトの名無しさん
2005/09/24(土) 15:22:24fgetsは最後まで読み取った段階でEOFをセットするわけじゃなく
最後まで読んで、なお読み込もうとした時にEOFをセットするから。
0739デフォルトの名無しさん
2005/09/24(土) 15:23:48"今eofかどうか"を調べんだぞ?
fgets()とかしてからでないとeofに達しないじゃないか
0740デフォルトの名無しさん
2005/09/24(土) 15:28:52ちなみにこっちは、fgets()が失敗してもバッファクリアしないからたまたま表示されるんだな
気になるならfgets()する前にバッファクリアしとけ(多少は気にならなくなるだろw)
0741デフォルトの名無しさん
2005/09/24(土) 15:30:100742デフォルトの名無しさん
2005/09/24(土) 15:33:37ツリー順に書き出し
読み込み時は読みながらツリーにしていく
ってことでなくて?
0743デフォルトの名無しさん
2005/09/24(土) 15:35:390744737
2005/09/24(土) 15:37:17ありがとよ。
0745デフォルトの名無しさん
2005/09/24(土) 15:39:42いきなりfgets()が失敗するケースにもちういしる!
0746737
2005/09/24(土) 15:41:250747デフォルトの名無しさん
2005/09/24(土) 15:43:210748デフォルトの名無しさん
2005/09/24(土) 15:46:00printf(buf);
だと問題ない
ならそれでいいやん?
0749デフォルトの名無しさん
2005/09/24(土) 15:49:47scanfはバッファに\nが残って時々悪さを
しますよね?
そこで下記マクロを考えてみました。
これで防げない不具合や何か問題あれば教えて下さい。
#define prl(x) (printf(x"\n"))//これはオマケ。
#define scanpoi(i) (prl("整数を入力しEnterを押す。"),\
scanf("%d",&i),\
rewind(stdin))
#define scanpos(s) (prl("文字列を入力しEnterを押す"),\
scanf("%s",s),\
rewind(stdin))
0750デフォルトの名無しさん
2005/09/24(土) 15:51:31int situ=1.23;
printf("mono1:%1d\n",mono);
printf("mono2:%2d\n",mono);
printf("mono3:%3d\n",mono);
printf("situ1:%1d\n",situ);
printf("situ2:%2d\n",situ);
printf("situ3:%3d\n",situ);
などのように%dの記述を変える意味を教えてください。
また、"%5.2lf ",a[i]; という記述の意味も教えてください
0751デフォルトの名無しさん
2005/09/24(土) 15:53:01どうしてもscanfが使いたいなら
scanf("%d%*c", &i);
でいいやん
>>750
ttp://www.bohyoh.com/CandCPP/C/Library/fprintf.html
0752デフォルトの名無しさん
2005/09/24(土) 15:53:410753750
2005/09/24(土) 16:02:21指定されたサイト見てもよく分からないのですが。
簡単に説明していただけませんか。すみません。。
0754デフォルトの名無しさん
2005/09/24(土) 16:16:26簡単も何もそこに書いてあるのが全てだろ
つーか、あれが理解できないなら向いてない
0755デフォルトの名無しさん
2005/09/24(土) 16:21:570756セェンロン ◆89nOjCFiLI
2005/09/24(土) 16:45:53ここの作者がなかなか更新してくれないから、自分で同じようなの作ることにしたんだけど、、、
最初の画面の、エクセルっぽい(ぽくないかもw)一覧ってどうやって作るの?
ソートしてくれるのがすっごい便利で、是非使いたい。
リソースのダイアログの中にあるんかなぁ〜と思ってたら、無くて困ってます。
エロイ人教えてください。おねげーしますだ。
0757デフォルトの名無しさん
2005/09/24(土) 16:56:27馬鹿すぎ
0758デフォルトの名無しさん
2005/09/24(土) 17:07:27安全第一のプログラマ用にさらに進化した
reallocです。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void){
char *jo=(char *)NULL;//処理系によってNULLにもキャスト。
if(jo==NULL) //初回判定
jo = realloc(jo,60 );
if(jo==NULL){
jo= realloc(jo,0); return 1;
}//エラー処理、さすがにエラー処理のエラー処理はしない。
//誤って
jo = realloc(jo,60);
//とやっても全然問題はない。
strcpy( jo, "Nissyはどんな時でもサンダルを愛用する、" );
if(jo!=NULL)//2回目判定
jo = realloc( jo, 120 );
strcat( jo, "という事は、水虫じゃないか!\n" );
if(jo==NULL){
jo= realloc(jo,0); return 1;
}//エラー処理。
printf( jo );
jo=realloc( jo,0 );//メモリーの始末
jo=realloc(jo,0);
//2回やっても問題はない。
return 0;
}
0759デフォルトの名無しさん
2005/09/24(土) 17:07:57if(jo==NULL)で統一されました。かつ安全性も極めて?高い。
但しこの統一性と安全性にはコストがともなう。
最後のjo=realloc( jo,0 );の左辺のjo(NULLポインタ?)
はいつ消えるのであろうか?
0760デフォルトの名無しさん
2005/09/24(土) 17:08:480761デフォルトの名無しさん
2005/09/24(土) 17:10:280762デフォルトの名無しさん
2005/09/24(土) 17:16:500763セェンロン ◆89nOjCFiLI
2005/09/24(土) 17:23:53ASROCでググったら、ListViewってのが出てきました。
これです!やりたかったのは。
ありがとー♪
0764デフォルトの名無しさん
2005/09/24(土) 17:26:320765デフォルトの名無しさん
2005/09/24(土) 18:23:38>scanf("%d%*c", &i);
>でいいやん
%*cって…キモイやん。
rewindの方がまだマシでっせぇ。
>752
VC++では問題なく動いてます。
保証と言われても困るが…
0766デフォルトの名無しさん
2005/09/24(土) 18:25:440767デフォルトの名無しさん
2005/09/24(土) 18:36:22配列より入力された文字の方が多かったときの事考えてなくてワロタ
0768デフォルトの名無しさん
2005/09/24(土) 18:36:550769デフォルトの名無しさん
2005/09/24(土) 18:51:110770デフォルトの名無しさん
2005/09/24(土) 18:55:350771デフォルトの名無しさん
2005/09/24(土) 19:01:08一回ぐらいは、きちんとprintfのマニュアルを読んだほうが良い。
0772デフォルトの名無しさん
2005/09/24(土) 19:02:050773デフォルトの名無しさん
2005/09/24(土) 19:11:150774デフォルトの名無しさん
2005/09/24(土) 20:21:05最低限、マニュアルくらい読んでから書けよな。
0775デフォルトの名無しさん
2005/09/24(土) 21:17:11┌──┐┌──┐ ┌──┐┌──┐
│整数││ │─→ │整数││ │─→ ・・・
└──┘└──┘ └──┘└──┘
欄名 data next data next
この図はC言語の構造体cellの内部構造なんですけど
cellの定義ってなんですか
0776デフォルトの名無しさん
2005/09/24(土) 21:19:23int data;
struct cell*next;
};
多分こんな感じ
0777デフォルトの名無しさん
2005/09/24(土) 21:20:37宿題すれへ池。
と言ってもいいが答えておこう。
struct cell
{
int data
struct cell *next;
};
0778デフォルトの名無しさん
2005/09/24(土) 21:25:190779デフォルトの名無しさん
2005/09/24(土) 21:27:59この場合のは(片方向の)リスト構造って言って頭から順に処理していくときに便利
0780デフォルトの名無しさん
2005/09/24(土) 21:32:36俺の持ってる本に載ってないうえに、あまりに短いキーワードで
ぜんぜん検索にひっかからんです。
0781780
2005/09/24(土) 21:33:520782デフォルトの名無しさん
2005/09/24(土) 21:33:58フォローどうもです。データ構造について勉強してみます。
0783デフォルトの名無しさん
2005/09/24(土) 22:53:24ありがとうございます。
今度からは宿題スレに行きます。
0784デフォルトの名無しさん
2005/09/24(土) 23:12:340785デフォルトの名無しさん
2005/09/24(土) 23:13:090786デフォルトの名無しさん
2005/09/24(土) 23:15:03http://www.gnu.org/
0787784
2005/09/24(土) 23:17:16参考にさせていただきます
0788デフォルトの名無しさん
2005/09/24(土) 23:22:19感動して涙が出てくるようなマネしたくなるようなスゴイ
ソースを見たことは、一度もないな。
0789廃人
2005/09/24(土) 23:29:54あんまりコードは読んだことはないんだが、奴らネストの深い条件分岐やループ書きまくってんだろ。
Linuxのソースもインデントはタブだしな。なんとなくだが、いい仕事してるなってのはわかる。
0790デフォルトの名無しさん
2005/09/24(土) 23:56:44動くソース>>>>>>>>>>>>綺麗なソース
なわけだが
0791デフォルトの名無しさん
2005/09/25(日) 00:03:260792デフォルトの名無しさん
2005/09/25(日) 00:15:43現実で、ぬるぽ、って言ったら殴られるか?
0793デフォルトの名無しさん
2005/09/25(日) 00:19:30いや、殴られるし
0794デフォルトの名無しさん
2005/09/25(日) 00:19:440795デフォルトの名無しさん
2005/09/25(日) 00:27:570796デフォルトの名無しさん
2005/09/25(日) 00:41:40精神を殴られてるんだよ。
ハートで感じろ。
0797デフォルトの名無しさん
2005/09/25(日) 01:50:50あるソースがあり、main関数で
int main( int argc, int **argv)
と仮引数宣言されているとします。
また、このソースをコンパイルした実行ファイルをa.exeとします。
質問の意図がわかりにくいと思うのですが、
このとき下のような順番で処理されていると考えていいのでしょうか?
1.>a.exe b cと実行
2."a.exe","b","c"がそれぞれメモリのどこかの配置される
3."a","b","c"のアドレスを代入されたポインタがこの順でメモリのどこかに配置される
4.main関数に3.の"a"のアドレスを代入されたポインタのアドレスが渡される
0798デフォルトの名無しさん
2005/09/25(日) 01:59:41その処理は半ばOSの仕事であり半ばスタートアップルーチンの仕事だ。
後者はコンパイラにソースがついているだろうからそれを読んでみるといい。
ここでは個別の実装については語れないので必要なら適宜該当スレへ。
0799デフォルトの名無しさん
2005/09/25(日) 02:07:59ありがとうございます。C言語解説のサイト、テキストを見ても判然としないので困っていました。
少し調べてみたいと思います。
0800デフォルトの名無しさん
2005/09/25(日) 02:21:470801デフォルトの名無しさん
2005/09/25(日) 02:59:530802デフォルトの名無しさん
2005/09/25(日) 03:01:570803デフォルトの名無しさん
2005/09/25(日) 03:27:580804デフォルトの名無しさん
2005/09/25(日) 04:50:40書くけど、void氏がmixiを強制退会になってたんだってw
http://d.hatena.ne.jp/mixi_love/20050811
古い話題ですまん
0805デフォルトの名無しさん
2005/09/25(日) 05:11:250806デフォルトの名無しさん
2005/09/25(日) 05:20:55それに、専用スレがあるんだ。だから充分スレ違いだ。
0807デフォルトの名無しさん
2005/09/25(日) 09:39:51あったら教えて。
0808デフォルトの名無しさん
2005/09/25(日) 09:44:40time.hの中にtime_tからstruct tmを生成する関数やその逆を行なう関数がある。
struct tmには曜日のメンバもあるので、struct tm → time_t → struct tmで曜日が得られる。
0809デフォルトの名無しさん
2005/09/25(日) 10:11:190810807
2005/09/25(日) 10:36:21int getwday(int y, int m, int d){
return y -= m < 3, (y + y / 4 - y / 100 + y / 400 + "032503514624"[m - 1] - '0' + d) % 7;
}
0811デフォルトの名無しさん
2005/09/25(日) 11:11:46Zeller の公式まで教えてやったのにそれかw
0812デフォルトの名無しさん
2005/09/25(日) 13:19:22工エエェェ(´д`)ェェエエ工工
0813デフォルトの名無しさん
2005/09/25(日) 13:59:43ttp://www9.plala.or.jp/sgwr-t/detail/EnvSet.html
(↑少し詳しい開発環境設定の説明のページです)
の「4」のコンパイルとリンクをコマンドプロンプトでやると以下のようになるんですけど何が悪いんですかね?
教えてください〜
C:\cwork>bcc32 hello.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
hello.c:
エラー E2209 hello.c 1: インクルードファイル 'stdio.h' をオープンできない
警告 W8065 hello.c 5: プロトタイプ宣言のない関数 'puts' の呼び出し(関数 main )
*** 1 errors in Compile ***
0814デフォルトの名無しさん
2005/09/25(日) 14:04:004.コンパイルオプションの設定のbcc32.cfgの設定が不味いな
-I"c:\Borland\Bcc55\include"
-L"c:\Borland\Bcc55\lib"
↑の"c:\Borland\Bcc55\include"はちゃんと存在するフォルダを指してるか?
あと、bcc32.cfgはbcc32.exeがあるのと同じフォルダに保存しなきゃダメだぞ
0815デフォルトの名無しさん
2005/09/25(日) 14:17:58"c:\Borland\Bcc55\include"はちゃんと存在してました。
あと、bcc32.exeがC:\borland\bcc55\BinにあったのでC:\lsic330c\BINにあったbcc32.cfgを移しました。
ちょっともう一度試してみます。
0816デフォルトの名無しさん
2005/09/25(日) 14:21:46Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
sample.c:
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
がきました!!
ご指摘とおりbcc32.cfgはbcc32.exeがあるのと同じフォルダに保存してなかったのが原因でした。
ありがとうございます!これからいろいろCやってみます。
0817デフォルトの名無しさん
2005/09/25(日) 14:58:210818デフォルトの名無しさん
2005/09/25(日) 15:02:33誤爆か?できる。
0819デフォルトの名無しさん
2005/09/25(日) 16:29:00というのを間違って覚えたという感じだな。
まあ、月を扱う部分は配列使ってもいいとは思うけど。
それが >>810 ではあるのだが、文字列を使わんでも int 配列でいいじゃん・・・。
0820デフォルトの名無しさん
2005/09/25(日) 17:17:45%1dや、%5.2lf と書く意味やメリットを教えてください。
0821デフォルトの名無しさん
2005/09/25(日) 17:22:460822デフォルトの名無しさん
2005/09/25(日) 17:30:57なんとなく指定の形に揃えたい場合に役立つ
0823デフォルトの名無しさん
2005/09/25(日) 18:06:270824デフォルトの名無しさん
2005/09/25(日) 19:23:36printf は、可変個引数の引渡し時に float → double 変換が暗黙に行われるので
f と lf で区別する必要がないので、f のみ。
0825デフォルトの名無しさん
2005/09/25(日) 20:25:28C99ではlfが追加されている。
0826デフォルトの名無しさん
2005/09/25(日) 21:03:340827デフォルトの名無しさん
2005/09/25(日) 21:05:230828デフォルトの名無しさん
2005/09/25(日) 21:11:03{
if (s2->set[i] = s3->set[j])
// ホニャララ
}
==とするべきところを上のように間違えててもコンパイルエラーになりませんでした。
s2はconstで修飾されているけど正常なんですか?
コンパイラはVC2003です。
0829デフォルトの名無しさん
2005/09/25(日) 21:14:55代入されるだけだからコンパイルエラーなどになるはずはないだろ
0830デフォルトの名無しさん
2005/09/25(日) 21:15:51言い換えるとsetがconst修飾されてない型へのポインタなら問題ない
問題があってもコンパイラにはエラーにする義務はない
0831デフォルトの名無しさん
2005/09/25(日) 21:16:05set がポインタで、const 修飾されていなければ、正しい挙動。
set が配列ならおかしな挙動。
0832デフォルトの名無しさん
2005/09/25(日) 21:18:31Setのメンバのsetはポインタ型だよな。
const Set *s2ってことはs2->set自体はconstだけど、s2->setの指す先まではconstにならない。
元の構造体の宣言時にsetがconstなポインタであるかそうでないかを見ている。
0833デフォルトの名無しさん
2005/09/25(日) 21:24:25setはconstでないポインタです。
構造体をconstで宣言すれば各メンバもconstになると勘違いしてました。
どうもありがとうございました。
0834デフォルトの名無しさん
2005/09/25(日) 21:26:00メンバはconstになるよ。
ただ、ポインタの指す先がconstにならないだけ。
0836デフォルトの名無しさん
2005/09/25(日) 21:38:410837デフォルトの名無しさん
2005/09/25(日) 21:40:30の間違いじゃね?
0838デフォルトの名無しさん
2005/09/26(月) 03:21:45C言語って標準でスタック用意してないの?
0839デフォルトの名無しさん
2005/09/26(月) 03:28:21C標準ではコンテナは一切用意されてない。
用意されてるのは配列だけ。
あと、スレタイはちゃんと確かめてからレス投げような。
0840デフォルトの名無しさん
2005/09/26(月) 03:32:37はい、ありがとうございます
これから気をつけます
0841デフォルトの名無しさん
2005/09/26(月) 13:27:32ささ、C++へおいで。
0842デフォルトの名無しさん
2005/09/26(月) 14:04:22言い方方ないですかね?
0843デフォルトの名無しさん
2005/09/26(月) 14:08:03shortが2バイトでchar a[N];とすれば単にshort *p = (short *)a;でいけるはずだが、お前のコードはどうなっているのか?
0844デフォルトの名無しさん
2005/09/26(月) 14:08:40shortの配列にmemcpyするとか...
0845デフォルトの名無しさん
2005/09/26(月) 14:09:10%1dや、%5.2lf と書く意味やメリットを教えてください。
コンパイル・実行してみて数値が変わるのは分かるのですが、いまいちどう変わっているのかよく分からなくて。。。
何故、5.2といって中途半端な数にするのでしょうか?
0846デフォルトの名無しさん
2005/09/26(月) 14:12:19その質問はもう飽きた。
0847デフォルトの名無しさん
2005/09/26(月) 14:19:29printfのマニュアル参照。
> 何故、5.2といって中途半端な数にするのでしょうか?
そういうフォーマットで出力したいからじゃないの?
0849デフォルトの名無しさん
2005/09/26(月) 14:24:46for(i=2; i<=n; i++) {
b[i][i-1] = 1.0;
b[i][i] = -p;
b[i][i+1] = 1.0;
これの意味って、行列bの、b(1,1)と、b(n+1,n+1)には1を代入して、
b(i,i-1) に 1.0、 b(i,i)に -p、 b(i,i+1) に 1.0 を代入するってことですよね?
指定されてないところ(例えば、b(1,2)とか)には 0 が代入されるのでしょうか?
後、これはn+1 * n+1 のマトリクスですよね?
初心者質問ですみません。。。
0850デフォルトの名無しさん
2005/09/26(月) 14:27:56されない。
0851デフォルトの名無しさん
2005/09/26(月) 14:28:28醤油小さじ1杯、出汁520mlと書く意味やメリットを教えてください。
作ってみて味が変わるのは分かるのですが、いまいちどう変わっているのかよく分からなくて。。。
何故、520mlといって中途半端な分量にするのでしょうか?
0852845
2005/09/26(月) 14:30:12キモいの! 人の質問バカにしたような言いかたすんなや!
おもんないし。
0853デフォルトの名無しさん
2005/09/26(月) 14:33:35> これの意味って、行列bの、b(1,1)と、b(n+1,n+1)には1を代入して、
> b(i,i-1) に 1.0、 b(i,i)に -p、 b(i,i+1) に 1.0 を代入するってことですよね?
そうだけど、i は 2 から n までね。
何をするものか分からないから見当違いの質問になるかもしれんが、
b(1,2) と b(n+1,n) に入れないのは問題ないのね?
> 指定されてないところ(例えば、b(1,2)とか)には 0 が代入されるのでしょうか?
されない。
こういう場合は事前に 0 で埋めておけばいい。
> 後、これはn+1 * n+1 のマトリクスですよね?
n+1 * n+1 のマトリクスを表現しようとはしているだろうけど、
この配列自体のサイズは n+2 * n+2 以上のサイズな筈だ(でなかったら、バグ)。
C の配列の添え字は 1 ではなく 0 から始まるからな。
添え字の最大値は、配列のサイズ - 1 だ。
添え字を 1 から始めたいのだろうが、0 から始めないとメモリが無駄になる。
既にあるプログラムを利用するのであれば仕方がないが、
そういうプログラムと無関係に自分で新しく書くときは、
添え字を 0 から始める癖をつけた方がいい。
0854デフォルトの名無しさん
2005/09/26(月) 14:44:120855デフォルトの名無しさん
2005/09/26(月) 14:46:57>>851 はあながちバカにしてるだけじゃないと思うぞ。
これはこれで十分な解答だと思うんだが。
0856デフォルトの名無しさん
2005/09/26(月) 15:00:53>>821-822 では納得できなかったということなのか?
0857デフォルトの名無しさん
2005/09/26(月) 15:35:21どのようにすればいいのでしょうか?
単純に、ファイルポインタを先頭に、移動しfwriteで書き込めばいいのかと思いましたが
最終行に文字列が追加されてしまいました...
大変申し訳ありませんが、どなたかご教授願います。
0858デフォルトの名無しさん
2005/09/26(月) 15:40:55fopen(..., "a")などでない限り、先頭に移動して書けば先頭に書かれると思うが。
いずれにしろ、挿入はされないから別ファイルに0から書き出してあとでファイル名変更などすることになる。
0859デフォルトの名無しさん
2005/09/26(月) 15:44:50>>1嫁、スレ違いだ。でも理解力無いだろうから、初心者スレ逝け。
それといいかげん、半可通の低脳厨が自己顕示欲レスつけるの、やめろ。
0860857
2005/09/26(月) 15:49:56ありがとうございます。
ご指摘の通り(...,"a")で開いていました。
別ファイルに書き出して、リネームの方法でやる事にします。
>>859
誠に申し訳ありません。
今後、このような事を起こさないように気をつけます。
0861デフォルトの名無しさん
2005/09/26(月) 16:22:50威張るだけのお前さんよりはどっちもマシだろうよ
0862デフォルトの名無しさん
2005/09/26(月) 16:31:33キモいのっ! 人の質問バカにしたような言いかたしないでよん!
おねがいだから、無職なのだから
0863デフォルトの名無しさん
2005/09/26(月) 16:31:520864デフォルトの名無しさん
2005/09/26(月) 16:32:25お前よりはマシ
0865デフォルトの名無しさん
2005/09/26(月) 16:33:070866デフォルトの名無しさん
2005/09/26(月) 16:34:32オウム返しなレスしかできない奴って哀れだな
0867デフォルトの名無しさん
2005/09/26(月) 16:36:19こいつ狂ってる
0868866
2005/09/26(月) 16:38:09ご指摘の通り
狂ってます^^
0869デフォルトの名無しさん
2005/09/26(月) 16:38:540870デフォルトの名無しさん
2005/09/26(月) 16:41:31お前のレスが一番自己顕示欲に溢れてるよ。
0871デフォルトの名無しさん
2005/09/26(月) 16:45:080872デフォルトの名無しさん
2005/09/26(月) 16:46:140873デフォルトの名無しさん
2005/09/26(月) 16:47:35Mr.アワレ 乙。
0874デフォルトの名無しさん
2005/09/26(月) 16:49:52大体スレ違いじゃないだろ
0875デフォルトの名無しさん
2005/09/26(月) 16:50:22さて^^ もうじき17:00です。無職が表を出歩ける時間はここまでですよw
0876デフォルトの名無しさん
2005/09/26(月) 16:52:310877デフォルトの名無しさん
2005/09/26(月) 16:52:520878デフォルトの名無しさん
2005/09/26(月) 16:54:290879デフォルトの名無しさん
2005/09/26(月) 16:54:57printf();ごときで偉そうに
0880デフォルトの名無しさん
2005/09/26(月) 16:58:030881デフォルトの名無しさん
2005/09/26(月) 16:59:120882デフォルトの名無しさん
2005/09/26(月) 16:59:300883デフォルトの名無しさん
2005/09/26(月) 17:00:11/ィ/
.._ .......、.__ /:/l!/
:~""''..) ゙゙"''─‐'''" (;;;,l
゙、'、::::::ノ ゙ヽ
``、/ \ / ゙ヽ ぷっ
/ ,,..._ ト─‐イ _,,, ,,/
ヽ,,. ヽ,_ノ ,,/
ヾ、,, ,/
/゙ " ヽ
/ i!
(⌒i ヽ 〈 i / ,i
γ´ ^゙ヽ. l l γ´ ^ ゙ヽ
i i,__,,ノ ヽ_i, i
ヽ,_,,ノ"~´ ̄``゙ヽ,_,,ノ
0884デフォルトの名無しさん
2005/09/26(月) 17:01:42>>845
>>845
>>845
0885デフォルトの名無しさん
2005/09/26(月) 17:05:210886デフォルトの名無しさん
2005/09/26(月) 17:06:23>>851
キモいの! 人の質問バカにしたような言いかたすんなや!
おもんないし。
852 名前:845[] 投稿日:2005/09/26(月) 14:30:12
>>851
キモいの! 人の質問バカにしたような言いかたすんなや!
おもんないし。
852 名前:845[] 投稿日:2005/09/26(月) 14:30:12
>>851
キモいの! 人の質問バカにしたような言いかたすんなや!
おもんないし。
852 名前:845[] 投稿日:2005/09/26(月) 14:30:12
>>851
キモいの! 人の質問バカにしたような言いかたすんなや!
おもんないし。
852 名前:845[] 投稿日:2005/09/26(月) 14:30:12
>>851
キモいの! 人の質問バカにしたような言いかたすんなや!
おもんないし。
852 名前:845[] 投稿日:2005/09/26(月) 14:30:12
>>851
キモいの! 人の質問バカにしたような言いかたすんなや!
おもんないし。
852 名前:845[] 投稿日:2005/09/26(月) 14:30:12
>>851
キモいの! 人の質問バカにしたような言いかたすんなや!
おもんないし。
852 名前:845[] 投稿日:2005/09/26(月) 14:30:12
>>851
キモいの! 人の質問バカにしたような言いかたすんなや!
おもんないし。
0887デフォルトの名無しさん
2005/09/26(月) 17:07:380888デフォルトの名無しさん
2005/09/26(月) 17:09:28ま た 大 阪 か
0889デフォルトの名無しさん
2005/09/26(月) 17:09:460891デフォルトの名無しさん
2005/09/26(月) 17:11:420892デフォルトの名無しさん
2005/09/26(月) 17:12:090893デフォルトの名無しさん
2005/09/26(月) 17:13:33気持ち悪い、哀れなおっさんだな。
0894デフォルトの名無しさん
2005/09/26(月) 17:15:22>>860-884 ……アホ過ぎ。ニヤニヤ。ここまで全部俺の自演だ。
0895デフォルトの名無しさん
2005/09/26(月) 17:15:540896デフォルトの名無しさん
2005/09/26(月) 17:16:290897デフォルトの名無しさん
2005/09/26(月) 17:17:48( ´_ゝ`) ならもう満足したでしょ 哀れなおっさん
0898デフォルトの名無しさん
2005/09/26(月) 17:24:08/jj7 \ミt /、 ヽ はぁ?黙ってろデブ
彡jj_r==i_r=tiミ |・ |―-、 |
>>859彡l.  ̄・・ ̄ ミ q -´ 二 ヽ |
_lt '=t /__ ノ_ ー | |
_, -t"lt__ j l ^゙''ー 、 \. ̄` | /
/ ヽ ̄ 丿7 \ O===== |
/ `-‐''゙ ヽ / |
0899デフォルトの名無しさん
2005/09/26(月) 17:25:18/jj7 \ミt あ?潰すぞ /、 ヽ ご、ごめんなさい
彡jj_r==i_r=tiミ |ヽ |―-、 |
彡l.  ̄・・ ̄ ミ q -´ 二 ヽ |
_lt '=t /__ ノ_ ー | |
_, -t"lt__ j l ^゙''ー 、 \. ̄` | /
/ ヽ ̄ 丿7 \ O===== |
/ `-‐''゙ ヽ / |
0900デフォルトの名無しさん
2005/09/26(月) 17:25:22黙れprintf
0901デフォルトの名無しさん
2005/09/26(月) 17:28:120902デフォルトの名無しさん
2005/09/26(月) 17:30:12#include<stdio.h>
struct pai
{
int otl;
char moji[5];
}
main()
{
//
エラー:main関数の構文がおかしい
と出るのですが、何が原因と考えられるでしょうか?
0903デフォルトの名無しさん
2005/09/26(月) 17:31:05お前の頭
終了
0904デフォルトの名無しさん
2005/09/26(月) 17:31:360905デフォルトの名無しさん
2005/09/26(月) 17:35:330907デフォルトの名無しさん
2005/09/26(月) 17:46:50{
で開いて
}
で閉じてない
0908デフォルトの名無しさん
2005/09/26(月) 17:47:420909デフォルトの名無しさん
2005/09/26(月) 17:50:020910デフォルトの名無しさん
2005/09/26(月) 17:50:54structって}の前にセミコロンがいるだろ。
0912デフォルトの名無しさん
2005/09/26(月) 17:57:08え?また、君が偉っらそうに答えてやるんじゃないの?w
0913デフォルトの名無しさん
2005/09/26(月) 17:59:580914デフォルトの名無しさん
2005/09/26(月) 18:02:51structの書き方が C++か? セミコロンが無いのはともかくとして
0915デフォルトの名無しさん
2005/09/26(月) 18:04:140916デフォルトの名無しさん
2005/09/26(月) 18:05:150917902
2005/09/26(月) 18:20:11構造体のメンバを一度もmain関数で呼び出してないの原因なのかなぁと、、、。
0918デフォルトの名無しさん
2005/09/26(月) 18:23:51ぜんぜん聞いてないし
0919デフォルトの名無しさん
2005/09/26(月) 18:24:030920デフォルトの名無しさん
2005/09/26(月) 18:27:50既にこのスレ内に答えがあるんだから少しはレスを読め
0922デフォルトの名無しさん
2005/09/26(月) 18:33:11すいません。ちょっと、すみませんがレスを見て下さい
いやマジでもう答えてくれてる人いるからさ
0923デフォルトの名無しさん
2005/09/26(月) 18:36:500924デフォルトの名無しさん
2005/09/26(月) 18:38:11いやそうじゃなくって、お前に対するレスの中に答えがあるんだってば
何も上から全部読まなくても
0925デフォルトの名無しさん
2005/09/26(月) 18:38:27それは、何番目のレスでしょうか?
0926デフォルトの名無しさん
2005/09/26(月) 18:44:13とりあえずでているのは>>907
それ以外にも
main関数の宣言自体がよろしくない
structの宣言の終端の;が抜けている
0927902
2005/09/26(月) 18:45:11毎回main()の行で、エラーが出てます。
エラー E2141 stable9.c 92: 宣言の構文エラー
2ちゃんに書き写してるときにコロンを書き忘れてしまったんス
ごめんなさい
0928デフォルトの名無しさん
2005/09/26(月) 18:47:140929デフォルトの名無しさん
2005/09/26(月) 18:48:390930902
2005/09/26(月) 18:49:23main()の部分なんですけど、
main(){
/***省略***/
return 0;
}
とやってですね。mainの部分でエラーが出るんです
0932902
2005/09/26(月) 18:52:47>>929
そうっス。mainの前に、グローバル変数と関数が書いてあるんス。
main関数の外でstructを使い出してから、main()の部分でエラーが出てしまって、
先に進まなくて困ってしまっているんです
0933デフォルトの名無しさん
2005/09/26(月) 18:54:010935デフォルトの名無しさん
2005/09/26(月) 18:56:06つーか、もうどっかにソースうpしろ
0936デフォルトの名無しさん
2005/09/26(月) 18:56:120937デフォルトの名無しさん
2005/09/26(月) 18:58:05ソースコードの天辺から「{」と「}」の数を検索して数えろ
そしてそのうちからコメントアウトされてる分を差し引いた数を教えろ
0938デフォルトの名無しさん
2005/09/26(月) 19:00:20このままだと埒が明かんぞ
0939デフォルトの名無しさん
2005/09/26(月) 19:01:01};路線が消えてしまったからって、そんなにいきり立たなくてもいいだろう。
main(){
/***省略***/
return 0m(^^)プギャってされちゃうよ。
void mainで返り値0って・・・
0941デフォルトの名無しさん
2005/09/26(月) 19:05:40だって気になるじゃないか
このまま夜をむかえたら夢の中でデバッグしちゃうよ
0942デフォルトの名無しさん
2005/09/26(月) 19:11:240943デフォルトの名無しさん
2005/09/26(月) 19:21:55return 0m(^^)プギャ
0944902
2005/09/26(月) 19:34:49http://49uper.com/up-s/index.php?mode=list
ma-jyan8.c の内容を stable.c に書き換えてるんですけれども
いつもドラは、南しか積もらないし関数をまたぐオバーヘッドが起こってるのかな?と思うのですが
それで今最初から書き直してます。
0945859
2005/09/26(月) 19:36:57不完全な質問にアホ回答者が答えたつもりになっても無駄なんだって。
0946デフォルトの名無しさん
2005/09/26(月) 19:39:54char *kanji[34]={
...
} ←ここにセミコロンがない
0948デフォルトの名無しさん
2005/09/26(月) 19:47:22いや、そういうのじゃなくて大人げないやり取り自体がツボだと。
0949デフォルトの名無しさん
2005/09/26(月) 19:48:090950デフォルトの名無しさん
2005/09/26(月) 19:53:290951デフォルトの名無しさん
2005/09/26(月) 19:54:54はい、bccでは、エラーが何故かmain()のところでした。
デバックのやり方がわかりません^^;
0952デフォルトの名無しさん
2005/09/26(月) 19:56:08デバックのやり方を教えて下さい。w
0953デフォルトの名無しさん
2005/09/26(月) 20:22:06ヤメロ。ハライタスwwwwwwww
0954デフォルトの名無しさん
2005/09/26(月) 20:36:45ぼくにギジュツを叩き込んでください
0955デフォルトの名無しさん
2005/09/26(月) 20:42:14もとからか
0956デフォルトの名無しさん
2005/09/26(月) 20:48:53一気に冷めた・・・アバヨ
0957デフォルトの名無しさん
2005/09/26(月) 20:57:330958デフォルトの名無しさん
2005/09/26(月) 21:02:45C言語のセンスは感じんが
ボケのセンスは神の領域と保障する
0959デフォルトの名無しさん
2005/09/26(月) 21:12:390960デフォルトの名無しさん
2005/09/26(月) 21:13:370961デフォルトの名無しさん
2005/09/26(月) 21:24:440962デフォルトの名無しさん
2005/09/26(月) 21:25:49http://pc8.2ch.net/test/read.cgi/tech/1127737437/
0963デフォルトの名無しさん
2005/09/26(月) 21:38:10ポインタのポインタのポインタテラウザス('A`)
ppppppppppELEMENTってなんだよ氏ね
0964デフォルトの名無しさん
2005/09/26(月) 21:43:40さすが。吐き捨てる言葉が違う
0965デフォルトの名無しさん
2005/09/26(月) 21:50:540966デフォルトの名無しさん
2005/09/26(月) 21:57:550967デフォルトの名無しさん
2005/09/26(月) 22:07:57そういう状況がありうるのかどうかは知らんな。
0968デフォルトの名無しさん
2005/09/26(月) 22:30:53#include<stdio.h>
#include<stdlib.h>
main(){
int i,j,ii,num,*p;
num=3;
p=(int *)malloc(sizeof(int)*10*10*num);
for(ii=0;ii<num;ii++){
for(i=0;i<10;i++){
for(j=0;j<10;j++){
p[100*ii+i*10+j]=100*ii+i*10+j;
}
}
}
for(ii=0;ii<num;ii++){
for(i=0;i<10;i++){
for(j=0;j<10;j++){
printf("%d ",p[100*ii+i*10+j]);
}
printf("\n");
}
printf("\n");
}
free(p);
return 0;
}
0969デフォルトの名無しさん
2005/09/26(月) 22:33:520970デフォルトの名無しさん
2005/09/26(月) 22:38:44つか、ここはC言語スレだ。
0971デフォルトの名無しさん
2005/09/26(月) 22:44:18それは普通は3次元配列と言うな
0972デフォルトの名無しさん
2005/09/26(月) 23:17:170974デフォルトの名無しさん
2005/09/26(月) 23:29:511次元配列で3次元配列をシミュレートしてるんだろ
0975デフォルトの名無しさん
2005/09/26(月) 23:31:000976廃人
2005/09/26(月) 23:57:53俺はリスト構造かなんかで非常にマズーなコード書いたんじゃないかとオモタ
0977デフォルトの名無しさん
2005/09/27(火) 00:07:550978デフォルトの名無しさん
2005/09/27(火) 00:17:510979デフォルトの名無しさん
2005/09/27(火) 00:19:25ポインタテーブルだけでものっそい量になってしまうな。
アクセスしやすいというメリットが、
ポインタテーブルがかさばるというデメリットに
完全に押しつぶされるな。
0980デフォルトの名無しさん
2005/09/27(火) 00:26:18>10階ポインタ
モーゼ?
0981デフォルトの名無しさん
2005/09/27(火) 01:07:24で、10次元配列の各辺の長さはどれくらい?
0982デフォルトの名無しさん
2005/09/27(火) 01:10:17専用のアクセスルーチンつきで、解くべき問題に即した特別なデータ構造にする
と思うのだが・・・
まさか、何も考えないで教科書どおりの2次元配列の作り方をそのまま借用して
10次元配列を宣言する?
0983廃人
2005/09/27(火) 01:24:24そもそも超多重配列が必要になるケースに遭遇したことが無い。
アルゴリズム見直したほうがいい。
0984デフォルトの名無しさん
2005/09/27(火) 01:26:31printfの\f(改ページ)ってどういう時使うんですか?
0985デフォルトの名無しさん
2005/09/27(火) 01:28:07プリンタに出力するといいんじゃね?
0986廃人
2005/09/27(火) 01:31:45UNIX/Linux前提ならsystem("clear")呼んだほうが綺麗だな。
0988デフォルトの名無しさん
2005/09/27(火) 02:44:24問題は10次元配列をどう扱うかじゃなくて、
10重ポインタを使う状況とはいかなるものか、だ。
0989デフォルトの名無しさん
2005/09/27(火) 11:41:530990デフォルトの名無しさん
2005/09/27(火) 13:14:25場の3次元空間に対して時間変化をとるのに4次元必要
0991デフォルトの名無しさん
2005/09/27(火) 13:15:160992デフォルトの名無しさん
2005/09/27(火) 13:40:370993デフォルトの名無しさん
2005/09/27(火) 13:41:070994デフォルトの名無しさん
2005/09/27(火) 14:04:450995デフォルトの名無しさん
2005/09/27(火) 14:05:200996デフォルトの名無しさん
2005/09/27(火) 14:13:280997デフォルトの名無しさん
2005/09/27(火) 14:14:460998デフォルトの名無しさん
2005/09/27(火) 14:15:510999デフォルトの名無しさん
2005/09/27(火) 14:16:321000デフォルトの名無しさん
2005/09/27(火) 14:16:4210011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。