トップページ⇒tech
1001コメント285KB

C言語なら俺に聞け(入門編)Part 118

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2013/08/11(日) NY:AN:NY.AN
C言語の入門者向け解説スレッドです。

★前スレ
C言語なら俺に聞け(入門編)Part 117
http://toro.2ch.net/test/read.cgi/tech/1373675124/
★過去スレ
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++の宿題片付けます 165代目
http://toro.2ch.net/test/read.cgi/tech/1370255305/
★C++言語については避けてください。C++対応明記スレへどうぞ。
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること。
  # サイズが大きい場合はアップローダ等を利用してください。
http://codepad.org/
http://ideone.com/
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
09519482013/09/02(月) 23:27:39.99
>>950
これってなんでこんなに複雑なんですか?何一つ理解できないんですけど。
JavaだとFrame("title");で終わりですよね?
何故?というか教えて下さい。
0952デフォルトの名無しさん2013/09/02(月) 23:35:46.21
スレチ
0953デフォルトの名無しさん2013/09/03(火) 00:04:22.44
>>951
MFCスレとかC++スレが良い。この話をここでやるとスレが脱線する
0954デフォルトの名無しさん2013/09/03(火) 00:08:46.62
そりゃ使い方分かればその方が簡単になるからや
0955デフォルトの名無しさん2013/09/03(火) 00:38:24.42
2次元配列をまとめて3次元配列として扱いたいのですがうまくいきません。
グローバル変数として
double a1[10][20] = { 数値 };
double a2[10][20] = { 数値 };
:
がありこれらをまとめて3次元配列としようとしています。

自分なりに調べたのですが↓とするとmake時にWarningが出ます。
double (A*)[10][20] = { &a1, &a2, ... };

正しい書き方をご存知の方いらっしゃいますでしょうか。
09569552013/09/03(火) 00:53:36.90
すみません。
↑はdouble (A*)[10][20] ではなくdouble (*A)[10][20] でした
0957デフォルトの名無しさん2013/09/03(火) 01:02:13.21
二次元配列の二次元配列をやりたいのか?
typedef double Ary[10][20];
Ary ary[10][20];

↑よかAryのポインタの配列の方がいいんじゃね?
Ary *ary[10][20];
09589552013/09/03(火) 01:13:41.32
>>957
なるほど、typedefを使用すればいいのですね
そのまま書くことのみを考えてしまってました
いまはビルド環境がなくすぐの確認は出来ないですが、明日作業場で確認します
ありがとうございました
0959デフォルトの名無しさん2013/09/03(火) 01:24:38.80
double (*A[])[10][20] = { &a1, &a2, ... }; だろ

配列へのポインタ配列
ちなみに (*a[i])[j][k] なんて書き方が必要なのは、配列へのポインタとポインタ配列を
混ぜると仕方がない

#include <stdio.h>

double a1[2][2] = { {1.0, 2.0}, {3.0, 4.0} };
double a2[2][2] = { {5.0, 6.0}, {7.0, 8.0} };

int main(void)
{
double (*a[])[2][2] = { &a1, &a2 };
int i, j, k;

for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++)
for (k = 0; k < 2; k++)
printf("%f ", (*a[i])[j][k]);
putchar('\n');
}

return 0;
}
0960デフォルトの名無しさん2013/09/03(火) 04:10:17.24
typedefでいいんじゃないの
0961デフォルトの名無しさん2013/09/03(火) 07:22:53.96
int siraberu(){
for(i=0 ; i>255 ; i++){
a++;
}
return a;
}

これで255が返るはずなんですけど値が0になってしまうんですがなぜでしょうか?
0962デフォルトの名無しさん2013/09/03(火) 07:37:38.66
単に符号が逆だっただけでした失礼しました
0963デフォルトの名無しさん2013/09/03(火) 07:40:11.15
符号が?
0964デフォルトの名無しさん2013/09/03(火) 07:52:31.64
よく確認もせず質問するゴミクズ
0965デフォルトの名無しさん2013/09/03(火) 07:52:37.23
不等号
0966デフォルトの名無しさん2013/09/03(火) 21:49:45.90
さっきC言語始めました。文字列を表示させるために#includeで説明書追加して。。。
#include <stdio.h>

