Cなら俺に訊け! Part 78

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。

エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。

コンパイラを探しているなら >>2-13 を。
上記を逸した場合の結果は激しく未定義だYO!

C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/

各種リンクは>>3-20あたり(誰か適当に貼って)

C言語なら俺に聞け! Part 76
http://pc5.2ch.net/test/read.cgi/tech/1081597375/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
2デフォルトの名無しさん:04/05/04 15:15
3デフォルトの名無しさん:04/05/04 15:15
gcc
http://gcc.gnu.org/

【Win32用の開発環境のみ。】
gcc-cygwin
http://www.redhat.com/software/tools/cygwin/
gcc-mingw
http://www.mingw.org
Digital Mars C++
http://www.digitalmars.com/
Open Watcom
http://www.openwatcom.com/
Borland C++ Compiler 5.5.1
http://www.borland.co.jp/cppbuilder/freecompiler/

【ライセンスや機能などに問題あり】
Microsoft C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/〜lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html
Intel C++ Compiler for Linux
http://developer.intel.com/software/products/compilers/clin/noncom.htm
証明まだ?
5デフォルトの名無しさん:04/05/04 15:15
 '`,、('∀`) '`,、
6デフォルトの名無しさん:04/05/04 15:18
もっと光を! > 照明まだ?
なんでスレタイ変えたの?
バカ?
8デフォルトの名無しさん:04/05/04 15:19
おれじゃないもん
C言語とかかずにCとかくと日下部せんせいが興奮して失禁してしまうからです。
10デフォルトの名無しさん:04/05/04 15:21
逆だろ?

ここ読め
http://www.pleiades.or.jp/cbook/
11デフォルトの名無しさん:04/05/04 15:22
>>10
ブラクラ
>>7
...。第一不完全性定理から導けよ。
13デフォルトの名無しさん:04/05/04 15:27
>>11
ふつうに読めるじゃん。
14デフォルトの名無しさん:04/05/04 15:34
やーい > 読めないやつ
もじばけしてますよ
16デフォルトの名無しさん:04/05/04 15:44
化けてないよん。

どんなブラウザーで読んでるの?
17デフォルトの名無しさん:04/05/04 15:51
漢ならlynxだろ! > ブラウザー
...って先生が言ってたぞ。
18デフォルトの名無しさん:04/05/04 15:52
lynxで文字化けしませんよ? Operaでも
19デフォルトの名無しさん:04/05/04 16:06
2重のループから抜け出すにはどうすればいいですか?
20デフォルトの名無しさん:04/05/04 16:06
SLS(ソースレベル・リンク・システム)について語ろうよ!
使ってるんだろ?
21デフォルトの名無しさん:04/05/04 16:07
ファイルと関数の2段階以外にスコープを階層化する方法はないですか?
22デフォルトの名無しさん:04/05/04 16:07
>>19
break2回。
フラグでチェック。
goto。
23デフォルトの名無しさん:04/05/04 16:08
break2回ってのは、
具体的にどう書くのですか?
24デフォルトの名無しさん:04/05/04 16:09
>>23
まず、どういうコードで使いたいかソースを晒せ。
25デフォルトの名無しさん:04/05/04 16:10
>>19
ループ全体を関数に切り出してreturnって手もある
26デフォルトの名無しさん:04/05/04 16:12
while (...) {
 while (...) {
  if (...) {
   break; breal;
  }
 }
}// tha's joke
27デフォルトの名無しさん:04/05/04 16:12
break 2; とかかければいいのに ;-)
28デフォルトの名無しさん:04/05/04 16:13
>>19
ループを1重にしる。
>>26
つまらなさ杉。空気嫁。
30デフォルトの名無しさん:04/05/04 16:13
え? ウケたのにー
31デフォルトの名無しさん:04/05/04 16:14
関数の引数のカンマとカンマ演算子はどうやって区別しますか?

foo(a, b, c, (d, e), f);
32デフォルトの名無しさん:04/05/04 16:16
仮引数やプロトタイプで const char *s; と定義されている引数に、
char *sみたいな変数を実引数で渡しても警告はでないですか?
33デフォルトの名無しさん:04/05/04 16:16
while (){
while (){
if (){ flag = 1; break;}
}
if (flag == 1) break;
}
34デフォルトの名無しさん:04/05/04 16:17
関数の末尾やループの末尾(閉じる中括弧の前)にラベルを置けないのはなぜですか?
なぜ「;」が必要?
35デフォルトの名無しさん:04/05/04 16:17
>>32
締めつける方向だからok。逆だと、constを理解して適切な警告レベルなら出るだろ。
36デフォルトの名無しさん:04/05/04 16:19
学校の課題の答えで、
cunt +=2; って書いてたら2年生に笑われました。なぜですか?
37デフォルトの名無しさん:04/05/04 16:20
>>34
ラベルは式につけるものだから。
38デフォルトの名無しさん:04/05/04 16:20
>>36
countも綴れないのかと?
>>36
cunt


━━ n. 〔卑〕 女性器; 〔軽蔑〕 女; 〔卑〕 嫌なやつ, ばかなやつ.
40デフォルトの名無しさん:04/05/04 16:21
Javaの >>> 演算子に相当するのはCでは何ですか?
>>36
...。第一不完全性定理から導けよ。
42デフォルトの名無しさん:04/05/04 16:22
double d; int i;
i = d; ってやると、dの値が切り捨てられちゃいます。
自然科学式の四捨五入をするにはどうすればいいですか?
また、銀行式四捨五入をするにはどうすればいいですか?
43デフォルトの名無しさん:04/05/04 16:23
>>40
符号なし整数型の式で >>
44デフォルトの名無しさん:04/05/04 16:24
>>42
切り捨てられるかどうかは実装依存。
その自然科学式とか銀行式の定義をまずしろ。
ceil()、floor()使え。
45デフォルトの名無しさん:04/05/04 16:24
main関数は前に書きますか? それとも一番あと?
46デフォルトの名無しさん:04/05/04 16:25
> その自然科学式とか銀行式の定義をまず

いわゆる世間一般常識のやつです。
47デフォルトの名無しさん:04/05/04 16:26
>>45
一番後。

>>46
切り捨てられる環境なら+0.5しとけ。
>>46
銀行式
端数は着服
49デフォルトの名無しさん:04/05/04 16:26
> 一番後。

なぜですか?

> 切り捨てられる環境なら+0.5しとけ。

マイナスのときにうまくいきません。
50デフォルトの名無しさん:04/05/04 16:27
>>45
好き好きだが、
一番最後に書けば、そのファイル中のmainから呼ばれる関数は
定義自身がプロトタイプ宣言を兼ねるため
独立したプロトタイプ宣言をいちいち書かなくても済む。
51デフォルトの名無しさん:04/05/04 16:28
>>49
prototype宣言まんどくさいから。
マイナスの時って…少しは頭つかえよw
実行形式が.comのファイルをつくるには
どうしたらいいですか。
>>52
MS-DOS用のコンパイラを使え
>>53
WindowsXPで動きますか?
ちなみにどこでかえますか?
55デフォルトの名無しさん:04/05/04 16:33
>>52
まず、どうしてcomファイルが作りたいのか言え。
5652:04/05/04 16:37
>>55
昨日神さまからのお告げがあって、
GWが終わるまでにつくらないと隕石が地球に衝突するそうです。
57デフォルトの名無しさん:04/05/04 16:38
>>56
そうか、じゃぁ教えない。
5852:04/05/04 16:42
>>57
どういえばおしえてくれますか?
59デフォルトの名無しさん:04/05/04 16:45
>>58
だから、まず、どうしてcomファイルが作りたいのか言え。
Visual CでCを勉強してるのですが、
EOFを示す値は何を入力すればいいのでしょうか?
テキストには^Zってありましたが、終了してくれません。
あんのぉ〜、マイナスのときの四捨五入のふるまいって、
いろんな定義があるんじゃないのかと〜。
+0.5して切り捨てたときのふるまいもじゅう〜ぶんに四捨五入だとおもうんだけどぉ〜。
6252:04/05/04 16:54
>>59
人が人らしくあるのに理由がひつようなのかい?
>>52
拡張子を.exeから.comに変える。
>>62
第一不完全性定理から導いてください。
>>60
^Zってのが
Ctrl + z ってのはわかってるだろうな。
66デフォルトの名無しさん:04/05/04 16:57
>>62
だったらcomファイルを作る理由もないだろ。ましてや人に聞く必要もない。
67デフォルトの名無しさん:04/05/04 16:58
>>60
Ctrl+zの後にEnterも必要だ、普通は。
>>66
理由が無いんじゃなくて理由が必要ない
>>62
人らしいっていうのがちょっと曖昧だね・・・
きちんと人らしいって言葉を定義してもらわないと・・・
7060:04/05/04 17:02
^Z ← を直接入力してました。
CTRL+Zなのですね。どもですた。
>>69
1.高校生以上は非道程であること
72デフォルトの名無しさん:04/05/04 17:15
なんだこの糞タイトルは
#include <stdio.h>

char *str_chr(const char *str, int c)
{
for ( ; *str; str++){
if (*str == c)
return ((char *)str);
}
return (NULL);
}

int main(void)
{
char str[10], *p;
char uletter[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

printf("英大文字を入力してください:");
scanf("%s", str);

p = str_chr(uletter, str[0]);
if (p !=NULL) puts(p);

return (0);
}

本に載ってた例題で、読み込んだ英大文字以降のアルファベットを表示するというプログラムなんですが
最初の関数を宣言するときint型の引数cを取る理由がわかりません。
char型ではいけないのですか?
74デフォルトの名無しさん:04/05/04 18:01
>>73
まず、そんな本は捨てろ。
>>73
文字を扱うだけならcharで問題なし。
ただ文字以外にEOFも表現できるようにするために大きな型であるintになっている
getchar(), getc()やらの結果をそのまま渡せるようにするならintにしたくなるかもな。
76デフォルトの名無しさん:04/05/04 18:02
>>73
標準関数strchrに合わせているのでは?
77デフォルトの名無しさん:04/05/04 18:03
>>73
たまたま間違えたんだろ。
78デフォルトの名無しさん:04/05/04 18:04
先輩にgotoを使うなと怒られたのですが
プロジェクトのソースには何度も使われています。
やはり使ってもいいんでしょうかね。
79デフォルトの名無しさん:04/05/04 18:06
先輩がgoto
>>78
gotoは"刃物"だ。
適切な場所が判断できないうちは無条件に使わないほうがいいかもしれんし
逆に使って痛い目にあって学習する手もあるかもしれん
>>78
>gotoを使うなと怒られた
その前後に何か修飾する言葉がついていなかったか?
「おまえは」とか、「こういう処理に」とか、「やたらめったら」とか。
82デフォルトの名無しさん:04/05/04 18:10
gotoってやたらめったら使いたくなるほど便利なものでもないよな。
83デフォルトの名無しさん:04/05/04 18:11
>>78
Cの場合はごくまれにgotoが有効なケースがある。
しかし、初心者は使ってはいけない。
84デフォルトの名無しさん:04/05/04 18:11
>>78
goto嫌いな人のが多いから使わない方がいいよ。
8573:04/05/04 18:11
>74-77
ありがとうございました
最近私は、「goto使うなら私を納得させる理由を提示しろ」と言ってます。
最近私は、「goto禁止するなら私を納得させる理由を提示しろ」と言ってます。
どんな理由にせよこんなgoto文だけは絶対に許さないってのはあります?
例えばswitch文の中にラベル貼るとか・・・
#include <stdio.h>

int main() {
hahaha:
printf("ぬるぽ");
goto hahaha;

return 0;
}
>>88
入れ子の無いforとか、whileとか、switchとか。continueやbreakの代わりとか。
構文が用意されているものをわざわざgotoを使って記述することかな?
フツーに配列をたどっていくのにforでなくwhileを使ったりするのと同じように。
91デフォルトの名無しさん:04/05/04 19:31
>>88
あとはあれだな、switchの中のcaseラベルに飛ぶやつ。
92デフォルトの名無しさん:04/05/04 19:36
>>88 gotoは一般的にご法度だな。アセンブラやN88BASICじゃなければ
switchはラベルあるけどbreak;かreturn;だから問題なし、default:も
書いておけば。
ただ巨大なswitchは可読性下がるけどWinのWindowProc()とか・・・
93Aransk:04/05/04 19:40

★☆★無知無学な文系糞虫祭り★☆★ 絶賛開催中!!!
http://pc5.2ch.net/test/read.cgi/tech/1083624060/
/|         |  |_____ΦΦΦΦΦΦΦΦΦΦΦ||ΦΦΦ
  |         |  | ̄ ̄ ̄ /|                    ||
  |         |  |   / /|TTTTTT   TTTTTTTTTT||TTTTT
  |        /\ |  /|/|/|^^^^^^ |三三| ^^^^^^^^^^^||^^^^^^^
  |      /  / |// / /|
  |   /  / |_|/|/|/|/|
  |  /  /  |文|/ // /
  |/  /.  _.| ̄|/|/|/         Λ_Λ
/|\/  / /  |/ /           (___) 表示的意味論わからずに
/|    / /  /ヽ            /〔 祭 〕〕つ 意味論騙ろうとはふてぇ奴だ
  |   | ̄|  | |ヽ/l            `/二二ヽ     みんなでまつっちまえ
  |   |  |/| |__|/   Λ_Λ     / /(_)
  |   |/|  |/      ( ´∀`)   (_)    Λ_Λ
  |   |  |/      // /  ^ ̄]゚        (`   ) 「構文が表示的意味論」(プッ
  |   |/        ゚/ ̄ ̄_ヽ         ⊂〔〔 祭 〕
  |  /         /_ノ(_)          ┌|___|
  |/          (__)             (_ノ ヽ ヽ
/                                (_)
94デフォルトの名無しさん:04/05/04 22:04
>>92
意味分からん…
95貧乏紙:04/05/04 22:10
折れもgotoは使うなといわれた。使ったら後ろ指差されるって言われた。
>>92
アセンブラやN88BASICじゃなければgotoは一般的にご法度だな。
switchはdefault:も
書いておけば、ラベルあるけどbreak;かreturn;だから問題なし。
ただWinのWindowProc()とか巨大なswitchは可読性下がるけど・・・

こうですか?わかりません!
>gotoは一般的にご法度だな。アセンブラやN88BASICじゃなければ
訳]アセンブラやN88BASICであればともかく、(Cでは)gotoを使う事はほとんど無いですね。

>switchはラベルあるけどbreak;かreturn;だから問題なし、default:も
>書いておけば。
訳]ラベルを使うという意味でswitchについてですが、
通常の使い方であれば break か return で処理分岐させるので気にする必要は無いはずです。
default: については記述するだけで自動的に該当しないケースの分岐しますし。

>ただ巨大なswitchは可読性下がるけどWinのWindowProc()とか・・・
訳]ところで話が変わりますが、Windowsでのプログラミングにおいて
WindowProc()とかで良く見かけるブロックが長い switch 、
可読性が下がるので良くないコーディングだと思いませんか?
>>97
機械翻訳ですか?結構うまくできるんですね。
変な話ですが、

Cを勉強をするにあたって
ただ闇雲に覚えていくだけじゃつまらないので
何か作りたいと思いますが、
例えば簡単なシューティングゲームだとどのくらいのスキルが必要になりますか?

