C言語なら俺に聞け! Part 79

このエントリーをはてなブックマークに追加
1v(^o^i)d
まず問題を冷静に吟味して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 78
http://pc5.2ch.net/test/read.cgi/tech/1083651280/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
2空白空けろよぼけ:04/05/10 06:43
【コンパイラ】
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
3デフォルトの名無しさん:04/05/10 06:43
>>1 の FAQ のリンクが移転だよ
5デフォルトの名無しさん:04/05/10 07:44
6デフォルトの名無しさん:04/05/10 08:53
スレタイトルがださくなったな。
こっちでいいよ。
8デフォルトの名無しさん:04/05/10 10:43
#include <sys/socket.h>
#include <resolv.h>

main(){
    int sd;
    sd=socket(PF_INET,SOCK_STREAM,0);
    return(0);
}

試しにこのようにして、Socket関数を呼び出して見たんですが、Linuxでは、コンパイル通るのですが、FreeBSDだと通りません。
/usr/include/resolv.h:104: error: field `nsaddr_list' has incomplete type
/usr/include/resolv.h:114: error: field `addr' has incomplete type
/usr/include/resolv.h:129: error: field `ina' has incomplete type
/usr/include/resolv.h:130: error: field `in6a' has incomplete type
エラーはこのように出ます。

FreeBSDの場合、他にヘッダファイルを指定しないといけないのでしょうか?
未定義のエラーごときでいちいち質問するな。
そんなものincludeディレクトリ内を検索して、該当するヘッダを見つければいいだけの話だろ。
なぜその程度の知恵すら無いんだ?
108:04/05/10 11:10
すまん;
11デフォルトの名無しさん:04/05/10 11:44
>>8
sys/types.hじゃないの?
128:04/05/10 11:49
>>11
どうもです
#include <sys/fcntl.h>
#include <sys/types.h>
でいけました。
奢れるものは久しからず。
盛者必衰の理をあらわす。
1413:04/05/10 12:27
誤爆った。
15デフォルトの名無しさん:04/05/10 19:17
独習Cを今やってるんですが、
この本を最後まで終わらせるとどのくらいの技術が身に付くんでしょうか?
メモ帳くらいは作れるようになりますかね?
むり。
「標準ライブラリ」とは何か。調べてみてください。
17デフォルトの名無しさん:04/05/10 19:22
>>16
やっぱりそうですか・・・
GUIは難しそうですものね。
でも、それならばどの程度まで身に付くんでしょうか?
「標準ライブラリ」が使いこなせる程度です。
ほう、標準ライブラリですか。
それが理解できれば、あとは応用していくだけって感じなんでしょうか。
>>17
難しいとかいう話ではなく
単にGUIはCという言語規格でまったくカバーしていないため
すべて処理系依存の独自ライブラリで処理することになる。

従って言語とは別に処理系に対する知識が求められるだけ。
>>15
その本全部読んだあたりでは凡人になれる。
その後ソーティング、サーチ、データ構造なんかのアルゴリズムを身に付ければ初心者だな。
そこからは果てしない道のりがまってるが、とりあえずポインタをしっかり分かれば大抵のソースは読めるようになるだろう。
GUIやりたいならJavaが簡単だよ。
でもきちんとやりたいなら、Cをある程度やったあとにC++に移行した方がいい。
あとは時代の流れをみつつ、な。
標準規格にGUIがあるのって、JavaとC#だけかな?
SmallTalk...
忘れられまくりのSmalltalkかわいそう(´・ω・`)
っていうか、今、Cの勉強って意味ないと思う。
最初からC++でいいんじゃない?
無論、JAVAでも良い。C#は微妙。
>>25
いきなりC++だとどこから手付けていいのかわからなそうじゃん。
しかもC++の入門書ってあんまないし。VCならあるけど。
Cの入門書は出来がいいと思うのがあるから、意味ないとは思わないな。
いきなりC++出来るならそっちのほうがいいとは思うけど。
C#はありえないし、Javaだけってのもなんかやだ。
>>26
一応 Accelerated C++ がいきなりC++の入門書になるんじゃないかな。
http://www.amazon.co.jp/exec/obidos/ASIN/4894714221
まあCスレにふさわしい話題じゃなくなってきたが
>>27
スレ違いスマンが、アマゾンのレビューにもあるように、if文なんかの
基本事項は学べないみたい。
というわけで、Cを勉強中の人は安心してCに励んでください。
29デフォルトの名無しさん:04/05/10 21:48
自分で関数を作ってそれを使用することってありますよね。
そういう時って、プログラムを組む前からどんな関数を作るかを
考えているんでしょうか?
それとも、作っていくうちにどんどん追加していくようなものなんでしょうか?
double型とlong double型の違いが良く分かりません

double型で15桁の数字の加算を繰り返していて
途中から1の位の値が正しく計算されなくなったんですが
long double型に変えたら正確に計算されるようになりました
何が原因なんでしょう
>>29
お好きにどうぞ。
32デフォルトの名無しさん:04/05/10 21:59
>>30
精度
>>30
精度が違うから。
浮動小数点について、ググルなり本を読むなりして勉強しな。
ファイル間で共有するグローバル変数ってありますよね。
あんまりグローバル変数使わず、使うならそのグローバル
変数を読む関数を作って、できるだけファイル内のものは隠せっ
ていわれたんですけど、どういう
感じの関数にするのが妥当でしょうか?
35デフォルトの名無しさん:04/05/10 22:04
>>34
多分set/getをつくれということだと思う・・・

sub.c
static int n;
void set(int i){ n=i; }
int get(void){ return n; }

main.c
set(4); /* sub.cのnに4をセット */
i=get(); /* sub.cのnの値を得る */
>>32-33
ありがdございます

調べてみます
>>29
外部に公開する関数はある程度考えてから作ることが多いと思う
Cの範囲外だが、オブジェクト指向のクラスになればなおさらその傾向は強まる
static(ファイル内のみ)な関数は適当にポンポン追加されていく傾向が強い
適当に作った関数はstaticになる(するべき)って言い方でもまあ正しい

ある程度考えて作ってもあとで修正することが大半ってことも言っておく
38デフォルトの名無しさん:04/05/10 22:08
>>29
「ことってある」んじゃなく、それがベース。
関数もプログラムだし、アプリもプログラム。
大きさの違いでしかない。
>>34
言語問わずSet*** Get***って名前の関数を使うのが慣習かな?
その関数の中で与えられた引数が有効範囲に存在するかどうかをチェックしてねん。
>>38
微妙に表現がおかしいような…
>>30
>long double型に変えたら正確に計算されるようになりました
君は一体何だと思って long double 使ったのかと。
>>39
有効範囲かどうかってのはどういうことですか?引数で指定した型よりもでかい
値かどうかってことですか?

それとグローバル変数が複数あるとき、一つ一つのグローバル変数に
対してget、set作ったほうがいいのでしょうか?そうするとそのset、get
はexternしないといけないわけで、なんかえらいことになってしまう気がします。
その辺の管理はどうなのでしょうか?
43デフォルトの名無しさん:04/05/10 22:37
文字を入力して、逆から出力させるプログラムはどうしたらいいのでしょうか?
教えて下さい。お願いします。例えばopqrを入力してrqpoを出力する。
>>43
宿題は宿題スレへ。
ほんとうはCなんて全然わからないんでしょ?
>>42
有効範囲のことは、今は気にするな。別にそだけが目的でセッターゲッター作るわけじゃない。
で、ひとつひとつのグローバル変数に対してもちろん作る。
externしないといけないというのは意味わからん。
まさかヘッダーに書かずに、全てのソースにexternって書いてまわってるの?
もしくは関数のプロトタイプ宣言がデフォルトでexternになるということを知らないか…
>>42
グローバル変数が多くなる時は設計を疑ってみるといいよ。
もしくは構造体を作って複数のグローバル変数をまとめて管理したほうがいい。

でも、はじめは難しく考えずに作ればいいと思うよ。
で、不満が出た時にその不満を解消する方法を考えるか探せばいい。
get/setを作らなくてもいいと思うなら、無しでいいじゃん。
馬鹿にする意味じゃなくて、それが経験になる。
>>42
>有効範囲かどうかってのはどういうことですか?

そのグローバル変数が取り得る値の範囲内にあるか?
と言うことだろう。


>それとグローバル変数が複数あるとき、一つ一つのグローバル変数に
>対してget、set作ったほうがいいのでしょうか?そうするとそのset、get
>はexternしないといけないわけで、なんかえらいことになってしまう気がします。

数が増えてえらいことになる、と言う意味だとしたら、
きちんと設計すれば、そこまで多くのグローバル変数なんてまず必要ない。
>>47
そういう理論抜きの行き当たりばったりなやり方が現場を混乱させるんだよ全く迷惑な話だな
setter/getter作っちゃうと、グローバル変数が抱える問題の9割以上がまた表面化しちゃうんだがな。
>>49
たぶんあなたは文章を理解していない。
>>47は実際にやってみてその問題点を実感してからでも遅くは無いといっている。
恐らく>>34はまだ現場にはいないだろうという予想を用いて。
>>43
素直に後ろから順に表示していけばいい。
53デフォルトの名無しさん:04/05/11 01:11
Cでsetter,getter作るくらいならC++使えばいいじゃん?
使えない環境もあるよ。
プロジェクトで決まってるとか
C言語初心者です。

数あてゲームを作っているんですが、rand関数でだした乱数とユーザーが入力した数値が+-5で おしい! と出したいんですがどうしても方法が思いつきません・・・
どなたかいいアイデアがあれば教えてください。
お願いします
( 答えより小さければ 「それは小さい」 大きければ 「それは大きい」 とまではできたのですが。。)
abs()使え
素直に2つ条件を書け( or で繋いで)
58デフォルトの名無しさん:04/05/11 02:31
> でもプリプロセッサ行きにするとそれはそれで話が面倒になる?

実は1パスでやってるんですよ。わたしがそう設計したのですが。
59デフォルトの名無しさん:04/05/11 02:52
>>58
誤爆か?
60デフォルトの名無しさん:04/05/11 03:02
> どうしても方法が思いつきません・・・

気安く「どうしても」とかいうな。

どうしてもってのは「あらゆる方法をためしたが」という意味だ。
もしほんとうにそうなら、おまえはぜったい思いつかないんだろう。あきらめな
>>57
&&だな。

±5でなら、abs(a - b) == 5
±5以下なら、abs(a - b) <= 5
6255:04/05/11 04:06
>>56>>57
ありがとうございます
abs()がまだ勉強していないのでわかりませんでした・・・
絶対値を返すんだかなんだかですよね
それをどう使うかが・・
>>60
おっしゃるとおりだと思います
すみませんでした・・・・
あらゆる方法というほどまだ知識がなく私なりのあらゆる方法でこうしてみました
else if( num == ans +3 || num == ans +2 || num == ans +1)/* 答えより+3以内なら*/

マイナスの文もつけて

みなさんありがとうございました

PS。数あてゲーム2日目を超えて3日目に入りそうです(笑
いろいろと突っ込みたくなるレスだな。
>>62
君の言う「あらゆる」と世間の「あらゆる」は違うようだね。
処で、比較演算子'>'や'<'はご存知ないかね。
65デフォルトの名無しさん:04/05/11 17:23
このソースを読めばCのあらゆる文法が組み込まれていて
ためになるっていうのあったら紹介してくだせ〜
ガイシュツだったらスマソ
そんな都合の良い物ある訳が無い
67デフォルトの名無しさん:04/05/11 17:56
>>65
gcc のソースでも読めばいいんじゃねのか?
GNU helloとか。
unixのshellのソースとかは?
>>69
シェルのソースは地獄だよ。
>>65
ISO/IEC 9899:1999 - Programming Language C
>>59
前スレ終了直前のやつ
73デフォルトの名無しさん:04/05/11 20:38
char uho;
scanf("%c",&uho);
とで、2文字以上を入力したとき2文字目以降の文字達はどこに格納されるのですか?
また、それを調べる関数はありますか?
74デフォルトの名無しさん:04/05/11 20:45
数学とプログラムの類似点、相違点
どない思います?
>>73
残りはバッファに残ってる。
7673:04/05/11 20:50
場所は調べられませんか?
>>76
なんで?
7873:04/05/11 21:05
つぎの
scanf("%c",&別の変数);
としたときに、前の入力が入り込んでしまうじゃないですか。
つまり、その残骸を初期化したいんです。
いい方法はありませんか?
>>78
もう一回scanfをしろ。scanf使いたいならな。
8073:04/05/11 21:13
そうですねぇ。しかし、それだと、3文字以上入力したときに、もっとscanf必要ではないですか。
というか、ほかの関数を使えということです?
>>78
while( getchar() != EOF );

本当はscanfを変える方がいいと思うがな。とりあえずはこれで。
>>65
C++なら予約語全て使ったと言うものなら
ただし非実用、ためにならないw
http://www.ksky.ne.jp/~seahorse/cpp/cppiroha.html
8373:04/05/11 21:27
Thxです!!
EOFではうまくいきませんでしたが、
while( getchar() != '\n');
にしたら自分が望んでいる処理ができました。
ありがとうございました!!
>>83
while((c = getchar()) != EOF){
  printf("%c\n", c);
  fflush(stdin);
}
8573:04/05/11 21:37
ありがとうございます。
しかし、入力したのを全部表示するのではなく、2文字目以降はなかったことにしたかったのです。
ですが、わざわざ考えてくださりありがとうございます!!
'\n'で止めると次にスタックを使う時に困ると思うんだが。
>>85
???
8834:04/05/11 22:44
>>46
不覚ながら知りませんでした。

>>42
ヘッダに当然書いています。

>>50
どういう問題があるのでしょうか?

>>53
C++の環境は残念ながらないのです。

グローバル変数を直接使わずにset、getを使っての操作だとどう
いう利点(逆に言えばグローバル変数を使うことの欠点)があるんでしょうか?
>>88
どんな環境使ってるの?
ある文字が漢字かどうかを判定するプログラムをつくりたいのですが、
例えば
char *a = "漢";
としてaの1バイト目をJIS漢字コードで比較しようとして
if((a[0] > 0x81 && a[0] < 0x9F) ||
(a[0] >= 0xe0 && a[0] <= 0xfc))
{
printf("漢字");
}
みたいな文をかいたのですが、うまくいきません。
どこがいけなくて、何が必要なのか教えていただけませんか?
9165:04/05/11 22:53
>66
やっぱりw
そうだったらなんか一つつくってみよっかなーっとか
いやね使い物になるものを作るスキルはないっすけどw

>67
ちょっくらのぞいてみまーす

>68
すてき

>69
>70が言うようにきびしそー
モチベーションが続かないような気がします

>71
ちょっとHitしたかんじ

>82
すてきーファンになりそー

紹介してもらったものを手始めにいろいろと覗いてみようと思います。
有益な情報どうもありがとうございました。
>>90
SJISをいまどきベタで判定するのもアレだが
charは符号つきなのでSJISのコードはマイナスになっちゃうよ。
>>88
>getter setterの利点。
内部のデータ構造を隠蔽できる。
外部からは読み込み専用(やろうと思えば書き込み専用も)にすることが出来る。
変数が書き換えられた時に何らかの操作が必要になることがある。
そんなときに便利。(書き換えた後にこの関数を呼び出せでは忘れることがある)
引数が有効範囲にあるかチェックできる。(配列のオーバーアクセスをしていないかとか)

>getter setterの欠点
処理速度が遅くなる。
グローバル変数の問題点の根本部分は結局解決しない。
9493:04/05/11 23:15
な〜んか自分のいっていることがわかりにくいので補足。

とあるグローバル変数gはプログラム中の何らかの状態を表す。
その状態を変更する関数fooは実行されるとgの値を変更する。
メインの処理を行う関数ではgの値を条件分岐に用いている。

こんな状況は本当に危険。なぜならgは書き換え可能だから。
何らかの弾みでgの値を変更するコードを加えてしまうと原因の特定が困難なバグが発生する。
たとえば「gはプログラムの状態を表す」というコメントを見た別のプログラマーがgの値を変更すれば
プログラムの状態が変化すると勘違いをして変更するコードを書くかもしれない。
こんなときこそgは隠蔽して、その状態を取得する関数barを作る。これにて一件落着。

私が挙げられる最も分かりやすい例がこれです。
while(scanf("%s", &str[i++][0]) != EOF)
;

2次元配列を用意し、そこにEOFになるまで入力させるプログラムを書こうと思ったのですが、
VisualC++6.0でコンパイルするとEOFを検知できません。
Ctrl-dを押してもwhileループから抜けられません。
ちなみにVisualStudio.NETでも同じ結果でした。
しかし、Linux上のGCCではうまくいくのです。
なにがいけないのでしょうか。
>>95
DOS/WindowsではCTRL-Cですよ。
9795:04/05/11 23:34
>>96
Ctrl-Cだと終了してしまうのです・・・
>>95
>なにがいけないのでしょうか。
scanf()を使うこと。
9995:04/05/11 23:44
>>98
そういえばscanfは挙動がよくわからない部分があると聞いたことが・・・
getsに変えてみましたが同じ結果でした。
もっと他の関数に変えてみます。
「gets」のキーワードで坊が出現する予感…
(σ・∀・)σgets!!
102デフォルトの名無しさん:04/05/11 23:55
> scanf("%c",&別の変数);
> としたときに、前の入力が入り込んでしまうじゃないですか。
> つまり、その残骸を初期化したいんです。
> いい方法はありませんか?

だーかーらー
「scanfを使わない」が正解だって
103デフォルトの名無しさん:04/05/11 23:56
> while( getchar() != '\n');

おまえあほか!
なんでカッコの前の空白いれてないのに、うちがわにはあけるんだよ!
104デフォルトの名無しさん:04/05/11 23:58
>>90
そのあたりは第4章に、まさにそのものの例がでてる。読め!
105デフォルトの名無しさん:04/05/12 00:00
プログラムと数学の類似点、相違点
くわしく教えてください
106デフォルトの名無しさん:04/05/12 00:01
> while(scanf("%s", &str[i++][0]) != EOF)
> ;
> 2次元配列を用意し、そこにEOFになるまで入力させるプログラムを書こうと思ったのですが、

だーかーらー! scanf使うなって、何回いったらわかるんだよ ぼけ!
107デフォルトの名無しさん:04/05/12 00:02
> > Ctrl-dを押してもwhileループから抜けられません。
> DOS/WindowsではCTRL-Cですよ。

ぼけ! Ctrl+Zだろうが。

(まちがってUnixでCtrl+Zしないように)
10873:04/05/12 00:06
>>86
いえ、これを判定しているときにすでにgetchar()で入力処理(?)しているようでうまく動きます。
>>102
今回はscanf使ってつくりました。他の方法も興味ありです。
>>103
完全にあほです・・・。なんで空白空けたんだろう・・・。普段空白は入れないでやっています。。。
109デフォルトの名無しさん:04/05/12 00:10
>>103
safari厨(=マカー)は死ね
入力処理の基本はfgets。
その文字を場合によってはsscanfなどで数値に変換しる。
111neko ◆MNerR0G.3U :04/05/12 00:12
#include <stdio.h>
main(){

int a,s;
long far *tc=(long far *)0x0040006c;
s=1;
printf("\x1b[2J");
do{

if(kbhit()!=0){
a=getch();
if(a=='a'){
printf("\x1b[%d;1Hneko",s);
s=s+1;
}
}
*tc=0;
while(*tc<=6){}

}while(a!='s');

}

aボタンをしばらく押すと離してもしばらくneko」と表示される。
aボタンを離したらneko」と表示させないためにはどうしたらいいだろう?
×その文字を
○その文字列を
113デフォルトの名無しさん:04/05/12 00:15
> 今回はscanf使ってつくりました。

だーからー 使うなよ!
114デフォルトの名無しさん:04/05/12 00:20
1に書いておくべきだな。「scanfの話題禁止」って。

とにかくscanfはややこしくて初心者には使いにくいくせに、
それおぼえてもなーんのとくにもならんという、どうしようもないものだ。
115デフォルトの名無しさん:04/05/12 00:22
質問です。
sizeof(int)が4
sizeof(short)が2
sizeof(char)が1のとき、

typedef union {
int a;
short b;
char c;
} foo;
のsizeof(foo)は、いくつになりますか?

(1) 4
(2) 2
(3) 1
(4) 処理系依存

けっこう、これ知らないひと多いのよね。
116デフォルトの名無しさん:04/05/12 00:22
4!
117デフォルトの名無しさん:04/05/12 00:24
ふふ
>>115
一番大きな型のサイズになるでしょ。
4?
構造体の穴ってやつだっけ?
C言語は人気があるなぁ
121デフォルトの名無しさん:04/05/12 00:27
>>95 Winows/DOSでは
EOF = ^Z (0x1A)
EOT = ^D (0x04)
122デフォルトの名無しさん:04/05/12 00:35
EOF = ^Z (0x1A)

あのー、^ZがEOFなわけじゃないです。
>>115
>>115
少なくとも最大のサイズのメンバを保持できるサイズ。処理系依存。
124デフォルトの名無しさん:04/05/12 00:39
>>123
だと思うでしょ? ふつうに考えたら。
mallocしたら必ずfreeしなければならないのでしょうか?
126デフォルトの名無しさん:04/05/12 01:08
>>125
放っておけばそのうち自動的に解放される(GC)。
127デフォルトの名無しさん:04/05/12 01:09
いいえ >> 125
>>125
ポインタを代入した変数にヌルポインタを入れる
そうすると、そのポインタの指す領域は開放される
>128
氏ねボケカス
>126
>128
それCでは無いだろ
if(x>=y) return x;
else return y; @
-------------------------
return (x > y) ? x : y;       A
-------------------------

2つの数値を入力して大きい方を返すmax関数なんですけど、
@とA結果は同じです

こっちのほうが(・∀・)イイ!! などはあるのでしょうか?

初心者なもんでしょうもない質問だったらスマソ(;・∀・)
>>131
自分で見やすいと思った方に汁
>>124
で、どうなの?
>>132
返事ありがとうございます

見やすいほうでいいのですかー
いろんな書き方があってむずかすぃですな・・・・

>>131
>@とA結果は同じです

うそつき!

ちなみに漏れなら@のelseなしにするかな
>>135
では君に質問。
xとyが同じ値の時にはどちらを返すべきかね。
137デフォルトの名無しさん:04/05/12 07:34
どっち返しても一緒じゃん。
フローが違うといいたいんだろ。
つっても三項演算子にフローも糞もないわけだが。

俺はAだな。@は冗長すぎ。
139デフォルトの名無しさん:04/05/12 08:28
っていうか、そんなのに関数つかうなよ。遅くなるだけだろ。
マクロにしろ
140デフォルトの名無しさん:04/05/12 10:06
>>131
だから@とA結果は同じじゃないんだって気がつけよ。
141デフォルトの名無しさん:04/05/12 10:10
>>140
どういう状況で異なる結果が出るのか教えて。
(X >= Y)
(X > Y)
>>143
どういう状況で異なる結果が出るのか教えて。
ワロタ
俺も131をチラッと見て、違うんじゃ?と一瞬オモタよ。
131が釣りでないのなら、もちょっと読む人のことをを考えてプログラムが書けるように頑張れ。
3ヵ月後の自分は他人と思え、ってよく言うじゃん。
131が釣りなら、2人ぐらいは釣れたみたいだよ。
あー、ここCスレか。
C++なら==は真だが〜、がありえたね。
プッ
その場ででっち上げた言い訳にしても苦しすぎ
148(1/2):04/05/12 14:31
質問です。
char文 *str 内に、「○/○」と言う文字が格納されています。
この格納されている/以降の文字を「日付」として使いたいので、
この文字を「1」〜「31」の文字と比較し、
一致したら(適当な)引数flgを1として、
処理を進める、と言うプログラムを作成したいと思っています。
とりあえず試しに、

char *str;
char *judgment;
char *bundan;

judgment = strdup(str);
bundan = strtok(judgment,"/");
bundan = strtok(NULL,"/");

int k,l;
char reference[128];
for (k = 0; k < 32; k++)
{
reference[k] = k;
}
for (l = 0; l < 32; l++)
{
printf ("reference[%d] = %d\n",l,reference[l]);
if(bundan == reference[l])
{
flg1 = 1;
break;
}
}
149(2/2):04/05/12 14:33
と言う様な感じにプログラムを作って見たのですが、
どうやら下から5行目で「bundan」と「referenxe[l]」が、
char型とint型のため、比較出来ない様です(´・ω・`)