int main(void)
{
printf("aho");
return 0;
}

これでコンパイルしたらコンパイルエラーとして
コンパイラに内部エラーが発生しました。
_start not defined
って出てくるんですがどういうことがまずいんですか?
0967デフォルトの名無しさん2013/09/03(火) 22:04:01.50
>>966
エラーから察するにコマンド打つときに恐らく.libか.oファイルの指定が足りてない
それ以上は環境がわからないので答えようがない
09689552013/09/04(水) 00:40:21.80
>>959
959さんの方法が想定していたものに一番近かったので採用させていただきました
ありがとうございます

私の中ではa[i][j][k]の形となるかな、と想定していたのですが
実現するにはmemcpy等を使用する冗長なコードしかなさそうです

ともあれお蔭様で解決することができました
typedefの案を下さった>>957さん、>>959さん
重ねてありがとうございます
0969紅光の騎士ライジングノヴァ ◆sWBUz7TGM2 2013/09/04(水) 01:12:10.07
JavaScriptの値入れるだけで画面に反映されるのがどうも感覚的に合わない
document.getElementByID('test').innerHTML="テストだぜベイビー";
とかさ、
C的にやるなら構造体用意して値入れてアドレス渡して画面を際描画でしょ?
JavaScript作った奴はマジで頭悪いと思う
0970デフォルトの名無しさん2013/09/04(水) 01:15:12.39
それは言語関係ないじゃないの
0971デフォルトの名無しさん2013/09/04(水) 01:25:04.46
>>968
いやいや これでいいやろ
#include <stdio.h>

double a1[2][2] = { {1.0, 2.0}, {3.0, 4.0} };
double a2[2][2] = { {5.0, 6.0}, {7.0, 8.0} };

int main(void)
{
double (*a[])[2] = { a1, a2 };
int i, j, k;

for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++)
for (k = 0; k < 2; k++)
printf("%f ", (a[i])[j][k]);
putchar('\n');
}
0972デフォルトの名無しさん2013/09/04(水) 01:26:47.96
JSは消滅すべき糞言語だったけど
Googleが自分のシェアにモノを言わせて延命させちゃったんだよな
0973デフォルトの名無しさん2013/09/04(水) 01:47:50.70
>>971
本当やね
これで行けちゃう

double a1[2][2] = { {1.0, 2.0}, {3.0, 4.0} };
double a2[2][2] = { {5.0, 6.0}, {7.0, 8.0} };

int main(void)
{
double (*a[])[2] = { a1, a2 };
int i, j, k;

for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++)
for (k = 0; k < 2; k++)
printf("%f ", a[i][j][k]);
putchar('\n');
}
0974デフォルトの名無しさん2013/09/04(水) 02:47:53.09
jsが延命されたせいでflashになったりhtml5になったりマジで厄介。
0975デフォルトの名無しさん2013/09/04(水) 03:27:22.59
まったく、jsは最高だぜ
0976デフォルトの名無しさん2013/09/04(水) 03:31:45.55
どこがだよ
デバッガ導入しないとまともに使えないカスJS
0977デフォルト名無しさん2013/09/04(水) 06:08:43.01
>>966
コンパイラを書けよ
0978デフォルトの名無しさん2013/09/04(水) 06:38:00.38
>>966
エラーメッセージから察するに tcc(Tiny C Compiler) かな。
「学習用C言語環境」でもインストールしたんだろうか。
コマンドプロンプトで直接コンパイル(>tcc test.c)すると動いたよ。