何ヶ月、何年とか期間じゃなくて、
何時間みたいな総合計、勉強すればよいのでしょうか?
(製作時間は含まない)
1000
101デフォルトの名無しさん:04/05/04 23:15
>>99
人による。
だいたいCの前にPascalとかまともな教育を受けていればCを使うのに1日はかからない。
Cを使うのに1日はかからない。
じゃあDel厨はすぐにでもCのプログラムが組めますね。
104貧乏紙:04/05/04 23:35
しかし、アルゴリズムを考えるの時間がかかるyo
>>103
ネタの説明をしてくれ
オレ未だにまともにC使えないや・・・

使えるって人に言えるレベルって大体どのくらいですか?
GW sage
>>105

> Pascalとかまともな教育を受けていれば
 ↓
Delphi≒ObjectPascal
 ↓
> Cを使うのに1日はかからない。
 ↓
del厨(゚д゚)ウマー
109デフォルトの名無しさん:04/05/04 23:57
>>108
前提が間違ってるぞ。Del厨でも教育受けてるもの(相当)だぞ?
110デフォルトの名無しさん:04/05/05 00:00
>>108
まぁDelphiの方がよっぽど難しいけどなw
111デフォルトの名無しさん:04/05/05 00:01
(Pascal | まともな教育を受けていれば)
Cを読むのには1日かからないだろうが
Cを使うのにはそれなりに時間かかるんじゃないか
細かい差異があるととくに混乱するし。
そういえばpascalならbagin...endが使えるな
114デフォルトの名無しさん:04/05/05 00:07
101は数日前のあいつか
115デフォルトの名無しさん:04/05/05 00:07
>>111
Pascalとかでまともな教育。
>>113
bagin
>>115
Pascal∈まともな教育

こうか?
118デフォルトの名無しさん:04/05/05 00:20
ごめん。。やっぱり僕、君のことが好きみたいだ。。
120デフォルトの名無しさん:04/05/05 00:27
明後日からの日にちを入力して、その曜日を出力するプログラム。
動かないよー、助けて!!

#include<stdio.h>
main(){
char *weekp[7] = {
"thu","fri","sat",sun","mon","tue","wed"
};
int i ,day;
scanf("%d",&day);
i = day % 7;
printf("%s\n", weekp[i]);
}
>scanf
釣りですか?
>>120
エラーが出るのか、期待した動きにならないのか位はかけ。
>>120
sunの前に"を置け
>>120
何がしたいのかわからないよー、助けて!!
>>122
エラーが出ます
>>120
何がしたいのかわからないよー、助けて!!
127デフォルトの名無しさん:04/05/05 00:34
>>124
できました、ありがとうございました
128デフォルトの名無しさん:04/05/05 00:41
14日が木曜日になるのは仕様ですか?
明確なプログラムのバグ
130デフォルトの名無しさん:04/05/05 01:05
>>106
自分で作りたいと思ったものが作れれば。
言語以前に作りたいと思うものをどーしたら作れるかという部分も必要ね。

>>108
別にCが使えてウマーなわけは無いと思うが。誰でも使えるしね。

>>113
Pascalなら、じゃなくてそこが元でそ、大抵の奴は。

>>130がマジレスかネタか分からない漏れは2chをしない方がいいんだろうか。
>>131
分からんのならそじゃないか?
漏れも分からんがやめようとは思わない。なんでそう思う?
133デフォルトの名無しさん:04/05/05 02:12
選球眼がなくて凡退しまくる打者のようなものだな。
>>133
ならやめるしかないなw
135デフォルトの名無しさん:04/05/05 04:08
> マイナスの時って…少しは頭つかえよw

ようするにあなたはわからないのですね?
136デフォルトの名無しさん:04/05/05 04:09
> Ctrl+zの後にEnterも必要だ、普通は。

しかもEnterの直後じゃないとね
137デフォルトの名無しさん:04/05/05 04:11
> for ( ; *str; str++){

なんで「)」と「{」をくっつけるんだよ
138デフォルトの名無しさん:04/05/05 04:12
わtがしの先輩の書いてたソースにもgotoって数十箇所でてきてましたよ。

/* modified by goto */ ってコメント中がほとんどでしたが
139デフォルトの名無しさん:04/05/05 04:14
> 例えばswitch文の中にラベル貼るとか・・・

ラベルのないswitch文なんて、何の役ににも立ちません。

まるでコーヒーをいれないクリープみたいなものです
140デフォルトの名無しさん:04/05/05 04:16
> > gotoは一般的にご法度だな。アセンブラやN88BASICじゃなければ
> 訳]アセンブラやN88BASICであればともかく、(Cでは)gotoを使う事はほとんど無いですね。

それは誤訳ですね。
正しい訳は、
「gotoがダメとかいう話はオレでもきいたことはあるぞ。なんでダメなのか、くわしくは
しらんが、ちなみに、俺がほかに名前を聞いたことがある言語はアセンブラとN88BASIC
ぐらいだ。たしかどっちかにはgotoっていうのもあったはず」
だな。
141デフォルトの名無しさん:04/05/05 06:40
>>140 意味がよくわからん??
goto がダメなのは、forやwhileループから強制離脱したり、何でも出来て
しまうことが出来てしまうから危険と言われてる
そもそもアセンブラには条件分岐を含むジャンプ命令しかない

関係ないがSasserなるウィルスの話題で持ちきり棚
釣りご苦労
143デフォルトの名無しさん:04/05/05 10:30
>>142
いや、>>140がただのマヌケにしか見えんw
>>141
マクロアセンブラは強力だ(った)よ。
Cで書くのと同程度の構造化すらできていた。
144大域ジャンプ:04/05/05 11:17
「大丈夫さ、恐れないで」
「そんなことしたら、私が私じゃなくなってしまう気がして...」
「人生にはいつかジャンプしなければならいないときがくるのさ。」
「でも...」

欲望に正直なだけ 満たされてたい Goto Heaven
>>144
なんだよ
146デフォルトの名無しさん:04/05/05 12:14
> 動かないよー、助けて!!

scanf使うなよぼけ
147デフォルトの名無しさん:04/05/05 12:16
ちなみに「goto」があるアセンブラって聞いたことないですね ;-)
>>147
ガキの喧嘩口上みたいなこというお方ですね
149デフォルトの名無しさん:04/05/05 12:24
っていうか、gotoの話題でアセンブラがでてくる時点でだめすぎ。
150デフォルトの名無しさん:04/05/05 12:27
YES/NO
TRUE/FALSE
True/False
true/false
どれを使っています?
どうして?
152デフォルトの名無しさん:04/05/05 12:29
bool/true/false に決まってるだろ。Cなんだから
ちなみにC++もbool/true/false
DelphiみたいにTrue/Falseとか書かないし、
Javaみたいにboolean/true/falseでもない。
153デフォルトの名無しさん:04/05/05 12:39
Cで
func()
{
printf("ほげ");

int i, j;
....
}
みたいに、ブロックの先頭以外で変数宣言できるみたいですが、これって何か便利なこと
ありますか? (っていうか、できないと不便な場面)
>>149
それは君が機械語やったことないからそう思うだけ。
gotoに限らないが、cのコードに対応する機械語を想像可能かどうかで
cに対する理解度や理解の容易さは違ってくる。

たとえば、アセでも構造化言語的にコードを記述することはある程度可能
なんだが、そういう経験がある人にとってはcでgotoをどんな場合に
使ったほうがいいかの判断は比較的容易だ。
155デフォルトの名無しさん:04/05/05 12:47
> それは君が機械語やったことないからそう思うだけ。

いーや逆だろ。やったことあれば、高級言語のgoto論争にアセンブラもちだしても意味ない
ことぐらいわかるだろーに ぼけ
156デフォルトの名無しさん:04/05/05 12:51
gotoを使うのは
つまりifやwhileやforやdoやbreakやcontinueで表せないものだけにすべし、って
ことにすると、実際、gotoを使わないと表せない場面ってのは、ロジックやフローが
適切じゃない場合がほとんど。なので、初心者のうちは「goto不要論者」にだまされて
「とにかく使ってはいけないものなのだ!」と思い込んでいても、たいした弊害はない。
157デフォルトの名無しさん:04/05/05 12:52
↑gotoの問題については「作ってわかるCプログラミング」にいろいろ書いてありましたよー
読んでください。(いま手元にないのでページ数はわかりませんが)
158デフォルトの名無しさん:04/05/05 12:52
そんな言語はありません > cに対する理解度や
>153
使いたい変数をブロックの先頭で宣言する事しかできないので
あらかじめ先頭に書いておく必要があった。

これからはいつでも使いたい所で宣言すればOKって事。
160デフォルトの名無しさん:04/05/05 12:54
で、先頭にまとめずに、使いたい箇所で宣言すると、何かいいことあるんでしょうか?
161デフォルトの名無しさん:04/05/05 12:56
>>153
Cでは宣言はブロックの先頭でしかできない。自由にできるのはC++の機能。
途中で宣言できるとスコープを有効に使える。使ってる場所のすぐそばで型が確認できる。
(コンパイラの都合だが)最適化に有利。

>>154
機械語を直接やらずともアセンブラをやればまぁ十分だな。

>>155
高級言語にgotoは無用。ちなみにCは低級言語の部類だ。
>161
C99では宣言はどこでもできたはず。

・char *p = strchr( hoge , 'T');みたいに、定義と同時に初期化をかけることで、
変数を不定値のまま扱う事故が少なくなる。宣言と代入を離さねばならないと、
するとchar*p=NULL; .... p = strchr(hoge,'T');みたくしないとドツボになるが面倒。
・必要なときに定義するので、変数のスコープが明確になる。
という利点があるな。
>153
"できないと不便な場面"はちと思い当たらんが、
ある関数で引数の異常チェックをしてから処理をする場合、

func()
{
いろいろな処理用の変数宣言

引数パラメータのチェック
if(異常) return;

いろいろな処理
}

って書くよりも

func()
{
引数パラメータのチェック
if(異常) return;

いろいろな処理用の変数宣言
いろいろな処理
}

の方がすっきりするかな。
returnつかうなよぼけ
165デフォルトの名無しさん:04/05/05 13:01
>>162
VC7ならおけ?VC6はだめ。
166デフォルトの名無しさん:04/05/05 13:04
161はかなりの知ったかぶり
167デフォルトの名無しさん:04/05/05 13:04
っていうかifの後ろあけろよ
168デフォルトの名無しさん:04/05/05 13:05
そんなものないぞ > VC7
169デフォルトの名無しさん:04/05/05 13:07
でも、宣言といっしょに初期化を書いてしまうのって(auto変数の場合は実は代入に過ぎないのだが)、
ブロック先頭にまとめてた時代はよかったのだが、

途中にあると、どこに宣言があるのかわかりづらいんだよなあ
170デフォルトの名無しさん:04/05/05 13:09
>>169
逆に頭にあるほうがどこで使ってるのか不明なことが多いな。
使うときに宣言する方が分かりやすいと思うな。
まぁコードというか、それを書いたやつのレベルに大いに依存するが。

Gotoを怖がるのは処女童貞の法則なんだな(w
インテリがシモネタ耐性が無いのと同じ。

熟達者はむしろそれを楽しみ
精神性をもって芸術の域にまで高めるものだ。
第一真のプログラマーは(以下略)
>どこに宣言があるのかわかりづらいんだよなあ

そんな糞コードは作り直せ(w
大丈夫、C++でもブロックの先頭でまとめて宣言する香具師は少なからず存在する。
174デフォルトの名無しさん:04/05/05 13:18
> Gotoを怖がるのは

怖がるかどうかはたいしてもんだいじゃなくて、
「こわがらせるかどうか」の問題にすぎない
175デフォルトの名無しさん:04/05/05 13:18
> どこに宣言があるのかわかりづらいんだよなあ

そんな糞コードは作り直せ

つまり先頭にまとめるってこと?
>150
>YES/NO
>TRUE/FALSE
OK/NG
GOOD/BAD
LIVE/DEAD
177デフォルトの名無しさん:04/05/05 13:22
あのー
1/0に関してききかたかったのですが、
OK/NGも1/0なんですか?
>175
>つまり先頭にまとめるってこと?

アフォか
ブロックが分かりにくいのは構造が悪いからだろ
179デフォルトの名無しさん:04/05/05 13:22
> ブロックが分かりにくいのは構造が悪いからだろ

は?
ブロックの「内部」の話ですが。
180デフォルトの名無しさん:04/05/05 13:23
↑178は要するに内容をちっとも理解できないけど、けちつけてみたいだけだと思われ
181デフォルトの名無しさん:04/05/05 13:24
なるほど
>177
言い伝えに従えば OK=0, NG=1 だな
183デフォルトの名無しさん:04/05/05 13:26
なるほど
>178
ブロックって{と}で囲まれている範囲を指すと思うが...
185デフォルトの名無しさん:04/05/05 13:29
161==171==172
こいつは、
・Cの宣言がどこに書けるのかしらない
・アセンブリ言語と機械語の差をちゃんと把握できていない
・でも知ったぶりしたい
・gotoに関しては評判がよくないことぐらいしか知らない
っていうやつですね。
186デフォルトの名無しさん:04/05/05 13:30
>>184
だからブロックの「内部」の話だって言ってるだろ ぼけ
184はまだ理解できていないのか。
187デフォルトの名無しさん:04/05/05 13:32
変数で思い出したが、Cで
for (int i = 0; i < MAX; i++)
...とかってやるとき、このiのスコープはどこまで?forループ抜けても使える?
C++やJavaでも同じですか?
188ビル・ジョブス:04/05/05 13:33
>177
おれなら、OK==0、NG!=0だな
189デフォルトの名無しさん:04/05/05 13:34
defineするときはどうするの? > 188
#define NG (!0) とするだけだと、結局1が入るだけでつまんないじゃん
190デフォルトの名無しさん:04/05/05 13:36
>186
まぁまぁ、マターリCましょう
Cつかうなぼけ
192デフォルトの名無しさん:04/05/05 13:40
Dbがいいな
193ビル・ジョブス:04/05/05 13:40
>189
(!0)は必ず1じゃないと思うよ。
OK == FALSE、NG == TRUE ってのがチョト気持ち悪いよね。
>>186,179 よ
>184 は >178 宛てだと思うが、大丈夫か?
196ビル・ジョブス:04/05/05 13:43
>191
#190は名前入れ忘れたおれだが・・文句あるか?
>>194 そんな比較すんじゃねぇヴォケ
このスレ読んでると、俺って実は頭良いんじゃないかと錯覚してしまう。
199デフォルトの名無しさん:04/05/05 13:52
>>193
Cなら1が保証されている。
むしろこのスレ読んでると、僕は人間じゃないかと錯覚してしまう
201デフォルトの名無しさん:04/05/05 13:55
> (!0)は必ず1じゃないと思うよ。

1だよ。そう定義されている。
真偽の判定をするとき、真は0以外、偽は0。
だが、真偽の判定をした結果は真が1、偽は0。これ常識。
>真偽の判定をした結果

フーン
203デフォルトの名無しさん:04/05/05 13:56
> OK == FALSE、NG == TRUE ってのがチョト気持ち悪いよね。

「エラーがあったかどうか」だから、とても合理的でわかりやすく素直でよくできてると思うが。
204デフォルトの名無しさん:04/05/05 13:57
202は「何を話しているんだかさえ理解できない」ぐらいのボケだけど「仲間にいれてほしい」ようだ ;-)
人間になりたい
206デフォルトの名無しさん:04/05/05 13:57
連休向けに数ランクレベル落として話してるんだから、こんな話題ぐらい理解しろよ ;-)
207202:04/05/05 13:59
だって 単項の! について判定の結果とか一店だもん
208デフォルトの名無しさん:04/05/05 13:59
関数の引数として、構造体のポインターではなく構造体そのものを渡すのって、
あれ、その構造体をコピーするんですよね? sizeof(FOO)==1024ぐらいだったら、
たとえば1KB分。