このreference[]配列の中にchar文を、1から31までを順に入れる方法、
もしくはこの様にchar文を、続き数字で比較するのに適した関数が有りましたら、
御教授を御願い致します。
150デフォルトの名無しさん:04/05/12 14:40
       _,,. -−- ,,_ 
   ,.-‐'''"       ヽ 
   ノ             ヽ
  /        ,,,_,_    ヽ 
  {  ,vリjh!リjh!(   ヽ,   }
  }  / ,; ニ=  =ニミ;、i  {
  { j  ,.ェュ ,  { rtェ 、 i ノ
 { Y      ミ       Yリ
 !|    y.-,_-)、    |ノ   
   '!   ノ _, u 、ヽ   !     
   !    ''ニ' '    !  <体制を崩壊させるには、著作権侵害を蔓延させるしかない
    ト、  _,,,,,,    イ     
    /|   −-- −'  |ヽ,     Winny製作者47氏(金子勇)
ー'''{  |      ノ   .| /''ー
151148-149:04/05/12 15:01
スイマセン、事故解決しました。
if(bundan == *reference[l])
にすれば良かっただけだったのか……_| ̄|○
>>148-149
釣り?
153148-149:04/05/12 15:46
>>152
いや、ホント解らなかったんですが、
↑に書き込みしてる内に、色々思いついて試してたら出来てしまって……、
スレ汚し本当にスマソ_| ̄|○
>>153
いや、明らかに出来てないだろ。
>>148-149
突っ込み所満載だな
そもそもCで文字列処理をやろうとした時点で戦略的自滅
やりたいことは、atoi(bundan) ではないの?
関数ポインタが分かりません。

void (*pp[])() = { func1, func2, func3 };
int i;
for (i = 0; i < 3; i++) {
  (*pp[i])();
}
の呼び出してる所、[ ]がある時点ですでに中身参照って意味じゃないんですか?
*pp[i]って、ポインタのポインタみたい。って思うんです。
>>158
もうちょっと質問の形にしてくれる?
何を答えたらいいか、わからんよ。
ちなみに呼び出し行は、
pp[i]();
と書いてもいいよ。
>>158
それは「関数ポインタ」の配列
>>159
そう!それも分からんかったです。
void (*pp)() = func1;のときに、
呼び出すときに、(*pp)();でもpp();でも良いのは何でだろう?と。

あと、>>158のは、うーん、なんというか、
例えばa[5]とかくと、*(a + 5)と同じだと思うんですけど、
だから(**(pp + i))に見えるんですよ、*pp[i]って。
宣言の時アスタ1個しかついてないのに???ってなるんです。
*は中身参照だと教わったんですが、多分まだそれがいまいち理解できてないんだと思います・・・
162デフォルトの名無しさん:04/05/12 21:11
ポインタ配列の関数間の受け渡しはどういう風にやるんですか?
>>162
ポインタ配列へのポインタを使うのです
164デフォルトの名無しさん:04/05/12 22:11
>>162
argv(mainの第二引数)と同じ
165デフォルトの名無しさん:04/05/12 22:13
>>158
中身を参照しただけじゃ関数は呼び出せないから。
呼び出すには()が必要。
[]で配列から要素(関数ポインタ)を取り出し、()で呼び出す。
166165:04/05/12 22:14
ああなんかすっごーく的はずれな書き込みをしたかも。

関数ポインタはちょっと特殊で、何度間接参照してもOK。
テンプレにあるコンパイラのダウンロードの仕方が分かりません・・・
168デフォルトの名無しさん:04/05/12 22:18
>>167
どれが?
>>168
GCCです
171デフォルトの名無しさん:04/05/12 22:30
172167:04/05/12 22:38
うーん、Unable get set up ini from 〜 って表示されて上手くいきません

Cの勉強がしたいのでとりあえずコンパイルできる環境がほしいのですが
おまえはbccでいいよ
abcで
175デフォルトの名無しさん:04/05/12 23:23
> Cの勉強がしたいのでとりあえずコンパイルできる環境がほしいのですが

iMac買えば最初から入ってるよ。

ccもviも、

apacheもemacも
rubyもperlもsendmailもxmllintも!
176デフォルトの名無しさん:04/05/12 23:24
> スイマセン、事故解決しました。
> if(bundan == *reference[l])

空白あけろよ ぼけ
>>175
iMacってLinuxのパクりOSなんですね。
178デフォルトの名無しさん:04/05/12 23:26
if
(
bundan
==
*
reference
[
l
]
)
>iMacってLinuxのパクりOSなんですね。
>iMacってLinuxのパクりOSなんですね。
>iMacってLinuxのパクりOSなんですね。
>177 も少し調べるなりした方が良いぞ(w
181デフォルトの名無しさん:04/05/12 23:36
iMacとか言っている>>175には突っ込まないんだな。
>>176
ばーか
>iMac
に入ってるOSは違うの?
OSX以前からあるし。
185デフォルトの名無しさん:04/05/12 23:41
>>178
それは空白ではないですね。
186デフォルトの名無しさん:04/05/12 23:45
iMacはiMacだろ? 何か問題でも?

iMacでMS Office買って入れると、Virtual PCがはいるんだけど、

Aquaのウィンドウと、
Windows XPのウィンドウと
Xのウィンドウが
混在して、楽しいですよね。

ちなみに、そのままでccが使えないのはWindowsのウィンドウだけです。
iMac買えば「最初から入ってるよ」。
188デフォルトの名無しさん:04/05/12 23:46
そそ > 187

なので、買ってすぐにCの勉強できていいよね。
>>188
君には負けたよ。
190デフォルトの名無しさん:04/05/12 23:47
% man cc
GCC(1) GNU GCC(1)



NAME
gcc - GNU project C and C++ compiler

SYNOPSIS
gcc [-c|-S|-E] [-std=standard]
[-g] [-pg] [-Olevel]
[-Wwarn...] [-pedantic]
[-Idir...] [-Ldir...]
[-Dmacro[=defn]...] [-Umacro]
[-foption...] [-mmachine-option...]
[-o outfile] infile...

Only the most useful options are listed here; see below for the remain-
der. g++ accepts mostly the same options as gcc.
191デフォルトの名無しさん:04/05/12 23:48
189はごまかしモードに入った!
>>186
いまどきWinアプリをCで作るやつなんていないからな。
193デフォルトの名無しさん:04/05/12 23:50
いっぱいいるのに。

C、C++、Javaが
3:5:2ぐらいだね。

10万人ぐらいつれてきたら、3万人以上はいる。
194デフォルトの名無しさん:04/05/12 23:52
学校でやらされた奴が大半
195デフォルトの名無しさん:04/05/12 23:57
それに 192 はいいわけにはなっていないですね。
ccが入っていないWindows君は、当然C++もJavaも入ってないのです。rubyもperlも! awkさえない!
196デフォルトの名無しさん:04/05/12 23:58
がっこうでCなんかやるんかー、学校はふつうJavaよね。
Cは社会に出てからっていう人が多い。
197デフォルトの名無しさん:04/05/12 23:58
K先生にCを習いました!! (学校で)
>>195
ばーか
VBS, CMD, C#, JScript, C#, VB.NETとか入ってるだろ。
そんな古臭い糞ツールはいまどきはやらないんだよ。
>VBS, CMD, C#, JScript, C#, VB.NETとか入ってるだろ。
プ
>>185
改行も空白の一種だが。
>>198
なぜ、「C#」だけ二度も出てくる?
そんなに「C#」を強調したいのか?
202デフォルトの名無しさん:04/05/13 00:03
>>200
きっと isspace() を使ったことないんだよ
203デフォルトの名無しさん:04/05/13 00:04
>>195
Windows2000 AdvancedServerにはPerlが入っている。
204デフォルトの名無しさん:04/05/13 00:07
> きっと isspace() を使ったことないんだよ

isspace()とisblank()、歴史が古いのはどっちでしょう?
また、どっちがより範囲が広いか知ってますか?
(10秒以内に答えられたら500円あげる。
キャストの質問なのですが、
手持ちの解説書には『右辺の変数を左辺の変数にデータ型変換して代入』と
書いてあるのですが、以下の場合の右辺と左辺はどれになるのかわかりません。
てか、(BBB *)って何をしてるのでしょう・・・

stpBBB = (BBB *) cpAAA;

(※stpBBB,cpAAAは構造体で、エリアポインタセーブとして宣言されています)
いくらぐぐってもこんなキャストのやり方でてきません_| ̄|○
206デフォルトの名無しさん:04/05/13 00:08
> VBS, CMD, C#, JScript, C#, VB.NETとか入ってるだろ。

はいってませんよ > Windowsに
207デフォルトの名無しさん:04/05/13 00:08
>>205
=の左か右か
208デフォルトの名無しさん:04/05/13 00:09
> 以下の場合の右辺と左辺はどれになるのかわかりません。
> stpBBB = (BBB *)cpAAA;

右側が右辺
左側が左辺ね

って、もしかして箸を左手でもつほうですか?
209デフォルトの名無しさん:04/05/13 00:11
>>208
おそらく(BBB *)cpAAAしか注目していない。
210デフォルトの名無しさん:04/05/13 00:14
>>205
>てか、(BBB *)って何をしてるのでしょう・・・

「BBB *」型に型変換をしている
211205:04/05/13 00:15
>>207
>>208
すみません。書き方が間違っていたようです。
(BBB *) が何をしてるのかわかりません。
212デフォルトの名無しさん:04/05/13 00:15
>>210
その手持ちの解説書とやらに書いてあるじゃないか
213デフォルトの名無しさん:04/05/13 00:16
>>205
藻前、プログラムに向いてないよ
>>206
いつのWindowsの話をなさっているのでしょうか…
>>213
向いていないのはわかっています。
ですが、向いていないからやらないというわけにはいかないのです。
216デフォルトの名無しさん:04/05/13 00:22
煽りには反応してマジレスはスルーか。
>>216
スルーしたつもりはないのですが失礼しました。

>>209
>>210
「BBB *」型に型変換をしている

*の指す意味がよくわかりません。
>>217
BBB *型は、BBB型のポインタ型
>>218
BBB型のポインタ型ですか・・・
ぐぐってみたら色々出てきましたので見てみます。
ご親切にありがとうございました。
220元プログラマ:04/05/13 00:36
>>205
(BBB *)はキャスト(cast)を行っている。
 機械語でいえば、どちらもアドレスを格納しているのだから
 同じ語長(バイト数)となる。(near , farは考慮せずに言えばだが・・・)
 つまり、アセンブラなら例えば、move a , b といった感じで
 書けるわけだ。
 だが、C言語には型があり、文法でエラーとなる。
 そこが高級言語の窮屈なところでもあり、いいところでもあるわけだが。
 でも型が違っても、語長は同じだし、機械語レベルで言えばアドレスと
 いう値であるから、同じといえば同じなんだな。
 それをC言語で文法チェックで代入できないところを、同じものなら
 代入できるようにしてあげよう!なんて親切な機能がキャストだ。
 わかったかな?

 でも、ついでにいえば、キャストというのはアドレス
 でなくても、無理矢理変換できてしまうから、変なことしていると
 落ちてしまうのだ。
 だが、そういう落ちてしまうようなシステムを作るのはC言語プログラマ
 としては3流だから、無視することとして(おれの作った組み込みは
 ハードが壊れないかぎり絶対に暴走はしないと自信がある!)
 まあ、おれさまのようなちょー一流プログラマになれば
 キャストがあったらいろいろ便利につかえるのだ。
 と、DQNなおれだが、たまには自慢させてくれ。
 以上。
エリアポインタセーブってなに?
>>217
自分も同じで「エリアポインタセーブ」が何だか聞きたいんだけど。
223デフォルトの名無しさん:04/05/13 00:52
Googleで一件くらいは引っかかると思ってやってみたが・・・
struct AreaPointerSaveだったりして。
>>220
>おれさまのようなちょー一流プログラマになれば
>DQNなおれだが

己のDQNさを自覚しているのも質悪いな。
キャストの説明も間違ってるし。
バカだなおまいら。2万円のPCに1000円程度の雑誌の付録CDROMのOSを入れる。
開発環境は初めからほとんど揃ってる。あとは欲しい言語をダウソして終わりだ。
227131:04/05/13 04:07
>>140
すみません 少し考えたんですがわかりませんでした・・・
>>145
本当に釣りではないですよ(笑
おっしゃるとおり読む人のことを考えたらどっちがいいのかなぁ?と
思ってレスさしてもらいました
Aがいいようなのでこれからそうしたいと思います

あと他にこんな書き方のほうがいいぞ!ってあれば教えてください
お願いします&返事ありがとうございました(>Д<)ゝ
228デフォルトの名無しさん:04/05/13 04:27
> 〓がいいようなのでこれからそうしたいと思います

文字化けしてるぞ!
まる2
230デフォルトの名無しさん:04/05/13 10:27
>>227 だれかが、その程度のものマクロにしろっていってなかった?
#define MAX(x,y) ((x)>(y)) ?(x) :(y)
231デフォルトの名無しさん:04/05/13 10:29
MAX(x--,y++);
232デフォルトの名無しさん:04/05/13 11:34
おい!助けてくれ!

△△△△1
△△△22
△△333
△4444
55555

って表示させるにはどうすりゃいいんだ!
ifを使えってさ!あと△はヌルだってさ!

途中まで考えた!
int i,j;
for(i=1;i>6;i++){
for(j=1;j>6;++)
printf("%d" ←ここらから分かってない。
if(j>i

助けてくれ!マジで!
>>232
とりあえず最初のforループの判定に失敗するがいいのか?
>>232
C/C++の宿題をやらせて、お兄ちゃん 22代目
http://pc5.2ch.net/test/read.cgi/tech/1083050221/l50
>>233
うわ!そんなところから違うのか!ぎゃおす
>>234
誘導ありがとうございます。そちらに逝かせておもらしします。ありがとうごまします
>>232
>あと△はヌルだってさ!
表示しろってか?
>>236
スペースだってさ!もう少しっていうかかなり勉強してくるぜ!誘導先に!
238デフォルトの名無しさん:04/05/13 11:53
ネットワーク対応ソフトの作り方を教えて下さい
ソケット使え
240デフォルトの名無しさん:04/05/13 12:04
ソケットって何ですか?
ネットワーク対応ソフトを作るためのライブラリ
242デフォルトの名無しさん:04/05/13 12:07
>>241
ありがとうございましT。
>>238
標準Cのみでは不可能。
環境スレに行け。
244デフォルトの名無しさん:04/05/13 12:18
>>243
VC++あります。
スレ違いになりそうなので移動しますね
mallocで割り当てたメモリに対し、二重配列とみなして[][]でアクセスしたいのですが、
どうすればいいのでしょうか?キャストか何かで出来ないでしょうか?

char a[100][1000]; ←このメモリをmalllocで確保したい。
a[20][30] = 'a';
>>245
ムリ

#define Dim(name,x,y)((name)[(y)*100+(x)])

char *a;
a = calloc(100,1000);
Dim(a,20,30) = 'a';

こうやって誤摩化すか、構造体使え
>>245
typedef (*array_type)[1000];
array_type a;

a = (array_type)malloc( sizeof (char [100][1000]) );
a[20][30] = 'a';
248デフォルトの名無しさん:04/05/13 14:40
誰かルーティングのプログラム教えてくれ〜!!
>>248
激しくスレ違い
250デフォルトの名無しさん:04/05/13 16:39
c言語を使いたいのですが無料のソフトありませんか?
c++でもcは使えますか?
>>250
>c言語を使いたいのですが無料のソフトありませんか?
>>2

>c++でもcは使えますか?
OK
>>251
そういや>>2だけみると無料だってことが分からないな
>>251
即レス感謝です。
254デフォルトの名無しさん:04/05/13 17:17
struct{
unsigned aa : 1;
unsigned bb : 3;
unsigned cc : 1;
} test;


こんな感じのをみました。初めて見たのですがこれはどういう意味ですか??
testという名前の構造体を宣言してるんだな
うん
>>254
ビットフィールド
>>256

ありがとう!ビットフィールド unsignedとかで検索したら出てきました。

258デフォルトの名無しさん:04/05/13 17:40
コンパイルってどうやるの?
Win上で動作する簡易CDプレーヤーみたいなものを作りたいんですが、
PSDKとか、DirectX SDKも無いと駄目なんでしょうか?
こんなのを作るならこれがいる、って情報を見つけれませんでしたので質問させてください。

コンパイラはBorland C++を使ってますが、VC++の最近出たフリーのやつもインストールしました。

Cに関する知識は
ttp://www.amazon.co.jp/exec/obidos/ASIN/4797306513/ref=pd_bxgy_text_2/249-2197940-1452313#product-details
↑の本を大体理解できてる程度なので、まだまだ初心者の域を脱せませんが、
足りない知識はコード書きながらでも勉強して補います。
>>259
スレ違い
261259:04/05/13 18:08
すいません…。
ここで大丈夫な内容だと思ったんですが…。
他あたって見ます。
263デフォルトの名無しさん:04/05/13 19:24
>>246
プププ

>>247
ゲラゲラ

main()
{
char (*const p)[1000] = (char (*)[1000])malloc(100 * sizeof[1000]);
p[20][30] = 'a';
free(p);
}
264259:04/05/13 19:30
>>262
2冊目、ってのは考えてたんですが実際にアプリを作りながらでも良いかな?って思ってたんですよ。
甘いってことですね。
紹介してくださったのも含めて、本屋で立ち読みしてステップアップによさそうなのを探してみます。
>>263
おまえ、そーとー頭悪いんだな。
267デフォルトの名無しさん:04/05/13 20:34
>>266
みたいだな
mallocの引数で脳味噌腐ったらしい
吊ってくる
Cで電卓ってどうやって作るんですか?インターフェイスの話ね。
windowsの電卓プログラムみたいに、絵を出すにはどうすればいいか
さっぱりわからん。演算処理は自分でなんとかできそうなんで。
ごめん、>>1読んでなかった。逝ってくる。まじでごめん
270デフォルトの名無しさん:04/05/13 22:22
>>246
> ムリ

こいつかなり低能だな。
ろくにC知らないくせに、えらそうに答えるな ぼけ
お前もな。
272デフォルトの名無しさん:04/05/13 23:45
なんで?
さすがに私はあれぐらいわかったが。
char *b;
FILE *fp;

fp = fopen("test.txt","a+");
fgets(b,256,fp);
エラーで落ちてしまうのはなぜでしょうか?
char配列じゃないとダメ?
274デフォルトの名無しさん:04/05/14 00:14
>>273
ああん? 俺の環境じゃ落ちねえなあw
275デフォルトの名無しさん:04/05/14 00:14
ぼけ
fp = fopen("test.txt","a+");
とかぜったいにかくな!
必ずif文の中に書け
276デフォルトの名無しさん:04/05/14 00:15
エラーになるのは別の理由だけど、そっちは教えない。
fopenの返す値をちゃんとチェックするようになったら、
エラーの原因(fgets)のほうもおしえてあげる
277デフォルトの名無しさん:04/05/14 00:17
>>275
// ぼけ
fp = fopen("test.txt","a+");
// とかぜったいにかくな!
/* 必ず */ if //文の中に書け
(fp)goto hell;
>>273
「*b」はどこを指すんだ?って話だ。
279デフォルトの名無しさん:04/05/14 00:20
>>275
fp = fopen("test.txt","a+");
if ( fp == NULL ) {
;
}
とかじゃだめなの?
if( (fp = fopen("test.txt","a+")) != NULL )
fgets(b,256,fp);
て感じ?
281デフォルトの名無しさん:04/05/14 00:21
>>280
bを配列にね!
FILE *fp = fopen("test.txt", "a+");
if (fp == NULL) {
  /* ... */
}
だろ
この場合ポインタではどうやっても無理?
char *b;
b=(char *)malloc(256);

char b[256];
でメモリ確保しようよ。。
285デフォルトの名無しさん:04/05/14 00:31
if((&fopen)(&0["test.txt"],("r",&"a++"))=='^'^'^')(T_T)(T_T);
286273:04/05/14 00:33
皆さんTHX ノシ
関数へのポインタは
hoge()と&hoge()とでどちらにするのが良いでしょうか?
どちらでも動くんですが、どちらかが正しいというのがあったら聞きたいです。
宗教的な話になってしまいますか?
288デフォルトの名無しさん:04/05/14 02:17
#define が全然わからん。どうすれあびい?
>>287
Cで使う分には問題にならないと思う。でもC++でメンバ関数を呼ぶときは&を
付けないとエラーになります。とりあえず&を付けとけば安全?
あんまり自信ないです。
290デフォルトの名無しさん:04/05/14 08:49
> とかじゃだめなの

だめ。ださすぎ
291デフォルトの名無しさん:04/05/14 08:49
> if( (fp = fopen("test.txt","a+")) != NULL )

空白あけろ! ぼけ
空白あけるな! ぼけ
空白あけるな! ぼけ
ボケボケ言うな! ボケ!
>>291
空白あけろがひとつ足りない! ぼけ
おまえらここに書き込む前に
猫でもわかるC言語
100回目通して来いボケが
最強の漏れはボケ
296295:04/05/14 12:54
くそ。あんな間違いしたら恥ずかしいなーと思って書いてたら
本当に間違えた(;´Д`)くそうくそう

最強のボケは漏れ
297デフォルトの名無しさん:04/05/14 13:19
C age!
http://www.kumei.ne.jp/c_lang/intro/no_44.htm

fseek(fp,length+5L,0);
この5Lってどっから出てきたの?
299デフォルトの名無しさん:04/05/14 14:26
猫はSEEK_SETも知らないのか。
300デフォルトの名無しさん:04/05/14 14:28
知らないわけじゃないか

> これらをSEEK_SET, SEEK_CUR, SEEK_ENDという定数で 表すこともあります。
「も」ってなんだよ。普通そうするし、そうすべきだろ。Perlじゃあるまいし。
SEEK_SETってファイルの先頭…で合ってるのかな?
それがどう関係してるやら…
302デフォルトの名無しさん:04/05/14 14:29
>>301
>>298か?
別にお前に言っているわけじゃないんだが。
303298=301:04/05/14 14:30
あ、そうなんだ…(´・ω・`)ゴメンナサイ
304デフォルトの名無しさん:04/05/14 14:32
で、>>298の質問だが、
> 最初の5バイトの所に レコード番号を記録するようにする
と書かれているから、そのレコード番号の次にファイルポインタを進めたいんじゃないの?
>>304
あ、なるほど…

orz
306436:04/05/14 14:36
5LのLはレコードのLですね。
>>306
レコードならRだろ?
>>306
ば〜か。
ジョーク書くならもっと面白いものかけ。
レコードならRだろうが。
long型のLでいいんだよね?
びっくりした…
こんにちはっ!

おすすめ「C言語辞典(辞書)」なんかあったら教えてくらはい

俺はこんなの使ってるぜーみたいなのあればよろしくお願いしますー
>>310
ISO/IEC 9899:1999 - Programming Language C
312デフォルトの名無しさん:04/05/14 17:04
お邪魔します。2つ質問があります。

変数に値を代入するとき、二進数の形で代入することは出来ないんでしょうか?
あと、
flgの値が0だったら-1、1だったら1を代入するというのを、
ifやswitchなどの制御文、除算、乗算などを使わずにするのはどうすれば?
313デフォルトの名無しさん:04/05/14 17:14
>312
ひとつめは、できないとおもう。
ふたつめは、配列つかえばいいとおもう。
314312:04/05/14 17:16
>>313
>ひとつめは、できないとおもう。
そうですか・・・ありがとうございます。

>ふたつめは、配列つかえばいいとおもう。
ビット演算とかでは無理でしょうか?
色々考えたんですが、思いつかなくて・・・やっぱり配列使うしかないですかね。
315デフォルトの名無しさん:04/05/14 17:17
int ans[]={-1,1};
return ans[flg];
>>287
Cだと伝統的には
宣言 int (*printf_ptr)(const char*, ...);
代入 printf_ptr = printf;
呼出 (*printf_ptr)("hello, world\n");
でしょ。

Cの関数については「アドレスを取る」ことと「呼ぶ」ことしか出来ないから
*だの&だのをつけたり付けなかったり*を何個つけても同じだったり
するけれど、&つけたりすると、ANSI以前のコンパイラだと動かないことが
あるかも知れない。まああまり自信は無いが。
317312:04/05/14 17:21
>>315
今気が付いたんですが、ビット演算よりそちらの方が速いですね。
配列使います、ありがとうございます。
お騒がせしました。
return flg*2-1;
>>312
何でそんなことしたいのかよく判らんが
answer = (input << 1) - 1;
でどうだ?
メンテ性も可読性も、ほとんど速度も配列の方が上。
非常に単純な式でなければわざわざビット演算を使う必要はないと思うな。
lea eax,[eax*2-1]なんつって
>>312
>変数に値を代入するとき、二進数の形で代入することは出来ないんでしょうか?

char *p;
long val;
val = strtol( "0101", &p, 2 );

>flgの値が0だったら-1、1だったら1を代入するというのを、
>ifやswitchなどの制御文、除算、乗算などを使わずにするのはどうすれば?

三項演算子と言う手もある
→val = (flg==0) ? -1 : 1;
324312:04/05/14 17:53
>>319
おお!なるほど!思いつきませんでした。
今回は速度の面から配列を使うことにしましたが、
そういう演算の仕方は覚えておきます!ありがとうございます!

>>320
最初はメモリ節約のために、なるべく変数を減らそうとしていたんですが、
可読性は大事ですね。
assert(flg == 0 || flg == 1);
n = (flg==0)?-1:1;
で十分
326デフォルトの名無しさん:04/05/14 17:55
>>323
long val;
val = strtol( "0101", NULL, 2 );
で十分
配列はメモリアクセスが発生するからキャッシュが汚れる
328312:04/05/14 18:08
>>323.>>326
あー、なるほど。
strtolというのは使ったことがなかったので知りませんでした。
ここは本当に勉強になりますね。
他の皆さんもありがとうございます。・゚・(ノД`)・゚・。
コンパイラによっては三項演算子とか普通にif 使えば
>319のような計算に最適化してくれるけどな。
マシンコード的には他にもやりようが有るし。

それから本当に配列の方が速いかどうかは環境に拠るぞ?
この程度の問題で速度を気にしなきゃいかん方がどうかしてる。
Windows環境でマウスをちょろっと動かしただけで一体どれぐらいの
コードが動いてるかまじめに考えるとぞっとするぞ。
漏れとしては>>318に感動したんだがどうよ
初心者が即興で作ってみますた。

#include<stdio.h>

void roop(int i);

main()
{
int i=0;
roop(i);
}

void roop(int i)
{
while(1){
printf("%d\n",i);
i++;
roop(i);
}
>>332
何がやりたいんだ?
スタックオーバーフローするまで無限にネストするだけやんか
334312:04/05/14 18:31
えと、実はゲーム製作なんで、とにかく速度が速くないといけないんですよね。
ゲーム製作技術で訊くべきなのかもしれないのですが、
あちらは人が少ないですし、C言語ベースなので、こちらで訊かせていただきました。
メモリ節約、可読性、速度、全てを考慮しながらのプログラミングは難しいですね。
スレ違い話すみません。
>>334
高速化省メモリ化の定石はともかく可読性の高くちゃんと動くものを作ってから
遅い部分、メモリを食ってる部分を調査・改善していくこと。
今回の配列みたいに局所的な字面にこだわっても効果は上がらないよ。
高速化されるかどうかは実際に遅い部分を書き換えて実験して初めてわかることだ。
336312:04/05/14 18:55
>>335
仰るとおりです。
初めから完成型に持っていこうとしすぎていました。
少しずつ少しずつ良い形にしていけばいいのですよね。
それでは本当にスレ違いなのでこの辺で。ありがとうございました。
337310:04/05/14 19:13
>>311
アリガト!(´▽`)

本屋で立ち読みしてみるYO-
>>332
どーでもいいがループのスペルはloopだぞ。
だからと言ってroopという関数を作ってはならない、ということには
ならないが。
mein()もわすれづに。
340デフォルトの名無しさん:04/05/14 20:40
>>320
「ほとんど」って時点でただの戯れ言に成り下がったな
ポインタが苦手な言語障害者による
定量的な評価ができないがゆえの勝手な決めつけにすぎない
ずいぶん噛み付いてくるけど、意味が不明瞭。
>>340
保守性と可読性は確実に配列のほうが上だろ。
速度は配列のほうが最適化の余地が多いし、
多くのCPUには配列にアクセスするためのアドレッシングモードが存在する。

まあ、「だいたい」早くなる罠。
大抵早くなる
多々早くなる
しばしば早くなる
>>342
可読性、保守性、拡張性(笑)とかは配列のほうが上ってのは前提で、
速度に関してだけ。

単純な計算式である flg*2-1なら、その配列用のアドレッシング機構で
1命令で算出できてしまう(例: >>322)という最適化もあるよね。
この場合配列アクセスするよりまちがいなく速いかと。
もちろん処理系次第だが。
聞けばキクホド配列の方が一般的に早いとおもうが。
片っ端から比較しないことには
一般的に速いといえるかどうかは分からん。
347デフォルトの名無しさん:04/05/14 22:41
俺さん、c言語ってなんですか?
言語、ってまわりくどいから、C語。
349デフォルトの名無しさん:04/05/14 23:00
>>342
だから、その「確実に」を証明しろよ
条件を特定しないあんた流に則って

ptrdiff_t Malloc(size_t);
char *p = 0;
ptrdiff_t i = Malloc(10 * sizeof(char)) / sizeof(char);
Strcpy(p, 0, "konnnamon", 0);
i = Realloc(p, i, 15 * sizeof(char)) / sizeof(char);
Strcat(p, strlen(p), "tukatterareruka", 0);
Puts(p, 0 * sizeof(char));
Free(p, 0 * sizeof(char));
証明なんてだれもしないよ、そんなことで。
351デフォルトの名無しさん:04/05/14 23:06
>>350
言い切る根拠がないことを認めたわけだな
よっしゃよっしゃ
ゲームで速度的にネックになるのはどう考えても画面描画辺りだろ。
フリーのBorland C++ Compiler 5.5.1使ってるんですけど
color.cってファイル名はコンパイルできないんでしょうか?
できれば確認してもらえませんか、お願いします。
>353
もう寝ろよ。
355デフォルトの名無しさん:04/05/15 01:01
>>353
まってくれ・・・本当なんだ、お願い確かめてみて...orz
それとも下のプログラム間違ってます?
---ここから
#include <stdio.h>

int main(void)
{
printf ("hello!");

return 0;
}
---ここまで
エラーの内容書け
C:\>bcc32 color.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
color.c:
Turbo Incremental Link 5.00 Copyright (c) 1993, 2000 Borland

C:\>
---
コレだけです。
便りがないのはよい便り。
>>357
それ以上何を期待してるんだ?
>>359
いやきっと>>357
「コンパイルは正常に終了したよ。実行してね!」とでも出力して
欲しいのでは。
361357:04/05/15 01:26
それが、実行しても何も表示されないんです。
C:\>color

C:\>
362357:04/05/15 01:30
ああ・・・色々調べてたら自己解決しました。
コマンドプロンプトのコマンドにcolorってのがあるからでした・・・。
C:\>color.exe
hello!
とやればちゃんとできました。
変な事書いて不快にさせてしまったようで申し訳ないです。
ふーん、colorなんてコマンドあったんだ。
途中まで笑って読んでたけど、最後のオチで笑えなくなった。
だって俺がそれにハマらないとは限らないから。
コマンドプロンプトで動かす簡単なユーティリティやテストプログラムをよく作るから。
Windowsだとcon.cとかaux.cとかいう名前のファイルをつけようとすると
ハマるよね。
Wiwndowsはよく知らんのだがサーチパスという概念はないのか?
>>365
cmd.exeとかのシェル内蔵のコマンドが最優先というだけ。
367デフォルトの名無しさん:04/05/15 01:50
typedef int array[1];
array const* f( array* p ){ return p; }

このソースをコンパイルすると、

: In function `f':
:2: warning: return from incompatible pointer type

という警告がでます。
T* から T const* への変換なのですが、なぜ incompatible と言われるのでしょうか?
コンパイラは gcc (GCC) 3.3.1 (cygming special) です。
ちなみに、同じソースをC++としてコンパイルすると警告は出ません。
368デフォルトの名無しさん:04/05/15 02:14
>>367
戻り値の型が違うから
そのままじゃん
369367:04/05/15 02:20
>>368
int const* g( int* p ){ return p; }
これだと警告は出ないのです。
>>367
パッと見の印象だけど、それは確かに解せないね。
const char *に char *を渡してもwarningはでない、んでしょ?
んなのでwarning出るようじゃlibcの多くの関数でwarning出まくっちゃうからね。

それと同じ変換だと思うんだけどね。
>>367,370
CFAQの11.10見てみ。
367は問題あるけど369は問題ない理由が分かるよ。
372367:04/05/15 02:48
>>371
???
array const* は int const(*)[1] であり、 int const** ではないので、
その話とは違うのではないですか。

ためしに、
array const* h( array* p ){ return (int const**)p; }
こうしてみましたが、同じ警告がでました。
373デフォルトの名無しさん:04/05/15 02:55
どうでもいいが配列をtypedefするのはやめてほしい
>>367
Tへのポインタを、const Tへのポインタに代入することはできる。
ただし、このTはint型やdouble型はいいけれど、intへのポインタ型や
intの配列型とするといけない。

367の関数は、constなintの配列へのポインタに
intの配列へのポインタを代入できない。
369の関数は、constなintへのポインタに、intへのポインタを代入できる。
375367:04/05/15 03:32
>>374
> ただし、このTはint型やdouble型はいいけれど、intへのポインタ型やintの配列型とするといけない。

「配列型とするといけない」という根拠はないのでしょうか?
int** から int const** への変換ができないという話なら、納得できます。

それと、ポインタと配列で結果は違います。
typedef int* pointer;
pointer const* i( pointer* p ){ return p; }
これだと警告は出ません。
376デフォルトの名無しさん:04/05/15 03:53
75 名前:名無しさん@4周年 投稿日:04/05/15 02:51 ID:NKgmX+1w
ひどい官製談合の日米半導体協定という国際協定を名目にした
半導体の製造と販売に関する悪事(主としてメモリのビット単価の維持と、日本がアメリカ製
CPUを買わざるを得ない数値目標の押しつけ)を取り決めた際の
担当者が、あの十和田雅子だった。
これがために、消費者は馬鹿高いメモリを買わされ続け、メモリ容量
の増大のトレンドカーブが人為的に凍結され、いつまでも16ビットアドレス
の枠をPCが超えられず、OS/2は製品として失敗し、日本の半導体メーカーは
談合で価格が保証されているので、経営のリスク感覚が完全に麻痺し、
技術開発への投資、特に技術系人間への投資が手薄になった。そうして
油断しているうちに、協定の範囲外だった韓国と台湾の台頭を許し、
マイクロプロセッサに関して言えば、TRON以外にも国産のCPUは
日本製メモリ製造の生贄として抑圧され、さまざまに阻害された。
インテル製CPUの輸入が減ると、アメリカ政府の強制した数値目標
が達成出来なくなるので、通産は米国政府といっしょになって、
メーカーのCPU開発を妨害し続けた。うまい思いをしたのは、
専ら通産省の役人である。半導体メーカーに大量に天下りをした。
そうして規制に過保護されて甘やかされた日本のメモリを中心とする
半導体メーカーは、内部から腐っていき、気がついてみたら、歩留まり
向上のノウハウはみな日本からインテルなどの米国メーカーに流失
してたし、経営陣はみんなで横並びで行動する習性が協定が廃止された
後も止まらず、いたずらにピッグサイクルを繰り返すばかりだった。


「十和田雅子」は「小和田雅子」の間違いと思われ。
377デフォルトの名無しさん:04/05/15 04:32
とりあえず、Cドライブに直接ソースを置くのやめれ
適当なフォルダ作れ
>>367
自分で考えるのが好きなようだから、ヒントだけ。

「配列型への型修飾子は、配列型ではなく要素型への型修飾子として扱われる」

2、3日ゆっくり考えてみてください。
少し前にあったのですが、答えらしき物がなかったので質問させてください。
int array[tate][yoko] を確保するのに、

int **array; として、
tate と yoko を入力してもらって、

array = (int **) malloc(sizeof(int *) * tate);
for(i = 0; i < tate; i++)
array[i] = (int *) malloc(sizeof(int) * yoko);

と言うのは、正しいのでしょうか?
よく使ってしまうんですが。
>>349
←機械寄り    人間寄り→
実アドレス ポインタ 配列

これでも「証明しろ」なんて言うのなら主観評価実験が必要なんだが、
そんなことわざわざやりたくないし、やる必要も無いし、やる金も無い。
>>379
正しいよ。
382デフォルトの名無しさん:04/05/15 11:34
>>379
やろうとしていることによる。
つまりポインタ配列が本当に必要で介在させているのか、
二次元配列が使えない未熟が理由の無能な醜態か、
口先では何とでも言えるが本音がどっちかによる。

因みに俺は[][]と**を混同したがる者を後者ではないかと強く疑う。

>>380
別にさー
機械寄りが嫌いな人にPGやれだなんて誰も頼まないだろ
心配するな、人それぞれ向き不向きがあるのさ
人間寄りが好きなら管理職でも目指したらどうだ?

あ、そうそう主観評価実験って官能検査のことか?w
>>382
ポインタ配列が本当に必要な場合とは、、、
文字列の配列を作るときとか?
配列を動的に作りたいときには、どうしても配列とポインタを読み替えていかないとならないだろ。

int tate = 10;
int yoko = 20;
int a[][] = malloc(sizeof(int) * tate * yoko);

これ、出来ないし。
385デフォルトの名無しさん:04/05/15 11:42
>>383, >>384
yokoが定数にできない代表的な例だな
>>379
そのtate, yokoは変数であるという条件ってこと?
少なくともyokoが定数でいいんなら >>247 式にできるが。
(tateが変数だとmallocの中の計算が変わるが)

C99だと変数でも
int a[tate][yoko];ができるのかな?
387デフォルトの名無しさん:04/05/15 12:09
> roop(i);

で、roopって何語だよ! ぼけ
388デフォルトの名無しさん:04/05/15 12:10
> mein()もわすれづに。

何語だよ!
389デフォルトの名無しさん:04/05/15 12:11
> 保守性と可読性は確実に配列のほうが上だろ。

いいえ。ポインターのほうが読みやすいし保守しやすい
>>382
おまえの所属するプロジェクトに携わっているやつらはかわいそうだ。
時々いるよな。「こっちのほうが速い」とか言ってコードを保守不能にする奴が。
結局速くなったのは1nsとかで、セキュリティーホール満載に書いておいて、
「俺って出来るんだぜ、かっこいいだろ」って思ってるんだろ。
時代は抽象度をどんどん上げていく方向に進んでいると言うのに、悲しきCOBOLERだこと。

>>382
途中にconstとかvolatileとかがついている場合は必要だよね
あとは行間の入れ替えが多く発生する場合とか
391デフォルトの名無しさん:04/05/15 12:13
> 変数でもint a[tate][yoko];ができるのかな?

できるにきまってるだろ! おまえCのセンスなさすぎ
センスじゃねーだろ
393デフォルトの名無しさん:04/05/15 12:16
>>391
変数と言っているじゃないか。
C99ならできるけど。
394Error@MSN:04/05/15 12:22
C#ってCとどう違うんですか?
それとも別のものでしょうか?
>>394
別のものと思った方がいい。
396デフォルトの名無しさん:04/05/15 12:24
>>394
CのサブセットがC#
Cと違って構造体が使えない。
>>394
別の物
ネタが多いね、同じです。
399デフォルトの名無しさん:04/05/15 12:32
> CのサブセットがC#
> Cと違って構造体が使えない。

うそですね。
C#はむしろJavaの亜流
400デフォルトの名無しさん:04/05/15 12:33
> >>391
> 変数と言っているじゃないか。

だから変数でもできるだろ? おまえセンスねーな
C#はむしろDelphiをJava風に作り直した言語
402デフォルトの名無しさん:04/05/15 12:38
Delphiというよりは
VB.NETにむしろ似てるな
403Error@MSN:04/05/15 12:40
ところで、CをCGIとして使う場合、Perlのようにしなければならないんでしょうか?

たとえば
ローカルでは
print "hello";

サーバーでは
print header;
print "hello";

のように。
>>403
CGIの仕様の話で、言語は関係ない。
405Error@MSN:04/05/15 12:41
CのをCGIとして使いたいんですが、Helloという文字列を表示するのには
ただ
printf("hello\n");
のようにすればいいのでしょうか?
406Error@MSN:04/05/15 12:42
あ、かぶりました。すみません。
407デフォルトの名無しさん:04/05/15 12:49
>>400
だからC99ならできると言っているだろうが。
たまたまお前の使っているコンパイラがC99に対応しているか、GCCみたいに独自拡張されているだけなんだろ。
言語の文法は関係ない。
標準出力へ、プロトコルにかなった文字列を吐き出せばいいだけ。
409デフォルトの名無しさん:04/05/15 12:57
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Content-Type: text/plain\n\n");
printf("QUERY_STRING = %s\n",getenv("QUERY_STRING"));
return 0;
}
410デフォルトの名無しさん:04/05/15 14:09
>>390
保守できない誰かさん1人のために使用できる技術を限定されるチーム全員-1がかわいそうだ
ポインタ使ったからセキュリティホールだって? 興味深い新説だな(プゲラ
何度も言ってるだろ、抽象度が高いパートを担当したい人の職業選択の自由は尊重すると
誰かさんみたいに特定の職業を馬鹿にするような態度はとらないよ

途中にconstかあ
セルは書き換えオケーで行単位の書き換えだけ禁止ってことか
さっき抽象度とか言っていたようだが頭元気か?


411デフォルトの名無しさん:04/05/15 14:14
> どうでもいいが配列をtypedefするのはやめてほしい

ポインターもtypedefするのはやめてほしい
412デフォルトの名無しさん:04/05/15 14:15
> だからC99ならできると言っているだろうが。

いーや。Cならできる
413デフォルトの名無しさん:04/05/15 14:16
> printf("QUERY_STRING = %s\n",getenv("QUERY_STRING"));

空白あけろよ ぼけ。
414デフォルトの名無しさん:04/05/15 14:16
>>411
ポインタのtypedefは見つけると本当にがっかりするが
配列のtypedefはサイズを#defineするより合理的な場合があるぜ?
たとえばjmp_bufとかそーなってんべ
日本人ってのはどうして主張の当否と、それをいってる奴の人格を区別できないのだろう。

相手の人格にケチをつけることと、そいつの主張の間違いを指摘するのは全然別のこと。

人格を否定することを反論することだと勘違いしていたり、
いちいち相手の人格にケチをつけないと、そいつの主張の瑕疵を
指摘できないってのは情けないと思わんのか?いい年した大人がさあ。
>415 坊やだからさ
417デフォルトの名無しさん:04/05/15 14:27
>>415
打たれ弱いんだね
>>412
確認だが、
int tate = 10;
int yoko = 20;
のようにtate, yokoが変数の状態で
int a[tate][yoko];
とできるって話なんだけどな。
規格上、C99で初めてできるようになったんだが。
419デフォルトの名無しさん:04/05/15 14:29
いや、415がむしろ区別できてないんだろうよ。

ただぼけはぼけだと言っているだけなのだから。
420デフォルトの名無しさん:04/05/15 14:46
int a,b;
などの変数定義をプログラムの最初に書くのが一般的ですが、
プログラムの中ほどで定義するのは問題でしょうか?
よろしくお願いします。
421デフォルトの名無しさん:04/05/15 14:49
別に問題はありません。

古いコンパイラーではエラーになるかもしれない。程度です。
422デフォルトの名無しさん:04/05/15 14:50
あ、私のは関数定義の中で、の話ね。
ブロックの最初にまとめて書くひとが多いけど、そうしなくてもいいってこと。

関数定義の外だったら、まあ、古いコンパイラーでも、もともとどこに書いてもいいのだ
(使う前なら)
C99 だって
424デフォルトの名無しさん:04/05/15 14:52
は? こいつまぬけ > 423
425デフォルトの名無しさん:04/05/15 14:54
func()
{
int a, b;
a = b = 10;
printf("%d %d ", a, b);
int c, d;
c = d = 10;
printf("%d %d ", c, d);
}
なーんにも問題なし、常識です。
>>424
だからC99ならできると言っているだろうが。
たまたまお前の使っているコンパイラがC99に対応しているか、GCCみたいに独自拡張されているだけなんだろ。
427デフォルトの名無しさん:04/05/15 14:54
>>426
は?
> だからC99ならできると言っているだろうが
こいつばか
428デフォルトの名無しさん:04/05/15 14:55
おまえCのセンスないな。でなおしてこい! ぼけ > 425
なんか攪乱しておもしろがっている香具師がいるな
430デフォルトの名無しさん:04/05/15 14:56
429がそうかな?
431デフォルトの名無しさん:04/05/15 14:57
は? 構造体の代入?
そんなのはCでできないよ。

C89ならできるが? たまたまおまえの処理系がそれに対応してるだけだろ?

Cの話題をしてるんだよ!
432デフォルトの名無しさん:04/05/15 14:58
は?
インクリメントの前置き?
そんなものはCでできるわけねーだろ?

そりゃC79ではできるかもしれんが、そんな特殊な話をしてんじゃねーよ!
たまたまおまえの処理系が拡張されてるだけだろ?
>標準C が何を指しているかだが
434デフォルトの名無しさん:04/05/15 14:59
は? 代入演算子 -= ? そんなものはねーよ

C69ならできるかもしれないが、おれはふつうの体位でしかやらん!
435デフォルトの名無しさん:04/05/15 15:00
> 標準C が何を指しているかだが

標準規格のCにきまってるだろ! ぼけ
436デフォルトの名無しさん:04/05/15 15:01
センスがないってのがよくわからん。
437デフォルトの名無しさん:04/05/15 15:02
おまえは英語のセンスがないってことだ ;-) > 436

センスはセンスだろ。わざわざ日本語に訳さないといけないのか?
C99にきっちり対応した処理系はEDGのものだけっていう現状が問題だな。
439デフォルトの名無しさん:04/05/15 15:04
>>437
つまらない。
440デフォルトの名無しさん:04/05/15 15:37
わたしの自作のcompilerも適合してるな。
441390:04/05/15 15:39
>>410
ふぅ・・・。いつのまにか漏れはポインタを使えない人間になってるんだなぁ。
あなたの主張ではポインタはできる限り使わないって主張する人はポインタが使えない人なのね。
じゃあgotoは使うなって主張した人はgotoが使えないのでしょうか。(怖くて使えないとか?w)

>誰かさんみたいに特定の職業を馬鹿にするような態度はとらないよ
いつ誰が馬鹿にしたんだよ…。保守性が高いって言っただけだろ。
>セルは書き換えオケーで行単位の書き換えだけ禁止ってことか
そうだね。セルだけを処理対象とする関数の引数はそういう型を使うだろうね。

結局あなたは自分の弱いところを言っちゃってるんだよね。ちゃんと理解できてるじゃん。
最初にキミはポインタが使えない言語障害者がどうのこうのとか言ってたよね?そういうこと。
442デフォルトの名無しさん:04/05/15 15:41
>>441
おまえCのセンスなさすぎ
443デフォルトの名無しさん:04/05/15 15:44
> ふぅ・・・。いつのまにか漏れはポインタを使えない人間になってるんだなぁ。

いつのまにかじゃなくて、最初からそうなのでは? ;)

> じゃあgotoは使うなって主張した人はgotoが使えないのでしょうか

そうです。
444390:04/05/15 15:44
>>442
そりゃあ漏れだってポインタをがりがり使って最適化したこともあるさ。
とある組み込み系のプログラムでね。
でもそれが保守性が高いなんていえないと思うがね。

不思議なんだけど、何でこういう主張をするとポインタが使えない人になるの?
445デフォルトの名無しさん:04/05/15 15:46
>>443
あなたは無能ですね ;)
446デフォルトの名無しさん:04/05/15 15:48
>>444
当然なるだろう。
そんなことで保守性はさがらないのに(むしろあがる)、そんな主張をするってことは
ポインターがちゃんとわかってない証拠。

if (a == 0)
b = 0;
じゃなくて、
if (a == 0)
{
b = 0;
}
にしろとか主張するやつは、if文使えないひとです。
447デフォルトの名無しさん:04/05/15 15:49
>>446
> if (a == 0)
> {

改行するなぼけ
448デフォルトの名無しさん:04/05/15 15:50
そう。改行しろと主張するんです。そのほうが「わかりやすい」と。
それってつまりそのひとはif文使えない人ってことでしょ?

それと同じぐらいあなたは「ポインター使えない人」なんです。
449デフォルトの名無しさん:04/05/15 15:52
「ポインターを使えない人」だなんて言うもんだから
バカにされたとおもって粘着暴れするのでは?

めくら、や、つんぼ とおなじ。

ちゃんと「ポインターに不自由な人」といいなさい。
450390:04/05/15 15:52
>>443
言っておくけど漏れは特定条件でのgoto使用容認派だぞ。
だから何で例に挙げた主張を漏れの主張と捉えるの…。

>>446
ついにコーディングスタイルにまで口出しですか…。
もういいです。はい。さようなら。
GW当たりから湧いてきたバカがいますが、放置よろ。
452390:04/05/15 15:54
>>446
一応言っておくけど、おまえの定義だと漏れはif文使える人だな(笑
453デフォルトの名無しさん:04/05/15 16:03
> ついにコーディングスタイルにまで口出しですか

ちっとも「ついに」ではないですね。
ようするに、gotoがなぜいけないか、どういう場合はOKかがわかってないやつほど
「goto使うな」というのと同じ。
ふつうは言わない(いわなくてもめったに使う用事でてこないので)。まっとうな人間なら、
たまにだれかが不適切なgotoを使っているのをみかけてとがめる場合でも、
「gotoはつかうべきではないから」という本末転倒の言い方はしない。

ポインターと配列についても同じだな。それらをちゃんり理解していれば、
どっちかにかたよることはありえない。
基本的に他人の書いたものは読みにくい/読みやすいとうのがあるわけで
それとは別に書いてある内容が問題

まぁ、読みにくいのを書いてる側も能力低し
読む側に能力を求めるのは間違ってるし
455デフォルトの名無しさん:04/05/15 16:05
あのね、ポインターを使うか、配列で表現するかってのも、りっぱに「コーディングスタイル」の
話なの!

中括弧の位置や空白のあけかただけが「コーディングスタイル」だと思ってるやつは おおぼけ!
456デフォルトの名無しさん:04/05/15 16:05
>>453
お前頭悪すぎー
457デフォルトの名無しさん:04/05/15 16:07
> 基本的に他人の書いたものは読みにくい/読みやすいとうのがあるわけで

いいえありません。
まぬけな人間の「よみやすい」にあわせるとろくなことはない。
>まぬけな人間の「よみやすい」にあわせるとろくなことはない。

その通りだ。
ひらがなだけのぶんしょうがよみやすいとしゅちょうしてるひとにあわせるのはまったくいみがない
459デフォルトの名無しさん:04/05/15 16:10
>>453
少なくとも390はポインタを使うなとは言っていないぞ

>>455
広義と狭義を区別しような
まぬけな人間が「読みにくい」ものを書くほうがロクなことはない。

gotoは多重ループを抜ける時なんかには使った方がいい。
それをgoto以外で実装するとなると、flagたてなきゃならんくなって読みづらい。
461デフォルトの名無しさん:04/05/15 16:13
>>460
漏れはおまえの言っていることに大賛成だが、
おまえがここでgoto論争を開始しようとしていることには大反対だ
462460:04/05/15 16:14
>>461
ごめんなさい。
電車でgoto
>447
>改行するなぼけ

>>447 = 改行が使えない人
465デフォルトの名無しさん:04/05/15 16:21
> 広義と狭義を区別しような

そんなものはない。

コーディングスタイルは、コーディングスタイルの意味しかない。かってに狭義をつくるなよ ぼけ
私はイスカンダルのスターシア
467:04/05/15 16:46
相談なんですが、Cの文法を覚えたのち、どういった勉強していけば
良いのでしょうか?昨日書店で、Hなんとかマイコンの解説本を最初だけ
読んで見たんですが、面白そうなんです。
468デフォルトの名無しさん:04/05/15 16:47
310 名前:お :04/05/15 16:34
C言語で文法覚えたんだけど、次、ジャバアプリケーションの勉強やるのは
いかほどでしょうか??ネットワーク系にあんまり興味ない自分なんですが。
311 :デフォルトの名無しさん :04/05/15 16:44
>>310
好きにしろ。


312 :デフォルトの名無しさん :04/05/15 16:46
>>310
べつにネットワークじゃないことやればいいんじゃない?
次のスレタイは 「C言語なら俺に訊け ぼけ! Part 80」 で。
471デフォルトの名無しさん:04/05/15 16:52
「訊」はださいから嫌。
>>470
空白あけるなぼけ
効け は?
474:04/05/15 17:01
、、、。なんですが、、、。
475:04/05/15 17:03
469>あ!レスありました。どうもアリガトございます
476デフォルトの名無しさん:04/05/15 17:08
fseekで行の先頭(ファイルの先頭ではなく)に戻るにはどうすればよいのですか?
バイト数で指定する
478デフォルトの名無しさん:04/05/15 17:18
次のスレタイは 「C言語なら俺に訊け ぼけ! Part 80」 で。

えー !? 「言語」はぜひやめてくれ。
じゃあ Cランゲッヂ で
>>476
fgetpos()でおぼえておいて
fsetpos()で戻る
のが正しいやりかた、のはず。

「行」と言うからにはテキストを扱ってるんだろうが、
テキストとバイナリの区別があるシステムでテキストモードを
使ってる場合は、fseek()は要注意。
481デフォルトの名無しさん:04/05/15 17:20
> 相談なんですが、Cの文法を覚えたのち、どういった勉強していけば良いのでしょうか?

でたー
「訳に立たない本を読んだあと症候群」
そんな質問をするってことは、「けっきょく身になってない」証拠よ。
482デフォルトの名無しさん:04/05/15 17:21
>>476
1行読む前に場所を覚えておく。
pos = ftell(fp);
fgets(buf, sizeof(buf), fp);
fseek(fp, SEEK_SET, pos);
× 身になっていない。

○ 身についていない。
○ 実になっていない。
484デフォルトの名無しさん:04/05/15 17:22
> テキストモードを使ってる場合は、fseek()は要注意。

そうでなくてもreadとwriteの間はseekを挟め!

っていうか、テキストファイルをいろいろ扱うのに、fseekなんか使おうっていうあたりでだめだめ。
そんな「いちばんだめなほうほう」をだれがおしえた? まさか本か何かに書いてあったとかいわないよな?
もしそうなら、本の名前言えよ! どうかんがえてもそれは「ダメ本」だ。
ダメ本リストに追加しなきゃいけないから、早く本の名前言え!!

# FYI: 通常は連結リストを使います。
FYI って何?
486デフォルトの名無しさん:04/05/15 17:24
>>482
fgetpos/fsetposを使えよ。
>>484
いや、巨大なファイルを扱う可能性があるページャのようなものを
作ろうというのであれば、行リストを作っておいてfseek()で
ページングしようとするのは素直な発想だと思いますですよ。
488デフォルトの名無しさん:04/05/15 17:24
fseekやftellは、freadやfrwiteと組み合わせろ!
fseekやftellを、fgets/fputsや、fgetc/fputcとは「絶対に組み合わせるな!」という
王道を小学校でおまえは習っていないのか? だめすぎ。
489デフォルトの名無しさん:04/05/15 17:26
>>488
お前何も分かっていない。だめすぎ。
490デフォルトの名無しさん:04/05/15 17:26
行リストを作っておいてfseek()で
NODE *prev;
NODE *next;
size_t pos;

491デフォルトの名無しさん:04/05/15 17:27
いいや、わかってないのはどうみても489
492デフォルトの名無しさん:04/05/15 17:28
> FYI って何?

へんな空白あけるな ぼけ
>>485
FYI (For Your Information)【エフ・ワイ・アイ】
最終更新日: 2002/04/19

「for your informaion(参考までに)」という意味を表す略語。ちょっとしたお知らせや、メモのような情報を伝える場合に使われる。
例えばメールの件名の文頭に「FYI:今週の新刊情報」などのように付け、非常に重要というわけではないが、
知っておくと有用な情報などを伝えたりする
Copyright (C) 2000-2003 Digital Advantage



だってさ。
494デフォルトの名無しさん:04/05/15 17:29
>>484
writeの話なぞどこにも出ていないが?

>>485
For Your Information
勘違いしてるやつのキーワード。

495デフォルトの名無しさん:04/05/15 17:30
おまえら、
ftell/fseekと
fgetpos/fsetposの違いっていうか、使い分け方をわかっていなさすぎ!
脳味噌たりなさすぎ!
そんなの使ったこと無い。
497デフォルトの名無しさん:04/05/15 17:31
BTW: おいしいよね > 脳味噌
何なんだこのガキの争いみたいなのは(w

>>488
freadもfwriteもfgetcもfputcもfgetsも低レベルのread/writeと
違うセマンティックス持ってる点では同じだろ。ユーザがfreadに
1バイト読めと指示しても、stdioはBUFSIZ分は読もうとするから、
これは結局getc()と同じことになるんだぜ。

それと、はずかしいからfrwiteはやめれ。
499デフォルトの名無しさん:04/05/15 17:31
OTL: だめすぎ...
500デフォルトの名無しさん:04/05/15 17:33
500get
onz:...
喪前らそんなことだからAERAにバカにされるんだよ。
Cのことには饒舌だが(内容はイマイチだがな)、口の聞き方をまったく知らないバカがいるな。
反省せよ。
×口の聞き方
○口の利き方
OTL
506デフォルトの名無しさん:04/05/15 17:38
使えよ! > そんなの使ったこと無い。

fseekもfgetposも基本だろ!
507デフォルトの名無しさん:04/05/15 17:39
> 口の聞き方を

聞いてどうする! ぼけ
ま   った   く   うんこ  ば  かりの   す

れ  で   す
  れ
509デフォルトの名無しさん:04/05/15 17:40
> これは結局getc()と同じことになるんだぜ。

むしろfgetcと同じだろ。

それに、たまたまバッファリングのことしってたから知ったかぶりしたかったんだろうけど、
この話題とバッファリングするかどうかはまったく無関係。
むりに自分の知ってる知識(しかも狭い!)に話をつなげようとする姿がみっともなーい!
510デフォルトの名無しさん:04/05/15 17:41
まれででったすくうんこばかりのす
>>506
必要ないもん。
そんなん必要になるプログラムなんて、設計が糞。
512デフォルトの名無しさん:04/05/15 17:42
ふふ。ようはまっとうなプログラムかいたことがないのね ;)
513デフォルトの名無しさん:04/05/15 17:43
リンクリストぐらいおまえら使えよ!
514デフォルトの名無しさん:04/05/15 17:43
たしかに。Cに限らず基礎の基礎だな > 連結リスト
515デフォルトの名無しさん:04/05/15 17:43
使っていますが。
ウホッANSI標準関数を
「そんなん必要になるプログラムなんて、設計が糞」
と言いきるかね。
いや確かにgets()とかはいらないが……

むしろ、fseek(), ftell()よりはfgetspos(), fsetpos()だろ。
>>509
なら「何が問題」なのか話してみてごらん、おじさん聞いてあげるから。
518デフォルトの名無しさん:04/05/15 17:44
> ウホッANSI標準関数を
> 「そんなん必要になるプログラムなんて、設計が糞」
> と言いきるかね。

getsとscanfに関してはそうだな ;-)

っていうか、いまどき「ANSI」とか言うほうがよほどはずかしい。ANSIのどれだよ!
519デフォルトの名無しさん:04/05/15 17:45
そういえば、fgetposとかってMS-C 3のマニュアルで見て使ってたなぁ。
ビル君の環境にはテキストモードってのがあったんだね。
もう20年も使ってないからそんな環境のことは忘れてたよ。
520デフォルトの名無しさん:04/05/15 17:45
>>518
516ではないけれど、言うと思った。
521デフォルトの名無しさん:04/05/15 17:46
MSCの3.00にはfgetpos/fsetposなどありませんでした。
522デフォルトの名無しさん:04/05/15 17:46
>>521
アスキーで日本語化されたやつね。
523デフォルトの名無しさん:04/05/15 17:48
でも、ftell/fseekはあったぞ > MSC3.0

それよりもなによりも標準関数ではなく、Latticeから引き継いだ、
int86関数とintdos関数が好きでした。
特に前者は、LIBRARY関数のクセに自己変更コードになってるあたりが
そそりますよね。
524デフォルトの名無しさん:04/05/15 17:49
> アスキーで日本語化されたやつね。

いいえ。日本語化などはされませんでした。
日本語文字はもともと通るし、逆に、「ソ」や「表」が文字列にあると化ける現象は
そのままでしたから、オリジナルのままです。
>>523
fgetpos(), fsetpos()は、UNIXのストリームモデルに沿ってないシステムの
ために後で追加されたインタフェースだからな。
ま、非常に単純な処理以外のことをやりたいんなら常にバイナリモードを使う
ってのも手だ。というかそっちのが個人的には健康によろしい。
526デフォルトの名無しさん:04/05/15 17:50
>>524
マニュアルがね。
527デフォルトの名無しさん:04/05/15 17:52
> マニュアルがね。

あれを訳したのは俺だ!
528デフォルトの名無しさん:04/05/15 17:53
;;;
529デフォルトの名無しさん:04/05/15 17:59
83年頃だったはず。まだプロトタイプ宣言なんかないころ!

その後、仕事がMSに移ってからは訳したのは某氏らしいがな。
530デフォルトの名無しさん:04/05/15 18:00
>>529
センスないな
C言語は環境設定を絶対にしないと駄目なのか?
コンパイラも絶対必要なのか?
>>531
インタプリタなら必要ない。
533デフォルトの名無しさん:04/05/15 18:03
>>529
もう20年も前だよ…
TurboCはお茶も飲めないのにMSCはカップラーメン作れたなぁ。
プログラマに昔話をさせると止まらない
プログラマに限らない。爺は若かりし日々の話が好き。
たいしたこと無い青春だったけど、現状よりはましだったから。
N88BASICのコンパイル速度は爆速だったな。
まさに一瞬で実行できた。
>>534
止まったようだが?w
538デフォルトの名無しさん:04/05/15 20:33
>>441
>じゃあgotoは使うなって主張した人はgotoが使えないのでしょうか。(怖くて使えないとか?w)

ピンポン、正解
使うかどうかの判断ができないアフォほど教条主義的に金切り声でわめくのさ


>いつ誰が馬鹿にしたんだよ…。

え? おまえ自覚なかったの??
まあそうでなきゃ、あれだけの暴言吐いといてとぼけ通せるとは思ってないだろうな


>そうだね。セルだけを処理対象とする関数の引数はそういう型を使うだろうね。

ばーか、使わねーよ
mallocからどうやって代入すんだよ?
初期化でもするつもりでいたのかこのカスは (核爆

んで
>ふぅ・・・。いつのまにか漏れはポインタを使えない人間になってるんだなぁ。

太古から :-p
けんかは止めろってゆじゅねさんがいってたぞw
このスレにはガキと親父しかおらんのか。
541デフォルトの名無しさん:04/05/15 21:06
漏れのような好青年もいますがね。
542デフォルトの名無しさん:04/05/15 22:48
ファイルの任意の一行を削除する方法を教えてください。
>>683
神仏とかワケワカ言ってる
香具師には言われたくないなw
>>542
最初から一行づつ読み出し、消したい行だけスキップしてテンポラリファイルに書き込み
もとのファイルを消し、リネームして終わり。
545デフォルトの名無しさん:04/05/15 23:03
>>544
熱い
546542:04/05/15 23:10
どうやって消したい行だけスキップするんですか?
おまえは自分が消したい行もわからずに消そうとしてるのか?
分かってるだろうけど>>542は釣り。
この馬鹿VBスレにも同じこと書いてるよ。(あっちではシカトされてるが)
しかしんなことして何が楽しいのかねえ。。まともじゃねえな。
549デフォルトの名無しさん:04/05/15 23:38
Cでグラフを作成したんですけどこれをエクセルに出力させるには
どうしたらいいんですか?
550デフォルトの名無しさん:04/05/15 23:40
>>549
Cでどーやってグラフを作成したのか説明しろ。
エクセルに出力、を説明しろ。
CでデータをCSVで出力してExcelで読み込んでグラフ化しとけ
552デフォルトの名無しさん:04/05/15 23:48
男は黙ってCoCreateInstance
553デフォルトの名無しさん:04/05/16 02:24
> ファイルの任意の一行を削除する方法を教えてください。

だーかーらー、連結リストにしろ! って何度も言ってるだろ! ぼけ
話をきいてないから、そういうぼけなことを言うはめになる。
お前は、任意の一行の判定方法も知らないうちから何いってんのよ。
555555:04/05/16 02:27
 
556デフォルトの名無しさん:04/05/16 02:30
>>542
「作ってわかるCプログラミング」/技術評論社

P311: 10.2 行データの追加や削除

P327:
p = c->next;
c->next->prev = c->prev;
c->prev->next = c->next;
free(c->buf);
free(c);
return p;
>>556
これ、端のあるリストでしょ?
ポインタのチェックぐらい汁

if(c->next) c->next->prev = c->prev;
if(c->prev) c->prev->next = c->next;
558デフォルトの名無しさん:04/05/16 02:40
> これ、端のあるリストでしょ?

いいえ「そういうださいことはまっとうなプログラマーはしない」そうです > 教科書によると
つまり「端はない」ので、
そういう不細工なチェックは必要ないんです。
559デフォルトの名無しさん:04/05/16 02:43
初期状態:

static LINE list = {&list, &list, NULL};

これが「行がない」状態。
560デフォルトの名無しさん:04/05/16 02:44
>>558, 559
そんな「端のない」ようにやるのは、常識中の常識だろ!
そんなんはだれでもしってんだよ! えらそうに言うんじゃねー!

基礎の基礎だ!
561デフォルトの名無しさん:04/05/16 02:47
>>560
そんな基礎さえしならいひとも約1名いたようですが ;-)
562デフォルトの名無しさん:04/05/16 02:51
その本おれももってる。
np->next = c;
np->prev = c->prev;
c->prev->next = np;
c->prev = np;
return np;

いかにもCらしいコードというか、Cのポインターの本領発揮! という感じの
プログラムって、こうじゃなきゃ! っていうノリの典型っていうかんじー
よね。
むつかしいっす。。
564デフォルトの名無しさん:04/05/16 03:00
リストの端(1行めより前に行こうとするとき、および、最終行より後ろにいかないように)を
チェックしたり、

最後の1行を削除するときだけ特別な処理をしたり、

最初に1行足すときだけif文が1つ必要...な設計は、たしかにダサイよね。

565デフォルトの名無しさん:04/05/16 03:08
連結リストについて、初心者にもわかりやすく解説してある本はないですか?
566デフォルトの名無しさん:04/05/16 03:08
>>565
本の名前も出版社も書いてあるだろ? ろぐ嫁!
567デフォルトの名無しさん:04/05/16 03:09
556のことですか?
その本は怖いので(^^;
それ以外の本で、ひとつよろしく(^^)/
568デフォルトの名無しさん:04/05/16 03:11
> それ以外の本で、ひとつよろしく(^^)/

ねーよ!
まともな計算機科学の入門書にならあるが、おまえのほしがってるのは、
Cのへぼい初心者用の本でってことだろ? だったら、そこに名前が出てたvoid本以外では
みたことないな。

> その本は怖いので(^^;

どこがこわいんだよ! あんなへぼい本。しょせん初心者本だぞ?
569デフォルトの名無しさん:04/05/16 03:11
> どこがこわいんだよ!

著者名が! ;-)
570デフォルトの名無しさん:04/05/16 03:12
あたしゃ今度はお茶がこわい!
571デフォルトの名無しさん:04/05/16 03:25
こんな顔かい?
>>558,560
先頭や最後の行を削除しようとしたら access violation か。
おめでてーな。

こんな輩が現場に紛れていることを考えるとゾッとするね。
コンソールより入力された2Byteの16進文字列(00〜FFまでの範囲:0-9/a-f/A-F)を
バイナリに変換するプログラムを作ろうと思い、
いろいろ探していたら、過去に他人が作ったプログラムが見つかりました。
しかしながら中身がいまいち理解できません。

1文字目は(対象文字 - 0x37) << 4

2文字目は上記よりシフトを抜いて処理。となっていました。
シフトしてるのはわかるんですが、なんで0x37でひくと
うまく処理できるのかわかりません。

入力できるのは00−FFまでの255パターンと限定してるので
0x37でひくのに意味があるのかなと思っているのですが、、
どなたかご教示ください<m(__)m>

ほかにこんな方法を使うともっといいというのがあったら重ねてお願いいたします。

コンソールから入力したら '0''0'とかだろ?

もっとも a-f や A-F では別の値を引かねばならないが(w
575デフォルトの名無しさん:04/05/16 03:55
あんま見ない例。
include <stdio.h>
int main()
{
func(){puts("a");}
func();
retun 0;
}
これgccでコンパイルしたら通ったんだけど、
こういう関数内関数ってANSI準拠?
576デフォルトの名無しさん:04/05/16 04:01
>>575
とおんねぇYO!!
#includeの#が飛んでた。
#include <stdio.h>



int main()
{
int func()
{
puts("FUNC");
}
func();
return 0;
}
>>575
gccの拡張。

>>573
例えば'A' - 0x37 は、10になる。恐らく、'0'-'9'のときは0x30引いてるんだろ。
コノスレよんでるとペアプロなんて現実問題ありえない気がしてくんだけど、
やっぱマのひとって実際に会うとみんな目立たないけど良い人なんだよね。
そんなことないよ^^
582デフォルトの名無しさん:04/05/16 11:07
> 先頭や最後の行を削除しようとしたら access violation か。
> おめでてーな。

こいつ頭わるすぎ。こんなのがまぎれてる現場とかも、たまにあるんだよねー。
幸いいまのところはいないが。
>>312さんいますか?
二進数で入力された値をintegerにする関数作りますた
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1084589792&res=2
にはってあります。
ちょっと改造すれば>>312さんの要望を満たすと思います。

ただ、32bitで入力してMSBが1のとき負数表示されてしまいます。
よかったら原因をおしえてください。
>>583
>>326 があるのにわざわざ作ったのか。
負数になるのは "%ld" だから。符号つきlong int指定じゃん。
あとなんでwhile(1)を2重にしてるんだ? breakでもループ先頭に戻すためとか
コメントついてるが、 continueでいいじゃんか。
585583:04/05/16 12:13
>>584さん
「新C語入門 ビギナー編」という本を買ってきて初めて作った関数なんです。
continue文の使い方を知りませんでした。
んで、誤った操作をした時にどうやったら最初に戻れるかを考えていて、
whileで2重ループにしてbreak使ったらいいじゃん!
って思いついたんです。
586デフォルトの名無しさん:04/05/16 14:08
>>568
オレの知ってる限り、初心者入門本で、連結リストをわかりやすく解説しているのは
この2冊だけだ。

『作ってわかるCプログラミング』日下部陽一/技術評論社
477411328X (2001/11) 2,289円

『C言語データ構造とアルゴリズム―配列とリストの処理で学ぶプログラミング手法』手塚忠則/カットシステム
487783091X (2003/10) 2,310円

587デフォルトの名無しさん:04/05/16 14:08
> 「新C語入門 ビギナー編」という本を買ってきて初めて作った関数なんです。

そういうクソ本でおぼえるから、そういうおかしなコード書くようになるんだよ! ぼけ
誰でもお勧めしない本とか理解していれば苦労しない
589デフォルトの名無しさん:04/05/16 14:22
1つの本に依存するな、それは袋小路だ

できるだけ大勢の、色んな香具師のコードを見ろ
スタイルも癖も知能程度も玉石混交だが
異口同音に言わんとするところが見つかるはずだ
他人から教わることなどその程度と心得ろ
どちらかと言うと、嫌いなタイプでも大抵の香具師の
コードに付き合ってやれる対応力を鍛えておけ
それ自体が貴重な資産だし、善悪の垣根を越えて
技術を盗みかき集めることにもなる
参考にならない意見ばかり偉そうに書いてる奴って同一人物?
591デフォルトの名無しさん:04/05/16 14:28
後ろにぼけってつけてるやつは同じだろ。
正直、うざい。
>583
 もうおわかりとおもいますが、このスレ常連程度のレベルでも君を罵倒する
には事欠かない知識が得られる。
 真面目な君なら、そういう(>587みたいな)低レベルな人間程度の知識はすぐ
に得られますから、へこまず、頑張って下さい。
 プログラミングは、もっと知的で、楽しい。あなたのようなチャレンジの
積み重ねこそが重要なんです。
593デフォルトの名無しさん:04/05/16 14:34
> 1つの本に依存するな、それは袋小路だ

いや、クソ本は何冊買ってもだめなものはだめ。
いい本は1冊で十分。
ようすに冊数は無関係だということだ。
594デフォルトの名無しさん:04/05/16 14:37
> できるだけ大勢の、色んな香具師のコードを見ろ

ああ、これはウソ。だめなコードは(少なくとも初心者のうちは)みないほうがいい。
最初のうちはとにかく、いいのだけをみろ。いいのが少なければ、べつにすくなくてもいい。

本物だけみて育てば、にせものはぱっとみでわかるようになるが、
数ある偽物をいっぱいみたところでセンスはそだちません。

江戸時代の両替商の子供は、赤ん坊のころから、本物の小判をおもちゃが代わりに
育てられます。ずっと本物の手触りに親しんで育つと、大人になって偽物小判は
触るだけで、もしくは臭いだけで一瞬でわかるようになったそうです。

逆に、数ある偽物小判もふくめていろいろ最初のうち触ってると、けっきょくセンスは
そだたないそうです。

キタナイコードは実務になればいくらでも見る機会はあるんだから、ある程度しっかりした
センスがそだってから見ればいい。
>593
 なにごとにつけ、そういう無謬性の信奉というのは却って大きな無知に捉われている場合が
ほとんどですので気をつけて下さい。
 本は、あくまで本です。字面だけでなく、読む人のそのときの認識や環境など、全てがひとつ
となって知識を形づくるのです。ましてや、全てにおいて妥当な内容の本など、ないと思った方が
正しいでしょう。
596デフォルトの名無しさん:04/05/16 14:38
後ろにぼけってつけてるやつは同じやつだろ。
正直、うざいぞ ぼけ
597デフォルトの名無しさん:04/05/16 14:40
> 全てにおいて妥当な内容の本など、ないと思った方が

けっこう多いね。ようするにふだんからダメ本しか見てないから、
「せいぜい良くても部分的、すべてにわたって'よい'本など存在しない」なーんていう
まぬけなことを思うようになるわけだな。
598デフォルトの名無しさん:04/05/16 14:41
まあ、2重連結リストに「端」を作るやつはかなりまぬけ。
まっとうな現場で働いている人だったら、あり得ない。
Cなら教科書はK&R一冊でいいような気がするな。
C++ぐらいになると一冊じゃ足りない気がするな。
600デフォルトの名無しさん:04/05/16 14:48
K&Rは英語だからなあ
>>600
ようするに石田晴久のウンコ訳はハナから無視、と(w
でも、C++のイテレータとアルゴリズムっぽくやろうとすると、begin, endを作りたくならない?
まあ、begin と end を繋いでも出来ないことは無いけど。
603デフォルトの名無しさん:04/05/16 14:50
> begin と end を繋いでも

ふつうつなぎません。おまへはバカか?

かつ、端も作らない。
常識!
それは端があるかどうか微妙な構造だな。
605デフォルトの名無しさん:04/05/16 14:52
は?
ここまでヒントを書いても、(というか以前の発言でほとんどコードまででてるのだが)
まだ理解できないのか?

初心者本でも出直してこいよ!
やだね。
端を作らないリストがベストと思いこんでいる時点でイタタタタタなわけだが。
608デフォルトの名無しさん:04/05/16 14:54
先頭行を最終行につないだら、どっちみち最後の1行を消すときや、
最初に1行つくるときに条件判断が必要になるだろ! ぼけ
それぐらいわからんのかよ。

端をつくらないってのが、どういうことかまだわからんのか?
「タ」が1つ多いよ
>>602
std::listはdouble linked listでかつイテレータ対応ね。
611デフォルトの名無しさん:04/05/16 14:55
ここ、レベル低いなあ。

横から口出して悪いかもしれんが、私答えかいていい?
いつまでもやられてもうっとおしいので。
612デフォルトの名無しさん:04/05/16 14:56
常識だね > 端を作らないリストがベスト
>>611
× うっとおしい(←変換できない)
○ うっとうしい(鬱陶しい)

答えるのは歓迎(笑)
614デフォルトの名無しさん:04/05/16 14:57
>>613
ケチつけるんだったら、教えてあげません。
いろんな意味でレベル低いね。どっちもが。
>>611
日本語勉強してから来い
617デフォルトの名無しさん:04/05/16 15:02
おい。そんなにむずかしいことかあ?

>>556みたいなので削除ができて (1行めや最終業でも特別あつかいせずに)
>>557 みたいなので追加ができればいいんだろ?

>>562 みたいな間抜けなif文いれなくてもすむような構造ってわけだ。
おれはCとか詳しくないし、この答え知らなかったが、考えたらすぐわかったぞ?

おまえら頭悪すぎるのでは?


先頭と末尾をつなげれば「先頭」や「末尾」を扱うときに特別扱いはほとんどしなくていいが、
それでも、最初に1行を追加する場合や、最後に残った1行を削除する場合に特別扱いが生じて
しまうので却下。
特別扱いの番人要素を一個、末尾と先頭の間に挟むだけですな。
619デフォルトの名無しさん:04/05/16 15:06
番人って訳はダサいなあ。
直訳っぽいし。そもそも英語でもいまはその言い方しない。
空ノードを挟むって話?
まさかそんなことで引っ張っているわけ無いよな。
621デフォルトの名無しさん:04/05/16 15:08
>>619
今は何て言うんですか?
622デフォルトの名無しさん:04/05/16 15:08
「空」じゃあねーだろ。
くだらん、そんな事で優越感に浸っていたわけか。
もったいぶるから、なんか他にあるのかと思っちまった。
624デフォルトの名無しさん:04/05/16 15:09
あと「初期状態」が重要。
まだ1行も行を読み込んでいない状態と、
すべての行を削除したあとは、まあ同じ状態ですが、
その状態がリスト上でどう表現されているか
625デフォルトの名無しさん:04/05/16 15:10
> まさかそんなことで引っ張っているわけ無いよな。
これと
> くだらん、そんな事で優越感に浸っていたわけか。
これは、

かなりまけおしみっぽいっていうか、ガキのいいわけっぽくてはずかしいよね。
626デフォルトの名無しさん:04/05/16 15:11
きっと「そんなことならしってたよ!」とか
「わざわざ言うから、もっとむずかしいのがあるのかとおもったよ!」
とかいうあまりにも恥ずかしいいいわけを書きそうなやつらだ ;-)
>>625
お前も今最高に恥ずかしい。
628デフォルトの名無しさん:04/05/16 15:12
あ、すでに書いてるし...
予想をうらぎらない人たちですね...。

なんでこういう人って、「おやくそく」に律儀なんだろう (^^;
629デフォルトの名無しさん:04/05/16 15:13
わたしが答えを書けば、わたしがいわれてたところか。
かかなくてよかった。
630デフォルトの名無しさん:04/05/16 15:13
っていうかー
なんで、そんな基礎の基礎を知らないやつがえらそうにかいてるんだよ。
631デフォルトの名無しさん:04/05/16 15:14
お約束っていうか、匿名だからしょうがないだろ。
いったもん勝ち、否定したもん勝ち。
自演と区別もつかないから反論ととかしても意味無いし。
反論するも反論に反論するも、アホ。
632デフォルトの名無しさん:04/05/16 15:14
だってわたしの読んだCの入門書にはそんなことまで書いてなかったんですもの
633デフォルトの名無しさん:04/05/16 15:15
レベル低すぎ...
IDがつけば、無問題なんだがな。
バカがバカさらすのはともかく、意味無く煽るやつは減るだろ。
だから一冊で充分だなんて単純すぎるんだってば、何ごとも同様。
636デフォルトの名無しさん:04/05/16 15:16
>>586
で、その2冊以外におすすめはないでしょうか?
連結リストで。

あ、Cでおねがいします。C++は使いそうにないので。
637デフォルトの名無しさん:04/05/16 15:17
常識だろ > だから一冊で充分だな
638デフォルトの名無しさん:04/05/16 15:18
>>636
その2冊じゃあなんでダメなんだ?
639デフォルトの名無しさん:04/05/16 15:18
連結リストは、自分で書いて覚えないとダメだ。
本読んだって書いてあることは大して変わらん。
自分で行き詰まりながら解決していくのが一番勉強になる。
640デフォルトの名無しさん:04/05/16 15:18
> 連結リストは、自分で書いて覚えないとダメだ。
> 本読んだって書いてあることは大して変わらん。

何とくらべて「たいしてかわわない」のでしょうか?

自分で書くために、参考になる本がほしいのですが?
641デフォルトの名無しさん:04/05/16 15:19
639は、さっき「そんなkと実は知ってたもん!」って言ってたやつか ;-)
k ってなんだ???
643デフォルトの名無しさん:04/05/16 15:20
>>638
っていうか、とりあえずその2冊のうちどっちか買って試してから、きけばいい! と
いってらればいいじゃん。

で、おまえならどっちをより薦めるよ?
>>640
どの本を読んでも大して変わらないって事です。

>>641
ま、反論しても意味無いからな。
お前の行為もただの妄想だということに気がついてな。
>642
 おまえの本には載ってないのか?
646デフォルトの名無しさん:04/05/16 15:21
「ファイルの任意の一行を削除する方法を教えてください。」という質問に>>553と答えるのか。
本ばかりに頼ってないで、それらを参考に自分で書いて失敗してみるのが一番いい。
で、それを検証していけばいずれ正解に辿り付く。

他力本願イクナイ
648デフォルトの名無しさん:04/05/16 15:22
「ここ2chにかいてあることと」たいしてかわりない、といいたいんだろ?
でも、ここかなりレヴェル低いぞ。
いいかげんなこと書くやつ多いし。
それとくらべて本も「おなじようなもの」だと本気で思ってるやつは、
きっと、ふだんろくな本を読んでいない証拠だ!

わたしの意見としては「まっとうな本」を読んで、自分でコード書いてためせということだ。
2chなんか読んでちゃだめ。
649デフォルトの名無しさん:04/05/16 15:23
>>648
いい加減、見苦しくなってきたぞ。
せんべい喰ってお茶飲んだ方がましってことだな。
651デフォルトの名無しさん:04/05/16 15:24
> 本ばかりに頼ってないで

どこから「ばかりにたよって」なんていうのがでてきたんでしょうか?
連結リスト、なんてのはならわないと知らなかったわけです。
自分で試すのは「とうぜん」やっているわけで、何をどう試すかの基本的な知識
の参考になる本がほしいのです。2chではさすがにだめそうなので(かなり
知ったかぶりの人が多いし)
だれが「2chのレベルと大して変わらない」といっているんだ?アホカ?
653デフォルトの名無しさん:04/05/16 15:25
じゃあ、何とくらべて「たいしてかわらない」んでしょうか?
654デフォルトの名無しさん:04/05/16 15:28
>>651
試してどうだったの?
655デフォルトの名無しさん:04/05/16 15:29
だーかーらー、連結リストはまだためしてないわけです。
2chの玉石混交なレスだって、実際にコード書いて検証すれば
何がダメで何がいいのか大体分かってくると思うがな。
657デフォルトの名無しさん:04/05/16 15:33
連結リストは、まあ基礎の基礎で、実務でもしょっちゅうつかうだけだが、
グラフの半順序集合のトポロジカルソートとかは学習したのか?
b-treeやバイナリーtreeを配列で実装するほうほうは学習したか?

JavaやC++はそのへん楽できるから逆に仕組みを理解しないままクラスを使っちゃう
やつもいて、いまそいつらのせいで困っているところだが、

Cの場合は、自分で勝手にへんな構造を作り出すやつがむかしいたなあ。
まあ、ああならないためにも、基礎の学習はがんばってくれたまえ。
658デフォルトの名無しさん:04/05/16 15:33
> 実際にコード書いて検証すれば

だからそのための参考書がほしいのです。
>>655
webで「連結リスト」を検索して、それみて書いてみるだけでもいいと思うけど。
最初から正解を書こうとしないで色々やってみるんじゃダメなの?
660デフォルトの名無しさん:04/05/16 15:40
べつに最初から正解を書こうとなど思っていません。

なぜ本じゃだめなのですか? webや2chのほうがいい?
661デフォルトの名無しさん:04/05/16 15:41
> webで「連結リスト」を検索して、それみて書いてみるだけでもいいと思うけど。

それと同じことを本でやろうと思っているだけなのですが。
なんで本だと「最初から正解をもとめる」ことになっちゃうんでしょうか?
ふつう本を読んでそれを参考にあれこれ自分で試すわけだよね?
なんで本だとだめなの? webや2chだとなんでいいの?
そら、お金かかんないし。
いきなり正解を覚えるよりは勉強になる、という考え方も出来なくは無い。
663デフォルトの名無しさん:04/05/16 15:42
べつに本を買うぐらいの金はどうでもいいんです。
あなたの財布がへるわけじゃないでしょ?

> いきなり正解を覚えるよりは勉強になる、という考え方も出来なくは無い。

だからなんで本だと「いきなり正解」なんでしょうか?
664デフォルトの名無しさん:04/05/16 15:42
どうしても本がいいなら、推奨図書スレにいけば?
>>663
2chはレベルが低くて玉石混交だから。
少なくとも専門書籍のほうが正解までの道のりは簡単だと思うよ。
ちがう?
666デフォルトの名無しさん:04/05/16 15:44
ここではなぜだめなのですか?
なんかグダグダだな。
このスレ的には実際にやってみて分からない部分を聞いてくれればいいんだが。
668デフォルトの名無しさん:04/05/16 15:44
> 少なくとも専門書籍のほうが正解までの道のりは簡単だと思うよ。

どうしてですか? 「正解」なんていうものがあるわけじゃなく。
本はただの参考にするものでしょう。
答える価値無いな。
670デフォルトの名無しさん:04/05/16 15:45
> このスレ的には実際にやってみて分からない部分を聞いてくれればいいんだが。

だからやってみたいので、参考書を教えてください。
>>670
本の話題は推薦図書のスレへどうぞ
672デフォルトの名無しさん:04/05/16 15:46
なんか、連結リストの常識をしらないで知ったかぶりしてたやつが、
失態をごまかすために、話題をそらそうと暴れているように見える ;-)
この質問者と「リストの端がどうのこう」のいってた香具師って、もしかして同一?
674デフォルトの名無しさん:04/05/16 15:47
連結リストの話題はどこのスレがいいですか?
675デフォルトの名無しさん:04/05/16 15:47
>>672
なるほど。
676デフォルトの名無しさん:04/05/16 15:49
連結リストの話題が出ているので、ついでに質問しちゃいます。

doublyなふつうの連結リストを与えて、
それを「ソーティング」するにはどうしますか?
たとえば、Cの標準関数のqsortを使いたいのですが、その場合のやり方を教えてください。
今そういう質問すると荒れるだけだと思われ。
>>676
どうしてもqsortじゃないと駄目かね(笑)
679デフォルトの名無しさん:04/05/16 15:52
qsortつかわなくてもいいですが、
ようするに「簡単に」やるほうほうが知りたかっただけです。
qsortでは無理なんですか?
>>679
標準関数のqsortは配列に対するポインタ操作を前提としているから、普通にやったら無理。
リストはデータ構造が違うから。
>>679
無理。qsortは配列相手の交換処理を中でやってしまってるから。
doubly linked listはその交換処理が違うからね。
素直にquick sortを別途実装するしか。
682デフォルトの名無しさん:04/05/16 15:55
あるごりずむは別にquick sortじゃなくてもいいです。
それにqsortって中味はquick sortじゃないですよね?

で、qsortを使わなくてもいいので、
やり方の概要を教えてください。
>>682
C ソート アルゴリズム
とかでググれば色々でてくる
684デフォルトの名無しさん:04/05/16 15:59
(1) リストを先頭からなめて配列に詰め直す
(2) qsortに食わせる
(3) リストを再構成する
じゃだめ?
>>683
ソート自体はね。
交換部分だけリンクリスト用に直せば良い
686デフォルトの名無しさん:04/05/16 15:59
> C ソート アルゴリズムとかでググれば色々でてくる

いいえ、googleでは1件もみつかりませんでした > リストのソーティング
>>684
色々問題はあるがそれでも出来る(笑)
688デフォルトの名無しさん:04/05/16 16:00
>>683
は、リストが何であるかさえわかっていない低能。
なのに、話題に参加したいぼけ
>>676
C++使えば?
もしくは、STLのソース見て std::list::sort 辺りを参考にするとか。
690デフォルトの名無しさん:04/05/16 16:01
> 色々問題はあるがそれでも出来る

どんな問題があるか教えてください。
また、リストを直接ソーティングするのとどっちが速いですか?
691デフォルトの名無しさん:04/05/16 16:02
> C++使えば

C++だとリストもソーティングできるのかー
でも、C++を使いたいわけではなく、
Cのリストのあつかいを学習したいのです。
>>690
回りくどいし、メモリを倍使う。
693デフォルトの名無しさん:04/05/16 16:05
>>692
速度的にはどうですか?
694デフォルトの名無しさん:04/05/16 16:06
メモリー2倍といっても、ノードの部分だけですよね? たとえばテキストファイルとかなら
行のテキストの内容の部分まで2倍にもつわけじゃあないから、
メモリー的にはたいしたことないはず。
クレクレ君か
条件が許すならビンソート使うのも手
697デフォルトの名無しさん:04/05/16 16:12
>>692
回りくどくはないだろ
リストに対してはマージソート使え。
リスト構造に拘ってデバッグに苦労する香具師も居れば
配列構造でデータ操作効率を上げるのに苦労する香具師も居る。
適材適所ってだけの話なんだがな。
700デフォルトの名無しさん:04/05/16 16:29
700get v(^-^=)
701デフォルトの名無しさん:04/05/16 16:37
ここ読んでる「初心者」さん達へ

>>680>>612 のような
「常識だから」端を作らないとか
特定の解答を論点先取するような
アドバイスは聴く(≠聞く)のは構わんが
発言者の知能程度には懐疑的でいろ

アルゴリズムが適切か不適切か判断するには証明か反例が必要だし
性能的に有利か不利か判断するには実測が肝心だ

バブルソートだって分野によっては速いことがあるし
端の処理が例外になったら何が悪いのかを説明もせずに
公理のように振りかざしてくるインチキ論法に騙されるな

真面目に設計する気持ちまでからめ取られたら元も子もないぞ
702デフォルトの名無しさん:04/05/16 16:41
>>701
ぼけ
703デフォルトの名無しさん:04/05/16 16:43
>>701
ぼけ
704701:04/05/16 16:57
訂正
誤: >>680
正: >>608

失礼した
705デフォルトの名無しさん:04/05/16 16:59
気づくまで20分もかかったか
706578:04/05/16 17:03
盛り上がってるとこ遅レスで悪いけど、
>>579サンクス。

スコープ内でしか使わない関数はスコープ内で定義した方が
管理しやすいと思ったんだけどなあ。
>>691
だから、STLはソースの中身見れるから、リストのソートのコードも読める。
参考にして勉強したら?
ちなみに、STLのlistのsortはマージソートの亜種。
リストのソートなら、「常にソートされているリスト」が一番楽。
そらそうだ。
711デフォルトの名無しさん:04/05/16 17:40
javaならJava 2 SDKがありますが、c言語なら何があるんですか?
>711
意味不明
Cコンパイラーの事か?
そりゃいろいろあるよ。
list_empty()
list_add()
list_for_each()
list_entry()
list_del()
を使ってる私はボケボケですか?(=゚ω゚)ノ
>713 その list_* はそれぞれ何をするのか分かりにくいんだが
list_add()
list_del()
は1要素単位の追加削除なのか?

list_empty()
は空かどうかを調べるのか?空にするのか?

list_entry()
は何だ?

list_for_each()
はgetNextみたいなもんか?


...命名がダメダメだな
715デフォルトの名無しさん:04/05/16 18:38
参考書見ながら勉強してんですがうまくコンパイルできません。
教えてください。
{
int n;

printf("数字を入力して下さい。\n");
scanf("%d",&n);

if( n == 0 )
printf("0ですね。\n");
else if ( n > 0 )
printf("正数ですね。\n");
else ( n < 0 )
printf("負数ですね。\n"); //この行のprintfの前に";"を入れろとでます。なぜでしょうか?
}
>> else ( n < 0 )
717715:04/05/16 18:41
あげてしまいました。すいません。
718715:04/05/16 18:45
>>716
解決できました。
本当にありがとうございました。

719デフォルトの名無しさん:04/05/16 18:48
>>717
ageたら何が悪いのか説明もせずに
公理のように振りかざしてくるキモヲタの好みに合わせる必要はないぞ

自分の質問を大勢に見てもらいたければ
誰にも遠慮はいらん堂々とageろ
720デフォルトの名無しさん:04/05/16 18:54
vc++7.0で
unsigned int a = -50;
printf("%d", a);
とすると-50と表示されますが
unsinged として宣言している変数になぜマイナス値を表現できるんでしょうか?
>>720
"%d"だから。
722デフォルトの名無しさん:04/05/16 18:57
>>720
ちなみに%dにはint型のデータを与えなければならない
そこもとがしているようにunsigned int型のデータを与えるのはオフスペックだ

なぜ、そんなことをしたのだ!? 答えろったら答えろ!!

・・・そこもとの苦言の中に、この問題の本質が隠されていることを予言する・・・
>そこもと
?
>>714
じゃああなたの考えるナイスな命名をどうぞ。
>>714じゃないけど。

is_empty()
add_back()
add_at()
del_at()

みたいなかじでどうやろ。

entry() は、ほんとに何するのかわからん。
726720:04/05/16 19:11
unsigned int で符号部無し32ビットですよね
定数部-50は16進数で,80000032と表現されて
それが符号部無しのaに代入され
aの値は十進数で21474836898と表示されると勘違いしてるんですが
どこから間違ってるでしょうか
>720
>721 yome
>>726

・関数のプロトタイプ宣言とは何か?
・printf は与えられた引数の型をどうやって見分けるのか?

を小一時間考えれ。
>関数のプロトタイプ宣言
はこの際関係ないと思われ
>>729
>>関数のプロトタイプ宣言
>はこの際関係ないと思われ

何故関係無いと思うのかを小一時間・・・
>730 符号無値の書式指定は何?ってだけだろが
732720:04/05/16 19:26
>>728
変数のaのビット列は16進数で80000032ですが
フォーマット指定子%dは最上位ビットを符号フラグとしている
とうこうでしょうか?
>>732
そういうこと
では、>>720
printf("%d", a);
と書かれた時、printf 側は a を「何型」として
受け取っているのか、理解していると思っているのか?
735720:04/05/16 19:30
有難うございました
printf や scanf などの書式指定は、対象の変数の型がなんであろうと、書式で指定された型のほうを
優先してしまう。とうことだな。

unsigned int a = -50; については、負定数 -50 のビットパターンをそのまま unsigned int 型変数に格
納している。だからキャストなどしない限り、a は符号なし整数であり、式の中でも負数とはみなされない。

問題の例では、たまたまprintfが、変数型を見ていないから、負数として判断してくれただけ。
>>732
ところで-50が0x80000032になるのか。
738720:04/05/16 19:36
>>734
そこがわかって無かったです
739720:04/05/16 19:38
>>736
明快な解説有難うございます。
740728=730=734:04/05/16 19:39
で、>>736の説明で分かったのか?

俺なら納得できないがな(w
>740

↓これで分からないのはアフォのもまえだけだ
>書式指定は、対象の変数の型がなんであろうと、書式で指定された型のほうを優先
742720:04/05/16 19:56
unsigned int a = -50;
signed int b = -50;
a == bとはならないと思っていました
そういう人は少ないですか?
>>742
それ以前にunsignedに負数を代入するのも不自然だけどね。
744デフォルトの名無しさん:04/05/16 20:04
>>742
ん? 正しいぞ

a == b には暗黙変換が含まれているが
変換の対象となる値が、変換後の型で表現できない場合、結果は未定義

未定義とは地球が爆発しても知らんと言うくらい何でも起こりうることを言う
>742 if() だったらならない気がする
746デフォルトの名無しさん:04/05/16 20:26
unsigned int a = -50;
signed int b = -50;
printf("%d , %d ,(%d)", a, b, (a==b));

結果は、-50 , -50 , (1) だよ。

747デフォルトの名無しさん:04/05/16 20:34
>>746
だから未定義だっちゅーの
わかんねーやつだなw
>747
え? でもイコールだったよ。











とか言ったら頭から火吹いて倒れちゃいそう。
早期から「鼻から悪魔が出てくる」機能を実装しておけば、
バグプログラムも半減しただろうに。
プロセッサに依存ってことでしょ。
大抵はプロセッサのレジスタに符号の概念がない(命令側で使い分けてる)し、
符号付きと符号無しで比較する命令なんてないから、746のような結果が出るわけで。

もしプロセッサがこれに対応していたら、イコールにならないとみた。
751デフォルトの名無しさん:04/05/16 20:49
unsigned int a = -50;
signed int b = -50;
signed int c = -40;

printf("%d , %d (%d)\n", a, b, (a==b));
printf("%d , %d (%d)\n", a, c, (a==c));

-50 , -50 (1)
-50 , -40 (0)
752デフォルトの名無しさん:04/05/16 20:58
movl$-50, -4(%ebp)
movl$-50, -8(%ebp)
movl-4(%ebp), %eax
cmpl-8(%ebp), %eax
jne.L2
.
.
753デフォルトの名無しさん:04/05/16 21:01
strlenのreturnを忘れても動いたからって
それが正しいと言い張っているのと同じだぞ
おまいらの議論は
>753
 strlenのreturn

ってなんですか? 念のため言うと、純粋に知らないので質問しています。
755デフォルトの名無しさん:04/05/16 21:05
未定義だどうのと言おうが、>752は -S でソースを出した結果
だと思うのだが、結果的には 比較している値は正しいし、true
にもなるわけだろ。その辺ちゃんと説明しろよ。


「未定義だ」という以上の説明が必要なのか?
いらねえよな。未定義の意味がわかるなら。
「未定義だ」ではさっぱりわからん。
> unsigned int a = -50;
unsigned int型のaに代入するためにint型の-50が型変換される。
int->unsigned intの場合、未定義じゃなくて、ある決まった正の数になる。
> a==b
bはunsigned int型に変換される。するとbはある決まった正数(上と同じ数)になる。
だから必ずa==b。
760デフォルトの名無しさん:04/05/16 21:18
>>759
>int->unsigned intの場合、未定義じゃなくて、ある決まった正の数になる。

ダウト!
>>759
教えるなよw
魚血してたのに
未定義とか処理系依存てのは内部表現の問題なんじゃないか?
764デフォルトの名無しさん:04/05/16 21:24
>>763
未定義は処理系依存に含まれる
未定義と処理系定義は互いに排他的な集合
765デフォルトの名無しさん:04/05/16 21:25
> 条件が許すならビンソート使うのも手

どんな方法ですか?

>>699
この話題とは無関係ですよね。
list_addとかは はLinuxのkernel内で使ってるから。
説明無しでも
みなさんご存知かと思いましたよ(*´Д`)
つか、仕様外の動作。
だからそういうwarningも用意されている。
無視したきゃしてもいいけど、どうなっても知らんぞという意味。
768デフォルトの名無しさん:04/05/16 21:26
> バブルソートだって分野によっては速いことがあるし

ってのと

> 端の処理が例外になったら何が悪いのかを説明もせずに

これはまるっきり無関係なので、ようするに、「なんとかこじつけよう」としている
姿勢がみえみえで、みっともないだけだと思うぞ ;-)
769760:04/05/16 21:27
>>762
すまそ
770デフォルトの名無しさん:04/05/16 21:28
> scanf("%d",&n);
>
> if( n == 0 )

3: scanf使うなよぼけ
5: 空白あけろよ ぼけ
5: 空白あけるなよ ぼけ
5: 空白あけるなよ ぼけ
771デフォルトの名無しさん:04/05/16 21:29
> add_back()

背中を足すのかな?
772デフォルトの名無しさん:04/05/16 21:30
> unsigned int で符号部無し32ビットですよね

Javaならね
773デフォルトの名無しさん:04/05/16 21:30
ぐぐったら、
符号付き整数型A ⇒ 符号無し整数型B
・Aが負
 Aの型サイズ ≦ Bの型サイズ : A + (Bの型の表現しうる最大値+1)
 Aの型サイズ > Bの型サイズ : (Bの型の表現しうる最大値+1) - (-A値 % (Bの型の表現しうる最大値+1))

ってのがあった。
未定義になるのは、
浮動小数点型 ⇒ 汎整数型
小数部は捨てられます。
整数部の値が汎整数型で表現できない場合は、その動作は未定義となります。

となっていたが、まちがっているのか?まじよくわからん。
774デフォルトの名無しさん:04/05/16 21:31
> printf や scanf などの書式指定は、対象の変数の型がなんであろうと、書式で指定された型のほうを

こいつはぼけだ。scanfにかぎらず、呼ばれた関数側で型がわかるわけねーだろ!
775デフォルトの名無しさん:04/05/16 21:33
> プロセッサに依存ってことでしょ。

ぼけな知ったかぶり君だな。
なんで「プロセッサ」に依存するんだ ;-)
776デフォルトの名無しさん:04/05/16 21:34
> 未定義は処理系依存に含まれる
> 未定義と処理系定義は互いに排他的な集合

「処理系定義」が意味不明だ。勝手に言葉作るなよぼけ
777デフォルトの名無しさん:04/05/16 21:35
> list_addとかは はLinuxのkernel内で使ってるから。

でも、あれは端はないだろ?
778デフォルトの名無しさん:04/05/16 21:37
#include <stdio.h>
main()
{
 char *p, *q;

 printf("文字列を入力>");
 p = gets(q);
 printf(p);
}

これなんですが、どうしてこれでいいのか分かりません。
p = gets(q) の部分なんですが、 *p = gets(*q) なのではないかと思ってしまいます。
あと、printf(p)もprintf(*p)に。
「*p」、「*q」というのはそれぞれアドレスp、アドレスqの内容のことだから、
「アドレスqの内容をアドレスpの内容とする」ってことにした方がいいような気がするんです。
漏れのポインタに対する概念が間違ってるんだと思うんですが、どこが違うんでしょうか?
779760:04/05/16 21:38
>>773
この場合「ぐぐる」のは調査方法として邪道
googleではなくisoかjsaを訪ねろ
780760:04/05/16 21:39
>>778
アドレスは&
おまえさんの読み方は思いっきり逆
781デフォルトの名無しさん:04/05/16 21:40
760だがコテになったのはうっかりで
同一人物とアピールする意図はない
782デフォルトの名無しさん:04/05/16 21:41
>  p = gets(q);

gets使うなよ ぼけ
783デフォルトの名無しさん:04/05/16 21:42
>>782
本文にレスしろ ぼけ
784デフォルトの名無しさん:04/05/16 21:43
fgetsにしとけば、こういうぼけ君がまちがえにくいという効果もあるね ;-)
785デフォルトの名無しさん:04/05/16 21:44
>>784
こういうぼけにエサを与えないという効果があるだけだ
786デフォルトの名無しさん:04/05/16 21:44
> 本文にレスしろ ぼけ

はい。こちら本文。
787デフォルトの名無しさん:04/05/16 21:44
> これなんですが、どうしてこれでいいのか分かりません。

わかるまで立ってろ! ぼけ
788デフォルトの名無しさん:04/05/16 21:45
清原

  打撃・.290 去年(2流) 今年(3流以下)
  HR 26本   (1流) 今年(2流)
  走塁 盗塁0   (3流以下)
  守備 ・・・・
  人気・威圧感 (超1流)

789デフォルトの名無しさん:04/05/16 21:45
>>786
てにをはを間違えるな ぼけ
790778:04/05/16 21:45
数値としてのアドレスを&で表すってのは知ってるつもりです。
そんで、そのアドレスの中身(データ)は*で表す、と考えているんですが、
これで合ってるでしょうか?
791デフォルトの名無しさん:04/05/16 21:46
> アドレスは&
> おまえさんの読み方は思いっきり逆

いや、

> 「*p」、「*q」というのはそれぞれアドレスp、アドレスqの内容のことだから、

この部分はあってるだろ? 言ってることのこの部分に関しては。(そのあとがいけないだけで)
まちがってるのはむしろ780
792デフォルトの名無しさん:04/05/16 21:46
>>790
あっているが、778の文面ではそれができていない
793デフォルトの名無しさん:04/05/16 21:47
> 数値としてのアドレスを&で表すってのは知ってるつもりです。
> そんで、そのアドレスの中身(データ)は*で表す、と考えているんですが、

そこまでは合ってます。
で、「アドレスを渡すのは何のため?」ってのを少しは頭使えばいいだけ ぼけ
794デフォルトの名無しさん:04/05/16 21:48
> あっているが、778の文面ではそれができていない

というか、780はアドヴァイスとしてとても不適切。
なんだこのスレは。
796デフォルトの名無しさん:04/05/16 21:49
>>793
「数値としての」ってのがついてるあたりが怪しいな。
そこを削除すれば合ってるが。
797デフォルトの名無しさん:04/05/16 21:50
ただしいアドヴァイス
「で、そのアドレスを何を指示するために渡しているんだ?」だな。
5分以内に答えろ。
提案なんだが。

みんな気持ち良く議論するために、分末に「ボケ」を必ずいれることにしないか? ボケ
799デフォルトの名無しさん:04/05/16 21:52
> 分末に

ぼけ
800798:04/05/16 21:55
訂正:分末->文末

>799 指摘 & ご賛同ありがとう。 ボケ
801778:04/05/16 21:55
ただのqに例えば「hello」を代入すると、「*qはアドレスhelloの中身」とかいうことに
なってしまうんじゃないかと思うんです。
だから*qを使ってqの中身に代入すればいいと思ったんですが、どうでしょうか?
802デフォルトの名無しさん:04/05/16 21:56
> 799 指摘 & ご賛同ありがとう。 ボケ

へんな空白使うなぼけ
へんな空白使うなぼけ
803デフォルトの名無しさん:04/05/16 21:57
> アドレスhelloの
はいここでだめね。

そんなことはどーでもいいから、おれの質問に答えろよ ぼけ!

こういうぼけってのは、ようするにひとのいうこと聞いてないんだよな。
本や説明が悪いわけじゃなくて。

自分でかってに妄想に走るから理解ができないわけだ。

とにかく答えろ!

「そのアドレスは何を指示するために渡しているんだ?」

804デフォルトの名無しさん:04/05/16 22:00
>>801
"hello"は配列
hello\0 は"hello"の内容
q="hello"; は
q=&"hello"[0]; の省略形

このあたりの話は些細な言葉のあやが
致命的な誤りにつながるから
十分に気をつけれ
805デフォルトの名無しさん:04/05/16 22:02
このぼけのへんな思い込みは、
qとかpとかいう変数名が「あそのアドレスの内容」だとおもっていて、
"hello"とかいうのが物理的な番地につけるわかりやすい名前であるところの「アドレス」だと
思っているところだろ?

まったく逆だよ ぼけ
"hello"ってのが、入る「内容」
変数の名前ってのは、アドレスに対応しているもの、つまり特定のアドレスにつけられた
名前なわけ。qとかpとかいう場所があるわけだ。
で、ポインター変数ってのは、そこに入る「内容」も実はアドレスだという特殊な変数なだけ。
806デフォルトの名無しさん:04/05/16 22:02
> q="hello"; は
> q=&"hello"[0]; の省略形

いや、それは大うそだ。
807デフォルトの名無しさん:04/05/16 22:03
>>805
ほほー
_"hello"ってな一意な外部名が生成されるってかw
808デフォルトの名無しさん:04/05/16 22:04
> このあたりの話は些細な言葉のあやが
> 致命的な誤りにつながるから

などと言っておきながら

> hello\0 は"hello"の内容

などと書くのが、こいつがかなり低能な証拠だな。
教えられるほうは7文字あるのだと思い込んでしまう危険性大
*p ってのは、 "hello"[0] なんだろ、ぼけ
810デフォルトの名無しさん:04/05/16 22:05
おれの質問に答えれば、すぐ理解できるのにな。
811778:04/05/16 22:06
>「そのアドレスは何を指示するために渡しているんだ?」
入力されたデータをどこに代入するか、でしょうか?

なんかもうアドレスぼけしてきますた
812デフォルトの名無しさん:04/05/16 22:07
「代入」ではないな。

で、どこにってのは
そのアドレスの場所には、それを入れるだけの場所はあるのか?
なんであるとわかるんだ?
それをまず考えろよ。

で、具体的に何番地に入れろと、どこで指定している? それをよく考えろ!
813デフォルトの名無しさん:04/05/16 22:07
q = 1234;

としておけば、1234番地に入るわけだ。
814デフォルトの名無しさん:04/05/16 22:08
あ、pだ。
だいたい元のプログラムで gets したら、
スタックぼっこわしていくだろが・・・そこはいいのか?
配列と、ポインターの違いがわかってないからどうでもいいのか・・・
ここのひとたちは罵倒の能力に比べてひとに教える能力はほとんどゼロ。
教えたい気持ちはあるところが逆に始末が悪い。

>778さん。周りにリアルで聞ける人はいないの? ぼけ
そういうおまえは、教える能力もないわけだな、ぼけ
818デフォルトの名無しさん:04/05/16 22:11
で、1234番地は、あいてるのか?
もしかして大事なデータがはいってたりしないのか?

で、もし1234があいてたとしてもとなりの1235番地はどうなんだ?

で、どれだけ連続であいてれば、それが入るんだ?

で、そもそも、その場所をつかっていいって誰が許可したんだ?

おれはしてないぞ?

ってことだ。少しは頭を使え ぼけ
819デフォルトの名無しさん:04/05/16 22:11
っていうか816は教える能力も知識もまったくなさそうだな。

おれが一番教えるのうまいな。
820デフォルトの名無しさん:04/05/16 22:12
> *p ってのは、 "hello"[0] なんだろ、ぼけ

ぜんぜんちがうだろ...
821デフォルトの名無しさん:04/05/16 22:13
まず場所とれよ! ぼけ
>817,819
いたいとこツカレテそのままかえす辺りがあおいわ、ぼけ
823デフォルトの名無しさん:04/05/16 22:15
まず場所とって、その先頭アドレスを渡すんだよ! ぼけ

そう入門書に書いてあっただろ?

あるていど以上よくできた入門書なら、おまえみたいな妄想君 (ひとのいうこと
ぜんぜんきいてなくて自分で勝手におもいこんでしまい、そのせいで理解できないぼけ)が
よんでも、誤解しないように書いてあるもんなんだよ。

そうなってないってことは、その本がよくないってことだ。

まず、読んでいる本の名前を白状しろ! ぼけ
824デフォルトの名無しさん:04/05/16 22:15
char *p,*q; ってのは単なるアドレスの格納場所であって
文字列を入れる場所ではない。文字列を入れる場所は、
char buff[32]; p=buff;とか、 p=malloc(100); などとして用意する。
これでわかったか? ぼけ
825778:04/05/16 22:15
あ、もしかしてこうですか。

 char *p, *q
によってp、qそれぞれ先頭1バイトのアドレスが確保される。
 p = gets(q)
は、「入力されたデータをアドレスqに確保して、それをアドレスpに代入」
printf(p)
でアドレスpの中身が表示されるのは、配列と同様だから。

あー、なんかしっくりこないぞぼけ
826デフォルトの名無しさん:04/05/16 22:16
あ、あとgetsは使うな。fgetsにしろ
827デフォルトの名無しさん:04/05/16 22:18
> char *p,*q; ってのは単なるアドレスの格納場所であって
> 文字列を入れる場所ではない

言ってることは正しいが。教え方がまったくだめ!
正しいことを言うことが目的なんじゃなくて、ぼけをうまく「誘導」して正しい考えに
みちびくためなんだから、それの正しい定義を言うのは逆効果。

ぼけなやつが思い込んだ1つ前のわかれみちまでたちもどらせて、正しい道を選択
させるようにするべきだ。

この言い方ではよけいに混乱する。
>>820
p="hello"; の直後の *p は "hello"[0] だっていえば許してもらえるのか? ぼけ
829デフォルトの名無しさん:04/05/16 22:20
>  char *p, *q
> によってp、qそれぞれ先頭1バイトのアドレスが確保される。

されません。こいつがこういう勘違いしたのは、824の説明のせいだよなあ。やっぱりよそう通りだ。

pとかqには、「アドレス」格納する分の大きさしかとられない。
文字列の1文字がそれにはいるかどうかは保証されない
(たいがい2〜4文字分のおおきさはあるものだが、ここではどうでもいい)
830デフォルトの名無しさん:04/05/16 22:20
> p="hello"; の直後の *p は

空白あけろ ぼけ
831798:04/05/16 22:21
>827
さすがです。あなたはきっと良い教師(=優秀なプログラマ)ですね、ぼけ
832デフォルトの名無しさん:04/05/16 22:21
で、本の名前を言え!
833デフォルトの名無しさん:04/05/16 22:21
>>808
プログラム片に全角文字使うなよ ぼけ
なんか void みたいのがいるな。
835デフォルトの名無しさん:04/05/16 22:25
>>834
どれがそう?
>>835
きみ。
837デフォルトの名無しさん:04/05/16 22:27
教えてよー
838778:04/05/16 22:29
いま使ってる本は「独習C第3版」です。
ていうか、よく見たら>>778のプログラムは間違った例として出されてました。
「正しくありません。gets()を呼び出すときに指定する引数は、実際の配列へのポインタでなければなりません。」
と解説してあります。
でも正常にコンパイルできるし実行も問題ありません。なんなんでしょか?

>>829
>pとかqには、「アドレス」格納する分の大きさしかとられない
これはつまり、確保はしないけどスタート地点は決めておく、ってことでしょうか?
土日はこのスレ使いもんにならんな。
840デフォルトの名無しさん:04/05/16 22:32
> いま使ってる本は「独習C第3版」です。

ダメ本じゃん...

> でも正常にコンパイルできるし実行も問題ありません。なんなんでしょか

コンパイルエラーにならないからこそ、わざわざ解説してあるんだろ ぼけ

> これはつまり、確保はしないけどスタート地点は決めておく、ってことでしょうか?

全然ちがう。
「アドレス」の値もまた、メモリー上に格納されるべきものであるということだよ。数値や
文字と同じように。

841デフォルトの名無しさん:04/05/16 22:33
コンパイルできれば正しいプログラムだっていうわけではない、ってことぐらいは
そろそろおぼえとけ。
>>838
>でも正常にコンパイルできるし実行も問題ありません。なんなんでしょか?
たまたま問題ないように見えるだけです。
char *p, *q;
では、どこともつかない、使ったら何が起こるかわからない場所を指したポインタが
二つ用意されます。
まず最初にp, qには実際に使って良い場所を指すように初期設定しなくては
いけませんぼけ
843デフォルトの名無しさん:04/05/16 22:37
あの本はダメ本。
訳がいけないわけではなく、原書からしてだめ。

たとえば今回のような「初期化していないポインターを参照」するような誤りを
説明するのに、その例は実際によくある例ではあるが、むしろ人工的な例で説明したほうが
わかりやすい。
(たとえばgets()でやらずに *p = 10; みたいな)

入門書の大原則、「正しい例は実際にある自然なものを」「正しくない例は、実際に
よく見かける間違いではなく、あえて人工的に」をはずしているところばかりある。
まるっきりうらがえしなんだよな。
あの本。
844デフォルトの名無しさん:04/05/16 22:38
> では、どこともつかない、使ったら何が起こるかわからない場所を指したポインタが

ここでは「場所」といわずに、あえて「アドレス」という言葉をつかって解説して、
さっきの解説との関連を持たせないとだめ!
おいおい、大猿たちの立場はどうなるんだYO!
846デフォルトの名無しさん:04/05/16 22:39
> まず最初にp, qには実際に使って良い場所を指すように初期設定しなくては

そこで「初期設定」とか意味不明のことばをつかうからいけない
そこは一般用語で言うべきだ。
847デフォルトの名無しさん:04/05/16 22:40
おまえに合った、ちゃんとした入門書を買えよ!
848778:04/05/16 22:40
独習Cってダメ本だったんでつか・・・鬱欝

char *p, *q ,buf[32],def[32];
p=buf;
q=def;

としても動きました。というかこれが正常なんですね。
あー、これならなんだかわかった気がします。
ちょっとだけぼけから開放されますた
849デフォルトの名無しさん:04/05/16 22:41
どんな本がお薦めですか?
一般用語だとなんだろう?
851デフォルトの名無しさん:04/05/16 22:41
> 独習Cってダメ本だったんでつか・・・鬱欝

そんなことは、ここでさんざん言われてるだろうが! ぼけ
852デフォルトの名無しさん:04/05/16 22:42
>>849
こう、ドバーンっとわかって、ガガーーンとくるようなやつ。
853デフォルトの名無しさん:04/05/16 22:42
> としても動きました。というかこれが正常なんですね。

いや、そもそもpやqは何のために準備したんだ? それを考えろ!
pやqに代入せず、bufやdefを直接与えろよ! ぼけ
854デフォルトの名無しさん:04/05/16 22:43
>>848
その本を擁護するつもりはないが
今このスレには不純な動機で特定の本のみ推薦したがっている
著者または親衛隊が常駐しているようなので
特に推薦図書については言われたことを鵜呑みにしない方がいい
def ?
856デフォルトの名無しさん:04/05/16 22:43
> こう、ドバーンっとわかって、ガガーーンとくるようなやつ。

『作ってわかるCプログラミング』日下部陽一/技術評論社
857デフォルトの名無しさん:04/05/16 22:44
> その本を擁護するつもりはないが

してるじゃん。おもいっきり
858デフォルトの名無しさん:04/05/16 22:44
必死だな >業者さん
859デフォルトの名無しさん:04/05/16 22:44
> char *p, *q ,buf[32],def[32];

空白あけろ ぼけ
860デフォルトの名無しさん:04/05/16 22:45
業者ってどこだ? 出版社?
861デフォルトの名無しさん:04/05/16 22:46
アダルトちゃうか?
862デフォルトの名無しさん:04/05/16 22:46
> 独習Cってダメ本だったんでつか

あれは著者の技量が低すぎだな。
騙されて買う人間も少ないとは思うのだが...。
863デフォルトの名無しさん:04/05/16 22:47
っていうか、
説明にgetsつかってる時点で、あきらかにだめだろ.
864778:04/05/16 22:47
ああ、こうやっても動かない・・・

char buf[32],def[32];

printf("文字列を入力してください: ");
buf = gets(def);
printf(buf);

エラー E2277 a.c 8: 左辺値が必要(関数 main )

左辺値って、bufがあるのに・・・
なんでだみょーーーーーー
865デフォルトの名無しさん:04/05/16 22:48
ぼけ。
getsの戻り値をなんでひろってるんだ?
それを考えろよ。

エラーチェックしてないんだろ?
だったら、なんでわざわざ変数に入れる?
printfに直接わたせよ ぼけ
>>864
getsを捨てろ。
867デフォルトの名無しさん:04/05/16 22:48
>>864
bufを定義した場合のメモリ消費量を総額で答えよ
868デフォルトの名無しさん:04/05/16 22:48
っていうかまずgetsやめろ。せめてfgetsにしろ
869デフォルトの名無しさん:04/05/16 22:49
getsやめてfgetsにしたら直るのかよ ぼけ
870デフォルトの名無しさん:04/05/16 22:50
左辺値ってのは「アドレス」じゃないとだめなわけ。
定数は却下
a = b; や
a = 0; はOKだけど、
5 = b; がだめなのはわかるだろ? それと同じだ。ぼけ
871デフォルトの名無しさん:04/05/16 22:51
>>870
アドレスが左辺値だってよ
int a;
&a = 0;
氏ねよぼけ
872デフォルトの名無しさん:04/05/16 22:51
> getsやめてfgetsにしたら直るのかよ

なおるよ。
こういうぼけな質問するたつが、ほぼまちがいなく9割以上の確率で、
scanfかgetsを使っている事実をみるだけでも、それぐらいわかるでしょう。
つまりつかわなければ、自分で解決するようにできてるんです。
873デフォルトの名無しさん:04/05/16 22:52
>>872
buf = と何の関係があるんだよ? 早く氏んでね
874デフォルトの名無しさん:04/05/16 22:52
> &a = 0;

ぼけ「左辺値」ってのは、1段階参照レヴェルがずれるんだよ。
それぐらいおぼえてから出直してこい! しったかぶりめ
char *gets(char *s)
getsは次の入力行を配列sに読み込む。このとき行末の改行記号は'\0'に置換される。
これで返されるのは, s(ファイルの終わりもしくはエラー発生時にはNULL)である。
876デフォルトの名無しさん:04/05/16 22:53
>>874
ほほー
ずれたら&a=が通るんかよ
必死だな >業者さん
無能だな >著者さん
877デフォルトの名無しさん:04/05/16 22:54
> buf = と何の関係があるんだよ?

そんなこともわからんのか?
fgetsにすれば、こういうまちがいには自分で気づくようにできてるんだよ。
したがって、こういう質問も発生しない。あるていどのぼけでも自分で「あ,そうか」と
気づくようにできてる。

なのではやくfgetsにしろ
878デフォルトの名無しさん:04/05/16 22:54
>>875
sが配列だあ? 頭元気?
879デフォルトの名無しさん:04/05/16 22:54
> ずれたら&a=が通るんかよ

こいつ低能。
ずれるから&つけなくてもアドレスなんだよぼけ
「内容」ではなく
>>878
さあ、カニパン2版参照しただけ。
881デフォルトの名無しさん:04/05/16 22:56
> このとき行末の改行記号は'\0'に置換される

この仕様が難物なんだよなあ。
882デフォルトの名無しさん:04/05/16 22:56
>>877
ああ、わからんね
fgetsにした場合のコードでも示したらどうなんだ?
883デフォルトの名無しさん:04/05/16 22:56
答えかいたら意味ねーだろ
884デフォルトの名無しさん:04/05/16 22:57
>>879
じゃbuf=はずれないから「アドレスに代入」できるんだな?w
885デフォルトの名無しさん:04/05/16 22:57
たしかにぼけな質問するやつはたいがいgetsかscanfつかってるな。
886デフォルトの名無しさん:04/05/16 22:58
>>883
関係ねーのを自ら証明するから書かないだけだろ
間違いは間違いなんだよ さっさと引き下がれ
887デフォルトの名無しさん:04/05/16 22:59
>>885
こいつ統計もボロボロだな
888778:04/05/16 22:59
一応gets解説の項なんで、getsやめたら本末転倒なんですよね。
まあ、わからないのはポインタの部分なんで確かに関係ないんですが・・・
それにしてもgetsの戻り値ってどうなってるんでしょうか?
エラーが発生した場合は0が返されると書いてあったんですが。
左辺値はアドレスでなければいけないらしいですが、bufっていうのは
buf[32]で宣言した部分の先頭アドレスが入っているのではないのでしょうか?
889デフォルトの名無しさん:04/05/16 22:59
> じゃbuf=はずれないから「アドレスに代入」できる

はあ? おまえ頭だめすぎ。でなおしてこいよ。
できねーだろ > 代入bufをどうやって変更するんだよ!
890デフォルトの名無しさん:04/05/16 23:00
> 一応gets解説の項なんで、getsやめたら本末転倒なんですよね。

いや、むしろgetsつかうのが本末転倒。
というのは、目的があってこそ手段があるのだから。
べつにgetsを使いたいがためにCをやってるわけではあるまい?
>>888
エラーが発生したら0.
じゃあ、エラーじゃなかったら、なんでしょう?
892デフォルトの名無しさん:04/05/16 23:00
>>888
「左辺値」と「変更可能な左辺値」を区別しとけ
893デフォルトの名無しさん:04/05/16 23:01
>>889
>できねーだろ > 代入bufをどうやって変更するんだよ!

それをおまえに聞いたんだよ
答えられないぼけは早く氏ねったら
894デフォルトの名無しさん:04/05/16 23:03
> エラーが発生した場合は0が返されると書いてあったんですが。

0というかNULLだな。

> bufっていうのはbuf[32]で宣言した部分の先頭アドレスが入っているのではないのでしょうか?

ああ、その「入っている」っていう言い方がだめ。
入ってるのではなく、「〜で宣言した部分の先頭アドレスそのもの」だ。
入ってるだと、何か変数にいれてあるみたいにきこえるだろ?

a = 5; の aには「5が入ってる」とはいうが、
5とか3+2のことを指して「5が入ってる」とはいわんだろ?

a = 10; はOKでも、
5 = 10; や
3 + 2 = 10; ができないのはなぜかよく考えろ! ぼけ
895デフォルトの名無しさん:04/05/16 23:03
> それをおまえに聞いたんだよ

いまさらごまかしても遅い ;-)
896デフォルトの名無しさん:04/05/16 23:04
>>894
>0というかNULLだな。

#define NULL 0
プププ
897デフォルトの名無しさん:04/05/16 23:04
あのー よこからすみません。

> a = 10; はOKでも、
> 5 = 10; や
> 3 + 2 = 10; ができないのはなぜかよく考えろ! ぼけ

この部分だけわかるので、わたしに答えさせてください。

「それが左辺値というものだから」が答えですね。
ポインタ変数にアドレスが入っている、っていう言い方は別にいいだろ。ぼけ。
問題は getsの戻り値はどこかに入っているというよりも、受け取るんだということを理解しろってことだ。ぼけ。
899デフォルトの名無しさん:04/05/16 23:05
> 「左辺値」と「変更可能な左辺値」を区別しとけ

こいつぼけ。
「左辺値」の意味をわかってない...
変更できない左辺値ってなんだよ ;)
900デフォルトの名無しさん:04/05/16 23:06
> ポインタ変数にアドレスが入っている、っていう言い方は別にいいだろ。ぼけ。

bufのどこがポインター変数だよ! ぼけ。よくコードを見ろ!
901デフォルトの名無しさん:04/05/16 23:06
>>895
ごまかしてんのはおまえだ
889が全然説明になってねーな (プゲラ
902デフォルトの名無しさん:04/05/16 23:06
> 問題は getsの戻り値はどこかに入っているというよりも、受け取るんだということを理解しろってことだ。ぼけ。

いいや、ちがう。
うけとったものをどこに入れるのかという問題だ。
903デフォルトの名無しさん:04/05/16 23:07
> ごまかしてんのはおまえだ

ごまかしかたがみっともないね。
ひっしだな ;-)
処置なし! ぼけ!
905デフォルトの名無しさん:04/05/16 23:09
>>899
わかってないのはおまえだ
bufは変更できてbuf=による変更ができない理由の
核心に触れる説明がきれいさっぱり抜けたままw
906デフォルトの名無しさん:04/05/16 23:09
>>904 みっともなさすぎ
907デフォルトの名無しさん:04/05/16 23:09
> bufは変更できて

できねーだろ ぼけ
土日はおもれーなぁ、おい。

ぼけ
909デフォルトの名無しさん:04/05/16 23:10
>>903
必死なのはおまえ
884に早く答えてね無能な879さん
910デフォルトの名無しさん:04/05/16 23:11
>>907
gets(buf);
911デフォルトの名無しさん:04/05/16 23:12
> 必死なのはおまえ

いーや おまえだろ。
ぼけなことを言ったのをごまかそうとひっしにからんでくるが
言った事実は消えない ;-)
912778:04/05/16 23:12
はう・・・こうしてもだめだ・・・
*buf = gets(def);

