1 :デフォルトの名無しさん2011/11/10(木) 22:55:06.15
C言語の*入門者*向け解説スレッドです。

★前スレ
C言語なら俺に聞け(入門編)Part 91
http://hibari.2ch.net/test/read.cgi/tech/1319581056/
★過去スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
★教えて欲しいのではなく宿題を丸投げしたいだけなら
  ↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 153代目
http://hibari.2ch.net/test/read.cgi/tech/1320365280/
★C++言語については避けてください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
★ぬるぽ。

長くなりそうなコードはcodepadに貼り付けてもいいでしょう
http://codepad.org/
3 :デフォルトの名無しさん2011/11/10(木) 23:10:16.68
>>1
大変お疲れ様です
死にます
692 :デフォルトの名無しさん2011/11/25(金) 01:09:53.37
>>1
C言語最近始めたんだけど
C言語で金を稼ぎたいんだけど、主にC言語って何ができるの
4 :デフォルトの名無しさん2011/11/11(金) 00:57:39.31
長文失礼します。

戻り値が構造体の関数を宣言し、構造体を戻り値として返したときに、
その構造体をポインタ変数へ代入したいのですが、うまくいきません。
p = tesFunc;
(p:ポインタ変数、tesFunc:戻り値が構造体の関数)
イメージとしては、こういう風にしたいのです。

いくつか、やり方を変えて試したのですが、エラーが出てしまいます。

私がやりたいことは、
ある構造体を色々な関数で使い、なおかつ値を変えたりしたいわけです。
なので、違う方法でもできるのなら、そちらの方法で試してみたいと思います。
6 :デフォルトの名無しさん2011/11/11(金) 01:07:35.10
>>4
まぁ素人さんはポインタなんか使わずに構造体をそのまま受け取るようにした
方がいい。
構造体を戻り値とするんだから、受け取るにもポインタではなく構造体を指定す
ればいい。
ただのintなんかと同じに考えればいい。
7 :デフォルトの名無しさん2011/11/11(金) 01:16:22.78
>>5 その方法でやってみます!!

>>6 確かにポインタなんて使いたくはないんですが、
  戻り値の構造体と、受け取り側の構造体が別々の変数になってしまう
  というのが、ちょっと具合が悪くて。
10 :デフォルトの名無しさん2011/11/11(金) 02:28:23.20
>>4です。
解決しました。

戻り値が構造体へのポインタの関数を使うことと、staticを使用することの2つがキーだったみたいです。

皆さん、ありがとうございました。
11 :デフォルトの名無しさん2011/11/11(金) 02:41:46.21
>>10
わけのわからんバグに悩まされると思うぞ?
元の変数に戻したければ素直に代入しとけ。intと同じに考えればいい。
12 :デフォルトの名無しさん2011/11/11(金) 02:58:23.03
>ある構造体を色々な関数で使い、なおかつ値を変えたりしたいわけです。

こういう目的なら、構造体を1個だけ確保しておいて、「色々な関数」へは、
その構造体を指すポインタを引数として渡すのがシンプルだと思うけどな。
構造体がごく小さいものであれば>>11の言うとおり。
5 :デフォルトの名無しさん2011/11/11(金) 01:01:51.76
構造体へのポインタを引数として関数に渡す
8 :デフォルトの名無しさん2011/11/11(金) 01:17:34.03
tesFuncの中の構造体をstaticにしてその構造体のポインタ返すようにしてみれ
グローバルに置いておきexternするみたいなことをちょっと隠蔽してみたりしたいんだよな?
15 :デフォルトの名無しさん2011/11/11(金) 05:43:59.66
どうでもいいが、
--
戻り値の構造体と、受け取り側の構造体が別々の変数になってしまう
  というのが、ちょっと具合が悪くて。