それと同じことって配列でできないでしょうか?
だって何々君が何々したんだもん
210デフォルトの名無しさん:04/05/05 14:00
> だって 単項の! について判定の結果とか一店だもん

じゃあ、確実に1じゃん。おまえぼけすぎ
構造体に配列を持つ
212デフォルトの名無しさん:04/05/05 14:02
>>211

なんかそれいやん...。
ほかに方法ないですか?
>>212
それ以外ない
214デフォルトの名無しさん:04/05/05 14:02
ほんと? ほんとにほんと?
コレホント。
次世代C (C2008かC2009くらい)が出るのを待つ。
217デフォルトの名無しさん:04/05/05 14:08
でません
218デフォルトの名無しさん:04/05/05 14:08
これからはCobolの時代です。
Cobol 2003と
オブジェクティヴCobol
219デフォルトの名無しさん:04/05/05 14:09
>>208
まず、どうしてそういうことがしたいのが理由を述べよ。
その前に何がしたいのが言えば別の解決法が常に存在する。
220デフォルトの名無しさん:04/05/05 14:10
> まず、どうしてそういうことがしたいのが理由を述べよ。

いやです。
221202:04/05/05 14:10
>210
>じゃあ、確実に1じゃん。おまえぼけすぎ

その事については何も逝ってませんが、大丈夫ですか?
あなた木瓜杉です。
222デフォルトの名無しさん:04/05/05 14:10
なんで構造体ではできるのに配列ではできないの?

じゃあなんで構造体ではしていいの? ずるいじゃん
223デフォルトの名無しさん:04/05/05 14:11
>>157
ページじゃなくてペイジだろぼけ
224デフォルトの名無しさん:04/05/05 14:12
>>157
ページじゃなくてペイジだろぼけ
225デフォルトの名無しさん:04/05/05 14:13
>>222
そういう決まりだから
226デフォルトの名無しさん:04/05/05 14:17
>>222
Cには値渡ししかないんだよ。配列の名前はポインタだから渡るのはポインタ。
>>222
そんなのCの入門書にはたいてい説明してあるじゃない。
それは「配列」は型ではないからだよ。
228デフォルトの名無しさん:04/05/05 14:19
なんで構造体ではできるのに配列ではできないの?

じゃあなんで構造体ではしていいの? ずるいじゃん
229デフォルトの名無しさん:04/05/05 14:20
>>227
型だぞ。
230デフォルトの名無しさん:04/05/05 14:20
> Cには値渡ししかないんだよ。配列の名前はポインタだから渡るのはポインタ。

じゃあ構造体はー?
231デフォルトの名無しさん:04/05/05 14:21
配列も渡したいー
きー
知ってる奴と本気で知らない奴が一緒になってる余寒
昔は構造体も出来なかったんだよ。
構造体はサイズが変わらないが、配列は変わる場合がある。
だからやろうと思っても出来ない。
234デフォルトの名無しさん:04/05/05 14:23
しかも returnで「構造体を返す」関数もつくれるでしょ?
なんで配列は返せないの? ずるいー
235デフォルトの名無しさん:04/05/05 14:24
> 構造体はサイズが変わらないが、配列は変わる場合がある。

えー。構造体が渡せなかった時代はいうまでもなく、
ごくさいきんまで、配列はサイズかわならなかったでしょ?
>>227
型でないなら、typedef int a[5];とかint (*p)[5];がエラーになるはずだが。
237デフォルトの名無しさん:04/05/05 14:24
>>234
だから配列の名前はポインタなんだってば。
238デフォルトの名無しさん:04/05/05 14:25
size変わるならtypedef(a)で配列aのサイズとれないはずだが
239デフォルトの名無しさん:04/05/05 14:25
> だから配列の名前はポインタなんだってば。

構造体の名前もそうしてよ
240225:04/05/05 14:26
できないのは、そういう決まりだからだと言っているだろうが。
タッグマッチですな
242デフォルトの名無しさん:04/05/05 14:26
そんなのいやー >> 240
243デフォルトの名無しさん:04/05/05 14:27
>>239
構造体も渡せなくなるぞ?w
244デフォルトの名無しさん:04/05/05 14:27
>>242
嫌なら自分で気に入る言語を作れYO
245デフォルトの名無しさん:04/05/05 14:27
ワラタ
246デフォルトの名無しさん:04/05/05 14:27
241は「タッグマッチ」の意味をしらないぼけ。

最低でも4人必要じゃん
247デフォルトの名無しさん:04/05/05 14:28
> 構造体も渡せなくなるぞ?

いいもん。配列渡せないなら
248デフォルトの名無しさん:04/05/05 14:29
Cでゲームを作ったのですがゲーム開始時・終了時にLOGをとりたいと
思ったのですがC言語でそういった命令ありますかね?
249デフォルトの名無しさん:04/05/05 14:29
Cで排他的論理和をとる(bitごとではなく)演算子は何ですか?
250デフォルトの名無しさん:04/05/05 14:30
>>248
fから始まる関数(fabsとか関係のないものもあるが)
251デフォルトの名無しさん:04/05/05 14:30
>>249
^
252デフォルトの名無しさん:04/05/05 14:30
> Cでゲームを作ったのですが

作ったんじゃなくて、ソースうちこんだだけだろぼけ。
253デフォルトの名無しさん:04/05/05 14:30
>>249
!=
254デフォルトの名無しさん:04/05/05 14:31
>>251

(0以外の数値) ^ (0) で 1になります?
配列の名前はポインタって嘘教えるなよ
256デフォルトの名無しさん:04/05/05 14:32
>>254
!!(0以外の値) ^ 0
257デフォルトの名無しさん:04/05/05 14:33
&a[0] と a は同義
258デフォルトの名無しさん:04/05/05 14:33
>>254
&&や||の排他的論理和版がほしいんだろ?
だったら!=
(^ 0 ^)/~~
260デフォルトの名無しさん:04/05/05 14:33
*a と a[0] は同義
a + i と a[i] は同義
262デフォルトの名無しさん:04/05/05 14:34
>>261
いくらなんでもそれは嘘だ
>261 おしい
264デフォルトの名無しさん:04/05/05 14:35
>>261
*(a + i) と a[i]
a + i と &a[i]
265デフォルトの名無しさん:04/05/05 14:35
a[i] と i[a]は同義
266デフォルトの名無しさん:04/05/05 14:36
どうでもいいが変数定義とは言わないんじゃないか?
どんな場合でも変数は「宣言」だろ?
267デフォルトの名無しさん:04/05/05 14:36
>>266
定義。
extern int x;
268デフォルトの名無しさん:04/05/05 14:36
toolは英語でどうぎ
269デフォルトの名無しさん:04/05/05 14:37
内容をきめるときが定義だ > 変数
x = 0; // 定義
>>266-277
逆だって。
272デフォルトの名無しさん:04/05/05 14:38
>>265
a[0] と 0[a] も同義なんですか?
273デフォルトの名無しさん:04/05/05 14:38
変数の場合、実物(?)を作るときが定義と思っている。
274デフォルトの名無しさん:04/05/05 14:38
>>272
それが定義。
275デフォルトの名無しさん:04/05/05 14:39
駅の改札で見せるにもていぎ
!=ってやったらxor じゃなくて nxorになるんじゃないのか。。?
277デフォルトの名無しさん:04/05/05 14:40
int a; は定義じゃなくて宣言だ
278デフォルトの名無しさん:04/05/05 14:40
nxor ってどういうのですか?
算数の時間に使うのもていぎ
280デフォルトの名無しさん:04/05/05 14:40
>>276
バカの定義。
これで混乱してる奴は最低最悪サイヤ人
ミスったnxorじゃなくてxnorだね普通は。
283デフォルトの名無しさん:04/05/05 14:45
で、それどういうの?
FAQなんだが、
たくさんの"宣言"が(たくさんの変換単位に)存在してもいいが、
"定義"はただ一つしか存在してはならない。
定義とは実際に場所を確保する宣言で、初期値があるときは初期値を与える。
285デフォルトの名無しさん:04/05/05 14:46
xorの反対なら==だろ?
両方とも真か両方とも偽なら、つまり同じなら真。
41ペイジに書いてあるのに
>>187
誰もレスしていないようなので亀レス

Cではforループ中のみ(C99から)
C++では昔はforループの後でも使えたが今では使えなくなった。
この混乱を回避するためにコンパイラオプションで指定できるコンパイラも多い。
Javaはシラネ。
288デフォルトの名無しさん:04/05/05 14:51
>>287
で、VC7はC99対応してるの?
>>287
>Cではforループ中のみ(C99から)
嘘つくなよぅ
>>285
釣り?
一部対応。一部未対応。完全に対応しているコンパイラはまだ無い。
>>288
現行のVC7.1ではまだ未対応です
>>257
>&a[0] と a は同義
嘘は止めておけ
とりあえずsizeof(a)とsizeof(&a[0])の値を比べてみなさい
294デフォルトの名無しさん:04/05/05 14:56
>>290
>>254を読め
>C++では昔はforループの後でも使えたが今では使えなくなった。
ループの外で使えるのVC++のバグだったのだが。
いわく、カウンタ値をループ外で見たい場合があるので、だそうな。
>>289
ISO/IEC 9899:1999の6.8.5.3
もうそろそろタッグマッチ
>>289
ISO/IEC 9899:1999

6.8.5.3 The for statement
 The statement
  for ( clause-1 ; expression-2 ; expression-3 ) statement

If clause-1 is a
declaration, the scope of any variables it declares is the remainder of the declaration and
the entire loop, including the other two expressions;

>>295
バグって言うか、当時はループの外で使えるっていう決まりだったのよ。
VC7.0からはオプションで指定できるようになった。
>>294
答えになってないな。
300デフォルトの名無しさん:04/05/05 15:04
300
>>299
!=がxnorになるという根拠は?
>298

for(int i=0; ...){

}

int i;
↑ここでコンパイルエラー

ってバグ以外の何者でも無いが
>>302
当 時 は ル ー プ の 外 で 使 え る っ て い う 決 ま り だ っ た の よ
304デフォルトの名無しさん:04/05/05 15:10
>>303
VC++6.0(のC++モード)なんてそうだよな。
for(int i=0;i<n;i++)
・・・;
for(int i=0;i<m;i++)
・・・;
なんてやったらエラー
>>301
この人釣り師のつもりなのか、それとも天然なのか。。
306デフォルトの名無しさん:04/05/05 15:17
とりあえず、!=とか==はだめよ。
偽(1)!=偽(2)で1

>>256ね。
307デフォルトの名無しさん:04/05/05 15:18
>>1
前スレは77だろ
間違えるなアフォ
>>306
やっぱり釣り師か。。
>303
でもバグだろ?
>>306
駄目と言いながら使っているように見えるのは俺だけか?
311310:04/05/05 15:23
ああ、すまん。
そういう意味か。

!(1)!=!(2)でいいんじゃねーの。
>>310
そだな。
ループのiって最初からブロック内で確保できた?
それとも規格が変わってそうなったの?