エラー E2349 a.c 8: 移植性のないポインタ変換(関数 main )

*bufってのは、あくまでデータそのものであるから
代入なんてお門違いってことなんでしょうか?
913デフォルトの名無しさん:04/05/16 23:13
> はう・・・こうしてもだめだ・・・
> *buf = gets(def);

だーかーらー
まず、なんで戻り値を何かに代入しなきゃいけないんだ? ってところから考えろよ
まず、代入しようとなどおもわずに、
printfに直接渡せよ! ぼけ

っていうかprintfには、もどってきた値じゃなくて、もとのバッファーのアドレスを
渡してるんだっけ?

だったら、代入せずに、ほげほげ = をとってみろ
そこでまた考えろ!
>>912
buf に何を代入しようとしているの?
915デフォルトの名無しさん:04/05/16 23:14
>>911
なるほど、押し問答に持っていってドローを狙いたいわけね
いいよ別に、あんたを泣かしてもしゃーないし
追求されたくないんなら放っといてやるよ無能な879さん
916デフォルトの名無しさん:04/05/16 23:15
つまり、
渡すほうは確保した配列のアドレスを渡し、
うけとるほうは、ポインター変数にすればいいんだな。
917デフォルトの名無しさん:04/05/16 23:15
>>916
答えかいちゃったら、いみねーだろ
918デフォルトの名無しさん:04/05/16 23:16
> 押し問答に持っていってドローを狙いたい