--
これが何を言いたいのか誰か解説してくれ。
17 :デフォルトの名無しさん2011/11/11(金) 10:02:01.51
mallocってなんなんですか??
18 :デフォルトの名無しさん2011/11/11(金) 10:10:58.12
19 :デフォルトの名無しさん2011/11/11(金) 13:17:49.84
bool型使って0と1だけのループ回したいんですけど
for(boo=0 ;boo <=1 ;boo++){
みたいなループ作ったら
warning: incrementing a bool value is deprecated
っていう警告が出ます。
確かにbool型に足し上げることは推奨されないですが何か別の方法ありますか?
20 :デフォルトの名無しさん2011/11/11(金) 13:22:35.87
>>19
for( i=0; i < 2; ++i ){
boo=i;

わりとマジレス
27 :デフォルトの名無しさん2011/11/11(金) 17:19:34.93
>>20
ありがとう
やっぱそんな感じにしないとダメですね
22 :デフォルトの名無しさん2011/11/11(金) 13:31:11.25
関数形式マクロの定義で、ある関数を呼び出すのはあまり良いコーディングとは言えないでしょうか
例えば、

int Function1(int x, int y)
{
int temp;
temp = (x + y) / Function2(x, y);
return temp;
}

こんな関数の代わりに、関数呼び出しのオーバーヘッドを考慮して、

#define Function1(x,y) (((x) + (y)) / Function2(x, y))

このようにマクロを定義するのってマズイですか?
24 :デフォルトの名無しさん2011/11/11(金) 13:37:36.46
>>22
引数の評価に副作用がある場合はマズイ。
そうでないならおk。
26 :デフォルトの名無しさん2011/11/11(金) 14:23:25.46
>>22
C99/C++処理系ならインライン関数も検討したほうがいいと思う
23 :デフォルトの名無しさん2011/11/11(金) 13:32:39.59
callocってサイズ指定方法とゼロクリアの違い以外はmallocと同等の機能?
25 :デフォルトの名無しさん2011/11/11(金) 14:09:01.46
>>23
大抵そう。極端な場合、内部でmalloc()とmemset()を呼んでいる。
28 :デフォルトの名無しさん2011/11/11(金) 20:39:01.57
マクロの中でリターンしてると後から読んだときに途中でリターンしてることに気付かないんだよな
29 :デフォルトの名無しさん2011/11/11(金) 20:54:21.42
確保されていないポインタをfreeに投げたらどうなるの?
30 :デフォルトの名無しさん2011/11/11(金) 20:59:42.33
>>29
最悪の場合宇宙が崩壊する
結構マジで
33 :デフォルトの名無しさん2011/11/11(金) 21:38:11.03
単方向リストを表示したいんですけど、うまくできません><
どこが間違っているか教えてください!
http://codepad.org/GDXIYcVE
34 :デフォルトの名無しさん2011/11/11(金) 21:40:25.92
見てないけどヌルポで初期化してないと予言
35 :デフォルトの名無しさん2011/11/11(金) 21:52:55.76
>>34
ごめんなさい、わからないです。
リストを作るところまでは、合ってますか?
36 : ◆QZaw55cn4c 2011/11/11(金) 21:53:18.23
>>33
http://ideone.com/YXuBD

>>34
いまだにその落とし穴にはまって首をひねることが。
37 :デフォルトの名無しさん2011/11/11(金) 21:56:23.04
p=p->next; ←ココ
38 :デフォルトの名無しさん2011/11/11(金) 22:02:53.97
>>36 ありがとうございます!
>>37 p=p->nextじゃ、移れてないってことですか?
あと実行したときに、後ろから?表示されているのもよくわかりません。
40 :デフォルトの名無しさん2011/11/11(金) 22:19:26.90
>>38
逆順になるのは、リンクリストの最初のほうにセルを挿入してるからだな。
42 :デフォルトの名無しさん2011/11/11(金) 22:25:43.46
>>39 p->next = start->head;
start->head = p; で、セルをつなげてる?
>>40 わかった!ところてんみたいに入れてった感じですね!
39 :デフォルトの名無しさん2011/11/11(金) 22:14:01.85
うん、p->next初期化されてないも。
41 :デフォルトの名無しさん2011/11/11(金) 22:21:10.39
地球どころか太陽系すべてが吹き飛ぶほどの気力がたまっているぞ
45 :デフォルトの名無しさん2011/11/11(金) 23:31:51.28
何でコンピュータの基幹演算部分って十数桁までの計算しかできないのですか?
多倍桁の計算をするときは実装するほかないですよね?

大学の考察でこんな課題がでました。
教えてください。
どうしてでしょうか?
46 : ◆QZaw55cn4c 2011/11/11(金) 23:34:42.51
>>45
>どうしてでしょうか?
How を説明すればいいのでしょうか?それとも Why ?
47 :デフォルトの名無しさん2011/11/11(金) 23:41:34.79
>>45
つうか、それが分からない人間がなんで多倍桁なんて言葉を知ってるの?
48 :デフォルトの名無しさん2011/11/11(金) 23:41:43.28
>>45
そうしたほうが作る人が楽だから
49 :デフォルトの名無しさん2011/11/11(金) 23:42:40.74
>>46
両方お願いします。必然性があるのか、そもそもどういう仕組みになっているのか、
両方において曖昧な認識です。

プロフィール: 進研数学偏差値74.8
50 :デフォルトの名無しさん2011/11/11(金) 23:45:13.26
>>47
アルゴリズムとして知ってるから。
ちなみに、桁*桁の計算が4つあったら、桁*桁を3つと足し算といった感じで
計算量を大幅に減らす事もできるんですよね。
>>48
コンピュータの内部の事情って関係ありますかね?
65 : ◆QZaw55cn4c 2011/11/12(土) 02:16:45.26
>>64
熱い‥‥‥。

>>61
電子系ならそうだったみたい。制御系ならせいぜい TTL ゲートでシリアル4bit 加算、というレベルでした、うちの大学は。

>>49
ふーん、今の若い子はそういう自己を表現することもあるんだ。
いや、別に否定するわけじゃあありません。私だったら‥‥これこれこうこうの本を読みました、って書くなあ(実のところ読めてなくて見たレベルなんでしょうけれども、それに気づくのはずっとあとの話)。
66 :デフォルトの名無しさん2011/11/12(土) 02:37:41.99
>>65
早く説明してやれよ。>>46
51 :デフォルトの名無しさん2011/11/11(金) 23:51:16.19
普通に考えればわかることだよ
質問するほどのことではない
52 :デフォルトの名無しさん2011/11/11(金) 23:52:32.50
メモリの無駄が増えるからですよね?
これでいいですか?
53 :デフォルトの名無しさん2011/11/11(金) 23:54:50.27
多倍長演算とかcpuでサポートしたらハードウエアが複雑になるからじゃないの?
そこまでしてやる需要がないとか。

8086とか68000くらいのころはけっこう複雑な命令があったけど、その後RISCが流行って
単純な命令を高速実行する流れになって、またその後CISCががんばって効率化して
RISCとかCISCって分類が無意味になって、みたいな流れだよね。

8086のころはBCD演算をサポートする命令があったから、RISCのトレンドがなかったら
そっち方面に技術が発展して、もしかしたら多倍長演算がCPUでサポートされてる
ような世界になってたかもしれない。それはないかな?
54 :デフォルトの名無しさん2011/11/11(金) 23:56:33.91
1 メモリが無駄になるから。
2 根幹演算を組み合わせて実装した方が効率の良いアルゴリズムが開発できるから。
3 ハードウェアが複雑になるから。

こういう認識でいいでしょうか?
55 :デフォルトの名無しさん2011/11/12(土) 00:01:26.32
結局は互換性がうんぬんじゃろ
ハードに変更があると多大な範囲に影響が及ぶから
変えるに変えられネーってことでだらだらやってんだろ
56 :デフォルトの名無しさん2011/11/12(土) 00:07:11.54
CPUにメモリって何個入ってるんですか?
58 :デフォルトの名無しさん2011/11/12(土) 00:11:06.21
>>56
レジスタだったら何十個もあるんじゃないかな。
8086の系統は少ないかもしれないけど、内部的にはたくさんもってるみたいな
話を聞いたことがある。
57 :デフォルトの名無しさん2011/11/12(土) 00:07:36.28
昔はメモリも少なかったし、必要だったら自分で作ればいいじゃん的な事
59 :デフォルトの名無しさん2011/11/12(土) 00:25:22.04
CPUを自作ってできるのかな?
61 :デフォルトの名無しさん2011/11/12(土) 00:42:42.74
>>59
情報系なら大学の実験なんかで作るだろ。
64 :デフォルトの名無しさん2011/11/12(土) 00:45:13.72
ttp://www.alles.or.jp/~thisida/mycpu_gougai.html
今更こんなもんやってられんわ
FPGAのほうがなんぼかやろうって気になれる
67 : ◆QZaw55cn4c 2011/11/12(土) 02:46:15.39
え?もうたくさんコメントがついているので、いまさら、じゃないですかね。
68 :デフォルトの名無しさん2011/11/12(土) 03:09:03.79
素直に「分からなかったので即答できませんでした」って言えよ
69 : ◆jMy.vROSfw 2011/11/12(土) 03:17:15.15
はい
70 :デフォルトの名無しさん2011/11/12(土) 03:38:42.21
基本的にそれぞれの桁は前の桁からの繰り上がりを待たないといけないから
桁数が増えると必然的に結果が出るのが遅くなるんだよね
71 : ◆QZaw55cn4c 2011/11/12(土) 03:44:32.35
>>70
キャリールックアヘッド、というのがあってキャリーの伝播を極力早くする方法があります。回路はその分多くなりますが。
証明は論理式の and と or の内外をいれかえるだけだったかと記憶しています。
繰り上がり待ち方式はリップルキャリーといいます。
72 : ◆QZaw55cn4c 2011/11/12(土) 03:46:50.98
>回路はその分多くなりますが。
ちょっと不正確。多入力ゲートが2入力ゲートのくみあわせよりも早いと期待できることがポイントだったかと。だから多入力ゲートの入力数の限界までは適用できますが、それ以上は実際どうなんでしょうね、よくわかんない。
73 :デフォルトの名無しさん2011/11/12(土) 03:56:20.52
そういえばどうして計算機工学の話になってるんだっけ?
74 :デフォルトの名無しさん2011/11/12(土) 04:13:33.96
>>73
知ったかしたいがために、
訊かれもしていないことをぺらぺらしゃべるやつが約1名いるようなんでね
76 : ◆QZaw55cn4c 2011/11/12(土) 04:28:13.28
>>73
>>49 からの流れ。

>>74
ま、所詮暇つぶしですからね。
77 :デフォルトの名無しさん2011/11/12(土) 04:29:07.43
ああ、自覚はあるんだな
俺はお前のことだとはこれっぽっちも言ってないぜ(笑)
78 : ◆QZaw55cn4c 2011/11/12(土) 04:30:49.59
>>77
ん?私も私のことだとは言ってませんね。
80 : ◆jMy.vROSfw 2011/11/12(土) 04:33:29.82
ヒョードルやジョシュにとってハントは休憩みたいなもんだろ。
81 : ◆jMy.vROSfw 2011/11/12(土) 04:39:13.92
>>80
え? もう鳥パクッタ?
94 :デフォルトの名無しさん2011/11/12(土) 13:31:52.08
推定も糞も>>69,83は俺だって。
最近のコテだと◆QZaw55cn4cと>>80は別人だが。

コテ付けてほしいのか?
今時コテ叩きして楽しいかい?
95 :デフォルトの名無しさん2011/11/12(土) 13:41:12.63
君の余計な一言

>最近のコテだと◆QZaw55cn4cと>>80は別人だが。

いや、君と◆QZaw55cn4cが同一人物の可能性なんてちっとも考えなかったよw
82 : ◆jMy.vROSfw 2011/11/12(土) 04:44:42.18
69で使ったばっかりのトリップなのに何でもうパクられてんだ!
89 :デフォルトの名無しさん2011/11/12(土) 12:43:50.98
>>82
すぐバレる嘘つくな糞vipperがwww
お前の鳥でググってら一杯出てくる出てくるwwwwwwwwwwwww
83 : ◆xTnvTYkz3o 2011/11/12(土) 04:48:06.96
こえぇぇ。(´・ω・`) 鳥変えた。
85 :デフォルトの名無しさん2011/11/12(土) 06:18:05.00
もう一回>>83の鳥解析してよ
86 :デフォルトの名無しさん2011/11/12(土) 11:49:35.81
bool a();
bool b();

if (a() || b()) ... としたときに b() が呼ばれない可能性がある。。というのはいいんだけど、

bool x = false;
x |= a()
x |= b()

こういう場合でも b() が呼ばれない可能性ってあるの?
97 :デフォルトの名無しさん2011/11/12(土) 13:48:30.65
>>86
下のは両方呼ばれるよ。
しかし、bool型にビット演算って違和感が。
警告とか出ないのだろうか。
88 :デフォルトの名無しさん2011/11/12(土) 12:00:04.55
つーかそもそもコンパイル通らないから呼ばれない確率100%だよ
92 :デフォルトの名無しさん2011/11/12(土) 13:09:12.93
全角二文字の一般的な単語じゃ被ってもおかしくないか。
しかし、1時間ちょいで同じコテ見つけて書き込めるかねぇ?
93 :デフォルトの名無しさん2011/11/12(土) 13:15:15.57
>全角二文字の一般的な単語

それが分かるのは糞コテ本人か解析者
レス内容からして>>92は糞コテ本人と推定
98 :デフォルトの名無しさん2011/11/12(土) 17:02:00.63
重複順列に関してです。
A,B,C,...,G,Hという7個以上の要素から6つ取り出して並べたときの、全ての組み合わせを出したいのですが、うまくいきません。

例としては、
AAAAAA
AAAAAB・・・
と出していくのですが、同じ要素を使っていても並び方が違えば別のパターンとして表示します。

長文申し訳ありませんが、手におえず、ご教授頂きたい次第です。
よろしくお願いします。
99 :デフォルトの名無しさん2011/11/12(土) 17:22:21.29
>>98
7進数6桁の数値として考えればOK
107 :デフォルトの名無しさん2011/11/12(土) 21:28:12.24
>>99
ありがとうございます。
ただ、もしよろしければですが、コードを教えていただけないでしょうか。
100 :デフォルトの名無しさん2011/11/12(土) 17:27:25.98
CでホームページのCGIを組んでいる人っているのかな?
101 :デフォルトの名無しさん2011/11/12(土) 17:36:30.17
>>100
いる
102 :デフォルトの名無しさん2011/11/12(土) 18:03:53.75
>>100
そもそもこの2chのread.cgiはCだろ
103 :デフォルトの名無しさん2011/11/12(土) 18:11:40.61
2chもC言語で作られているのか。
それなら、Cを知っていれば、他の言語なんて
そんなに勉強する必要は無いのかな?
104 :デフォルトの名無しさん2011/11/12(土) 18:28:13.44
>>103
CGIを作りたたいなら、他の言語も学んでおいて損はない。
105 :デフォルトの名無しさん2011/11/12(土) 18:29:47.34
Cとアセンブラがあれば全てができる。
場合によっては他の言語処理系を作ることも含めて。
そう思っていた時期が私にもありました。

でも、現実に多くの言語があるのは、それが必要だからだよ。
それぞれにメリットとデメリットがある。
結論を言えば「用途による」としか言いようがないなぁ。

とりあえず C で CGI を作るのはあまりオススメできない。
109 :デフォルトの名無しさん2011/11/12(土) 21:33:51.60
>>105
お前が他の処理系を作れないだけだろ。
111 :デフォルトの名無しさん2011/11/13(日) 10:55:16.42
縦5px横pxの画像があります
どの位置が何色(RGB)なのかを調べたいのですが
どのように調べるのでしょうか?
112 :デフォルトの名無しさん2011/11/13(日) 10:57:57.46
win32apiにGetPixelというのがあるからそれで
114 :デフォルトの名無しさん2011/11/13(日) 11:01:50.71
>>112-113ありがとうございます
113 :デフォルトの名無しさん2011/11/13(日) 10:59:03.85
画像のフォーマットを調べてバイナリでファイルを読みこんで該当する位置のデータを調べる
115 :デフォルトの名無しさん2011/11/13(日) 13:47:41.59
前も質問した者です。
末尾に新しいセルを挿入したいのですが、先頭に入ってしまいます><

http://codepad.org/UDC0PS5l
117 :デフォルトの名無しさん2011/11/13(日) 14:11:48.82
>>115
これ先頭にも入らないだろ?
while(p->next != NULL)
にして最後にp->nextに入れろ
もちろんslist->headがNULLだったらわかってんだろうな
あとループがむかつく、slistにtailとか入れて最後のを保存しとけ
120 :デフォルトの名無しさん2011/11/13(日) 16:20:00.86
>>117
できました!ありがとうございます。
118 :デフォルトの名無しさん2011/11/13(日) 16:05:24.68
質問させて下さい。
多次元配列でchar a[N][M]のNの部分をreallocで拡張した場合、
元々格納されていた文字列は新しく確保した領域にコピーされているのでしょうか?
119 :デフォルトの名無しさん2011/11/13(日) 16:08:08.62
>>118
realloc はできません
121 :デフォルトの名無しさん2011/11/13(日) 16:23:35.31
>>119
回答ありがとうございます。
realloc出来ないんですか。。
ではこの場合Nを動的に拡張するには一般的にどういった方法があるんでしょうか?
122 :デフォルトの名無しさん2011/11/13(日) 16:26:15.06
>>121
char (*)[M]
という型の変数を用意します
124 :デフォルトの名無しさん2011/11/13(日) 16:35:28.87
>>122-123
回答ありがとうございます。
char a[N][M]のNとMの両方を動的に作成しようとしていたので困っていました。

125 :デフォルトの名無しさん2011/11/13(日) 16:46:24.69
>>124
両方動的にするなら
char**
126 :デフォルトの名無しさん2011/11/13(日) 19:22:34.08
switch文についてなのですが,breakを入れないと下にある文も実行してしまうと思うのですが,逆に利用して
switch (式){
case 値1:
case 値2:
処理A
break;
case 値3:
処理B
break;
default:
処理C
break;
}
とすることで,値1または値2の場合には処理Aを,値3で処理Bを,それ以外で処理Cを実行するといったことは出来るのでしょうか?
また,こういった書き方って嫌わられるものなのでしょうか?値1のところにも値2と同じ処理をコピペしておいた方がいいのでしょうか?
127 :デフォルトの名無しさん2011/11/13(日) 19:23:31.90
>>126
良くある手法
129 :デフォルトの名無しさん2011/11/13(日) 19:25:23.81
130 :デフォルトの名無しさん2011/11/13(日) 19:54:09.12
>>126
実際上、使う状況はかなり珍しいとは指摘しておく
しかもfall-throughがデフォルトなのは、珍しいどころかバグの元(breakの書き忘れ)なので
コメントで明示的にfall-throughだと書くぐらい

機械語の観点からすると自然な仕様なんだが、
最適化コンパイラが当たり前の現代ではC言語の欠陥
131 :デフォルトの名無しさん2011/11/13(日) 20:02:16.42
>>126
みたいにcaseが連続してる場合はいちいちコメントは入れないな。
処理があるのにbreakなしの時にはコメントを入れる。
処理があるのにbreakなしってことはめったにないけど、caseラベルが連続してるのは
ちょくちょくあるね。
138 :デフォルトの名無しさん2011/11/13(日) 22:44:05.46
>>126
case 値1:  と case 値2:  のあいだに何の処理も入れないなら、
意図も明白だし、なんの問題も無いような気がする。

switch (式){
case 値1:
処理A
case 値2:
処理B
break;

のような場合に、
「値1 の場合は、処理Aと処理Bを行い、値2の場合は処理Bのみを行う」という意味なのか、
「値1 の場合は、処理Aを行い、値2の場合は処理Bを行う、というつもりだったが、break を入れ忘れた」
のか判別しづらいってことが問題なのでは。
132 :デフォルトの名無しさん2011/11/13(日) 20:35:47.20
皆さんありがとうございます。
参考書にbreak必ず入れろみたいなことが書いてあったのでこういう使い方すると慣例的にダメなのか気になったんですが
使っても大丈夫のようで安心しました。
133 :デフォルトの名無しさん2011/11/13(日) 21:51:28.37
個人的に嫌いなやつがだだこねるだけ
goto アレルギーと全く同じ
134 :デフォルトの名無しさん2011/11/13(日) 22:01:35.24
必ず入れろというより、必要なところに入れ忘れるなって意味で書いてたんじゃないか?
135 :デフォルトの名無しさん2011/11/13(日) 22:05:45.61
caseからbreakまでを一行で書いてコロンとかセミコロンを縦でそろえるのが見やすいと思うんだけど職場が許してくれない
137 :デフォルトの名無しさん2011/11/13(日) 22:35:37.14
参考書じゃなくてWebでしたhttp://www9.plala.or.jp/sgwr-t/c/sec06-5.html
また,SBクリエイティブの基礎からのCには,break書かないのは行儀が悪いと書かれてました
まぁcaseという名前からすると直感的でない感じもします
139 : 忍法帖【Lv=40,xxxPT】 2011/11/14(月) 00:34:40.15
質問なんですけど、C++で強制的にadministrator権限で
実行をしたいんですが、どうすればいいのでしょうか?

質問なのでageさせてもらいました。
142 :デフォルトの名無しさん2011/11/14(月) 00:36:36.55
>>139
Win32APIスレへいきな
140 :デフォルトの名無しさん2011/11/14(月) 00:35:26.76
まず、服を脱ぎます。
141 : 忍法帖【Lv=40,xxxPT】 2011/11/14(月) 00:35:50.23
>>140
ネタはいらん
147 :デフォルトの名無しさん2011/11/14(月) 06:09:10.43
>>141
マルチしている奴が威張るな
145 :デフォルトの名無しさん2011/11/14(月) 01:54:49.21
C言語を知っていれば、なんでもできるように思うよね。
作者がいなくなっても、発展は続くのだろうか
146 :デフォルトの名無しさん2011/11/14(月) 02:35:17.49
>>145
C言語は今の状態で固定されたほうがいい
変な拡張するなら色々なシガラミを切り捨てて別言語にしてしまうのが吉
149 :デフォルトの名無しさん2011/11/14(月) 17:22:22.67
皆趣味でC言語のために使った費用どのくらい?
CPU代金くらいだよね?プログラミングほど金のかからないものはないよね。
情報処理系の学科進んで本当によかった。
152 :デフォルトの名無しさん2011/11/14(月) 17:58:14.66
>>149
言語オタクになると毎月の技術書代が・・・
何か一つの言語に集中した方が技術は身に付くし、金も掛からないんだろうな
175 :デフォルトの名無しさん2011/11/14(月) 23:09:25.96
>>149
ハード・ソフト込みでゼロ
趣味で大金つかったのはアセンブラ
BASIC は親のすねが大部分で、自分の稼ぎで買ったのはほんの数十万
177 :デフォルトの名無しさん2011/11/15(火) 01:35:50.81
>>149
C言語のためというかプログラムのために新しいビデオカード買ったりUSBカメラ買ったり あーそういえばタブレットも買ったなぁ
あとかわいい表紙の技術書買ってみたりググって参考にしたサイトが参考にしたという技術書をあさってみたりしてるぜ
タッチディスプレイも買ったし、あぁHMZだっけか?ソニーのヘッドマウントディスプレイも欲しいな
178 :デフォルトの名無しさん2011/11/15(火) 02:19:01.10
>>177
で、趣味でC言語のために使ったのは?
179 :デフォルトの名無しさん2011/11/15(火) 02:39:58.45
>>178
合計金額のことなら聞かないでくれ、計算したくない
最近はHacker's Delightって本買ったのが趣味でのC言語のための出費かな
ってかC言語のためにっての難しいな、趣味(と仕事)のためのC言語だし
150 :デフォルトの名無しさん2011/11/14(月) 17:35:23.70
1997年くらい前まではパソコン何て金持ちしか持ってなかった。
153 :デフォルトの名無しさん2011/11/14(月) 18:03:03.00
そうは言っても情報系の技術書って、高くても1万円を越えるのは珍しいくらいだろ。
美術系の専門書とか無茶苦茶高いぞ。
154 :デフォルトの名無しさん2011/11/14(月) 18:07:46.52
図書館で頼んでコピーすればいいじゃん
本で購入なんて、お前さん情強のくせにアナログなことしてんじゃねーよ
155 :デフォルトの名無しさん2011/11/14(月) 18:38:54.86
>>154
満足できる品揃えじゃ無いんでね>図書館

156 :デフォルトの名無しさん2011/11/14(月) 18:39:48.75
>>155
B型乙www
157 :デフォルトの名無しさん2011/11/14(月) 18:41:28.19
>>154
まともな本を書いてる人に金を落とすのが情強だろ
158 :デフォルトの名無しさん2011/11/14(月) 18:41:33.10
>>155
だから品揃えは自分で注文して良くするんだよ
160 :デフォルトの名無しさん2011/11/14(月) 18:42:28.67
>>157
俺は購入厨とは友達になれない。
163 :デフォルトの名無しさん2011/11/14(月) 18:48:59.54
>>160
こっちから願い下げだよ
164 :デフォルトの名無しさん2011/11/14(月) 18:53:27.04
>>163
少ない友達大切にしろよ購入厨。
159 :デフォルトの名無しさん2011/11/14(月) 18:41:43.59
てか俺の学校では、図書館で勉学に関係する本を図書の本として
買ってくれる制度があるんだがww
それで専門書頼めば買ってくれるかな。
161 :デフォルトの名無しさん2011/11/14(月) 18:43:04.45
学校じゃなくても普通の図書館なら注文ぐらい受け付けてるわ
162 :デフォルトの名無しさん2011/11/14(月) 18:45:37.87
>>161
まじで図書館って便利だよな。

俺今までにコンピュータ関連でハード以外金使ったことないわ。
165 :デフォルトの名無しさん2011/11/14(月) 19:10:24.45
市場経済は常にバカや弱者から搾取するためにあるんだぜ
金払わなくてもいいものに金払ったら負けだろ
168 :デフォルトの名無しさん2011/11/14(月) 19:18:46.43
>>165
そういう人の金の使いみちを知りたい
172 :デフォルトの名無しさん2011/11/14(月) 20:13:32.64
>>168
家賃とか光熱費とか言い出しそうでなぁ
166 :デフォルトの名無しさん2011/11/14(月) 19:15:19.52
時間の価値が低い人なら、そうやって金を払わないために手間をかけるのがいいんだろうな
173 :デフォルトの名無しさん2011/11/14(月) 22:30:34.19
食費は大丈夫か?
176 :デフォルトの名無しさん2011/11/15(火) 01:20:26.55
>>173
食糞に見えた
180 :デフォルトの名無しさん2011/11/15(火) 02:45:57.07
大学の学費くらいかな
卒業してからはLSIC-86試食版が手に入るまでC言語は使わなかったな。
C++もボーランドのフリー版が出るまでは使わなかったし・・・
181 :デフォルトの名無しさん2011/11/15(火) 02:48:19.60
趣味のC言語のために大学行くとは、世の中すごいやつがいるもんだな。
183 :デフォルトの名無しさん2011/11/15(火) 03:10:34.88
あ、趣味でVisualStudio買ったんだった
Vista以降にしてからそのバージョンだと起動時になんか言われるようになったから新しいの買おうかとも思ってるところ
186 :デフォルトの名無しさん2011/11/15(火) 03:20:44.47
>>183
管理者権限で起動しないとデバッガが動かない
184 :デフォルトの名無しさん2011/11/15(火) 03:15:25.05
趣味といっても、人生とか命とか全力でかけている奴もいる(というかむしろ多い)から
何?カジノで20億とか使ったという馬鹿は?こいつのせいで社員何人辞めることになるんだよ
185 :デフォルトの名無しさん2011/11/15(火) 03:20:06.86
主にCが絡んでる出費だと本が5万くらいで、ソフト(ライセンス)はMSDNぐらいかなぁ。
PC代は含めていいのか分からず。
最近は仮想化でいろいろ楽できるからいいなとおもう。
もしかすると本はもう少しかかってるかも。
187 :デフォルトの名無しさん2011/11/15(火) 03:22:22.62
大体趣味にいくら金をかけたかを計算したくないなんて思うようになったらそれはもう趣味じゃないよ。
興味がうせかけてる。
192 :デフォルトの名無しさん2011/11/15(火) 03:58:19.30
>>186
あれ?トレースデバッグとかできたような

>>187
ゲームにも結構な金突っ込んでるけどまだ飽きてないよ
そもそも金勘定嫌いな人なんで
188 :デフォルトの名無しさん2011/11/15(火) 03:23:38.29
VSって10万ぐらいするんじゃありませんでした?
安く買える学生のうちに買っておいた方がいいですかね
189 :デフォルトの名無しさん2011/11/15(火) 03:24:48.39
VSも種類があるから一概に言えないんだけど、とりあえず5万くらいからで。
でもとりあえずはExpressから使えばいいと思うよ。
190 :デフォルトの名無しさん2011/11/15(火) 03:25:40.12
って、学生ならなんかもっと太っ腹なことやってなかったかな。
開発用OSライセンス含めて無料ってやつ。興味があるなら探してみ
191 :デフォルトの名無しさん2011/11/15(火) 03:45:17.87
「いくら金かけたか計算したくない」ってのは、そんだけ金かけちゃったんだぜーwっていう自慢含みだろ
文字通りにしか解釈できないとか、アスペもいいとこ
193 :デフォルトの名無しさん2011/11/15(火) 04:47:42.93
総額?やめてくれよーwww
いっぱい使ってるから計算したくないんだよーってか計算嫌いだしwいっぱい使ってるけどねw
194 :デフォルトの名無しさん2011/11/15(火) 08:00:08.82
C言語なら本4冊程度。
VCとなると・・・ソフト代+5000円超えの本が6冊ぐらいかな。
195 :デフォルトの名無しさん2011/11/15(火) 08:35:32.59
学生ライセンスって卒業しても使ったらFBIが来てライセンス違反だ金を払えってなるんでしょ
200 :デフォルトの名無しさん2011/11/15(火) 12:04:12.87
>>195
卒業しても使用していいってMSが言ってたはず
あと昔は学校関係者じゃなくて、学生限定の激安(5000円弱)のもあった

でも今はタダで使えるExpressがあるからなぁ
ホビー用途ならこれで十分じゃね
196 :デフォルトの名無しさん2011/11/15(火) 09:19:10.78
そういえば、VS2005 だけど事情により管理者権限で動かしてないんだよな
今のところ実害ないけど(デバッグも普通にできてる)、何が動かないんだろう?
201 :デフォルトの名無しさん2011/11/15(火) 13:12:54.45
あれ、デバッガのための権限だったように思うけど、流れみてるとどうも違うっぽいのかな
ウソ情報すみませぬ
202 :デフォルトの名無しさん2011/11/15(火) 21:19:44.24
基本的に購入厨って仕事していて金持ちの人多いよな。
俺は学生で割厨だから、金かけてパソコン勉強してる人見るとリッチだなと思う。
203 :デフォルトの名無しさん2011/11/15(火) 21:28:46.31
C言語ってオブジェクト指向が理解できない人がやる初心者向けの言語ですか?
208 :デフォルトの名無しさん2011/11/15(火) 21:55:01.90
>>203
まさに、おまえさん向きということか
209 :デフォルトの名無しさん2011/11/15(火) 21:58:07.34
>>203
主人公の成長に合わせて育つ言語
204 :デフォルトの名無しさん2011/11/15(火) 21:30:13.43
オブジェクト指向言語を使わなくてもオブジェクト指向プログラミングができる人が使う言語
205 :デフォルトの名無しさん2011/11/15(火) 21:31:37.02
工業高校出身でC言語習った奴っている?どんな感じだった?
213 :デフォルトの名無しさん2011/11/15(火) 22:50:05.41
>>205
ポケコンのリセットボタンを乗っ取って、
試験のとき押されてもダミーを表示する感じだった。
206 :デフォルトの名無しさん2011/11/15(火) 21:34:21.25
卓球部だったけど、何で

コンピュータ部=BASIC
学科の授業=C言語

がデフォなんだろ・・
逆はない気がする。
211 :デフォルトの名無しさん2011/11/15(火) 22:11:21.92
>>206
それは表面しか見ていない論評だ
コン部の BASIC はマシン語ランチャ
207 :デフォルトの名無しさん2011/11/15(火) 21:53:08.09
いや、コンピュータ部で BASIC が全盛だった時期と、
学科で C が全盛だった時期にはタイムラグがあるだろ。
210 : ◆QZaw55cn4c 2011/11/15(火) 22:00:16.31
>>207
C の教科書が出始めたのは 1987年ごろだったかな。そのころは確か 8bit 機に統一OSの動きがあったかと。(S-OS"Sword" http://www.retropc.net/ohishi/s-os/)
212 :デフォルトの名無しさん2011/11/15(火) 22:18:27.82
sinxの式をテーラー展開で実装するプログラム作ってください。
どうなりますか?出力は16桁のfloat型でお願いします。

217 :デフォルトの名無しさん2011/11/16(水) 01:46:27.06
>>212
floatに16桁も精度はない。
214 :デフォルトの名無しさん2011/11/16(水) 01:05:09.55
おまえらC言語でどのくらい稼いでるの?プログラミングのバイトとかあるんだろ?
215 :デフォルトの名無しさん2011/11/16(水) 01:14:17.33
Cでプログラミングのバイトってあんまなくね?
web系ならたくさんあるけど
216 :デフォルトの名無しさん2011/11/16(水) 01:15:47.98
わざわざC言語を使うような仕事にバイトをあてるとか
金をドブに捨てるようなもんだ
218 :デフォルトの名無しさん2011/11/16(水) 01:58:45.77
>>216
そうなんだけど、中国に出しちゃったりするんだよね。あれもドブ
219 :デフォルトの名無しさん2011/11/16(水) 02:38:20.22
これからプログラミングを勉強しようと思って,今話題のC#から始めようと思ったんですが,
大学の友達に,C言語がまず基本だからCからやれというようなことを言われたんですけど,C言語からやった方がいいですかね?
いきなりC#をやるのは算数やらずに数学やるようなもの?
220 :デフォルトの名無しさん2011/11/16(水) 02:51:26.77
どちらがいいともいえない。
とりあえず両方手を付けてみて、続けられそうなほうをがんばればいいよ。
とっかかりはどちらも覚えることが多くて大変だろうけどね。

ちなみに最後の例えは、
πを3.14と覚えればそれでいい算数(C#)と
πをどうやって求めるかを学ぶ数学(C)の
どちらから始めるかって言うこともできるので。
221 :デフォルトの名無しさん2011/11/16(水) 05:07:10.62
なるほど.より本質的な理解をするために,まずC言語をやる必要がある,ということですね.
とりあえずC言語一通りやってからC#をやってみようと思います.ありがとうございます.
222 :デフォルトの名無しさん2011/11/16(水) 05:10:18.64
C#でやりたいことが決まってるなら、最初からそっちをやったほうがいい
224 :デフォルトの名無しさん2011/11/16(水) 07:12:53.47
一概にはいえない。他のスキルとかの兼ね合いしだい。
C言語のスキルだけで食っていけるという話なら、
自分でコンパイラ作っちゃえるぐらいのレベル。
225 :デフォルトの名無しさん2011/11/16(水) 07:40:17.69
>>224
コンパイラだって純粋なC言語のスキルだけじゃ作れないだろうがw
228 :デフォルトの名無しさん2011/11/16(水) 15:59:57.39
ぐぐって出てくるほとんどのアルゴリズムなどのソースはC
それらを書かなくても最低限のものが最初から用意されてるのがC#
231 :デフォルトの名無しさん2011/11/16(水) 17:10:30.53
>>228
しかしC#で用意されていないものを作ろうとしたとき、Cで書かれたアルゴリズムを参照することになる
236 :デフォルトの名無しさん2011/11/16(水) 19:30:41.70
>>231
それが必要になるくらいC#を使えるなら、
Cのコードもなんとか読めるくらいにはなってると思う。
229 :デフォルトの名無しさん2011/11/16(水) 16:00:52.78
基本を学んで色々な料理を上手に作れる料理人と
チェーン店で定型レシピの料理を上手に作れる料理人
どちらも本人次第で運が良ければもうかる
230 :デフォルトの名無しさん2011/11/16(水) 16:38:29.56
福島汚染野菜を平気で人に食わせられる腐った根性を持ってれば料理が微妙でも儲かる
232 :デフォルトの名無しさん2011/11/16(水) 17:23:16.22
あるものを使えということ自体は間違っていないが
もっといいものを作る気がないやつの来るところではない
233 :デフォルトの名無しさん2011/11/16(水) 17:30:29.70
コカコーラの秘伝の味に近づけるよう努力するのは無駄だということ
234 :デフォルトの名無しさん2011/11/16(水) 19:13:29.79
まずアセンブラから覚えないと
何をやっても砂上の楼閣だよ。
237 :デフォルトの名無しさん2011/11/16(水) 19:37:00.47
printf("%c\n",20,'*');
上の文の20って、どういう意味があるんですか?
239 :デフォルトの名無しさん2011/11/16(水) 19:47:24.98
>>237
>上の文の20って、どういう意味があるんですか?
10進数の20です。

第一引数の%cに20が対応しているので、ASCIIコード20が表示されますね。
表示できるキャラクタかしら?

それより第3引数は対応する変換器号がないから、どこかコードがおかしくないかな?
240 :デフォルトの名無しさん2011/11/16(水) 19:54:14.37
printf("%*c",20,'*');
じゃないの?
241 :デフォルトの名無しさん2011/11/16(水) 20:14:02.89
>>240
そうです、書き間違えしてしまいスミマセン。
これを出力すると、20文字分スペースが開いて*が出力されるのですが、
出力桁数を変えるには、%cの部分に20を書かなければならないと習ったので、この20はどういう意味なのだろう?
と思い質問させていただきました。
追記申し訳ないです
242 :デフォルトの名無しさん2011/11/16(水) 20:28:32.17
243 :デフォルトの名無しさん2011/11/16(水) 20:33:08.30
>>242
なるほど、*を付けると次の引数分スペースを開けて出力という意味になるのですか
ありがとうございました。
246 :デフォルトの名無しさん2011/11/17(木) 01:12:11.38
FFTのプログラムなんですが、実行するとSegmentation faultになってしまいます。
どこが原因なんでしょうか?

http://codepad.org/Sm40ZyMW
248 :デフォルトの名無しさん2011/11/17(木) 01:26:37.88
>>246
>fscanf(fpr,"%d",d);

fscanf(fpr,"%d",&d);

これじゃね?
ぱっと見だけでまじめに読んでないけど。

249 :デフォルトの名無しさん2011/11/17(木) 01:35:04.82
>>247
gdbを使おうとしたのですが、まだ良く分かっていなくて…

>>248
それでした!完全に見落としてました。
ありがとうございました。
247 :デフォルトの名無しさん2011/11/17(木) 01:16:08.82
デバッガ使ってないの?
250 :デフォルトの名無しさん2011/11/17(木) 01:36:35.19
俺Cはよく知らないんだけど、double sin(),cos();ってどういう意味なの?
255 :デフォルトの名無しさん2011/11/17(木) 04:54:24.86
>>250
昔の流儀で、プロトタイプ宣言の代わりに自前で関数を宣言している。
今なら、#include <math.h>で事が足りる。
251 :デフォルトの名無しさん2011/11/17(木) 02:04:35.99
double型変数sinとcosを0で初期化する
256 :デフォルトの名無しさん2011/11/17(木) 13:32:18.44
>>251
あほw
258 :デフォルトの名無しさん2011/11/17(木) 14:39:47.81
古のK&Rではコール側がお掃除する前提だから引数プロトタイプなんて飾りなんだよ
259 :デフォルトの名無しさん2011/11/17(木) 18:06:48.93
>>258
(・∀・)ニヤニヤ
260 :デフォルトの名無しさん2011/11/17(木) 18:07:29.88
>>258
アホすぐる
262 : ◆QZaw55cn4c 2011/11/17(木) 18:25:52.70
>>258
cdecl なら今でも。あと、構造体をもらったり返したりするようになってからは、やっぱりいるんじゃないかな。
261 :デフォルトの名無しさん2011/11/17(木) 18:18:37.91
すみません
関数の中にある、変数宣言や代入、他の関数の呼び出し、IF文など、まとめてなんと呼ぶんでしょうか?
ステートメントと呼んでいる文献もありましたが入門書だと触れてないのが多くて困っています。
名前なんてどうでもいいという意見もあるかも知れませんが・・・。
263 :デフォルトの名無しさん2011/11/17(木) 18:33:18.49
>>261
ステートメントか文でいいよ
264 :デフォルトの名無しさん2011/11/17(木) 19:17:07.14
>>261
入門書にイラつけるようになったら規格票買え
265 :デフォルトの名無しさん2011/11/17(木) 19:41:24.36
実数型変数で、指数部を符号なし整数として
オフセットを用いて表現するにはどうすればいいですか?
266 :デフォルトの名無しさん2011/11/17(木) 20:23:35.89
Cなら

return 2;
printf("d");

はOKだけど

javaだと

return 2;
println(3);

だとエラーがでる?

これはプログラミング言語のコンパイラ及び実行マシンのどのような
性質によるものか?

レポートの問題なんですが良く分かりません。
270 :デフォルトの名無しさん2011/11/17(木) 20:46:44.64
>>266
単純にそういう言語仕様だからってだけのような気がするけど、なんか深い理由でもあんのかね。
javaのほうが後発だからチェックが厳しくなってるとか。
267 :デフォルトの名無しさん2011/11/17(木) 20:25:40.60
つまり何故Cではreturnの後に処理がかけるのかっていうことです。
269 :デフォルトの名無しさん2011/11/17(木) 20:42:23.13
本当に「レポートの」問題だな
「OKだけど」とあるが、そのあと二重質問で「エラーが出る」のはなぜかになっている
271 :2662011/11/17(木) 21:09:21.88
>>269
嘘ついてすいませんw
自分が疑問に思った質問ですww


レポートと言ったら皆はりきってやってくれるかとおもいましたw
272 :デフォルトの名無しさん2011/11/17(木) 21:11:08.08
Cなら警告だね。まぁgotoで飛べるし、構文上も問題ないし余計なことは
しないっつーポリシーだからじゃね?
Javaだとエラー扱いなのか?
273 :デフォルトの名無しさん2011/11/17(木) 21:21:37.35
javaだとエラーなの?
暫定的に処理を打ち切りたいときとかめんどくさそうだね
274 :デフォルトの名無しさん2011/11/17(木) 21:25:54.19
苦Cが書籍化されたの今日本屋で見つけた
内容はwebとまったく同じだった
277 :デフォルトの名無しさん2011/11/17(木) 22:54:01.00
失礼します。
K&Rにしたがって以下のようなコードをコンパイルしました。
#include <stdio.h>
main(){
int c;

while( (c = getchar()) != EOF )
putchar(c);
}

実行したところ、入力した文字列はコピーされたのですが、その後入力待ち状態になります。
いろいろと実験したところ、getchar関数で最後に読み込まれている文字は'\n'のようで、
while文の条件式を(c = getchar()) != '\n'に変えると文字列コピー後プログラムが終了しました。
どうしてこのようにテキストと違う結果になるのでしょうか?
よろしくおねがいします。
278 :デフォルトの名無しさん2011/11/17(木) 22:55:12.98
>>277
君がそういう環境でやっているからだよ。
279 :デフォルトの名無しさん2011/11/17(木) 23:01:24.83
>>278
それはK&Rの想定するマシンでは最後に読み込まれるのはEOFだけれど、
自分のマシンでは\nになってしまっているためにwhile文が無限ループになっているという解釈で
良いのでしょうか?
280 :デフォルトの名無しさん2011/11/17(木) 23:04:07.92
>>277
DOSのときは、Ctrl-ZでEOFが入力できたから、windowsでも同じなんじゃないの?
unix系は知らないけどEOFを入力する方法があるはず。
282 :デフォルトの名無しさん2011/11/17(木) 23:44:11.03
>>277
unix系なら ^D で入力おしまい。
284 :デフォルトの名無しさん2011/11/17(木) 23:46:39.09
>>279
お前、Enterキーを押してないか?
285 :デフォルトの名無しさん2011/11/17(木) 23:58:03.08
>>284
押してますが・・・
わざわざEOFを>>280>>282のように手でEOFを入力しないといけなかったんですか?
てっきり自動的にEOFが最後に読み込まれるのかと思ってましたが・・・
286 :デフォルトの名無しさん2011/11/18(金) 00:02:57.81
>>285
標準入力から入ってくるものは改行も含めて全部読むんだよ。
だから改行を入力したらgetchar()は'\n'を返す。
何も読めるものがなくなったらEOFを返して終わりだって事を示すの。
281 :デフォルトの名無しさん2011/11/17(木) 23:23:48.56
RUBY参考書の文字列の所読んでたら、正則表現っていう言葉が出てきたんだけど
正規表現とか正則表現ってどういう意味ですか?

プログラムではなく言語の一般的な概念らしいけどどういうことですか?
掻い摘んで教えてください。
283 :デフォルトの名無しさん2011/11/17(木) 23:45:28.61
287 :デフォルトの名無しさん2011/11/18(金) 00:10:57.82
だから標準入力なら自分でEOFを入力するんですね。
みなさん長々とありがとうございました。
288 :デフォルトの名無しさん2011/11/18(金) 00:16:28.45
EOFを入力するんじゃなくて、特定の操作で入力を終わりにするんだよ。
そうしたらgetchar()はもう終わりだよという意味でEOFを返すの。

標準入力がファイルに繋がってる場合なら、getchar()を繰り返せば
ファイルの中身が「終わり」まで全部読めるわけ。
最初の1行だけとかじゃなくてね。
289 :デフォルトの名無しさん2011/11/18(金) 00:21:25.14
なるほど
上のCtrl+DなどはEOFという値ではなく、「入力終わり」を示してるってことですね?
理解が遅くて申し訳ないです。
290 :デフォルトの名無しさん2011/11/18(金) 01:53:56.15
いやいや、勘のいい方だと思うよ。
中には「EOFを入力する」なんて言い張るのもいるからね。
332 :デフォルトの名無しさん2011/11/18(金) 23:14:45.63
>>290
遅くなりましたがありがとうございました
いろいろとつながりました
291 :デフォルトの名無しさん2011/11/18(金) 03:12:08.11
ファイルにEOFを入力したいんだけど、どうしたらいい?
292 :デフォルトの名無しさん2011/11/18(金) 03:35:14.50
>>291
ネタはいいから。
294 :デフォルトの名無しさん2011/11/18(金) 09:33:42.86
ファイルにEOFを入力する方法はないの?
UNIXの場合なら、^D、DOSの場合なら^Zを
データとしてコンソールから入力したい時、
どうするの?
297 :デフォルトの名無しさん2011/11/18(金) 10:22:00.59
>>294
どうしても必要なら、unix系はsttyコマンドでeofを別の文字に割り当てられるけど、
エディタで予め作っておいた方がいいんじゃね?

298 :デフォルトの名無しさん2011/11/18(金) 10:25:18.35
>>294
ファイル内にEOFを書くためには
ファイルシステムから選びなおさないとダメだよ
FAT とか NTFS とか ext2 ext3 なんかはダメだね
296 :デフォルトの名無しさん2011/11/18(金) 10:06:03.96
scanf 関数で文字列を読み込む際、&が必要でない理由ってなに?
299 :デフォルトの名無しさん2011/11/18(金) 10:52:57.80
>>296
配列の場合、随所でCが勝手にポインタ型に変換するから。
char s[]; の場合、sと書くと、ほとんどの場所で自動的に &s[0] に変換される。
304 :デフォルトの名無しさん2011/11/18(金) 19:36:37.56
>>296
scanf()が欲しいのはデータを格納する先であり、変数の中身ではない。
だから殆どのものは変数名に&をつけ、変数の中身ではなく、場所をscanf()に教えている。
(つけないとそれはただの「式」であり、結果として変数の「中身」を渡してしまうことになる)

でも、文字列を読み込むときに与えるのは配列名。
[添字]を後ろにつけずに配列名だけ書いた場合、
それが意味するのは配列の内容ではなく「配列のデータを格納している場所」そのものだからね。
場所を与えているのだから、書かなくて正解なのよ。
300 :デフォルトの名無しさん2011/11/18(金) 12:56:57.71
wchar_tっていうのは文字列を対象としたアルゴリズムを書くのが楽だから存在してるんですか?
301 :デフォルトの名無しさん2011/11/18(金) 16:36:07.36
>>300
何も言わずにTCHARでググれ。
そして何も考えずに一番互換性のある文字型を使え。
302 :デフォルトの名無しさん2011/11/18(金) 16:47:59.36
TCHARなんてWindowsの世界に引きこもる時しか使えないし、
それが何なのか理解してないと混乱するばかりだと思うけど。
303 :デフォルトの名無しさん2011/11/18(金) 18:48:25.08
「ワイド文字」と「マルチバイト文字」でググった方が収穫が大きいと思う
305 :デフォルトの名無しさん2011/11/18(金) 19:42:20.59
utf8のファイルを読み込んで
そのまま出力したらバグるのはなんで?
306 :デフォルトの名無しさん2011/11/18(金) 19:43:32.23
>>305
ターミナルの設定ができてないから
308 :デフォルトの名無しさん2011/11/18(金) 21:08:26.05
char A[10];

for(i=0; i<10; i++)
{

for(j=0; j<10)A[j]=

}


forの中のforみたいに箱入り娘になってるA[]が

二重forを抜けたら元々のAに戻ってるのですが何故ですか?
二重forによって得られたAが欲しいのに二重forを抜けたら
その得られたAじゃない。
310 :デフォルトの名無しさん2011/11/18(金) 21:13:14.52
>>308
省略せずにソース全部書かないと、意味不明
322 :デフォルトの名無しさん2011/11/18(金) 22:39:55.71
http://codepad.org/Q8UjVj0k

%c で一文字ずつ表示しようが %sで表示しようが、ちゃんと動いてるよね。
>>308はいったいどこでC言語を学んだんだ。
もし入門書とかで勉強したなら、変な入門書は窓から投げ捨てろ。
333 :3082011/11/19(土) 13:08:41.13
>>308
その可能性ありでした。
ありがとうございました。
311 :3082011/11/18(金) 21:46:22.88
#include<stdio.h>
#include<string.h>
int main(void)
{
char C[10]; int i,j;
for(i=0; i<10; i++)
{
char G[10]; sprintf(G,"%d",1234);
for(j=0; j<10; j++){C[i]=G[j];printf("%c\n",C[i]);}
}
printf("C=%s",C);
}
何故か配列の値がforを抜けると変わっているという・・・ わけがわかりません。
313 :デフォルトの名無しさん2011/11/18(金) 21:50:37.10
>>311
途中で NUL文字が入るから
316 :デフォルトの名無しさん2011/11/18(金) 22:11:31.07
>>311-312
http://codepad.org/lVZY9Y7D

正しく動いてると思うけど?
312 :3082011/11/18(金) 21:48:44.60
#include<stdio.h>
#include<string.h>
int main(void)
{
char C[10]; int i,j;
for(i=0; i<10; i++)
{
char G[10]; sprintf(G,"%d",1234);
for(j=0; j<10; j++){C[i]=G[i];printf("%c\n",C[i]);}
}
printf("C=%s",C);
}

訂正しました。 j→i 下から4行目
314 :デフォルトの名無しさん2011/11/18(金) 21:56:59.39
>>312
それ、Cに"1234"って文字列が入る動作だけど、どう動いて欲しいの?
315 :デフォルトの名無しさん2011/11/18(金) 22:06:30.22
意味が分からんな。j のループ内で j 使ってないし。
C[0]=G[0] を10回実行して何がしたいんだ
「どうなってほしいのに」「こうなってしまう」って具体的に書いてくれ
317 :3082011/11/18(金) 22:26:27.93
それと、%cで一つずつ表示しようとすると、全部表示されるのに
例えば strが abc re tみたいなのだと、 %cで表示しようとすると
abc re tと出ますが

%s表示だと何も表示されません?何故ですか?

for(i){printf("%c",str[i])};←表示される

printf("%s",str);←表示されない

319 :デフォルトの名無しさん2011/11/18(金) 22:35:20.18
>>317
えろいマーク書く前に落ちついて。
ちゃんとでるよ
320 :3082011/11/18(金) 22:36:26.91
>>316
すいません・・・
結局>>317につきました・・・
323 :3082011/11/18(金) 22:41:00.29
表示されないんですが・・・

何故でしょう?

forの二重の前にchar Aと宣言してるんです。

二重の中でAに文字が代入されて

さぁprintf("A=%s",A);とするとA=    となるんです。
でもfor(i=0; i<10; i++)printf("%c",A[i])とすると、
abc re とでます。
何故でしょう?
string.hはちゃんとヘッダで読み込んでます。
326 :デフォルトの名無しさん2011/11/18(金) 22:50:13.18
>>323
Aは初期化してるの?
変数は宣言したら初期化しておかないと変なバグを生み出す可能性があるよ。

いったい何がやりたいんだろう?
324 :デフォルトの名無しさん2011/11/18(金) 22:43:19.67
K&R第二版以外の本で勉強するからそんなことになるんだよ。
325 :3082011/11/18(金) 22:48:20.65
#include<stdio.h>
#include<string.h>
int main(void)
{

char A[10];

A[0]='S';


printf("%s",A);

}

の場合はちゃんとSがでました。\0を入れてないから文字化けした部分はありますが。
328 :デフォルトの名無しさん2011/11/18(金) 22:54:06.37
末端が \0 で終わって無くて
ごみ中の CR を受けて表示端末行頭に戻って
(でも LF居ないので次の行にいかず)
続く文字が非表示可能文字かスペースで消された
なんてことはないよな?

リダイレクトしてファイルに出力:バイナリエディタで確認すりゃわかるかもしれないが
331 :3082011/11/18(金) 23:06:32.17
>>328
あ、その可能性かもしれません。
ちょっと調べます。
329 :デフォルトの名無しさん2011/11/18(金) 22:56:59.86
それが起こりうる状況を提示できるならその可能性があるといってもいいが、ないよね。
330 :デフォルトの名無しさん2011/11/18(金) 23:00:25.71
いったい何がしたいんだ?
表示されないと言っているが、どう表示してほしいんだ?
デバッグしてやるからソース全文さらせ。
335 :デフォルトの名無しさん2011/11/19(土) 16:35:04.56
基本的にシステムコールだけ(fopenなどではなくopenなど)を使ってUNIXでいう"cat -n"の単純機能を実装しようとしています。

しかしバッファを1バイトずつ読んでいって"\n"があったらその場所に行番号をfprintfで追加していくようにしても、
ファイルの中身が最終行まで全部出力された後に、行番号がまとめて出力されてしまいます。。。

ファイルをreadした後は、writeとcloseが実行されるまで、fprintfの中身の出力は追加できないのでしょうか?
どなたか詳しい方、教えていただけませんか?
336 : ◆QZaw55cn4c 2011/11/19(土) 16:38:16.22
>>335
http://codepad.org/
fflush()
337 :3352011/11/19(土) 16:52:32.70
>>336
あんたが ネ申 ですか

すげぇ・・・すげぇよ・・・俺の10時間は何処へいった
338 :デフォルトの名無しさん2011/11/19(土) 17:10:39.43
>>335
>行番号をfprintfで追加して

行の本体も、その時に編集すればいいのに。
339 :3352011/11/19(土) 17:42:58.92
>>338
それってバッファ自体を変更するってことですか?
そんなの可能なんでしょうか・・・?
420 : ◆QZaw55cn4c 2011/11/20(日) 15:11:43.44
>>412
>「俺は実はすごい人なんです。うふふ」的な演出を所々に挟むのは控えたほうがいい。

そっかー。
身の丈でお話しているつもりで、そんな演出意図はぜんぜんないのですけれども、そうなってしまうのですか‥‥‥。
ちょっと考えていましたが、とりあえず >>336 の方針でやっていこうと思っています。
340 :デフォルトの名無しさん2011/11/19(土) 17:57:35.36
#include <stdio.h>
void print_array(int size,int *a[]);

int main(void){
int b[3];
print_array(3,&b);
printf("%d",b[0]);
printf("%d",b[1]);
return 0;
}
void print_array(int size,int *a[]){
int i;

for(i=0;i<size; ++i){
*a[i]=1;
}
}

ユーザ関数内で得たものを配列に入れて返したいのですが
上のプログラムだとコンパイルすると
警告 W8075 a.c 8: 問題のあるポインタの変換(関数 main )
と出て実行すると停止してしまいます。
どうすればよいのでしょうか?
341 : ◆QZaw55cn4c 2011/11/19(土) 18:02:56.28
342 :デフォルトの名無しさん2011/11/19(土) 18:15:01.91
>>341
&bをbにすれば良かったんですね!ありがとうございます。
ちなみにどうしてただの変数を返す時と違って配列では&を使ってはいけないのでしょうか?
344 :デフォルトの名無しさん2011/11/19(土) 18:32:45.83
>>342
配列の場合、配列名自体が先頭アドレスを指しているので
&b[0]と同じ意味を持つからです。
345 :デフォルトの名無しさん2011/11/19(土) 18:41:32.88
>>340
これで型の整合性は合うんじゃないかな?
可変長配列をサポートしていなければ、int (*a)[3]にしないといけないけどね。

#include <stdio.h>

void print_array(int size,int (*a)[size]){
int i;

for(i=0;i<size; ++i){
(*a)[i]=1;
}
}

int main(void){
int b[3];
print_array(3,&b);
printf("%d",b[0]);
printf("%d",b[1]);
return 0;
}
343 :デフォルトの名無しさん2011/11/19(土) 18:28:03.54
これはCの宣言を解析するコードなんですが、
ttp://codepad.org/FXbWcoKj
読みにくいので
ttp://codepad.org/pnBO3znk
このように書き換えましたが、多次元配列を解析する場合、入力と出力される型が
異なります。三項演算子からif文に直している部分の直し方が多分変だと思うのですが、
バグの原因が分かる人おられますか。
395 :デフォルトの名無しさん2011/11/20(日) 07:52:20.20
>>343
9行目
:w("array of "),t(93) の解釈がおかしい
t(93)がカンマ演算子でくっついてるのは直前のw("array of ")ではなく
t(0)==32?からの三項演算子式だ

だから>>343のでいうとt(93);はif (t(0) == 32){..}else{..}の後になる
346 :デフォルトの名無しさん2011/11/19(土) 18:59:26.15
b を 3 で宣言してるのに可変長で渡す意味は皆無
しかもプロトタイプ逃げてるし
憶えたての厨二コードだな
369 : ◆QZaw55cn4c 2011/11/19(土) 22:48:42.34
347 :デフォルトの名無しさん2011/11/19(土) 19:25:44.49
>343
ちゃんと確認していないが、D()の中のwhile()の条件を関数外出しとかしてから、綺麗にしてみたら?
パッと見、
Wが40の時に return (t(0),printf("func returning "),t(41));
Wが91 && t(0)==32 の時に return (printf("array[0..%d] of ",atoi(X)-1),t(0));
Wが91 && t(0)!=32 の時に return (printf("array of "),t(93));
それ以外 return 0;
だろ?
349 :3352011/11/19(土) 20:17:20.05
すいません、質問させて下さい。

先ほど同様、基本的にシステムコールだけ(fopenなどではなくopenなど)を使ってUNIXでいう"cat"コマンドのように
ファイル名・開始行・終了行を指定してやると、ファイルの内容(行番号付き)が指定した開始行から終了行までのみ表示されるような
プログラムを実装しようとしています。

しかし行番号は指定した通りになるのですが、肝心のファイルの内容が指定した行の通りに出力されません。
どうしたらいいのでしょうか?どなたか教えて戴きたいです。

現時点のコードは以下の通りです.
http://codepad.org/U8HzseFI
350 :デフォルトの名無しさん2011/11/19(土) 20:39:25.27
肝心のファイルの内容
を printf なり汁w
353 :3352011/11/19(土) 21:08:51.86
>>350
いやもちろんwrite()やってるんで出力はされるんですが
たとえば

$ ./a.out test.txt 4 8

4 <01行目の内容>
5 <02行目の内容>
6 <03行目の内容>
7 <04行目の内容>
8 <05行目の内容>

みたいになるのです。
1バイトずつread()して、if文を使って指定行の範囲内でのみwrite()するようにしているのですが・・・。

readしたものをwriteしないまま再びreadをすると、次にwriteした時に、前回writeしなかったものもまとめてwriteされるという事でしょうか?
よく分からないのですが、これを解決するにはlseekとかを使えばいいのですか?

365 : ◆QZaw55cn4c 2011/11/19(土) 22:10:57.12
>>353
http://codepad.org/
read/write 系と stdio.h とを一緒に使わないのが近道
351 :デフォルトの名無しさん2011/11/19(土) 20:46:13.30
つーか、ファイルの中身をwrite()で出力するのに行番号だけprintf()するってのが間抜けすぎるんだけど、
なぜ低レベルI/Oを使うの?
354 :3352011/11/19(土) 21:09:34.04
>>351
低レベルIOでcat -nコマンドとその発展を実装するという課題だからです
355 :デフォルトの名無しさん2011/11/19(土) 21:12:13.35
>>354
じゃあ sprintf 使って作った文字列を write したほうが早くね?
357 :デフォルトの名無しさん2011/11/19(土) 21:31:42.12
>>355
俺もそれ知りたい

kwsk
352 :デフォルトの名無しさん2011/11/19(土) 20:59:11.35
エディタのようなインタラクティブな動きをするんじゃなきゃ、
文字列出力に低レベル I/O を使う必要は無いと思うんだがな。
356 :3352011/11/19(土) 21:31:23.87
すいません知識不足でよく分かりません。どういう事ですか?

read -> 改行を発見したらsprintfで行番号を追加 -> writeということでしょうか?
358 :デフォルトの名無しさん2011/11/19(土) 21:32:35.86
ってゆーか、指定の"4行目から"writeしてないだけじゃんw

行番号変数だけは指定の4から開始しているが、
無条件に1行目からwriteしてる
(んで、行番号が指定に達したら停止しているけど)
366 :3352011/11/19(土) 22:12:27.43
>>358
oh... まさにその通りですね。。。
17行目でlinenumの初期値を1ではなく linenum = atoi(argv[2]); 
としてしまっていたせいでファイルの中身が最初から表示されてしまっていました。

今思うと明らかに意味不明なのに自分じゃ気づかないものですね・・・ご指摘本当にありがとうございます。。助かりました、。。
360 :デフォルトの名無しさん2011/11/19(土) 21:52:26.46
問題点が三つある。
・行番号の数え方が間違っている
・read(), write()を使う課題でprintf()を使っている
・改行文字のみならず復帰文字まで改行と扱っている
361 :デフォルトの名無しさん2011/11/19(土) 21:54:17.86
>>360
・readしたものを全てwriteしないで該当行まで捨てるだけだな。
・本人がいいと思うのならいいんじゃね?
・本人が(ry
367 :3352011/11/19(土) 22:19:26.75
>>360
・行番号の数え方が間違っている
→解決しました.ありがとうございます。

・read(), write()を使う課題でprintf()を使っている
→すいません、勉強不足なもので。。
fprintf(stdout, %d, x)でもやはりだめなのでしょうか?

・改行文字のみならず復帰文字まで改行と扱っている
→read()とwrite()で一文字ずつ読んでいった時の挙動が分からなかったのでとりあえず\rと\nと\r\nのどれが来ても改行
結果として改行が2回続いていても行番号が1つしか出力されないバグが出来ましたが・・・。
こちらもどうすればいいのかご存じでしたら教えて戴きたいです。
368 :デフォルトの名無しさん2011/11/19(土) 22:29:50.65
>>367
>361も書いているけど、仕様の問題だから教えるもへったくれもないよ。
363 :デフォルトの名無しさん2011/11/19(土) 22:05:41.60
C言語の方からプロンプトの設定を指定することはできないんですか?
UTF-8のchar配列を出力して文字化けしないようにしたいのですが
そういうことはできなくて毎回shift-jisに変換しないとだめなのでしょうか?
370 :デフォルトの名無しさん2011/11/19(土) 23:07:06.29
もうすぐ年号が変わりそうだね
忙しい時期に仕事が増える
371 :デフォルトの名無しさん2011/11/20(日) 00:42:11.16
すんません
こんな感じで配列に何度も数字を入れなおしたら
メモリ消費とか酷くなりますか?

int a[50]
while(j=1000){
for(i=0;i<50;i++){
a[i]=i;
}
j++
}
373 :デフォルトの名無しさん2011/11/20(日) 00:53:06.06
>>371
アセンブラでも少しは覚えたほうがいい
374 :デフォルトの名無しさん2011/11/20(日) 00:53:17.90
>>371
ならない。
メモリアロケーションは int a[50] の分だけ。
何度読み書きしようとメモリ消費量が変動したりはしない。
376 :デフォルトの名無しさん2011/11/20(日) 00:58:25.07
>>373
アセンブラの前に、
アセンブラはCPUを設計出来るようになってからやるべき
コンピュータの基礎が全くない奴がプログラムなんて作れない
378 :デフォルトの名無しさん2011/11/20(日) 01:04:57.08
>>376
こいつ最高にバカ
379 :デフォルトの名無しさん2011/11/20(日) 01:10:14.01
いま学校でverilogでCPU設計をやっているが
ようやくCPUが何をしているのか理解出来るようになった
マになった奴って学校でCPUの設計やらされたんじゃないのか
382 :デフォルトの名無しさん2011/11/20(日) 01:21:19.55
>>379
学校でやるレベルだとストップウォッチを作ってみましょうで終わるんじゃないの?
HDL か RTL か C 記述かで変わるんだろうけど
384 : ◆QZaw55cn4c 2011/11/20(日) 01:32:01.20
>>379
kwsk! kwsk! kwsk!
385 :デフォルトの名無しさん2011/11/20(日) 01:50:06.96
>>384
チャールズペゾルドのCODEって本読むといいよ
391 : ◆QZaw55cn4c 2011/11/20(日) 02:18:46.24
>>385
petzold氏 って Windows 以外の本も書いてるんですねえ。(Programming Windows 3.1 以来ご無沙汰ですけどね)
でも、目次を見るかぎりは、CPU の作り方 http://www.amazon.co.jp/dp/4839909865/ のほうが面白そう。amazon の個人お勧めリストにもいろいろとあるようですけれども。

それはそうと、verlog でどのくらいの規模の cpu を書いてるんですか?kwsk! kwsk! kwsk!
392 :デフォルトの名無しさん2011/11/20(日) 02:42:08.79
>>391
むしろどの規模なら書いたことあるの?
393 : ◆QZaw55cn4c 2011/11/20(日) 05:21:04.97
>>392
cpu はない。xilinx/spartan3e/10万ゲートor2000ロジックのおもちゃで遊んだことなら。なんだかいろいろ積み上げていくうちに急に動かなくなってしまった記憶があります。
えーと、たぶんこれ:http://www.amazon.co.jp/dp/4789838617/
386 :デフォルトの名無しさん2011/11/20(日) 01:54:04.12
Segmentation faultについて教えてください。
linux上でアプリケーションを作成しました。
シェルがプログラムAとプログラムBを呼び出します。

プログラムAがプログラムCをSYSTEMで呼び出します。

暫く実行すると、プログラムCがSegmentation faultかabortで終了します。
ただし、シェルで呼び出しているプログラムBをコメント化すると、Cが落ちることはなくなります。
プログラムBは単純に内部でSYSTEMコールで外部プログラムを起動するだけのものです。
(呼び出す外部プログラムは計算を行うPGですが、数秒で終了します。)

そもそも、Segmentation faultが、Cでのコードにより発生する要因として、
添え字の範囲外はmallocのfree忘れくらいしかないと思いますが、他になにかありますか?
387 :デフォルトの名無しさん2011/11/20(日) 01:57:33.02
>>386
プログラムCが悪い
プログラムBは無実

プログラムCが無効なアドレスを読み書きしようとしているのが原因
388 :デフォルトの名無しさん2011/11/20(日) 01:58:31.92
>>386
ファイル操作とかはないの?
389 :デフォルトの名無しさん2011/11/20(日) 02:08:02.55
>>387
ところが、プログラムBの機能をプログラムAに入れると、
今度はプログラムAがSegmentation faultで落ちだします。
反面、Cが落ちることは何度か動かしましたが、確認していません。
Aに追加した場合、単純にSYSTEMコールを行うスレッドをループさせているだけなのですが。。。

>>388
ファイル操作はあります。
ただ、繰り返しでオープン、クローズを繰り返したりはないのですが。。。
書き込みファイルをオープンしたままで、プログラムCは書き込み続けます。

プログラムBはプロセスを大量に生成しますが、それは問題ないのでしょうか?
system()を使用し、同期させてますので、Bが同時に子プロセスを大量に作成することは無いし、
呼び出したプロセスが残ってる訳でもないのですが、
新しいプロセスを作るたびになにかしらの資源が消費されたりするのでしょうか?
前のプロセスは終了してるのもかかわらず。。。
390 :デフォルトの名無しさん2011/11/20(日) 02:10:46.76
>>389
それならプログラムBとプログラムCの共犯だな
394 :デフォルトの名無しさん2011/11/20(日) 06:40:10.06
調べるのに時間かかったか
401 :デフォルトの名無しさん2011/11/20(日) 09:50:06.61
>>394
Qは大嘘付きだからな
野田みたい
419 : ◆QZaw55cn4c 2011/11/20(日) 15:06:39.90
>>407
それがC99 で変わった。
ISO/IEC 9899:1999 6.7.5.3.14
An identifier list declares only the identifiers of the parameters of the function. An empty
list in a function declarator that is part of a definition of that function specifies that the
function has no parameters. The empty list in a function declarator that is not part of a
definition of that function specifies that no information about the number or types of the
parameters is supplied

つまり、int main() { ... } のように、part of definition of that funcsion ――関数宣言と同時に関数の内容も同時に定義している場合には、
int main() は no parameters、すなわち int main(void) と同じ。
すなわち
>>406 が厳密にあてはまって、どちらでもいい。

>>401
せめてここまで記述できるぐらいにまで成長してほしいものですが、百年一日なんにも変わらないのは、もう obsolete ―精神的に干上がった―なのでしょうか?
396 :デフォルトの名無しさん2011/11/20(日) 08:06:42.09
つうか、 Segmentation fault なら、
core 調べりゃどこで起きたかわかるっしょ。
それ調べずに憶測で話をしててもしょうがない。
398 :3082011/11/20(日) 09:44:40.59
実行結果
> 2 13
こうなります・・・何がまずいのでしょうか? 本当は
>2 13
>2 13
こうなって欲しいのですが・・・
399 :3082011/11/20(日) 09:46:55.04
3行目の空白埋めました。
#include<stdio.h>
int main(void){
char x[10];char y[10];int i;sprintf(x,"%d",123);
for(i=0;i<10;i++)y[i]='\0';y[4]=x[0]; y[2]=x[1]; y[5]=x[2];
printf("%s",y);putchar('\n');
for(i=0; i<10; i++)printf("%c",y[i]);}
訂正しました・・どこが悪いのでしょうか?
402 :デフォルトの名無しさん2011/11/20(日) 10:00:53.28
>>399
スレの上のほうを見るのが面倒だから見てなくて、なにをやりたいのかいまいちわからないけどこんな感じ?
#include <stdio.h>
int main()
{
char x[10];
char y[10];
sprintf(x, "%d", 123);
y[0] = x[0];
y[1] = x[1];
y[2] = x[2];
y[3] = x[3];
printf("%s\n", x);
printf("%s\n", y);
return 0;
}
405 :デフォルトの名無しさん2011/11/20(日) 10:40:55.17
>>399
あのさぁ、printf("%s",y); ってしてるけど、y[0]に何が入ってるか理解してるよね?
y[0] == '\0' だからmainからprintfに入った時点で文字列は終端を迎えていると判断されるんだけど。
残りのy[1]からy[9]までは表示されないよ?

y[4]=x[0]; y[2]=x[1]; y[5]=x[2]; ではなく y[0]=x[1]; y[1]=x[0]; y[2]=x[2];
にしてみれば?
411 :3082011/11/20(日) 12:54:59.06
>>405
なるほど!!!'\0'の性質今やっと知りました・・
一応xとyの添え字の対応はランダムです。
ってことは,必要な所以外は' 'のスペースをいれておけばいいのですね。
ありがとうございます・・
403 :デフォルトの名無しさん2011/11/20(日) 10:12:52.26
すみません、初心者ですが
int main()

int main(void)
どちらでもいいんですか?
406 :デフォルトの名無しさん2011/11/20(日) 11:02:43.69
>>403
どちらでもいいよ。
407 :デフォルトの名無しさん2011/11/20(日) 11:14:51.26
>>403
Cの場合、main() は、引数があるのかもしれない(引数の個数は不定)
C++の場合、main() は、main(void)とおなじ(引数がない)
408 :デフォルトの名無しさん2011/11/20(日) 12:12:49.11
>>404
>>406
>>407
ありがとうございます。
意味がわかるまではint main ()
にしときます。
404 :デフォルトの名無しさん2011/11/20(日) 10:17:31.43
下にするべし
410 :デフォルトの名無しさん2011/11/20(日) 12:51:42.27
意味がわかるまでは、省略しない書き方で覚えた方がいいと思った
414 :デフォルトの名無しさん2011/11/20(日) 13:41:35.58
>>410
どうだろなあ。
CとC++の区別がハッキリ判るまでは省略形のが良い気がするけど。
412 :デフォルトの名無しさん2011/11/20(日) 13:05:37.48
とりあえず、いつも実行可能な一式のソースコードを提示しつつ説明するQZの姿勢には、素直に感心する。
あと、初心者の質問に、わざわざ実ソースコードを書いて親身に説明するところも感心するし、尊敬もする。普通はめんどくさくてやらない。
QZは、普通に良コテになれる素質は十分にある。

とりあえず演技でもいいから、「俺は実はすごい人なんです。うふふ」的な演出を所々に挟むのは控えたほうがいい。
それだけで印象は大分変わる。
反感買いそうな憎まれ口的な要素を含んだ発言は、コテ外してやった方がいい。いつもコテ付ける正直者もいいけど、
その辺は要領良く使い分けようぜ…orz
413 :デフォルトの名無しさん2011/11/20(日) 13:10:29.16
>>412
ちゃんとコテつけて書きこめよ、Q
422 :デフォルトの名無しさん2011/11/20(日) 15:26:32.95
>>412
無理だろ
Qは人格障害だから
425 :デフォルトの名無しさん2011/11/20(日) 15:38:24.24
>>412はバレバレの自作自演(ノ∀`)'`,、'`,、'`,、'`,、'`,、
415 :デフォルトの名無しさん2011/11/20(日) 14:02:50.03
教わる・覚えるのは、CとC++のどっちかなんだから、
その言語の規定に従って記述すべき。
省略は、意味が分かってからでもできる。
416 :デフォルトの名無しさん2011/11/20(日) 14:14:18.41
明示的に書くほうがどっちの言語にしろ良いんだからそれぐらいのタイプケチってどうする
417 :デフォルトの名無しさん2011/11/20(日) 14:39:08.18
>>416
いや、ケチるんじゃなくて
たまたま動く誤った記法になり得る記法を続けるよりは
一応どっちでも正しく通る記法を使ったほうがよくね?
421 :デフォルトの名無しさん2011/11/20(日) 15:23:47.64
C言語のコマンドプロンプトの実行結果を
いちいち下に表示していくんじゃなくてアニメーションみたいにするにはどうすればいいですか?
423 :デフォルトの名無しさん2011/11/20(日) 15:33:32.28
>>421
アニメーションと言うわけにはいかないけれど、改行文字の代わりに復帰文字を使ってはどうだろう。
435 :デフォルトの名無しさん2011/11/20(日) 16:31:51.88
>>421
まず用語の意味を正しく覚えよう。
427 :デフォルトの名無しさん2011/11/20(日) 15:54:22.94
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10007
ここの>ただし、この問題は以下に示すようにいくつかのデータセットが与えられることに注意して下さい。
に対する、関数が宣言できずに困ってます。
とりあえず,int k[20]; でつくって提出しましたWrong Answerになってしました。
提出したソース
#include <stdio.h>
int main()
{
int i,j,count;
int k[20];
i = 0;
count = 0;
while(1){
scanf("%d",&k[i]);
if(k[i] == 0)break;
i++;
count++;
}
for(j=0;j<count;j++)
printf("Case %d: %d\n",j+1,k[j]);
return 0;
}
428 :デフォルトの名無しさん2011/11/20(日) 15:58:08.95
>>427
問題読んだ?
リンク間違い?
429 :デフォルトの名無しさん2011/11/20(日) 15:58:42.56
431 :デフォルトの名無しさん2011/11/20(日) 16:10:47.42
>>429
一行単位で扱うようにして fgets
数値かどうか判定して sscanf
逐次出力 配列いらない
すればいいんじゃね?
438 :デフォルトの名無しさん2011/11/20(日) 16:49:30.73
>>429
ありがとう。暇つぶしによさげだわw

ちなみに、こんな感じのコードを提出したらAcceptedになりました。
http://ideone.com/rtZqP
440 :デフォルトの名無しさん2011/11/20(日) 16:55:48.66
>>429
realloc()とか使ったらだめなん?
配列の大きさを決め打ちするとWrong Answerになるならvectorみたいな
コンテナがいいけど、頑張ればCでも書けない事もない
441 :デフォルトの名無しさん2011/11/20(日) 17:15:43.51
>>429
いささかトリッキーだけど、Cでもこういう風に書けばメモリの許す限りデータを入力出来る

http://ideone.com/KBxEV
430 :デフォルトの名無しさん2011/11/20(日) 16:07:18.46
Cで指数関数を求めているのだが
小数第15位(double)くらいまで近時させるにはどういった計算をすべきだろう?
おしえてエロい人。
432 :デフォルトの名無しさん2011/11/20(日) 16:11:28.95
>>430
exp(x, y)
433 :デフォルトの名無しさん2011/11/20(日) 16:15:22.31
>>432
すまんこ
説明不足だったライブラリ無しで作ってる
ちなみに今はe^x = 1 + Σ(x^n)/n!
これだと一つの項が大きくなりすぎて切り捨てられてしまう。
434 :デフォルトの名無しさん2011/11/20(日) 16:21:48.82
>>430
int a[20];
1.23456789なら
a[0]=1;
a[1]=2;
とかやって、n倍、桁上がりを自分で実装か?
436 :デフォルトの名無しさん2011/11/20(日) 16:32:54.55
>>433
これで
有効桁数15桁じゃなくて常に小数点以下15桁が必要なら多倍長演算しないとダメ
#include <stdio.h>

double myexp2(int x, int n, double x_n_n)
{
if(x_n_n<1.0e-16) return 0.0;

return myexp2(x, n+1, x_n_n*x/n)+x_n_n;
}

double myexp(int x)
{
return myexp2(x, 1, 1.0);
}

int main(void)
{
printf("%.20f\n", myexp(5));

return 0;
}
439 :デフォルトの名無しさん2011/11/20(日) 16:51:31.78
>>433
積み残し誤差が問題なら後ろ側から足してけ

小さい方から足すと積み残し誤差は最小限に抑えられる
浮動小数点数の宿命だな
442 :デフォルトの名無しさん2011/11/20(日) 17:47:39.28
>>434 >>436 >>439
色々と助言ありがとう
実戦してみる
443 :デフォルトの名無しさん2011/11/20(日) 17:55:54.10
んふー。ラムダ式使ったら弾かれたw
444 :デフォルトの名無しさん2011/11/20(日) 18:19:47.00
>>443
topcoderいきな
445 :デフォルトの名無しさん2011/11/20(日) 19:33:03.92
topcoderって登録に大学名入力しないといけないの?
俺専門(笑)何だけど
447 :デフォルトの名無しさん2011/11/20(日) 20:03:09.57
複素数型の配列を用意して、
この配列の各要素に、10進数の各位の数をセットしたものを、多倍長型として定義して、
この多倍長型同士の掛け算関数も実装して、
多倍長型を使って適当に固定小数点数として扱ってA,Bを乗算すれば、仕組みがシンプルで簡単じゃね?
448 :4472011/11/20(日) 20:04:39.47
まちがえた。
複素数じゃなくて、普通のchar型配列とかでいいですw
450 :デフォルトの名無しさん2011/11/21(月) 02:26:59.48
失礼します。
引数を二つ持った再帰関数の問題なのですが、
停止条件がなぜ1ではなく(base)になるのか理解できません。
停止条件を1にしてみると27になり、1乗分足りないようです。
なぜなのでしょうか?
自分なりに調べましたが、引数を2つ持った再帰関数の情報が見つけられませんでした、
お手数とは思いますが、よろしくお願いします。

#include<stdio.h>
int power (int ,int);
int main (void){
printf("%d\n",power(3,4));
return(0);
}

int power (int base ,int exponent){
if(exponent == 1)
return (base);
else{
return(base * power(base,(exponent-1)));
 }
}
452 :デフォルトの名無しさん2011/11/21(月) 03:03:02.92
再帰やループで詰まったら一回一回手書きしてみるとだいらい原因がわかる。
453 :4502011/11/21(月) 03:35:34.08
解りました!!
if(exponent == 1) return (base);
つまり、baseの1乗はbaseなので、1乗になったらbaseを返す。
if(exponent == 0) return (1);
baseの0乗は1、0乗になったら1を返す。解ってしまえば当たり前な事でした。
再帰一回分余計になるからこうなっているのですね。
階乗の停止条件を形だけでしか見れていなかったようです。

return(base * power(base,(exponent-1)));
ここの理解も曖昧だったのですが、
手書きでなぞってみたら
return(base * 3);
return(base * 9);
return(base * 27);
と帰っていく流れが掴めました。
(base * power(base,(exponent-1)))
停止条件のreturnからbaseを返してもらって、
(base * base)
(base * (base * base))
(base * (base * base * base))
最後にprintfに81を返すと。

良かったです、ありがとうございました。
つぎはハノイの塔に挑戦してきます。
454 :デフォルトの名無しさん2011/11/21(月) 06:41:25.81
do-whileの所を教えてください。

#include <stdio.h>
int main(void)
{
int num = 0;
int sum = 0;
printf("計算したい数字を入力(0で終了)\n");
do{
scanf("%d", &num);  
sum += num;      
}while(num);              
printf("合計は%dです\n",sum);
return 0;
}


?scanfして数字をnumへ
?sumに加算する
?くり返しの条件はnumが0以外の時

while(num != 0)なら、0以外ならくり返し(=0入力で終了) と分かるのですが、
while(num) がなぜ0のとき終了できるのか分かりません。どういうことでしょうか(´;ω;`)
456 : ◆QZaw55cn4c 2011/11/21(月) 07:09:56.69
>>454
確かに普通わかりやすく書くのであれば
do {...} while(num != 0)
で 「num が 0 でなければループ続行」。
これは != 演算子が「二つの項が等しくなければ 1、それ以外ならば 0 」を返す2項演算子と考えてよいから。
printf("%d\n", 1 != 0)
printf("%d\n", 1 != 1)
を実行させて値を調べてみよ。

do {...} while () 文は条件式が 0 以外のときループを続行する。
したがって、これを
do { ... } while (num)
と書いても同じ意味。

if 文でも同じことがいえる。
if (a != 0) { ... }

if (a) { ... }
と書くことができる。
457 :デフォルトの名無しさん2011/11/21(月) 08:02:59.48
>>454
難しく考えることはない。式の値は、0じゃなければ真となる。
でも、!=0を書くことは意味をはっきりさせることになるから必要が無ければ書かない癖はつけない方がいい。
455 :デフォルトの名無しさん2011/11/21(月) 07:01:55.46
JISX3010より。

6.8.5 繰返し文
構文規則
     繰り返し文:
            while (式) 文
            do 文 while (式)
            for (式opt ; 式opt ; 式opt) 文
            for (宣言 式opt ; 式opt) 文

(中略)

意味規則 繰返し文は、ループ本体 (loop body) と呼ばれる文を、
制御式が0と比較して等しくなるまでの間、繰り返して実行する。
458 :デフォルトの名無しさん2011/11/21(月) 08:51:11.45
>>455-457
おぉありがとうございました(´;ω;`)気が楽になりました モヤモヤすっ飛んだ
459 :デフォルトの名無しさん2011/11/21(月) 09:53:20.10
教えていただけないでしょうか?
/*5件の体重データをキーボードから入力し体重の最大、最小、平均、合計を求めよ*/

#include<stdio.h>
int main(void)
{
float weight,kei=0,heikin,max=0,min=1000;
int n=1; //ここはint型にするべきなのか?float型にすべきか?
while(1){
printf("%d件目のデータを入力してください: ",n);
scanf("%f",&weight);
if(n==0)break;
kei = n;
n++;
if(n==1){
不明;
不明;
}
if(weight>max)
max=weight;
if(min>weight)
min=weight;
}
heikin=kei/n;
printf("合計 %6.1f\n件数 %6.0f\n平均値 %6.1f\n最大値%6.1f\n最小値%6.1f\n",kei,n,heikin,max,min);
return 0;
}
460 :デフォルトの名無しさん2011/11/21(月) 10:16:32.23
>>459
論理的思考がきちんとできていない悪寒。
n は件数を数えるだけだから整数型でいい。
それ以外のことは、ロジックをきちんと考えて作り直してからだな。
465 :デフォルトの名無しさん2011/11/21(月) 17:07:43.38
>>459はコピペじゃなかったっけ?何年も前に見た記憶がある。
468 :デフォルトの名無しさん2011/11/21(月) 17:32:06.28
>>465
教える内容なんて毎年変わらない
461 :デフォルトの名無しさん2011/11/21(月) 15:33:40.03
インデントしない、変数名はローマ字読みだったりと…
指摘されないのかね?
463 :デフォルトの名無しさん2011/11/21(月) 16:54:18.45
kei→totalとかsum
heikin→ave
n→cnt
などのようにして統一するべき

それよりも型が不明ですとか
ソースが埋められませんだと
勉強の仕方や手順に問題があるな
466 :デフォルトの名無しさん2011/11/21(月) 17:26:51.40
そのレベルの問題はどの本でもあるしな
似たような問題があっても可笑しくない
467 :デフォルトの名無しさん2011/11/21(月) 17:30:23.94
一寸前なら憶えちゃいるが
数年前だとチト判らねェなあ
コピペ臭いソースだって?
ここにゃ沢山あるからねェ
471 :デフォルトの名無しさん2011/11/21(月) 18:02:26.19
C89とか何年後の話だよ
472 :デフォルトの名無しさん2011/11/21(月) 18:42:30.94
>>471
78年後だよ。どうしてそんなのも計算できないのにプログラムやってるのはなぜ?
477 :デフォルトの名無しさん2011/11/21(月) 20:50:23.60
>>472
ん??順当に考えれば2015年の冬じゃないか?
473 :デフォルトの名無しさん2011/11/21(月) 19:21:00.87
78年後もCってあるのか
474 : ◆QZaw55cn4c 2011/11/21(月) 19:44:02.00
>>473
lisp と同じくらいに C も存在しているだろう。
475 :デフォルトの名無しさん2011/11/21(月) 20:02:42.43
「だろう」は仮定形
それにlispもCもあるか分からないが正解
476 :デフォルトの名無しさん2011/11/21(月) 20:43:33.21
50年もしたらなにかブレイクスルーがおきて、SFに出てくるような人工知能が開発されて、
プログラミングなんてなくなってるような気がする。
自然言語でおkみたいな。
480 :デフォルトの名無しさん2011/11/21(月) 20:56:03.15
>>476
ビル・ゲイツはPowerPointみたいにプログラミング出来ないか?と社内で言い続けて、それでもVC/VB/VC#しか無いんだぞ
理想にいちばん近いのでもスクラッチが今の限界だ
487 :デフォルトの名無しさん2011/11/21(月) 21:25:03.81
>>480
60年代とか、チェスで人間に勝つのは絶対無理とか言ってた学者がいたのに勝てたじゃん。
50年もしたらなにがおきるかわからん。
491 :デフォルトの名無しさん2011/11/21(月) 21:57:36.10
>>487
50年もしたら将棋で人間に勝てるようになってるかもね
493 : ◆QZaw55cn4c 2011/11/21(月) 22:40:22.99
>>491
女流は負けた。将棋連盟会長も苦しいだろう。ここは光速の谷川さんに期待したい。
481 :デフォルトの名無しさん2011/11/21(月) 21:11:43.88
文字列についてなんですが
char str[] = "ABCDEFG";
と宣言するのと
char *str = "ABCDEFG";
と宣言するのと
char str[8];
と宣言してヌル文字含めて一文字ずつ代入するのとで出来上がるstrに違いってありますか?
出力したりサイズ測ったりSTRCMPで比べたりしてみた限りでは違いは無いみたいなのですが・・・
483 :デフォルトの名無しさん2011/11/21(月) 21:12:26.14
なんか改行多いって怒られるので分けます スミマセン
//ソースコード
int main(void){
char str1[] = "ABCDEFG";
char *str2 = "ABCDEFG";
char str3[8];
str3[0] = 'A';
str3[1] = 'B';
str3[2] = 'C';
str3[3] = 'D';
str3[4] = 'E';
str3[5] = 'F';
str3[6] = 'G';
str3[7] = '\0';
printf("str1:%s, sizeof str1:%lx\n",str1, sizeof str1);
printf("str2:%s, sizeof str2:%lx\n",str2, sizeof str2);
printf("str3:%s, sizeof str3:%lx\n",str2, sizeof str3);
printf("str1 = str2 :%d\n", strcmp(str1,str2));
printf("str2 = str3 :%d\n", strcmp(str2,str3));
printf("str3 = str1 :%d\n", strcmp(str3,str1));
}
486 :デフォルトの名無しさん2011/11/21(月) 21:18:14.10
>>483
文字数変えても sizeof str2 の数値だけは変わらんよ

ポインタが 8byte ってことは 64bit でコンパイルしたのかな?
488 :デフォルトの名無しさん2011/11/21(月) 21:34:48.83
皆さん有難う御座います。
>>485
なるほど、str1とstr2は後から書き換えできないんですね。
書き換えるとしたら、別の文字列を用意してポインタの参照先変更ですか。

>>486
あー確かにこれだとポインタ変数のサイズになっちゃいますね
STRLEN使わないとダメですか。
Macでやってるので64bitになってるかも知れません・・・
32ビットだと4バイトになるのですか?

てか最後の出力のとこ間違ってstr2になってますね 正しくはstr3です
489 :デフォルトの名無しさん2011/11/21(月) 21:52:39.58
>>488
str1は配列の初期化、最後に\0ははいらない
506 :デフォルトの名無しさん2011/11/21(月) 23:37:11.59
>>488
>str1とstr2は後から書き換えできないんですね。
str1は書き換えられる。
str1とstr3は初期値付の宣言か、宣言後の代入かの違いで、
ほぼ同等といえる。
485 :デフォルトの名無しさん2011/11/21(月) 21:16:07.19
配列の領域が確保されるか
read onlyの文字列の領域が確保された後にそのアドレスをポインタで指すか
490 :デフォルトの名無しさん2011/11/21(月) 21:56:25.15
なんてことはなく、入る
str1とstr3は初期化と代入という違いはあるけどほぼ同じ
496 :デフォルトの名無しさん2011/11/21(月) 23:12:55.77
switch文の質問です。
下の(1)と(2)って意味が異なりますか?
どちらも必ず処理を1つ行った後にbreakされると思っているのですが
結果が異なるようです。何か助言があればお願いします。

(1)breakを出した状態
switch (c) {
case A: if(aa>bb){処理 A;}
break;
case B: if(aa>bb){処理 B;}
break;
default:処理 N;
}
---------------------------------------------------------
(2)breakを{}に含めた場合
switch (c) {
case A: if(aa>bb)
    {
    処理 A;
     break;
    }
case B: if(aa>bb)
   {
    処理 B;
    break;
   }
default:処理 N;
}
497 :デフォルトの名無しさん2011/11/21(月) 23:15:49.51
>>496
全然ちがいます
498 :デフォルトの名無しさん2011/11/21(月) 23:18:54.48
>>496
入門書読め
500 :4962011/11/21(月) 23:22:58.86
>>497
>>498
case Aが必ず選択されて、aa>bbが真になる場合でも
処理が違うということでしょうか??

case Aが選択されてaa>bbが偽になる場合にcase Bが実行されるのは分かるんですが
502 :デフォルトの名無しさん2011/11/21(月) 23:26:26.60
>>500
何を聞きたいのか分からん

いつもそれが成り立つなら switch いらないよ
503 :デフォルトの名無しさん2011/11/21(月) 23:28:40.46
>>496
(2)だとcase A:で処理Aを行った時しかブレークしないじゃん
つまりcase Aかつ、 aa>bbでないとき、ブレークせずにcaseBの分岐に行っちゃう。
504 :デフォルトの名無しさん2011/11/21(月) 23:29:41.32
>>500
そこだけみれば一緒じゃないかな。
ただaa>bbが偽のときに処理Nに行くけどいいのか?
505 :4962011/11/21(月) 23:30:21.50
>>502
>>503
ありがとうございました。
解決しました!!
499 :デフォルトの名無しさん2011/11/21(月) 23:22:15.25
なるほど
ってことはこうですかね

パターン1:char str[(要素数)] (= 文字列リテラル);
要素数分の配列を用意してから、文字列リテラルで初期化する。文字列リテラルの代わりに{'A','B','C',・・・'\0'}でも初期化出来るが、ヌル文字は自動で追加されない。
文字列リテラルで初期化した場合のみ、要素数を省略可能。その場合、文字列リテラルの文字数+1(ヌル文字分)の要素数の配列となる。
要素数を指定した場合、文字列リテラルの文字数に関わらず指定した要素数の配列になるが、要素数≧文字列リテラルの文字数+1でないと初期化するときにエラーが出る。
後から各要素に代入可能だが、ヌル文字のない文字列にならないよう注意しなければいけない。

パターン2:char *str = 文字列リテラル;
書き換え不能な文字列リテラルがメモリ上に用意されたあと、文字列の先頭アドレスがstrに格納される。アドレスの参照先は変更可能だが、文字列の各要素に代入は出来ない。

それにしてもC言語の文字列の扱いは面倒ですねぇ
なんかまだ落とし穴がありそう・・・
507 :デフォルトの名無しさん2011/11/21(月) 23:42:25.91
>>499
>要素数分の配列を用意してから、文字列リテラルで初期化する。文字列リテラルの代わりに{'A','B','C',・・・'\0'}でも初期化出来るが、ヌル文字は自動で追加されない
NULキャラ込で初期化されるぞ。

>要素数を指定した場合、文字列リテラルの文字数に関わらず指定した要素数の配列になるが、要素数≧文字列リテラルの文字数+1でないと初期化するときにエラーが出る。
今手元にK&Rが無いので調べられないが、配列サイズより文字列リテラルが大きい場合は、
未定義だったと思う。

>後から各要素に代入可能だが、ヌル文字のない文字列にならないよう注意しなければいけない。
先に述べたように、NULキャラ込で初期化されるので、サイズだけ気にすれば良い。
509 :デフォルトの名無しさん2011/11/21(月) 23:48:02.08
>>507
マジですか!
てことは
char str = {'A','B','C','D','E','F','G'};
でもちゃんと文字列として最後にヌル文字勝手に追加されて初期化されるんですかね?
逆に文字列としてではなく単なる文字型の配列として初期化したい場合どうすればいいんでしょうか?

また、ヌル文字のある要素にヌル文字以外の文字を代入した場合、自動的に次の要素にヌル文字が自動代入されるってことでしょうか?
515 :5072011/11/22(火) 00:46:13.21
>>509
>char str = {'A','B','C','D','E','F','G'};
>でもちゃんと文字列として最後にヌル文字勝手に追加されて初期化されるんですかね?

ちがう。>>499自分で言っているように
char str[(要素数)] (= 文字列リテラル);
で初期化する場合はヌル文字込で初期化される。
「文字列リテラル」ってのは"でくくられたものだよ。わかっている?
char str[] = {'h', 'o', 'g', 'e', '\0'};
の簡易記法が
char str[] = "hoge";
と思っておけば良い。

>逆に文字列としてではなく単なる文字型の配列として初期化したい場合どうすればいいんでしょうか?
下記だね。
char str[] = {'h', 'o', 'g', 'e'};

>また、ヌル文字のある要素にヌル文字以外の文字を代入した場合、自動的に次の要素にヌル文字が自動代入されるってことでしょうか?
もちろん、そんな気の利いたことはしてくれない。
516 :デフォルトの名無しさん2011/11/22(火) 00:57:20.49
>>515
えっと、つまり、やっぱり
文字列リテラル(ダブルクォーテーションで括られた文字の羅列)で初期化した場合と違って、
配列要素を列挙して初期化した場合ヌル文字は自動で追加されないから最後にヌル文字も列挙しないといけないってことですよね?

また、要素にアクセスしてヌル文字を上書きしてしまった場合、ヌル文字を自動で追加したりはしてくれないので、ヌル文字が無い配列にならないよう、
ヌル文字より前だけをいじるか、ヌル文字を上書きした場合、それより後ろにちゃんとヌル文字を自分で挿入しないといけないってことですよね。

>>499はそういうつもりで書いたのですが・・・
517 :デフォルトの名無しさん2011/11/22(火) 01:02:50.36
>>516
は?
分かってるんだったら>>509みたいに揚げ足取りみたいな聞き方しないでそういうつもりで書きましたって最初から書けばいいじゃん。
わざわざ試すような聞き返し方して、どういうつもり?舐めてんのお前?立場分かってる?死ねば?
518 :デフォルトの名無しさん2011/11/22(火) 02:26:38.10
>>516
言いたいことをシンプルに伝えられるようにするか、規格読むのがいい。

>>507は普通に間違えてるからびっくりする気持ちもわかるけどね。
> > 文字列リテラルの代わりに{'A','B','C',・・・'\0'}でも初期化出来るが、ヌル文字は自動で追加されない
> NULキャラ込で初期化されるぞ。
501 :デフォルトの名無しさん2011/11/21(月) 23:25:10.23
間違えた
×文字列リテラルで初期化した場合のみ、

○文字列または配列要素列挙で初期化した場合のみ、
または、
○初期化した場合のみ、

てかリテラルじゃなくても初期化は出来ますな
508 :デフォルトの名無しさん2011/11/21(月) 23:47:33.20
3日ほど前から「ゼロからはじめるプログラミング」という本を読みながら勉強をしています。
本でサイコロを作成し、
label1.Textにランダムで1〜6の数字を表示させるプログラムがあります。
それを今度、数字ではなく、●の数(1であれば●1つ)で表現する演習があります。


Random suuji = new Random();
label1.Text= suuji.Next(1, 7).ToString();
510 :デフォルトの名無しさん2011/11/21(月) 23:51:06.61
3日ほど前から「ゼロからはじめるプログラミング」という本を読みながら勉強をしています。
本でサイコロを作成し、
label1.Textにランダムで1〜6の数字を表示させるプログラムがあります。
それを今度、数字ではなく、●の数(1であれば●1つ)で表現する演習があります。

数字を表示させる行を少し改良し

Random suuji = new Random();
label1.Text= suuji.Next(1, 7).ToString(); から

Random suuji = new Random();
suuji.Next(1, 7).ToString(); 

if (suuji="1")
label1.Text="●"

とif文を入れてみたのですがうまくいきません・・・
本の中に答えが無く、先に進めません・・・どうすればいいのですか?
511 :デフォルトの名無しさん2011/11/21(月) 23:52:45.71
>>510
スレチ
言語が違うよ
512 :デフォルトの名無しさん2011/11/21(月) 23:54:23.73
label1.Text="●"

label1.Text="●";
547 :5102011/11/22(火) 21:57:12.26
>>511
すいません・・・。


>>512-514
スレ違いなのに回答ありがとうございます。
無事、動くようになりました!
521 :デフォルトの名無しさん2011/11/22(火) 08:36:42.54
>無能な働き者
上司がよければそれなりに役に立つが
勝手に問題をばら撒く、もしくは勝手に悩んでつぶれるやつが多い
522 :デフォルトの名無しさん2011/11/22(火) 09:00:34.63
有能な怠け者は司令官に、
有能な働き者は参謀にせよ。
無能な怠け者は...
そうだな、連絡将校ぐらいならできるだろう。
無能な働き者?
それは処刑するしかあるまい。
523 :デフォルトの名無しさん2011/11/22(火) 12:09:05.10
char c = 'a';
printf("%c",c);
としなくてはいけないところ、
int c = 'a';
printf("%c",c);
でもちゃんとaと表示されるのはなぜですか?
524 :デフォルトの名無しさん2011/11/22(火) 12:14:16.58
>>523
'a'は97の別の書き方。(文字コードがASCIIの場合)
charもintも整数。
526 :デフォルトの名無しさん2011/11/22(火) 12:28:02.44
ANSIの規格書たけーんだよ(#゚Д゚)ゴルァ!! って思ってるのは俺だけですか?
552 : ◆QZaw55cn4c 2011/11/22(火) 22:59:06.13
>>523
printf() のような可変長引数関数の場合は、char 引数は int に格上げ(integral/integer promotion)される。

>>526
ISO/IEC 9899:1999 TC2ならいくらでも転がっている。
527 :デフォルトの名無しさん2011/11/22(火) 12:32:29.15
無料でダウンロードするのが真のハッカー
546 :デフォルトの名無しさん2011/11/22(火) 21:38:17.57
>>527
その程度で「真」とか言ってるのはバッカー
もっと上のレベルで破壊活動する奴と開拓的なことをする人を区別する呼び名がある
529 :5232011/11/22(火) 12:36:45.59
みなさんありがとうです。
てことはintでも正解ということですか?
やっぱりcharにしないとダメですか?
533 :デフォルトの名無しさん2011/11/22(火) 14:49:09.41
intptr_t ってポインタを格納するのに充分なサイズってだけで、
ポインタと同じサイズと定義されてるわけじゃないのか。

ポインタと同サイズと定義されてる整数型ある?
535 :デフォルトの名無しさん2011/11/22(火) 17:37:33.45
ロベールのC++入門講座 http://book.mycom.co.jp/book/978-4-8399-2605-2/978-4-8399-2605-2.shtml
これどうですかね?
Cの勉強にはなりませんか?
536 :デフォルトの名無しさん2011/11/22(火) 17:49:49.62
>>535
C勉強したけりゃCの入門書買えよw
538 :デフォルトの名無しさん2011/11/22(火) 18:08:42.65
言語だけ知ってたって意味のある事は何にもできやしないよ。
539 :デフォルトの名無しさん2011/11/22(火) 18:31:03.67
日本語を知っているだけで素晴らしい文章が書ける訳じゃないしな
541 :デフォルトの名無しさん2011/11/22(火) 18:56:22.31
其なんて背伸びして使ってみても場違いで下手な文章にしかならないしな
543 :デフォルトの名無しさん2011/11/22(火) 19:17:30.56
故意に使ったのか?
544 :デフォルトの名無しさん2011/11/22(火) 19:19:50.84
>>543
うん
545 :デフォルトの名無しさん2011/11/22(火) 21:35:08.95
scanfで文字+スペース+数字を読み込む所で、つまづいて
fgetsに置き換えたんですが、fgets前の別のscanfで1度読み込んだ行(最後の改行だけ?)を読み込んでしまいます。
問題は http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10015
作ったソースは http://codepad.org/45oveU94 です
現状は1回目のfgetsだけ、入力前に読み込んでその後はちゃんと意図通り読み込んでます
(ただ、ひとつずれた状態で必要な回数−1だけ)
548 :デフォルトの名無しさん2011/11/22(火) 22:23:18.50
>>545
scanfでやればいいのに
555 : ◆QZaw55cn4c 2011/11/22(火) 23:16:54.81
>>545
fgets() と *scanf() は混在できないらしい。理由は私もわからない。
http://ideone.com/Aj46b
556 :デフォルトの名無しさん2011/11/22(火) 23:20:59.93
>>550
>int cards[4][13]={0};
厳密にはまずい。>>555 参照。
>cards[0][d-1]=1;
さりげなくちゃんと訂正してますね。
549 :デフォルトの名無しさん2011/11/22(火) 22:32:37.01
はじめはscanfでやってたんだけど、読み込む回数が指定より少なくて
ググってたら、scanfつかうな みたいなのがいくつかあって迷走しちゃいました(涙
つかったときのソース
http://codepad.org/sIqIrd29
これは前行の改行をよみこんじゃってるのかな?
550 :デフォルトの名無しさん2011/11/22(火) 22:46:31.57
自解しちゃったんで解答おいて退散します λ
これに休日の6時間つかちゃった
http://codepad.org/g2V94Wn8
551 :デフォルトの名無しさん2011/11/22(火) 22:48:50.00
>>550
fgets して、sscanf
553 :デフォルトの名無しさん2011/11/22(火) 22:59:36.47
557 :デフォルトの名無しさん2011/11/22(火) 23:30:43.26
554 :デフォルトの名無しさん2011/11/22(火) 23:03:10.03
scanfの直後に,fgets+sscanfつかうと入力する前に改行が入ってしまうとおもうんですけど
そういうときはどうしてますか?
混合させずにscanfはもう使わないほうがいいのかな
558 :デフォルトの名無しさん2011/11/22(火) 23:55:17.89
void CMain::TP2(int left_in_x,int up_in_y,int right_in_x,int down_in_y,float *left_x,float *up_y,float *right_x,float *down_y){

*left_x=(1/16*(left_in_x-1));
*up_y=(1/16*(up_in_y-1));
*right_x=(1/16*right_in_x);
*down_y=(1/16*down_in_y);
}

float
Tx_Left_X,
Tx_Right_X,
Tx_Up_Y,
Tx_Down_Y;

TP2(1,1,1,1,&Tx_Left_X,&Tx_Up_Y,&Tx_Right_X,&Tx_Down_Y);

うまく数字が返ってこないです
ホントはTP2関数を使ったら
Tx_Left_Xとかの値が変わってるはずなんですが…

561 :デフォルトの名無しさん2011/11/23(水) 00:13:13.44
>>558
整数同士の割り算の結果は整数になるので例えば1/16 = 0 となっている、と思う。
559 :デフォルトの名無しさん2011/11/23(水) 00:04:04.70
詳しくソースコードまでありがとうございます
すごく参考になりました。
560 :デフォルトの名無しさん2011/11/23(水) 00:08:14.08
C言語でCGIの勉強したいのですがおすすめのわかりやすい書籍を教えて下さい
573 :デフォルトの名無しさん2011/11/23(水) 10:15:08.38
>>560
書籍じゃないが猫でもわかるのサイトで紹介してる
574 :デフォルトの名無しさん2011/11/23(水) 13:47:38.96
>>560
自分の知る限り、本はこれしか見たことない
分かりやすいかどうかは知らん

http://www.amazon.co.jp/gp/aw/d/477411541X/ref=mp_s_a_1?qid=1322023561&sr=8-1
562 :デフォルトの名無しさん2011/11/23(水) 00:14:27.25
>558
1/16が整数のまま計算されて0になるんじゃね。
1.0/16.0とかやってみたら?
564 :デフォルトの名無しさん2011/11/23(水) 00:22:25.09
出来ました、ありがとうございました
x.0にしないと、floatとか小数点まで計算してくれないですね、勉強になりました
565 :デフォルトの名無しさん2011/11/23(水) 00:47:57.22
×2とか×4とか÷2、÷4などのビット演算で表すことが出来る計算はビット演算使ったほうが早いんですか?
566 :デフォルトの名無しさん2011/11/23(水) 01:15:58.06
>>565
CPUによるかもしれないが普通はそう

もっとも現代的なプログラミングだと、そういう命令レベルの選択は
最適化コンパイラに任せたほうがいいよねっていう流れ
下手に人間が頑張るより賢い結果を出すことも多い
567 :デフォルトの名無しさん2011/11/23(水) 02:30:42.88
char moji[100];
int a,b,c,d,i;
a = b = c = d = i = 0;

printf("文字列を入力せよ\n");
scanf("%s",moji);
printf("結果:%s\n",moji);

for(i=0 ; i <= 3 ; i++){
if(moji[i] == 'a')
a =+ 1;
else if(moji[i] == 'b')
b =+ 1;
else if(moji[i] == 'c')
c =+ 1;
else if(moji[i] == 'd')
d =+ 1;
}

文字列としてaaaaを入力してもループ2周目にてaの値が増えません。
文字の場合の比較の仕方が間違ってたりする?
568 :デフォルトの名無しさん2011/11/23(水) 02:40:53.90
>>567
複合代入演算子はa += 1
他の行も同様
569 :デフォルトの名無しさん2011/11/23(水) 02:47:47.81
有難うございます。 盲点でした。
=+ の場合はそのような演算子はないわけですが、どのように処理されているのでしょう?
572 :デフォルトの名無しさん2011/11/23(水) 03:02:41.25
なるほど a =+ 1; ⇒ a = +1 と見られるんですね。
それと区別するために+=
良くわかりました。有難うございます。
575 :デフォルトの名無しさん2011/11/23(水) 14:28:40.24
規格に厳密な話をすると
整数型a_typeとb_typeがあって
bit幅がa_type > b_typeであっても
最大値がa_type > b_typeである保証はどこにもないですよね?
577 :デフォルトの名無しさん2011/11/23(水) 15:03:38.05
>>575
それがintやshortのことなら保証されてる。
579 :デフォルトの名無しさん2011/11/23(水) 16:13:02.86
int・64ビット・最大値2147483647でshort・32ビット・最大値2147483647の処理系とかも規格上は許されるはずだ
580 :デフォルトの名無しさん2011/11/23(水) 17:36:19.47
一般的想定からかけ離れた仕様のコンパイラなんか使いたくない。
581 :デフォルトの名無しさん2011/11/23(水) 17:55:37.66
一般想定決め打ちして、なんかあると書き直さなきゃなんないような
コードなんか書きたくない。
599 :デフォルトの名無しさん2011/11/23(水) 21:50:16.09
>>581
いまさらintが16bitの環境を想定して書きたくないっていうか。
600 :デフォルトの名無しさん2011/11/23(水) 23:07:04.01
>>599
って言って 32bit で決め打ちした連中は、
ちょっと前に UNIX 系が64bitに移行したときは、
必死になって64bit に書き直してたな。
582 :デフォルトの名無しさん2011/11/23(水) 18:06:39.97
100行くらいのプログラムが3つあって、
その8割くらいは全く同じ記述になっている場合に、
3つのプログラムを一つにまとめて2割の異なっている部分だけを条件分岐で処理を分けた方がいいんでしょうか
前者だと冗長ですが分かりやすいと思います
後者は簡潔だけどさらに条件分岐が増えた場合などに段々可読性が落ちてくると思います
どっちがいいんでしょうか
586 :デフォルトの名無しさん2011/11/23(水) 18:42:51.82
>>582
「全く同じ記述」の部分が、プログラム中のあちこちに分散してるんだとエスパーしてみた。
583 :デフォルトの名無しさん2011/11/23(水) 18:17:43.57
文面見る限り、ほぼ自分でもわかってると思うけど、
それは後々の変更の可能性によるんじゃね。
585 :デフォルトの名無しさん2011/11/23(水) 18:21:27.75
というか、その8割方同じだというソースをライブラリとして分離すればいいだけなのでは?
物によるだろうけど、c++ならテンプレート関数使えば綺麗に書ける可能性もある。
587 :デフォルトの名無しさん2011/11/23(水) 19:08:27.41
Cでデスクトップに貼り付けるガジェットのようなものを作っているのですが、
ショートカットキーやクイック起動でデスクトップの表示を実行すると消えてしまいます。
これを常に表示させるようにできないでしょうか?

また、デスクトップの表示は処理的に言うとすべてのウインドウを最小化しているのでしょうか?
その辺もわかる方がいれば教えてください
592 :デフォルトの名無しさん2011/11/23(水) 19:43:51.30
>>587
Win32API板に池

Win32API質問箱 Build98
http://hibari.2ch.net/test/read.cgi/tech/1321456608/
595 :デフォルトの名無しさん2011/11/23(水) 19:52:07.75
>>593
>>587がWinじゃないといった時点で誘導すれば良いだけの事
Unix系OSでもMacでも、デスクトップガジェットって使ってるの見たことない
(ググるガジェットとかは使えるの知ってるが)

こういうのは、大抵オタクが作りたがる類のもの
589 :デフォルトの名無しさん2011/11/23(水) 19:34:45.13
マルチってなんでダメなん?
591 :デフォルトの名無しさん2011/11/23(水) 19:43:40.30
594 :デフォルトの名無しさん2011/11/23(水) 19:47:19.28
>>589
自分で適切な聞く場所すら見つけられませんでした。と言う、私馬鹿過ぎるんです宣言してるから、回答しても理解してもらう率は低い
590 :デフォルトの名無しさん2011/11/23(水) 19:39:46.04
飛んできてるメッセージ見りゃわかりそうなもんだけど、そうでもないの?
593 :デフォルトの名無しさん2011/11/23(水) 19:46:56.79
デスクトップメタファはwindowsに限った概念では無いわけだが
596 :デフォルトの名無しさん2011/11/23(水) 20:18:08.46
>>593
クイック起動のデスクトップの表示
597 :デフォルトの名無しさん2011/11/23(水) 20:22:26.53

>これを常に表示させるようにできないでしょうか?

壁紙に書き込む
598 :デフォルトの名無しさん2011/11/23(水) 21:16:12.30
>>597
トップレベルじゃない時点で没だろ
603 :デフォルトの名無しさん2011/11/23(水) 23:21:09.99
変数名でmax_numとmaxNumとどっちが良いかな?
っていうかこういう二つの単語のときはどう付けたらいいんだ
604 :デフォルトの名無しさん2011/11/23(水) 23:24:37.44
どっちでもいいよ
605 :デフォルトの名無しさん2011/11/23(水) 23:29:54.39
>>604
thx
606 :デフォルトの名無しさん2011/11/23(水) 23:46:34.39
lpszCmdLine みたいな変数の命名法ってハンガリアン記法っていうんだっけ。人によっては嫌われるらしいけど。
バッファのサイズとかにunsigned int szBuffer; とか
データ受け取り用の変数に char *rcvData; とかは許して欲しいと思わなくもない。
608 :デフォルトの名無しさん2011/11/23(水) 23:49:27.05
>>606
システムハンガリアンとアプリケーションハンガリアンは違うよ
669 :デフォルトの名無しさん2011/11/24(木) 21:18:20.79
>>606
szとかしないで普通にbufferSizeとか書けばいいじゃん。
rcvも一文字省略してなにがうれしいの。
674 :デフォルトの名無しさん2011/11/24(木) 21:42:32.15
>>669
commandLineBufferSizeとか長すぎるからだろ。
で、receiveのどこを1文字省略?
676 :デフォルトの名無しさん2011/11/24(木) 21:48:54.51
>>674
それが長すぎるかどうかは状況によるな。
単語の数を減らせない状況ならcmdLneBuffSzとか省略するより、そのままのほうがいい。
607 :デフォルトの名無しさん2011/11/23(水) 23:49:09.51
プレフィックスに型情報を埋めたやつがハンガリアンだと思う。
609 :デフォルトの名無しさん2011/11/23(水) 23:52:53.12
システムハンガリアン: 変数の型をプレフィックスに
アプリケーションハンガリアン: 動作や大きさ等の変数の用途概要をプレフィックスに
こういうこと?
611 :デフォルトの名無しさん2011/11/23(水) 23:58:31.16
ポインタにpHogeだけは癖でやってしまう俺
612 :デフォルトの名無しさん2011/11/24(木) 00:02:06.98
>>608
それは知っているのだけれど、全部まとめて「ハンガリアンはクソ」って主張を見かけることがあるので・・・

>>609
そう。

>>611
それ、わかるわw
614 :デフォルトの名無しさん2011/11/24(木) 00:17:15.80
c++ならプレフィックスより型を変えて安全策にするけどCは面倒臭いね
615 :デフォルトの名無しさん2011/11/24(木) 00:22:38.67
高級アセンブラに多くを求めすぎるアホどもが勢いだけはご立派で
さすがの C もずいぶん汚染されたものだ
616 :デフォルトの名無しさん2011/11/24(木) 00:25:22.24
fgetsを利用して配列に入力した文字列を出力するプログラムを作成しているのですが
問題のあるポインタの変換(関数 main )というエラーがでてきて実行することができません。
おそらくfgetsの書き方がおかしいと思うのですがどなたか教えていただけませんか?

私が書いたソースコードは以下の通りです。

#include <stdio.h>

main()
{
char str[3][20];
int i;


printf( "3つの文字列を入力して下さい\n" );

for(i = 0; i < 3; i++ ) {
//scanf( "%s",str);
fgets(str,sizeof(str),stdin);
printf( "入力した文字は%sです。\n" ,str);
}
617 :デフォルトの名無しさん2011/11/24(木) 00:32:30.55
622 :デフォルトの名無しさん2011/11/24(木) 00:39:44.39
>618さん
>619さん
>620さん
ありがとうございます。無事に動いたようです。
sizeof(str)で配列STRの要素数を取得するのだと思ってたのですが
違うのでしょうか?

配列を使うのでしたらやはり620さんみたいな形式で書くべきみたいですね。
ありがとうございます
624 :デフォルトの名無しさん2011/11/24(木) 00:45:14.10
>>622
sizeof(str)だと、str[3][20] のサイズ=60
625 :デフォルトの名無しさん2011/11/24(木) 01:02:27.87
>581 は全ての型が何bitでもよく、
文字コードはどれでもよく、
エンディアンがどちらでも稼働するようなソースを常に考えてソースを書いているのか。
626 :デフォルトの名無しさん2011/11/24(木) 01:06:44.94
ビットパターンからfloatの仮数部、指数部のビット数を類推することは出来ますか?

また、出来るのならやり方を教えて下さい
628 :デフォルトの名無しさん2011/11/24(木) 01:39:07.36
>>626
2^nを代入すると指数部だけが変化する
3 を代入すると仮数部の最上位ビットが1になる

かもしれない
636 :デフォルトの名無しさん2011/11/24(木) 08:49:19.77
>>628

何に代入するんですか?
637 :デフォルトの名無しさん2011/11/24(木) 09:03:13.03
>>636
変数にだろ。
そもそもIEEE754のfloat/double以外のどんな存在を仮定して知りたいのかを説明しろ。
629 :デフォルトの名無しさん2011/11/24(木) 01:42:48.91
llist_t clone(const llist_t ls){   //リストをコピーし新たなリストを返す関数
llist_t np;

if(ls == NULL){
return ls;
}
else if(ls != NULL){
np = allocNode();  //ノード領域の確保
np->next = clone(ls->next);  //ノードへのポインタ
np->data = ls->data;  //リストの要素

return np;
}

return np;
}

これを逆順にコピーしたいんですが、教えていただけないでしょうか。
630 :デフォルトの名無しさん2011/11/24(木) 01:58:22.06
もしかして文字列じゃなくても
配列の変数名を要素指定せずに書いたら
先頭要素へのポインタになるのですか?
631 :デフォルトの名無しさん2011/11/24(木) 02:35:26.60
>>629
双方向リストにするか再帰にする

>>630
文字列ってヌル終端であるような文字の配列だよ。さして特殊な配列ってわけじゃない
632 :デフォルトの名無しさん2011/11/24(木) 02:48:41.60
>>631
9行目で再帰をつかってるんですが逆順にできませんでした。
再帰をつかって逆順にするにはどうしたらいんでしょうか?
635 :6322011/11/24(木) 04:10:36.93
>>631
解決しました。ありがとうございました。
633 :デフォルトの名無しさん2011/11/24(木) 03:02:35.01
struct {
char *buf;
} hoge;
の構造体をstaticで宣言して中のbufはmallocで動的に確保することって出来ますか?
638 :デフォルトの名無しさん2011/11/24(木) 11:06:43.23
文章の各文字を指定した文字数だけ、ずらすシーザー暗号を作成せよ。と言う問題なのですが、解らなくて困っています。
例:文字列入力:Nobember 25th.
ずらす文字:3
生成文字:Qryhpehu 25wk.

よろ
640 :デフォルトの名無しさん2011/11/24(木) 11:19:29.32
>>638
数字はずらさないのか?
639 :デフォルトの名無しさん2011/11/24(木) 11:07:42.84
↑予測変換を押さないで送信してしまいました…よろしくお願いします。
641 :デフォルトの名無しさん2011/11/24(木) 11:28:42.78
アルファベットの文字コードを3ずらすだけか?
char型配列で変換テーブルつくるか、
以下のことを判断する処理で一字づつしょりする。
・アルファベットか否か。
・大文字か小文字か。
・xyz/XYZか否か。
642 :デフォルトの名無しさん2011/11/24(木) 11:37:37.67
void f(char* s, int shift)
{
 static const char* u = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
 static const char* l = "abcdefghijklmnopqrstuvwxyz";

 while (*s) {
  if (isalpha(*s)) {
   const char* a = isupper(*s) ? u : l;
   *s = a[ ((*s - a[0]) + shift) % 26 ];
  }
  s++;
 }
}
644 :デフォルトの名無しさん2011/11/24(木) 13:22:09.57
>>642-643 フランス語では不正解。
645 :デフォルトの名無しさん2011/11/24(木) 13:45:11.73
>>644
フランス語を考慮したコードをどうぞ。
647 :デフォルトの名無しさん2011/11/24(木) 13:56:26.57
漢字が何文字あると思ってるんだ>>644は・・・・
日本語に対応したプログラム書いてみろや
643 :デフォルトの名無しさん2011/11/24(木) 12:24:16.85
void f(char* s, int shift)
{
 while(*s) {
  if (isupper(*s)) {
   *s = 'A' + ((*s - 'A') + 26 + shift) % 26;
  } else if (islower(*s)) {
   *s = 'a' + ((*s - 'a') + 26 + shift) % 26;
  }
  s++;
 }
}
651 :デフォルトの名無しさん2011/11/24(木) 14:33:00.70
>>642はASCII限定ならこれで十分かも。
と、>>643を見て思った。

void f(char* s, int shift)
{
 while (*s) {
  if (isalpha(*s)) {
   char a = isupper(*s) ? 'A' : 'a';
   *s = a + (*s - a + shift) % 26;
  }
  s++;
 }
}
648 :デフォルトの名無しさん2011/11/24(木) 14:02:03.66
漢字に対応するなら別に文字数関係ないだろ。
なんでテーブル持つ前提なんだよw
650 :デフォルトの名無しさん2011/11/24(木) 14:32:24.98
ベトナムアルファベット:クオックグーでの正解実装例を頼む。
653 :デフォルトの名無しさん2011/11/24(木) 16:17:20.22
いい加減言語を統一するべきだよね
各文化圏の固有の言語は文化財として保存する目的のみで継承して日常や仕事では英語を使う
これが世界にとってもっとも良い選択
654 :デフォルトの名無しさん2011/11/24(木) 16:19:45.09
UNICODEというのがあってだな。
655 :デフォルトの名無しさん2011/11/24(木) 16:23:15.11
>>654
それは文字コードを統一しただけだろ
言語そのものを統一するべき時代がもう来てるんだよ
個々の人間の活動領域に対して世界は狭くなりすぎた
656 :デフォルトの名無しさん2011/11/24(木) 16:28:10.18
学術文化知識蓄積の無い辺境言語はエー語でもシナ語でもなんでも適当に飲み込まれてしまえばいいと思うよ
659 :デフォルトの名無しさん2011/11/24(木) 17:02:39.28
なら日本語を選択するべきだな。
識字率から考えれば至極当然の結論となる。
660 :デフォルトの名無しさん2011/11/24(木) 17:11:26.06
>>655
熱心なキリスト教徒が許さんだろ

>>659
日本の日本語識字率が世界一であるかのような言い方だなぁ
664 :デフォルトの名無しさん2011/11/24(木) 18:04:22.73
>>659
中国語をパクったパクリ言語を選択しなくても良いだろ
672 :デフォルトの名無しさん2011/11/24(木) 21:38:16.16
>>664
文字体系と言語体系の区別すらできないってどうよ?
661 :デフォルトの名無しさん2011/11/24(木) 17:18:24.55
音読出来るのと読み解くのは違うからねー
訓読みの概念が無い中華てよくもまぁ教育破綻せず過ごしてるもんだと思うわ
日本語が連想コンテナとすれば中華はベッタリswitch-caseで判別してる様なモンだろ?
662 :デフォルトの名無しさん2011/11/24(木) 17:25:44.75
またこういうくだらない話が低脳のレスで埋まっていくのか。
668 :デフォルトの名無しさん2011/11/24(木) 20:21:01.67
>>662
665 :デフォルトの名無しさん2011/11/24(木) 19:05:14.42
日本に伝わった漢字を作ったのは中国じゃなくて、漢な。
モンゴル帝国の時代を経て、今のチャイナが使っているものは漢字に似た何か。
666 :デフォルトの名無しさん2011/11/24(木) 19:15:40.15
>>665
それを言ったら日本も漢字に似た何かだよ。
台湾のほうがより漢字に近い
667 :デフォルトの名無しさん2011/11/24(木) 19:21:24.73
東アジアの言葉の起源は日本アルニダ
中国、朝鮮の言葉は日本の言葉のパクリ言語ニダアル
670 :デフォルトの名無しさん2011/11/24(木) 21:34:11.29
まあ、そりゃそうなんだけど、皆でよってたかってハンガリアン記法をいじめなくてもいいじゃん、と思いまして。
671 :デフォルトの名無しさん2011/11/24(木) 21:36:56.40
ハンガリアン記法を強いられて、いじめられた過去があるんじゃないの?
677 :デフォルトの名無しさん2011/11/24(木) 21:54:05.81
buffとかlenとかは使うな。
sizeはもともと短いからあんまり略さない。
プレフィックスでszとかつけると文字列っぽくなるな。
678 :デフォルトの名無しさん2011/11/24(木) 21:58:37.82
ふと思ったけど、XXXの個数を表すのにcntXXXとかnumXXXとかするのはハンガリアン記法なんだろうか?
それぞれ、CountOfXXXやNumberOfXXX (キャメルケース) を省略しただけ、とも取れるような気が。
あと、szはなんで文字列なんだろう? sz => string which terminates with zeroの略?
ゼロ終端文字列なら zero-terminated string => zs じゃねーの?と、よく思う。
682 :デフォルトの名無しさん2011/11/24(木) 22:07:15.20
>>678
szは昔のMSのコードで文字列のプレフィックスだった。
687 :デフォルトの名無しさん2011/11/24(木) 22:21:28.52
>>682
ほほう。慣習ってことですかね。

過去の資産を流用する場合等は別として、マイクロソフトでさえ非推奨なハンガリアン記法を、
あえて、いまさら使用することにメリットは見出しにくいんだけどね。
ハンガリアン記法を使ってる奴なんて、脳みそ膿んでるんじゃねーの、
とか言われると、好きにさせてくれ、と思わない訳でもないのですよ。
688 :デフォルトの名無しさん2011/11/24(木) 22:22:58.65
>>687
日本語でおk。
679 :デフォルトの名無しさん2011/11/24(木) 22:01:31.04
680 :デフォルトの名無しさん2011/11/24(木) 22:05:27.05
>>679
出典のないwikipなんて意味あるんだろうか。
681 :デフォルトの名無しさん2011/11/24(木) 22:06:40.38
お前の妄想よりはな。
683 :デフォルトの名無しさん2011/11/24(木) 22:09:06.15
>>681
おれの妄想と同程度だと思われ。
アプリケーションハンガリアンとかシステムハンガリアンとか、最近言われだした言葉なのに
それすら出典が乗ってない。
684 :デフォルトの名無しさん2011/11/24(木) 22:09:58.08
じゃぁ編集しとけよ。
685 :デフォルトの名無しさん2011/11/24(木) 22:12:16.55
>>684
なんで?
691 :デフォルトの名無しさん2011/11/25(金) 00:08:23.03
AIZU自動ジャッジな22番の問題に手こずる私…。
>与えられた整数の並び a1, a2, a3, , , an で、連続した項の和の最大値を出力して終了するプログラムを作成して下さい。
という問題なんだけど、
5 -1 3 -6 -3 11
という並びの最大値は 9 (全部の項の和)でしょうか、11(最後の一項のみ)でしょうか。
AIZU的な正解は 11 なんですが、連続してないように思うんですが。そういうものなのでしょうか?
高校生レベル未満の私にご教授(教示ではなく)ください。お願いします。
693 :デフォルトの名無しさん2011/11/25(金) 01:13:03.14
>>691につられてやってみたが22がクリアできないw
答えが間違ってるとだけ言われて何がおかしいのかわからずどうすればいいんだw
696 :デフォルトの名無しさん2011/11/25(金) 01:32:10.85
>>691

もしも最後の11 を 6にして、最初の手前に -100 を追加した場合は、答えは何になるのが正しいってことなの?
new                   new
-100  +5  -1  +3  -6  -3  +6

この場合は答えは7ってことなのか?

+5 -1 +3 = +7 の時が一番大きいから7ってことなの?


「任意の連続した区間の合計によって得られた、もっとも大きい数は? (要素1個だけでも連続した区間とみなす)」ってことなのか?
問題の意味が、いまいち分かりにくいんだが。
699 :デフォルトの名無しさん2011/11/25(金) 01:42:19.22
>>691
その手の問題では一つの項も含むのが普通
700 :デフォルトの名無しさん2011/11/25(金) 01:55:25.78
>>699
どもです。数学的には「連続する」とはゼロでなければ
(1個であっても)連続していると考えてよいわけですね。

>>696
そういうことになりますね。
694 :デフォルトの名無しさん2011/11/25(金) 01:15:16.04
処理系によって、floatとdouble、またはfloatとdoubleとlong doubleの形式が同一のものがあるそうなんですが、そうすることのメリットについて具体的に教えて下さい
697 :デフォルトの名無しさん2011/11/25(金) 01:34:26.32
>>694
floatを実装する意味がない、long doubleのサポートがコストに見合わない、
などの理由だな。
つまり、処理系側の都合ってこと。
695 :デフォルトの名無しさん2011/11/25(金) 01:16:20.20
>692
この世にあるプログラムと同等なことすべて。

マイクロソフト ワイヤレス ブルートラック マウス Arc Touch Mouse RVF-00006
マイクロソフト ワイヤレス ブルートラック マウス Arc Touch Mouse RVF-00006