後者なら、VC6はバグではなく、最新規格未対応なだけだな。
仕様です。
314310:04/05/05 15:24
しかも括弧いらねーし(鬱
>>309はMS製品に何かがあるととりあえずバグにする種類の人間なのか、
それとも「バグ」の意味を間違えているのか…。
この人にとっては処理系依存もバグなんだろうなぁ。
とりあえず手持ちのコンパイラにK&R時代コードでも食わせて「バグバグ」言ってろ。

>>313
漏れの記憶だと最新規格未対応って言うよりも、当時は規格自体が無かったような…。
>>315
そうそう、VC6はC++規格制定前の製品。
あとからでてきた規格に合致してないからってバグではないよな。
しかもMSはちゃんと規格に合わせたバージョンアップをしたわけだし。かなり遅かったけど。
>>315
そうだな。
for()のfor(ここ)が、forブロックの内側か外側かってのがはっきりしていなくて、
処理系によって解釈が違っていた気がする。

VCのような解釈はCからの互換性を重視したとも言える。
昔の(C99より前)ではforの前に宣言しておかなければならなかったわけで、
ループの後ろでも必ず参照できたからね。
printf("%d",(sp+i));
i++;

printf("%d",sp);
sp++;

ドッチデモイイノ?(・ω・` )
int *sp;
ハイレツノアドレス ハイッタ ポインタネ(・ω・` )
320デフォルトの名無しさん:04/05/05 17:48
>>318
日本語で質問しろ。
>>318
iの型によるが、もしintやcharなら別にどっちでもいい。
小学生の時学芸会で小太鼓やることになったんだが
どうもへただったらしく、マスカラに変更されたことが
10年以上たった今でも本当に腹立たしいよ。
>321
おいおい、どっちもだめだろ printf() よく見ろ(w
VC++.net使ってるんですけど、
NULLマクロがstdio.hとstddef.hの両方で定義されてるのは
どうしてですか?
例えばstdio.h内部でstddef.hをインクルードすれば
それでいいと思うのですが。
なぜ stdio.hをインクルードしない場合が思いつかない?
>>325
>stdio.hをインクルードしない場合
というのがよく分かりません。

調べてみたらstdlib.hでも定義されてました。
例えばnull.hとかを作ってそこでNULLマクロを定義して
stdio.h stddef.h stdlib.hのそれぞれでnull.hをインクルードすれば
いいと思うのですが。
>>323
親切なコンパイラなら警告を出してくれるだろうが、別に構わんだろ。
string.hでもtime.hでもNULLマクロが定義されてるみたいです。
見るからにコピー&ペーストしたような感じでしたが。。。
仕様とかですかね?
まさか必ずstdio.hをインクルードしなければならない、と思い込んでいるのか?
>>329
いや違います。同じマクロを複数のヘッダファイルで
定義している理由が知りたいです。
いやだから>>325
>327 アフォ
警告レベルの話ぢゃねーよ
333デフォルトの名無しさん:04/05/05 18:36
324の質問で325は答えになっていないだろ。
あぁそうか。ダブってるのがどうしてかって事かと思ってたよ。
推測だがヘッダファイルから別のヘッダファイルをインクルードするより
単独のヘッダファイルですませたかったからぢゃないか?
335デフォルトの名無しさん:04/05/05 18:53
>>332
ほう、エラーになるコンパイラがあるなら教えてくれ。
>>321
dクス(・ω・` )
>>332
*ワスレテタヨ(・ω・` )ゴメンネ
>>326
歴史的なもの。昔はstdio.hしかなかったのよ。
338324:04/05/05 18:56
いろいろググッてみたのですが分かりませんでした。
どうでもいいことなのかも知れませんが気になってしまったもので。

>>334
上で示したNULLマクロが定義されていたヘッダファイルは
別のファイルをインクルードしてませんでした。
>単独のヘッダファイルですませたかった
そういう制約があるような感じです。

ちょっと納得できてないですが
とりあえずそういうものと思うことにします。
みなさんありがとうございました。
339デフォルトの名無しさん:04/05/05 19:39
>>338
「当時〜」って話を確認したければ、
当時のソースなりヘッダなりを見ないと
意味ねえぞ?
340デフォルトの名無しさん:04/05/05 20:03
思ったんですがA.cppというメインのやつがあったとして
そのA.cppから呼び出される関数をA.hに保存するって形は
おかしいですかね?
341デフォルトの名無しさん:04/05/05 20:17
>>340
おかしいよ。
342デフォルトの名無しさん:04/05/05 20:26
#include <hoge.h> と、
#include "hoge.h"
といった、 < > と " " は、一般的にはどのように使い分けられているのでしょうか?


私は、インクルードパス以下にあるものは< >、それ以外は" "という風に使っていたのですが、
C標準ライブラリは< >、それ以外は" "というのもよく見かけるような気がしまして。
その見かけたソースではインクルードパス以下にあるけど標準ライブラリじゃ
ないヘッダはどうやって読み込んでるんだ?

#include "/usr/include/..."

なんてやってたのか?
>>343
いや、""で括ってもインクルードパスから探せるから。
>>273
そりゃ宣言
#include の < >で囲まれたものは、

いくつかの標準システムディレクトリと、オプション
`-I' によって指定したディレクトリが含まれます。

#include の " "で囲まれたものは、相対パスの
ファイルを探します。

まぁいいんじゃない?
347デフォルトの名無しさん:04/05/05 21:01
>>342
""の場合はカレントディレクトリから探し出す。その後に-Iやシステムで指定されて
いるディレクトリから。<>の場合はカレントディレクトリは探さない。
348デフォルトの名無しさん:04/05/05 21:32
>>345
さっきからうぜえんだよ
もっと気の利いたエサ考えな低脳
>>284よめ
なんで基本的な知識が足りない人がエラそうに議論してるんだろう。
議論に見えませんが
弾なんて目じゃないですよ
>>342
>インクルードパス以下にあるものは< >、それ以外は" "という風に使っていたのですが、
>C標準ライブラリは< >、それ以外は" "というのもよく見かけるような気がしまして
確かにそういうのも時々見かけるけど、" "はファイル構成によっては思いもよらない自体が発生する
(しかも、ヘッダのバージョン違いか何かが原因だとその特定に時間がかかる)ので、
やっぱりインクルードパス以下にあるものは< >にするのが妥当だと思う。
あの。。色物と一緒に洗濯すると色が移るって聞いた覚えがあるんですけど
一緒に洗濯していいかどうかは服のどこをみればいいんでしょうか?
物凄い誤爆だなぁ…つーかわざと?('A`)
>>354
私は白物とそれ以外でしか分けていませんが、特に問題を感じたことは無いです。
ウールものは揉み洗いしてます
358デフォルトの名無しさん:04/05/05 23:32
Cについて質問があります。
明日彼女のうちに誘われていて、いよいよ僕もCを体験できそうなのですが
やはりコンドームは男性が持っていくものなのでしょうか?
また、彼女もCは初めてらしいのですがいきなりフェラチオなどの強要は止
めたほうがいいのでしょうか?
あと、Cをはじめるときの心得などありましたら教えてください。

ちなみに今までの経験はAまでしかありません。
よろしくおねがいします。
>>358
氏ね。
ご。。ごめんなさい。。誤爆でした。。

レスくださったお二人方ありがとうございます、参考にします
>>358
殺伐としたスレに投入された一服の清涼剤
>>361
どうも一服と聞くと毒を盛られた気分になる。
363デフォルトの名無しさん:04/05/06 00:03
質問です。
よく、サンプルなどで

if( foo() )
  処理

とか

if( !foo() )
  処理

とかって書いてますけど、この条件文の意味がはっきりとは分かりません。

最初の例でいうと、これは何と比較しているのでしょうか?
if( foo() == 0 ) なのか、if( foo() != 0 ) なのか?はたまた違うものなのか?

誰か教えて下さい。お願いします。
>>363
真か偽かを判断している。
365デフォルトの名無しさん:04/05/06 00:08
>>363
!=0が省略されていると思えばよい。
!foo()は逆に==0
>>363は自称フィッシャーだと思う。センスゼロだけど。
Cやってる奴でこんなこと知らない奴がいると思えん。

一応マジレスすると、ifはアセンブラで言ったらJZってことだな。
367363:04/05/06 00:16
>>364-366
ありがとうございます。
>>366 さんにはフィッシャー言われてしまいましたがマジでした。
でも、JZ に置き換えるというあなたの解説が覚えやすかったです。
368デフォルトの名無しさん:04/05/06 00:25
if( foo() != 0 != 0 != 0 != 0 != 0 != 0 != 0 != 0 != 0 != 0 != 0 != 0 != 0 != 0 != 0 != 0 != 0 != 0 != 0 != 0 != 0 != 0 != 0 )
頭悪い子ね
これはいかが?
どう?綺麗でしょ?
相手にならないわ
370デフォルトの名無しさん:04/05/06 00:30
> とかって書いてますけど、この条件文の意味がはっきりとは分かりません。

ああ、それは、ifの後ろに空白が空いてなかったり、
カッコの内側に空白をあけているからですよ。
371デフォルトの名無しさん:04/05/06 00:31
なるほど。
if (foo())
  処理
とか
if (!foo())
  処理
って書けばよかったのでね。たしかにそう書けばわかります。
ありがとうございました。
つまらん
373デフォルトの名無しさん:04/05/06 00:33
if (you_are_hungry())
 eat(mos_burger());
1/2の100乗を計算するプログラムを書いたんですが、
結果が0になってしまいうまく動きません。

#include<stdio.h>

int main(void)
{
double a;
int i;

a=(1/2);

for(i=1;i<=100;i++){
a=a*(1/2);
}

printf("1/2の100乗は %ld です",a);

return 0;
}

こんなやつなんですが、どこがいけないんでしょう?
シンプルすぎて逆にわかりません…
1/2の値を確認しれ。
376デフォルトの名無しさん:04/05/06 00:40
> Javaはシラネ。

えー おしえてよー
377デフォルトの名無しさん:04/05/06 00:41
> VC++6.0(のC++モード)なんてそうだよな。
> for(int i=0;i<n;i++)

おまえら、空白あけろよ
378デフォルトの名無しさん:04/05/06 00:42
> for()のfor(ここ)が、forブロックの内側か外側かってのがはっきりしていなくて、
> 処理系によって解釈が違っていた気がする。

C++のは初期は混乱していたが、Cは最初からきまってたね
379デフォルトの名無しさん:04/05/06 00:44
> とりあえず手持ちのコンパイラにK&R時代コードでも食わせて「バグバグ」言ってろ。

たいがい通るのでは? 通らないのってどんなコードだろ?
foo(i)
int i;
{
とかも通るし、

さすがに i =/ 2; とかは通らないだろうけど、これはK&R時代じゃなくてそれ以前の時代だし
>>374
コンピュータで実数の演算するときの誤差については認識ある?
ググれば解説してるとこ結構みつかると思うけど。

2を100乗しといて逆数とるのは趣旨に反する?
381デフォルトの名無しさん:04/05/06 00:48
> とりあえず手持ちのコンパイラにK&R時代コードでも食わせて「バグバグ」言ってろ。

たいがい通るのでは? 通らないのってどんなコードだろ?
foo(i)
int i;
{
とかも通るし、

さすがに i =/ 2; とかは通らないだろうけど、これはK&R時代じゃなくてそれ以前の時代だし
382デフォルトの名無しさん:04/05/06 00:49
すみませんがご教授頂けませんか?
下記のような処理があり、
int index;
char file_name[ 15 ] = "ABCDEFGHIJKLM";

file_name[ 15 - 2 ] = '0' + index;

indexが0〜9までならいいのですが0〜19までの場合、
アスキーコード19はないと思うのでABC・・・という
風にアルファベットを利用したいと思います。
どのように改造すればよいでしょうか?
ちょっと意味がわからんのだが?
>>382
いまいちやりたいことが説明できてない気がする.....
おれの読解力のせいかもしれないけど。
>>382
いまいちやりたいことが説明できてない気がする.....
おれの読解力のせいかもしれないけど。
386デフォルトの名無しさん:04/05/06 00:57
indexが19の場合、アスキーコードで19というのが無いので
Aから順にアルファベットを格納したいと考えています。
char file_name[ 15 ] = "ABCDEFGHIJKLM";のABCDEFGHIJKLMは適当に13文字つけただけなので
こちらは気にしなくても大丈夫です。
387デフォルトの名無しさん:04/05/06 00:57
> 下記のような処理があり、
> int index;
> char file_name[ 15 ] = "ABCDEFGHIJKLM";

そんなところに空白あけるなよぼけ
>>382
いまいちやりたいことが説明できてない気がする.....
おれの読解力のせいかもしれないけど。
389デフォルトの名無しさん:04/05/06 01:02
> こんなやつなんですが、どこがいけないんでしょう?

空白あけてないから
390デフォルトの名無しさん:04/05/06 01:03
>>374
1/2だと0になる。素直に0.5と書くか、1.0/2とかにする。
ちなみに、pow(0.5, 100)で計算できるが。

>>382
file_name[15-2] = 'A' + index;
でいいのか?それとも、0-9は'0'〜'9'にしたいのか?
結果が0になってしまいます

#include<stdio.h>
int main(void)
{
double a;
int i;
a=(1/2);
   ↑
for(i=1;i<=100;i++){
a=a*(1/2);
     ↑
}
printf("1/2の100乗は %ld です",a);
              ↑
return 0;
}
392デフォルトの名無しさん:04/05/06 01:04
#include <stdio.h>

main()
{
int c,n1;
n1 = 0;

while((c = getchar()) != EOF){
if(c == '\n')
++n1;
}
printf("%d\n",n1);


}
上のコードは改行の数をカウントするものなんですけど
うまく動きません。
どこが悪いんでしょう。
393デフォルトの名無しさん:04/05/06 01:05
tmp[0] = "0123456789abcdefghijklmn"[index];
tmp[1] = 0;
strcat(filename, tmp);
と書くだけでOKですよ。
394デフォルトの名無しさん:04/05/06 01:05
>>393
> どこが悪いんでしょう。

空白あけてないから
395デフォルトの名無しさん:04/05/06 01:06
>>392
動くよ?どう動いて欲しいの?
file_name['A'-index] つーこと?

397デフォルトの名無しさん:04/05/06 01:08
ためしに空白あけてみましょう。

#include <stdio.h>

main()
{
 int c, n;
 n = 0;
 while ((c = getchar()) != EOF) {
  if (c == '\n')
   ++n;
 }
 printf("%d\n", n);
}
ほら、ちゃんとうごきましたね。
398デフォルトの名無しさん:04/05/06 01:09
>>390
>file_name[15-2] = 'A' + index;
>でいいのか?それとも、0-9は'0'〜'9'にしたいのか?

今回、indexは0〜19までの値が入ることになっています。
0〜9までなら382ので問題ないのですが19までとなると
改造が必要だと思いました。
上記への改造でfile_nameに格納されるのは
ABCDEFGHIJKLMA
ABCDEFGHIJKLMB
・・・
ABCDEFGHIJKLMTとすることができるのでしょうか?
399デフォルトの名無しさん:04/05/06 01:10
>>397
うごきました。
どうもありがとー
>>397 これは駄目だろ
401デフォルトの名無しさん:04/05/06 01:12
> 19までとなると改造が必要だと思いました

26までなら平気だろ? アルファベットは26個あるんだから

402デフォルトの名無しさん:04/05/06 01:14
>>401
26まで対応可能にするには'0'→'A'とするだけで済む
ということでよろしいですか?
>>382
>アスキーコード19はないと思うので

アスキーコードに「19」は存在すると思うが、
これは「アスキーコード19」とか言うコード体系の事だろうか?
もしそうなら、こんなコード体系は聞いたことがないな。




# って言うか、勝手な脳内変換を働かせると
#
# int index = 11; /* 値は適当 */
# char filename[256] = {'\0'};
# FILE *fp;
# sprintf( filename, "hoge%c.txt", "0123456789ABCDEFGHI"[index%19] );
# fp = fopen( filename, "r" );
#
# こんな感じか?
404デフォルトの名無しさん:04/05/06 01:16
>>402
'0'のままでも行けるんじゃないのか?
ASCIIみてないけど。。。
405デフォルトの名無しさん:04/05/06 01:17
>>397
エスケープ文字間違ってんじゃねえよ糞ヴォケが
「ちゃんとうごきました」だと?
おまえの脳内コンパイラなんぞ持ち出すな痛違い野郎
406デフォルトの名無しさん:04/05/06 01:17
ちなみに'0"はASCIIで48です。

それに「アスキーコード」なるものは存在しません。
ASCIIのCは何の略かを考えれば常識
よーするに16進数と同じ表記パターンでそれ以降にも使いたいということか。
408デフォルトの名無しさん:04/05/06 01:18
> '0'のままでも行けるんじゃないのか
ファイル名に使えない文字を通っちゃうのでだめです。
409デフォルトの名無しさん:04/05/06 01:23
file_name[15-2] = 'A' + index;
こうすると
int index = 19;のときfile_nameには何が格納されます?

410デフォルトの名無しさん:04/05/06 01:24
教えない。
411デフォルトの名無しさん:04/05/06 01:24
>>403
考えてもらってありがとうございます。
ちょっとそこまで頭がついていってないです。m(__)m
412禿:04/05/06 01:34
$ bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
ibase=16
30
48
ibase=A
48 + 19
67
obase = 16
67
43

えーと 0x43 は 'C'
が13番目の添字に...
>>412
bcが使えることを言いたいだけ?
何やってんだかサパーリ。
C++builderでボタンクリックで実行を
キーボードのF1キーでも実行できるようにするにはどうすればいい?
415デフォルトの名無しさん:04/05/06 02:02
>>414
スレ違い。
あとwhile文を実行中にF2キーで抜けたいけど
どうしたらいいですか?
どなたかおねがいします
>>415
すみません
間違えたました、出直してきます
418デフォルトの名無しさん:04/05/06 02:05
>>414 >>416
DebugGoをF1に、BreakをF2にマップする。
419412:04/05/06 02:22
'A' + 19 だから 'T' ですね。
強烈に外したみたいなので、寝ます。
>>418
理論はわかってるけど
どうコードにすればいいのかわからないです
差し支えなければコードを書いてくれませんか?
初心者ですみません
つーか、スレ違いだって。
422デフォルトの名無しさん:04/05/06 07:49
すれ違いではないですが、
ここまで何人もが答えのコードそのものを書いているのに
それでもわからないと言っている人には
もう知る権利はありませんよね
自己参照構造体、ググって出てきたどのサイト見てもイマイチ分からない…
どこか分かり易い良いサイトある?
>>423
何が分からないの?
特に何も難しいところはないはずだが。
425デフォルトの名無しさん:04/05/06 15:28
Cでは0.1が上手く表現出来ない為、下記のコードでは
結果が「NG」になると とあるサイトに書かれていたのですが
VC++6.0でコンパイルしてみたところ、見事に「OK」になります
なぜですか?

double d = 0.1;
if(d * 10 == 1.0){
  printf("OK");
}else{
  printf("NG");
}

ちなみに、これだと駄目みたいです。
int i, d = 0;
for(i = 0; i < 10; i++){
  d += 0.1;
}
>>425
最適化で定数式の展開をコンパイル段階でしちゃったんじゃないの
>>425
というか、上のプログラムと下のプログラムで結果が違って
くるのがそもそも問題だと思わない?
安心してプログラムが書けないでしょ?
428425:04/05/06 15:37
>>426
>>426
こんな感じで置き換えられたという事ですか?
if(1.0 == 1.0)
でも、デバッグモードでは最適化はしていません。

>>427
そちらの環境では、どっちでも「NG」ですか?

> ちなみに、これだと駄目みたいです。
> int i, d = 0;
> for(i = 0; i < 10; i++){
>   d += 0.1;
> }

> int i, d = 0;
そりゃ駄目だろうな┐(´∀`)┌
>>429
警告でてるはずだね(笑)
でねーよ
432425:04/05/06 15:46
>>429
すみません。ここに書いたコードだけ間違ってました。
double d; でも「NG」です。
>>431
出ない?
警告レベル落とせば出なくなるか・・
>>425
>Cでは0.1が上手く表現出来ない為
Cだからではなく2進浮動小数点表現では、だな。
gcc -Wallでも警告出ないな…
>>424
http://www.kumei.ne.jp/c_lang/intro/no_34.htm
ここ見てみると
b=NULL;
ってやった後にメモリ確保して、aに入力したデータ入れた後の

a->nextlist = b; 
b = a;

の部分がどういう事なのかさっぱり…
次のポインタのアドレスにNULLが入つた構造体のアドレスを入れてる???
437425:04/05/06 15:58
#include <stdio.h>

int main(void)
{
double d = 0.1;
int i;

  if(d * 10 == 1.0) printf("OK\n");
  else printf("NG\n");

  d = 0.0;
  for(i = 0; i < 10; i++) d += 0.1;

  if(d == 1.0) printf("OK\n");
  else printf("NG\n");

  return 0;
}

結果
OK
NG

WinXP + VC++6.0Pro
デバッグモード(最適化ナシ)、リリースモード(最適化アリ)ともに同じでした。
>>435
gccだと出ないね。こりゃひどい。g++だと出るのか。
VCだとC相手でも警告ちゃんと出るようだ。(VC7.1で確認)
乗算の場合、一時計算のため80bit実数に拡張され、最後に丸められるため
結果的に綺麗な値に納まるが
doubleのまま加算を繰り返す場合、64bit実数のままで毎回下の値が切り捨て
られるため誤差が累積するとかそんなかんじ?
警告云々より、MSのコンパイラだと0.1*10 == 1.0が成り立つ方がびっくり。
>>436
それぞれの命令の前でどの変数が何を指してるか、
飛ばさずにちゃんと考えた方がいいぞ。

それこそ紙に表でも書いてさ。
>>440
fld QWORD PTR _d$[ebp] ; 0.1が入っている
fmul QWORD PTR __real@8@4002a000000000000000 ; 10
fcomp QWORD PTR __real@8@3fff8000000000000000 ; 1
fnstsw ax
test ah, 64; 00000040H
je  SHORT $L776

これで真なんだからコンパイラってよりもプロセッサのほうだと思われ
443425:04/05/06 16:21
>>439
そういう事ですか。納得できました。

>>436
最後の終了判定のために、最初にNULLを代入したのでは?
bcc32だと"NG"でつ
445デフォルトの名無しさん:04/05/06 16:50
>>442
アセンブラ ばりばりですね。是非わたしのバグもちAPを解析してほしいです。
446デフォルトの名無しさん:04/05/06 17:12
条件演算子(三項演算子)は、

A ? B : C

と書きますが、Bを省略した場合、

A ? : C

Aが真の場合の動きはどう定義されているのでしょうか?
#というかそもそも文法的に正しい?

ちなみに gcc 2.95.4 では、A を評価した値が返って来ます。
文法的に間違ってると思う。

ちなみに CL (VC++6.0)だと
error C2059: 構文エラー : ':'
448446:04/05/06 17:28
gcc の拡張文法でした…お騒がせしました。
449デフォルトの名無しさん:04/05/06 17:59
>>425
浮動小数点数に==を使うのは御法度。
あほかこいつは
なんでこんなにageばっかなの?
452デフォルトの名無しさん:04/05/06 18:03
14.5:
2つの浮動小数点の値が"十分近い"ことを判定するよい方法は。

A:

浮動小数点の値の絶対的な精度は、浮動小数点の定義により、その大 きさによって変化するので、二つの浮動小数点の値を比較する最上の 方法は精度の敷居を使うことである。精
度の敷居は、比較しあう数の 大きさに比例させる。

double a, b;
...
if(a == b) /* 間違い */

ではなく、以下のコードを

#include <math.h>

if(fabs(a - b) <= epsilon * a)

適切に選んだepsilonと共に使え。
>>451
HSPスレの次はここに出張ですか?sage厨さん。
>>449
アフォですか?
455デフォルトの名無しさん:04/05/06 18:25
>>425
double x=0.1;
double d;
memcpy(&d,&x,sizeof(double));

こうするとどうなる?
456455:04/05/06 18:29
VC++6.0ではscanfを使ってもOKになるわ・・・
458455:04/05/06 18:32
>>457
gcc3.3.3だと>>425が(最適化無しで)NGになるのよ。
拡張がなされなければそうなるんじゃねぇの、そりゃ。
460デフォルトの名無しさん:04/05/06 19:05
スレ違いかもしれないですが、
オンラインアセンブラをC言語で
使う方法を教れてください。
っていうか、浮動小数点演算の場合、
コンパイラ以外にCPUによっても計算結果が変わるよ
だからあんまり議論しても意味は無い

>>460
「インラインアセンブラ」だな。環境依存OKスレに逝ってこい。
リンクするライブラリをソース内で指定しておくことはできませんか?
ふつうはmakefileで指定するが。
ファイルを読み込んでそのファイルのサイズを返すやり方が分かりません。
どなたかご教授下さい
465デフォルトの名無しさん:04/05/06 21:53
>>462
コンパイラとリンカのマニュアル読め。
register変数使うとループ処理は速くなりますか?
>>466
速くなるかもしれないし、速くならないかもしれません。
>>464
FILE *fp = fopen("file", "r");
int size;

fseek(fp, 0, SEEK_END);
size = ftell(fp);

>>466
今のコンパイラは最適化がしっかりしてるので
速くはならないと聞いたけど…
469464です:04/05/06 22:14
>>468
ご教授ありがとうございました。
感謝です。
470デフォルトの名無しさん:04/05/06 22:30
読み込んだ四桁の整数値の各桁の数字を表示するプログラムって
どうしたらいいんでしょうか?ド初心者なものでわかりません…。
printfとかだけで簡単にできるんでしょうか…?
>>470
プログラムは置いといて、取りあえず4桁の数字と睨めっこしてごらん
>>470
int i = 1234;
char s[10];

sprintf(s, "%d", i);

printf("%c\n", s[0]);
printf("%c\n", s[1]);
printf("%c\n", s[2]);
printf("%c\n", s[3]);
473デフォルトの名無しさん:04/05/06 23:00
>>470

int i = 1234;
printf ("%d %d %d %d",i/1000,i%1000/100,i%100/10,i%10);
>>463
d
そのためのmakefileなのね
475470です:04/05/06 23:11
皆さんありがとうございました!
やっとわかりました。
オンラインアセンブラってチョトカコイイと思った
なんとなく。
.NETの新技術にありそうなネーミング。
478デフォルトの名無しさん:04/05/06 23:40
ソースを送るとアセンブルして返してくれるとか。
479デフォルトの名無しさん:04/05/07 00:30
>>437
> if(d * 10 == 1.0)
>>452
> if(a == b) /* 間違い */

っていうか、おまけら、空白あけろよ ぼけ
こういうコード書くやつにろくなやつはいない
>>479
で?そんな君はまともにプログラム組めるのかね?
実力無いやつに限ってそう言う当たり障りのない部分にこだわるんだよな。
何か突っ込まれたってプログラムの本筋とは関係ないからな。
>>479
ぶっちゃけもう飽きた
飽きた?最初からつまらんかったが
禿同
>>479
バーカ
485デフォルトの名無しさん:04/05/07 00:54
> そんな君はまともにプログラム組めるのかね?

おまえ、だれにものいってるつもりだ?
486デフォルトの名無しさん:04/05/07 00:57
すみません。質問です。
int func(int, char *);
ってプロトタイプを書くのと、
extern int func(int, char *);
って書くのの意味の違いを教えてください。

どちらもよく見かけるのですが...。
487デフォルトの名無しさん:04/05/07 01:02
>>486
ない。
デフォルトがexternだから。
>>485
ワラタ
489デフォルトの名無しさん:04/05/07 01:23
> ない。

ってことは、つけてもつけなくても、文法的に同じってことですか?
490デフォルトの名無しさん:04/05/07 01:25
> デフォルトがexternだから。

変数だと、
int a;
static int a;
extern int a;
はそれぞれ3つとも意味違うじゃないですか (Unicじゃない場合)

ってことは、
static func(int); と
func(int); と
extern func(int); で
2つめのは前後のどっちの意味でもないのかなあ? とおもったのですよ!
>Unic
は間違っているし、
・スコープ - グローバルとローカル
・宣言と定義
をちょこっと調べろ
492デフォルトの名無しさん:04/05/07 02:58
Unic?何と間違ってるのか分からん…
マヂレスすると たぶん Uniq
マヂレスじゃなく、マジレスしてくれ。
>>490
関数はデフォルトでexternがつく、
グローバル変数はデフォルトで何もつかない
関数の内部の変数はデフォルトでautoだな
496デフォルトの名無しさん:04/05/07 08:46
> 関数はデフォルトでexternがつく、

じゃあ、「外部にある」ってことですよね?
extern int func(int); って書いて「外部にある」って宣言しておいて、
その同じファイルの中に定義がでてくるのって、問題ないのかなあ?
497デフォルトの名無しさん:04/05/07 08:48
>>486
>int func(int, char *);

int func(int, char *); →→ int func (int, char *);

空白開けろよぼけ。
498デフォルトの名無しさん:04/05/07 08:56
ぼけ。関数名の後ろに空白あけるな!
知ったかぶりやろうめ
499デフォルトの名無しさん:04/05/07 08:57
うーん、ここはレベル低いなあ。

ifやwhileの後ろに空白空けろっていうと、関数名の後ろにまであけるぼけがいるなんて!
500デフォルトの名無しさん:04/05/07 09:04
>>498,499,500


501デフォルトの名無しさん:04/05/07 09:12
>>497
charと*の間に空白をいれるなよぼけ。
関数の後ろにあけるって発想は素晴らしいよ
なんつうか、もうお前はVCやひまわりでもやってなさいって感じ
空白開けろとか開けるなとか全くもってくだらん。
そんなことでグチャグチャ騒いでんじゃねぇって感じ。
だから言ったろう。GWなんて関係ないんだって。
505デフォルトの名無しさん:04/05/07 10:13
GW→GandamWing
506デフォルトの名無しさん:04/05/07 10:21
>>505
× GANDAM
○ GUNDUM
507空白DQN発見↓:04/05/07 10:29
503 名前:デフォルトの名無しさん :04/05/07 09:30
空白開けろとか開けるなとか全くもってくだらん。
そんなことでグチャグチャ騒いでんじゃねぇって感じ。
質問です。

charで定義された変数を、
数字のみの列だけの時と、数字列+文字列or文字のみの列だけの時の、
2通りに判断する場合に使用する関数は何が適しているでしょうか?
 
最初はatoiを使おうと思ったのですが、
この場合、charの中身が、
(例として10が通るべき実数とします)
abc
a10
の時はエラーを返してくれるのですが
10
10a <も、正しいと判断してしまいます。
 
宜しければ御教授御願い致します。
>>508
strcspanでも使えば?
>>508
strtol() で 「変換が終了した位置」 以降に
空白以外の文字がないことを確認する、とか。
511デフォルトの名無しさん:04/05/07 11:26
>>508
atoiはエラーなんか返さない。
512508:04/05/07 11:41
>>509
strcspanと言うのが、「C言語 strcspan」辺りで、
ググったりして調べても見当たらないのですが……。
strcspnとは別物でしょうか?
 
>>510
えと、strtolを調べてみました。
更に質問を返してしまいますが、
「変換が終了した位置」を特定するには、
どの様な手順を踏まえるべきなのでしょうか?

>>511
失礼、思いっきり説明を省略してしまいました。
返って来た値が0の場合にのみエラーメッセージを出力し、
それ以外の場合にはそのままプログラムを進める、
と言う意味です。
513デフォルトの名無しさん:04/05/07 11:43
>>512
調べたら分かるはずだぞ。

char *endp;
/* 中略 */
strtol("12345abc",&endp,10); /* endpはabcを指すようになる */
あとは分かるだろ?
514デフォルトの名無しさん:04/05/07 11:44
>>512
あと509のstrcspanはstrcspnの間違いだな。
515512:04/05/07 11:53
>>513
おおう、ナルホド。
判定した文字列のアドレスで良いのですな。
有難う御座いました。
>>512
isdigit()辺りで変換前に判定する方法もある。
517デフォルトの名無しさん:04/05/07 14:08
> charと*の間に空白をいれるなよぼけ。

いや、あけるな。Stroustrapがそれをくっつけるのが好きなのだが、
char* p, q; とやったときに pとqが同じ型みたいでいやなので禁止。
518デフォルトの名無しさん:04/05/07 14:09
> GW→GandamWing

Gates Williams
519デフォルトの名無しさん:04/05/07 14:11
っていうか、判断だけで変換しないなら、
isalnumやisdigitをぐるぐるしろ
グーグル使ってみます。
>>519
(@∀@)ぐるぐる!
ぐるぐるしろ、って可愛いな。
お腹がぐるぐる急降下です。
('_`) ソウカ・・・
絶対ぐるぐるのほうがいいと思う
Googleをぐるぐるするスレでも立てるか。
/* こんな感じかな? */
int isDigitOnly(const char *s){
 while(isdigit(*s)) s++;
 return (*s=='\0');
}
528デフォルトの名無しさん:04/05/07 15:24
空白あけろよ。
改行もしろ
うっせーな、あけたきゃあけりゃいいだろ。
530デフォルトの名無しさん:04/05/07 15:29
/* こんな感じかな? */
int isDigitOnly(const char *s)
{
 while (isdigit(*s))
  s++;
 return (*s=='\0');
}
return に括弧つけんなよ、は突っ込まないのか?
532デフォルトの名無しさん:04/05/07 15:32
int isDigitOnly(const char *s){while (isdigit(*s++));return (*(s-1)=='\0');}

関数名に大文字使うなよバカ
534デフォルトの名無しさん:04/05/07 15:40
> return に括弧つけんなよ、は突っ込まないのか?

単項ならともかく、条件式なので、まあいいかなと。
535デフォルトの名無しさん:04/05/07 15:40
だか「==」の両側はあけろよなあ
536デフォルトの名無しさん:04/05/07 15:42
>>532
「-1」しなきゃいけないのがださい。
while (isdigit(*s) && *s++)でどうだ ;-)
数日前から救いようのないバカが湧いているなあ。
はっきり言って、まともな質問や議論に対しては邪魔でしかない上に、
全く面白くないのですが、何を考えているんでしょう?
いい加減飽きたでしょうから、さっさと消えて欲しいものです。
538デフォルトの名無しさん:04/05/07 15:46
/usr/local/include 以下のヘッダファイル読みに行ってくれないんですがどうしたらいいんですか?
539デフォルトの名無しさん:04/05/07 15:59
コンパイラーの機嫌をそこねたんでしょう > 読みに行ってくれない。

ひたすら機嫌をとるしかないです。
540デフォルトの名無しさん:04/05/07 16:00
> はっきり言って、まともな質問や議論に対しては邪魔でしかない上に
とか言っているが、実は、537が一番わかってない。
>>538
環境依存っぽいな。-I (MS C なら /I) は付けたか?
542デフォルトの名無しさん:04/05/07 16:04
b=10;
b=-1;
さてbの値はいくつか? とか

#include <stdio.h>してるのに
getchar (c) でエラーになる、とか、

そういう体験していないってことは、537は、Cの話題で何がおもしろくて何がつまらないか
を全然わかっていないって言う証拠ですね。
543デフォルトの名無しさん:04/05/07 16:05
そんなものはない > MS C なら

> なら /I
ふつうclでも-I
544デフォルトの名無しさん:04/05/07 16:10
>>536
whileループ内で条件判断が増えるからだめ。

545デフォルトの名無しさん:04/05/07 16:17
じゃあ、やっぱり最初のがいいなあ
>>542
ん?別に得意げに延々と話すことでもないような。
547デフォルトの名無しさん:04/05/07 16:43
>>546
6行が「延々」かよ ...

虚勢がみっともない
548541:04/05/07 16:44
>>538
makefile に -I/usr/local/include やったら通ったよ
ありがd
549デフォルトの名無しさん:04/05/07 16:44
ありがげた?
550デフォルトの名無しさん:04/05/07 16:45
>>548

>>541 宛てです・・寝ぼけてる;;;
>>549
dが読めない環境で2ちゃんは辛そうだな
552デフォルトの名無しさん:04/05/07 16:52
よめるもん。
げたでしょ?
553デフォルトの名無しさん:04/05/07 17:19
>>542
> #include <stdio.h>してるのに
> getchar (c) でエラーになる、とか、

がどういうネタなのかさっぱりわからない・・・
#include <stdio.h>しているからこそ、エラーになるんじゃないのか?
554デフォルトの名無しさん:04/05/07 17:21
> がどういうネタなのかさっぱりわからない・・・

まあ、でなおしといで。
555デフォルトの名無しさん:04/05/07 17:23
そんなことより、externはどうなった?

変数の場合は、externついててもついてなくてもどっちもextern?
1箇所も初期化してなくてもリンク時に実体はできる?
556デフォルトの名無しさん:04/05/07 17:26
>>554
頼むから説明してくれ。
stdio.hでint getchar(void);と宣言されているgetchar関数は、stdio.hをインクルードするからこそエラーになると思うんだが。
557デフォルトの名無しさん:04/05/07 17:26
> 頼むから説明してくれ。

おれがかいたわけじゃないからしらん。
558556:04/05/07 17:27
・・・するからこそ、getchar(c)がエラーに・・・
の間違い。
559デフォルトの名無しさん:04/05/07 17:27
>>556
stdio.hの中に「それ」があるかどうかは規格では規定してないぞ。
560デフォルトの名無しさん:04/05/07 17:28
>>559
そりゃint getchar ( void ) ;かもしれないし、extern int getchar(void);かもしれないが、そんなことを言っているんじゃないよ。
561デフォルトの名無しさん:04/05/07 17:29
>>556
たぶん546は
「putchar (c); がエラーになる」とか言いたかったんだと思われ。
>>561
「putchar (c); がエラーになる」ような処理系を使った経験がないと、Cの話題で何がおもしろくて何がつまらないか
を全然わかっていないって言うことかな?
563デフォルトの名無しさん:04/05/07 17:35
っていうか、2つ書いてあったもう一方は、さりげなくスルーか? ;-)
>>563
bの型が書かれていない。
乱数をn個生成し、それらをすべて1次元配列rに格納する。
その後、配列r中のn個の値を小さい順に並べ替え、並べ替え後の配列rの値をすべて表示する。
nの値は自由。表示のしかたも自由。

というプログラムが作れなくて困ってます。
誰か助けてください;
宿題スレでどうぞ
567デフォルトの名無しさん:04/05/07 17:42
>>564
おそらく型はどうでもいいはず。(わたしの想像通りのネタなら)
568デフォルトの名無しさん:04/05/07 17:42
>>565
rand,qsort,printfあたりの関数を使う。
>>567
昔あった演算子か
>【ライセンスや機能などに問題あり】
LCC-Win32は具体的にどういう問題があるんでしょうか?
571デフォルトの名無しさん:04/05/07 17:45
>>570
intが16bit
572571:04/05/07 17:46
あ、LCCってあれのことじゃないのか。
573571:04/05/07 17:49
>>570
> It's free for non-commercial use,

これじゃねーの?
Intelのフリーコンパイラも似たようなものだし。
574デフォルトの名無しさん:04/05/07 17:50
#include <stdlib.h>

void hoge(int n)
{
 int n;

 for (i = 0; i < n; i++)
  r[i] = rand();
 qsort(r, n, sizeof(int), compint);
 for (i = 0; i < n; i++)
  printf("%d ", r[i]);
}

int compint(int *a, int *b)
{
 if (*a > *b)
  return 1;
 else if (*a < *b)
  return -1;
 else
  return 0;
}
575デフォルトの名無しさん:04/05/07 17:51
int i;だろ
>>573
個人で使うには特に問題ないようですね。
ありがとうございます。
int compint(int *a, int *b)
{
 return *a - *b;
}
}
578デフォルトの名無しさん:04/05/07 18:00
む、 } がおおかった・・・
579デフォルトの名無しさん:04/05/07 18:12
「n個の任意の値を入力して、大きい順に並び替えるプログラムを作成せよ」という問題が、解けません。どなたかわかるかたいらっしゃいませんか?お願い致します。