なるほど、本音が出たね ;-)
919デフォルトの名無しさん:04/05/16 23:16
>>918
おまえのな
920デフォルトの名無しさん:04/05/16 23:17
> 追求されたくないんなら放っといてやるよ無能な879さん

捨てぜりふとしては、かなりおもしろみに欠けますね。

「ふ、きょうはこれぐらいにしといてやる...」と同じ程度。
>>918-919 ぼけ!
922デフォルトの名無しさん:04/05/16 23:18
>>920
追求されたいのか、されたくないのか、そんくらい言えよ
923デフォルトの名無しさん:04/05/16 23:21
追求と追及ぐらいちゃんと区別しろよ ぼけ
924デフォルトの名無しさん:04/05/16 23:22
>>923
で、どっちをお望みなんだよ? 無能な879さん
925デフォルトの名無しさん:04/05/16 23:23
あ、ごまかしたな ;-)
926778:04/05/16 23:23
printf(gets(buf));
でやったらちゃんとできました。
でも、gets(buf)の戻り値が何故代入できないのかがわからん・・・
927デフォルトの名無しさん:04/05/16 23:24
だーかーら
a = 5; ができて
10 = 5; ができない理由はわかる?

a = b; ができて
10 = b; ができない理由はわかるの? >>926
>926
返り値がポインタだからじゃないでしょうか? ぼけ
929デフォルトの名無しさん:04/05/16 23:26
>>925
で、どっちをお望みなんだよ? 無能な879さん
追及する/[しない]
930デフォルトの名無しさん:04/05/16 23:27
> 返り値が

