08/04/30 15:38:30
英語では文末記号にピリオド(.)が使われているが、なぜC言語にピリオド(.)ではなく、セミコロン(;)を使うのか教えてもらえませんか。
40:デフォルトの名無しさん
08/04/30 15:42:58
仕様
41:デフォルトの名無しさん
08/04/30 15:48:39
>>39
英語じゃないし。
42:デフォルトの名無しさん
08/04/30 15:53:12
ピリオドだとカンマと見分け付かないから、俺は嫌だな。
43:デフォルトの名無しさん
08/04/30 15:55:14
英語では、ピリオドより弱い区切り記号としてセミコロンが使われます。
また、ピリオドは文中でも小数点記号として使われることがあります。
この辺りを鑑みてセミコロンを文末記号として使うことにしたのでしょう。
もしかしたら、そういうスタイルの言語が既にあったのかも知れません。
44:デフォルトの名無しさん
08/04/30 15:57:03
ピリオドに対してはコンマじゃね?
45:デフォルトの名無しさん
08/04/30 16:03:28
あと、コロン、セミコロンに関しては、英語でなくても
ある名目に対しての説明、要するに = のような役割をしているよ。
46:デフォルトの名無しさん
08/04/30 16:26:23
>>44
文の区切り記号としては、ピリオド>セミコロン>カンマの順で弱くなる。
47:デフォルトの名無しさん
08/04/30 16:28:45
何この勘違い野郎?使い方を知らない奴が、勝手に強弱を語るって、アホか?
URLリンク(dictionary.goo.ne.jp)
もちっと英文を読もうぜ?インターネットを使っていて、国境なき情報収集手段で
ジャポネーゼ文字だけ見ていても仕方なかろう?
48:デフォルトの名無しさん
08/04/30 16:31:13
>>47
えーと、どなたかコロンの強弱に言及なさってましたか?
49:デフォルトの名無しさん
08/04/30 16:36:04
今基礎的なこと勉強してるのですが
中々とっつき難いです、最初はこんなものなんでしょうか?
ちなみに本を読んで独学で勉強してます
50:デフォルトの名無しさん
08/04/30 16:37:15
>>43
その理由ってお前の思い込みだろ?理由なんてどうでも良いんだよ
ソースコードを記述するのに使われている区切り、ただそれだけ。
っつか、ソースで . や , を区切りとして使っている例を持ち出してみよう。
引数の区切りに , (コンマ)が使われておりますがっ、良いですか?
. (ドット)を使った、オブジェクト指向のコードにメソッドやクラス、構造体の要素を
結合する場合にも使われています。そうなると、ピリオドが終わりを意味するのではなく
結合に使われているという、文章の区切りでの説明が矛盾します。
ゆえに、これ以上個人的な思い込みではなく、規格書があるならそれを用いるなり
法律で言う基本原則の憲法を用いるような形で説明を求めます。
なんで、基本ルールを無視して、あいつ気にくわねぇ、基本的人権を無視して
俺ルールで批判してやれとかって話になるのでしょうか?理解不能
51:デフォルトの名無しさん
08/04/30 16:39:08
46 名前:デフォルトの名無しさん 投稿日:2008/04/30(水) 16:26:23
>>44
文の区切り記号としては、ピリオド>セミコロン>カンマの順で弱くなる。
↑お前じゃん。っつか、>>43は英語を持ち出しただろ?
区切りにコロンも存在するが、セミコロンはそれに対して「セミ」といった
セミロング、セミダブル、セミヌードなど「半ば」や「半」といった意味が付いた言葉ですが?
URLリンク(dictionary.goo.ne.jp)
52:デフォルトの名無しさん
08/04/30 16:41:13
理由なんてない。規格でそうなってるんだよ。
もし規格で\を区切り文字にする言語を作ればそういう規格になるだけ。
理由なんてない。考えるな。感じろ。
53:デフォルトの名無しさん
08/04/30 16:46:54
URLリンク(k-tan.staba.jp)
以上。区切りとは限らない、ましてや続きとして and の役割とも。
しかし、ソースコードでは流れとしては確かに上から順に
続く意味があるが、1行の分の終わりに使われる。
一方、コンマやピリオドは接続的な役割をしている。(引数、メソッド、メンバーなど)
区切りの強弱で説明をつけるのは、ナンセンス。所詮、人間が勝手に決めたもの。
54:43=46
08/04/30 17:22:51
>>51
>46は>44に対してなので、英文での話です。
それはさておき、「半分(半ば)」の「コロン」ってのは微妙ですね。
まぁ、M-Wにはこう書いてあるわけですが。
--
semicolon
a punctuation mark ; used chiefly in a coordinating function between major sentence elements (as independent clauses of a compound sentence)
colon
a punctuation mark : used chiefly to direct attention to matter (as a list, explanation, quotation, or amplification) that follows
comma
a punctuation mark , used especially as a mark of separation within the sentence
period
a point . used to mark the end (as of a declarative sentence or an abbreviation)
--
一応拙いながら訳しておきますとこうなります。
==
セミコロン: 句読点「;」は主として主要な文章要素の調整機能に使用される。
コロン: 句読点「:」は主として後続の重要項目に対する注意として使用される。
カンマ: 句読点「,」は特に文中で分離記号として使用される。
ピリオド: 点「.」は終わりを示すために使用される。
==
コロンはどちらかと言うとマーカーということですから、セミコロンとは役割が違うということですね。
>>50
>43は英文でのセミコロンの使われ方から推測しているわけです。
また、ピリオドに関しても「文の終端」という機能以外にも「小数点記号」などとして使われるからこそ、
Cでは終端記号として採用されなかったのだろうという推測です。
まぁ、「理由なんてどうでもいい」という話だけなら納得できますが。
後半は私には関係ないと思いますが、どなたか「批判してやれ」って話をなさってます?
私がアホ呼ばわりされているだけの気がするのですが。
55:デフォルトの名無しさん
08/04/30 17:33:29
>>54
お前さぁ、周りから変な目で見られてない?英数文字がコードでは
原則的に使われているが、あれは機械が演算するのを
人間がわかるコードで記述したものであって、英文法じゃないからw
どこで1文が区切られているか?の規定ごとに、英語の強弱が
関与してますよと説明して、それが根本から覆された説明文を見て
まだつまらない食い下がりをするの?すまんが、あんた何者だ?
標準化を決めている組織の関係者か?ただの一講師か?
初心者の生徒か?ナンバーサイン野郎にしろ、気持ち悪い思い込みが激しい香具師が目立つな
56:デフォルトの名無しさん
08/04/30 17:36:41
それじゃさぁ、HTMLにおいて、タグを <>で囲っているが、これは?
数学ではその記号はジャポネーゼでは大なり、小なり、英語では
greater than , less than という意味だが?言語や使われ方によって
本来の意味なんてナンセンスだろ?もともと演算子の優劣でさえ
人間が勝手に決めたものだよ。
57:デフォルトの名無しさん
08/04/30 17:50:57
ピリオドは小数点とかぶるからじゃね?
58:デフォルトの名無しさん
08/04/30 17:56:17
私の為にけんかはやめて!
59:デフォルトの名無しさん
08/04/30 18:03:28
= は式を計算して導くというよりも、プログラム言語では
左にある変数に対して 代入 となる。
しかし、人間が数学で使っている 3+4=7 は 3+4 は 7 という結果
あるいは7と等価という意味であり、全く意味が異なってくる。
比較演算子に == と決めたが、これは 成り立つかどうか? という評価であって
結局人間がコンピュータに解釈させるために決めたことであって
コンピュータが人間の言語として理解しているわけではない。
そこで、英文法での優劣を持ち出されて説明されても、へっ?意味が分からないんすけど?
ってなるわな。
60:デフォルトの名無しさん
08/04/30 18:06:53
英語とC言語は別物、ってことでいいでしょ
次の質問をどうぞ↓
61:デフォルトの名無しさん
08/04/30 18:14:45
またいつものキチガイかw
62:デフォルトの名無しさん
08/04/30 19:32:03
流れが読めません><
しかも中身のなさそうな長文ばかりで読む気がしません!
63:デフォルトの名無しさん
08/04/30 19:39:49
>>61
ようキチガイ
64:デフォルトの名無しさん
08/04/30 21:25:34
>>61 自己紹介乙。お前かなり頭がイカれてんな。こんなところに常駐して
自分が気に食わない奴をネチネチ煽るその性格。人間性のレベルが低すぎ。
あと、プログラミングに関してもお前は頭が悪いから向いてないよ。
65:デフォルトの名無しさん
08/04/30 21:33:59
IDも出ない板で雑談と煽りあいですか
66:デフォルトの名無しさん
08/04/30 21:36:01
>>62
長文になると中身が分からなくなるなんて、
受験じゃ国語と英語は失敗するぞ、お前。
数学も題意が分からずに間違った解答をするでしょうな。
67:デフォルトの名無しさん
08/04/30 21:37:59
>>55
お説ごもっともですが、すべてのファイルに EOF があると思っているとか、
#define で複数行にわたるときの書き方をしらないあなたに何を言われてもねぇ。
68:デフォルトの名無しさん
08/04/30 21:39:43
ナンバーサイン野郎はキレるとファビョると、メモメモ
69:デフォルトの名無しさん
08/04/30 21:39:59
質問系のスレって何でこんなに荒れるの?
70:デフォルトの名無しさん
08/04/30 21:43:33
ナンバーサインがキレたw
71:デフォルトの名無しさん
08/04/30 21:51:23
>>69
この世に10種類の人間がいるから。
72:デフォルトの名無しさん
08/04/30 21:55:52
スレリンク(tech板:758番)
基地外登場、以後放置よろ
73:デフォルトの名無しさん
08/04/30 22:15:44
途中、英語では・・とか意味不明なのがありましたがC言語の世界に戻ってよろしいですか?過去眺めてると pointer が肝なのかな。たとえば・・
int *a;
a[0] = 10; a[1] = 20; ...
のような事を始めてみたりしてます。これはあまり必要性が見えません。必要ないのに pointer を使うとろくなことは無いわけです。
以下が良い例と言うわけではないが気分は伝わるといい。
const int mdayA[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
const int mdayB[] = {0,31,29,31,30,31,30,31,31,30,31,30,31};
int* mday;
if(うるう年なら)
mday = mdayB;;
else
mday = mdayA;
以下 mday[] でうるう年の時もそうでないときも同じソースで記述てきる。
これを
const int mday[2][13]
= {{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31}};
mp = 0;
if(うるう年なら)
mp = 1;
mday[mp][] となるよね。
pointer を使うと何かすっきりしそう。気分の問題です。
74:デフォルトの名無しさん
08/04/30 22:16:23
じゅーろくしゅるいでじゅーろくちゃ
75:デフォルトの名無しさん
08/04/30 22:19:38
>int *a;
>a[0] = 10; a[1] = 20;
なんにもわかってないw
76:デフォルトの名無しさん
08/04/30 22:29:25
>のような事を始めてみたりしてます。
誰がだYOw
77:デフォルトの名無しさん
08/04/30 22:31:37
>>73
前者は致命的に間違ってる
後者はむしろ構造体の出番だw
78:デフォルトの名無しさん
08/04/30 23:38:17
>>75 >>76 >>77
こんなコードを書いて質問する人がC始めた人に多いというがいいたいのだヨん。
この前のスレみてて何度か目にしたよ。
とにかくチミ達は始めに3行みて反応してるね?(2chはそんなもんか・・w)
79:デフォルトの名無しさん
08/04/30 23:41:47
最近C言語を勉強し始めたものです
今日、「Hello World」まで出来ましたが。。
参考書を読みつつ覚えるのも飽きてきましたorz
そこで、簡単な問題を出して頂けませんか?
よろしくお願いします
80:デフォルトの名無しさん
08/04/30 23:44:29
HelloWorldで飽きた人間に出せる簡単な問題って難しくないか?
fizzbuzzとか?
81:デフォルトの名無しさん
08/04/30 23:44:49
>>79
テキストファイルを開き、その文字列の中から
abcと言う文字が何個含まれているか、カウントして
なおかつ該当箇所が何行目にあったかを表示せよ。
82:デフォルトの名無しさん
08/04/30 23:47:22
おまえら優しいな・・・・・・・
83:デフォルトの名無しさん
08/04/30 23:55:01
>>79
では史上最初に出現したアルゴリズムを追体験してみましょうか。
「a = 1190, b = 1394 とおき、a, b の最大公約数を求めよ。」
84:デフォルトの名無しさん
08/04/30 23:57:07
最大って存在すんの?
85:79
08/04/30 23:59:06
>>81 >>83さん早速のレスありがとう御座います
早速がんばってみます
86:デフォルトの名無しさん
08/04/30 23:59:53
>>79
朝だったら、おはよう。昼だったらこんにちは、夜だったら今晩は、夜中だったっら、おやすみなさい明日はオハヨウって表示するように改造するんだ。
87:デフォルトの名無しさん
08/05/01 00:11:06
っつか、素数を1~2^32 -1 の範囲内で求めよ。
むっちゃ時間かかるで?w
88:デフォルトの名無しさん
08/05/01 00:13:47
配列サイズの決め撃ち禁止するなら
とりあえず deque の実装からはじめないとな
89:デフォルトの名無しさん
08/05/01 00:14:29
別に両端に追加できなくても最後に追加さえできればいいじゃん
90:デフォルトの名無しさん
08/05/01 00:16:17
dequeである必要は無いだろ
まずは単方向リストだろ
91:デフォルトの名無しさん
08/05/01 00:23:30
配列リストだな。
つーか効率的に実装したスタック?
92:デフォルトの名無しさん
08/05/01 00:24:22
俺はチムポラリーファイルを使わせてもらうぜ
93:デフォルトの名無しさん
08/05/01 00:30:38
>>92
サイズ足りなすぎw
94:デフォルトの名無しさん
08/05/01 00:35:27
その前に書き込み保護されて書き込めません
95:デフォルトの名無しさん
08/05/01 00:57:12
>>65
そう、でも宿題スレではその実力のほどが露呈されてしまったので、さすがに出てこなくなったようです。
出したり引っ込めたり、くだらないソースなのに一人芝居をうじうじしていているのをみて、期限きって答えを書いてやりました。
無論、宿題スレでバンバン答えを出していただけるのであれば、歓迎します。
96:デフォルトの名無しさん
08/05/01 00:58:24
>>95
お前がまともに答える能力がなく、コピペに反応して必死になっていた
基地外ですって自己紹介乙w
97:デフォルトの名無しさん
08/05/01 00:59:18
>>95
> 期限きって答えを書いてやりました。
もろにあのときに、ソースを書くわけでもなく噛み付いていただけの
無能ですって露呈しているのがお前なのがワロスw
98:79
08/05/01 01:00:33
>>83さんできました。1時間以上かかりましたorz
#include <stdio.h>
main()
{
int a=1190,b=1394,c=-1;
while(c !=0){
c=b%a;
b=a;
a=c;
}
printf("最大公約数=%d",b);
}
>>81さん、>>87さんのはハードル高そうなので
次は>>86さんのをやって見ます
板汚しスイマセン
99:デフォルトの名無しさん
08/05/01 01:05:50
>>95 = EOFに関してナンバーサインに加担していたバカ
スレリンク(tech板:103番)
スレリンク(tech板:139番)
スレリンク(tech板:141番)
スレリンク(tech板:249番)
スレリンク(tech板:404番)
スレリンク(tech板:407番)
分かるだろ?大学で実験もしたこともない低レベル共。
お前ら笑われるぞ、コードだけでプログラミングできたとか言ってるとw
100:デフォルトの名無しさん
08/05/01 01:09:50
>>95
お前が糞だから無能を露呈しないためにも、簡単な答えの分かりきった
宿題しか答えられい、実力なきクズだとばれているから。
その言動にお前のレベルの低さが露呈されてますよw
101:デフォルトの名無しさん
08/05/01 01:24:09
>>95 ん?もう終わりか?威勢が良くないな、ヘタレ小心者。
お前みたいな奴は、一生まともにはなれんよ。思い上がりの前に
気に入らなきゃ誰それ構わず、自分が間違っていようが多勢に無勢で
攻撃をするから失敗するんだよ。まぁ、もちっと人間社会の人間慣れをするんだな。
所詮誰でも自分なんて数多くいる人間の中の一人。
どんな偉人でも完璧な人はいない。ましてや、こんなスレで初心者相手に
自分は相手が知らないことを知っているということで、安心しているようじゃ
先が知れてる。自分が知らない、体験したことがないことなんていくらでもあるが
こんなの基本は分かりきっていることだろ。その基本事項を用いた説明に対して
自分の体験談や思い込みで反論するから、簡単に跳ね返されるんだよ。
お前じゃ、炭素とダイヤが同じ成分で構成されていることすら知らんだろうよ。そんなもん。
102:デフォルトの名無しさん
08/05/01 01:50:00
>>98
結構前にこのスレだかで見た気がするが「projectEuler」とやらをやればいいじゃない
C言語というよりアルゴリズム、数学の問題だが
103:デフォルトの名無しさん
08/05/01 01:50:01
>気に入らなきゃ誰それ構わず、自分が間違っていようが多勢に無勢で
>攻撃をするから失敗するんだよ。まぁ、もちっと人間社会の人間慣れをするんだな。
自分のことだろw
104:デフォルトの名無しさん
08/05/01 02:02:32
相手してるやつのほうがうぜえよ
放置しろ
105:デフォルトの名無しさん
08/05/01 03:41:09
>>103
基地外馬鹿が、その程度の反論しかできないのか、お前性格が腐ってんぞ。
自分のしたレスを読み返せ、こぴぺに反応した馬鹿w
106:デフォルトの名無しさん
08/05/01 05:14:50
>>95
> 期限きって答えを書いてやりました。
期限が延長していたわけだが、どこに噛み付いてだこの基地外?
107:デフォルトの名無しさん
08/05/01 09:44:33
宿題スレで延々と続けたスレ違いを、このスレでもやろうというのか
別の場所でやれ
108:デフォルトの名無しさん
08/05/01 10:37:34
>>107
すみません。
109:デフォルトの名無しさん
08/05/01 10:38:16
>>107
申し訳ありませんでした
110:デフォルトの名無しさん
08/05/01 10:40:21
>>107
ごめんなさい。
111:デフォルトの名無しさん
08/05/01 13:01:29
型の違うものの配列ってどうやって実装するの?
112:デフォルトの名無しさん
08/05/01 13:10:57
void* array[]
113:デフォルトの名無しさん
08/05/01 13:45:52
>>111
普通は共用体の配列(場合によっては、データを保存するための共用体と型を記憶するためのフラグ変数をセットにした構造体の配列)を使う
型のサイズが極端に不ぞろいでメモリを節約したい場合にはvoid *の配列を作って各配列要素に適切な領域を割り当てる
114:デフォルトの名無しさん
08/05/01 13:53:21
>>107 最初に蒸し返した >>103 >>95 お前が言うなよw
115:デフォルトの名無しさん
08/05/01 13:57:03
>>107=>>103=>>95だったのか。
IDでない板は自演が楽でいいな。
116:デフォルトの名無しさん
08/05/01 14:17:46
強制IDのところへ移動してやったらどうかね?
117:デフォルトの名無しさん
08/05/01 15:44:09
質問です。
初歩的なことですいません。
親関数から子関数にとんだときに子関数がreturnしたら親関数も一緒にreturnすることってできますか?
例えば、、、
void func(void)
{
sub();
いろいろな処理;
return;
}
void sub(void)
{
return;
}
となったときに
『いろいろな処理』を行わないでfunc関数を終了したいのです。
適当に作った関数なのでそこの突っ込みはなしてお願いします。
subに値を返させてfunc関数内でsubを呼び出した後にif文で処理するのが
オーソドックスなのかと思いますが、
func内でif文を追加できない状況です。
exitも全て終了してしますのでダメです。
よろしくお願いします。
118:デフォルトの名無しさん
08/05/01 15:46:58
longjmp するくらいしかないんじゃないか?
119:デフォルトの名無しさん
08/05/01 15:47:39
func内にifが追加できない状況ってのがよくわからん。
っていうか、その例だといろいろな処理は常に実行されないってこと?
120:デフォルトの名無しさん
08/05/01 15:48:24
void func(void)
{
sub();
いろいろな処理;
return;
}
↓
void func(void)
{
sub();
/*いろいろな処理;*/
return;
}
121:デフォルトの名無しさん
08/05/01 15:49:27
多分 func がライブラリで提供される関数で、
sub をコールバック関数として渡すんじゃないかと思われ。
122:デフォルトの名無しさん
08/05/01 15:52:02
だと仮定するとsubでスタックをいじるとかあやしい事するしかなくね
あるいはコードを直接書き換えるか
123:デフォルトの名無しさん
08/05/01 15:59:59
jmp_buf env;
を作って、func を使う部分を
if (! setjmp(env)) func();
とし、sub 内で return する代わりに
longjmp(env, 1);
とする。
これで一応目的の動作にはなる。
それでいいのかどうかは知らんが。
124:デフォルトの名無しさん
08/05/01 17:20:34
func()呼ばずにsub()呼べばいいだけじゃ
125:デフォルトの名無しさん
08/05/01 17:38:07
>124に1票
あるいは、sub()の後の"いろいろな処理"を別メソッドにして、func()呼び出している側がそれを呼び分ける
126:デフォルトの名無しさん
08/05/01 17:42:41
>>112,113
おk
試してみる
void*の配列のほうが汎用性が高そうだけど型キャストがめんどくさそうだ
127:デフォルトの名無しさん
08/05/01 19:30:02
>>121 - 125
回答ありがとうございます。
正直言いますと自分の設計ミスなんですが、上の例で言いますと、
func関数内でsubに引数与えて(例では引数ありませんが)何回も呼び出してるんですよ。
で、subはエラーを返すんですが、funcに返ってきた時点でエラーならさらに上の関数に戻りたい。
しかし、subを呼び出す度にif文処理をするのが妥当なんですが、時間もかかるので、
もし何か良いやり方があったら教わろうとしたわけです。
jmp関数はgoto文と似ていますね。
goto文は使わない方が良いと言われていますがやはりjmpもできる限り使わない方が良いんですか?
128:デフォルトの名無しさん
08/05/01 19:40:57
>時間もかかるので
そんなことを気にしなきゃならないような状況なら
悪いことはいわないから設計からやりなおせ
129:デフォルトの名無しさん
08/05/01 19:42:38
せいぜい、整数の判定をかけるだけのif文はさむよりも
longjmpにかかるコストのほうがでかいなんてことにならないようにな
130:デフォルトの名無しさん
08/05/01 19:53:06
if文処理するのが妥当なの分かってるんならif文で処理しろw
131:デフォルトの名無しさん
08/05/01 21:07:17
直せるけど面倒臭いだけかよ!
C限定じゃなければsub()で例外スローして終了なんだけど
涙目でsubの呼び出し箇所をひとつづつ修正していくんだ
132:デフォルトの名無しさん
08/05/01 21:58:00
素直にfunc()の設計しなおしをお勧めするね。
133:デフォルトの名無しさん
08/05/01 22:03:20
>>98
OK です。記述方法はいろいろありますが、いずれまた、この問題にもどることになると思います。
>>114
>>67=>>83=>>95=>>108
134:デフォルトの名無しさん
08/05/01 22:16:15
>>133
誰がいつすべてのファイルにEOFがあると言ったん?
お前の勘違いの方がアホだろ・・・あのね、思い込みで
話をこじらせるな。EOFの入力について。
もうね、お前みたいな 入力 の基本も知らない奴にバカ呼ばわりされたくねーから
最終的には、やはり学んだ場所、学歴が重要だってわかったわ。
いくら優秀なドライバーでも事故が起きれば終わりだしな。そんなもんだぞ、人生は。
135:デフォルトの名無しさん
08/05/01 22:17:30
で、あのプログラムにおいて、EOFを入力させると無限ループするってトラブルが
対処されていなかったという、穴があったという話で、良くここまでしつこく粘着が出来るな。
マジきめぇよ、お前。性格狂ってんな。絶対に社会に出てくるなよ。お前みたいな奴は
何をしでかすか分からないからw
136:デフォルトの名無しさん
08/05/01 22:19:24
お
話
も
終
い
137:デフォルトの名無しさん
08/05/01 22:19:41
>>67
> #define で複数行にわたるときの書き方をしらないあなたに何を言われてもねぇ。
言った覚えねーわ・・・なんだこいつ?妄想癖があるのか?マジきめぇ、あぁきめぇ
どんな面してんだろ?鏡見てこいよ、それ、お前の面だから m9(^д^)
138:デフォルトの名無しさん
08/05/01 22:21:51
>>95
> その実力のほどが露呈されてしまったので、さすがに出てこなくなったようです。
お前の実力がしょぼいから、そうやって個人叩きしか出来ないか
資料を調べて必死に抵抗することしか出来ないんだろ?w
なんだよ、EOFがあるないを無理やり論点に持ち込む奴って?w
まるで、自分が違反をしても、他にも違反している奴がいるとか
あっ、俺に対して違反だといったお前、今違反しましたね?みたいな
ガキが小学生レベルの知能だな、こいつw
139:デフォルトの名無しさん
08/05/01 22:23:15
(∩. ゚д゚)アーアー聞こえない
140:デフォルトの名無しさん
08/05/01 22:31:21
質問です。
文字列の配列を直接引数として関数にわたしたいんですが、
引数の型定義はどのようにすればいいのでしょうか?
具体的には、
void function(??? data){
...
}
int main(void){
char mojimoji[10][80];
function(mojimoji);
}
といった感じで、???のところがわかりません。
"char *"、"char **"では駄目でした。
よろしくお願いします。
141:デフォルトの名無しさん
08/05/01 22:35:31
そういや、昔ASCII以外にもEBCDICがあったとか、んじゃお前は今更
それを使うのかと?なぁ、時代遅れのオッサンがここでのさばってんの?
インターネットを最近知ったとかで?今更古い手法に合わせてプログラミングをするの?
ねぇ?教えて、EOFがなかった時代を知っているプロさん?
っつか、ろくにコードを書かない奴ほど、ぎゃーぎゃーわめくよな、自治厨みたく。
実力云々以前に、他人の粗探しをして楽しいのか、こいつ?
142:デフォルトの名無しさん
08/05/01 22:35:46
char data[10][80]
143:デフォルトの名無しさん
08/05/01 22:37:40
void function(char * data){
}
int main(void){
char mojimoji[10][80];
function((char *)mojimoji);
}
か
mainは変えずに
void function(char (*data)[80])
void function(char data[][80])
144:デフォルトの名無しさん
08/05/01 22:41:32
原則的にはchar data[][80]
145:デフォルトの名無しさん
08/05/01 22:49:02
まぁ、ファイルにEOFがあろうがなかろうが、キーボードからの入力だから。
ナンバーサインはEOFの入力が出来ないとかほざいてただろ。
印字可能な文字ではないにしろ、代用の入力文字はあるというのに。
お互い様とは言わないが、粗探しする前に本題に目を向けてくれ。
入力とは、信号やデータなどを機器へ取り込むこと全般。その形式、手法は様々。
146:140
08/05/01 23:00:51
>>142-144
ありがとうございます。
早速明日やってみます!
147:デフォルトの名無しさん
08/05/01 23:46:09
C言語でURLの一部でブラウザを振り分けるプログラムを作りたいんですが、
プログラム内から、他の実行ファイルに引数を渡して実行するにはどうすればいいんでしょうか
コマンドプロンプトだと
C:\Program Files\Internet Explorer>iexplore URLリンク(***)
と同等の事をCでやりたいのですが
148:デフォルトの名無しさん
08/05/01 23:50:33
>>145
んん? EOF はファイルにあるのではなくファイルの終わりをみて返されるものだよね?
EOF (-1) は char でなく int で受けないと処理系で(俺は行ってる、俺は行かない)みたいな不毛な会話が飛び交ったりするし。
ま、なにか EOF の扱いで随分と迷走してる気はするな。そう、粘着するレベルのものではないよ。前にすすもうよ。
149:デフォルトの名無しさん
08/05/02 00:05:29
>>147
C言語の話としてやるならsystem()使えで終
実際にはWinAPIのShellExecute()を使うことになるだろう
詳しくはAPIスレで聞け
150:デフォルトの名無しさん
08/05/02 00:21:27
>>149
ありがとう
APIの事はほとんど分からんのでとりあえずsystemとやらを使って作ってみます
151:デフォルトの名無しさん
08/05/02 00:25:08
system はセキュリティ上の問題があるからな。
一応そこんとこは分かった上でよろ。
152:デフォルトの名無しさん
08/05/02 02:11:28
>>148
だからそのコードをキーボードから入力することについての話だったんだが・・・
何ごちゃごちゃその定義にまで話を持ち込もうとしてんだ???
お前ってさぁ、自分のステータスは良くなくても、所有している
スポーツカーがかっこいいだろ?乗るかい?って乗った女性を
家までさらっていくタイプだろ?目的がちがーうって振られるタイプでしょ?
153:デフォルトの名無しさん
08/05/02 02:19:13
スレ違い
154:デフォルトの名無しさん
08/05/02 02:25:20
URLリンク(www.google.co.jp)
EOFの入力は余裕で可能です、ありがとうございますた。
155:デフォルトの名無しさん
08/05/02 02:36:35
入力の終わりを通知することを「EOFを入力する」と定めるなら、余裕で可能です。
156:デフォルトの名無しさん
08/05/02 02:47:55
この前だってそういう話で終わったじゃないか。
157:デフォルトの名無しさん
08/05/02 03:01:33
荒らしに付き合うやつも荒らし
キチガイに付き合うやつもキチガイ
158:デフォルトの名無しさん
08/05/02 03:38:01
getchar()が云々はどうでも良い。キーボードから入力が可能です
当然EOFコードを検出するのに、ファイルの終わりを示している
コードを使うのもありです、本当に本当に、重ね重ね、ありがとうございますた!
159:デフォルトの名無しさん
08/05/02 09:40:33
□!!!これを見た貴方は3日以内に死にます!!!■
■死にたくなければ、このレスをコピーして他のスレに □
□10回貼り付けて下さい。1時間以内にです!もし無 ■
■した場合は、今日寝ている間に富子さんがやってきて□
□貴方の首を絞めに来ます。富子さんは太平洋戦争の■
■時に16歳という若さで亡くなった女の子で、未だに成 □
□仏していないそうです。信じる信じないは貴方次第。 ■
■今年になってからこのレスを無視した人で、“呪われ □
□て死亡した人”が続出しています。これは富子さんの ■
■呪い。呪われて死んでもいいのならこれを無視するこ□
□とでしょうね。 ■
■―貴方がこうしているうちに富子さんが後ろから見□
□ていますよ…。 ■
■□■□■□■□■□■□■□■□■□■□■□■□
160:デフォルトの名無しさん
08/05/02 11:08:02
おまえらがくだらん煽りあいをしてると初心者の人が質問しにくいだろ
161:その1は宿題スレね
08/05/02 11:30:28
どうせここは隔離スレ(その2)だからどうでもいいよ。
162:デフォルトの名無しさん
08/05/02 21:51:56
一つ目のウィンドウにHello、二つ目のウィンドウにWorld を表示させるにはどうすればいいんでしょう?
163:デフォルトの名無しさん
08/05/02 21:53:07
レベル7のエスパーを求む!
164:デフォルトの名無しさん
08/05/02 21:53:47
>>152
何か切れてる? Unixなら伝統的に ^D = EOF
そそ、だからといって通常に ^D (0x04) が現れても EOF にはならないよ。
とにかくファイルに EOF というコードが有ると勘違いしるのかとおもった。
>>160 おっと、すまん。そのとおりだ。
165:デフォルトの名無しさん
08/05/02 22:07:28
>>164
どのOSならとかどーでも良いんじゃい(竹原風に)
キーボードからの入力は可能だし、EOFはマクロで値が定義されているし
なんならそれに応じた入力をしてやりゃ良いんだよ。所詮俺らが視覚的に
見えているものは、デジタルデータ、0と1の組み合わせの符号、信号。
166:デフォルトの名無しさん
08/05/02 22:52:18
配列の宣言時に[]の中に変数って使えないんだっけ?
char num[sum];
みたいな
167:デフォルトの名無しさん
08/05/02 22:52:54
>>166
C99じゃあるまいし
168:デフォルトの名無しさん
08/05/02 22:54:49
>>163
すまない。俺はまだレベル6だ
169:デフォルトの名無しさん
08/05/02 23:02:16
つまりC99では使えると
170:デフォルトの名無しさん
08/05/02 23:06:20
「可変長配列」この辺かな
URLリンク(seclan.dll.jp)
171:デフォルトの名無しさん
08/05/02 23:14:11
>>170
そのページのsizeofのところでふいたw
図からわかるようにって、代入しただけで何がわかるんだよ
172:デフォルトの名無しさん
08/05/02 23:16:40
>>171
図の中のコメントに代入されるはずの値が書いてあるから
それを見ろということだろ。
173:デフォルトの名無しさん
08/05/02 23:23:54
>>166
結論からいうと変数は使えない・・・ので malloc alloc がある。
char* num = (char*)malloc(num*sizeof(char));
...
*(num+5) = 5; // or num[5] = 0; // みたいな...
...
free(num);
174:デフォルトの名無しさん
08/05/02 23:26:19
C99では使えるっつーの。
175:デフォルトの名無しさん
08/05/02 23:32:18
>>165
どうも何かごかいしているね。
EOF = (-1) が定義されているとしてこの -1 は入力できない値(int)なのよ。getchar() などが EOF と判断した条件の時に文字として存在しない値 (int)-1 0xffff あるいは 0xffffffff が返されるものなのだから。。。判るかな?
176:デフォルトの名無しさん
08/05/02 23:37:27
>>175
君ね、いい加減鬱陶しい。マクロを知らないのか?所詮、プログラム言語も仕様も
人間が都合よく定義、規格化しているだけ。EOFがどうとかどうでも良いんじゃい。
所詮 数値データ だと何度も言っているだろ。あとはマクロを使うことで
より幅広い環境で通用するという話。いい加減、大学にも通ってないような
低レベルとは話はしたくないんで。
177:デフォルトの名無しさん
08/05/02 23:38:13
>>174
使えた。
178:デフォルトの名無しさん
08/05/02 23:39:06
>>175
> この -1 は入力できない値(int)なのよ
これだけ取り出しても、こいつが相当な勘違い野郎だということがはっきりしたな。
入力の意味も広義で説明されていたというのに。ねぇ、こういう知ったかが
どこか政府が運営する機関の関係者にいたらどう思う?マジでやべーよ。
まぁ、こんな似非理系は当然、専門学校程度だろうけど。
179:デフォルトの名無しさん
08/05/02 23:46:30
URLリンク(www.google.co.jp)
EOFの入力は余裕で可能です、ありがとうございますた。
180:デフォルトの名無しさん
08/05/02 23:47:14
>>172
コメントの数字が正しいことはどうやって証明するんだよw
181:デフォルトの名無しさん
08/05/02 23:48:12
>>180
…
182:デフォルトの名無しさん
08/05/02 23:50:47
プログラムが扱う変数として、EOFの数値データをchar型などで扱うかまで
入力受付のライブラリを用いて話をするが、while(getchar()!=EOF); で
ループを止める際に、どうやって止めたいんだい、プログラムは?w
論点はそこじゃない。EOFが入力可能か?答えはYES。適切に処理しない
環境をいちいち持ち出されても迷惑。256色しか表現できない環境で
24ビット画像を正確に表示しようとしても無理なようにね。
くどいが、こんな目の前にある機械なんて、所詮人間がルール(規格)を決めて
定義されたとおりにコンピュータがデータを実装された能力に応じて
展開しているに過ぎない、人間が都合よく解釈できるように。
コンピュータには目の前の文字も画像も映像データも、0と1の塊にしか見えんよ。
あとは規則に則って処理しているだけ。
183:166
08/05/02 23:57:21
>>173
ありがとう
何故か、当然変数で宣言できると思っててエラーでまくってた
184:デフォルトの名無しさん
08/05/02 23:57:49
>>178
そんなむきにならならなくても。
185:デフォルトの名無しさん
08/05/02 23:59:05
>>175
> この -1 は入力できない値(int)なのよ
別にint型とは限らなくね?符号ありのchar型にも収まる数値だが?
#include <stdio.h>
int main(void) {
char a=EOF;
unsigned char b=EOF;
if(a==EOF) printf("a=EOF\n");
if(b==EOF) printf("b=EOF\n");
printf("a : %d / b : %d \n",a,b);
return 0;
}
186:デフォルトの名無しさん
08/05/03 00:10:02
さすがにそれはないわw
187:デフォルトの名無しさん
08/05/03 00:29:06
>>185
fgetc(), getc(), getchar() の返り値は int ですから、EOF (-1) はファイル中に存在する値でも
なければ、stdin から入力できる値でもないと思うのですが。
188:デフォルトの名無しさん
08/05/03 00:30:53
>>185
ああ、ようやく普通の人にであえたきが・・。勘違い >>182 系に辟易だったので・・・
で、実はそうではない。上位ビットが負号を示すのに用いられてるわけだけど
負号無しの unsigned char の場合 0x00 = 0, 0xff = 255 になって
負号付きの signed char の 0x80 ~ 0xff は -127 ~ -1 とするから -1 という意味合いはある。
だけどこの -1 を EOF とみてしまうと・・・それはとても困る。
なぜなら(0x00~0xff) の範囲にあるものすべて扱えないといけないから。
(0xff)が出現するバイナリーファイルの入出力はできないって事になるでしょ?
キーボードなどから (int(-1)) を入力できないデバイスはどうしたらいいかって事になるけど何度も既出だけど ^D (0x04) を犠牲にしそれを終端と意味付け、これをみて intサイズの -1 を返すという決めをしてる。
例で挙げている char a = EOF; の行でコンパイラから警告がでていない?(オプションによるけども char = int とするときの警告文)
後の比較系は int に負号拡張されるから見かけ動くようにみえてしまうので誤解しやすい。
0x7f (char) が 0x0000007f (int) に・・・同じ値 127 となる。
0x80 (signed char) が 0xffffff80 (int) に・・同じ -127 となる。
0x80 (unsigned char) は 0x000080 (unsigned int) ・・ 128・・という具合に・・
上位ビットを負号ビットに割り当てたのは負号拡張がとても容易だから。
a b が printf に渡った時点で負号拡張された int となっているからね。
189:デフォルトの名無しさん
08/05/03 00:32:33
#include <stdio.h>
int main(void) {
char a=EOF;
unsigned char b=EOF;
int aa=EOF;
unsigned int bb=EOF;
if(a==EOF) printf("a=EOF\n");
if(b==EOF) printf("b=EOF\n");
printf("a : %d / b : %u \n",a,b);
printf("aa : %d / bb : %u \n",aa,bb);
return 0;
}
後は受け付けた変数の型によって、それ相応に解釈されちゃってるけどね。
190:デフォルトの名無しさん
08/05/03 00:44:20
>>188
暴れてるのは一人だけで、まともに相手にすると余計暴れるからスルーしてるだけ
191:デフォルトの名無しさん
08/05/03 01:01:03
正直ここで何か聞こうかと思ってスレちょっと読んだが
「C言語きやすく質問おk」と書かれた扉を開けたら
腕組んでイライラした奴らがこっちを見て来た状況と同じくらい
質問しづらいんだが。
192:デフォルトの名無しさん
08/05/03 01:22:02
喋り方がむかつくってだけで正しい意見に対して脊髄反射で反論始めるとこうなるって良い見本だなw
193:デフォルトの名無しさん
08/05/03 01:33:53
>>183
おっ、丁寧に。サンプル間違ってたけどそこはなんだ。うまく修正してくれたわけか。C99 あるいは今の GNU C/C++系だと気付かなかった世界かもしれん。再変更する realloc もあるで。
194:デフォルトの名無しさん
08/05/03 01:53:55
>>191
あ!?んだよ!?
195:デフォルトの名無しさん
08/05/03 01:59:58
放置のできないバカはプログラム以前のことを勉強しなおせ
196:デフォルトの名無しさん
08/05/03 03:41:22
IDの出ない板はNGにしにくくて困る
いっそコテハンつけてその話題をやって欲しいんだが
197:デフォルトの名無しさん
08/05/03 03:47:00
とりあえずEOFをNGワードにすればおk
来月ぐらいまで我慢すれば飽きるでしょ
198:デフォルトの名無しさん
08/05/03 03:54:18
ちょ、宿題スレで解答書くときEOF使うから困るw
199:デフォルトの名無しさん
08/05/03 03:55:41
どうしても駄目なときはうpろだ使え
むしろsizeofを間違ってNGしないように気をつけろ
200:デフォルトの名無しさん
08/05/03 04:57:32
EOFで騒いでいるキチガイ様はこちらの一等席(最高に頭の悪い発言をしてくださいスレ)へどうぞ
スレリンク(tech板)l50
201:デフォルトの名無しさん
08/05/03 08:33:17
--- EOF
202:デフォルトの名無しさん
08/05/03 10:55:48
ポインタ文字列、char* p = "ABCDE";
って場合は
p[0] = 'F';
って変えれないんだよね?
char num[80] = "ABCDE";
char* p = num;
ってポインタが文字列のはいった「配列」をさしてないと
ポインタに添え字つけて一文字代入するのは無理?
203:デフォルトの名無しさん
08/05/03 11:01:29
うん。規格の範囲内では無理ってことになってる。
204:202
08/05/03 11:04:39
>>203
ありがとう
サンプルソースがなぜかポインタ文字列を直接操作してて
エラーでまくるから、自分の環境が悪いと思い込んでた
サンプルが間違ってたって事だね
205:デフォルトの名無しさん
08/05/03 12:21:00
正確には未定義じゃなかったっけ
運が良ければ動くけどやるべきじゃないね
206:デフォルトの名無しさん
08/05/03 14:08:20
ポインタといえばちょっと前の zdnet builder の記事も酷かったな。
202のサンプルと同じ間違いもしっかり犯してたし。
207:デフォルトの名無しさん
08/05/03 16:24:32
>>206
過去形にするなや。未だに「レビュー中」のままだぞ。
208:デフォルトの名無しさん
08/05/03 16:43:08
>>207 なんでこいつ偉そうなの?w
209:デフォルトの名無しさん
08/05/03 16:48:07
自分の意に沿わない発言は全て「偉そう」ですか。大儀ですな。
210:デフォルトの名無しさん
08/05/03 17:01:49
大儀である。下がってよいぞ
211:デフォルトの名無しさん
08/05/03 17:04:02
大昔、リテラル文字列をいじっていい時代があったんだよ・・・。
リテラル文字列を char* に代入できるのはそれとの互換性のため。
今はもちろんいじっちゃいけないが。
いじっちゃいけないようにすることで、
同じリテラル文字列が登場したらそれを共通化できるようになるし、
もっと言えば "ABC" と "BC" みたいなのも共通化できるようになる。
212:デフォルトの名無しさん
08/05/03 17:12:22
いやリテラル文字列は const char* constだから
普通にchar*に代入して参照できるわけだが。
213:デフォルトの名無しさん
08/05/03 17:19:39
>>212
おかしなこと言わない。
リテラル文字列は const char の配列であってポインタじゃないし
(sizeof でサイズを取得できるから)、
char* に代入できるのは 「文字列リテラルは char* に代入できる」 という仕様が
特別に用意されているから。
214:デフォルトの名無しさん
08/05/03 17:20:47
const char* constってchar*に代入できたっけ?
215:デフォルトの名無しさん
08/05/03 17:21:06
>>213
おしい、後一歩だ、がんばれ
216:デフォルトの名無しさん
08/05/03 17:23:10
char* に暗黙にキャストできる、と言った方が良かったか。
217:デフォルトの名無しさん
08/05/03 17:32:05
>>207
過去形じゃないよ。現在完了形だよ。
218:デフォルトの名無しさん
08/05/03 17:43:46
>>216
ここのところずっとC++しか触ってないからできないもんだと思ってた
Cだと警告しか出ないのね
219:デフォルトの名無しさん
08/05/03 17:46:24
なんか大卒の奴にいい負けしてかなり悔しいのぅ悔しいのぅな
時代遅れのオッサンが、GW中にどこにも出かけられないから
ここで楽しんでいたところ、気分を悪くしてしまったようでw
220:デフォルトの名無しさん
08/05/03 17:53:58
>>218
チガウチガウ
リテラル文字列を char* に暗黙にキャストできるという話。
これは C も C++ も同じ。
221:デフォルトの名無しさん
08/05/03 17:55:57
EOFの次はchar*にリテラル文字列ですか。とことん暇な人が多いですね。
222:デフォルトの名無しさん
08/05/03 17:57:54
EOF って何の話?
223:デフォルトの名無しさん
08/05/03 17:59:09
Eroi Oneesan Fujikochan
224:デフォルトの名無しさん
08/05/03 18:01:17
EOF<ガオー
人
225:デフォルトの名無しさん
08/05/03 18:01:49
>>220
「リテラル文字列は const char* const」
「const char* constは普通にchar*に代入して参照できる」
だからリテラル文字列は普通にchar*に代入できるって意味の発言だと思ったんだが
私が単に読み間違えただけか。
226:デフォルトの名無しさん
08/05/03 18:08:48
普通はconst外ししようと思ったらキャストがいるけど、const char* const→char*だけは歴史的な理由によりそれが要らないってことだろ。
227:デフォルトの名無しさん
08/05/03 18:12:37
>>225
>「const char* constは普通にchar*に代入して参照できる」
こんなこと212しか言ってないような、
そして>>220=216=214と>>212は別人のような気がする。
228:デフォルトの名無しさん
08/05/03 18:15:30
>>214と>>218と>>225が私で、
>>212と>>216と>>220が同一人物だと思ってたんだけど
それがすでに勘違いだったのか orz こりゃまた失礼しました
229:デフォルトの名無しさん
08/05/03 18:38:13
URLリンク(www.sgnet.co.jp)
ここのサイトで
#include <stdio.h>
void main()
{
printf( "好きなことを書きましょう" );
}
ってなっているので、実際にやってみると
testa.c:1: error: missing terminating " character
testa.c: In function `main':
testa.c:3: warning: return type of 'main' is not `int'
というふうにエラーがでます。
で、大学では
#include <stdio.h>
int main(void)
って習ったのですが、どう違うんですか?こっちではうまくいったのですが。
230:デフォルトの名無しさん
08/05/03 18:40:19
Cの初心者なんですが、コマンドプロンプトに関して
質問があります。
こちらで聞いてよろしいんでしょうか??
231:デフォルトの名無しさん
08/05/03 18:41:49
>>229
そのコンパイラが日本語に対応してないんじゃね?
232:229
08/05/03 18:44:18
>>231
あ、すいません。
#include <stdio.h>
int main(void)
{
printf("好きなことを書きましょう");
}
で、うまく実行できたという意味です。
233:デフォルトの名無しさん
08/05/03 18:44:52
素早い返答感謝です。
実行すると、内部ファイル云々、操作可能なプログラムと
認識されていません、と出ました。
内定先から頂いたDISCの指示に従ってインストールしたんですが・・・・
234:デフォルトの名無しさん
08/05/03 18:46:24
何の話か知らないが内定先に聞けよ
235:デフォルトの名無しさん
08/05/03 18:46:26
>>232
URLリンク(www.kijineko.co.jp)
236:229
08/05/03 18:50:11
>>235
難しすぎてわからないのですが…
ようは、void main() と int main(void) は同じような意味だから
できたほうを使えってことですか?
237:デフォルトの名無しさん
08/05/03 18:53:32
C++とCで仕様がちがうのでは?
238:デフォルトの名無しさん
08/05/03 18:55:36
>>236
戻りはint。引数は依存って書いてあるな。void main(void)は不可か
239:デフォルトの名無しさん
08/05/03 18:58:44
>>236
全部
int main
でおk
240:デフォルトの名無しさん
08/05/03 19:01:50
>>229
そのサイトが嘘つき、もしくは正しい知識をもってない。
大学のほうが正解。
241:デフォルトの名無しさん
08/05/03 19:05:22
あとint mainでやるなら
正常終了したって事を示す「return 0;」を忘れずに
242:デフォルトの名無しさん
08/05/03 19:08:20
C99 なら大丈夫だけどね。
まだ C89 の環境多いから return 0; 書いた方がいいけど。
243:デフォルトの名無しさん
08/05/03 19:13:18
>>232 みたいなちょっと「動作確認しました」くらいのやつならC89でもreturn 省略してもいいよ。
逆に、いちいちつっこむヤツを見ると、省略できるの知らないの? って思う。
244:デフォルトの名無しさん
08/05/03 19:15:48
質問します。
Linuxのコンソールで擬似和音のビープ音鳴らすのにエスケープシーケンスを
使おうとおもってるんですが、printf関数でエスケープシーケンスを
出力すると、一旦出力バッファに貯められてしまうため、時間差で
音を出したくても上手く音が出力されません。
出力バッファを介さずに文字列を出力する関数ってなにかありますでしょうか?
245:デフォルトの名無しさん
08/05/03 19:31:43
>>243
return を省略した際の動作は規格上は未定義。
C99 や C++ だと main 関数は特例として省略が可能だが、
C89 では main 関数にもそれが適用される。
大体の処理系は警告出すだけだがね。
246:230
08/05/03 20:03:24
妙な事をきいてしまってすみません。内定先もGW中で
担当の方がいらっしゃらない物で。
失礼しました。
247:デフォルトの名無しさん
08/05/03 20:10:18
>>245
動作が未定義ってかリターン値が未定義だろ。
省略しても問題ないよ。
お作法的には書くほうがいいけど、書き捨てのコードにいちいちツッコミ入れるほどじゃないよ。
248:デフォルトの名無しさん
08/05/03 20:17:00
>>244
Drawin / *bsd 系なので Linux はどうかしらないが fflush 使うか raw モードにするというのももある
// うまく管理して
{
int fd;
struct sgttyb bk, fm;
}
{
if((fd = open("/dev/tty", O_RDWR)) == -1)
return -1;
ioctl(fd, TIOCGETP, &bk);
fm = bk;
if(fm.sg_flags != RAW)
{
fm.sg_flags = RAW;
ioctl(fd, TIOCSETP, &fm);
}
read(fd write(fd でどちらもバッファリング無しで入出力...
249:デフォルトの名無しさん
08/05/03 20:22:02
>>236
int main() { .... ; return 0; } ですればどうでしょうね。
return 無しの例外が許されてるといいながら return 0; 記述がそれほど手間でもないのでは?
void main() の登場はいわゆる void 型が導入された次期からしばらくの間ではなかったか。サンプルが古いのであって目くじら立てずに見過ごせばどうかな?。
250:デフォルトの名無しさん
08/05/03 20:25:31
めくじらっつーか、gcc じゃコンパイル通らんし。
251:デフォルトの名無しさん
08/05/03 20:37:49
>>250
だから int main に読み替えればいいでしょって事なの。参考にしてる物に目くじら立てて(その例文は可笑しい)って作者に文句のメールでも送る?。そんな方向に行くのはどうかという事。
252:デフォルトの名無しさん
08/05/03 20:38:49
>>251
仮にも 「講座」 を名乗るのにそれじゃマズいだろ。
253:デフォルトの名無しさん
08/05/03 20:41:52
問題はおかしいかおかしくないか判断できない初心者がそれを読むってことだろ
254:デフォルトの名無しさん
08/05/03 20:58:37
そうガミガミすんなや、GWも後半に入ったというのに
# 自分はどこにも行きませんけど
255:229
08/05/03 20:59:37
いろいろな回答ありがとうございます
大学で3回くらいしかまだ習ってないので(習ったのはprintf int forとかだけですけど)
ばりばり初心者だったのですいません
とりあえず普通に勉強していこうと思います
ありがとうございました
256:デフォルトの名無しさん
08/05/03 21:35:52
質問です。
下のコードは書いているものの一部なのですが、
コメントのつけてある位置でエラーが出てしまい、コンパイルが通りませんでした。
typedef struct {int line, *col;} match_info;
match_info *info;
match_info *str_search(FILE *fp, char *sstr)
{
int line_cnt;
.... // line_cntはここで値が代入されている
info = (match_info *)malloc((line_cnt+1) * (sizeof(match_info)));
info+line_cnt = NULL; // ここでエラー
....
}
エラーの内容は
error: invalid lvalue in assignment
でした。ちなみにinfo = NULLとしたところコンパイルできました。
info + 1 = NULLと定数を使用するとやはりコンパイルできません。
何故オフセットすると値を代入することができなくなってしまうのでしょうか。
お願いします。
(エラーの出ている箇所はこの部分だけであり、載せていない部分ではエラーはありませんでした)
257:デフォルトの名無しさん
08/05/03 21:38:03
>>256
infoはポインタでしかないから、それに何かを足したものはただの値でしかないから代入はできない。
やりたいことは、info[line_cnt] = NULLではないのか?
258:デフォルトの名無しさん
08/05/03 21:39:34
*(info + line_cnt)
259:デフォルトの名無しさん
08/05/03 21:42:39
>>257
ないな。match_infoが構造体だから代入できない。
まぁ恐らく、
info[line_cnt].line = 0;
info[line_cnt].col = NULL;
なのだろう。
260:デフォルトの名無しさん
08/05/03 21:56:30
うるせええええええええええええええええええぞ
かすどもおおおお
スレ違いなんだよ他でやれ
261:デフォルトの名無しさん
08/05/03 21:58:05
だからもちつけって
(オレモナー)
262:デフォルトの名無しさん
08/05/03 22:09:21
>>257-259
お早いレスありがとうございます。
やりたいことは確かに>>259の通りなのですが、
他の関数でinfoを門番までスキャンさせたくて、門番としてNULLを割り当てようとしました。
ちょうどコマンド引数のargv[argc]に'\0'が入っているような感じに使おうと思っているのです。
>>259のようにしてしまうと、他の関数ではinfoのメンバーを知らなくてはなりません。
質問では触れなかったのですが、検索用の関数を作っています。
最終的には、main()側でstr_search()や,infoの内容を見る関数をラップした関数を使えるようにするだけで、
他の部分は全てヘッダファイルに移し、隠蔽してしまおうと考えていました。(言葉足らずですみません)
つまりinfoは作業用変数としたいのです。
関数の設計も含めて、何か良い方法がありましたら教えていただけないでしょうか。
263:デフォルトの名無しさん
08/05/03 22:11:47
最後の要素のcolかlineに特別な値を割り当てておくしかないだろう
264:デフォルトの名無しさん
08/05/03 22:14:33
>>262
できない。
infoが配列の要素を指している以上、
その値は必ず配列上に存在する要素へのポインタにしかなりえない。
265:デフォルトの名無しさん
08/05/03 22:16:02
あとはline_cntを公開しておくしかないな
こーゆーことやるならC++のほうが圧倒的に楽だけどね…
266:デフォルトの名無しさん
08/05/03 22:18:13
>262
文字列の最後を\0で検出できるのは、\0が文字型の特殊な値だから。
同じように任意の型の配列の末尾を検出したいなら、特殊な値を割り当てて検出する以外にない。
267:デフォルトの名無しさん
08/05/03 22:22:50
どうしてもやりたいなら、 match_infoの配列ではなく、
match_infoのポインタの配列を使う。
match_info **info;
info=(match_info **)malloc((line_cnt+1) * (sizeof(match_info *)));
for(i=0;i<line_cnt;i++)
info[i]=(match_info *)malloc(sizeof(match_info));
info[line_cnt]=NULL;
こうすれば出来るけど、当然一個一個freeする手間がかかる。
268:デフォルトの名無しさん
08/05/03 22:24:02
>>262
argv[argc]は'\0'ではなくNULLな。
これはargvがポインタの配列だから実現できる。
infoはmatch_info型の配列だから、
末尾要素をNULLにしようとしても型が違う。
269:デフォルトの名無しさん
08/05/03 22:28:56
>>256
それはもしかするとこう?
match_info** info; // ← match_info の配列ですね?
{
info = (match_info**)malloc(line_cnt+1)*szeof(match_info));
int i;
for(i = 0; i < line_cnt + 1; i++)
info[i] = NULL+
// ...
270:デフォルトの名無しさん
08/05/03 22:30:16
>>267
ががん。かぶってしもた・・
271:デフォルトの名無しさん
08/05/03 22:33:43
構造体の中身を公開したくないのに構造体の内容で判定することはできない。
公開するか、ポインタの配列で実現するかの二択。
272:デフォルトの名無しさん
08/05/03 22:57:51
>>263-271
みなさんありがとうございます。
argv[]がargv[argc]までスキャンされるのは、
argv[]が文字列の"ポインタ"だからですね。勘違いしていました。
>>267>>269でおっしゃられているようにポインタ配列で実装しようと思います。
>>267>>269のようにmalloc()がネストされている場合は、
中をfree()してから外側をfree()しなければなりませんか?
手間がかかるようなら、>>263,265も考えてみようと思います。
273:デフォルトの名無しさん
08/05/03 23:07:18
|>>267>>269のようにmalloc()がネストされている場合は、
|中をfree()してから外側をfree()しなければなりませんか?
もちろん
274:デフォルトの名無しさん
08/05/03 23:17:03
正規表現のアルゴリズムを勉強したいんスけど、なんかグレートなテキストってないっスかねぇ~?
275:デフォルトの名無しさん
08/05/03 23:23:46
>>274
エディタのマニュアルに書いてないかな
276:デフォルトの名無しさん
08/05/03 23:27:29
>>274
grepのソース
277:デフォルトの名無しさん
08/05/03 23:34:41
>>274
URLリンク(www.amazon.co.jp)
この本に一章だけ書いてある。
本自体は有名だけど、この説明がいいかどうかは判断できない。
278:デフォルトの名無しさん
08/05/03 23:40:46
>>277
レビューワロタ
参考にしてる人多すぎだろ
279:デフォルトの名無しさん
08/05/03 23:40:52
「詳説 正規表現」のコラムでも、正規表現をさらに学びたい人は >>277 の三章を進めると書いてあるな。
280:デフォルトの名無しさん
08/05/04 00:05:26
せっ・・・性器表現の勉強を(ry お勧めの参考書を(ry
281:デフォルトの名無しさん
08/05/04 00:21:41
>>274
手元にある本をあげておきます。
オートマトン・言語理論, 富田悦次・横森 貴, 森北出版 1992, ISBN4627805500
これがベストというわけではありませんが、まず理論的な部分をしっかりおさえておかないと、後々どうにもならなくなると思います。
282:デフォルトの名無しさん
08/05/04 03:45:27
#include のことを、シャープインクルードって言っていた香具師、手を上げろ! ノシ
283:デフォルトの名無しさん
08/05/04 03:50:06
えっ、違うの!?
284:デフォルトの名無しさん
08/05/04 03:52:10
本場の職人なら、パウンド・インクルードという。
285:デフォルトの名無しさん
08/05/04 03:52:32
# #は井桁、ナンバーサインでシャープは♯なんだな。
斜めになっているのが縦棒か横棒か、違うんだなぁ。
シャープは楽譜の記号で使われているんだなぁ。
ぼぼぼ、僕はおにぎりが欲しいんだなぁ。
286:デフォルトの名無しさん
08/05/04 04:18:42
C#とかあるし、シャープで伝わるからそう読んでるな
むしろ井桁とかだと通じないことがあるし
287:デフォルトの名無しさん
08/05/04 04:29:29
シーナンバー・・・うむ・・・いや、いや、そうじゃなくて、C♯はちゃんと
シャープと書かれているんでしょう。同一視してはならぬ、決して。
288:デフォルトの名無しさん
08/05/04 04:35:23
C#は間違いなく井桁だな
まぁシャープの代わりに井桁を使っているから、井桁をシャープと読むのは不適切かも知れないが
井桁が通じないことがあるんだからしょうがない
もっと普及させてこい。話はそれからだ
289:デフォルトの名無しさん
08/05/04 04:42:53
♯の半角が存在しないから、代用しているのさ・・・そう思いたい・・・きっとそうだ。
♯を英語圏にも広めよう!
290:デフォルトの名無しさん
08/05/04 07:35:58
>>284
マジなのか
どうでもいいけど
URLリンク(cplusplus.syntaxerrors.info)
291:デフォルトの名無しさん
08/05/04 09:46:44
英語だといろんな呼ばれ方があるみたいだ。「シャープ」も含めて。
URLリンク(en.wikipedia.org)
292:デフォルトの名無しさん
08/05/04 10:17:44
値のビット列表示をしたいのですができません
共用体とビットフィールドを使って実現しようと思ったのですができませんでした
下のプログラムだとどこがだめなんでしょうか?
#include <stdio.h>
int main(void){
union bits{
char ch;
unsigned char a:1, b:1, c:1, d:1, e:1, f:1, g:1, h:1;
} bits;
bits.ch = 'a';
printf("%d %d %d %d %d %d %d %d\n", bits.a, bits.b, bits.c, bits.d, bits.e, bits.f, bits.g, bits.h);
bits.ch = 'b';
printf("%d %d %d %d %d %d %d %d\n", bits.a, bits.b, bits.c, bits.d, bits.e, bits.f, bits.g, bits.h);
bits.ch = 'c';
printf("%d %d %d %d %d %d %d %d\n", bits.a, bits.b, bits.c, bits.d, bits.e, bits.f, bits.g, bits.h);
return 0;
}
/*
実行結果:
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
*/
293:デフォルトの名無しさん
08/05/04 10:18:38
fgets(str, 32, fp);
こんな感じに書いたときに、
strの宣言がcharの配列だったらいいけど、
charへのポインタだったらだめだった。どうして?
294:デフォルトの名無しさん
08/05/04 10:31:08
>>293
運が悪くポインタの指す先が書き換えてはいけない場所だったから
295:デフォルトの名無しさん
08/05/04 10:54:19
>>292
a, b, c, d, e, f, g, h が union で共用されているから
#include <stdio.h>
int main(void){
union bits{
char ch;
struct{
unsigned a:1, b:1, c:1, d:1, e:1, f:1, g:1, h:1;
};
} bits;
bits.ch = 'a';
printf("%d %d %d %d %d %d %d %d\n", bits.a, bits.b, bits.c, bits.d, bits.e, bits.f, bits.g, bits.h);
bits.ch = 'b';
printf("%d %d %d %d %d %d %d %d\n", bits.a, bits.b, bits.c, bits.d, bits.e, bits.f, bits.g, bits.h);
bits.ch = 'c';
printf("%d %d %d %d %d %d %d %d\n", bits.a, bits.b, bits.c, bits.d, bits.e, bits.f, bits.g, bits.h);
return 0;
}
296:デフォルトの名無しさん
08/05/04 10:56:19
>>293
ポインタを初期化していなかったに一票
297:293
08/05/04 11:04:20
>>294
>>296
そうだよね、何処にあるかわからない入れ物を渡してもダメに決まってるよね。
すっきりしますた。
298:デフォルトの名無しさん
08/05/04 11:10:44
>>295
unsigned とかやってるとサイズが4バイトになるから
union bits{
char ch;
struct{
unsigned char a:1, b:1, c:1, d:1, e:1, f:1, g:1, h:1;
};
} bits;
にしないとマズいかもしれない。
ただ、ビットフィールドを含む構造体のサイズは処理系依存なので難しい所だが。
さらに言えばビットフィールドのビットがどちら側から埋められるかは処理系依存だから、
union bits{
char ch;
struct{
#ifdef BITFIELD_LITTLE_ENDIAN
unsigned char h:1, g:1, f:1, e:1, d:1, c:1, b:1, a:1;
#else
unsigned char a:1, b:1, c:1, d:1, e:1, f:1, g:1, h:1;
#endif
};
} bits;
として処理系ごとに切り替えられるようにするのが良い。
299:デフォルトの名無しさん
08/05/04 11:13:03
unsigned char に対応していない処理系を考慮するなら
union bits{
char ch;
struct{
#ifdef BITFIELD_LITTLE_ENDIAN
#ifdef BITFIELD_INT_SIZE
unsigned : sizeof (unsigned int) * CHAR_BIT - 8;
unsigned h:1, g:1, f:1, e:1, d:1, c:1, b:1, a:1;
#else
unsigned char h:1, g:1, f:1, e:1, d:1, c:1, b:1, a:1;
#endif
#else
#ifdef BITFIELD_INT_SIZE
unsigned a:1, b:1, c:1, d:1, e:1, f:1, g:1, h:1;
#else
unsigned char a:1, b:1, c:1, d:1, e:1, f:1, g:1, h:1;
#endif
#endif
};
} bits;
とすることになるが、この共用体のサイズが1であることは期待できない。
300:デフォルトの名無しさん
08/05/04 11:28:45
>>295,298,299
ビットフィールドが全部同じ位置を使っていたということですね
プリプロセッサディレクティブは未学習なのですが、イメージはつかめました
ありがとうございました
301:デフォルトの名無しさん
08/05/04 12:05:18
1ビットしかなくて読むだけなのにビットフィールドの共用体なんてフツー使わねえよ。
#define BIT(val, pos) (((val) >> (pos)) & 1)
int ch;
ch = 'a';
printf("%d %d %d %d %d %d %d %d\n", \
BIT(ch,7), BIT(ch,6), BIT(ch,5), BIT(ch,4), BIT(ch,3), BIT(ch,2), BIT(ch,1), BIT(ch,0));
302:デフォルトの名無しさん
08/05/04 12:08:57
>>301
普通って何さ
303:デフォルトの名無しさん
08/05/04 12:38:48
>>302
普通って普通さ
304:デフォルトの名無しさん
08/05/04 13:43:24
まあ確かにビットマスク使ったほうが楽だな
305:デフォルトの名無しさん
08/05/04 17:45:50
コマンドプロントでテキストファイル.Cをコンパイルするにはどうすればいいの?
パスはしたの通りです。
C:\Users\ユーザー名\Documents\Aディレクトリ\テキストファイル.C
C:\Bディレクトリ\コンパイラ
306:デフォルトの名無しさん
08/05/04 18:18:23
> コンパイラ /?
> コンパイラ /H
$ コンパイラ -h
$コンパイラ --help
307:デフォルトの名無しさん
08/05/04 18:53:08
えwどういうことw
308:デフォルトの名無しさん
08/05/04 18:55:18
>>307
コンパイラによって方法が違うからコンパイラのマニュアルを見るか
有名なコンパイラなら名前を書け
309:デフォルトの名無しさん
08/05/04 18:55:53
ヘルプ見ろ
310:デフォルトの名無しさん
08/05/04 19:05:39
え そうなんだ
MinGWなんだけど
311:デフォルトの名無しさん
08/05/04 19:12:19
MinGWならgccかな
> C:\Bディレクトリ\コンパイラ
が気になるけどたぶん
gcc C:\Users\ユーザー名\Documents\Aディレクトリ\テキストファイル.C
C:\Bディレクトリ\コンパイラ C:\Users\ユーザー名\Documents\Aディレクトリ\テキストファイル.C
どっちかかもね?
312:デフォルトの名無しさん
08/05/04 19:20:27
gcc --help
と叩けば使いかたが出る。
313:デフォルトの名無しさん
08/05/04 19:31:39
> C:\Bディレクトリ\コンパイラ は C:\TYC4TH\gcc ってことです
その二つでためしたんですが、
gcc C:\Users\ユーザー名\Documents\Aディレクトリ\テキストファイル.Cの場合
'gcc' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
C:\Bディレクトリ\コンパイラ C:\Users\ユーザー名\Documents\Aディレクトリ\テキストファイル.Cだと
'C:\TYC4TH\gcc' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません
314:デフォルトの名無しさん
08/05/04 19:33:02
ってでます><
315:デフォルトの名無しさん
08/05/04 19:39:10
>>312
なんか英語がたくさんでて意味がわからない・・・
316:デフォルトの名無しさん
08/05/04 19:42:10
日本語を含む場合は""で括る
例)gcc "C:\Bディレクトリ\コンパイラ"
>'gcc' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。
gccコマンドのパスが通っていない、正しくない
317:デフォルトの名無しさん
08/05/04 19:49:07
gccインストールしてからMinGWインストールすると
パス通すかの確認があった気がしたけど・・・
MinGWをインストールしなおして確認してみるか、
$HOME/.bashrcにexport PATH=$PATH:コンパイラの入ってるディレクトリ
を追加してみ
MinGWコンパイラの入ってるパスは$HOMEからの相対パスがいいかな
ちなみにMSYSも入れるとうれしくなれるかも
318:デフォルトの名無しさん
08/05/04 19:49:48
>MinGWコンパイラの入ってるパスは
コンパイラの入ってるパスは
訂正
319:デフォルトの名無しさん
08/05/04 19:51:13
>コンパイラの入ってるパスは
コンパイラの入ってるディレクトリは
打つ出し脳
320:デフォルトの名無しさん
08/05/04 19:51:51
MinGW - Minimalist GNU for Windows
OSはWindowsじゃないの?
XP なのか 9x なのかによっても設定方法違うけど
321:デフォルトの名無しさん
08/05/04 19:55:06
c:\autoexec.batに
PATH=c:\MinGWまでのディレクトリ\bin;%PATH%
これを書き込んで再起動すればばよかった、、、はず・・・多分
322:デフォルトの名無しさん
08/05/04 19:57:08
折角隔離スレがあるんだから誘導しろよ。
Cygwin + MinGW + GCC 相談室 Part 3
スレリンク(tech板)
323:デフォルトの名無しさん
08/05/04 20:19:39
おぉ できたかもです!!
みなさんありがとうございます。
さっそく勉強してきます。
324:デフォルトの名無しさん
08/05/04 20:51:46
#include <windows.h>
typedef HRESULT (STDMETHODCALLTYPE *LPFNGETCORSYSTEMDIRECTORY)(LPWSTR, DWORD, DWORD *);
int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hinstPrev, LPSTR lpszCmdLine, int nCmdShow)
{
WCHAR szBuf[256];
DWORD dwLength;
HMODULE hmod;
LPFNGETCORSYSTEMDIRECTORY lpfnGetCORSystemDirectory;
略
lpfnGetCORSystemDirectory = (LPFNGETCORSYSTEMDIRECTORY)GetProcAddress(hmod, "GetCORSystemDirectory");
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if (lpfnGetCORSystemDirectory == NULL) {
MessageBox(NULL, TEXT("関数がエクスポートされていません。"), NULL, MB_ICONWARNING);
FreeLibrary(hmod);
return 0;
}
略
}
上記のようなプログラムを見かけましたが波線の部分関数ポインタの動作いまいち理解できません。
どなたかご教示お願いします。
325:デフォルトの名無しさん
08/05/04 21:53:20
>>293
以下の記述で普通に動作しています。
環境 cygwin/WindowsXP, 処理系 gcc 3.4.4
#include <stdio.h>
#define N 1024
int main()
{
char buffer[N], *p;
p = buffer;
fgets(p, N, stdin);
printf(">%s", p);
return 0;
}
/* end */
動作しないソースと環境・処理系を教えていただければ、何かわかるかもしれません。
326:325
08/05/04 21:54:30
失礼、解決ずみでした。
327:デフォルトの名無しさん
08/05/05 01:40:56
>>324
関数ポインタとは動作するものではありません
もう少し質問内容を吟味してくださらないと答えようがありません
328:デフォルトの名無しさん
08/05/05 04:08:44
>>81ってどうやるのかな
329:デフォルトの名無しさん
08/05/05 06:47:41
>>324
何を聞きたいのか今ひとつわからんが、とりあえずMSDN。
URLリンク(msdn.microsoft.com)(VS.80).aspx
330:デフォルトの名無しさん
08/05/05 13:03:48
>>324
GetProcAddress は指定した関数へのアドレスを返すんだけど、
GetProcAddress の戻り値の型は1つに定めないといけないので
GetProcAddress は関数へのアドレスをとりあえず FARPROC って型にして返すようにしてある。
実際にこの関数のアドレスを使う際には、
本来の関数ポインタ型へとキャストして使う必要がある。
331:デフォルトの名無しさん
08/05/05 14:15:49
stdlib.hにあるsystem関数って、標準ですか?
どの処理系でもまともな動作が期待できる?
332:デフォルトの名無しさん
08/05/05 15:04:12
>>331
プログラマを目指すならもちとあいまいな問いにならないよう気をつけないと。
質問がとんでもなく飛んでいる。
どの処理系・・・列記してみて
まともな動作・・まともってなによ(この質問はちょっとあほっポイ匂い)
333:デフォルトの名無しさん
08/05/05 15:19:24
>>331
標準じゃない
334:デフォルトの名無しさん
08/05/05 15:25:08
>>324
このソースって凄いね(大文字ばっかで・・・w)
関数のポインターについてだけど
ポインターはアドレスを示すのは判りますね。
int body1(char* mes)
{
printf("body1 : %s¥n", mes); return 0;
}
int body2(char* mes)
{
printf("body2 : %s¥n", mes); return 0;
}
{
int (*func)(char*);
func = body1;
func("message");
func = body2;
func("message");
}
みたいな。
lpfnGetCORSystemDirectory は関数へのポインターを示すけど希望するのがなければ NULL。
あとlpfnGetCORSystemDirectory() として適当に引数与えて呼び出せばいいということかな。
335:デフォルトの名無しさん
08/05/05 15:57:10
>>331
関数そのものは標準であり、
どの処理系であろうと「処理系の考えるところのまともな動作」をする
それが「プログラマの期待するところの動作」と一致するかはわからない
336:デフォルトの名無しさん
08/05/05 16:02:52
ここのレス見ても何も分からないほどの初心者ですが教えてほしいことがあります。
課題でこのプログラムを組まないといけないのですが、全く分かりません。
問、二次元配列のプログラムを利用し、行列の積を計算するプログラムを作成せよ。
ただし行列a,bは以下のものを使用する。
|0 1 2| |0 3 6|
a=|3 4 5| b=|1 4 7|
|6 7 8| |2 5 8|
aの一列目とbの1,2,3行目をかけるのがどうすればいいかわかりません。
337:デフォルトの名無しさん
08/05/05 16:12:06
>>336
>aの一列目とbの1,2,3行目をかけるのがどうすればいいかわかりません。
行列の積の定義から勉強しような。
行と列が逆だと思うぞ。
338:デフォルトの名無しさん
08/05/05 16:23:36
>>337
すいません。丁寧に指摘してくださってありがたいです。
一応僕が作ったプログラムを載せておきます。
#include<stdio.h>
main(){
int a[3][3]={{0,1,2},{3,4,5},{6,7,8}};
int b[3][3]={{0,3,6},{1,4,7},{2,5,8}};
int c[3][3]={0};
int i,j;
for(i=0;i<3;i++){
for(j=0;j<3;j++)
c[i][j]=a[i][j]*b[i][j];}
for(i=0;i<3;i++){
for(j=0;j<3;j++)
printf("%d ",c[i][j]);
printf("\n");
}}
足し算をするプログラムの演算子を+から*に変えただけなので積が出来るわけもないのですが、
どうすればよいのでしょうか、あつかましいですがよろしくお願いします。
339:側近中の側近 ◆0351148456
08/05/05 16:28:36
(っ´▽`)っ
#include <stdio.h>
int main(void)
{
int a[3][3] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}};
int b[3][3] = {{0, 3, 6}, {1, 4, 7}, {2, 5, 8}};
int ab[3][3];
int i;
int j;
int k;
for(i = 0; i < 3; i++){
for(j = 0; j < 3; j++){
ab[i][j] = 0;
for(k = 0; k < 3; k++){
ab[i][j] += (a[i][k] * b[k][j]);
}
}
}
return 0;
}
答えは{{5, 14, 23}, {14, 50, 86}, {33, 86, 149}
340:デフォルトの名無しさん
08/05/05 16:29:04
>>338
行列の掛け算は3重のループになるのだぞ。行列を勉強しましょう。
341:デフォルトの名無しさん
08/05/05 16:30:14
for(n = 0; n < 3; n++){
for(m = 0; m < 3; m++){
for(i = 0; i < 3; i++) c[n][m] += a[n][i] * b[i][m];
}
}
こんな感じ?
342:側近中の側近 ◆0351148456
08/05/05 16:33:49
>>338
(っ´▽`)っ
x行n列の行列Aのi行j列成分をa(i, j)、
n行y列の行列Bのi行j列成分をb(i, j)、
ABのi行j列成分をab(i, j)と表示するとき、
ab(i, j) = Σ(k=1→n)a(i, k)b(k, j)
線形台数の教科書を見直せ☆
343:デフォルトの名無しさん
08/05/05 16:51:00
>>339->>342
初歩的なことなのにわざわざ教えてくださってありがとうございます。
感謝しています。
あとほんとに初心者的なことなんですが、>>339さんのプログラムで計算は出来ました。
しかし答えを表示させようと思ったら、なんか変な結果になりました。
以下プログラムと結果です。
(最初のほうは省略)
for(i = 0; i < 3; i++){
for(j = 0; j < 3; j++){
ab[i][j] = 0;
for(k = 0; k < 3; k++){
ab[i][j] += (a[i][k] * b[k][j]);
printf("%d ",ab[i][j]);}
}
}
return 0;
}
結果
0 1 5 0 4 14 0 7 23 0 4 14 9 25 50 18 46 86 0 7 23 18 46 86 36 85 149
344:デフォルトの名無しさん
08/05/05 16:52:39
>>342
ゆとり乙
数学3cのレベルです
345:344
08/05/05 16:54:36
>>342
ごめんなさいゆとりは俺でした
数学3cじゃねええええええええええ
あああああああああああああ何か勘違いしてたああああああああ
346:344
08/05/05 16:55:21
やべえ今までで一番恥ずかしい書き込みだ
347:デフォルトの名無しさん
08/05/05 16:55:51
最近Cを始めた者なんですが
CってVBにあったLEFTやMIDに当たる関数はないのでしょうか?
ポインタを使うような関数を自分で作る必要がありますか?
何かサンプルなどもありましたらお教えください。
348:336
08/05/05 16:55:51
僕はちなみに本当のゆとりです。
349:デフォルトの名無しさん
08/05/05 16:56:55
落ち着け
寿司食うか?
350:344
08/05/05 16:58:16
大体3cとかあんまりやってねぇんだよ・・・
ケーリーはミルトンの公式ばっかり使って足し算引き算ぐらいだっけ?
行列式はなかったよな・・・あぁ・・・俺なにやってんだろう
351:デフォルトの名無しさん
08/05/05 16:58:59
> ab[i][j] += (a[i][k] * b[k][j]);
> printf("%d ",ab[i][j]);}
~~~
中括弧の位置
352:側近中の側近 ◆0351148456
08/05/05 17:03:14
>>343
(っ´▽`)っ
printfを最も内側のループの外に出せ☆
#include <stdio.h>
int main(void)
{
int a[3][3] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}};
int b[3][3] = {{0, 3, 6}, {1, 4, 7}, {2, 5, 8}};
int ab[3][3];
int i;
int j;
int k;
for(i = 0; i < 3; i++){
for(j = 0; j < 3; j++){
ab[i][j] = 0;
for(k = 0; k < 3; k++){
ab[i][j] += (a[i][k] * b[k][j]);
}
printf("%d\t", ab[i][j]);
}
printf("\n");
}
return 0;
}
353:344
08/05/05 17:05:08
ああああああああああああああああああああああ
354:344
08/05/05 17:06:41
ダメだ・・・
355:デフォルトの名無しさん
08/05/05 17:08:02
五月蝿い
トイレでも篭ってろ
356:344
08/05/05 17:08:42
線形台数の教科書読んできますノシ
357:デフォルトの名無しさん
08/05/05 17:10:23
>>347
>CってVBにあったLEFTやMIDに当たる関数はないのでしょうか?
ない
>ポインタを使うような関数を自分で作る必要がありますか?
ある
文字列操作の概念自体が違うので、CでVBのようなことをやるという考え自体を捨てること
まずCのやりかたというものを覚えるのが先
358:側近中の側近 ◆0351148456
08/05/05 17:12:08
>>347
(っ´▽`)っ
b = LEFT(a, n)
は
strncpy(b, a, n);
b[n] = '\0';
b = MID(a, m, n)
は
strncpy(b, &a[m-1], n-m+1);
b[n-m+1] = '\0'
で。
359:側近中の側近 ◆0351148456
08/05/05 17:13:30
(っ´▽`)っ
最後セミコロンが抜けたが気にしない☆
360:デフォルトの名無しさん
08/05/05 17:14:05
>>347
>CってVBにあったLEFTやMIDに当たる関数はないのでしょうか?
どちらもsprintf()で代用可能。
361:336
08/05/05 17:14:14
>>351->>352
おかげさまでうまく答えも出ました。本当にありがとうございます。
362:344
08/05/05 17:14:54
>>361
俺と一緒に勉強しようぜ
363:347
08/05/05 17:17:36
>>357-360
ご回答ありがとうございました。
サンプルを参考にしながらC勉強をしていきます。
364:側近中の側近 ◆0351148456
08/05/05 17:23:39
(っ´▽`)っ
正確には
(っ´▽`)っ
b = LEFTB(a, n)
は
strncpy(b, a, n);
b[n] = '\0';
b = MIDB(a, m, n)
は
strncpy(b, &a[m-1], n-m+1);
b[n-m+1] = '\0';
だ。
strncpyの第3引数はバイト数。
LEFTとMIDを使いたければwcsncpyを使えばいいような気がする。
365:336
08/05/05 17:35:16
>>362
共にがんばりましょう。
366:デフォルトの名無しさん
08/05/05 17:44:26
unsigned __int32 hentai, doutei;
hentai = 293317826;
doutei = 899523;
仮に上のように hentai と doutei に格納された数値において、
hentai += doutei; // 293000000 + 899253
のように hentai の下6桁を0にして doutei を加算し、下6桁を doutei にしたい。
条件は
if ( hentai > doutei &&
doutei >= 0 &&
doutei < 1000000)
で、思いついたのが
hentai = ((hentai / 1000000) * 1000000) + doutei;
納得がいかないのでスマートなやり方教えてくれ。
367:デフォルトの名無しさん
08/05/05 17:50:49
>>366
十分スマートと思うが、どういう点で納得がいかないんだ。
hentai += doutei - hentai % 1000000;
368:デフォルトの名無しさん
08/05/05 17:58:57
>>367
おお、サンクス。
除算か乗算どちらかを一回でも削りたかったんだ。
369:デフォルトの名無しさん
08/05/05 21:57:45
>>363
Basic系から来た人だと right とかも使うんでしょw・・それは置いといて無いものは自作するってのも楽しみじゃないかいな?
>>360
参考までに書いてくれると周りも参考になるとおもう。
せいぜい数行だと思うから sprintf で書いてみてよ。
370:デフォルトの名無しさん
08/05/05 22:12:13
>>369
360じゃないが、こうじゃないかな。
char* left(char *dst, const char *src, int count)
{
sprintf(dst, "%.*s", count, src);
return dst;
}
char* mid(char *dst, const char *src, int pos, int count)
{
return left(dst, src+pos, count);
}
371:デフォルトの名無しさん
08/05/05 23:40:11
C言語用でお勧めのフリーコンパイラを教えてください
372:デフォルトの名無しさん
08/05/05 23:43:44
>>370
おお、%.*s ・・・しらなんだ。
373:デフォルトの名無しさん
08/05/05 23:47:34
>>371
・ GCC (MinGW)
・ Microsoft Visual C++ Express Edition 2008
好きなの選べ
374:デフォルトの名無しさん
08/05/06 00:05:01
>>373
その2つの違いがまったくわかりません…
それとMSの方はC++となってますがC言語にも対応してるんですか??
375:デフォルトの名無しさん
08/05/06 00:08:44
おまえは紹介されたコンパイラについてちゃんと調べたのか?
376:デフォルトの名無しさん
08/05/06 00:09:31
>>374
MSのコンパイラでもCのコンパイルはできます。但し、99年の規格にさえ準拠していないので注意が必要です。
gccは、Cコンパイラではなくコンパイラコレクションです。勿論、CもC++もコンパイルできます。
まぁ、MinGWにしろCygwinにしろ、環境に対する知識が必要にはなります。
377:デフォルトの名無しさん
08/05/06 00:24:49
fputc( )の使い方の説明で
int fputc(int 文字、FILE *ストリーム);
fputc( )関数は、「文字」の下位バイトを、「ストリーム」に結び付けられているファイルにunsigned char型の値として書き込みます。
とあるんですが、上位バイトはどうなるんですか?
378:デフォルトの名無しさん
08/05/06 00:25:59
捨てられる
379:デフォルトの名無しさん
08/05/06 00:26:49
URLリンク(www.bohyoh.com)
380:デフォルトの名無しさん
08/05/06 08:01:36
vistaで動くコンパイラだったら何がいい?
やっぱりbcc、gcc辺りかな
381:デフォルトの名無しさん
08/05/06 09:42:29
VC++ 2008 Express Edition
382:デフォルトの名無しさん
08/05/06 09:53:56
uint16 とか uint8 とかは int とどう違うのですか?
使い方を教えてください。
383:デフォルトの名無しさん
08/05/06 09:54:04
Express Editionとgccの好きな方
384:デフォルトの名無しさん
08/05/06 09:56:25
uint16_t や uint8_t なら標準(C99)で用意されているが
uint16 や uint8 は標準では用意されていない。
385:382
08/05/06 09:59:52
>>384
もう少し詳しくお願いします。
386:デフォルトの名無しさん
08/05/06 10:11:53
>>385
標準で用意されてない以上、
ヘッダファイル内にある定義を見てくださいとしか言いようが無い。
387:382
08/05/06 10:22:11
>>386
ということは・・・
uint16 uint8 はwindows.hとかでも定義されてる分ではなく、
自分の使っているライブラリかなにかで定義されているということですね。
わかりました。 調べてみます。
388:デフォルトの名無しさん
08/05/06 10:24:30
>>387
windows.hにあるかもしれませんが、そこにあったとしても標準とは言えません。
そもそも、あなたがWindowsを使っているのかどうか誰にもわかりませんから。
389:デフォルトの名無しさん
08/05/06 10:25:09
処理系独自に定義されてるかもしれないが、
どの処理系使ってるかも知らんし、
結局自分で調べてくれ、というこった。
390:デフォルトの名無しさん
08/05/06 13:51:05
struct histgram{
int x;
int y[100];
};
void one(struct histgram hist);
void two(struct histgram hist);
int main (void){
struct histgram hist;
int z;
hist.x = 0;
for(z=0;z<100;z++){
hist.y[z]=0;
}
printf("before***%d***%d***%d***",hist.x,hist.y[0],hist.y[50]);
one(hist);
printf("after***%d***%d***%d***",hist.x,hist.y[0],hist.y[50]);
for(z=0;z<9999999999;z++);
return 0;
}
void one(hist){
two(hist);
void two(hist){
int z;
hist.x = 1;
for(z=0;z<100;z++)hist.y[z]=1;
}
とするとtwo(hist)でエラーが起きます。なぜでしょうか?
391:デフォルトの名無しさん
08/05/06 13:57:38
すいません、解決しました。
392:デフォルトの名無しさん
08/05/06 14:00:16
INT_MAX 4bites = 2147483647 < 9999999999
393:デフォルトの名無しさん
08/05/06 14:02:26
やっぱうまくいきません。
struct histgram{
int x;
int y[100];
};
void one(struct histgram hist);
void two(struct histgram hist);
int main (void){
struct histgram hist;
int z;
hist.x = 0;
for(z=0;z<100;z++){
hist.y[z]=0;
}
printf("before***%d***%d***%d***",hist.x,hist.y[0],hist.y[50]);
two(hist);
printf("after***%d***%d***%d***",hist.x,hist.y[0],hist.y[50]);
for(z=0;z<9999999999;z++);
return 0;
}
void two(struct histgram *hist)
{
int z;
hist->x = 1;
for(z=0;z<100;z++){
hist->y[z]=1;
}
}
は何がいけないのでしょうか?
394:デフォルトの名無しさん
08/05/06 14:04:25
two()は構造体のポインタを受け取る関数
main()で呼んでるtwo()に渡されてるhistは構造体そのもの
あと>392
395:デフォルトの名無しさん
08/05/06 14:06:22
bites …くそorz
396:デフォルトの名無しさん
08/05/06 14:11:21
Winでコマンドプロンプトがすぐ終了するのを抑止したいなら、scanf("%*s"); がいい
397:393
08/05/06 14:11:59
URLリンク(www9.plala.or.jp)
ここに、393のようにかけと書いてありました…
393を書き直した正解はどうなるのでしょうか?
グローバル変数を使わずに、n個上の階層から任意の変数を↓に投げて、returnすることなく
処理された任意の変数をn個、n-1個上の階層で使用したいのですが
398:393
08/05/06 14:12:39
>396
ありがとうございます。使ってみます。
399:デフォルトの名無しさん
08/05/06 14:17:24
#define ZETTAI(x) (x < 0) ? -(x) : x
int x;
x = ZETTAI(-9 - 50) + 5;
これでxの中身が59になってしまうのですが、何故でしょうか?
-59をZETTAIで59にした後、5を加算しているはずなのですが
400:デフォルトの名無しさん
08/05/06 14:17:47
>>.397
そこの二つ目のの「seito2」は構造体の配列名。配列名は大抵の場合すぐポインタに成り下がるので、
ポインタを引数としてとるseidesp2()にそのまま渡すことができる。
>>393 の場合histは構造体の単体だから、two(&hist) として呼び出さなければならない。
>グローバル変数を使わずに、n個上の階層から任意の変数を↓に投げて、returnすることなく
>処理された任意の変数をn個、n-1個上の階層で使用したいのですが
言ってる意味がよくわからないが、1つの構造体のデータを再帰的に処理したいのなら構造体のポインタを渡す。
401:デフォルトの名無しさん
08/05/06 14:21:07
コンパイラのエラーメッセージをちゃんと読め。
プロトタイプ宣言と定義が噛み合っていないぞ。
void two(struct histgram hist);
void two(struct histgram *hist)...
402:デフォルトの名無しさん
08/05/06 14:23:09
>>399
x = ZETTAI(-9 - 50) + 5;
↑は↓のように展開されるから。
x = (-9 - 50 < 0) ? -(-9 - 50) : -9 - 50 + 5;
これはもちろん
x = (-59 < 0) ? 59 : -54;
と解釈されて、xには59が代入される。
マクロZETTAIの正しい宣言は下のようになる。
#define ZETTAI(x) ((x < 0) ? -(x) : x)
もちろん自作などせずにライブラリ関数を使うことが望ましい。
403:デフォルトの名無しさん
08/05/06 14:23:31
>>399
#define ZETTAI(x) (x < 0) ? -(x) : x
を
#define ZETTAI(x) (((x) < 0) ? -(x) : (x))
にしておてきなさい。
404:デフォルトの名無しさん
08/05/06 14:30:39
>>402-403
上手くいきました
ありがとうございます
ですが、
>x = (-9 - 50 < 0) ? -(-9 - 50) : -9 - 50 + 5;
同じxなのに何故一番右のxだけに+5がくっつくのですか?
405:393
08/05/06 14:30:43
すいません、結構理解に手こずってます。
配列でなく、実体を受け渡しする場合は、
struct histgram{
int x;
int y[100];
};
void one(struct histgram hist);
void two(struct histgram *hist);
int main (void){
struct histgram hist;
int z;
hist.x = 0;
printf("before***%d***%d***%d***",hist.x);
one(&hist);
printf("before***%s***%s***%s***",hist.x,hist.y[0],hist.y[50]);
return 0;
}
void one(struct histgram hist){
two(&hist);
}
void two(struct histgram *hist){
int z;
hist->x = 1;
}
だと思ったのですが、error C2440: '関数' : 'histgram *__w64 ' から 'histgram' に変換できません。
というエラーが出てしまいました。
406:デフォルトの名無しさん
08/05/06 14:36:01
>>404
元のx=の式の一番右の+5がそのまま残っているだけ。
407:デフォルトの名無しさん
08/05/06 14:36:58
>>405
構造体をそのまま渡したいのであれば、アンパサンドをつけてはいけません。
408:デフォルトの名無しさん
08/05/06 14:40:42
>>406
つまり
#define ZETTAI(x) (x < 0) ? -(x) : x を
#define ZETTAI(x) ((x < 0) ? -(x) : x) に変えると
x = (-9 - 50 < 0) ? -(-9 - 50) : -9 - 50 + 5; が
x = ((-9 - 50 < 0) ? -(-9 - 50) : -9 - 50) + 5; になるということですね?
#define ZETTAI(x) (((x) < 0) ? -(x) : (x)) だと
x = (((-9 - 50) < 0) ? -(-9 - 50) : (-9 - 50)) + 5; ですね!
理解できました
丁寧にありがとうございました
409:デフォルトの名無しさん
08/05/06 14:40:56
まぁ、あんなサイトを見ているようじゃいつまでたっても理解できないわな。
410:デフォルトの名無しさん
08/05/06 16:29:22
いいから黙ってstdlib.h::abs()を使え
411:デフォルトの名無しさん
08/05/06 16:49:43
やっぱ自作するより、ライブラリ探したほうがいいのかな
412:デフォルトの名無しさん
08/05/06 16:56:26
absはintだから・・・
413:デフォルトの名無しさん
08/05/06 16:56:59
そりゃそうだが基本的なパーツの使い方を勉強してる初心者にそれは野暮な突込みだ。
414:デフォルトの名無しさん
08/05/06 22:00:03
>>399
悪いことはいわん。inline 使え。
#define は C言語ではない・・マクロは副作用があるからうっかり a++ なんて記述したら・・判るでしょ?
415:デフォルトの名無しさん
08/05/06 22:03:58
inline は C99 からだから
416:デフォルトの名無しさん
08/05/06 22:56:05
>>415
そ、そんなこといいだしたら・・・今から始めるなら新しいツール使おうよって Linux も *BSD も Darwin も普通にクリアしてるし。Windows は今一つ判らないけどまさかそうじゃないの?