580デフォルトの名無しさん:04/05/07 18:13
>>579
だから宿題スレでどうぞ
>>579
マルチすんなウスラハゲ!
582デフォルトの名無しさん:04/05/07 19:58
#include<stdio.h>

(int main, int argc, char **argv)
{
 (printf, "hello world %s??/n", argv[0]);
 (return, 0);
}


Cの仕様がこんなんだったら凄くカッコいいよね。
関数名もかっこの内側に書けた方が見た目が綺麗だね。
で、ifの仕様はどっちがいい?

(if, argc==2){
 (printf, argv[1]);
}

(if, argc==2, (printf, argv[1]));


583デフォルトの名無しさん:04/05/07 20:02
>>582 おまえ美的感覚ゼロだろ。

美的感覚以前にここはCスレだからコンパイルエラーで終了
>>582
コンマが無駄。
586デフォルトの名無しさん:04/05/07 20:45
>>571
それは問題か?
587デフォルトの名無しさん:04/05/07 21:00
>>582
Lisp向きな人ですね。
(define (main argc argv)
 (
  (printf 'hello world %s\n' (car argv))
  0
 )
)

あれ、なんかどこかで見た気が。
589デフォルトの名無しさん:04/05/07 21:23
>>584
激しく同意。 まったくくだらん!
590デフォルトの名無しさん:04/05/07 22:10
>>586
小さすぎていやん☆
591デフォルトの名無しさん:04/05/07 22:12
wprintf(L"あ\n");
を実行すると何も表示されないんですが、ワイド文字では日本語は扱えないということですかね?
環境はWinXP、VC++6.0です
592デフォルトの名無しさん:04/05/07 22:14
setlocale?
>>592