それは浴びるものです。
>>926
正常処理時には、gets() の引数にわたしたbuf[] の先頭アドレス が戻り値として返される。
要するに gets は 渡されたバッファの中にデータを突っ込んで。その先頭を返しているだけ。
だから。

char buf[100], def[100];
buf = gets(def);

なんて書いたら、これはつまり、

buf = def;

って書いているのと同じこと。
932デフォルトの名無しさん:04/05/16 23:27
> で、どっちをお望みなんだよ?

お、まだあばれてごまかす気だ ;-)
いくらはずかしいのをごまかしたいからと言って、あばれすぎだよ。
933デフォルトの名無しさん:04/05/16 23:29
>>931
言ってることは合ってるが、このあたりを理解できていないやつに対する説明としては
不適切。よけい混乱するか、そこまでいかなくても、
理解の助けにはならない。
>930
 まさか「戻り値って言って下さい。」とかいわないよね? ぼけ
935デフォルトの名無しさん:04/05/16 23:31
>>932
デフォルトは見たよな 無能な879さん
936デフォルトの名無しさん:04/05/16 23:31
> まさか「戻り値って言って下さい。」とかいわないよね

こんな間抜けな質問をするってことは、
「じゃあ何て言えばいいんだ?」と思ってる証拠。
それぐらいの常識は身につけてからでなおしてこいよ。
>936
 そんな憶測はずれてるよ。
 それより>930の意図を教えてくれよ。
