【ANSI-C】 C言語なら俺に聞け! Part 127
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2006/05/12(金) 04:30:15まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
前スレ
C言語なら俺に聞け! Part 126
http://pc8.2ch.net/test/read.cgi/tech/1145799128/l50
GUIなどの標準Cではできない事の質問,ソース丸投げ、宿題、書籍 は
専門の別スレッド↓があるのでそこへさようなら。
【初心者歓迎】C/C++室 Ver.27【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1147183708/l50
C/C++の宿題を片付けます 64代目
http://pc8.2ch.net/test/read.cgi/tech/1146323457/l50
新・推薦図書/必読図書のためのスレッド 1
http://pc8.2ch.net/test/read.cgi/prog/1146889623/l50
0002デフォルトの名無しさん
2006/05/12(金) 04:31:27代わりにスレ立てありがとう!
0003デフォルトの名無しさん
2006/05/12(金) 06:12:43まずなにをすればいいんですか?
サイト見ても本屋行ってもなにすればいいかちんぷんかんぷんです
0004デフォルトの名無しさん
2006/05/12(金) 06:31:33参考書はテンプレにあるスレを回ればいろいろ書いてある。
一冊で全て覚えようとするよりも、自分のレベルに有った物を段階的に探そう。
次にコンパイラ、簡単に言えば書いたプログラムを実行するためのもの。
無料・有料の物がある。
お金があれば使い勝手の良い物や、手間をいろいろ省いてくれるようなものが手に入る
「無料では作れない」ではなく、有料の物に比べて手間暇が掛かることがあるということ。
学習するだけなら最初は無料の物ですまし
慣れてきてから、他に良い物が無いか探した方が金銭的には優しいかと。
0005デフォルトの名無しさん
2006/05/12(金) 06:51:08わかりました
やってみます
0006デフォルトの名無しさん
2006/05/12(金) 12:54:03(((x) < 0) ? -(x) : (x)) を '?'や':'を使わずに表すとどういう意味になるんでしょうか?
0007デフォルトの名無しさん
2006/05/12(金) 13:02:25(((x) < 0) * -(x) + (!((x) < 0)) * (x))
0008デフォルトの名無しさん
2006/05/12(金) 13:03:22日本語で説明しちゃダメか?
0009デフォルトの名無しさん
2006/05/12(金) 13:18:34日本語で教えてくださいませ
0010デフォルトの名無しさん
2006/05/12(金) 13:20:020011デフォルトの名無しさん
2006/05/12(金) 13:25:41お〜。そんな意味だったんですか!
if文に似てるということは知ってたんですが、詳しくは知らなかったのでどうもありがとうございます。
00126
2006/05/12(金) 13:34:52?文などで検索してもヒットしないので・・・
0013デフォルトの名無しさん
2006/05/12(金) 13:39:5100147
2006/05/12(金) 13:45:18他の言語だとif()とかiif()とかって関数だったりするね。
0015デフォルトの名無しさん
2006/05/12(金) 13:46:200016デフォルトの名無しさん
2006/05/12(金) 13:50:330017まなみ
2006/05/12(金) 13:58:39C言語の二次方程式のプログラムが
わからなぃですぅ(><)
だれかぉしぇてくださぃ
0018デフォルトの名無しさん
2006/05/12(金) 14:01:43>1
まぁ、宿題スレ辺りかね。
0019まなみ
2006/05/12(金) 14:02:390020デフォルトの名無しさん
2006/05/12(金) 14:32:00できれば、コンピュータがどのようにして処理をしているかも書いてくれたら凄く嬉しい。
低レベルでスマソ
0021デフォルトの名無しさん
2006/05/12(金) 14:39:07あんたに「ポインタが高速」と言う知識を与えた資料に当たれ。
このスレ的には、「ポインタが高速」なんて概念はない。
0022デフォルトの名無しさん
2006/05/12(金) 14:59:580023デフォルトの名無しさん
2006/05/12(金) 15:42:03> なんで、ポインタが高速と言われていたのか教えてくれないか?
誰かがそう言っていたから。
> コンピュータがどのようにして処理をしているか
板違い
0024デフォルトの名無しさん
2006/05/12(金) 16:21:37例えば strcpy を実装するのに
char* strcpy(char *p1, char *p2) {
char *ret = p1;
while((*p1++ = *p2++)) { }
return ret;
}
と
char* strcpy(char *p1, char *p2) {
int i;
for(i = 0; (p1[i] = p2[i]); ++i) { }
return p1;
}
の二通りの実装が考えられるが、
i とポインタの両方を使って参照するよりは、
ポインタを進めてポインタのみで参照した方が速い・・・
と言われてた時期があった。
今では下のコードも上のやつに最適化されるので
こういうことに気を回す必要はない。
細かいことはコンパイラに任せて、
直感的に分かりやすい下の方を使え。
0025デフォルトの名無しさん
2006/05/12(金) 18:56:31javaでは配列aの長さをa.lengthで得ることができますが、
cでは.lengthにあたるものはないんでしょうか。
コマンドラインから
./a.out 2 4 5
としたときにargv(mainの引数の配列)の長さ3を得たいのですが。
0026デフォルトの名無しさん
2006/05/12(金) 19:00:43その例なら、単純にargcが4だ。
0027デフォルトの名無しさん
2006/05/12(金) 19:04:420028デフォルトの名無しさん
2006/05/12(金) 19:18:54>>27 そうなんですか。javaは便利ですね。ありがとうございました。
0029デフォルトの名無しさん
2006/05/12(金) 19:24:48argv[0]は(どこぞにある)"./a.out"を指し、
argv[1]は(恐らくはargv[0]の近くにある)"2"を指し、
以下同様に
argv[3]が"5"を指して、
argv[4]はNULLということ。
0030デフォルトの名無しさん
2006/05/12(金) 19:27:55ttp://www.kumei.ne.jp/c_lang/intro/no_20.htm
0031デフォルトの名無しさん
2006/05/12(金) 20:59:29どうしても不可解なことが起こるので
質問させてください。
下のものはある関数を作る途中で
不具合がおきて、それの検証を
するために内容を減らしたものです。
関数としては意味の無いことを
してますが、なにとぞよろしくお願いします。
003231
2006/05/12(金) 21:00:14char *p,*q;
p=(char *)malloc(sizeof(str));/*pのメモリー確保*/
q=(char *)malloc(sizeof(str));/*qのメモリー確保*/
if(p==NULL||q==NULL){/*メモリ確保できないときのエラー*/
printf("メモリー確保失敗\n");
exit(1);
}
strcpy(p,str);/*入力strをpにコピー*/
printf("p=%s",p);/*pを画面出力*/
strcpy(q,p);/*pをqにコピー (ここがどうもおかしいです)*/
printf("q=%s",q);/*qを画面出力*/
}
結果としてqに正しくpの内容がコピーされません。
原因わかる方いましたらよろしくお願いします。
環境:winXP
lsi C-86
003331
2006/05/12(金) 21:03:21#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void *takeword(char *str,int num);
main(){
char x[20]="abc efg\n",*y;
takeword(x);
}
void *takeword(char *str){
char *p,*q;
p=(char *)malloc(sizeof(str));
q=(char *)malloc(sizeof(str));
if(p==NULL||q==NULL){
printf("メモリー確保失敗\n");
exit(1);
}
strcpy(p,str);
printf("p=%s",p);
strcpy(q,p);
printf("q=%s",q);
}
0034デフォルトの名無しさん
2006/05/12(金) 21:05:09↑ は str というポインタ変数のサイズ(4 バイト)になる。
003531
2006/05/12(金) 21:06:04main内1行目*yがけし忘れ。
ソース5行目のtakewordの引数
int numがけし忘れです。
すません><
よろしくおねがいします
0036デフォルトの名無しさん
2006/05/12(金) 21:07:08sizeof(str)で得られるのはchar型ポインタのサイズである4
003731
2006/05/12(金) 21:17:42もし入力されたcha型ポインタが指す文字列が
十分入る文字列を確保したい場合は
while(*str){
i++;
}
p=(char *)malloc(i*sizeof(char))
て感じですかね(@@)
丸投げですいません。ありがとうございます!
0038デフォルトの名無しさん
2006/05/12(金) 21:21:20003931
2006/05/12(金) 21:33:55ありがとうございました〜☆
0040デフォルトの名無しさん
2006/05/12(金) 21:34:440041デフォルトの名無しさん
2006/05/12(金) 21:36:560042デフォルトの名無しさん
2006/05/12(金) 21:37:45だろうね
0043デフォルトの名無しさん
2006/05/12(金) 22:38:19floatの出力指定が%f、doubleは%lfだと信じてる人が多いのは
嘆かわしい限り。
scanfと同じだと思ってるんだろう。
特に大学の先生にもdoubleは%lfだと教える人がいる。
間違いの再生産だ。
0044デフォルトの名無しさん
2006/05/12(金) 22:43:27だが実際には大して問題が起きないから困る
0045デフォルトの名無しさん
2006/05/12(金) 22:52:41Linuxとかだと%lfで定義されてたりするんじゃね?
0046デフォルトの名無しさん
2006/05/12(金) 22:54:55float は double に変換される。
こいつらを区別する手段が無い。
0047デフォルトの名無しさん
2006/05/12(金) 23:03:330048デフォルトの名無しさん
2006/05/12(金) 23:05:26ただ、仕様で保証されてるわけじゃない。
0049デフォルトの名無しさん
2006/05/12(金) 23:10:310050デフォルトの名無しさん
2006/05/12(金) 23:15:22005143
2006/05/12(金) 23:46:50C99では%lfもOKというのはホントですか!?
新ANSI C言語辞典の最新版にはそういう記述は無かった。
C99ではlong dobuleに%Lfという記述はよく見ますけど。
本来、「l」(小文字のエル)は整数型に対して使われるもの。
googleで調べましたが、C99ではlong doubleが%Lfというのばかりで、
doubleが%lfでもOkというのは見つけられなかった。
どこかにそういう記述のページはないでしょうか?
0052デフォルトの名無しさん
2006/05/12(金) 23:51:33ttp://seclan.dll.jp/c99d/c99d08.htm#dt19991115
005343
2006/05/12(金) 23:54:36おぉ〜 ありがとぉ〜〜〜〜
0054デフォルトの名無しさん
2006/05/12(金) 23:59:05基本的にはそのサイトがやったらと詳しいわけだけど、自分で調べる方法も身に付けたほうがいい
ここのページで
http://www.jisc.go.jp/
JIS検索 → JIS規格番号からJISを検索 "X3010" と入力 → プログラム言語C
とすれば、JISのC言語規格が見られる
日本語に訳されてるけど、C99と同内容
ちなみにポップアップを許可しないと見れないからそこんとこのブラウザ設定に注意
>>52のサイトと、このJIS X3010ってテンプレに入れたほうがよくね?
005543
2006/05/13(土) 00:10:54これまたどうも。
pdfファイルだけどスキャンしたものですね。文字情報が入ってないから
検索できない・・・
0056デフォルトの名無しさん
2006/05/13(土) 00:26:47"新"ANSI C言語辞典 といっても1997年発行だからC99は載ってないよ
005743
2006/05/13(土) 00:33:54fprintf関数の項目で、p.199に
l(エル)は整数型がlongであることの指定だけれども、
%lfとした場合は、「何の効果もない」と書いてありました。
fについては「double型」というのが正しいのですね。
X3010には一言もfloat型とは書かれていない。
つまりfloatはdoubleに変換されるわけで、結局、fは
double型用、ということなのでしょう。
C99以前は%lfは未定義だけど、大抵は%fとして動作。
C99では、%lfの「l」は何の効果がなく、%fと同じ動作。
だから、正しいのは「doubleは%f」。
doubleに%lfは、誤動作はしないけど%fとしての動作が保証される。
0058デフォルトの名無しさん
2006/05/13(土) 01:05:54C99 では %f も %lf も両方正しい。
ただ、float と double を区別するわけじゃなく、
両方 double に対する書式になる。
005943
2006/05/13(土) 01:11:08C99で%lfが正しいとX3010に書いてあるんですか?
fprintfの「l」のところには、%lfが正しいとは書いてありませんでした。
「l」が「f」の前に使われた場合には、何の効果もない、とは書いてあります。
fprintf (printf)の説明以外の箇所に、%lfが正しい、と書いてあるのかなぁ??
ここだけしか読んでないから確認出来ませんでしたが。
0060デフォルトの名無しさん
2006/05/13(土) 01:13:54だから、「何も効果がない」と定義されてるっしょ?
0061デフォルトの名無しさん
2006/05/13(土) 02:26:120062デフォルトの名無しさん
2006/05/13(土) 02:35:15どうでもいいけどポインタのサイズは4と決まっているわけではない。
ex.. >31の使っているLSI-Cでは2バイトだ。
006343
2006/05/13(土) 08:07:38つまり、X3010には、printfのdoubleの指定子は%fであり、
%lfとかいても、その「l」は何の効果もないだけであって、
%lfも正しいdoubleの指定子であるとは書かれてないのですね。
それが確認できればOKです。
>>61
scanfと同様にprintfでもfloatが%f、doubleが%lfだと
単純に信じて疑わない人が非常に多く、大学教員までもが
そのように授業で教えている事に問題を感じているわけです。
規格は規格。正しく理解していなければならない。
0064デフォルトの名無しさん
2006/05/13(土) 08:11:41%lf は %f と等価な動作をすると
C99 の規格では決まってるんでしょ?
正しくないってのは、動作が未定義な場合。
この場合動作が定義されているんだから、
即ち、%lf は double に対する正しい指定子だ。
006543
2006/05/13(土) 08:51:24X3010では、doubleの指定子は%fだと明記。%lfもOKだという記述はない。
X3010には、%lfと書いても「l」が無視される(効果なし)と書いてある。
以上が全て。
あとは日本語の表現の仕方の問題。
0066デフォルトの名無しさん
2006/05/13(土) 08:53:11疲れるな・・・。
効果無しと定義されてるんだから、正しいだろ。
006743
2006/05/13(土) 08:54:11X3010では、doubleの指定子は%fだと明記。指定子が%lfであるとの記述はない。
X3010には、%lfと書いても「l」が無視される(効果なし)と書いてある。
006843
2006/05/13(土) 08:55:03これはもう日本語の解釈、表現方法の問題。
0069デフォルトの名無しさん
2006/05/13(土) 08:57:55%lf の l が無視されるってことは、
%lf は %f と同じ効果を示す事が
「規格で保証されている」わけだ。
これで %lf が正しくないとしたら何なんだよ。
0070デフォルトの名無しさん
2006/05/13(土) 09:46:43func(int*);
int main() {
int a[4], b[2][2];
func(a);
func(b);
これではbの参照渡しで警告が出てしまいますが
&b[0][0]を使わずに回避する方法はないのでしょうか
0071デフォルトの名無しさん
2006/05/13(土) 09:52:52a,bは型がちがうから、素直な方法では、回避できない。
0072デフォルトの名無しさん
2006/05/13(土) 11:22:59うまい方法あんのかね?俺は知らない
0073デフォルトの名無しさん
2006/05/13(土) 11:32:41007470
2006/05/13(土) 12:02:02aとbの型の違いが理解できていませんでした
とりあえず多次元配列の型は別物なんだと考えておきます
>>71-73 thx
007543
2006/05/13(土) 13:16:54X3010には、doubleの指定子は%fだとしか書かれていない。
double の指定子が%lfだとは「一言も」書かれていない。
したがって、doubleの指定子は、「%f」である。
%lfは、あくまでも%fと同じ動作をすると規格が保証しているだけ。
規格で「doubleの指定子が%fだ」と明記されているのとは意味が違う。
この時点で、X3010では%fと%lfが同等の扱いを受けていないことは明白。
ちなみに、C99では%lfが正しくない、とは、私は一度も発言したことはない。
この話はもう終わり。ループするだけ。
0076デフォルトの名無しさん
2006/05/13(土) 13:24:30ループさせてるのはお前だけ。
0077デフォルトの名無しさん
2006/05/13(土) 13:36:580078デフォルトの名無しさん
2006/05/13(土) 13:43:200079デフォルトの名無しさん
2006/05/13(土) 15:11:53> %lfは、あくまでも%fと同じ動作をすると規格が保証しているだけ。
これを同等の扱いと言わずして何と言う。
008043
2006/05/13(土) 15:27:06%fは、doubleの指定子だと明記されている。
%lfは、doubleの指定子だと明記されていない。
%lfのlは、「効果がない」と書いてあるだけ。
どう考えても同等の「扱い」ではない(「機能」は同等であっても)。
「%lfも%fと同様にdoubleの指定子である」と
規格書に書いてあれば、それは同等と言える。
0081デフォルトの名無しさん
2006/05/13(土) 15:31:57誰がどう考えても等しく受理できるように書かれてるに決まってる
0082デフォルトの名無しさん
2006/05/13(土) 15:32:390083デフォルトの名無しさん
2006/05/13(土) 15:39:12「日本語を理解できているか」の違い
0084デフォルトの名無しさん
2006/05/13(土) 15:39:330085デフォルトの名無しさん
2006/05/13(土) 15:41:350086デフォルトの名無しさん
2006/05/13(土) 16:04:59%lf原理主義者だな
どうでもいいな うん
0087デフォルトの名無しさん
2006/05/13(土) 16:31:00まぁ、どう解釈しても機能は同等ということだな。
それはさておき、printf()系とscanf()系の指定子が同じと書かれた入門書には参るね。
%fだけでなく、%nや%c, %xでさえ同じといっては間違いだというのに。
0088デフォルトの名無しさん
2006/05/13(土) 17:11:27int a[4], b[2][2];
func(a);
func(b[0]);
func(b[1]);
ってするんぢゃねの?
func()の定義って func(int *p) もしくは func(int p[]) だろ?
0089デフォルトの名無しさん
2006/05/13(土) 17:22:53やれといわれて
a)はぁ?あんた指示間違ってるよ、わけわけんねぇw と文句を言ってやらない
b)指示に誤りがあったとしても分かる範囲でやっときます
のどっちかという話であって、
>%fは、doubleの指定子だと明記されている
>%lfのlは、「効果がない」と書いてある
なら b) だってだけw
0090デフォルトの名無しさん
2006/05/13(土) 18:47:400091デフォルトの名無しさん
2006/05/13(土) 22:16:13128bit の浮動小数点とかの long double な環境だったりすると誤解を招かないかい?
0092デフォルトの名無しさん
2006/05/13(土) 22:17:060093デフォルトの名無しさん
2006/05/13(土) 22:21:090094デフォルトの名無しさん
2006/05/13(土) 22:24:310095デフォルトの名無しさん
2006/05/13(土) 22:26:440096デフォルトの名無しさん
2006/05/13(土) 22:35:46二次元外列を配列の配列と思っているバカがいる
0097デフォルトの名無しさん
2006/05/13(土) 22:49:500098デフォルトの名無しさん
2006/05/13(土) 22:58:400099デフォルトの名無しさん
2006/05/13(土) 23:14:19cpp1つだったのを
cpp2つとh1つに分けたら
色々エラーが出てしまいました・・。
ほかのファイルに書いてある関数が認識されていない?
'CUSTOMVERTEX' : 定義されていない識別子です。
'vertices' : 定義されていない識別子です。
'g_pd3dDevice' : 定義されていない識別子です。
'D3DFVF_CUSTOMVERTEX' : 定義されていない識別子です。
というようなエラーが出ます。SDKのサンプル見ながら書いたので
ほとんど同じソースです。
010099
2006/05/13(土) 23:15:46(C言語、C++言語の入門のページを途中までしか読んでいない)
0101デフォルトの名無しさん
2006/05/13(土) 23:15:57上手い!
俺は>>99見たときになにか書きこんでやろうと思ったが、
なにも思い浮かばなかった。俺には文才が無い、他の人ならどんな書きこをするのだろう?
だから、俺はこのスレにいつか書きこむであろう>>101の存在を息を殺して待っていた。
すると、>>101のレスを発見!
おもしろい!
0102デフォルトの名無しさん
2006/05/13(土) 23:18:28あちゃー・・・
0103デフォルトの名無しさん
2006/05/13(土) 23:22:07スペルミスしているとか、たまにあるけど、サンプルコードが間違ってるとか。
いろいろ原因があるのでなんともアドバイスできん。
010499
2006/05/13(土) 23:28:37http://briefcase.yahoo.co.jp/ningenxp/
一時オープンフォルダ2
directx05.zip
0106デフォルトの名無しさん
2006/05/13(土) 23:31:27もともと一つの cpp ファイルに書いてた処理を、別のファイルに追い出したときに
追い出された方では DirectX のヘッダファイルを入れてないんじゃないかな
どっちにしろ、このスレで訊くようなことではない気がする
010799
2006/05/13(土) 23:36:380108デフォルトの名無しさん
2006/05/13(土) 23:37:53010999
2006/05/13(土) 23:44:01宣言しました。・・・
main.obj : error LNK2005: "struct IDirect3D9 * g_pD3D" (?g_pD3D@@3PAUIDirect3D9@@A) は既に logo.obj で定義されています。
main.obj : error LNK2005: "struct IDirect3DDevice9 * g_pd3dDevice" (?g_pd3dDevice@@3PAUIDirect3DDevice9@@A) は既に logo.obj で定義されています。
main.obj : error LNK2005: "struct IDirect3DVertexBuffer9 * g_pVB" (?g_pVB@@3PAUIDirect3DVertexBuffer9@@A) は既に logo.obj で定義されています。
main.obj : error LNK2019: 未解決の外部シンボル "void __cdecl Bepp(void)" (?Bepp@@YAXXZ) が関数 _WinMain@16 で参照されました。
011099
2006/05/13(土) 23:47:04そのうちDirectXのスレいきます
0111デフォルトの名無しさん
2006/05/13(土) 23:48:400112デフォルトの名無しさん
2006/05/13(土) 23:48:42logo.cpp
sub.h
と3つあるけど、logo.cpp に記述されている関数が main.cpp に伝わってないじゃないか
#include とか、関数宣言とか、extern とかインクルードガードとか調べてから、
30行くらいの短いプログラムでも書いて分割コンパイルについて勉強しなさい。
DirectX より先に C言語そのものの勉強をする方が先。
0113デフォルトの名無しさん
2006/05/13(土) 23:49:12ヘッダファイルの先頭に #pragma once って書いてみたら?
0114デフォルトの名無しさん
2006/05/14(日) 02:10:17スレタイ100回音読ののち、吊れ。
0115デフォルトの名無しさん
2006/05/14(日) 05:06:41int main(void){
int i, j, n;
char buf[80];
fgets(buf, 80, stdin), sscanf(buf, "%x %x", &i, &j);
n = i * j;
printf("%x\n", n);
}
このような16進数同士の掛け算を行い、その答えを16進数で表示するプログラムがあるんですが、
「feeddead f00dbeef」を実行するとオーバーフロー?で上手くいきません
どこをどう変えればちゃんとした答えが出るようになるのか教えてくださいませ
0116デフォルトの名無しさん
2006/05/14(日) 05:32:590117デフォルトの名無しさん
2006/05/14(日) 05:42:04intをどう変えるべきなのかとか、%x自体もこのままでいいのか分からないので
0118デフォルトの名無しさん
2006/05/14(日) 05:54:21int :数字
という覚え方したのかな?
それぞれには、ここからここまでという扱える限界がある。
それを越えるとオーバーフロー(コップに水を注ぎすぎて溢れる様な状態)になり。
下手をするとシステムがいかれたりする。
char型 int型の説明を見直しておいて。
みた感じ、>>115のはソースそのまんまじゃなくて
関係有りそうなの切り貼りしたんじゃないか?
質問するときは、なるたけ全部はってくれ。
自分が思っていたところとは違うところが間違ってる事があるから。
本当に>>115の内容のままだとするとだと
fgets と sscanf についての宣言エラー
;構文のエラーが最低出るはず。
エラーかでたら処理を細かく区切って簡単なモノにして
一つずつチェックした方が原因追及が楽。
0119デフォルトの名無しさん
2006/05/14(日) 07:28:22アホ?
引数の評価順序の問題だろ?
# たぶん、「;」を「,」とタイプミスしただけだろうが…
0120デフォルトの名無しさん
2006/05/14(日) 08:05:370121デフォルトの名無しさん
2006/05/14(日) 08:27:20>119
0122デフォルトの名無しさん
2006/05/14(日) 08:29:59ビルドは成功したのですが、この警告はどういうことでしょうか?
/* 「A」を入力するプログラム */
#include <stdio.h>
int main(void)
{
char c;
int n;
printf("AキーとEnterキーを押してください。>");
scanf("%c", &c);
printf("入力データを10進表示:%d\n", c);
printf("\nAキーとEnterキーを押してください。>");
scanf("%x", &n);
printf("入力データを10進表示:%d\n", n);
return 0;
}
g:\c\vc++\visual studio 2005\projects\3-7-1-1-1\3-7-1-1-1.c(10) : warning C4996: 'scanf' が古い形式として宣言されました。
g:\c\vc++\vc\include\stdio.h(295) : 'scanf' の宣言を確認してください。
メッセージ: 'This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.'
0123デフォルトの名無しさん
2006/05/14(日) 08:32:23その警告は時宜どおりに解釈したらいいと思います。
その教本を使いつづけるのなら、その警告は無視するのが無難ですが。
0124デフォルトの名無しさん
2006/05/14(日) 08:36:20古い形式ということは「scanf」はもう使われていないということですか?
0125デフォルトの名無しさん
2006/05/14(日) 08:37:51その下の英文は読めない?
0126デフォルトの名無しさん
2006/05/14(日) 08:38:04scanf_sを使えばよかったんですね。
ありがとうございました。
0127デフォルトの名無しさん
2006/05/14(日) 09:43:11>下手をするとシステムがいかれたりする。
そんな酷い処理系があるんですか?
>fgets と sscanf についての宣言エラー
出ませんね。
>;構文のエラーが最低出るはず。
そんな個所はありませんね。
>>119
>引数の評価順序の問題だろ?
何処が?
0128デフォルトの名無しさん
2006/05/14(日) 09:57:36困るの俺らじゃないし
0129デフォルトの名無しさん
2006/05/14(日) 10:09:24引数には見えませんが。
>>128
>困るの俺らじゃないし
間抜けな人がいると迷惑するんで。
0130デフォルトの名無しさん
2006/05/14(日) 10:36:56ちゃんと分かってるんだったら別に迷惑しないだろ
低脳はほっとけよ
0131デフォルトの名無しさん
2006/05/14(日) 11:18:38そもそもfgets()もsscanf()も関数の戻り値はチェックするべきなんだが。
0132デフォルトの名無しさん
2006/05/14(日) 11:25:03でFA
以下終了
0133デフォルトの名無しさん
2006/05/14(日) 11:28:27>で、カンマ演算子は評価順序確定してたっけ?
それくらい知っておいた方がいい。
左オペランドを評価して(副作用完了点)、その結果を捨ててから
右オペランドを評価。
>そもそもfgets()もsscanf()も関数の戻り値はチェックするべきなんだが。
何が「そもそも」か知らないが、マトモなコードを書くつもりならその通り。
0134デフォルトの名無しさん
2006/05/14(日) 11:52:290135115
2006/05/14(日) 14:07:14学校の計算機でも、家のコンパイルでもこの方法でコンパイルはできますし・・・
私が言うのもなんですが、fgets(); sscanf(); にこだわってる方の考え方はおかしくないですか?
「;」の記号は宣言を終わらせる時に付けるものなんですよね?
>>115において「;」を極力用いずに表現すれば、
#include <stdio.h>
int main(void){
int i, j, n;
char buf[80];
fgets(buf, 80, stdin), sscanf(buf, "%x %x", &i, &j), n = i * j, printf("%x\n", n);
}
これでいいんですよ。一体何にこだわってるのか教えていただきたいのですが・・・
一からやり直したほうがいいんじゃないですか?
0136115
2006/05/14(日) 14:13:54fgets(); sscanf(); にこだわってる方って #include <stdio.h> がどういうものだかを分かってないんだよ
それでよく私の質問に答えようと思いましたねw
しかも、全く関係ないところをwww
0137デフォルトの名無しさん
2006/05/14(日) 14:31:50え?
0138115
2006/05/14(日) 14:44:04では、改めて
#include <stdio.h>
int main(void){
int i, j, n; char buf[80];
scanf("%x %x", &i, &j);
n = i * j;
printf("%x\n", n);
}
「feed beef」であれば、出力結果として正しい値「be21e543」を得ることができるが、
「feeddead f00dbeef」を入力すると、なぜオーバーフローが起きるのか?
そしてどこをどう訂正すれば正しい値を出力するプログラムになるのかを教えてくださいませ
0139115
2006/05/14(日) 14:45:200140デフォルトの名無しさん
2006/05/14(日) 14:47:52それじゃ、次はその16進値の積に必要なビット数を概算でいいから求めてみよう。
0141115
2006/05/14(日) 14:56:220142115
2006/05/14(日) 15:00:49「double」,「unsigned」,「long」などを使っても無理だというのか!!!
0143デフォルトの名無しさん
2006/05/14(日) 15:03:350144デフォルトの名無しさん
2006/05/14(日) 15:06:56違う
0145デフォルトの名無しさん
2006/05/14(日) 15:20:5532ビット×32ビットは最大で64ビットかなぁ?・・・
0146デフォルトの名無しさん
2006/05/14(日) 15:23:050147デフォルトの名無しさん
2006/05/14(日) 15:35:380148デフォルトの名無しさん
2006/05/14(日) 17:20:56一つの文中に複数の関数呼び出しがある場合、
関数の呼び出し順序は未定義のため、君のソースは鼻から悪魔。
0149デフォルトの名無しさん
2006/05/14(日) 17:42:16いや、だから、カンマ演算子は。。。
0150デフォルトの名無しさん
2006/05/14(日) 18:46:22コンマ演算子は左項→右項の順番に実行される事が保証されている。
0151デフォルトの名無しさん
2006/05/14(日) 18:54:150152デフォルトの名無しさん
2006/05/14(日) 19:00:010153デフォルトの名無しさん
2006/05/14(日) 19:14:320154デフォルトの名無しさん
2006/05/14(日) 19:31:47ちょっと変えるだけなら、そのプログラムを貼っていただくだけで十分理解できますから・・・
0155デフォルトの名無しさん
2006/05/14(日) 19:57:42そんなことすら学校で習わなかったんですか?
お前ら本当に理系かよ。左脳が腐ってんぞ
0156デフォルトの名無しさん
2006/05/14(日) 20:11:290157デフォルトの名無しさん
2006/05/14(日) 20:11:500158デフォルトの名無しさん
2006/05/14(日) 20:19:53(M+N-1) ビットか (M+N) ビットになる。
すなわち、32 ビットの数同士をかけても
65 ビットになんぞならん。
0x80000000 × 0x80000000 = 0x4000000000000000(63ビット)
0xFFFFFFFF × 0xFFFFFFFF = 0xFFFFFFFE00000001(64ビット)
0159デフォルトの名無しさん
2006/05/14(日) 20:22:10見れば理解できるレベルなら、検索したほうが早いだろ。
0160デフォルトの名無しさん
2006/05/14(日) 20:26:54intが64ビットある環境に移行すれば無問題
0161デフォルトの名無しさん
2006/05/14(日) 20:29:56>>145
見ろや。ちゃうってゆわれて答えをちゃんとした方にすぐ変えてるやろが
1×1=1と9×9=81を考えて訂正しとるわ、とっくに
0162デフォルトの名無しさん
2006/05/14(日) 20:30:18gcc なら long long が 64 ビットだな。
0163デフォルトの名無しさん
2006/05/14(日) 20:30:49すまん。
0164115
2006/05/14(日) 20:31:56どうも時間の無駄をありがとうございました
0165デフォルトの名無しさん
2006/05/14(日) 20:53:450166デフォルトの名無しさん
2006/05/14(日) 21:25:050167デフォルトの名無しさん
2006/05/14(日) 21:34:230168デフォルトの名無しさん
2006/05/14(日) 21:41:040169デフォルトの名無しさん
2006/05/15(月) 03:11:560170デフォルトの名無しさん
2006/05/15(月) 03:17:42if文とシフト演算がどう繋がるんだ?
0171デフォルトの名無しさん
2006/05/15(月) 04:25:460172デフォルトの名無しさん
2006/05/15(月) 04:41:190173デフォルトの名無しさん
2006/05/15(月) 10:38:16if(buf[i]<0) count++;
これをシフト演算で表せば、
count -= buf[i] >> 31;
このようにしてif文や三項演算子を使った文より実行速度が速くなるのはなぜですか?
0174デフォルトの名無しさん
2006/05/15(月) 10:44:37そりゃ1演算で済むからだろ。
0175デフォルトの名無しさん
2006/05/15(月) 10:46:35基本的に分岐は遅いってことだけ覚えとけ。
ただこの場合、Pentium Pro 以降用の最適化にすれば
大差ないかもしれないな。
0176デフォルトの名無しさん
2006/05/15(月) 10:57:190177デフォルトの名無しさん
2006/05/15(月) 11:07:00ちゃんとした考察したいなら、アセンブリ言語勉強しろ。
とりゃーえず VC++ 使ってるなら、
デバッグ実行して混合モードでアセンブリ表示してみれ。
あとは CPU のマニュアル読んで、
各命令の速度や分岐予測ペナルティに関する記述を探せ。
0178デフォルトの名無しさん
2006/05/15(月) 12:15:45スレ違い。
そもそも、本当に速くなるかどうかは実測しなければわからない。
0179デフォルトの名無しさん
2006/05/15(月) 12:26:57条件が成立する確立が低ければ、if文の方を速くできないか?
0180デフォルトの名無しさん
2006/05/15(月) 12:56:360181デフォルトの名無しさん
2006/05/15(月) 13:22:200182デフォルトの名無しさん
2006/05/15(月) 14:55:15例えばLinuxのように連続した文字列はその通りに読んでくれるのですが
Lin uxのように間にスペースを入れると前半のLinまでしか読んでくれません。
スペースも読ませるにはどうしたらいいでしょうか?
アドバイスお願い致します
0183デフォルトの名無しさん
2006/05/15(月) 15:00:32すいません、自己解決しました
0184デフォルトの名無しさん
2006/05/15(月) 15:44:17自己解決したみたいだからいいけど、
標準Cにはいわゆる高水準入出力しかないからな。
0185デフォルトの名無しさん
2006/05/15(月) 16:37:230186デフォルトの名無しさん
2006/05/15(月) 16:55:100187デフォルトの名無しさん
2006/05/15(月) 17:16:26標準C的にはどうなんでしょうか?自分なりにJIS X3010:2003を読んだ限りでは大丈夫だと思うのですが。
--- hoge.c ---
#define X_STR(a, b) a ## b
#define STR(a, b) X_STR(a, b)
TYPE STR(hoge, ID)(仮引数並び)
{
hoge();
}
・呼び出し側
#define TYPE int
#define ID id1
#include "hoge.c"
#undef TYPE
#undef ID
int na = hogeid1(hoge);
0188デフォルトの名無しさん
2006/05/15(月) 17:44:53二カ所以上で同じ事したら二重定義エラー。
static を付ければ最も簡単に回避できるが、
回避法としては微妙。
俺ならこうする。
-- hoge.h (二重インクルードガードは省略)
/* プロトタイプ宣言 */
#define PROTO_HOGE(type, func, id) \
type func##id(仮引数並び)
/* 実装 */
#define IMPL_HOGE(type, func, id) \
PROTO_HOGE(type, func, id) \
{ \
func(); \
}
-- hoge.c
#include "hoge.h"
IMPL_HOGE(int, hoge, id1) /* int hogeid1 を実装 */
-- 呼び出し側
#include "hoge.h"
PROTO_HOGE(int, hoge, id1); /* int hogeid1 のプロトタイプ宣言 */
int na = hogeid1(hoge);
0189デフォルトの名無しさん
2006/05/15(月) 18:01:01#includeの直後でundefしてますがそれでもダメなのでしょうか?
0190デフォルトの名無しさん
2006/05/15(月) 18:08:14ダメ。マクロの二重定義の話じゃない。
関数の二重定義。
同じファイルで同じ TYPE, ID でやることはないかもしれないが、
別のファイルで同じ TYPE, ID でやることはあるかもしれない。
そうなると同じ関数が二カ所で定義されるのでリンクエラーになる。
static つければとりあえずそれぞれローカル関数になって
リンクエラーは回避できるけど、
同じ関数が何個もあって良くない。
0191デフォルトの名無しさん
2006/05/15(月) 18:48:33なるほど、6.9の制約違反ですか?
一応、IDが重複しないように管理しつつ使うつもりなのでそこは問題ないと思います
とりあえず>>188を参考にしつつもうちょっと考えてみたいと思います
ありがとうございました。
0192デフォルトの名無しさん
2006/05/15(月) 19:17:48そうけ。
まあ、それならそれで
-- hoge.h
(二重インクルードガードは省略)
#define STR(type, func, id) \
type func##id(仮引数並び) \
{ \
func(); \
}
#define HOGE(type, id) STR(type, hoge, id)
としておいて
#include "hoge.h"
HOGE(int, id1)
HOGE(char, id2)
みたいなのでいいと思う。
0193デフォルトの名無しさん
2006/05/15(月) 21:25:52>if(buf[i]<0) count++;
>これをシフト演算で表せば、
>count -= buf[i] >> 31;
>このようにしてif文や三項演算子を使った文より実行速度が速くなるのはなぜですか?
これってbuf[i]<0が成立すると(つまりbuf[i]の最上位ビットが1)count++するのですよね?
count -= buf[i] >> 31はcount = count - (buf[i] >> 31)ですよね。
つまりbuf[i]<0ならば、countはひとつ減ることになると思うのですが・・・
0194デフォルトの名無しさん
2006/05/15(月) 21:50:52buf[i] が符号付き 32 ビット値なら、
右シフトした際に符号が保存され、
最終的に -1 になる環境が多い。
C の規格ではちゃんと決まってなかったと思うがな。
だから、count = count - (-1); になる。
0195デフォルトの名無しさん
2006/05/15(月) 23:03:28超初心者な質問ですが答えてくださると有り難いっす
・参考書は必要か否か
・オヌヌメなサイトはどこか
(猫でも〜がVC++1.5必要みたいで困ってます
0196デフォルトの名無しさん
2006/05/15(月) 23:08:00× C言語でについて
○ C言語について
0197デフォルトの名無しさん
2006/05/15(月) 23:09:41Windowsプログラミングが作りたいなら、ポトペタな開発環境で
Windowsの仕組みと C の文法を並行して勉強した方がいいと思うし
コンソールアプリでいいなら K & R でガツンと勉強した方がいいと俺は思うね。
0198デフォルトの名無しさん
2006/05/15(月) 23:35:51レスどうも
C言語を覚えておけば得な気がすると思ったのがキッカケです
色んな情報が氾濫しまくってて何ができるのかイマイチ把握できてないので
一通りやってから徐々に詳しく学んでいこうと考えています
(ゲーム作れるとか作れないとか、サイトによってそれぞれ違うことが書かれていてorz)
そこで参考になるサイトや資料があれば教えてもらおうと書き込んだ次第であります
0199デフォルトの名無しさん
2006/05/15(月) 23:41:44ゲームも作れない事もないが、ゲーム作るつもりならお勧め出来ない。
参考書は数冊買っておけ。
出来る限り多く読んだ方がいい。
0200デフォルトの名無しさん
2006/05/15(月) 23:41:58Windowsでのやり方がどうにも・・・ とりあえずなんかよさそうな
コンパイラありませんかね?フリーのやつで・・・
0201デフォルトの名無しさん
2006/05/15(月) 23:43:37Linux使ってるならCygwinでいいんジャマイカ?
0202デフォルトの名無しさん
2006/05/15(月) 23:44:26学校でやるだけじゃ不足なんでマンション帰ってからWindowsのPCで
やりたいんですよ
0203デフォルトの名無しさん
2006/05/15(月) 23:53:35Windowsに慣れてるなら、Linux臭くていやになるかもしれないが、
学校でLinuxがやりやすいと思ってるならなじめると思うよ。
0204デフォルトの名無しさん
2006/05/16(火) 00:02:29あ、そうなんですか では早速使ってみます と思いきや
環境変数とかで手間取ってます(A´・ω・)フキフキ
0205デフォルトの名無しさん
2006/05/16(火) 00:14:45まずは幅広く浅い知識を蓄えようと考えてます
現状ではゲーム作成がどのくらい難しいことなのか全く把握できていませんし
そこで最初の質問に戻るのですが
オヌヌメなサイトと参考書を教えてくださいorz
0206デフォルトの名無しさん
2006/05/16(火) 00:20:10http://pc8.2ch.net/test/read.cgi/tech/1133286541/
0207デフォルトの名無しさん
2006/05/16(火) 00:31:49書籍は書籍スレで
0208デフォルトの名無しさん
2006/05/16(火) 00:31:57C言語を勉強して最終的にはゲームとか何でもプログラムできるようになればいいな
という願望でありまして、最初は基礎的なことを学びたいのであります
せっかくスレ探してくださったのに申し訳ありません
どうやら私はC言語の前に日本語を勉強したほうが良いのかもしれませんorz
0209デフォルトの名無しさん
2006/05/16(火) 00:42:37レスどうも
リンク辿っていって推薦書籍集みつけました
とりあえず倉薫のC言語1&2を明日購入します(なければアマゾンでw
参考書はokっす
オヌヌメのサイトだけお願いします
0210デフォルトの名無しさん
2006/05/16(火) 01:24:31もしかして倉薫のC言語1&2って古すぎる?
0211デフォルトの名無しさん
2006/05/16(火) 01:26:37みなさんレスありがとうございました
お疲れ様っす
0212デフォルトの名無しさん
2006/05/16(火) 01:39:460213デフォルトの名無しさん
2006/05/16(火) 01:50:590214デフォルトの名無しさん
2006/05/16(火) 04:56:180215デフォルトの名無しさん
2006/05/16(火) 05:08:440216デフォルトの名無しさん
2006/05/16(火) 07:14:00それは、あれか?
プログラミングは全部アセンブラで書けってことか?
0217デフォルトの名無しさん
2006/05/16(火) 08:24:44【製品版】LSI C【試食版】
http://pc8.2ch.net/test/read.cgi/tech/1141294369/l50
OpenWatcom C++
http://pc8.2ch.net/test/read.cgi/tech/1033433728/l50
DOS用にコンパイルできればコンパイラはWin用でもよい、と言うのであれば↓これも
"Code of the Nerds" Digital Mars C/C++
http://pc8.2ch.net/test/read.cgi/tech/1044210976/l50
0218デフォルトの名無しさん
2006/05/16(火) 10:08:130219デフォルトの名無しさん
2006/05/16(火) 10:19:240220デフォルトの名無しさん
2006/05/16(火) 10:52:17いちいち人に訊かないと何も出来ない奴って何なんだろうと
以前から不思議に思ってたんですが、成る程、悪足掻きだったんですね。
0221デフォルトの名無しさん
2006/05/16(火) 12:11:09コンパイラが楽をするため
0222デフォルトの名無しさん
2006/05/16(火) 14:40:56x, /* 配列 */
nx,/* 要素数 */
sizeof(int),/* 要素の大きさ */
(int (*)(const void *, const void *))int_cmp/* 比較関数 */
};
0223デフォルトの名無しさん
2006/05/16(火) 14:43:08x, /* 配列 */
nx,/* 要素数 */
sizeof(int),/* 要素の大きさ */
(int (*)(const void *, const void *))int_cmp/* 比較関数 */
};
bserchというソート済み配列から値を検索する関数に
int_cmpという値を比較して結果を返す関数へのポインタを渡す時に
(int (*)(const void *, const void *))int_cmpとして渡すそうなんですが、
どうして、単にint_cmpとして渡せないのでしょうか?
0224デフォルトの名無しさん
2006/05/16(火) 14:44:57関数の型が適切ならば、キャストの必要はありません。
0225デフォルトの名無しさん
2006/05/16(火) 14:49:330226デフォルトの名無しさん
2006/05/16(火) 14:55:040227デフォルトの名無しさん
2006/05/16(火) 14:55:39bserchが設計されているという事までは理解できました。
でも、(int (*)(const void *, const void *))って何でしょう・・・
bserchのコードは見られるのですか?
0228デフォルトの名無しさん
2006/05/16(火) 14:57:040229デフォルトの名無しさん
2006/05/16(火) 14:58:160230デフォルトの名無しさん
2006/05/16(火) 15:03:29こんなに複雑なキャストは見たことないので
いったい、何を何にキャストしてるのか、さっぱり分らなくて
0231デフォルトの名無しさん
2006/05/16(火) 15:07:50おおよそこの手引数を取る関数の中から
上記の const void* と const void* を取って int の値を戻す関数 が呼び出される。
0232デフォルトの名無しさん
2006/05/16(火) 15:11:06なるほど、関数のポインタでキャストする時は
戻り値の型(*)(引数の型)という形でキャストするという
ふうに覚えればいいんですかね?
0233デフォルトの名無しさん
2006/05/16(火) 15:28:400234デフォルトの名無しさん
2006/05/16(火) 15:30:41つーか、この手の関数の仕様に疑問が生じたら先ずここを調べよう。
ttp://www.linux.or.jp/JM/index.html
0235デフォルトの名無しさん
2006/05/16(火) 15:33:47とでも書けってこったな。
# return で ()多い? いつも迷って ((int *)c1)[0] とか書いちゃうけど…
0236デフォルトの名無しさん
2006/05/16(火) 15:50:46関数を書くのは面倒でも後々で楽って事ですかね。なるほど
0237デフォルトの名無しさん
2006/05/16(火) 15:58:09いいえ。キャストは最後の手段とするべきです。
0238デフォルトの名無しさん
2006/05/16(火) 16:25:24その比較関数はオーバーフローしない事が保証されてる場合のみの書き方だね。
分かって使う分には問題ないけど。
0239デフォルトの名無しさん
2006/05/16(火) 17:09:040240デフォルトの名無しさん
2006/05/16(火) 17:42:39目標ちゃいますてwwwwww
>>208に基礎的なことを学びたいって書いてありますやん(´・ω・`)
現実的に不可能な目標たてるわけありませんよ。小さなことからコツコツと逝くタイプっすから
>>213-214>>220
ちょwwwww
漏れに関係ある書き込みには全レスしておきました
参考書(>>210)は書店に売ってなかったので尼損にて注文しました
サイトは書籍等を見ながら自分に合ったものを探します
てことで本が届いて挫折するまでこのスレには来ませんwwwww
お世話になりました。挫折したらよろしくお願いします<m(_ _)m>
追伸
タイトルが「C言語なら俺に聞け!」というわりには質問に答えてくれる人が少なくて(´;ω;`)テラカナシスでしたorz
0241デフォルトの名無しさん
2006/05/16(火) 17:48:27*d = malloc(sizeof(int) * p);
と
int *d;
d = (int *)malloc(sizeof(int) * p);
どう違うのでしょうか?
0242デフォルトの名無しさん
2006/05/16(火) 17:51:43前者は大間違いです。
0243デフォルトの名無しさん
2006/05/16(火) 18:11:05上は指しているアドレスに確保しようとしているという意味になるのでしょうか?
0244デフォルトの名無しさん
2006/05/16(火) 18:15:00# ま、大概の実装はsizeof(int)== sizeof(int *)なんで、
# キャストを乱発すれば一応動いてしまうが厄介なんだが...
0245デフォルトの名無しさん
2006/05/16(火) 18:16:26そもそもこのスレは、あくまでこんなことしたいor分からないんだが
標準C的にはどうなのよ?って時のためのスレであって
Cに絡むことならなんでもいいって訳じゃねーしな
>>1ぐらい読んでから書けよ
0246デフォルトの名無しさん
2006/05/16(火) 18:28:11・釣りなら満足しただろうから帰っていいよ。
・初心者なら初心者スレに行った方がまともに答えてくれるよ。
・そうでなくても、「やりたいこと」を明示した方が問題解決の近道だよ。
0247デフォルトの名無しさん
2006/05/16(火) 18:41:06d は int* 変数
*d は int 変数
と思っとけ。
int 変数に void* 値を入れてどうするよという話。
0248デフォルトの名無しさん
2006/05/16(火) 19:15:53いや、Cでもキャストは要る。
むしろテンプレートを使ったstd::sortがあるのでC++ではキャストを使わずにできる。
0249デフォルトの名無しさん
2006/05/16(火) 19:51:30ありがとうございました
>>246
釣ではなかったのですが今度からはスレ見て聞くことにします
0250デフォルトの名無しさん
2006/05/16(火) 20:47:34できますか?
[1] レポート
[2] 日本語(SJIS)と対応する2バイトの16進コードを出力せよ
例:81AO □
こんな感じです
[3] 環境
[3.1] OS: Windows XP SP2
[3.2] Visual Studio 2005
[3.3] 言語: C/C++
[4] 期限: できれば早く
0251デフォルトの名無しさん
2006/05/16(火) 20:49:15C/C++の宿題を片付けます 64代目
http://pc8.2ch.net/test/read.cgi/tech/1146323457/l50
0252250
2006/05/16(火) 20:49:41C/C++の宿題を片付けます
に書く予定でした
0253デフォルトの名無しさん
2006/05/16(火) 20:49:51宿題スレにどうぞ。
0254デフォルトの名無しさん
2006/05/16(火) 22:21:23有効数字のみを表示させることは出来ますか?
例えば、"0.000000"とか"12.123400"とかではなく
"0", "12.1234"と表示するように。お願いします。
0255デフォルトの名無しさん
2006/05/16(火) 22:23:29%g
0256254
2006/05/16(火) 22:39:350257デフォルトの名無しさん
2006/05/17(水) 09:39:31.(ドット)
->(アロー)
同じ機能なのでしょうか?
コードの中で好きに選んでいいのですか?
0258デフォルトの名無しさん
2006/05/17(水) 09:47:520259デフォルトの名無しさん
2006/05/17(水) 10:05:34pointer->構造体.要素
という書きかたになるのでしょうか?
0260デフォルトの名無しさん
2006/05/17(水) 13:35:40int data;
};
struct st_b{
struct st_a ms;
struct st_a* ps;
};
struct st_a A;
struct st_a* B;
struct st_b C;
struct st_b* D;
B = &A;
C.ps = &A;
D = &C;
A.data = 1;
B->data = 2;
C.ms.data = 3;
C.ps->data = 4;
D->ms.data = 5;
D->ps->data = 6;
0261デフォルトの名無しさん
2006/05/17(水) 15:27:03こういう事よくするから、書きやすくしただけ。
0262デフォルトの名無しさん
2006/05/17(水) 16:28:040263デフォルトの名無しさん
2006/05/17(水) 16:41:560264デフォルトの名無しさん
2006/05/17(水) 19:47:160265デフォルトの名無しさん
2006/05/17(水) 20:13:40可能だよ。
0266デフォルトの名無しさん
2006/05/18(木) 01:05:38ファイルの有無と、そのれがディレクトリでないかチェックしたいのですが
どうかけばいいでしょうか?
0267デフォルトの名無しさん
2006/05/18(木) 01:11:34FILE file_pointer;
struct stat file_status;
//ごにょごにょ
if(stat(file_pointer, &file_status) != 0){
ココ
}
ココと指した所に行く時は、ファイルがなかったときになるのでしょうか?
0268デフォルトの名無しさん
2006/05/18(木) 01:20:23アクセス権がないとかもありそうな気がする。
0269デフォルトの名無しさん
2006/05/18(木) 01:40:410270デフォルトの名無しさん
2006/05/18(木) 01:43:320271デフォルトの名無しさん
2006/05/18(木) 01:59:48perror
とか色々とエラー出力があるのですが
具体的にどういう場合はこれとかそういうのはないんですかね?
0272デフォルトの名無しさん
2006/05/18(木) 02:01:38で、POSIXな環境なら、ディレクトリの場合も含めて
概ね同じ動作をすると思うが
それ以外の環境も考慮する場合は
ライブラリによって動作が違うから気をつけるべき。
例えば、stat("dirname/")の時とか、stat("filenam?")の時など。
また、S_ISDIRが定義されていない環境もある。
0273デフォルトの名無しさん
2006/05/18(木) 02:11:44errnoが設定されるエラーならperrorでOK
それ以外のアプリ独自のエラーなら fprint(stderr
どうせそのうち自作のログ出力用ライブラリ使うことになる。
0274デフォルトの名無しさん
2006/05/18(木) 04:02:03font_name = "-gothic-medium-r-normal*16*";
これを一行で簡潔させることはできませんかね?
単に一行につなげるだけ以外で・・
0275デフォルトの名無しさん
2006/05/18(木) 04:09:53そもそもそのコードは思いっきり間違っている。
0276デフォルトの名無しさん
2006/05/18(木) 04:13:060277デフォルトの名無しさん
2006/05/18(木) 04:22:130278274
2006/05/18(木) 04:34:26opt.file_name です。
なので const char *font_name = "-gothic-medium-r-normal*16*"; は
できません。
すいませんが、正しいコードを教えていただけないでしょうか?
0279274
2006/05/18(木) 04:35:01ちなみに構造体の中では
char *file_name;
として宣言されています。
0280デフォルトの名無しさん
2006/05/18(木) 04:49:08素直に2行でやりましょう。
文字列の代入は=ではなくstrcpyで。
0281デフォルトの名無しさん
2006/05/18(木) 05:04:44てか+1しとかないとまずくないか?
0282デフォルトの名無しさん
2006/05/18(木) 05:35:490283デフォルトの名無しさん
2006/05/18(木) 05:59:050284デフォルトの名無しさん
2006/05/18(木) 06:01:260285デフォルトの名無しさん
2006/05/18(木) 06:42:050286デフォルトの名無しさん
2006/05/18(木) 07:19:360287デフォルトの名無しさん
2006/05/18(木) 07:29:460288デフォルトの名無しさん
2006/05/18(木) 07:44:12>>1のリンク先程度は、一度くらいは目を通しておけ。
0289デフォルトの名無しさん
2006/05/18(木) 07:55:03正しいコードはこうなるだろう。
font_name = malloc( sizeof( "-gothic-medium-r-normal*16*"));
strcpy(font_name, "-gothic-medium-r-normal*16*");
どうしても1ステップで書きないならstrlen()のコストを問題にしないのであれば、関数でも書けばいい。
そうでないなら関数型マクロでやるしかないだろう。
#C++なら別の手段もあるが……
0290デフォルトの名無しさん
2006/05/18(木) 08:28:070291デフォルトの名無しさん
2006/05/18(木) 08:35:48とあるプロジェクトで、共通関数としてstrdup()同様の関数を入れてみたのだが、
利用者が解放忘れを多発するので標準じゃなくて良かったと思わなくもない。
0292デフォルトの名無しさん
2006/05/18(木) 09:43:59アホかおのれは
0293デフォルトの名無しさん
2006/05/18(木) 09:55:55int StackPush(Stack *s, void *x)
{
if (s->ptr >= s->max)
return (-1);
memcpy((char *)s->stk + s->ptr * s->sz, x, s->sz);
s->ptr++;
return (0);
}
スタック構造のプログラムで
void 型のポインタである値stkに、任意の型の値xに入れるために、
stkをchar型にキャストしてますが、これは何のためですか?
0294デフォルトの名無しさん
2006/05/18(木) 09:56:360295デフォルトの名無しさん
2006/05/18(木) 10:53:340296デフォルトの名無しさん
2006/05/18(木) 12:22:18ポインタ演算するには、そのポインタが指すオブジェクトのサイズが
解っていなければならないが、void * はそのままだと演算できない。
そのコードの場合、バイト単位で計算するために char * にキャストしているんだろう。
0297デフォルトの名無しさん
2006/05/18(木) 12:23:17定義がないのに整数と決めつける藻前もどうかと思うよ?
0298デフォルトの名無しさん
2006/05/18(木) 12:36:23じゃ「ポインタ同士を足してる」
0299デフォルトの名無しさん
2006/05/18(木) 12:58:39関数やら変数やらがリンクになって、そこをクリックすると
その宣言やヘッダファイルに飛べるようなソフト(ソースブラウザ?)が
オープンソースであったと思ったのですが、ソフト名を忘れてしまい
検索してもそれらしいソフトが見つからないので、知っているかたいたら
教えて下さい。
0300デフォルトの名無しさん
2006/05/18(木) 13:06:460301デフォルトの名無しさん
2006/05/18(木) 13:25:58レスありがとうございます。doxygenもおもしろそうですが
探していたのはgonzuiのことでした。やっと見つかりました。
0302デフォルトの名無しさん
2006/05/18(木) 14:44:18あ〜なるほど。
そういう決まりがあるのですね。
この場合、memcpyでコピーするサイズを与えているので、
Void型からどんな型にキャストしても機能するのでしょうか?
0303デフォルトの名無しさん
2006/05/18(木) 15:27:07例えば int が 4 バイトの環境で
(int *)s->stk + s->ptr * s->sz
としてしまうと、コピー先のアドレスが
「s->stk の値」+「int のサイズ」×「s->ptr * s->sz」
になるので拙い。
0304デフォルトの名無しさん
2006/05/18(木) 18:03:52「process.hをインクルードして_beginthread関数を使え」みたいなことがよく書いてあるんですが、
この「process.h」というのはC言語の標準ライブラリに含まれているのでしょうか?
私の持っている「プログラミング言語C」の標準ライブラリには載っていないのですが・・・。
0305デフォルトの名無しさん
2006/05/18(木) 18:06:240306デフォルトの名無しさん
2006/05/18(木) 19:30:280307デフォルトの名無しさん
2006/05/18(木) 19:40:32ファイルのサイズとか種類とか調べるにはどうしたらいいんですか?
調べてもでてこないのですが・・・
0308デフォルトの名無しさん
2006/05/18(木) 20:10:47配列の境界値として利用できないからといわれたんですが,どういう
意味ですか?
0309デフォルトの名無しさん
2006/05/18(木) 20:21:55プラットフォーム依存の話なので、他のスレへ。
>>308
const int array_size = 10;
char buffer[array_size];
とはできない、ということかと。そういう部分を我慢できるなら、
const定数でいいと思うけどね。
0310デフォルトの名無しさん
2006/05/18(木) 20:29:29そんなときには列挙がある。
0311デフォルトの名無しさん
2006/05/18(木) 20:30:58そうですか・・・ありがとうございました
調べたところMicrosoftのランタイムライブラリというのにprocess.hが含まれる、
ということらしいのですが、UNIXのコンパイラなどでもprocess.hが使えるようです
何かの規格にそって作られたライブラリなのでしょうか?
0312デフォルトの名無しさん
2006/05/18(木) 20:34:23空気よめない人間って最低だと思う
0313デフォルトの名無しさん
2006/05/18(木) 20:35:29ありがとうございます.ここでの境界値=配列の大きさということですね.
0315デフォルトの名無しさん
2006/05/18(木) 20:43:52pthread使っとけ。
0316デフォルトの名無しさん
2006/05/18(木) 21:02:230317デフォルトの名無しさん
2006/05/18(木) 21:03:340318デフォルトの名無しさん
2006/05/18(木) 21:06:19コンパイラ自体にも最適化の性能の差があったりもするわけだけど。
0319デフォルトの名無しさん
2006/05/18(木) 23:16:20↑のページを見ると、strtok(),strtok_r()は使用しないことと書いてありますが、
この関数を用いずトークン分割するには、何の関数を使用することになるんですかね?
0320デフォルトの名無しさん
NGNG0321デフォルトの名無しさん
2006/05/18(木) 23:38:06なぜかといえば淫乱関数は最適化されるかどうか不明だからだ!!!!!!!!!!
0322デフォルトの名無しさん
2006/05/18(木) 23:39:33マイクロソフトのc++2005かインテルc++がいいよ。
どちらも無料。
0323デフォルトの名無しさん
2006/05/19(金) 00:29:51atoiの部分が悪いようですが、改善方法が分かりませぬ。
教えていただけますでしょうか。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char* hairetu[1][100];//文字列格納用配列
int suuti;//数値格納用
printf("数字を入力:");
scanf("%s",&hairetu[0]);//数字を配列に格納
printf("\n入れた数字は%s\n",hairetu[0]);//文字列として出力
suuti=atoi(hairetu[0]);//数字を数値に変換
printf("10を足すと%d\n",suuti+10);//数値として計算出力
return 0;
}
0324デフォルトの名無しさん
2006/05/19(金) 00:37:00× char* hairetu[1][100];
○ char hairetu[1][100];
0325デフォルトの名無しさん
2006/05/19(金) 00:40:32#include <stdlib.h>
main() {
char hairetu[100];
int suuti;
printf("数字を入力:");
scanf("%s",hairetu);
printf("\n入れた数字は%s\n",hairetu);
suuti=atoi(hairetu);
printf("10を足すと%d\n",suuti+10);
}
0326デフォルトの名無しさん
2006/05/19(金) 00:40:370327デフォルトの名無しさん
2006/05/19(金) 00:41:42> scanf は一文字しか処理できないから
どこでそんな誤解を仕入れてきたんだ
1文字しか処理できなかったら数値の読み取りすら出来ないじゃまいか
0328これでもいけるぞ
2006/05/19(金) 00:44:52#include <stdio.h>
#include <stdlib.h>
main() {
char hairetu[100][100];
int suuti;
printf("数字を入力:");
scanf("%s",&hairetu[50]);
printf("\n入れた数字は%s\n",&hairetu[50]);
suuti=atoi(&hairetu[50][0]);
printf("10を足すと%d\n",suuti+10);
}
0329325
2006/05/19(金) 00:46:02>326
上ので文字列も取得できますぞ?
0330デフォルトの名無しさん
2006/05/19(金) 00:46:470331325
2006/05/19(金) 00:50:35ほんとだ、いけますね。
警告もでないし、違いを考えてみます。
ありがとう。
0332これでもいけるぞ
2006/05/19(金) 00:51:55suuti=atoi(&hairetu[0][0]);
0333デフォルトの名無しさん
2006/05/19(金) 00:52:54ただ今、開発メンバー募集中!!できる奴だけこぃ!
http://www112.sakura.ne.jp/~kaientai-project/creategame.htm
0334デフォルトの名無しさん
2006/05/19(金) 00:55:030335デフォルトの名無しさん
2006/05/19(金) 01:05:310336325
2006/05/19(金) 01:10:10配列の宣言から間違えてましたか、、間違えたのでも希望通りの結果が出てしまってわけわかめ。
精進します。
0338デフォルトの名無しさん
2006/05/19(金) 07:55:51>使用する場合は、以下の点に注意すること。
日本語読めますか?
0339デフォルトの名無しさん
NGNGまだやってたのかよ。
去年か一昨年くらいに2chでヲチされて盛り上がってたやつじゃないか。
0340デフォルトの名無しさん
2006/05/19(金) 08:16:06その前の
>これらの関数は絶対に使用しないこと。
これが程よく狂ってるからなあ。
それに、「連続する区切り記号はまとめられる」のも
注意事項の一つに含めるべきだと思うんだが。
0341デフォルトの名無しさん
2006/05/19(金) 08:35:04レス遅れましたけど
ありがとうございます
0342デフォルトの名無しさん
2006/05/19(金) 09:13:58そもそも、constは定数じゃない。
0343デフォルトの名無しさん
2006/05/19(金) 10:31:32コネクトにタイムアウトの設定をするにはどうしたらいいでしょうか?
cnt=3;
while(1)
{
if((connect(fd,&addr,sizeof(addr))==0)break;
else if(--cnt)
{
sleep(1);
}
else
{
エラー処理
}
}
こんな感じのタイムアウトも考えてみたのですが、もっとスマートな方法は無いでしょうか?
アドバイスお願いします。
0344デフォルトの名無しさん
2006/05/19(金) 10:35:300345デフォルトの名無しさん
2006/05/19(金) 10:44:35gdbで調べると、どうもmain()関数起動時? に死んでる様子
main()にブレークポイント設定すると、ブレーク到達前に死にます。
main()実行前に以下の関数を呼び出しているらしく、
_alloca()
probe()
Program Received SIGSEGV, Segmentation fault.
0x00405493 in probe()
と、probe()で死にます。
何か原因はあるのでしょうか?
同じオブジェクトをリンクした、宣言などは同じで内容は別の実行
ファイルを作ると、こちらは死なないのですが。
0346デフォルトの名無しさん
2006/05/19(金) 10:46:19知るかバカ
0347デフォルトの名無しさん
2006/05/19(金) 10:58:350348デフォルトの名無しさん
2006/05/19(金) 11:03:34http://www.kouno.jp/home/c_faq/c16.html#0
C FAQに同じようなのが載ってるけどこれじゃないよね?
0349デフォルトの名無しさん
2006/05/19(金) 11:16:18FAQに乗ってることなのに質問して申し訳ないです。
前にも同じことやって、同じFAQ読んだ記憶があるorz
0350デフォルトの名無しさん
2006/05/19(金) 15:10:28待ち行列シミュレーションのプログラムです。
エラーが出るのですが、わけがわからないのでお願いします。
【エラー】
エラー E2356 simulator.c 28: 'time' の再宣言で型が一致していない
エラー E2344 c:\Borland\Bcc55\include\stdlib.h 348: 一つ前の 'time' の定義位置
エラー E2060 simulator.c 42: 浮動小数点の不正な使用(関数 main )
エラー E2060 simulator.c 51: 浮動小数点の不正な使用(関数 main )
エラー E2060 simulator.c 56: 浮動小数点の不正な使用(関数 main )
エラー E2060 simulator.c 58: 浮動小数点の不正な使用(関数 main )
エラー E2060 simulator.c 60: 浮動小数点の不正な使用(関数 main )
エラー E2060 simulator.c 104: 浮動小数点の不正な使用(関数 schedule )
警告 W8004 simulator.c 122: 'interval' に代入した値は使われていない(関数 schedu
e )
*** 8 errors in Compile ***
0351デフォルトの名無しさん
2006/05/19(金) 15:11:57#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define Rand() ((double)rand()/RAND_MAX)
#define ExRand(m) (-log(1.0-Rand())/m)
#define END_TIME 1000.0
#define AR 0.1
#define SR 0.2
typedef enum{
ARRIVAL = 99,
DEPARTURE
}EVENT_TYPE;
typedef struct event{
EVENT_TYPE type;
double time;
struct event *next;
}EVENT;
0352デフォルトの名無しさん
2006/05/19(金) 15:13:30voidarrival(void);
voiddeparture(void);
voidschedule(EVENT_TYPE, double);
/* グローバル変数 */
double time;
double l_time;
double total_time;
int queue_length;
int customer;
EVENT top;
int main(void)
{
EVENT *current;
/* 初期化 */
time = 0.0;
l_time = 0.0;
queue_length = 0;
total_time = 0.0;
customer = 0;
/* 最初の到着イベントを作成・登録 */
schedule(ARRIVAL, AR);
0353デフォルトの名無しさん
2006/05/19(金) 15:14:52while(time < END_TIME){
/* イベントリストの先頭イベントを取り出す */
current = top.next;
top.next = current->next;
l_time = time;
/* 時刻を現在のイベント時刻まで進める */
time = current->time;
total_time = (time - l_time) * queue_length;
if(current->type == ARRIVAL){/* 到着イベント? */
arrival();/* 到着イベント */
}else if(current->type == DEPARTURE){/* サービス終了イベント? */
departure();/* サービス終了イベント */
}
free(current);
}
printf("\t\t|シミュレーション値|\n");
printf("総到着客数\t\t%d\n", customer);
printf("平均待ち時間\t\t%.3f\n", total_time/customer);
return 0;
}
0354デフォルトの名無しさん
2006/05/19(金) 15:15:39void arrival()
{
queue_length++;
customer++;
schedule(ARRIVAL, AR);
if(queue_length== 1)
schedule(DEPARTURE, SR);
}
void departure()
{
queue_length--;
if(queue_length!= 0)
schedule(DEPARTURE, SR);
}
0355デフォルトの名無しさん
2006/05/19(金) 15:26:35> エラー E2356 simulator.c 28: 'time' の再宣言で型が一致していない
> エラー E2344 c:\Borland\Bcc55\include\stdlib.h 348: 一つ前の 'time' の定義位置
まずはこれを直せよ。
簡単に言えば、「time」という名前を変数に使ってはダメ。
0356デフォルトの名無しさん
2006/05/19(金) 15:31:260357デフォルトの名無しさん
2006/05/19(金) 15:31:49void schedule(EVENT_TYPE type, double rate)
{
EVENT *thisEvent, *tmp;
EVENT *pre_tmp = (EVENT *)NULL;
double interval = 1/rate;
thisEvent = (EVENT *)malloc(sizeof(EVENT));
thisEvent->type = type;
thisEvent->time = time + ExRand(interval);
thisEvent->next = (EVENT *)NULL;
tmp = top.next;
pre_tmp = ⊤
while(1){
if(tmp == (EVENT *)NULL){
pre_tmp->next = thisEvent;
break;
}else if(thisEvent->time < tmp->time){
pre_tmp->next = thisEvent;
thisEvent->next = tmp;
break;
}
pre_tmp = tmp;
tmp = tmp->next;
}
}
0358デフォルトの名無しさん
2006/05/19(金) 15:38:540359デフォルトの名無しさん
2006/05/19(金) 15:54:07timeを違う変数名に変更したらエラーが消えました。
もしかしたら、違うかもしれませんが。
すでにtimeは存在してて
それをdouble型で再定義したからいけないということなんですね。
ありがとうございました。
0360デフォルトの名無しさん
2006/05/19(金) 16:31:08そういうこと。
<time.h>にtimeという関数がある。
0361デフォルトの名無しさん
2006/05/19(金) 18:50:12「再宣言で型が一致していない」とか。
0362デフォルトの名無しさん
2006/05/20(土) 00:15:00ビットシフトはなんの役に立つのでしょうか?
0363デフォルトの名無しさん
2006/05/20(土) 00:21:26おまえ、なぜ、そんなに、ばか、なの?
0364デフォルトの名無しさん
2006/05/20(土) 00:57:15何回使えば気が済むんだ、その餌。
0365デフォルトの名無しさん
2006/05/20(土) 01:31:22MSVC++で以下のコードでは構造体s_1のビットフィールドと文字cの間がパックされません。どうしてでしょう?誰か教えてください。
#pragma pack(1)
struct s_1 { unsigned a : 7; unsigned b : 1; char c; };
struct s_2 { char a8; charb8; };
union s_u { s_1bit; s_2any; };
s_utest;
int main(int argc, char* argv[])
{
s_u * p = &test; p->bit.a = 0xAA; p->bit.b = 1; p->bit.c = 0x55;
char a8, b8;
a8 = p->any.a8; b8 = p->any.b8;
return 0;
}
0366デフォルトの名無しさん
2006/05/20(土) 01:50:08ビットフィールドの区域は必ず int のサイズの倍数になるんだったはず。
どうにかして欲しいけど、そういう仕様になっている。
0367デフォルトの名無しさん
2006/05/20(土) 01:51:44>>1 を読み、そして吊れ。
0368デフォルトの名無しさん
2006/05/20(土) 02:00:41ありがとうございます田。
0369デフォルトの名無しさん
2006/05/20(土) 11:29:01明確な答えを導き出してくれなかった。
そして初心者歓迎のほうのスレで聞いたら、ある人が答えを導き出してくれた・・・
・・・C言語の簡単なものなら俺たちに聞けにスレ名変えたほうが
0370デフォルトの名無しさん
2006/05/20(土) 11:32:09そうやって何でも人のせいにしてたらいつまでも
上達しないだろうねw
0371デフォルトの名無しさん
2006/05/20(土) 12:53:14スレタイをよく見てみろ。
聞け!とは書いてあるが、答えを教えてやる!とは書いてない。
0372デフォルトの名無しさん
2006/05/20(土) 15:40:44入力文字列1="tokyo23ku";
入力文字列2="tokyo23kudakke?";
format="tokyo%dku";
の場合、入力文字列1はtrue、入力文字列2はfalseになるように・・・
0373区別つくけど?
2006/05/20(土) 17:01:35char *str2="tokyo23kudakke?";
char *str3="tabuntokyo23ku";
char *format="tokyo%dku" "%s";
printf("%s = %d\n", str1, sscanf(str1, format, &d, buf));
printf("%s = %d\n", str2, sscanf(str2, format, &d, buf));
printf("%s = %d\n", str3, sscanf(str3, format, &d, buf));
0374デフォルトの名無しさん
2006/05/20(土) 17:45:17int main(void)
{
char *str1="tokyo23ku";
char *str2="tokyo23kudakke?";
char *str3="tabuntokyo23ku";
char *format="tokyo%dku" "%c";
int d;
char buf;
printf("%s = %d\n", str1, sscanf(str1, format, &d, &buf) == 1);
printf("%s = %d\n", str2, sscanf(str2, format, &d, &buf) == 1);
printf("%s = %d\n", str3, sscanf(str3, format, &d, &buf) == 1);
return 0;
}
つまりこういうかんじに、
sscanfの戻り値が1かどうか判定したらいいのですね?
0375デフォルトの名無しさん
2006/05/20(土) 17:53:120376billy
2006/05/20(土) 18:27:24単語に分けた上で、第2引数と第3引数のフィールドを入れ替えて出力するプログラムを作成する。
ただし、入れ替えるように指定されたフィールドの一方もしくは両方が存在しなかった場合は
入れ替えを行わないようにする。
実行例:
%cat source
This,is,source.
file,end.
%gcc -o fieldswap kadai.c
%./fieldswap source 2 3
-- Line 1 --
Field 1: This
Field 2: source.
Field 3: is
-- Line 2 --
Field 1: file
Field 2: end.
環境
OS:Linux
コンパイラ名とバージョン:gcc
言語:C
期限: 5/25
0377デフォルトの名無しさん
2006/05/20(土) 18:53:43データを直接コピーしないっていう方法って有った?
0378デフォルトの名無しさん
2006/05/20(土) 19:24:24ポインタの配列にすればいいだけでないの。
ポインタを引数に取る比較関数を作り、比較関数の中ではポインタの参照するデータで比較する。
でその関数をqsortの引数に渡してやれば、実際のデータのコピーはすることなく
ポインタのコピーのみでソートが終わる。
SuffixArrayあたりで使われてる手法だけど。
0379デフォルトの名無しさん
2006/05/20(土) 21:15:070380デフォルトの名無しさん
2006/05/20(土) 21:26:54C99 なら可能
http://seclan.dll.jp/c99d/c99d02.htm#dt19990405
C89 なら、括弧毎引数に渡すようにする事で
誤摩化す手がある。
あるいは関数名をすげかえるとか。
0381デフォルトの名無しさん
2006/05/20(土) 21:31:39×括弧毎
○括弧ごと
0382デフォルトの名無しさん
2006/05/20(土) 22:08:20無償でBorladC++かVisualC++で出ないかな・・・
0383デフォルトの名無しさん
2006/05/20(土) 22:09:310384デフォルトの名無しさん
2006/05/20(土) 22:11:000385デフォルトの名無しさん
2006/05/20(土) 22:20:54なぬ?
無償だって?
VCあったの・・・?
0386デフォルトの名無しさん
2006/05/20(土) 22:27:38ATLやMFCは入ってないが
まあスレ違い
0387デフォルトの名無しさん
2006/05/20(土) 22:45:24どの辺まで使えるのかは知らんが。
0388デフォルトの名無しさん
2006/05/20(土) 23:21:310389デフォルトの名無しさん
2006/05/21(日) 01:25:07struct ary_zero {
int len;
char d[0];
};
struct ary_ {
int len;
char d[ ];
};
0390デフォルトの名無しさん
2006/05/21(日) 01:39:35[0]は知らないが、[]については少なくともC99には規定があった
C89については規格票持ってないので知らん
0391デフォルトの名無しさん
2006/05/21(日) 02:06:13C99 からの仕様
http://seclan.dll.jp/c99d/c99d04.htm#dt19990726
0392デフォルトの名無しさん
2006/05/21(日) 02:25:06レスサンクス、規定あるのね。gcc3.4コンパイルの-Wallで警告でなかったんで大丈夫かなって思ったけど
VC2003でコンパイルしてみるとwarning C4200って出てあせっちゃった。
0393デフォルトの名無しさん
2006/05/21(日) 02:28:38gcc -ansi -pedantic -Wall でコンパイルしてみそ。
0394デフォルトの名無しさん
2006/05/21(日) 03:22:30cygwin上だけど[ ]のCでwarning: ISO C90 does not support flexible array members、、、C++でerror: ISO C++ forbids zero-size array `d' っか。。
0395デフォルトの名無しさん
2006/05/21(日) 06:24:35警告すら出ないくらいにすべし。
0396デフォルトの名無しさん
2006/05/21(日) 07:48:11gccなら-std=c99
0397デフォルトの名無しさん
2006/05/21(日) 12:25:22小数点以下だけを表示させるプログラムの作り方を教えてください。
また、while構文を使ってa,bを入力させ続けるものとします。
0398デフォルトの名無しさん
2006/05/21(日) 12:40:57ここは宿題スレでも初心者歓迎スレでもないのでヒントだけ。
結果の小数部を得るには、結果から結果を整数値に丸めたものを引く。
丸める関数にはC99ならそうでなければfloor()を使えばいい。
#但し、floor()の場合は負数に注意。
0399デフォルトの名無しさん
2006/05/21(日) 12:46:20う〜ん、ぜんぜん分からないです
0400デフォルトの名無しさん
2006/05/21(日) 12:50:43だからスレ違いだってば。
判らないんだったら初心者スレで聞けよ。
0401デフォルトの名無しさん
2006/05/21(日) 13:40:02小学校の算数をやり直した方がいいよ
0402デフォルトの名無しさん
2006/05/21(日) 13:45:16〇全然考えてない
だろ?
0403デフォルトの名無しさん
2006/05/21(日) 16:18:54お願いします。
BSS領域は、初期値が与えられていないデータを格納
されるといわれていますが、Cのソースコードでは
どのようなコードになるのでしょうか。
ローカル変数のことであっていますでしょうか。
0404デフォルトの名無しさん
2006/05/21(日) 16:41:41いいえ。一般的にローカル変数はBSS領域に格納されることはありません。
そしてスレ違い。
0405デフォルトの名無しさん
2006/05/21(日) 16:58:48家で課題をやるためにLinuxを無料でダウンロードしたいのですが、どういうものがあるのかサイト等を教えていただけませんか?
Vine Linuxは有料みたいなので・・・
0406\____________________/
2006/05/21(日) 17:02:53ο
o
,, --──-- 、._
,.-''"´ \
/ ヽ、 とちょっと恥ずかしい妄想をしてしまったブーンであった。
/ ヽ
l \/ \/ l
.| , , , |
l (_人__) """l
`、/⌒i /⌒⌒ヽ /
/ | | \ /
0407デフォルトの名無しさん
2006/05/21(日) 17:27:14ありがとうございました。
スレ違いでしたか、すいません。どのスレが適切かなぁ。
0408デフォルトの名無しさん
2006/05/21(日) 17:46:240409デフォルトの名無しさん
2006/05/21(日) 17:52:520410デフォルトの名無しさん
2006/05/21(日) 17:54:16つ ttp://www.google.co.jp/search?hl=ja&q=C-compiler+free+-C%2B%2B
0411デフォルトの名無しさん
2006/05/21(日) 18:01:33コンパイルはできるのですが、enumの定義を変えないとできなかったりしたので・・・
>>410
どうもありがとうございますm(_ _"m)ペコリ
0412デフォルトの名無しさん
2006/05/21(日) 18:04:06拡張子がcで無い悪寒。
0413デフォルトの名無しさん
2006/05/21(日) 18:08:460414デフォルトの名無しさん
2006/05/21(日) 18:21:07cに変更すればいい
0415デフォルトの名無しさん
2006/05/21(日) 19:08:26スレ違い。1レスで終わる程度ならいいが、そうでないなら誘導するなりしろって。
>>407-408
現在使っているコンパイラを明示の上、初心者スレか環境依存OKスレ辺りにどうぞ。
0416デフォルトの名無しさん
2006/05/21(日) 19:30:252chやって何秒経つんだ?
0417デフォルトの名無しさん
2006/05/21(日) 19:47:55煽りで答えたいわけで
0418デフォルトの名無しさん
2006/05/21(日) 19:52:460419デフォルトの名無しさん
2006/05/21(日) 20:54:30printf("foo = %.8x\n",foo);
なんですが、fooの値を16進数・・・・(改行)で表す
までしか分かりません、
"foo = %.8x\n"
の解釈お願いします
0420デフォルトの名無しさん
2006/05/21(日) 21:00:54http://www5d.biglobe.ne.jp/~satis/document/CLIPManual/format_printf.html
0421デフォルトの名無しさん
2006/05/21(日) 21:41:10ありがとう、ドットの後の数字(8)は精度を表すという解釈で
よろしいでしょうか、
fooの値を有効精度8桁の16進数で出力せよ
あってます?
0422デフォルトの名無しさん
2006/05/21(日) 21:53:340423デフォルトの名無しさん
2006/05/21(日) 21:59:300424デフォルトの名無しさん
2006/05/21(日) 22:12:240425デフォルトの名無しさん
2006/05/21(日) 22:41:36明らかにスレ違いのもありますが、そうでなさそうなのも
「スレ違い、氏ね」
なんていわれますが・・・
0426デフォルトの名無しさん
NGNGいちいち気にすんなよ。
0427デフォルトの名無しさん
2006/05/21(日) 22:49:41たとえばどれがですか?
0428デフォルトの名無しさん
2006/05/21(日) 22:54:50> ここで聞いていいのはあくまでもCの仕様のみなんですか?
そのとおり。
0429デフォルトの名無しさん
2006/05/21(日) 23:41:33C/C++で作れる?IE APIみたいなのがあってそれをCで操作して
実装する感じになるのかな?
0430デフォルトの名無しさん
2006/05/21(日) 23:52:070431デフォルトの名無しさん
2006/05/22(月) 00:03:55参考書籍や検索キーワードありますか?
0432デフォルトの名無しさん
2006/05/22(月) 00:05:38「IE ツールバー 作成」なんかでググればそれなりに見つかる。
これ以上はすれ違い。
0433デフォルトの名無しさん
2006/05/22(月) 00:17:19496 デフォルトの名無しさん : 2006/05/21(日) 23:39:52
googleツールバーみたいなIEに付けるアプリつくりたいんだけど、
javaで作れる?IE APIみたいなのがあってそれをjavaで操作して
実装する感じになるのかな?
0434デフォルトの名無しさん
2006/05/22(月) 00:19:090435デフォルトの名無しさん
2006/05/22(月) 00:41:47ファイルを繰り返し読み込むことは可能なのでしょうか?
一度プログラムを作ってみたのですが
一度目はファイルを読み込みましたが、込二度目からは読み込めませんでした
どなたか教えてもらえませんか?
0436デフォルトの名無しさん
2006/05/22(月) 00:59:05可能ですよ?
0437デフォルトの名無しさん
2006/05/22(月) 01:02:15while文でファイル内の数字を読み返した後
再び同じことを実行したいのですが
0438デフォルトの名無しさん
2006/05/22(月) 01:07:18ヒント:fseek
0440デフォルトの名無しさん
2006/05/22(月) 01:31:540441デフォルトの名無しさん
2006/05/22(月) 06:21:42おまいはアタッ〇25の司会でもやりたいのか
0442デフォルトの名無しさん
NGNG0443デフォルトの名無しさん
2006/05/22(月) 07:25:120444デフォルトの名無しさん
2006/05/22(月) 09:15:28大学の研究室で、C言語使ってます
以下に類似した処理を行う、二つソース例を出します
int aaa(int x, int y) {
int z;
z = x + y;
return z;
}
void bbb(int * x, int * y, int * z) {
*z = *x + *y;
}
勿論こんなつまんない関数じゃないけど、自分はaaa()じゃなくてbbb()みたいな書き方をすることが多い。
ただ、こういう書き方をすると、他の学生から分かりにくいソースだって言われる
人によっては、何だこれ?って反応する人がいる
先生は流石に理解できるけど、なんか変なことしてるなー...って目つきで俺のソースを見る
俺のソースのどこら辺が、良くないっていうか、変?
一応ちゃんと動く
0445デフォルトの名無しさん
2006/05/22(月) 09:19:47可読性だの書き方の問題では無い
まったく別のコードだろ?それ
使い分けできていれば問題ないがね
0446デフォルトの名無しさん
2006/05/22(月) 09:23:37動作は間違っちゃいないが、素直じゃないソースだなぁとは感じる
なぜ関数に戻り値というものがあるのか
ポインタ渡しはどういう場合に使うべきなのか
を考え直してみるよろし
0447デフォルトの名無しさん
2006/05/22(月) 09:32:17必要がなければ後者のようには書かないよ。
実行時パフォーマンスが落ちるから。
0448デフォルトの名無しさん
2006/05/22(月) 09:32:55こんなソース読まされたらお前だってぶちきれるだろ?
void add(int *a, int *b, int *c)
{
*b = *c + *a;
}
値をひとつ返す時は関数の戻り値で返すという習慣を無視しているからだよ。
それから値を関数に渡したい時は値渡し、変数自体を書き換えるときはポインタを渡すという習慣も無視している。
そういう習慣・常識を覆すようなソースは読んでいてものすごい疲れる。
お前が生まれる前からCは使われ続けているんだからそこらへん無視して好き勝手やっちゃ遺憾。
# さらに言えばそう書いちゃいけないという技術的な理由もちゃんとあるがここでは省略。ともかくお手本をまねろと。
0449デフォルトの名無しさん
2006/05/22(月) 09:40:23*z = x + y;
}
なら、俺は許す
0450デフォルトの名無しさん
2006/05/22(月) 09:40:47愚痴聞いて頂いてサンクスです
まあ、一つの戻り値を必要とする時は流石に自分もbbbで書くことはあんまりないけど、
自分が関数を作ると不思議と、戻したい値が二つ以上になってくれることが多いのですw
すると必然的に、bbbの形になり、いつの間にか戻り値は、大して役に立たないことに使われたり、
もう使う気がなくなってたり、なんてことがある訳です
0451デフォルトの名無しさん
2006/05/22(月) 09:43:000452デフォルトの名無しさん
2006/05/22(月) 09:47:51>自分が関数を作ると不思議と、戻したい値が二つ以上になってくれることが多いのですw
それは単に設計が悪いだけなんじゃないか?
>>451も書いてるが、そもそもある関数が返す値というものは
基本的には関連してる物なはずだから(そうじゃないなら設計が悪い)
それを構造体にまとめれば一つになるだろ
関連する値をバラバラに扱ってるのは読みづらいし、要らぬバグの温床になる
0453デフォルトの名無しさん
2006/05/22(月) 09:50:20で結果も大量に出る、と
0454デフォルトの名無しさん
2006/05/22(月) 09:54:04返したい値が複数あるときはポインタ使ってもいいと思うよ。
そういう時でも、入力するだけのintをポインタにするのは異常。
0455デフォルトの名無しさん
2006/05/22(月) 10:15:38或いはVBでbyRefとか。
標準ライブラリ関数の仕様と自分の仕様を見比べて、どっちが使いやすいか考えてみたら?
0456デフォルトの名無しさん
2006/05/22(月) 10:27:35int でも入力をポインタにしてるのも許すが、
そうでなければアウトだな。
0457デフォルトの名無しさん
2006/05/22(月) 11:28:25typedef struct {int data;} *koko;
koko a = 5;
なんで
kokoは構造体なのに、こんな表現が許されるのでしょうか?
0458デフォルトの名無しさん
2006/05/22(月) 11:30:57それポインタに5を代入してないか?
意図したコードと違う気がするんだが、タイプミス?
0459デフォルトの名無しさん
2006/05/22(月) 11:51:43他に無料でイイコンパイラ無い??
0460デフォルトの名無しさん
2006/05/22(月) 12:19:280461デフォルトの名無しさん
2006/05/22(月) 14:09:38return の時点では 740 kbyte のメモリを使用していることになっていたんだけど、
これってメモリがリークしているって考えていいのかな?
それともよくあること?
ちなみに、MSVC++ でデバッグモードで実行させてます。
0462デフォルトの名無しさん
2006/05/22(月) 14:17:24malloc()で確保したメモリはfree()しても、システムには帰らないんじゃないの?
0463デフォルトの名無しさん
2006/05/22(月) 14:21:300464デフォルトの名無しさん
2006/05/22(月) 15:25:00環境がPCじゃないなら不可侵のメモリでもいけると思います。
おそらくマイコンとかじゃないですか?
0465デフォルトの名無しさん
2006/05/22(月) 15:43:060466デフォルトの名無しさん
2006/05/22(月) 15:44:260467デフォルトの名無しさん
NGNGint main(){ int n=10; s=n*(n+1)/2; for(;;){ printf("%i\n", s); }}
0468デフォルトの名無しさん
2006/05/22(月) 15:56:21プログラムを、while文で作成せよ。
0469デフォルトの名無しさん
2006/05/22(月) 15:57:39相手するなってば。
0470デフォルトの名無しさん
2006/05/22(月) 16:16:19int main(void) {
int i,x;
x=0;
for (i = 2;i <= 10;i = i + 2)
x = x + i;
printf("%d¥", x);
return 0;
}
相当雑に書いてみたw
0471デフォルトの名無しさん
2006/05/22(月) 16:17:04whileだったらループを逆にしないといかんな
0472デフォルトの名無しさん
2006/05/22(月) 16:21:31int i,x;
i=0;x=0;
while(i<=10) {
i=i+2;
x=x+i;
}
printf("%d¥",x);
return 0;
}
これでいいの...かな?
whileを滅多に使わないから自信ナッシング
スレ汚しごめん
0474デフォルトの名無しさん
2006/05/22(月) 17:30:37まずいwこれだと最後に12が入ってしまうやんw
orz
0475デフォルトの名無しさん
2006/05/22(月) 18:09:53下がってよいぞ
0476デフォルトの名無しさん
2006/05/22(月) 18:20:30スレ違い
0477デフォルトの名無しさん
2006/05/22(月) 23:18:14//1..Nまでの整数のうち偶数だけを加算する関数
evenCal(int N){
int rtn=0, i=N;
while(i>0){
rtn += (i%2) ? 0 : i ;
i--;
}
return rtn;
}
C++だと怒られる
0478デフォルトの名無しさん
2006/05/22(月) 23:25:28そうですか。
0479デフォルトの名無しさん
2006/05/22(月) 23:28:27iの初期値を「N-(N%2)」、「i--」を「i-=2」にすれば、三項演算子も要らないのに、
何故奇数まで処理するのか?と小一時間(ry
0480デフォルトの名無しさん
2006/05/23(火) 01:37:393項演算したかったからさ。
N−N%2なんてださくて嫌、それに醜いから俺は死んでもそんなカコワルイコードは書けないなーw
3項演算は掛け算にするけどね、最初頭の中では rtn += rtn*(i%2) だったんだけどさ、?:にしてみた。
奇数まで処理するのはこれなら奇数版も?のとなりの入れ替えで書けるから気持ちよい。
0481デフォルトの名無しさん
2006/05/23(火) 01:53:410482デフォルトの名無しさん
2006/05/23(火) 02:00:58可変長の構造体含む場合、mmapとかでバインドできないし
困ってる
typdef struct d{
char * name;
int num;
}Data;
typde struct s{
Data *data;
int id;
}
0483デフォルトの名無しさん
2006/05/23(火) 09:39:16助けてください
0484デフォルトの名無しさん
2006/05/23(火) 09:58:59スレ違い
0485デフォルトの名無しさん
2006/05/23(火) 10:31:54Cでフルスクリーンできないのですか?
0486デフォルトの名無しさん
2006/05/23(火) 10:35:53っていうか毎回やってないでテンプレで誘導しろ>>1
0487デフォルトの名無しさん
NGNG0488デフォルトの名無しさん
2006/05/23(火) 14:17:390489デフォルトの名無しさん
2006/05/23(火) 14:24:100490デフォルトの名無しさん
2006/05/23(火) 14:26:21小学生だって理解できるような等差数列の和の数式が複雑だと思うくらいなら人間やめた方がいい。
0491デフォルトの名無しさん
2006/05/23(火) 14:38:490492デフォルトの名無しさん
2006/05/23(火) 14:39:160493デフォルトの名無しさん
2006/05/23(火) 15:55:200494デフォルトの名無しさん
2006/05/23(火) 15:57:520495デフォルトの名無しさん
2006/05/23(火) 16:10:43どうしたらいいかな。とりあえずそのままじゃ無理だから文字列として扱うって事くらいしかわからん
教えてエロイ人
0496デフォルトの名無しさん
2006/05/23(火) 16:14:54やり方はわかるがCのコードとして表現できないのか
その切り分けすら面倒なのでここに丸投げしているのか。
0497デフォルトの名無しさん
2006/05/23(火) 16:18:190498デフォルトの名無しさん
2006/05/23(火) 16:19:46宿題ならスレ違い、仕事丸投げならお門違い。
0499デフォルトの名無しさん
2006/05/23(火) 16:20:35>>493
0500デフォルトの名無しさん
2006/05/23(火) 17:17:540501デフォルトの名無しさん
2006/05/23(火) 20:34:58データには抜けがある事があるのですが、
(入力データの例)
10,30,20
10,20,30
,20,
,30,20
10,,20
・・・
このデータを以下のようにsscanfで一行づつ読み込んでデータを取り込みたいのですが。
int x1, x2, x3;
char line[32];
sscanf(line,"%d,%d,%d%[^\n]",
&x1, &x2, &x3);
if(x1 == NULL) x1 = 0;
if(x2 == NULL) x2 = 0;
if(x3 == NULL) x3 = 0;
などとしたいのですが、
先頭データに抜けがある場合などに、抜けがないデータも含めてx1,x2,x3すべてNULLになってしまいます。(例えば例の3行目)
多分、%d指定で読み出すべきところに値が無いことが原因かなとは思いますが、回避策がわかりません。
何か回避方法ありますか?
0502デフォルトの名無しさん
2006/05/23(火) 20:45:21自分で区切る
0503デフォルトの名無しさん
2006/05/23(火) 21:59:550504501
2006/05/23(火) 22:16:490505デフォルトの名無しさん
2006/05/23(火) 22:29:000506デフォルトの名無しさん
2006/05/23(火) 22:38:410507デフォルトの名無しさん
2006/05/23(火) 23:02:020はなんでもかんでもNULLにしたがる人って居るよね。
0508デフォルトの名無しさん
2006/05/24(水) 00:24:33全てが違う
0509デフォルトの名無しさん
2006/05/24(水) 00:50:27putsは引数で渡された文字列に改行文字を末端に付加して、
標準出力(通常はディスプレイ)に出力する関数。
printfは第一引数で書式(printfのfは書式formatのf)を指定し、
文字列を作成して、標準出力(通常はディスプレイ)に出力する関数。
具体例
char s[] = "hoge";
puts(s); とprintf("%s\n", s);は同じく表示される。
printf(s);だと改行文字が出力されない。また、配列s内に変換指定文字%が
混じっていると不定の動作になります。
文字列リテラルを表示するだけならputsの方が速くていいかもしれません。
例:puts("こんにちは、世界");
printfだと書式指定によっていろんな文字列が
作れるので原則こちらを使うといいのだと思います。
例:printf("今日は%4d年%2d月%2d日です。\n", year, month, day);
スピードは環境によっては遅いかもしれませんが。
printf系ファミリーは、ディスプレイに文字を表示する関数群、じゃなくて
「書式を指定したらいろいろ文字列を作ってくれる関数群」と考える
べきではないかと。
0510デフォルトの名無しさん
2006/05/24(水) 01:18:50そういうやついるな。
NULLがポインタだってわかってないから困る。
0511デフォルトの名無しさん
2006/05/24(水) 01:30:030512デフォルトの名無しさん
2006/05/24(水) 01:37:10確かにあんまり使いたくないね。
BMP の扱いで要求されたりすることはあるけど。
0513デフォルトの名無しさん
2006/05/24(水) 01:38:13俺はデータ構造をフラットなメモリに展開したい場合に使ってた
たとえばプロセス間通信でバイナリでまんま転送したい時とか
(構造体にポインタを含むと渡せなくなるから)
まんまファイルにシリアライズしたい時とか
WindowsだとBITMAPなんちゃらで使ってたりしてた様な
0514困ってます
2006/05/24(水) 07:38:41偏差を表示するプログラムを作成せよ。for文を使うこと。
2. 14の段数をもつピラミッドを表示するプログラムを作成
せよ。
3. 9段の市松模様(以下の例を参考にせよ)を表示するプロ
グラムを作成せよ.
段数は? 3
**** **** **** ****
**** **** **** ****
**** **** **** ****
**** **** **** **** *ここまで1段
**** **** **** ****
**** **** **** ****
**** **** **** ****
**** **** **** **** *ここまで2段
**** **** **** ****
**** **** **** ****
**** **** **** ****
**** **** **** **** *ここまで3段
0515デフォルトの名無しさん
2006/05/24(水) 08:51:25マルチのスレ違いはお帰りください。
つーか、釣りか嵐の積もりですか?
0516デフォルトの名無しさん
2006/05/24(水) 09:47:11> 困ってます
一 生 困 っ て ろ !
0517デフォルトの名無しさん
2006/05/24(水) 13:59:25↑
これの解読お願いします。
0518デフォルトの名無しさん
2006/05/24(水) 17:11:40( ´∀`)つ[�_�g�aキーテスなキテス�d�a�dぁぁは]
0519デフォルトの名無しさん
2006/05/25(木) 20:37:34改行が多いので二回に分けて投稿させてください
struct LIST
{
int data;
void (*func)();
struct LIST *next;
};
struct LIST top;
・
・
・
0520デフォルトの名無しさん
2006/05/25(木) 20:38:10{
struct LIST *p;
for( p=top.next; p!=NULL; p=p->next )
{
func();
}
}
void addlist(int val)
{
struct LIST *new;
(略)
new->func=hoge;
}
void hoge(void)
{
ここでdataをいじる
}
こんな感じのプログラムを書きたいのですが
hoge関数内で生成されたリストの変数を操作するにはどうすればいいのですか
0521デフォルトの名無しさん
2006/05/25(木) 20:42:12何がしたいかというと、addlist関数で生成したリストのdataをhoge関数内で操作したいのです。
0522デフォルトの名無しさん
2006/05/25(木) 20:43:07void hoge(LIST* p)
0523519
2006/05/25(木) 20:48:330524デフォルトの名無しさん
2006/05/26(金) 11:55:27> 共有メモリにデータ確保すると時ってみんなどうしてる?
自前で共有メモリ用malloc関数書くしかないんじゃない。
前やったときは仕方なくそうした。少し面倒だったけど。
0525難問〜
2006/05/26(金) 17:00:30わかりません〜。
そして再帰を用いずに素因数分解を行うプログラムもわかりません。
これできたらマジ天才ですよ!!
尊敬尊敬〜。
0526難問〜
2006/05/26(金) 17:03:26#include<stdio.h>
void abs_sum(int n,int w);
int main(){
int w=2,n=3;
abs_sum(n,w);
return 0;}
void abs_sum(int n,int w){
void in_abs_sum(int total_length,int n,int w);
in_abs_sum(n,0,w);}
void in_abs_sum(int total_length,int pos,int w){
int i,j,called=0;
if(pos>=total_length){
putchar('\n');
return;}
for(i=0;i<=w;++i){
if(called++){
for(j=0;j<pos;++j){
printf(" ");}}
printf(" %2d",i);
in_abs_sum(total_length,pos+1,w-i);}}
0527デフォルトの名無しさん
2006/05/26(金) 17:16:15適切なスレの選択も解ってないようですね。
0528デフォルトの名無しさん
2006/05/26(金) 19:35:260529デフォルトの名無しさん
2006/05/26(金) 20:06:39現在、大学で卒研の課題出されてて、それの為のプログラムをANSI Cで書いています。
高域通過フィルタを作るプログラムです。
ところがなぜか、このプログラム、自分が使ってるマックと、学校にあるウインドウズで、異なる動作をするので困っています。
ANSI C以外の怪しい命令は使っていないつもりです。
マックで動作させると、ちゃんとフィルタとして作動するんですが、ウインドウズで動作させると、何が何やら訳が分からない波形が出力されます。
このプログラムを実行させると二つテキストファイルが出力されます
入力波形がx-i、出力波形がy-iです
一列目がX軸、二列目がY軸の値です
エクセルや、Sma4Winなどで開けると思います。
学校で使ってるコンピュータ(Win)のCコンパイラはVisual C++ 6.0
自分のマックのCコンパイラはXcode 2.2です。
コンパイルの時にはエラーも警告も出ていません
見た感じだと、y-iの出力の段階で既に、別物になってしまっています
ソースは使っていない関数(別の課題のを切り貼りした所もある)とかもあってゴチャゴチャで申し訳ありませんが、ちょっと見て頂けると助かります。
両方のコンピュータで正常に動くことを望んでおります。
0530デフォルトの名無しさん
2006/05/26(金) 20:11:12適切なスレの選択も解ってないようですね。
0531デフォルトの名無しさん
2006/05/26(金) 21:24:46全然みてないが、宿題スレに行くといいんじゃないかと
0532デフォルトの名無しさん
2006/05/26(金) 21:31:14関数lpfの戻り値をよく追いかけろ。
俺はお前のデバッガじゃないからそれ以上は知らん。
0533デフォルトの名無しさん
2006/05/26(金) 21:51:48int*lpf(){int c;return &c;}
0534デフォルトの名無しさん
2006/05/26(金) 23:01:57それで、よく「ちゃんと動く」って宣えるね。
0535デフォルトの名無しさん
2006/05/26(金) 23:11:11一度確認します
0536デフォルトの名無しさん
2006/05/26(金) 23:17:250537デフォルトの名無しさん
2006/05/26(金) 23:26:50取りあえず今度学校に行った時に、窓機で再試験してみます
ありがとうございました
0538デフォルトの名無しさん
2006/05/27(土) 02:03:30compound-statement ::= "{" declaration-list statement-list "}"
となってるけど,
なんで宣言部分をブロックの先頭に書くことになってるのか理由が知りたい.
歴史的な理由とかあるんですか?
別に
declarationを特別扱いしないでも良さそうなもんだよね.
好きなところで変数を宣言したいよ.(してるけど...gccばっか使うから)
0539デフォルトの名無しさん
2006/05/27(土) 02:09:340540デフォルトの名無しさん
2006/05/27(土) 11:07:49すきなところにブロックを作って変数宣言すればいい
0541デフォルトの名無しさん
2006/05/27(土) 14:23:540542デフォルトの名無しさん
2006/05/27(土) 14:33:16FILEとその周りは参考になる。
0543デフォルトの名無しさん
2006/05/27(土) 14:53:33そこに労力を費やしても後で後悔することになるので
ほどほどにしておくのが一般的です
0544デフォルトの名無しさん
2006/05/27(土) 15:07:01言われてみれば確かに似てますね。見てみることにします
>>543
それは分かってるのですが、OOPの方が綺麗に纏まりますし
C++は使ってはダメなのでどうにかできないかと思って・・・
とりあえずFILE周りを参考にやってみたいと思います。ありがとうございました。
0545デフォルトの名無しさん
2006/05/27(土) 15:34:37(ちゃんと動くか確認してないから間違ってるかも)
int func(void)は最終的には0を必ず返すとして
while(x=func()){...
while((x=func())!=0){...
while(x=func(),x){...
#define While(x) while((x)!=0)
警告は無視
警告を無効に
0546デフォルトの名無しさん
2006/05/27(土) 15:35:56一番上以外を選ぶ理由があるなら聞いてみたい
0547デフォルトの名無しさん
2006/05/27(土) 15:38:35下の二つは今までお目にかかったことない
0548デフォルトの名無しさん
2006/05/27(土) 15:48:323,4は大体デスマ系でよくみるね(1000時間ぐらいのデスマ)
0549デフォルトの名無しさん
2006/05/27(土) 15:54:57でも糞コンパイラが=と==間違ってない?とか警告出して来てうざいので。
コンパイラに文句を言いながら2だな。
0550デフォルトの名無しさん
2006/05/27(土) 16:13:150551デフォルトの名無しさん
2006/05/27(土) 17:16:44x=func();
if(!x) break;
}
0552デフォルトの名無しさん
2006/05/27(土) 17:26:230553デフォルトの名無しさん
2006/05/27(土) 17:27:590554デフォルトの名無しさん
2006/05/27(土) 17:39:050555デフォルトの名無しさん
NGNG0556デフォルトの名無しさん
2006/05/27(土) 18:45:43ANSI-C
0557デフォルトの名無しさん
2006/05/27(土) 18:48:580558デフォルトの名無しさん
2006/05/27(土) 18:54:39[1] 授業単元:訓練校のCの基礎
[2] 問題文(含コード&リンク):
char data[3][11]={{"□□□□□"},
{"□□□□□"},
{"□□□□□"}};
この二次元配列のの真ん中(2行目の横から3つ)の
「□」に「人」を代入する方法を教えて欲しいです。お願いします。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:ボーランド6.0
[3.3] 言語:たぶんC
0559デフォルトの名無しさん
2006/05/27(土) 18:55:55批判するなら代案を出せ
批判するだけして代案出さないとか弱小野党と一緒だな
0560デフォルトの名無しさん
2006/05/27(土) 19:10:390561デフォルトの名無しさん
NGNG0562デフォルトの名無しさん
2006/05/27(土) 20:51:270563デフォルトの名無しさん
2006/05/27(土) 21:38:45data[1][4] = "囚"
0564デフォルトの名無しさん
2006/05/27(土) 21:47:510565デフォルトの名無しさん
2006/05/27(土) 21:50:51以下のように書いたのですが、10^5以上だとセグメンテーションエラーです、
とでます。10^7まで求められるようにするにはどうすればいいか教えてください。
javaで同じように書くと求まるんですが、、、
コンパイラーはgccです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1951.txt
0566デフォルトの名無しさん
NGNGintじゃなくてcharの配列にしてみたら?
0567デフォルトの名無しさん
2006/05/27(土) 21:58:58× for(j= i; i*j<N; j++) a[i*j]= 0;
○ for(j= 2; i*j<N; j++) a[i*j]= 0;
まぁ出来れば乗算じゃなくて加算で書いてほしいとこだけど。
あとintよりもcharの配列にするかbit単位に埋め込んだほうが良いと思う。
0568デフォルトの名無しさん
2006/05/27(土) 22:04:50お答え、ありがとうございます。
charの配列にするということでやってみます。
0569デフォルトの名無しさん
2006/05/27(土) 22:07:00あと最後のカウント用のループでi<=Nとなってるけどi<Nの間違い。
0570デフォルトの名無しさん
2006/05/27(土) 23:18:01>>563
ありがとうございます。
563のほうはエラー吐きました。
memcpyをつかうと埋め込むことが出来ました。
0571あぼーん
NGNG0572デフォルトの名無しさん
2006/05/27(土) 23:28:570573デフォルトの名無しさん
2006/05/28(日) 00:01:36mallocしたらfreeしようぜ。
0574デフォルトの名無しさん
2006/05/28(日) 01:13:472000円はらいました。
よくわかりません。
でもすこしわかります。
ちょっとなら。
0575デフォルトの名無しさん
2006/05/28(日) 01:18:55お前それ、詐欺チョン言い訳と一緒だろ
0576デフォルトの名無しさん
2006/05/28(日) 09:47:33This file provides an example of how to use iostreams to perform sequential file I/O. Compile and run the code.
It is best to use the Win32 Console template in Visual C++ Express to create the project for running this program--there is no GUI associated with this code; only cin, cout, cerr, and a file are utilized to perform I/O.
After analyzing the code, and understanding how iostream file I/O is done, modify your Hangman game as follows.
Use a file called
0577デフォルトの名無しさん
2006/05/28(日) 09:59:260578デフォルトの名無しさん
2006/05/28(日) 10:49:41#include <stdio.h>
#include <string.h>
#include
0579デフォルトの名無しさん
2006/05/28(日) 10:56:45#include <stdio.h>
#include <string.h>
#include "stdafx.h"
int main(void)
{
char string[] = "abc,def,ghi,jkl";
char delimiter[] = ",";
char *token;
token = strtok( string, delimiter );
while( token != NULL ){
printf( "%s\n", token );
token = strtok( NULL, delimiter );
}
return 0;
}
文字列を分離するプログラムなんですが、
ビルドすると「error C3861: 'strtok': 識別子が見つかりませんでした」が出てきます。
何が原因なんでしょうか?
ちなみに、VisualStudio2005を使ってます。
0580デフォルトの名無しさん
2006/05/28(日) 11:11:26#include <string.h>
はstdafx.hに書く
それが嫌ならプリコンパイルドヘッダは無効にする
0581デフォルトの名無しさん
2006/05/28(日) 11:34:14動きました。
ありがとうございました。
0582デフォルトの名無しさん
2006/05/28(日) 12:36:14「error LNK2019: 未解決の外部シンボル __imp__strtok が関数 _WinMain@16 で参照されました。」
が出てきます。
#include <string.h> はちゃんとつけてあります。
0583デフォルトの名無しさん
2006/05/28(日) 13:19:54そういうことはVisual C++かなにかお前が使っているコンパイラのスレで聞いたほうが適切な回答が来やすい。
0584デフォルトの名無しさん
2006/05/29(月) 16:07:15再入力を繰り返すプログラムを作成せよ。
(ヒント:無限ループとbreak文を使用する)
実行例 1回目点数入力:30□
不合格です。再試を受験してください。
2回目点数入力:70□
合格です。
□はエンターキーを示す
0585デフォルトの名無しさん
2006/05/29(月) 16:31:25│ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ
↓
0586デフォルトの名無しさん
2006/05/29(月) 16:56:26└┘
おらっしゃあぁぁ!!!
∩∧ ∧
ヽ( ゚Д゚)
\⊂\
O-、 )〜
∪
0587デフォルトの名無しさん
2006/05/29(月) 17:56:15int main(){int input,i=0;while(1){puts("('A`)ノ");scanf("%d",&input);if((0<=input)||(input<=(3*20-1)))puts("不合格");
else if(((6*10)<=input)||(input<=(10*10)))puts("合格");break;else puts("ERROR");}return 0;}
0588デフォルトの名無しさん
2006/05/29(月) 18:01:15動作例を見ると、入力する数字は全角になっているけど大丈夫?
0589デフォルトの名無しさん
2006/05/29(月) 20:56:50スレ違いには「スレ違い」とだけレスしなさい。
0590デフォルトの名無しさん
2006/05/29(月) 21:03:060591デフォルトの名無しさん
2006/05/29(月) 22:55:380592デフォルトの名無しさん
NGNG0593デフォルトの名無しさん
2006/05/29(月) 23:12:53printf系(特にfprintf)の戻り値もチェックするべきなのでしょうか?
0594デフォルトの名無しさん
NGNG現場の空気で、チェックしたりしなかったり。
0595デフォルトの名無しさん
2006/05/29(月) 23:48:24ファイルに出力する場合などはチェックするべきではないかと。
#まぁ、業務でもなければ省略することもあるが。
0596デフォルトの名無しさん
2006/05/30(火) 00:05:50第2は文字列を指してるんだがリテラルは書いてない。
これが、strstrがNULL戻すので困ってるんです。
Mysqlのテーブルに検索したい文字列を入れといて
つぎつぎに取得していって(その取得した文字列へのポインタが第2引数)、
つぎつぎに第1引数の文字列を strstrするというのが目的です。
char*じゃだめなんでしょうか?
プログラム中に
0597デフォルトの名無しさん
2006/05/30(火) 00:07:32そうなら const char*じゃなくて char*で よいような
strstrみたいな関数ありますか?
0598デフォルトの名無しさん
2006/05/30(火) 00:07:42日本語でおk
お前は自分の書いた文章を自分で読んでみろ
0599デフォルトの名無しさん
2006/05/30(火) 00:09:470600デフォルトの名無しさん
2006/05/30(火) 00:28:430601デフォルトの名無しさん
2006/05/30(火) 02:18:430602デフォルトの名無しさん
2006/05/30(火) 15:10:310603デフォルトの名無しさん
NGNG0604デフォルトの名無しさん
2006/05/30(火) 15:17:10エラーが起きない(≒ファイル終端に達しない、入力を閉じられない)前提がない限りダメ。
0605デフォルトの名無しさん
2006/05/30(火) 15:37:11レスありがとうございます。それはcharの符号の有無が処理系定義だからでしょうか?
それと質問ばかりですが、全ビットが1のビット列を得るための
確実な方法はあるのでしょうか?
0606デフォルトの名無しさん
2006/05/30(火) 15:38:33~0
0607デフォルトの名無しさん
2006/05/30(火) 15:43:12文字 0xff を受け取ったとき、char に突っ込むと
EOF と区別が付かなくなる。
0608デフォルトの名無しさん
2006/05/30(火) 15:50:44やはりそれでよかったのですか。
符号の表現方法として、1の補数、2の補数、符号と絶対値の3通りがあるので
どれかで破綻がでるのではないかと思っていました。
>>607
なるほど・・・それではなるべくint等で受け取るようにしたいと思います。
わざわざ回答してくださってありがとうございました。
0609デフォルトの名無しさん
2006/05/30(火) 23:31:35下の様にswitchのネストでオプションの処理をするのを考えてみたんですが
こういう場合に決まったやり方のような物はあるのでしょうか?
switch (argv[i][0])
{
case '-':
switch (argv[i][1])
{
case 'h':
略}
break;
default:
(オプションじゃ無いときの処理)
break;
}
0610デフォルトの名無しさん
2006/05/30(火) 23:31:52で作成したいのですがコレでは無理ですかね・・?
無理やり繋ぎ合わせた感じなのですが・・詳しいかたよろしくお願いします
0611デフォルトの名無しさん
2006/05/30(火) 23:43:590612デフォルトの名無しさん
2006/05/30(火) 23:57:12すみません・・
0613デフォルトの名無しさん
2006/05/31(水) 00:08:15getoptのある処理系ならそれを使う。
無ければ…個人的にはswitchの中にswitchっていやだから、
-見つけたら-以降を解析する関数に飛ばすとか。
0614デフォルトの名無しさん
NGNGif (strcmp(argv[i], "-h") == 0) {
...
}
else if (strcmp(argv[i], "-o") == 0) {
...
}
...
else {
..
}
0615デフォルトの名無しさん
2006/05/31(水) 00:16:36オプション専用の関数作るってことですか?
すっきり纏まりそうでいいですね。その方向でやってみたいと思います。
>>614
それだとオプション追加とかは楽なんですが、見た目が何となく嫌なので・・・
0616デフォルトの名無しさん
2006/05/31(水) 01:40:49char *p =
0617デフォルトの名無しさん
2006/05/31(水) 01:41:46char *p = "Hello, World\n";
main(){
char *pp;
pp = p;
while(*p!='\n') {
printf(*p);
p++;
}
}
ポインタを用いて「Hello, World」と印字したいのですが、上手くいきません・・・
どこをどう変えれば正しく動くようになるのでしょうか?
(while文をどうすればいいのかよく分かりません)
0618617
2006/05/31(水) 01:50:290619デフォルトの名無しさん
2006/05/31(水) 01:54:10printfの引数はポインタなんで、printfの使い方がおかしい、printf("%s\n", p);だろ
という話は置いといて…一文字ずつ出したいのかな。
char *pp;
pp = p;
while (*pp != '\0') { /* '\n'まででもいいけど */
printf("%c", *pp);
pp++;
}
酔っ払って眠いから間違ってたらゴメン。
0620デフォルトの名無しさん
2006/05/31(水) 01:59:39printf(p);
でイナフだ。
0622デフォルトの名無しさん
2006/05/31(水) 04:19:11x=x0 , x1 , x2 , ・・・ , x40 , x41
y=y0 , y1 , y2 , ・・・ , y40 , y41
近似式 y=ax^3+bx^2+cx+d
上の関数とデータで非線形最小自乗法を用いて近似した式を求めよ。
すみませんがよろしくお願いします。
0623デフォルトの名無しさん
NGNG宿題丸投げならよそでやれ。
0624デフォルトの名無しさん
2006/05/31(水) 06:44:44何が分からないのかわからんのだが、
1/2 Σ[n=0->41] {Yn - (aXn^3 + bXn^2 + cXn + d)}^2を偏微分して正規方程式を作って(ここまでは手作業)
そこにデータをつっこんで行列の計算するだけじゃまいか?
0625デフォルトの名無しさん
2006/05/31(水) 11:09:07図形を交互に表示するにはどのようなプログラムを組めばよいですか?
0626デフォルトの名無しさん
2006/05/31(水) 11:11:400627デフォルトの名無しさん
2006/05/31(水) 11:12:41「画面クリア」という動作は環境に依存した動作になるため標準的な方法は存在しない。
0628デフォルトの名無しさん
2006/05/31(水) 11:22:01rewind()でおk
0629デフォルトの名無しさん
2006/05/31(水) 11:48:48ハァ?
>>625
該当環境スレか環境依存OKスレか初心者スレにでもどうぞ。
0630デフォルトの名無しさん
2006/05/31(水) 11:52:54rewind(stdin)で100%おk
0631デフォルトの名無しさん
2006/05/31(水) 11:55:000632デフォルトの名無しさん
2006/05/31(水) 12:03:140633デフォルトの名無しさん
2006/05/31(水) 12:09:34FA>>631でトグロ300%
0634デフォルトの名無しさん
2006/05/31(水) 12:59:270635デフォルトの名無しさん
2006/05/31(水) 13:09:410636デフォルトの名無しさん
2006/05/31(水) 13:14:150637デフォルトの名無しさん
2006/05/31(水) 13:20:380638デフォルトの名無しさん
2006/05/31(水) 13:36:50つーか、質問も理解しないで正しくもない知識を振り翳さないでくれ。
0639デフォルトの名無しさん
2006/05/31(水) 17:56:57初心者でもプログラミングがよくわかる参考書あるいはサイトを
教えていただけないでしょうか?
ちなみに↓がうちの大学で使ってる資料です。
http://www.amazon.co.jp/exec/obidos/ASIN/4274064409/qid=1149065622/sr=1-14/ref=sr_1_2_14/250-5075856-7305831
正直めちゃくちゃ分かり難く教授以外、生徒皆認めてません。
0640デフォルトの名無しさん
2006/05/31(水) 18:06:14移動します。
0641デフォルトの名無しさん
2006/05/31(水) 19:43:330642デフォルトの名無しさん
2006/05/31(水) 20:25:02C99以前はできない。C99はできる。
0643デフォルトの名無しさん
2006/06/01(木) 15:08:28ADDRESS 00 01 02 03 04 05 06
00000000 40 00 40 00 07 00 00
上のはヘキサエディタで開いた一部なんですけど
0x04-0x05にある07 00 を 整数として変数に格納するのに
//fopen(rbモード) fcloseは省略
int buf;
fpos_t fpos = 4;
fsetpos(fp, &fpos);
fread(&buf, 2, 1, fp);
printf("変数buf -> %d", buf);
としてもbufに10進数で7と入らずprintf文でなにやら分からない数字が出るんですが
間違っているところを教えてもらえないでしょうか
0644デフォルトの名無しさん
2006/06/01(木) 15:14:01そういう数値で位置指定をしたいならfseekの方がよい。
また、お前のところのintは2バイトか?最近は4バイトであることの方が多いぞ。
0645デフォルトの名無しさん
2006/06/01(木) 15:15:220646デフォルトの名無しさん
2006/06/01(木) 15:20:00buf = 0;
fread(&buf, 2, 1, fp);
とすれば良いはず(初期化しとかないと下位2byteにゴミが残る)
0647デフォルトの名無しさん
2006/06/01(木) 15:28:52レスどもです
説明不足で申し訳ないです.ファイルの中身が
07 00 BE CC C0 CC C5 DB 36
といった感じで
後続文字byte数 文字列
みたいな形式になってるのでsizeof(int)で4byte1ブロックだと07 00 BE CCがbufに入ってしまいえらいことになるのです OTZ
もちろんsizeof(int)は4でした.
リトルエンディアンでfreadはたしか大丈夫だったと思います
そして.buf = 0;で初期化すると正しく7と表示されました.
ありがとうございます!
あとスレ違いになるかもしれないんですけどそのゴミとはなんでつくんでしょう?
0648デフォルトの名無しさん
NGNG0649デフォルトの名無しさん
2006/06/01(木) 16:03:021バイトづつ読めばいいのに。
buf = getc(fp) & 0xff;
buf <<= 8;
buf |= getc(fp) & 0xff;
0650デフォルトの名無しさん
2006/06/01(木) 16:33:06fread 前に初期化していないと:
┏━┯━┯━┯━┓
buf ┃ワケの解らない値.┃
┗━━━━━━━┛
fread 後の状態:
┏━┯━┯━┯━┓
buf ┃07│00│ない値.┃
┗━┷━┷━━━┛
<------>
ここしか書き換えられない
0651デフォルトの名無しさん
2006/06/01(木) 16:38:51ビットフィールドを下位ビットから設定していく方法は無いのでしょうか?
0652デフォルトの名無しさん
2006/06/01(木) 16:55:18& すればいいじゃないか。
0653デフォルトの名無しさん
2006/06/01(木) 17:42:24なるほど
箱を用意しても掃除してからじゃないとだめということですか〜
AAまで作って説明してくれてありがとうございます
0654デフォルトの名無しさん
2006/06/01(木) 17:48:48環境依存。
0655デフォルトの名無しさん
2006/06/01(木) 17:58:04&でもいいのですが、もうちょっと楽に取り出せないかと思って・・・
>>654
やっぱりそうですか。わざわざありがとうございます
0656デフォルトの名無しさん
2006/06/01(木) 18:03:26マクロか関数を作れば簡単だぞ。
0657デフォルトの名無しさん
2006/06/01(木) 18:33:59& 使えよ。
#define bit(x,y) ((x) & (1 << (y)))
0658デフォルトの名無しさん
2006/06/01(木) 18:43:00#define BIT_TEST(x, y) (((x) >> (y)) & 1)
の方が 0 or 1 になって良さげ。
0659デフォルトの名無しさん
2006/06/06(火) 00:32:490660デフォルトの名無しさん
2006/06/06(火) 00:51:010661デフォルトの名無しさん
2006/06/06(火) 01:04:170662デフォルトの名無しさん
2006/06/06(火) 01:09:51MMOのツールか何かかい?
0663デフォルトの名無しさん
2006/06/06(火) 01:11:33float a = 2.5
と、されているときのメモリの中でこの値がどのように表現されているかが見たいんです。
0664デフォルトの名無しさん
NGNGfs.a=2.5;printf("%X",fs.b);
0665デフォルトの名無しさん
2006/06/06(火) 02:55:14intが32bitであることより
nullポインタの全bitが0であることより
期待しても良いのではないかと思う。
もちろん、標準Cで規定されているわけではないが。
0666デフォルトの名無しさん
2006/06/06(火) 03:40:27どれも期待したところで保証がないことに変わりは無い
0667デフォルトの名無しさん
2006/06/06(火) 04:20:42何故short?
>>663
float a = 2.5;
unsigned char * p = (unsigned char *) & a;
for (int ic = 0; ic < sizeof(a); ++ic) printf("%02x ", p[ic]);
0668ビル・ジョブス
2006/06/06(火) 15:30:380669デフォルトの名無しさん
2006/06/06(火) 15:36:490670デフォルトの名無しさん
2006/06/06(火) 16:15:410671デフォルトの名無しさん
2006/06/06(火) 17:28:270672デフォルトの名無しさん
2006/06/06(火) 17:32:36・・・あ、板まちがえた?
0673デフォルトの名無しさん
NGNGマ板へ。
【鬱病】 壊れたプログラマー 4人目 【爆発】
http://pc8.2ch.net/test/read.cgi/prog/1148314547/
0674デフォルトの名無しさん
2006/06/06(火) 19:43:34この場合エンディアンがどうなっていようともとにかくメモリ上にどう
入っているのかをそのまま見たいということではないのか?
まあどうでもいいか。
0675デフォルトの名無しさん
2006/06/06(火) 20:52:40でも結局、複数 bytes のデータを見るときはエンディアンを考慮しなきゃ
いけないんじゃないか?
0676デフォルトの名無しさん
2006/06/06(火) 21:11:260677デフォルトの名無しさん
2006/06/06(火) 21:14:160678デフォルトの名無しさん
2006/06/06(火) 21:29:00のとき、
p++; p++; p++; と p += 3; は同じ意味?
0679デフォルトの名無しさん
2006/06/06(火) 21:31:260680デフォルトの名無しさん
2006/06/06(火) 21:32:110681デフォルトの名無しさん
2006/06/06(火) 21:39:05ちょwwwwwおまwwwwwwwwwwww
0682デフォルトの名無しさん
2006/06/06(火) 21:42:21↓
尻の穴→ *(p+3)
↑↑
口(よだれ) 耳
0683デフォルトの名無しさん
2006/06/06(火) 21:53:20sizeof(float) == 1 ?
そういうシステムがあると聞いたことはあるが。
0684デフォルトの名無しさん
2006/06/08(木) 02:35:260685デフォルトの名無しさん
2006/06/08(木) 14:09:35検索したいのですが、fopenで検索対象ファイルを開いて、
配列に文字列を読み込んで、strstrで検索するのがよいでしょうか。
それとももっとよい方法があるでしょうか。
0686デフォルトの名無しさん
2006/06/08(木) 14:20:18Unix系環境ならsystem("grep keyWord file")の戻り値で判断。
検索することに意義があるのでなければ、テストすべきロジックが増えるよりもよい。
0687デフォルトの名無しさん
2006/06/08(木) 14:20:580688デフォルトの名無しさん
2006/06/08(木) 14:31:19なるほど。systemでgrep呼び出して使う手がありましたね。
それを試してみます。
0689デフォルトの名無しさん
2006/06/08(木) 15:34:590690デフォルトの名無しさん
2006/06/08(木) 19:35:56問題文:
ttp://pc8.2ch.net/test/read.cgi/tech/1147908265/152
の貯金プログラムを拡張して、額の表示の際に3桁ごとにコンマを入れる形式をとるようにせよ.下記例のようにどのような桁数でも桁数に応じてきちんと表示できるようにすること.
12円⇒12円
789012円⇒789,012円
1000001円⇒1,000,001円
1234567890円⇒1,234,567,890円
環境
OS: (Windows
コンパイラ名とバージョン: Visual Studio.NET2003
言語: C
その他の制限: まだ初期で、if,for,whileまで習いました。
どうか、よろしくお願いします。
0691デフォルトの名無しさん
2006/06/08(木) 19:41:10せめて柴田本を後ろまで読んだほうがいい
0692デフォルトの名無しさん
2006/06/08(木) 19:59:49激しくスレ違い
0693デフォルトの名無しさん
2006/06/08(木) 20:14:11grepでも?
0694デフォルトの名無しさん
2006/06/08(木) 20:22:500695デフォルトの名無しさん
2006/06/08(木) 23:29:33cgiの場合、そもそも/bin/shを開放していないかもしれないという点でsystem()が使えないかもしれない。
しかし、その辺りはWebProg板の領分になりそうなので詳細は割愛。
0696デフォルトの名無しさん
2006/06/08(木) 23:57:06例えば
i = a*b +1;
と
i = (a*b) + 1;
で実行速度違ったりする?
0697デフォルトの名無しさん
2006/06/09(金) 00:06:010698デフォルトの名無しさん
2006/06/09(金) 00:06:09できたプログラムの実行速度に変わりは生じないだろう。
コンパイル速度の変化は全く無いわけではないが、完全に無視できる。
気にせずに括弧をつけたければつけなさい。
0699デフォルトの名無しさん
2006/06/09(金) 00:11:38それで実行速度が変わるようなコンパイラがあったらお目に掛かりたいよ。
0700デフォルトの名無しさん
2006/06/09(金) 00:38:590701デフォルトの名無しさん
2006/06/09(金) 00:56:43a[0][0][0][0][0][0] = 1;
0702デフォルトの名無しさん
2006/06/09(金) 00:59:300703デフォルトの名無しさん
2006/06/09(金) 02:13:22C言語ですが、forkしたあとwaitで待つプログラムをよく作ります。
これはビジーウエイトなのでしょうか??
0704デフォルトの名無しさん
2006/06/09(金) 02:15:230705デフォルトの名無しさん
2006/06/09(金) 06:49:440706デフォルトの名無しさん
2006/06/09(金) 14:12:270707デフォルトの名無しさん
2006/06/09(金) 14:15:240708デフォルトの名無しさん
2006/06/09(金) 14:21:56ただ感じるままに書くべし、読むべし、調べるべし
0709デフォルトの名無しさん
2006/06/09(金) 14:55:07これはどのような意味になるのでしょうか?
0710デフォルトの名無しさん
2006/06/09(金) 15:00:58bとcが等しければ1が、bとcが等しくなければ0がaに代入される。
0711デフォルトの名無しさん
2006/06/09(金) 15:03:430712デフォルトの名無しさん
2006/06/09(金) 15:46:01ポインタ(というかアドレス)でしかメモリや分岐先を指定できない言語を使ってみれば嫌でも覚える。
つまりはマクロなしアセンブラ、機械語。
0713デフォルトの名無しさん
2006/06/09(金) 21:04:17ずっと気になって仕方がありません。
0714デフォルトの名無しさん
2006/06/09(金) 21:06:050715デフォルトの名無しさん
2006/06/09(金) 21:09:220716デフォルトの名無しさん
2006/06/09(金) 21:55:50a = (char*)malloc(sizeof(char));
malloc関数を使うとaには桁数の多いアドレスが入るんですが、
malloc関数を使わなくてもaには1というアドレスが入ってますよね?
どういう利点があるのでしょうか?・・・
0717デフォルトの名無しさん
2006/06/09(金) 22:08:560718デフォルトの名無しさん
2006/06/09(金) 22:17:140719デフォルトの名無しさん
2006/06/09(金) 22:25:42???
0720デフォルトの名無しさん
2006/06/09(金) 22:26:13経験かな
データ構造あたりを勉強するといいかも
お勧めとかないけどamazonあたりで”データ構造とアルゴリズム”か”アルゴリズムとデータ構造”で
0721デフォルトの名無しさん
2006/06/09(金) 22:26:27そんな初期化はANSIで定義されてないと思うよ。
0722 ◆GREAT3AJss
2006/06/09(金) 22:29:24VC++7.1
foo.txt テキストファイル
foo2.exe 標準入力を受け取るプログラム
で以下のようにsystem()関数をコールしましたが、
system("type foo.txt | foo2.exe");
foo2.exeが戻り値で0以外の値を返しているのにsystem()関数が0を返します。
パイプでコールした場合はどうやって戻り値を取ればいいのでしょうか?
0723デフォルトの名無しさん
2006/06/09(金) 22:31:20入ってることはある。
mallocせずに、*a にアクセスしようとすると、エラーになる。だって確保されてないんだし。
文字列とかあらかじめどれくらいメモリ確保すればいいかわからん場合は
ポインタ型で定義して、mallocして、プログラム内のどこかで必ずfreeする。
これ、基本。
0724デフォルトの名無しさん
2006/06/09(金) 23:13:13system()関数の中の仕様についてはスレ違い。
OS依存のプログラムを書いているのなら、OS依存の方法で取得するのが無難じゃない?
0725デフォルトの名無しさん
2006/06/09(金) 23:25:24C++でGUIって扱える?
0726デフォルトの名無しさん
2006/06/09(金) 23:27:31Windows環境なら、GUIプログラムは作れる。
0727デフォルトの名無しさん
2006/06/09(金) 23:32:25扱えるも扱えないも、C・C++は言語自体の仕様として入出力を規定して無いだろ。
環境によってはライブラリが提供されてるかも、ってだけ。
0728デフォルトの名無しさん
2006/06/09(金) 23:43:36お前がゼロからライブラリを書けばお前の好きなように出来る
0729722 ◆GREAT3AJss
2006/06/10(土) 00:05:13すみません。
system("foo2.exe < foo.txt")
でやりたいことは解決しました。
お騒がせしました。
0730デフォルトの名無しさん
2006/06/10(土) 00:45:450731デフォルトの名無しさん
2006/06/12(月) 10:38:08参考というよりは、そのまま使っています。
VC++.net
gcc version 3.4.4 20050721 (Red Hat 3.4.4-2)
では問題なくコンパイル&実行できたのですが、
gcc version 3.2.3 20030502 (Red Hat Linux 3.2.3-53)
では、コンパイルできましたが、以下のように呼び出すとSegmentation faultします。
error("%s\n", "エラーしました");
でも、以下のようにすると正常動作しました。
error("エラーしました\n");
いろいと試した結果、% があるとSegmentation faultするようです。
何か対策方法をご存知の方おられましたら、アドバイスよろしく御願いします。
#include <stdio.h>
#include <stdarg.h>
void error(char *fmt, ...)
{
va_list argp;
fprintf(stderr, "error: ");
va_start(argp, fmt);
vfprintf(stderr, fmt, argp);
va_end(argp);
fprintf(stderr, "\n");
}
0732デフォルトの名無しさん
2006/06/12(月) 11:03:20直接stderrに書き込まずに、vsprintfで一端バッファに書き込んでから
それをまとめてvfprintfで書き込んでみては如何でしょう
0733デフォルトの名無しさん
2006/06/12(月) 11:11:120734デフォルトの名無しさん
2006/06/12(月) 12:49:23int main (int argc);
int main (int argc, char **argv);
int main (int argc, char **argv, char **envp);
0735デフォルトの名無しさん
2006/06/12(月) 13:55:19最後はANSI Cで受け付けねばならないと明示されている形式ではないな。
0736デフォルトの名無しさん
2006/06/12(月) 15:04:56どれも受け付けねばならないとは書いてないが...
各処理系がどのように定義するべきかとして以下が規定されてるだけ.
freestanding 環境の場合:
処理系定義
host 環境の場合:
int main(void)
または
int main(int argc, char *argv[])
または
int main(int argc, char *argv[]) と等価な物
または
処理系定義の物
int main(int argc) や int main (int argc, char **argv, char **envp)
は処理系定義の物として無問題.
つか, 処理系定義であればなんでもありあり.
0737デフォルトの名無しさん
2006/06/12(月) 15:06:380738デフォルトの名無しさん
2006/06/12(月) 15:11:58それをゆうだったら
int main (int argc, char **argv, char **envp)
は, Unix 互換環境ではある意味, でふぁくとすたんだ〜ど.
0739デフォルトの名無しさん
2006/06/12(月) 18:06:48ただし、次の仕様に基づいた関数を作成するものとし、main関数とfct関数は一つのファイル上に作成するものとする。
階乗とは?: 1からnまでの連続する自然数の積。n!で表される。(0の階乗は1)
計算式 : n! = n*(n-1)* ... *2*1
例)5! = 5*4*3*2*1
プロトタイプ宣言: int fct(int n);
すまん、わけわからん
誰かお助け…
0740デフォルトの名無しさん
2006/06/12(月) 18:07:54激しくスレ違い
0741デフォルトの名無しさん
2006/06/13(火) 01:50:270742デフォルトの名無しさん
2006/06/13(火) 02:02:11とスタックの無駄遣いをしてみる。
0743デフォルトの名無しさん
2006/06/13(火) 02:16:43int tmp=1;
while(n != 0)
{
tmp*=n;
n--;
}
0744デフォルトの名無しさん
2006/06/13(火) 07:46:31int fact(int n){
return tgamma(n+1);
}
0745デフォルトの名無しさん
2006/06/13(火) 08:55:41「宿題」としての点数は低いね(w
0746デフォルトの名無しさん
2006/06/13(火) 19:06:29それをmain関数に返すにはどのように書けばいいのでしょうか?
0747デフォルトの名無しさん
2006/06/13(火) 19:43:26「char」型に「文字列」は入りません。
# って言うか、マルナゲ反対!
0748デフォルトの名無しさん
2006/06/13(火) 19:54:300749デフォルトの名無しさん
2006/06/13(火) 20:32:43まず自分の考えたとおりにやってみろ。
うまくいってもうまくいかなくても、とにかくやってみてからここへ来い。
0750デフォルトの名無しさん
2006/06/13(火) 20:34:39ポインタの配列を理解してないみたいだ・・・
0751デフォルトの名無しさん
2006/06/13(火) 20:47:01「ポインタの配列」と言うと別なものになっちゃうよ。
配列をmain関数で用意し、その配列のポインタ(先頭アドレス)
を自作関数に渡す。自作関数で、そのポインタにscanf等で入力すれば、
mainで用意した配列に文字列が入力されたような感じになる。
void input(char *);
main(){
char str[256];
input(str);/* この関数内で入力する */
/*以下略*/
return 0;
}
input関数の中身を自分で書けるかどうか検討してみて。
0752デフォルトの名無しさん
2006/06/13(火) 21:19:16結果から言いますと、配列の[]内の数字が小さくて、それでエラーが出てたんですが、
文法の方が悪いとばかり思ってエラーメッセージを読んでなくて行き詰まってました・・・
ホント、馬鹿ですよね・・・俺の3時間が・・・でも、もう二度とこんなヘマはしないと思います。
それとこのエラー、VS.NET2005ではプログラム動かした時に、エラーが出ましたが、
コマンドラインで動かした時はエラーは出ませんでした・・・
これで、気づいたんですけど・・・
0753デフォルトの名無しさん
2006/06/13(火) 22:07:45Swap関数で数値が入れ替わるのはポインタでiDat1とiDat2のアドレスが引数で指し示されているから
戻り値(代入?)みたいになってiDat1・2に入れ替えられたものが代入されて5と8が入れ替わると言う風に理解しました。
それでわからないのがSwap2関数ですが、これはiDat1とiDat2が引数に入れられても
Swap2に代入しただけでポインタで指し示されていないからSwap2関数の中で数字の入れ替えをしても、
iDat1、iDat2へ反映されておらず数字の入れ替えは起こらないと
理解すればいいのでしょうか。自分は戻り値という表現は正しくないと思います。
Swap1とSwap2の関数の違いが先生に聞いてもよくわからないんで
どなたか、この二つの関数で何が起こっているのか、わかりやすいアドバイスお願いします。
int iDat1=5,iDat2=8;
void Swap(int *p1,int *p2)
{
int iTemp;
iTemp=*p1;
*p1=*p2;
*p2=iTemp;
}
void Swap2(int a,int b)
{
int iTemp;
iTemp=a;
a=b;
b=iTemp;
}
0754デフォルトの名無しさん
2006/06/13(火) 22:15:29前者は「ポインタを渡すから、ポイント先のオブジェクトを入れ替えてね」とお願いしている。
後者は「値だけ渡すから、中で色々計算してね」とお願いしている。
つまり、後者の方は関数内のローカルな変数の値しかいじれない。
前者は、ポインタを元に、関数外部のオブジェクトにアクセス出来る。
0755デフォルトの名無しさん
2006/06/13(火) 22:28:38っていう情報を引数に与えているので、そこのメモリを直接いじれるんだけど、
Swap2(int a,int b) では、a = xx; b = xx っていう風に値をコピーしてから
a, b を弄っていることになるので、Swap2の呼び出し元では値の変更が得られないわけだ。
0756デフォルトの名無しさん
2006/06/13(火) 22:34:140757デフォルトの名無しさん
2006/06/13(火) 22:35:43char a[10]; /* 配列 */
char *a[10]; /* ポインタの配列 */
char (*a)[10]; /* 配列へのポインタ */
0758デフォルトの名無しさん
2006/06/13(火) 22:39:51肝心のところが抜けてる。
int main(void)
{
int iDat1=5,iDat2=8;
Swap(&iDat1, &iDat2);
Swap2(iDat1, iDat2);
}
これが無いと、答える側が困る。
&iDat1はiDat1が格納されているアドレス。
iDatはiDat1の値そのもの。
んで、これを踏まえた上で、関数を見てみよう。
void Swap(int *p1,int *p2)
この関数では、*p1がiDat1のエイリアスになる。
なんか、飽きたので、途中だが終了。
0759デフォルトの名無しさん
2006/06/13(火) 23:59:51>>754
>>755
>>758
前者のSwap1の*p1などがショートカットの役割をしてメモリにアクセスして、
後者はSwap2内だけでしか処理できないということですか。
>>756
えと、すいません。今度は初心者スレで聞いてみたいと思います。
>>757
ポインタと配列の関係は自分は習っていないようです。
(学校休んでいたのでやってないだけかもしれませんが。。。)
おいおい勉強していこうと思います。
沢山のアドバイスありがとうございました。
0761デフォルトの名無しさん
2006/06/14(水) 08:44:07a=5, b=8 (Swap1 が呼び出された)
iDat1=5, iDat2=8
a=8, b=5 (a と b の値が交換された)
iDat1=5, iDat2=8 (main に戻った、iDat1, iDat2 の値は変わっていない)
iDat1=5, iDat2=8
p1=↑ p2=↑ (Swap2 が呼び出された)
iDat1=8, iDat2=5
p1=↑ p2=↑ (*p1 と *p2 の値が交換された)
iDat1=8, iDat2=5 (main に戻った、iDat1, iDat2 の値が変わっている)
0762デフォルトの名無しさん
2006/06/14(水) 09:17:36Swap1 と Swap2 が逆じゃね?
0763デフォルトの名無しさん
2006/06/14(水) 09:47:420764デフォルトの名無しさん
2006/06/14(水) 10:04:31ここの連中は融通利かないんだからw
0765デフォルトの名無しさん
2006/06/14(水) 21:13:10>>760
えーと、少々混乱を招きました。なぜショートカットって言葉を使ったかと言いますと
>>758のエイリアスと言う用語がわからなかったので検索したところショートカットと言う解説が用語集にありました。
たしかにアドレスを通してiDatが書き換えられているので
ショートカットは正しくないかも・・・
>>761
>>762
>>763
なんというか、矢印で変数が示されているのでこの説明もわかりやすいと思います。
>>764
検索したら
http://pc8.2ch.net/test/read.cgi/tech/1149815331/l50
というスレを見つけました。ご迷惑かけます。
皆さんのおかげでポインタの特性が結構理解できたっぽいです。
0766デフォルトの名無しさん
2006/06/14(水) 22:55:42typedef struct st{
int num
}
ST a[3][3]
みたいな感じで
0767デフォルトの名無しさん
2006/06/14(水) 22:59:18できないわけがない。
0768デフォルトの名無しさん
2006/06/14(水) 23:00:110769デフォルトの名無しさん
2006/06/14(水) 23:05:550770デフォルトの名無しさん
2006/06/14(水) 23:10:040771デフォルトの名無しさん
2006/06/14(水) 23:12:430772デフォルトの名無しさん
2006/06/14(水) 23:16:57typedef struct a{
int b;
char c;
}A;
0773デフォルトの名無しさん
2006/06/14(水) 23:17:34それで
宣言時にchar型とint型を2次元で初期化したいんですが・・・
0774デフォルトの名無しさん
2006/06/14(水) 23:20:380775デフォルトの名無しさん
2006/06/14(水) 23:22:43{数字,"字"},{数字,"字"},{数字,"字"},
}
0776デフォルトの名無しさん
2006/06/14(水) 23:23:37これなら上手くいくんですけど・・・
0777デフォルトの名無しさん
2006/06/14(水) 23:24:13そのまま二次元に拡張すりゃいいだろ
A[3][3]={
{数字,"字"},{数字,"字"},{数字,"字"},
{数字,"字"},{数字,"字"},{数字,"字"},
{数字,"字"},{数字,"字"},{数字,"字"}
}
0778デフォルトの名無しさん
2006/06/14(水) 23:24:39ところでアラインメントに気をつけて、パディングを入れましょう。
sizeof(struct a)の結果は5になったり8になったりするから。
(まあ普通は8でしょうが)
0779デフォルトの名無しさん
2006/06/14(水) 23:24:550780デフォルトの名無しさん
2006/06/14(水) 23:25:22return 1;
}
のconstってどういう効果があるの?
0781デフォルトの名無しさん
2006/06/14(水) 23:26:45それでやると
初期化子が多すぎる
ってエラーが出るんですよ・・・
もうちょっと見直してみます
0782デフォルトの名無しさん
2006/06/14(水) 23:28:18ごめんコピペミスった
A[3][3]={
{ {数字,"字"},{数字,"字"},{数字,"字"} },
{ {数字,"字"},{数字,"字"},{数字,"字"} },
{ {数字,"字"},{数字,"字"},{数字,"字"} }
}
ね
0783デフォルトの名無しさん
2006/06/14(水) 23:29:37a A[2][3]={{{'A',1},{'B',2},{'C',3}},{{'X',4},{'Y',5},{'Z',6}}};
0784783
2006/06/14(水) 23:30:50しかも783だとコンパイル通っちゃうからタチが悪いw
0785デフォルトの名無しさん
2006/06/14(水) 23:31:12わざとやってんのか?ってくらい無能だなお前ら
0786デフォルトの名無しさん
2006/06/14(水) 23:32:01できました!
さっきやったと思ってたけど多分打ち間違えてたんですね・・・
ありがとうございます
0787デフォルトの名無しさん
2006/06/14(水) 23:36:52""で字を囲むと文字じゃなくてポインタが渡されちゃうと思うんだけど…
0788780
2006/06/14(水) 23:38:070789デフォルトの名無しさん
2006/06/14(水) 23:43:290790デフォルトの名無しさん
2006/06/14(水) 23:46:120791デフォルトの名無しさん
2006/06/14(水) 23:48:37書いたヤシに聞けば?
0792デフォルトの名無しさん
2006/06/14(水) 23:52:340793780
2006/06/14(水) 23:58:56int a=10;
const int* fun(){
return &a;
}
int main(){
*(fun())=11;
cout<<a<<endl;
}
だとコンパイルできなくて、
int a=10;
int* fun(){
return &a;
}
int main(){
*(fun())=11;
cout<<a<<endl;
}
だとコンパイルできたから、左辺値にならないであってるような気がする。
で、>>780の場合はもともと返す値が左辺値にはなり得ないから意味のないconst。
ということで合ってるかな?
0794デフォルトの名無しさん
2006/06/15(木) 00:08:29書かないのと同じように扱われる。
つまり書く意味がない。
0795デフォルトの名無しさん
2006/06/15(木) 00:48:23整合性を取るために、左辺値になって欲しくない戻り値は全てconst指定にしてるのかもしれない。
0796デフォルトの名無しさん
2006/06/15(木) 06:00:33>>778
その例でsizeof(struct a)が5や8かどうかは環境依存。
もしかしたら3かも4かもしれない。
で、何のためにアライメントに気をつけるのかの説明がないが、判っているのかな?
普通は、意識する必要がないわけだが。
0797デフォルトの名無しさん
2006/06/15(木) 08:24:45ああ、そういえばintが2バイトのケースもあるわな。失念していた。
ただsizeof(struct a)が5や8になる、というのは例示にすぎないから、
別に必ずそうなるとか言いたかったわけじゃないよ。
>何のためにアライメントに気をつけるのか
アラインメントの設定が違う環境にも対応できるように、だな。
確かに、環境に変化無ければ、
>普通は、意識する必要がないわけだが
という指摘は正しいな。
0798デフォルトの名無しさん
2006/06/15(木) 08:46:03つーか、どの環境だろうと、sizeof(struct a)に依存したコードを書かなきゃ大丈夫だろ。
バイナリイメージのままファイルに書くとか通信するとかは論外だけど。
0799デフォルトの名無しさん
2006/06/15(木) 08:46:24いいから初心者スレへ逝け。
>アラインメントの設定が違う環境にも対応できるように、だな。
ワード境界にオブジェクトを配置できない or 効率が落ちる
システムの為だ。だいいち、エンディアンや内部表現が
違うシステム間でどう対応しようってんだ。
>確かに、環境に変化無ければ
普通は処理系が面倒を見るからだ。
そうしない処理系があるというなら例示してくれ。
0800デフォルトの名無しさん
2006/06/15(木) 16:52:15void test(int *);
int main(void)
{
int a[3][3];
test(a);
}
void test(int *x)
{
int i;
for (i = 0; i<9; i++)
*(x+i) = 1;
}
上のコードはmainで宣言した2次元配列を他関数にアドレスを送って代入(?)していますが、
test関数で、
for(i =0;i<3;i++) {
for(j=0;j<3;j++) {
x[i][j]=1;
}
}
のように、ポインタを使わずに2次元配列に代入するにはどのようにすればいいのでしょうか?
0801デフォルトの名無しさん
2006/06/15(木) 17:07:46void test(int (x)[3][3]) { int i, j; (略) x[i][j] = 1; }
int main(void)
{
int a[3][3];
test(a);
}
# 間違いしたくないから struct のメンバに配列置いて、struct の ptr 渡ししちゃうけど…
0802800
2006/06/15(木) 17:20:03なるほど、test関数の引数も配列にすれば良かったんですか〜
知りませんでした・・・・ありがとうございますm(_ _)m
自分も扱う変数が多い時は良くサブルーチンへはstructでまとめてアドレスを送ってしまっているのですが、
こういうのって別に問題はないんですか?
あまりやらない方が良いとか、処理が遅くなるとか、メモリ余計に使うとか・・・
0803デフォルトの名無しさん
2006/06/15(木) 17:22:59例の規則によって、仮引数ではint x[3][3]とint x[][3]と同じ。
int x[][3]はint (*x)[3]と同じ。
typedefを使うとこうなる。
typedef int int_array3[3];
void test(int_array3 *x); /* 或いはvoid test(int_array3 x[]); */
int main(void)
{
int_array3 a[3];
test(a);
}
0804800
2006/06/15(木) 17:27:40例の規則分をぶっとばしてた orz
>>802
struct 自体に意味を持たせたい場合なら、2次元配列1つであっても
あえて struct 化することはあるね。
3x3 マトリックス (データ的には [3][3]配列) と その操作関数群 とかさ。
0806デフォルトの名無しさん
2006/06/16(金) 09:20:54for (ic = 0; ic < 100; ic++)
if (ic == b) break;
a = ic + 1;
これを実行すると、forループがa = ic + 1まで含まれてしまいます。
for文は次の1文しか実行しないと習ったのですが、
if文があるので、a = ic + 1;までが1文として扱われるという解釈でよろしいでしょうか?
for (ic = 0; ic < 100; ic++){
if (ic == b) break;
}
a = ic + 1;
↑
こういう動きを期待してたのですが・・・
0807デフォルトの名無しさん
2006/06/16(金) 09:28:38> これを実行すると、forループがa = ic + 1まで含まれてしまいます。
この結論に至った経緯は?
※ b = 100 のとき a が 101 になるから… とか言うなよ?
0808デフォルトの名無しさん
2006/06/16(金) 09:32:37for文内で評価する式が一つなら
fo(;;) 式
for(;;)
式
となるが二つ以上評価したいなら
for(;;){
式1;
式2;
}
というようにしなきゃなんね
0809806
2006/06/16(金) 09:38:08このような結論に至ってしまったのは、
VC7.1でデバッグ(ステップ実行)すると、
for文実行中カーソルがa = ic + 1; の行にいっていた為でした・・・
実際には実行はされていませんでした。
お騒がせいたしました・・・m(_ _
0810デフォルトの名無しさん
2006/06/16(金) 10:10:02そんな感じで混乱するのでよっぽど単純な場合以外は括弧つけましょう
0811デフォルトの名無しさん
2006/06/16(金) 12:01:410812デフォルトの名無しさん
2006/06/16(金) 12:55:13そういうこともあるので、括弧をつけないなら1行で書くことお勧め。
for (ic = 0; ic < 100; ++ic) if (ic == b) break; とか。
#逆に言えば、複数行にしたら必ず括弧をつけるってこと。
>>811
やりたいことを詳しく。
0813デフォルトの名無しさん
2006/06/16(金) 13:12:14>806 のはよっぽど単純な場合だと思うが
それでも混乱するのは >806 の資質によるものだろう。
0814デフォルトの名無しさん
NGNGええ? こんなんだめだろ。
0816デフォルトの名無しさん
NGNGアドバイスはマに受けないように。
ふつーにインデントしてたら大丈夫だから。
0817デフォルトの名無しさん
2006/06/16(金) 19:40:260818あぼーん
NGNG0819あぼーん
NGNG0820デフォルトの名無しさん
2006/06/17(土) 01:16:38#define DEF (1)
カッコの有る無しで違いってありますか。
0821800
2006/06/17(土) 01:21:020822デフォルトの名無しさん
2006/06/17(土) 01:22:110823デフォルトの名無しさん
2006/06/17(土) 01:24:51>>816 はおかしい事は言っていないし、>>814 は真意が解らないので判定できない。
にも関わらず 「こういうのがいるから」 とは?
0824デフォルトの名無しさん
2006/06/17(土) 01:28:01ない。
式を定義するときには () を付けないと拙い事があるが
#define ABC 1 + 3
#define DEF (1 + 3)
int i = ABC * 2 // 1 + 3 * 2 → 7
int j = DEF * 2 // (1 + 3) * 2 → 8
そうでなければ同じ。
0825820
2006/06/17(土) 01:49:230826デフォルトの名無しさん
2006/06/17(土) 16:07:18#define _AUPBND (sizeof (acpi_native_uint) - 1)
#define _ADNBND (sizeof (acpi_native_uint) - 1)
#define _bnd(X, bnd) (((sizeof (X)) + (bnd)) & (~(bnd)))
#define va_arg(ap, T) (*(T *)(((ap) += (_bnd (T, _AUPBND))) - (_bnd (T,_ADNBND))))
#define va_end(ap) (void) 0
#define va_start(ap, A) (void) ((ap) = (((char *) &(A)) + (_bnd (A,_AUPBND))))
0827デフォルトの名無しさん
2006/06/17(土) 16:21:430828デフォルトの名無しさん
2006/06/17(土) 16:33:18>カーネルを調べたら
…ぉぃ。
>>827
system()
註: Windows 以外のシステムでは要エミュレータ。
Windows 系でも一部非互換。
0829デフォルトの名無しさん
2006/06/17(土) 20:56:56一応言っておくが、それは数ある実装の1つに過ぎず、
世の中それが全てではないからな。
0830デフォルトの名無しさん
2006/06/17(土) 21:19:24カーネル読んでるのか、えらいな。
0831デフォルトの名無しさん
2006/06/17(土) 22:46:00入門書はたくさんあるのに 。・゚・(ノД`)・゚・。ウエエェェン
0832デフォルトの名無しさん
2006/06/17(土) 23:02:410833デフォルトの名無しさん
2006/06/17(土) 23:44:14Cの上級本って少ないよ。
0834デフォルトの名無しさん
2006/06/18(日) 00:25:000835デフォルトの名無しさん
2006/06/18(日) 00:34:07> カーネル読んでるのか、えらいな。
どのへんが*えらい*のか教えて?
0836デフォルトの名無しさん
2006/06/18(日) 00:35:230837デフォルトの名無しさん
2006/06/18(日) 00:43:50要はスタックのアドレスを取得して操作しているだけだ。
0838デフォルトの名無しさん
2006/06/18(日) 00:50:370839デフォルトの名無しさん
2006/06/18(日) 01:33:12そこで質問なのですが、あるtxt形式のファイルから、
「ある行のみを読み込む」、あるいは「ある行から書き込む」ことが
出来なくて困っております。
全て読むには、for文とfscanf関数で回せばいいのは解るのですが・・
0840デフォルトの名無しさん
2006/06/18(日) 01:36:50if($.==ある行){
好きな操作;
}
0841デフォルトの名無しさん
NGNG順番に一行ずつ読んでいくしかないだろ。
一行の長さが全部同じなら、fseek()で移動すればいいけど。
0842839
2006/06/18(日) 01:43:431から勉強しなおすのもきついですorzっていうかスレタイw
>>841
それしかないですか・・・
一度全てオブジェクトに格納してから処理することにします。
>>840->>841さんレスありがとうございました。
0843デフォルトの名無しさん
2006/06/18(日) 04:47:17/* ある行のみを読み込む(=ある行まで全部読んである行だけ残す) */
for (行 = 1; 行 <= ある行; ++行) {
/* 同じバッファを使いまわす */
fgets();
}
/* 最後に残ったのはある行の内容 */
/* ある行から書き込む(=ある行の前まで全部コピーする) */
for (行 = 1; 行 < ある行; ++行) {
fgets();
fputs();
}
/* 後はお好きにどうぞ */
0844デフォルトの名無しさん
2006/06/18(日) 05:02:04プロはfgetcを使う。
0845デフォルトの名無しさん
2006/06/18(日) 05:18:17いや、プロなら長い行が出てきたときは行カウンタを調整すればいいだけだって気づけよ。
少なくとも、fgets()でバッファクラッシュさせるようなコードを書くのは素人以下だって。
0846デフォルトの名無しさん
2006/06/18(日) 05:42:520847デフォルトの名無しさん
2006/06/18(日) 09:30:02てっきりコンパイラに依存すると思っていたよ。
カーネルか・・・ITRONなら見たことあるけどな。ちょっぴり
0848デフォルトの名無しさん
2006/06/18(日) 09:34:38どっちかというと実行環境のアーキテクチャに依存する。
引数がどうやって渡されるかということが、可変個引数の実装に最も直接的な影響を与える。
0849デフォルトの名無しさん
NGNGfgetc使ったって、状況はかわらんだろ。
0850デフォルトの名無しさん
2006/06/18(日) 12:08:290851デフォルトの名無しさん
2006/06/18(日) 13:07:310852デフォルトの名無しさん
2006/06/18(日) 13:16:25たとえば、** hogehoge という文字列を行の先頭に見つけたばあい、
その次の行殻の内容を別ファイルOUTPUTに書き込む。
次に** hogehoge が出てくると書き込み終了みたいな。
Perl使えば20ステップくらいで終わるな。
0853デフォルトの名無しさん
2006/06/18(日) 13:23:510854デフォルトの名無しさん
2006/06/18(日) 13:29:390855デフォルトの名無しさん
2006/06/18(日) 13:38:400856デフォルトの名無しさん
2006/06/18(日) 13:44:170857デフォルトの名無しさん
2006/06/18(日) 13:49:22ってかすれ違い
0858デフォルトの名無しさん
2006/06/18(日) 14:05:480859デフォルトの名無しさん
2006/06/18(日) 15:01:220860デフォルトの名無しさん
2006/06/18(日) 15:56:590861デフォルトの名無しさん
2006/06/18(日) 17:11:440862デフォルトの名無しさん
2006/06/18(日) 17:56:380863デフォルトの名無しさん
2006/06/18(日) 20:40:52...テキストファイルをデータベースとして使ったりorz
0864デフォルトの名無しさん
NGNG0865デフォルトの名無しさん
2006/06/19(月) 11:53:56じゃあ KiB で。
0866デフォルトの名無しさん
2006/06/19(月) 14:51:17GiB の間違いじゃないか?
0867デフォルトの名無しさん
2006/06/19(月) 20:25:270868デフォルトの名無しさん
2006/06/20(火) 00:33:450869800
2006/06/20(火) 00:37:120870デフォルトの名無しさん
2006/06/20(火) 20:58:59こんな風にexitがあったのですが、どういう意味なのでしょうか?
0871デフォルトの名無しさん
2006/06/20(火) 21:02:470872デフォルトの名無しさん
2006/06/20(火) 21:47:500873デフォルトの名無しさん
2006/06/20(火) 22:30:05ステップって使わないの?
何を使うのが標準?
0874デフォルトの名無しさん
2006/06/20(火) 22:46:20じゃあ KiB で。
0875↓この人童貞です
2006/06/20(火) 22:47:380876↑この人処女です
2006/06/21(水) 00:02:050877デフォルトの名無しさん
2006/06/21(水) 00:03:21GiB の間違いじゃないか?
0878デフォルトの名無しさん
2006/06/21(水) 00:52:16getc() で既成のファイルから1バイトずつ読み取り、
特定のビットパターンが来た時だけ char型配列に記録するプログラムを作っています。
同じようなファイルを通したとき、きちんと成功する場合もあれば
エラーが出る場合もあって困ってたのですが、どうやら
if( buff[ current ] == EOF )
{
......(終了処理)
}
と書いていた所がまずかったようで、ファイル中に 0xFF があったときに
-1(EOF) と誤認してプログラムを終了していたのが原因だったようです
処理が中断するまでのバイト数を調べたところ該当番地に 0xFF があったので多分間違いないと思います。
しかしこの 0xFF をどうやって避けたらいいものか判りません。
ファイルサイズは固定ではないので、そのファイルの状態に応じて判別するしかないとは思うのですが・・・
0879デフォルトの名無しさん
2006/06/21(水) 01:04:30getchar()、fgetc()の戻り値はintで受け取れ。
0880デフォルトの名無しさん
2006/06/21(水) 01:09:220881デフォルトの名無しさん
2006/06/21(水) 01:12:14簡潔&的確な回答をありがとうございます。
お陰で2時間くらい悩んでたものがやっと解決しました
0882デフォルトの名無しさん
2006/06/21(水) 01:12:49EOFはchar型じゃないってことをまず知ろうな。
0883デフォルトの名無しさん
2006/06/21(水) 09:17:39そんなことはないだろう。
0884デフォルトの名無しさん
2006/06/21(水) 12:30:52あるよ
0885デフォルトの名無しさん
2006/06/21(水) 17:10:12stdio.hを開いて、EOFとgetchar()の定義をよく見てみよう。
0886デフォルトの名無しさん
2006/06/21(水) 18:19:11long foo(void){return EOF;}
int bar(void){return EOF;}
char dum(void){return EOF;}
int main(void){
long l;
int i;
char c;
l = foo ();
i = bar ();
c = dum ();
return 0;
}
>883
EOFは何型ですか?(lol
0887886
2006/06/21(水) 18:24:26>885
0888デフォルトの名無しさん
2006/06/21(水) 18:32:510889デフォルトの名無しさん
2006/06/21(水) 18:34:04EOFはたしかint型の定数と定められていたと思う。
0890デフォルトの名無しさん
2006/06/21(水) 18:35:57>>886でエラーが出ないのはint→long int→charの暗黙の変換が認められているから。
0891デフォルトの名無しさん
2006/06/21(水) 18:40:370892デフォルトの名無しさん
2006/06/21(水) 18:42:29困ったチャンの>886=883が無知を棚に上げて絡んでいるのを
周りが構ってあげてる流れ。
0893デフォルトの名無しさん
2006/06/21(水) 19:10:00のstdlib.hを使用したところ以下のようなエラーが発生しました。
エラー E2040 116行目:宣言が正しく終了していない.
警告 W8017 117行目:マクロ'abs'の重複定義
#else
int _RTLENTRY _EXPFUNC abs(int __x); ←116行目
# define abs(__x) __abs__(__x) ←117行目
#endif
解る方がいらっしゃればよろしくお願いします。
0894デフォルトの名無しさん
2006/06/21(水) 19:56:07そんなよその物を使わず自分のコンパイラ付属の物を使え。
0895デフォルトの名無しさん
2006/06/21(水) 20:56:47int型のEOFを返す、というのは散見しますが、
EOFはint云々はどこにも書かれてないと思いますが。
もし良かったら書かれている場所を特定してください。
0896デフォルトの名無しさん
2006/06/21(水) 21:05:27JIS X3010:2003の7.19.1の中にこんなことが書かれている。
> EOFは,型がintで,負の値を持つ整数定数式に展開する。
JISに書いてあればISO/IECにも書かれていないわけがなかろう。
0897デフォルトの名無しさん
2006/06/21(水) 22:37:38> EOF
> which expands to an integer constant expression, with type int and a negative value,
0898デフォルトの名無しさん
2006/06/21(水) 22:53:130899デフォルトの名無しさん
2006/06/21(水) 23:03:12別に何もおかしなところはないが
0900デフォルトの名無しさん
2006/06/21(水) 23:19:00おかしいから出したのではなく、
実際のコンパイラの定義例を出したので、当然。
>>885で言われたことぐらい調べてから話せよと。
0901デフォルトの名無しさん
2006/06/21(水) 23:23:330902デフォルトの名無しさん
2006/06/21(水) 23:34:29回線クソ重で流れに乗り遅れたんだよ。
仕方ないだろ。許せよ!
0903デフォルトの名無しさん
2006/06/21(水) 23:43:290904デフォルトの名無しさん
2006/06/22(木) 21:35:290905デフォルトの名無しさん
2006/06/22(木) 21:52:560906デフォルトの名無しさん
2006/06/22(木) 21:56:04aaa += 0;
0907デフォルトの名無しさん
2006/06/22(木) 23:49:500908デフォルトの名無しさん
2006/06/23(金) 01:25:11分からないので、教えてください。
0909デフォルトの名無しさん
2006/06/23(金) 01:27:49つ[初心者スレ]
0910デフォルトの名無しさん
2006/06/23(金) 01:32:54初心者スレいってきます。
0911デフォルトの名無しさん
2006/06/23(金) 11:16:50いや、ステップでもいいけど、COBOLとかBASICチックだなと思って。
0912デフォルトの名無しさん
2006/06/23(金) 14:20:03使わないというか、1ステップを何に換算したらいいんだ?
Cで10行? 20行? 1関数? 10関数?
0913デフォルトの名無しさん
2006/06/23(金) 14:55:47ステップを使ってるところでは.
0914デフォルトの名無しさん
2006/06/23(金) 14:58:070915デフォルトの名無しさん
2006/06/23(金) 15:25:20ステップでコードの規模をはかるようなところは、大抵コーディング規約があるので、
そのようなことは問題にならない。
0916デフォルトの名無しさん
2006/06/23(金) 17:48:58cb -j ソース | wc -l
0917デフォルトの名無しさん
2006/06/23(金) 20:19:46はっきり言って飾りです。
お金は昔からの経験で算出しているらしい。
下っ端なもんだからお金のことはわからないが
0918デフォルトの名無しさん
2006/06/23(金) 20:23:08たぶん君の知らないところでステップ数は使われてると思うよ
0919デフォルトの名無しさん
NGNGかといってFPとか使ってるわけでもないけど。
0920デフォルトの名無しさん
2006/06/23(金) 22:39:16このアプリは〜Kステップとか。
H製作所やF通はステップ使うんじゃない?
0921デフォルトの名無しさん
2006/06/23(金) 22:41:25他に計る方法がないので仕方なく・・って感じ
0922デフォルトの名無しさん
2006/06/23(金) 22:44:22先輩方がステップ使うから、なんかそれがうちの標準なんだと納得。
0923デフォルトの名無しさん
2006/06/23(金) 22:50:07ん?見積もりは大体において、どこでも人月だろ?それ以外のとこ見たこと無いぞ。
0924デフォルトの名無しさん
2006/06/23(金) 22:54:020925デフォルトの名無しさん
NGNGFPとか使ってるところってないのかなぁ。
やっぱ机上の理論なのか。
0926デフォルトの名無しさん
NGNG昔、COBOLの仕事をやってたときは、ステップ数のようだったけど。
見積の±5%以上の誤差があるとまずいらしくて、ループを展開したりして
調整させられたことがある。
0927デフォルトの名無しさん
2006/06/23(金) 23:00:31いりみだれているようだな。
俺は全く関心ないがな。
0928デフォルトの名無しさん
2006/06/23(金) 23:02:21その話は上司から聞いたことがある。ステップあたりいくらとかいう時代もあったようだ。
0929デフォルトの名無しさん
2006/06/23(金) 23:10:490930デフォルトの名無しさん
2006/06/23(金) 23:17:290931デフォルトの名無しさん
2006/06/23(金) 23:20:200932デフォルトの名無しさん
2006/06/23(金) 23:25:100933デフォルトの名無しさん
NGNG人月を出すって話なんじゃないか?
0934デフォルトの名無しさん
2006/06/23(金) 23:27:440935デフォルトの名無しさん
NGNGベテランがどのくらい、新人がどのくらいって適当な基準でやってた。
0936デフォルトの名無しさん
2006/06/24(土) 01:04:20ISO/ANSIで標準化された、C言語の仕様なのですか?
0937デフォルトの名無しさん
2006/06/24(土) 01:18:300938デフォルトの名無しさん
2006/06/24(土) 05:15:210939デフォルトの名無しさん
NGNG0940デフォルトの名無しさん
2006/06/24(土) 09:45:210941デフォルトの名無しさん
2006/06/24(土) 11:04:32安心しーや
0942デフォルトの名無しさん
2006/06/24(土) 12:37:140943デフォルトの名無しさん
2006/06/24(土) 12:59:22N×Nの盤面上にN個のクイーンを配置せよ。
ただしどのクイーンも縦横斜めの線上に他のクイーンが無いように置くこと。
0944デフォルトの名無しさん
2006/06/24(土) 15:28:55ねぇねぇ、それってなんでクイーンなの? プリンスじゃいけないの?
0945デフォルトの名無しさん
2006/06/24(土) 15:47:56チェスにプリンスの駒はない。
面白いと思って書いてるんだろうが、浅薄。
0946デフォルトの名無しさん
2006/06/24(土) 15:56:28チェスの駒と言う前提条件があるなら、>943の2行目は冗長だね。
曰く、「但し互いの利き筋に置かないこと」と。
0947デフォルトの名無しさん
2006/06/24(土) 15:57:19馬鹿?
0948デフォルトの名無しさん
2006/06/24(土) 16:16:27>チェスの駒と言う前提条件があるなら
ではない、チェスの駒しかない。
わかりきった事をネタにしたのかと思ったが、「知らなかった」らしいな。
浅薄は取消す、代わりに「無知」を授けるので謹んで拝領したまえ。
0949デフォルトの名無しさん
2006/06/24(土) 16:21:450950デフォルトの名無しさん
2006/06/24(土) 17:00:20失礼な。高専です
0951デフォルトの名無しさん
2006/06/24(土) 17:10:340952デフォルトの名無しさん
2006/06/24(土) 17:32:32使えないクズだらけだ。
0953デフォルトの名無しさん
2006/06/24(土) 17:58:040954デフォルトの名無しさん
2006/06/24(土) 18:37:210955次スレテンプレ
2006/06/24(土) 20:13:05まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/250-7563469-9920244
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
前スレ
【ANSI-C】 C言語なら俺に聞け! Part 127
http://pc8.2ch.net/test/read.cgi/tech/1147375815/
GUIなどの標準Cではできない事の質問,ソース丸投げ、宿題、書籍 は
専門の別スレッド↓があるのでそこへさようなら。
【初心者歓迎】C/C++室 Ver.28【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1149815331/
C言語/C++言語の宿題を片付けます 65代目
http://pc8.2ch.net/test/read.cgi/tech/1147902222/
新・推薦図書/必読図書のためのスレッド 1
http://pc8.2ch.net/test/read.cgi/prog/1146889623/
0956デフォルトの名無しさん
2006/06/24(土) 20:37:56C言語なら俺に聞け(入門篇)
http://pc8.2ch.net/test/read.cgi/tech/1146700389/
はきだめC/C++下級者の質問箱
http://pc8.2ch.net/test/read.cgi/tech/1124256027/
C言語を今日から始める僕に1から教えるスレ
http://pc8.2ch.net/test/read.cgi/tech/1137933572/
0957デフォルトの名無しさん
2006/06/24(土) 20:38:48古いスレのリンク張ってるのはわざとか?
0958デフォルトの名無しさん
2006/06/24(土) 23:16:560959デフォルトの名無しさん
2006/06/24(土) 23:21:53このスレは標準Cのみの限定スレです。
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/250-7563469-9920244
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
前スレ
【ANSI-C】 C言語なら俺に聞け! Part 127
http://pc8.2ch.net/test/read.cgi/tech/1147375815/
GUIなどの標準Cではできない事の質問,ソース丸投げ、宿題、書籍 は
専門の別スレッド↓があるのでそこへさようなら。
【初心者歓迎】C/C++室 Ver.28【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1149815331/
C/C++の宿題を片付けます 68代目
http://pc8.2ch.net/test/read.cgi/tech/1151158759/
新・推薦図書/必読図書のためのスレッド 1
http://pc8.2ch.net/test/read.cgi/prog/1146889623/
0960デフォルトの名無しさん
2006/06/24(土) 23:28:56正直な話、C言語のステップ数は金融機関と通信屋以外の仕事はまず無意味
0961デフォルトの名無しさん
2006/06/24(土) 23:46:560962デフォルトの名無しさん
2006/06/24(土) 23:59:47こんな基本的なお約束すら守れないボケどもが
コーディング規約とか片腹痛い。
0963デフォルトの名無しさん
2006/06/26(月) 09:35:23http://pc8.2ch.net/test/read.cgi/tech/1151282084/
0964デフォルトの名無しさん
2006/06/26(月) 22:55:55int main_s()
{
return 0;
}
0965デフォルトの名無しさん
2006/06/27(火) 14:02:540966デフォルトの名無しさん
2006/06/27(火) 14:05:010967デフォルトの名無しさん
2006/06/27(火) 15:04:580968デフォルトの名無しさん
2006/06/28(水) 21:24:100969デフォルトの名無しさん
2006/06/28(水) 22:18:130970デフォルトの名無しさん
2006/06/29(木) 08:57:230971デフォルトの名無しさん
2006/06/29(木) 15:01:200972デフォルトの名無しさん
2006/07/02(日) 14:12:12{
return 10;
}
int main()
{
test();
return 0;
}
上のように戻り値がある関数を呼び出した時に、戻り値を受け取る変数をセットして無くても
コンパイルは通るのですが、これは問題無いのでしょうか?
0973デフォルトの名無しさん
2006/07/02(日) 14:24:42戻り値を必要としないのであれば、問題ありません。
例えば、引き数が間違っていない限りエラーを返さないfseek()の戻り値は大抵捨てられます。
0974972
2006/07/02(日) 14:29:59即レスありがとうございます。
上の例で言えば、test関数を何度か呼び出すプログラムなんですが、
場合によっては戻り値を受け取りたくなかったんです。
なので、こういう使い方大丈夫なのかと思い質問した次第です。
勉強になりますm(_ _)m
0975デフォルトの名無しさん
2006/07/02(日) 17:24:000976デフォルトの名無しさん
2006/07/02(日) 18:05:19scanfとかprintfだって戻り値を返しているんだぞ。
0977デフォルトの名無しさん
2006/07/02(日) 18:32:22MessageBoxでopenStrを表示したんですが、"15@"と表示されてしまいます。
なぜですか? 教えてチャソ。
0978デフォルトの名無しさん
2006/07/02(日) 18:34:59× strncpy(openStr , "15" , 2)
○ strncpy(openStr , "15" , 3)
0979デフォルトの名無しさん
2006/07/02(日) 18:47:52ありがとうございます。
すみません。まわりくどい質問だったかもしれません。
もし文字列が"15,15…"というのを格納した変数で後ろの"15"だけ2文字(NULL文字含む)
引っ張り出したいときはどうすればいいでしょうか?
0980デフォルトの名無しさん
2006/07/02(日) 18:49:35openStr[2] = '\0';
0981デフォルトの名無しさん
2006/07/02(日) 18:55:50ああありgふぁとうございます。
おいどんが馬鹿でしたああ。やっぱNULL文字は大事ですね。
0982デフォルトの名無しさん
2006/07/02(日) 19:02:250983デフォルトの名無しさん
2006/07/03(月) 16:48:19char openStr[3];
openStr[0] = s[0];
openStr[1] = s[1];
openStr[2] = '\0';
0984デフォルトの名無しさん
2006/07/03(月) 19:00:182進数0001.1111と0001.0010を8進数にするやり方教えてください。
0985デフォルトの名無しさん
2006/07/03(月) 19:05:110986デフォルトの名無しさん
2006/07/03(月) 21:20:4600.011.111
0.3.7
037
0001.0010
00.010.010
0.2.2
022
0987デフォルトの名無しさん
2006/07/04(火) 10:18:01つまり、1.74(8)と1.10(8)じゃね?
0988デフォルトの名無しさん
2006/07/04(火) 11:10:378進数は2進数を3桁ごとに区切ればできる。
で、その途中の '.' は何だ?
それがもし小数点なら3桁ごとの区切り目の起点がそこになる。
0989デフォルトの名無しさん
2006/07/04(火) 21:44:56「条件式が常に真になるようなwhile文を記述してください。
また、その繰り返し処理の中で変数iをインクリメントし、
iが100よりも大きくなったら繰り返し処理を抜け出せるようにしてください。」
#include <stdio.h>
int main()
{
int i = 0;
while( 1 ){
i++;
printf("i:%d\n",i);
if( i>100 ){
break;
}
}
}
上記のソースが問題の答え
while( 1 ) のカッコの中の数字を100や1000に変えても問題なく処理され
なぜ1なのかが解らないのですが
これは、どんな理由からなのでしょうか?
0990デフォルトの名無しさん
2006/07/04(火) 21:49:06別に1でなくても100でも1000でもいい。
0991デフォルトの名無しさん
2006/07/04(火) 21:49:51偽は0
真は0以外
と知らないんですか?人間性を疑います。
貴方みたいな人はプログラムを止めてください。
0992デフォルトの名無しさん
2006/07/04(火) 21:52:52人間性まで疑う必要は無いと思うが……。
0994デフォルトの名無しさん
2006/07/05(水) 15:35:29int no;
int col;
char *buf;
} Data;
typedef struct list_t {
Data data;
struct list_t *prev;
struct list_t *next;
} Dline;
typedef struct Dlist {
Dline *head;
Dline *crnt;
} Dlist;
と構造体を宣言しているんですが'Dline' does not name a typeと怒られます・・・
何か手を加えないといけないんでしょうか?(コンパイラ:g++)
0995デフォルトの名無しさん
2006/07/05(水) 15:52:47そのままでいいと思うが・・・。
g++ --versionの結果をコピペしてくれ。
0996デフォルトの名無しさん
2006/07/05(水) 15:55:13g++ (GCC) 3.4.4 (cygming special) (gdc 0.12, using dmd 0.125)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
です
0997デフォルトの名無しさん
2006/07/05(水) 16:09:47>>994のコードは、ソースをそのままコピペしたやつじゃないでしょ?
以下のコードをコピペして、もう一度コンパイルしてみて。
typedef struct {
int no;
int col;
char *buf;
} Data;
typedef struct list_t {
Data data;
struct list_t *prev;
struct list_t *next;
} Dline;
typedef struct Dlist {
Dline *head;
Dline *crnt;
} Dlist;
int main()
{
return 0;
} ~
0998デフォルトの名無しさん
2006/07/05(水) 16:10:300999デフォルトの名無しさん
2006/07/05(水) 16:16:54レスどもです.
>>997単体でコンパイルが通ったので
どうやらDlistを使ってる関数に問題があるみたいです Orz
ありがとうございました
1000デフォルトの名無しさん
2006/07/05(水) 16:17:03その宣言が書いてあるヘッダをincludeしていないどこかのヘッダ(またはソース)で
Dlineをメンバに持った構造体やクラスを宣言しようとしてるんじゃないの。
エラーが出た箇所はその宣言部じゃないだろ
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。