つってくる

         从从从
        从从从从  ゴオオオォォォォォ…
        从从从从从
       从从从从从从 ̄⊃     ) )
      ⊂ 从从从从   ̄⊃  / ̄ ̄ ̄ヽ
       ⊂_      ._⊃   | (\/) |
         ⊂__⊃.      |  > <  |
                     | (/\). |
                     ヽ___/
>>593
つってねぇ
>>593
moeteruyo
596デフォルトの名無しさん:04/05/08 01:11
> コンマが無駄。

ダム!
597デフォルトの名無しさん:04/05/08 01:54
MSXのCはintが8bitだったぞ ;-)
598デフォルトの名無しさん:04/05/08 02:46
>>597
うそつけ。
MSX-C/LSC-Cは16bit.
他にもあった?
599デフォルトの名無しさん:04/05/08 02:48
釣れた ;-)
よかったね ;-)
これが警告無しでコンパイルされてたんで嫌だった。
typedef struct{
...
char data[0];
} md;
最初バグかと思った。いや、やっぱりバグにしたい。。。
それ、出来た方がいいけどな
>>571
それはライセンスですか?
604デフォルトの名無しさん:04/05/08 03:39
【ライセンスや[機能などに]問題あり】
>>601
4.2 構造体中の 0 長配列メンバ
http://seclan.dll.jp/c99d/c99d04.htm