938デフォルトの名無しさん:04/05/16 23:33
>>931

>buf = def;
>
>って書いているのと同じこと。

の何がいかんのかが、わからなくて聞いてるんじゃないか?
新着200以上て
940デフォルトの名無しさん:04/05/16 23:35
> そんな憶測はずれてるよ。

いーや、あたってる。
941778:04/05/16 23:35
char buf[32],*p;
p = gets(buf);
printf(*p);

gets(buf)がbuf[32]の先頭アドレスを返すってことなら、
これでpにそのアドレスを代入すればポインタで値が表示できると思ったんですが、
またもやダメでした・・・。もうぼけぼけです
942デフォルトの名無しさん:04/05/16 23:35
> の何がいかんのかが、わからなくて聞いてるんじゃないか?

だね。だから解説としては適切ではない。
>>941
おしい
しかしほかの分野ってすごい勢いで進歩してるのにソフトって進歩遅せーなぁ。
Cって何年前の言語だ? なんか別なの使えよ > おまえら全員。
945デフォルトの名無しさん:04/05/16 23:37
> printf(*p);

なんでこうやろうと思うんだろう?
946デフォルトの名無しさん:04/05/16 23:37
> またもやダメでした・・・。もうぼけぼけです

っていうか、何行めでエラーなのかの行番号ぐらいちゃんと見ろよ! ぼけ
>>944
ソフトの進歩と言語は関係ないし。
>940
 はずれてるってば。
 それより>930の意図は、「戻り値っていうんだよ。」ですよね。
 はぁ〜。