学習目的であっても、最初に触るCコンパイラは Microsoft Visual C
(Windows)、あるいはgcc(Linux)がオススメだよ
0979デフォルトの名無しさん2013/09/04(水) 06:48:45.74
JSとか使えるようにするから馬鹿が糞サイト量産するんだろ。
Cで書いてコンパイルしたやつを埋め込まないとそういうの使えないようにしとけボンクラ。
0980デフォルトの名無しさん2013/09/04(水) 06:59:51.91
でもまあ、トラブルが多い状況だからこそ腕のいいプログラマーにとっては
金儲けのチャンスだったりする。痛い目に遭ったクライアントは、次からは
少し高い金出しても、腕のいい職人を探してサイト作らせようとするから。
おっと、ここはC言語スレだったし
0981デフォルトの名無しさん2013/09/04(水) 07:55:58.89
JavaScriptはブラウザ間の実装の違いが問題だと思うよ

Cみたいにコンパイルしてしまうならそういった状況は減るだろう
0982デフォルトの名無しさん2013/09/04(水) 09:41:33.11
変数に型があってコンパイル可能な言語を
ブラウザにも実装すべき。
フラッシュとジャバアプレットはあの領域内でしか
動作しないから役不足。
あのまま全画面フラッシュになれば
領域がブラウザのクライアントエリアと一致するからまだ良かったんだけど
どっかの馬鹿がジャバスクリプトマンセーしたせいで
こんなことになった。
0983デフォルトの名無しさん2013/09/04(水) 10:11:35.86
役不足の意味を知らない馬鹿よりまし
0984デフォルトの名無しさん2013/09/04(水) 10:26:44.46
JavaScriptは言語としてはけっこう好きだ
0985デフォルトの名無しさん2013/09/04(水) 13:53:30.71
そこまで叩くなら代替言語用意しろよ
0986デフォルトの名無しさん2013/09/04(水) 14:47:50.99
C言語初めて3ヶ月ぐらいの初心者です
if(!a) は0の時だけ、真になるってわかったんですけど

if(a != b) の場合はどうなるんですか?
0987デフォルトの名無しさん2013/09/04(水) 15:06:27.41
ifはゼロかそれ以外での分岐。
「a != b」はaとbが等しいなら0、aとbが異なるなら1になる。
整数だったら、
if(a != b)とif(a-b)の分岐は一致するだろう。たぶん。
0988デフォルトの名無しさん2013/09/04(水) 15:30:08.33
ttp://pastebin.com/XaibiWcC
44行目の
if (ch1 != ch2) {
printf("ファイルの内容が %lu バイト目で異なります", l);
same = 0;

これ意味がわからないんだけど?
正しいなら一致してるで・・・
0989デフォルトの名無しさん2013/09/04(水) 15:31:53.85
そりゃぁ、
a != b
は両辺からbを引くことで
a - b != 0
になるからねぇ。
しかし、3箇月も経って>986の質問するようだと……
0990デフォルトの名無しさん2013/09/04(水) 15:33:29.34
>>988
ch1とch2が等しくないから「異なります」なんだろ。
どこに疑問が?
0991デフォルトの名無しさん2013/09/04(水) 15:45:17.08
三ヶ月も経ってるなら、ファイルから1バイトづつ読み込み/比較とか効率悪すぎるから
読み込みバッファ用意するくらいにはなってて欲しいよね
0992デフォルトの名無しさん2013/09/04(水) 16:27:41.03
>>991
読み込みバッファ使ってるじゃん
0993デフォルトの名無しさん2013/09/04(水) 16:57:12.64
読み込みバッファの適切なサイズ教えてください
0994デフォルトの名無しさん2013/09/04(水) 17:14:49.68
2の累乗
0995デフォルトの名無しさん2013/09/04(水) 17:25:00.02
PCなら4096を基準に増やしたり減らしたり試せばいい
0996デフォルトの名無しさん2013/09/04(水) 17:35:16.83
保証されてる配列の最高の長さは?
0997デフォルトの名無しさん2013/09/04(水) 17:40:37.65
配列の長さの高さとはなんぞ?
0998デフォルトの名無しさん2013/09/04(水) 18:41:14.84
うめ
0999デフォルトの名無しさん2013/09/04(水) 19:13:42.88
>>996
そのプロセスが確保できるスタックなりヒープなりの空き領域による
そういうことを聞いているんじゃなくて?
1000デフォルトの名無しさん2013/09/04(水) 19:17:27.41
1000なら日本語からやりなおせ
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。