「エキスパートCプログラミング」に同じような話題があったはず。
というわけで、割と使われるテクニックのひとつだったと記憶してます。
昨日だと思われ
>>601
便利だけど移植性0になるからなぁ。
以前えらい目に遭ったからもう使わんようにしてる。
608デフォルトの名無しさん:04/05/08 03:45
まだchar data[1];の方がましな気がする。
Windowsに限って言えば
BITMAPINFO構造体で[0]が使いたいね。
610デフォルトの名無しさん:04/05/08 12:28
> typedef struct{

空白あけろよぼけ
611デフォルトの名無しさん:04/05/08 12:29
>>601
え? そんなので警告やエラーでたら、それこそコンパイラーのバグじゃん
こんぱいらー
613デフォルトの名無しさん:04/05/08 13:31
>>611
うーん、確かにバグだねえ・・・
614デフォルトの名無しさん:04/05/08 13:34
アセンブラーの妹です。
ageageageageageageあほかおまえら
616デフォルトの名無しさん:04/05/08 13:59
なにかもんだいでも?
617デフォルトの名無しさん:04/05/08 14:02
どうでもいい。
618デフォルトの名無しさん:04/05/08 14:03
だね。
619デフォルトの名無しさん:04/05/08 14:17
どうでもよくない。
620デフォルトの名無しさん:04/05/08 14:18
だね。
自作自演臭がきつい
622デフォルトの名無しさん:04/05/08 14:21
Cでは負 % 負 の結果は 正 になる
と明解C言語書いてあるのですが
なりませんでした。コンパイラはgccです。なぜでしょうか?

ちなみに
-7 % -3 = -1
-7 % 3 = -1
7 % -3 =1
となりました。
623デフォルトの名無しさん:04/05/08 14:24
>>622
だからそれは実装依存。
コンパイラやオプションによる。
624デフォルトの名無しさん:04/05/08 14:27
×コンパイラ
○コンパイラー
625622:04/05/08 14:29
そうなんですか。
この本には
 「二つのオペランドが同符号の値であれば、演算の結果は正の値になります。
 二つのオペランドの符号が異なる値であれば、演算の結果は処理系に依存することになって
 ますので注意しましょう。」
と書いてあるので
 「二つのオペランドが同符号の値であれば、処理系に関わらず演算の結果は正の値になる。」
と思ったのですが。
626デフォルトの名無しさん:04/05/08 14:31
> 明解C言語書いてあるのですが

そんなボケな本かうからだろ。
結果は、2つの被演算数のそれぞれ「絶対値」をつかって%の演算をし、
結果には1つめの被演算子の符号をつけると思えばよい。
627デフォルトの名無しさん:04/05/08 14:32
> だからそれは実装依存。
> コンパイラやオプションによる。

これもウソ。
規格でちゃんと決まっている。

やーい > 知ったかぶり
628デフォルトの名無しさん:04/05/08 14:33
>>625
だからちゃんとした本買えよ! その本ウソだらけだってば。
プゥ
630デフォルトの名無しさん:04/05/08 14:34
なんでわざわざハズレ本を買うバカがいるんだろう?

あれだけやめろと言ったのに。
>>625
書いてあることは正しいよ。
おまいさんの使ってるコンパイラが規格に則っていないだけ。
632622:04/05/08 14:37
>>628
お勧めの本教えてください。
>>622
a % b = a - a / b * b が成立するはずなので

-7 % -3 = -7 - -7/-3*-3 = -1
-7 % 3 = -7 - -7/3*3 = -1
7 % -3 = 7 - 7/-3*-3 = 1
634デフォルトの名無しさん:04/05/08 14:43
> 書いてあることは正しいよ。

いいえ、まちがってます > 明解
あきらかなウソ。規格書読めよぼけ。
635デフォルトの名無しさん:04/05/08 14:44
>>632
「作ってわかる...」 ...ぴー
636デフォルトの名無しさん:04/05/08 14:45
>>635
けっこういい本では? 何か問題でも?
637デフォルトの名無しさん:04/05/08 14:47
> けっこういい本では? 何か問題でも?

ここでは禁句になってるんだよ。ぼけ!
(って、技術評論社のアノ本のことじゃなかったらどうしよう(^^;;)
638デフォルトの名無しさん:04/05/08 14:48
K&Rがお薦めです。
(ただし原書)
639デフォルトの名無しさん:04/05/08 14:49
まだ売ってますか? > 「作ってわかるCプログラミング」日下部陽一

たしか話題になったのは3年ほど前だった気がする。
640デフォルトの名無しさん:04/05/08 14:54
> まだ売ってますか?

すくなくともココには出てる ;-) > http://www.pleiades.or.jp/cbook/CBookList.html

本の名前並べるだけじゃなくて、どれがお薦めか、お薦めマークつけてほしいよなああ。
641デフォルトの名無しさん:04/05/08 14:57
明解C言語って 柴田望洋 だろ?
だめにきまってるじゃん! 著者がろくにCわかってないのよ?
まともなこと書けるわけないじゃん。
(まあ、三田某ほどはひどくないが、でも、人に教えたり本を書いたりする
レベルではない > 柴田望洋)

まだ高橋のほうがウソがかなり少ない(ある程度まともに理解している)だけまし。

642デフォルトの名無しさん:04/05/08 14:58
柴田望洋みたいにもっともらしくウソかいてある本に
やすやすと騙されて読んでいるやつって、あたまわるそうに見えるよなあ。
643デフォルトの名無しさん:04/05/08 14:59
>>642
読むのはたいがい初心者。初心者はいい本と悪い本の区別付かない(つくぐらいなら初心者でない)。
また、その著者がウソいってるかどうかもわからん。

なので、しかたないのでは?
644デフォルトの名無しさん:04/05/08 15:01
>>643

わかった! その本を選んだってことは、だれかに薦められたりして選んだ確率が高い
わけだろ? > 初心者
まあ、書評とか2chとかでの「おすすめ」選んだのかもしれんが。

つまり、「柴田望洋みたいなぼけな本えらぶやつは」
1. 頭の悪い友達しかいない
2. 頭の悪いやつが読むような本や2chを読んでいる
ってことだな!

これならあってるだろ?
645デフォルトの名無しさん:04/05/08 15:02
>>644
おまえも2ch読んでる頭悪いやつだな
646デフォルトの名無しさん:04/05/08 15:04
まあ、柴田某と林某は力いっぱい避けろ!
(三田某は問題外なので、わざわざいわんが、さすがに買うやついないだろうから)

買うやつはぼけとみなす!
おまえらぜいいんぼけ
648デフォルトの名無しさん:04/05/08 15:15
わざわざsageてるあたりおまえのほうがぼけ
649デフォルトの名無しさん:04/05/08 15:30
やっぱ、勇気広しかね。
ここで柴田望洋けなしてる奴の中に何人
柴田より上の実力の持ち主がいることだかw
正直、漏れだけだろwww
651デフォルトの名無しさん:04/05/08 15:34
> ここで柴田望洋けなしてる奴の中に何人

インド人
652デフォルトの名無しさん:04/05/08 15:34
> 柴田より上の実力の持ち主がいることだか

っていうか、おまえ、だれにものいってるつもりよ
653デフォルトの名無しさん:04/05/08 15:35
柴田の本はウソだらけなんて話は、有名じゃん。
まだ買うやついたのかよ! あんな本
654デフォルトの名無しさん:04/05/08 15:37
でー 639の本は、おすすめなんですか? そうでないんですか? 結局どっちなんですか?
もういい規格書嫁
656デフォルトの名無しさん:04/05/08 15:38
>>654
自分で買って判断しろ!
すでに1冊読んでいるってことは、もう「初心者」じゃねーんだから判断できるだろ?

ついでに柴田本と比べてみればいい。どっちがまともかは一目瞭然だがな。
657デフォルトの名無しさん:04/05/08 15:39
柴田某や林某の本は、ほんとあれだけ『粗製乱造』っていう言葉がぴったり当てはまる本は
ほかにないと思う! という感じの本です。
どうせ濫造するなら、もっとマイナー分野まで手がけてほしいな。
IDがほしいな
660デフォルトの名無しさん:04/05/08 15:44
粗製濫造するってことは、「いいかげんなものをたくさんつくって」おかねをもうけるため
ってことですから、マイナー分野はコスト合わないからやらないでしょうね。

柴田の粗製濫造ぶりは、CよりC++で顕著です。あれはひどすぎ
661デフォルトの名無しさん:04/05/08 15:45
たしかに、彼はC++ぜんぜんわかってないっぽいね。Cの本は読んでないので知らんが。
662デフォルトの名無しさん:04/05/08 15:47
まあ、初心者に毛の生えたやつが本書いて売ってる感じだよなあ。 > Cのほう
売れるかどうかは、出版社の営業力の問題だからね。
なんかもうグダグダやなこのスレ
荒らしがいますからね。
企画書嫁だけではこういう事態を収拾できないことは過去を見れば明らか
こういうときは規格そのものを転載するのが良い

C99の規格 6.5.5 6
When integers are divided, the result of the / operator is the algebraic quotient with any
fractional part discarded. If the quotient a/b is representable, the expression
(a/b)*b + a%b shall equal a.
666ダミアソ:04/05/08 17:49
 
最近intって打とうとするとitnになる...
それはやったことないが、retrunならある
strcpyって使わないほうがいいんでしたっけ?
別に問題ない
thx
tnx ぢゃないのか? なんだろ thx
Thanxsの略だから、THの発音を残してTHXだね。
TNXだとトンクスになってしまう。
#あ、2ch的にはあってるのか。
C89 と C99 で挙動が違う場合はよく揉めるんで注釈入れるなりなんなりしといた方がいいんじゃないかな。
ちなみに C99 って現在出回っているコンパイラは対応不十分だから
>673 ハァ?

...まぁマックと呼ぶかマクドとするかって事だけど
tnxってのは初めて見たけど、分かりにくいな。
678デフォルトの名無しさん:04/05/08 19:10
コマンドライン上で文字列を入力する場合、入力した文字列が次回以降の読み込み時にも残ってしまうんですけど
fflushを使う以外にこれの回避方法ってありますか?
getsとかfgetsでも、配列の大きさ異常のは次回に回されちゃうし
"tnx thanx"より"thx thanx"の方が引っかかるページ数は多いな。
引っかかったのが全部が全部そうではないにしろ。
681デフォルトの名無しさん:04/05/08 19:29
dj
"thx thanx" AltaVista found 72 results
"tnx thanx" AltaVista found 10 results
683デフォルトの名無しさん:04/05/08 20:12
>>669
アフォはやめといたほうがいい
684デフォルトの名無しさん:04/05/08 20:17
>>678
>fflush

プ

PS. TREBOR THX
ネトゲだと、日本人に多いのは thx。
英語圏の人は ty (= thank you)。
686デフォルトの名無しさん:04/05/08 20:25
>>684
このヒヒジジイ
ry(略)かと思ったよ
入力バッファのフラッシュはできないかと
ポインターのポインターであるstr5は、
静的メモリーと動的メモリーを保持しており
一次元ポインターは動的メモリーと静的メモリーを
配列としてではなく、まったく個々に指し示し
片方は文字リテラル、片方はソート情報として
リストの亜種を作りたい。文字で、並列処理を
行う理由はchar型が一バイトであるからであると
いう理由だけである。ここまできて、char型一文字を
整数に直す方法がわかりません。

atoiだと思うが文章の意味がわからん
nt main(void){
char str1[5]={'A','B','C','D','\0'};
char str2[5]={'Z','I','J','\0'};
int **str3;
int **str4;
char **str5;
char *temp1;
char *t;
int *num;
int n1,n2;
int i,j;
t=malloc(sizeof(char));
str4=(int**)malloc(sizeof(int*)*10);
for(i=0;i<10;i++)
str4[i]=(int*)malloc(sizeof(int));
for(i=0;i<10;i++)
for(j=0;j<10;j++){
str4[i][j]=i*10+j;
}
for(i=0;i<10;i++){
putchar('\n');
for(j=0;j<10;j++){
printf("%3d",str4[i][j]);
}
}
str3=(int**)malloc(sizeof(int*));
for(i=0;i<10;i++)
str3[i]=(int*)malloc(sizeof(int));
for(i=0;i<10;i++)
str3[i]=(int*)i;
putchar('\n');
str5=(char **)malloc(sizeof(char *)*10);/*-4*/
*str5=(char *)malloc(sizeof(char));
for(i=0;i<10;i++)
str5[i]=(char *)malloc(sizeof(char **));/*48固定調を指し示すポインター*/
num=(int *)malloc(sizeof(int)*10);
temp6=(char *)malloc(sizeof(char *));
/*temp1=str5;は0x431950*/
/*temp2=str5[0];0x4318f0*/
temp1=malloc(sizeof(char )*10);
strcpy(&str5[0],"8");/*YZa*/
strcpy(&str5[1],"5");/*PQR*/
strcpy(&str5[2],"6");/*STU*/
strcpy(&str5[3],"2");/*GHI*/
strcpy(&str5[4],"1");/*DEF*/
strcpy(&str5[5],"4");/*NLO*/
strcpy(&str5[6],"7");/*VWX*/
strcpy(&str5[7],"3");/*JKM*/
strcpy(&str5[8],"0");/*ABC*/
strcpy(&str5[9],"9");/*bcd*/
for(i=0;i<10;i++){
temp1[i]=str5[i];
}
/*temp1[i]=&str5[0][i]に若干の差異*/
/*temp[i]=&str5[i];にすると...個々の異なったこんな文字表示される*/
str5[0]="YZa";
str5[1]="PQR";
str5[2]="STU";
str5[3]="GHI";
str5[4]="DEF";
str5[5]="NLO";
str5[6]="VWX";
str5[7]="JKM";
str5[8]="ABC";
str5[9]="abc";
for(i=0;i<10;i++){
printf("\n%c",temp1[i]);
printf("\n%s",str5[i]);
}
n1=1;
n2=1;
for(i=0;i<9;i++){
for(j=9;j>i;j--){
if(temp1[j-1]>temp1[j]){
*t=temp1[j-1];temp1[j-1]=temp1[j];temp1[j]=*t;
n1=0;
}
else if(n1==0 || n2==0)
n2=1;
if(n1==0){
if(n2==1){
n2=0;
/*イメージ的には、num=atoi(&str5[j]);とします
まとまった。整数が求まりません。*/
}
}

}
n1=1;
n2=1;
printf("%s",str5[num]);
}
for(i=0;i<10;i++)
printf("%c",temp1[i]);
return 0;

}
欝だシヌ
696デフォルトの名無しさん:04/05/08 21:15
・・・
とにかく、ソートできたらよか
簡易線形リストをつくりたいわけ
なんだこの狂ったコードは
700700:04/05/08 21:28
 

君はプログラマに向いてないと思うよ。
アパレル関係への就職・転職をお勧めするよ。
702デフォルトの名無しさん:04/05/08 21:51
だめだなこいつは・・・
ポインターもポインターの配列もなにも理解していない・・・

一から作り直した方が早い。
704デフォルトの名無しさん:04/05/08 21:55
けど、同じ人間が作りなおしても、
基本的なところを間違っているのでダメだと思うな・・・
705デフォルトの名無しさん:04/05/08 22:07
以前なにかの本で定数と比較する if 文では定数を左辺に書くといい
というのを見たことがあるのですが、真意はどうなのでしょうか?
たとえば、if (number < 10) と書くのではなく if (10 > number) という具合。

>>705
=の場合をいってるんじゃないの?
比較(==)と代入(=)を間違えた時のために

まぁ今どきのコンパイラなら警告だすけど
If natural is it that "Human Are You", use it.
>>705
その作戦に依存すると、変数同士の比較のときに結局ハマる。
コンパイラに警告ださせ、その警告がでないように直すほうが安全
709デフォルトの名無しさん:04/05/08 22:34
>>708
その作戦に依存すると、警告ださないコンパイラのときに結局ハマる。
自分がしっかりせにゃならんプロ用の言語ってとこを認識することが最優先。
>>709
出せないコンパイラなんて今どきないと思うけど(笑)
>>709
そういうコンパイラを使うときはlintも併せて使うがよろし
ニンゲン誰だってミスがあるさ…(まさか、この漏れが=と==を間違えるなんて…)
712デフォルトの名無しさん:04/05/08 22:51
>>710 >>711
お二人とも狭いね
713>>698:04/05/08 22:53
どうもちょっと、歩いて気分転換してきました。
狂ったソースですいません。
自分の思いを思いっきりぶつけて見たんですが。
警告もlintもないような劣悪な環境だと
if ( (a-b) == 0 ) とか
if ( (a+0) == b ) とかみたいに無理やり左辺を式にするとか自衛するしかないんかな。
まあ漏れはどうせ無縁だからいいけど
715>>698:04/05/08 22:56
スゲー簡略化してますけど、動けばいいの次元ですから
とりやえずこれどう思います
str5=(char **)malloc(sizeof(char *)*10);/*-4*/
*str5=(char *)malloc(sizeof(char));
for(i=0;i<10;i++)
str5[i]=(char *)malloc(sizeof(char **));/*48固定調を指し示すポインター*/
>>714
そんなときこそ、正規表現検索ですよ。
717デフォルトの名無しさん:04/05/08 22:57
>>714
だからどうして自分にヤキ入れるという正道をさておいてそういう邪道ばっかり追求するかね
>>717
いや、予防措置の話だし。安全措置なしで綱渡りするのが好きな人はいいけど
(たしかに昔のCはそういうスタイルだった)
ANSI Cからはそうじゃないしな。
>>715
「48固定調」という言葉の意味がわからん
720>>698:04/05/08 23:05
すいません。可変長でした
正確に言えば、文字リテラルをさします。
721デフォルトの名無しさん:04/05/08 23:08
>>718
ANSIのどこかに警告を出すような義務規定でもあるのか? それは何ページだ?
>>721
ANSI Cに定義されているということではなく(未確認)、
ANSI C対応以後のコンパイラの流れね。
古いやり方の人も許容する選択肢があるのがCではあるけど
自動化できる部分はしたほうが合理的だしなあ。
723>>698:04/05/08 23:23
言われると思った・・・汚いソース
英語力がないとか
考えすぎて頭痛い
>>689が解読できません
725デフォルトの名無しさん:04/05/08 23:29
>>722
強情な人だなあ ( -_-)=3
あなたが自動化すべきといくら主張しても
そうなってない環境はあるわけじゃん
コンパイラの好みはあっていいけど
どこの世界ともわからない人へのアドバイスとして
言うことじゃねえべよ
>>723
ぱっと見て、こんだけ長いんだから、関数に分割しろ。
設計からやり直しだ。
727>>698:04/05/08 23:32
str5=(char **)malloc(sizeof(char *)*10);性的メモリーを表す
*str5=(char *)malloc(sizeof(char));
for(i=0;i<10;i++)
str5[i]=(char *)malloc(sizeof(char **));病的メモリーを表す

自分の中で、何らかの誤解があるかもしれないから
その辺も踏まえてゆっくり解きほぐしていこう。
静的メモリーは*str5をさし、*str5は動的メモリーをさす
typoに萌えた
>>727
その表現は本当にあっているのか? 言葉がおかしいと伝わらないぞ。

見たところ、str5こそが、何かを指し示すものではないのか?
「メモリーがポインタをさす」なんていう表現は、異常な表現だ。
「ポインタがメモリ(番地)」を指し示すんだぞ? 分かるよな?
>>725
Cなのにそういうツールを導入する手段がない環境があるのね。なんか興味あるなあ。
組み込みのセルフコンパイルかなんか?
組み込みだってgccとか、場合によっちゃVCのコンパイラで単体テストまでやったりするよな。
ポインタ値はメモリアドレス〜、という毎度お馴染みの話題のお時間です。
733デフォルトの名無しさん:04/05/08 23:44
>>730
そんなの俺に聞かなくたってここの教えて君にでも聞いてみたら?
普段ぐぐってから来いとか言ってたのを逆襲されそうだけど
typedef struct __node{
char name[20];
char tel[20];
struct __node *pointer;
}Node;

Node *p;
int main(void){
Node *p,*head;
head=NULL;

while(p=talloc(),scanf("%s %s",p->name,p->tel)!=EOF){
p->pointer=head;
head=p;
}
p=head;
while(p!=){
printf("%s %s",p->name,p->tel);
p=p->pointer;
}
}
talloc()略
自己参照型を使わず
Node **pointerだけで、書く場合どのようにすればいいか
Node *pは2度宣言していますが、ケアレスミスです
scanfとな…?
738デフォルトの名無しさん:04/05/09 00:15
空白厨がこないね。
お前は黙ってろ
あげ房はいるけどな
741デフォルトの名無しさん:04/05/09 02:01
> あげ房はいるけどな

空白あけろよぼけ
742デフォルトの名無しさん:04/05/09 08:10
> 以前なにかの本で定数と比較する if 文では定数を左辺に書くといい
> というのを見たことがあるのですが、真意はどうなのでしょうか?

それは20年ぐらい前に1度ちょっとだけ流行って、あっというまに廃れたやつです。
最初に流行らせようとしたひとは「そうすれば間違えて=を1個だけ書いたときに
エラーになって便利でしょ?」というのが言いたかったのだが、
「じゃあ、おめー、両方変数だったらどうするんだ?」とか
「!=や<=のときいみめーだろ」といわれて、さんざんだったわけです。

ところがそれから10年ぐらいたって、どこかでそれを聞きかじった三田某が
うれしそーにじまんしたんだな。(つまり彼はその意味も、ダメな意味も理解して
いなかったわけ)。

たぶん、いまだにそんな記述を見かけるとした、その2回め(日本での)のを見たぼけが
書いたんだろうなあ。あたまわるすぎ。
743デフォルトの名無しさん:04/05/09 08:11
> いや、予防措置の話だし。

っていうか「実際、予防効果なんかない」ってことで廃れたんだよ。
744デフォルトの名無しさん:04/05/09 08:17
> たとえば、if (number < 10) と書くのではなく if (10 > number) という具合。

何の利点もない。
>>742
> 「!=や<=のときいみめーだろ」
> いまだにそんな記述を見かけるとした、

> あたまわるすぎ。

日本語も満足に書けない割に、偉そうだな。
>>745
おまえだれにものいってるつもりだ?
>>712
仮にその環境に警告を出してくれるコンパイラが無かったとする、
仮にクロスコンパイラも無かったとする。それでも、
何でコードを書く環境とコンパイルする環境が同じであると言う勝手な大前提を持ち出すのですか?
もしかしてコードを持っていく手段が無いの?それはそれですごいけどな(笑
748デフォルトの名無しさん:04/05/09 10:08
>>745
お前も偉そうだな。
すいません、他の関数を呼び出すにはどうやればいいんですか?

例えばーなんですが
if(i==0){
kansuu(void);
}
って感じでは出来ないのですが。。。
質問以外でageて書く奴は全員厨房だろ
751デフォルトの名無しさん:04/05/09 10:17
>>749
できないはずがない。
>>751ありがとうございます。これで、合ってるんですね
「エラーE2188 式の構文エラー」
と出るんです。。_| ̄|○ナンテダロ゙…
>>749
呼ぶときにはvoidって書いちゃ駄目。
kansuu();と書く。
754751:04/05/09 10:52
素でぼけた。
voidはいらないよ。
>>753
オォ、本当だ!なんで書いちゃ駄目なんだろう(´・ω・`)まあそれはおいおい知ってゆくとして…
ありがとうございます。・:゚(゚´Д`゚)゜:・。
>>746
「日本語も満足に書けない」キミに言ってるんだけど、書けないだけじゃなくて理解もできないのか ?

>>748
お前と同じぐらいにな。

>>749
とりあえず、
kansuu(void); ⇒ kansuu();
にしとけ。
> か ?

空白を入れるなよぼけ
>734
リークしてる。
>758
は?
760デフォルトの名無しさん:04/05/09 11:36
>>749
>if(i==0){
>kansuu(void);
>}

if(i == 0) {
kansuu ();
}
空白開けろよぼけ。
>755
>なんで書いちゃ駄目なんだろう

では聞くが、int func(int num);
を使う時に藻前は
func(int num);
とするのか?
762デフォルトの名無しさん:04/05/09 12:26
>>760
関数は空白あけるなよぼけ。
kansuu (); ×
kansuu();  ○
763デフォルトの名無しさん:04/05/09 12:28
>>747
あなたはどうしても、あなた好みのコンパイラを万人に使わせたいわけ?
それこそが身勝手な押し付けでしょうが
仕事の環境は個人的に気に入らないからって
責任範囲も定かでないものをインスコしたり私物を持込んだりは
なかなか勝手にやるわけにはいかないよ
何か要求するにしても同じ環境で黙って仕事できる人とできない人がいたとき
必ずしも口数が多い人が評価されるってものでもない
>>760
予約語の後は空白あけろよぼけ。
if(i == 0) ×
if (i == 0) ○
>>763
一般論を強制と受け取るのは過剰反応では?
>>763
おまいはコンパイラとIDEとエディタの違いを理解してから発言したほうがいい
767デフォルトの名無しさん:04/05/09 13:48
> if(i==0){

空白あけろよ ぼけ
768デフォルトの名無しさん:04/05/09 13:50
っていうか、if (a = 0)に警告だしてくれないコンパイラーを使うとしても、
if (0 == a) と書くことの理由にならないんだってば。
test
>768 なんで?
771デフォルトの名無しさん:04/05/09 14:32
>>768
if()に空白開けるなぼけ。
ディスクのむだだろぼけ。
>771 ってゆーかむしろスペースキーを打つ労力がむだだろぼけ、では?
制御文に空白入れろというのはたまに聞くが、予約語???
774 ◆iNSvieRh3Q :04/05/09 14:43
よく考えてみればif(a=0)と書かないためにif(0==a)と書くと主張しているやつらは
if(0==a)と書くことを忘れたりはしないのだろうか。
775774:04/05/09 14:45
名前欄に「#define if(x) if (x)」と書いたらトリップになっちまった
>>773
returnとかsizeofとか括弧を書かなくていい物は
括弧を書くときでも空けるけど、それ以外のキーワードや、
関数などに対しては空けないという事では?
そうなの?
でも、returnはいいけど、sizeofはいちいち括弧を書かなきゃいけない場合と、
書かなくてもいい場合を使い分けているんだろーか。
>>777
普通に使い分けるけど。
型なら括弧必要、値なら不要ってだけじゃん。
long型などCの最初からある型より大きい数値を扱うには
どういう方法があるのでしょうか?
そうか。
いや、使い分けている人見たことほとんど無かったんで。
781デフォルトの名無しさん:04/05/09 16:03
unsigned long long int でも足りないなら多倍長演算の仕組みを自分で書け ぼけ > 779
sizeofの括弧は、単に全部括弧つけとけば通るから覚えなくても害はないが、
「型なら括弧」という簡単なルールを知ってれば迷うことはないよな。
書いているのが型なのか値なのか自分で迷うことはまず考えられないし。
783デフォルトの名無しさん:04/05/09 16:04
常識的にif (、とかwhile (とかfor (とかは空けるんだよ。
関数やseizeofは空けない。
それぐらいおぼえとけ ぼけ
784デフォルトの名無しさん:04/05/09 16:05
>>776
returnにはいつでも「つけない」
sizeofには不要な場合でもいつも「つける」
が正解。
俺はsizeofはつかいわけるがな。
786デフォルトの名無しさん:04/05/09 16:22
sizeofの上手な使い方としては、
(1) 配列の要素数を調べるのには「使わない」
(2) 変数や構造体のサイズを調べるときには、変数名じゃなく型名をいつも使う
という方法です。おぼえておきなさい。
>>786
詳細キボンヌ。
788デフォルトの名無しさん:04/05/09 16:29
VC.NETで

struct hoge_t {
int a;
};
long a = 0;
struct hoge_t *b;

b = (struct hoge_t *)a;

ってやったら
warning C4312: '型キャスト' : 'long' からより大きいサイズの ':hoge_t *' へ変換します。
ってワーニングが出ます。
大きさは一緒じゃないんですか?
ちなみにsizeofで struct hoge_t * と long の大きさを出力してみたら同じ4でした。

ちなみに、
b = (struct hoge_t *)&a;

なら警告は出ません。なぜでしょう・・・?
789デフォルトの名無しさん:04/05/09 16:35
ぼけ > ってワーニングが出ます。

いったい「わーにんぐ」って何だよ! ぼけ! ぼけ!
でなおしてこい
790デフォルトの名無しさん:04/05/09 16:36
っていうか、そんな代入して何か意味あるのかよ?
やりたいならunionにしろ
longはポインタぢゃないし
792デフォルトの名無しさん:04/05/09 16:38
> 大きさは一緒じゃないんですか?

じゃあ、int から unisigned intに代入してみろよ
793デフォルトの名無しさん:04/05/09 16:39
「わーにんぐ」っとかいう言葉を使うやつは
(1)友達が全然いない

(2)まわりがぼけばかり
かどっちかだな。
宣言部分だけじゃわからんよ 溜まったバッファの問題かもしれんやろに
>>788
恐らく64bit環境がどうのこうのっていうオプションをONにしてないか?
sizeof(struct hoge_t *)とsizeof(long)の大きさが未来永劫同じであると言う保証が無いってことだろう。
>792 そ-ゆーことぢゃないし
797デフォルトの名無しさん:04/05/09 16:41
> b = (struct hoge_t *)&a;
> なら警告は出ません。なぜでしょう・・・?

でるわけねーだろぼけ。左辺も右辺もポインターじゃん
>795 ハァ?
799デフォルトの名無しさん:04/05/09 16:42
>>783
空白うんぬんを説くまえにあんたの「常識」
というものについてまず考えたほうがよくないか?
800デフォルトの名無しさん:04/05/09 16:42
> そ-ゆーことぢゃないし

いえ、そういうことですよ。intもunisigned intもサイズは4バイトですから。
>800 バカ?
'型キャスト'だろが。"型"だよ"か・た"
文法上の “()” と演算子の “()” を区別できない人が
多数いらっしゃるようです。
>>798
C++でいうreinterpret_castだろ
ポインタを整数型にキャストしたことが無い方が大勢いらっしゃるようで…
>ポインタを整数型にキャスト
逆だが
806デフォルトの名無しさん:04/05/09 17:26
>>801
unisigned intは型ですよ
807デフォルトの名無しさん:04/05/09 17:26
> 文法上の “()” と演算子の “()” を区別できない人が

演算子も文法上のものですよ ;-)
日本語をよく分かっていない方でしょう ;-)
>806 だからサイズの話ぢゃね-って
32ビットコンパイラであっても、ポインタが32ビットのサイズである保証はない。
だからサイズの話ぢゃね-って
812デフォルトの名無しさん:04/05/09 17:34
ちんこ見せろ
813デフォルトの名無しさん:04/05/09 17:37
>>802
俺もそう思う
演算子とステートメントの区別がついてない人大杉
式と型名の区別がついてない人大杉
もともと違うものを同一視したがる妄想癖がある人大杉
もしかしてまだGWなんだっけ?
815デフォルトの名無しさん:04/05/09 17:38
>>814
ヒキのお前には分からんか
そ、でも明日からまた仕事
この時間帯はいつもこうだろw
> unisigned int
> seizeof

おまえらぼけはもうこのスレにくるな
>818 よくみちゅけまちたねーえらいねーほめてあげまちゅ
VCの場合は/Wp64オプションを外せば、警告は出なくなるだけの話。
821デフォルトの名無しさん:04/05/09 17:47
> 演算子とステートメントの区別が

あのー、カッコはステイトメントじゃないですよ ;)
822デフォルトの名無しさん:04/05/09 17:48
>>821
知ったかぶりしたかったんだろう。わかってやれよ
チェチェンの大統領がテロで爆死するような時代に
お前らはいったい何をやってるんだよ恥を知れよまったく
824デフォルトの名無しさん:04/05/09 17:50
> お前らはいったい何をやってるんだよ

2chだろ
825デフォルトの名無しさん:04/05/09 17:50
826デフォルトの名無しさん:04/05/09 17:51
> 32ビットコンパイラであっても、ポインタが32ビットのサイズである保証はない。

そんなコンパイラーはありません。
地名表記のない世界地図を広げて、チェチェンがどこにあるか指をさせる日本人は少ない。
×コンパイラー
○コンパイラ

829デフォルトの名無しさん:04/05/09 17:53
ププププ
>>826
32ビット版のgccでのクラス関数を示すアドレスのサイズは64bitです。
無知を晒すのはやめましょう。
831デフォルトの名無しさん:04/05/09 17:59
>>821
まあ例えばキミのように作用対象を読み違えやすい人が自衛策のつもりでしていることが
実は周囲の人々にとっては善意的に見ても滑稽だし、そういう行動の根底にあるやる気のなさや
責任のなすり合いだけは率先するタイプってとこが見え隠れし失望するわけだ
馬鹿ハッケソw
833デフォルトの名無しさん:04/05/09 18:01
>>830
クラス関数とか言ってる時点で、あんたも五十歩百歩だよ
しかもここはCスレ 痴性を晒すのはやめましょう
834デフォルトの名無しさん:04/05/09 18:02
メンバ関数へのポインタがなぜ大きいのかも知らなさそうだね
スレ違いスマソ
>>826
クロスコンパイラではざらにあるよな
836デフォルトの名無しさん:04/05/09 18:07
>>835
あるよな
>>834
VCの場合は32ビットだから、必然性があるわけではない。
知ったかするために、のこのこ出てこなくてもいいぞ。
838デフォルトの名無しさん:04/05/09 18:12
>>837
バス幅とは何の関係もないよ

推薦図書

C++オブジェクトモデル
内部メカニズムの詳細
著者 : S.B.リップマン
訳 : 三橋二彩子/佐治信之/原田曄
発行 : アジソンウェスレイ・トッパン
定価 : 3、400円
ISBN : 4-8101-8101-4
バス幅の話などしていない。
gccは64ビットだが、VCの場合はメンバ関数のサイズは32ビット。
処理系依存の話を、汎用的な問題と勘違いするな。
840デフォルトの名無しさん:04/05/09 18:21
>>839
>>830はあんたの発言か?
841デフォルトの名無しさん:04/05/09 18:22
↑こいつはぼけ
842デフォルトの名無しさん:04/05/09 18:28
>>839
VCには最適化のオプションにメンバ関数へのポインタをどう扱うかって項目があるのはもちろん知ってるよな?
なんでこんな基本的な知識の問題でこんなに無知な奴が多いんだ。
なんでこんな処理系依存の話をしたがるバカな香具師が多いんだ。
>>842
>メンバ関数へのポインタをどう扱うかって項目
そんな項目など無い。
846デフォルトの名無しさん:04/05/09 18:39
↑こいつはぼけ
847デフォルトの名無しさん:04/05/09 18:41
>>844
処理系依存のコードをいかにスマートに書くかってテーマを持っていない
例えばあんたのような世間知らずが多いってことだ
848デフォルトの名無しさん:04/05/09 18:46
>>835
そうではなく「32bitコンパイラー」なるものは存在しないのだということだ。

たとえば、あるコンパイラーをもってきて「これは何bitのコンパイラー」だと言えるか? ;)
intのサイズが36bit、ポインターは24bit、charは9bitで処理するCコンパイラーは
何ビットだ? ;-)

shortもlongも32bitなのに、intだけ16bitのコンパイラーは何bitコンパイラーだ?

ほら、存在しないだろ? > 32ビットコンパイラー
849デフォルトの名無しさん:04/05/09 18:47
> VCには最適化のオプションにメンバ関数へのポインタをどう扱うかって項目があるのはもちろん知ってるよな?

どういう選択肢があるんですか?
850デフォルトの名無しさん:04/05/09 18:51
>>849
スレ違い
こちらへどうぞ
http://pc5.2ch.net/test/read.cgi/tech/1083585833/
すれ違いとスレ違いと環境依存と詭弁のアホばっか
>コンパイラー
たしかにそんな用語は存在しない。
覚えたての知識を自慢したかったんでしょう
>848
>shortもlongも32bitなのに、intだけ16bitのコンパイラー
今時ANSIも知らないようなCコンパイラは氏ね。
>shortもlongも32bitなのに、intだけ16bit

こんなの実在するのか?
存在しない
東京タワーはどんどんかっこ悪くなった
>>857
受信料ちゃんと払えよ
台本は晴れなのに雨、でもどうにかしないといけない