949778:04/05/16 23:39
printf(p);
にしたらできますたー。
printfって、直接アドレスを指定することもできるんですね。
950デフォルトの名無しさん:04/05/16 23:40
> はずれてるってば。

いーや、あたってる

むしろ、
> それより>930の意図は、「戻り値っていうんだよ。」ですよね
この推測がおおはずれ。

自分の推測がおおはずれなくせして、
あいてが自分にたいしてまちがった推測をしているとおもいたがる(実際にはあたってるのに)のが
おお間抜けだ。
>>949
まぁ、普通はfputs とか使うんだけどな。
952デフォルトの名無しさん:04/05/16 23:40
>>949
それ、よした方がいい
試しに
%s
って入力してごらん
953デフォルトの名無しさん:04/05/16 23:41
> printfって、直接アドレスを指定することもできるんですね。

いいや。ちがう
「も」ではない。
アドレスを指定すること「しか」できない。
やっぱあれだな、著作権てやつ。
ほかの分野は特許とかでせいぜい10年しか守られないのに、ソフトは
著作権で50年だか100年だか守られるんだろ?
どおりで進歩のない議論を繰り返すわけだ。
955デフォルトの名無しさん:04/05/16 23:41
っていうか、gets捨てろよ
なんでgetsつかわなきゃいけないとおもいこんでるんだ?
あと5分以内にfgetsに変えろ!
>>954
いや、このスレを見ているなら、アホナ論争に著作権なんか関係ないことに気づけよ。ぼけ。
957デフォルトの名無しさん:04/05/16 23:42
%p のほうがいいな ;-)
>>955
べつ思い込んでないと思われ。
959デフォルトの名無しさん:04/05/16 23:43
>>954
ところでさ、シリコンウエハーが使われだしてから何年になるっけ?
土台になるものが変わらないからって、技術が停滞してることにはならんだろ
>930=936=940=950
話をそらしてないで、いいかげんに>930で何が言いたかったのかハッキリ言えよ。
イライラさせるやつだなお前は。ねらい通りなんだろうが俺は気分が悪い。
961デフォルトの名無しさん:04/05/16 23:43
> べつ思い込んでないと

あまいね。すっかり思い込んでる。
962デフォルトの名無しさん:04/05/16 23:44
> 俺は気分が悪い

ようは自我が未成熟な証拠だ。
>962
 おまえはくずだ。もう答えなくて良い。諦めたよ。
964デフォルトの名無しさん:04/05/16 23:45
fputs使うなら、
getsのままだと、またハマるんだよな。

けっきょくgetsつかってるのがわるい。
965デフォルトの名無しさん:04/05/16 23:46
>>962
無能な879よりマシに見えるが
966デフォルトの名無しさん:04/05/16 23:46
> おまえはくずだ。もう答えなくて良い

こわがりすぎー
967778:04/05/16 23:46
>%s
うわぁぁぁぁぁ(AA略
エラーになってしまいますた。他にも%dとか%pとかも、そのままでは表示されないんですね。
printfのフォーマット指定子とやらのせいですか。

>アドレスを指定すること「しか」できない
printf("わはー");
とかでも、アドレスを指定しているんでしょうか?
この場合、どこかにこの文字列を格納してその先頭アドレスを返しているってことなんですかね。
968デフォルトの名無しさん:04/05/16 23:46
>>964
消防の作文よりひでーな
969デフォルトの名無しさん:04/05/16 23:47
さて、そろそろgetsを使わないように直したのができたころかな?
まぁソフト屋は無能な奴がやる職業だし仕方ないか。
971デフォルトの名無しさん:04/05/16 23:48
getsもscanfも現実のプログラムでは使用しないばかりか、

それら2つの関数を学習する上で、ほかのよりつまずき安い箇所が多い。
しかも、そのつまずいた問題をのりこえる努力をしたとしても、その経験が
あとで生きないものばかりだ。

どうせなら、学習のときに、あれこれ悩んだものがあとあと訳にたつような関数を
使え




ぼけ。

「今日からプログラムを勉強するぞ」スレの
ランボー出現時以来の速さだな。
>>967
char の配列は文字列として扱える。(要終端コード)
で、printf には文字列を表示するための書式指定があるだろ。
あとは、わかるな?
974デフォルトの名無しさん:04/05/16 23:49
>>970
もうちょっとヒネれ
素材は悪くないが
それじゃ食いつきがいまいちだろ
試しにさ、

char buf[32],*p;
p = gets(buf);
printf(p);

を実行して200文字ぐらい入力してみ。
976デフォルトの名無しさん:04/05/16 23:50
>>971
>その経験が
>あとで生きないものばかりだ。

プ
977デフォルトの名無しさん:04/05/16 23:50
> char の配列は文字列として扱える

「扱える」が誤り。
978デフォルトの名無しさん:04/05/16 23:51
char *p = NULL, *q = NULL;
間違って使わないためにもポインタ型を宣言する際はこんな風に宣言しろぼけ
979デフォルトの名無しさん:04/05/16 23:52
>>978
いっそのことstaticとか (プ
980デフォルトの名無しさん:04/05/16 23:52
> いっそのことstaticとか

知ってる単語ならべて知ったかぶりしようとしても無駄。
この話題とまったく関係ない
すくなくとも >>978 とは関係あると思うが。
こんなにレベル低かったっけ?このスレ
983デフォルトの名無しさん:04/05/16 23:53
>>980
間違って使わないためにもポインタ型を宣言する際はこんな風に宣言しろぼけ
間違って使わないためにもポインタ型を宣言する際はこんな風に宣言しろぼけ
間違って使わないためにもポインタ型を宣言する際はこんな風に宣言しろぼけ
間違って使わないためにもポインタ型を宣言する際はこんな風に宣言しろぼけ
984デフォルトの名無しさん:04/05/16 23:53
> char *p = NULL, *q = NULL;
> 間違って使わないためにもポインタ型を宣言する際はこんな風に宣言しろぼけ

こういうウソにだまされないように。
どんどんどんどんひどい方向にいくぞ。そういう方針にすると。
そうではなく「ただしい」方向にいけばいいだけ。
>>979
CではNULL == 0って決まりは無いよね
getsは何文字でも入って危険だけど、
fgetsは改行がくっついてくるので
とるのがめんどくさい。
987デフォルトの名無しさん:04/05/16 23:55
>>981
いや、staticの変数は0で初期化されるが、ポインターが0(NULL)にはならない。
988デフォルトの名無しさん:04/05/16 23:56
> fgetsは改行がくっついてくるので
> とるのがめんどくさい。

とらなきゃいい
989デフォルトの名無しさん:04/05/16 23:57
>>985
static char *p, *q;
memset(&p, 0, sizeof p);
if(p == q) puts("sine");

で、うじねが出る保証ないらしいな
990778:04/05/16 23:57
>>975
うほっ、エラーが出ますた。
やっぱりバッファちゃんが足りないんですかね。

いやー、なんかポインタが結構分かってきた気がします。
やっぱり勝手に思い込んでるだけじゃだめですね。
991978:04/05/16 23:57
p,qはなにも指していないから使えないって視覚的にわかるだろぼけ
むしろ puts が勝手に改行することのほうが、嫌い。
993デフォルトの名無しさん:04/05/16 23:58
>>991
そう書かなきゃ視覚的にわかんない無能を恥じろ
994デフォルトの名無しさん:04/05/16 23:59
>>993

だな。
>>989
static char *p, *q = NULL;
if(p == q) puts("sine");
で比較しろよぼけ

>で、うじねが出る保証ないらしいな
うじねって何だよぼけ
996デフォルトの名無しさん:04/05/17 00:01
> if(p == q)

空白あけろよ ぼけ

ここあけないやつは、たいがいろくなコード書かない
997978:04/05/17 00:01
>>993
初心者にはそう書いたほうがわかりやすいと言っているだけだぼけ

998デフォルトの名無しさん:04/05/17 00:02
1000だぼけ!!
999デフォルトの名無しさん:04/05/17 00:02
> やっぱり勝手に思い込んでるだけじゃだめですね。

っていうか、ましな本買えよ。
1000デフォルトの名無しさん:04/05/17 00:02
>>1->>999
おまいら全員ぼけ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。