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

このエントリーをはてなブックマークに追加
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 73
http://pc2.2ch.net/test/read.cgi/tech/1077095949/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
2デフォルトの名無しさん:04/03/01 22:17
【コンパイラ】
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/

【ライセンスや機能などに問題あり】
Microsot 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
>>1
モツ
>>1
Z
52getter:04/03/01 22:32
2get!!!!
記念age
6デフォルトの名無しさん:04/03/01 22:46
やらないか
>>1
8デフォルトの名無しさん:04/03/02 01:45
ここで聞いていいのかどうか分からんけど,知ってたら教えて.
シグナルハンドラ(例えばSIGSEGVとかで),setjmpでコンテキスト保存して,
シグナルハンドラを抜けずに,同じSIGSEGVを起こしたとして,
同様にsetjmpでコンテキストを(別の場所に)保存します.
これが何回か起きた後,
最後に保存したコンテキストから最初に保存したコンテキストの
順番にlongjmpしても問題なくただしく動くんだけど.
そうじゃない順番でlongjmpすると正しく動かない.
これってやっぱりシグナルのコンテキストがスタックされてるって
ことかなぁ?
longjmpする順番が任意でも正しく動く方法ってやっぱない?
9デフォルトの名無しさん:04/03/02 03:13
getcontext, setcontext, makecontext, swapcontextの
使い方誰か説明してくれ...
  ./:;:;:;:;:;:;:;/:::..   |
 /:;:;:;:;:;:;:;:/;;;;;;;;;,,,, .|
 l:;:;:;:;:;:;:;/""  ""|
 i:;:;:;:;:;/.,,ぇzv、..,::;:.|
 l:;:;:;:i′.`'':::.:;;'`::.; |
 i:;:;:/      ::. |
普通シグナルのコンテキストはスタックに積むだろう。
そこでlongjmpでスタックまで戻すんだから動きそうに無いな。
一度飛び越しちゃったらもうだめぽ。
一線超えたらもうやりほうだいよ!
>>10
これ何のAA?
15デフォルトの名無しさん:04/03/02 21:34
荒らしのおかげで前スレ埋め立て完了。
16デフォルトの名無しさん:04/03/02 21:40
> Pascalはブロックの最後に限り、セミコロン無しでも良かったはず。

そもそもこれがわかってない証拠。それを「やれやれ」だなんて名前でかいてくる
ぐらいだから「しったか君」であることは確実。

そもそもあのPascal風にするやつってのは、beginとかendとか書きたいからやる
わけではない、Cみたいに最後の文に余分なセミコロンをつけなきゃいけないのが
いやだからやるわけだ。つまり、そっちが主、beginとendにするのは従なわけ。
そんなことは20年前から常識!
17デフォルトの名無しさん:04/03/02 21:41
>>16
次スレまで持ち込むなアホ
18デフォルトの名無しさん:04/03/02 21:43
>>16
たしかに。
それに、Pacaclの場合は「省略可能」なわけではなく、そこにはいらないのだ。
断じて「省略」ではない。
たとえていうなら、Cで
return (-1);でも
return -1;でも
どっちでも同じことがおきることをもって「ここの括弧は省略可能」とは
いわんんだろ? もともといらないものをつけただけだ。
Pascalの場合の余分なセミコロンも同じこと。
Pacalは文の「間」を区切るためにつける。
Cは「文末」につける。
なので「省略可能」なわけじゃない。
>>16
はいはい、もういいよ帰ってね。
20デフォルトの名無しさん:04/03/02 21:46
おまえらPacal知らなさすぎ。
しかし明らかなネタレスにこうまで
過剰に反応するとは、まじでキモイ。
ここはCスレですよ?
20年前から常識って、年大分いってそうだが
なんか、恥ずかしい大人ですねw
>>21
スレ終了間近だったからじゃないの?
>>18
なるほど、よく分かった。ありがとう。
Pascalの話題は終了
---------------------------------------
でもまあ、煽っていた人はPascal「風」の風の意味が分からない人みたいだし。
2625:04/03/02 21:52
>>24
すまん。しかも括弧を付ける場所を誤った。
27デフォルトの名無しさん:04/03/02 21:53
> でもまあ、煽っていた人はPascal「風」の風の意味が分からない人みたいだし。

っていうか、Pascal「風」のなんたるかがわかってないから、セミコロンきにしないんだろ。
Pascalかどうかはそこできまるのだから。
28デフォルトの名無しさん:04/03/02 21:54
いいえ40年前から常識ですよ。
29デフォルトの名無しさん:04/03/02 21:56
まあ、Pascal至上主義のひとが騒いでるのはおいといて...(そのうちおさまるでしょう)。
それにしてもおまえらPascal知らなさすぎ。
void先生にも習って来いよ!
別に知らなくてもいいでしょ、そんな言語。
>>30
シーッ!
32デフォルトの名無しさん:04/03/02 22:00
まあ、知らないくてもいいやつは、しったかぶりするなってことだな。
>>32
http://pc2.2ch.net/test/read.cgi/tech/1009903617/l50
ここ行って下さいね。
まああなたみたいな人に誰も教わりたくないでしょうがw
誰も28には釣られてあげないのか・・・
35デフォルトの名無しさん:04/03/02 22:10
>>29
「にも」じゃなかった「にでも」だな。
オレはなんたって彼に直接Pascalならったもんな。ふふん!
コンパイルして実行しても、コマンドが全部終わると勝手に窓を閉じちゃうんです

初歩的な質問ですみません。どうすればいいですか?
37デフォルトの名無しさん:04/03/02 22:12
>>36
最後にgetchar();
38デフォルトの名無しさん:04/03/02 22:13
> 最後にgetchar();

ださ...
39デフォルトの名無しさん:04/03/02 22:15
>>38
はいはい。

>>36
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
40デフォルトの名無しさん:04/03/02 22:22
visual C++6.0を使おうと思うんですが、ネットで使い方載ってるサイトあります?
初心者レベルで、本当に1からみたいなやつで。
41デフォルトの名無しさん:04/03/02 22:23
マニュアル読めよ ぼけ
割れ厨は帰れ。通報するぞごるぁ。
>>20
初めて聞いたよ。詳しく教えてくれ。
どうも>>Pascal厨は真性の荒らしだったようだね。
>>44
>>16のせいで顔が真っ赤だと思うよ。
46デフォルトの名無しさん:04/03/02 22:51
>>42
 「使い方載ってるサイト」を探してると言っている様ですが、何が割れなんでしょうか。
>>46
マルチポストであらしだろう。そのくらい言われて当然。厨は帰れ。
Pascalのスレはここですか?
じゃ、C言語に戻して。
下のようなコードがあるとします(A,B,Cは適当なコード断片)。

A;
while(B) {
  C;
  A;
}

A が2回出てくるのが美しくない気がするんですが、かといって

do {
  A;
} while(B && (C,1));

だと、ちょっとひねりすぎの気もするし

while(1) {
  A;
  if(!B) break;
  C;
}

だと while(1) になるんでそれもなんだかなぁという気がします。
皆さんならどう書かれますか?
50デフォルトの名無しさん:04/03/02 23:35
>>49
for(まあなんでもいい)
a[i]=なにか;
a[i]='\0';
と同じようなものなら1番目のコードで美しくないとは思わない。
51デフォルトの名無しさん:04/03/02 23:41
>>49
for(A;B;){
C;
A;
}

for(A;B;A)
C
これで問題ないならこれで。
>>49
Aが複雑な処理なら別関数にする
>>51
どっちもAが2回出てくるわけだが
54デフォルトの名無しさん:04/03/02 23:45
>>53
どう書くか?と問うからこう書くと答えたまでだが。
500-250は250なのに-750と出力されてしまいます。
何でですか?
一体誰のせいなんでしょうか?
while (A, B) {
 C;
}
>>49
Aが3行くらい以内なら、そのまま。
それ以上なら関数化、オーバーヘッドが問題になるなら
マクロ化かな。
>>51
while(A, B)
    C;
>>16
誤爆の後始末は?
mainのほかに関数を作って、同じ名前の変数を使用するとします。
この場合、同じ名前でも別々の変数を入れることができるのはわかるのですが、
逆にmainで使っていた値を持ってきたのですが、どうやるのでしょうか
はぁ・
>>60
>この場合、同じ名前でも別々の変数を入れることができるのはわかるのですが、
言いたいことは分かるんだが、なんか変じゃないか?
別々の変数として使える、くらいだと思う。
で、.引数で渡すかグローバル変数にすればいいんだが、グローバル変数はなるだけ避けたほうがいい。
63デフォルトの名無しさん:04/03/03 00:56
>グローバル変数はなるだけ避けたほうがいい。

聞いちゃうぞ。 なんで?
何故なら60年前から常識だからだ
65デフォルトの名無しさん:04/03/03 01:27
プ
66まあお茶飲め。:04/03/03 01:46
   ∩___∩
   | ノ      ヽ         m
  /; ●   ● |        m mm  m
  |    ( _●_)  ミ  / ̄ ̄mmmm mm
 彡、   |∪|  、`\|\mmml mmmmm
/ __  ヽノ /´\ |   ̄ ̄⊂) m mmmm
(___)   /    (つ :::::::⊂)    mm m
 |       /     |   ::::::::|
 |  /\ \     \_:::::::/
 | /    )  )
 ∪    (  \
       \_)
>63
ちんまいプログラムなら何やっても問題ないが

例えば
複数のソースファイルに分割される大きなものになってくると
どこで値が書き換わってんのか分からんよーになる
で、デバッグが大変とか後でメンテが大変ってなる
68デフォルトの名無しさん:04/03/03 07:08
やーい言語 > じゃ、C言語に戻して。
69デフォルトの名無しさん:04/03/03 07:13
>>49
「while(‘」だし、
if文の内容を改行してないし。
ださすぎ。
70デフォルトの名無しさん:04/03/03 07:19
>>49
まあ「A」の部分が関数呼び出す1つならば、2回でてきてもそんなに気にならないだろう。
そもそも、その全体の構成がそうなってしまうのは、データ構造やロジックが変なのだろう。
(たとえば、Aの部分が何かをインクリメントする一連の処理で、配列が0からなのに、1から
しかつかってないとか)、つまり、その全体の処理をみなおすべきだろう。
元のソースをここにかけば、なおしてあげるのに。
71デフォルトの名無しさん:04/03/03 09:12
Cって、結局、どれぐらいのレベルがあればいいの?
おまえら、どれぐらいのレベルなの?
>>49

goto a;
while(B){
  C;
a:
  A;
}

はどう?goto 嫌? 結構きれいで分かりやすいと思うけど。
>>71
相手を十分満足させられるだけのスキルがあればいい
74デフォルトの名無しさん:04/03/03 10:03
おまえら。フリーソフトつくれるぐらいの力ある?
>>72
絶対やだ
>>72
それ、Linuxのソースだとときどき見かけるんだよな。
複雑な気分になる。
77デフォルトの名無しさん:04/03/03 11:03
いま超鬱になった出来事があったので質問させていただきます。

「mallocしたメモリは、プロセス終了時に自動開放される。(freeは不要。)」

という恐ろしい事実を知りました。
自動開放されるかされないかは、処理系依存だそうです。
自動開放されない処理系をご存知な方、その処理系名を列挙して欲しいです。
gotoに対して拒絶反応示す奴多いよな。
ちゃんと気をつけて使えば、かなり有用なのに。

まぁ、だらしない奴が使うとスパゲッティの元だから、
誰にでも勧めるわけじゃないけどさ
>>77
「開放」じゃなくて「解放」
>>77
つーかさ、
終了時に自動解放されるからって「mallocしたメモリを解放しないでいい」ことにはならないぞ。
処理上、不要になった時点で明示的に解放すべき。

そもそも処理系依存とされる手続きを免罪符にメモリ管理を怠けようとする(ように見えるが)姿勢は感心できない。
>>80
あほか。
>>78
>>72は俺もどうかと思う。
抽象化された例だと一見簡素に見えるようだが、
実際はたいていCがループ処理の本体になっていてそれなりに長く複雑になる可能性が高い。
(反面Aの処理は初期化/更新で短く単純か関数になっているかだろう)。
gotoとラベルの間にそんな処理が入るとそれだけで読みにくくなるし、
Cが短いときだけ書き方を変えるのは論外。
各論は様々だろうが俺なら for(A;B;A){C;} を選ぶ。

……ここまで書いて火付け役になってしまわないか心配になってきた
>>71
個人的中級認定はこれの意味がわかったとき

int (*(*foo(void))(void));

で、漏れもこのくらい
>>81
すまん、>>80のどこがあほなのか漏れにも分かるように教えてくれ
>>84
Googleで fj free論争
たっぷり30分は楽しむといい
>>85
それって”exitする前”にfreeすべきか否かって話じゃなかったっけ?
その後もプログラムが長時間続く可能性がある場合は違うと思うんだけど
>>77からはどっちかわからないけど
for(;;) malloc(1);
8877:04/03/03 12:34
>>80
レスありがd。

バグの発生を抑えるにはステップ数を減らせばいいという思想に基づいて、
「freeが省略できるのであれば省略する。」というのもありなのかなぁって
思っています。free省略を実践している人の意見が聞きたいです。
不毛な流れになりそうな悪寒。
オモチャを出して、片付けずに放っておいてもママが片付けてくれる。
だからオモチャを出しても片付けなくても良い。

……って言ってるのと変わらん気がする。自分で後始末しろよ、ボケがと。
91デフォルトの名無しさん:04/03/03 13:05
このスレ居心地いいな
エラー処理後に exit(1); とか書いちゃう人は
free 通ってない場合もあるよな。 
_exti(1);
my_alloc
my_free
my_allfree
とか作って自動的に管理できるようにすればいいんだよ。
プログラム終了やexitの前にmy_allfreeを実行すれば全てfreeされるように組んでだな。


と、本気で言ってた馬鹿がいたよ。
95デフォルトの名無しさん:04/03/03 14:25
atexitで登録すればいいのに
店屋物の器を洗って返すようなもんだな。
その人の品位が問われる。
つうことは返す前にmemset 0しろと?
どっちかっつーと、牛丼屋で食い終わって皿を洗って返すようなもんだな
その人の常識が問われる
99デフォルトの名無しさん:04/03/03 14:30
>>97
96へのレスか?
終了する前に全てfreeすることについて言っていると思うぞ。
100ぼるじょあ ◆yBEncckFOU :04/03/03 14:31
ええーぼるじょあが100げっとだYO
freeしない奴は駄目だって本に書いてあった。
確かにOSに迷惑かけちゃ駄目だと思う。
ま、簡単なものしか書かないんだったらいいんだと思うけど。
質問
終了前にfreeをする意味は何?
自己満足なだけ?
103デフォルトの名無しさん:04/03/03 14:34
そういえば以前このスレにexitを使う奴は駄目だと言っていた人がいたね。
>>102
ああ。そうだ。
>>102
デバッグ版のヒープマネージャに怒られないようにするため。
>>102
おいらのマネージャに怒られないようにするため。
>>102
プログラムが終了する前にfreeするのは自己満足じゃない?
自己満足というか、きっちりしてるって言うか。
freeする癖をいつもちゃんとつけてるんでしょ。
いざというとき失敗しないように。
そういう人はすごいプログラム書いてそう!

--- 以上でfree論争は終了いたします ---
>>108
終わる前にfreeして行けよ
free(0);
flee(0), exit(999);
明らかに「こいつは敢えて free していないな」と分かるような
コーディングをしている奴は、得てしてメモリ管理技法に
詳しい奴が多い。
freeすると、それだけで実行時間が倍になるんだYO
だから、freeは勘弁してほしいYO

my_freeを使うなら回避できるけど、メモリ管理コストが…
114デフォルトの名無しさん:04/03/03 16:18
仮想メモリのある環境→freeいらない
その逆は必要
エビぐらいの餌もってこい
>>114
>仮想メモリのある環境→freeいらない
これほんと?
>>116
むしろ

>その逆は必要

の方が嘘。
>>116
Windows以外の環境→おそらくfreeはいらない
古いWindows→freeしないとリソースが解放されないかもしれない。(fcloseとかもあやしい)
おさすくは必要
120デフォルトの名無しさん:04/03/03 17:07
UNIXorMACOSXならfreeはいらない。間違いない。
1000個の素数を求めるプログラムおしえてださい
122デフォルトの名無しさん:04/03/03 17:54
>>121

#include <stdio.h>
int main()
{
return printf("1000個の素数をください!!!!!!!!\n");
}
>>121
#include <stdio.h>
int IsPrime(int num);
int main()
{
   int i=2, nCount=0;
   while(nCount<=1000) {
      if(IsPrime(i)) {
         printf("%d\n",i);
         nCount++;
      }
      i++;
   }
   return 0;
}
int IsPrime(int num)
{
   int i;
   for(i=2;i*i<=num;i++) {
      if(num%i == 0) return 0;
   }
   return 1;
}
>>121
main(){
int i;
for(i=0; i<1000; i++)
printf("2\n");
}
#include <stdio.h>

int
usage(char *cmd)
{
  int i;
  printf("usage %s ", cmd);
  for(i=1; i<=1000; i++)
    printf("prime-number%d ", i);
  printf("¥n");
}
int main(void){
char*test="ABCD";
inti;
for(i=0;i<4;i++){
rotchar1(test);
printf("%s\n", test);
}
}
void swapchar(char *a, char *b){
chartmp;
tmp = *a;
*a = *b;
*b = tmp;
}
void rotchar1(char *str){
intlen = lstrlen(str) - 1 ;
inti;
charx, y;

for(i=0;i<len;i++){
swapchar(&str[i], &str[len]);
}
}
このようなプログラムを書いたのですが…
rotchar1はABCDをDABCという風にする関数ですが…
このようには成りません…
デバッガで見るとなぜか&str[i]の値がABCDという風になってしまっています。
str[1]のようにすると一文字ずつ取り出せるのではないのですか?
どなたか助言を…
>>125
何故に円記号を出力するの?
>>126
文字列リテラルを書き換えてはいけません。
>>126
>str[1]のようにすると一文字ずつ取り出せるのではないのですか?
取り出せますけど書き込めません。
>char*test="ABCD";
char test[] = "ABCD"; /* こうしましょう */
>>126
ちゃんと動くように見えるが・・・
一体お前はどういう動作を期待しているんだ?
131130:04/03/03 20:53
スマソ、定数の話だったか。。。
気づかなかった。
132デフォルトの名無しさん:04/03/03 21:16
ファイルから数値を読み込みたいんだけど、
1桁の数字なら読み込んだ文字から48を引けばいいけど、
10桁以上の数字を読み込むには、どうすればいいですか?
>>132
atoi()
>>132
そもそも10桁以上の数字を読み込んでどうしたいんだ?

>>133
10桁以上だと無理だろよ。
>>132
1文字づつ処理するかsscanf使うかfscanf使うか
136132:04/03/03 21:21
>>134
ゲームのパラメータをファイルから読み込みたいんです。
とにかく、ファイルから読み込んだ数値を
最終的にint型の変数に保持したいので、どうすれば言いか教えてください。
137133:04/03/03 21:23
>>134
>10桁以上だと無理だろよ。
なんで?
138133:04/03/03 21:25
あ、無理っぽい。
139デフォルトの名無しさん:04/03/03 21:27
桁数が足りないなら、64bitの変数でも使えばいいじゃん。
んで、_atoi64とか。
140133:04/03/03 21:27
でもintに入れるんだからatoi()でイイっぽい。
>>114
やっぱり駄目じゃない?
仮想メモリも無限じゃないし。
142デフォルトの名無しさん:04/03/03 21:33
C99なら64bit以上のlong long int型とそれ用のstrtoll関数があるね。
143デフォルトの名無しさん:04/03/03 21:43
コンパイラがC99に対応してなかったりして、
話がさらにややこしくなる予感。
>>136
で、解決したのか?
>>129
ああ、なるほどなるほど!
Thx!、また一つ勉強になりました!
int型の範囲は-2147483648〜2147483647。
だから10桁の数字をint型に格納するのは無理。

しかし本当に10桁の整数が必要なのか疑問だ。
int型の範囲は-2147483648〜2147483647。
int型の範囲は-2147483648〜2147483647。
int型の範囲は-2147483648〜2147483647。
int型の範囲は-2147483648〜2147483647。
int型の範囲は-2147483648〜2147483647。
int型の範囲は-2147483648〜2147483647。
int型の範囲は-2147483648〜2147483647。
149148:04/03/03 22:09
HSPスレのノリでやっちまった。反省。
>>147
そういう所に突っ込むと年寄り扱いされるぞ。

>>149
HSPスレ荒らすなよ。
>>150
10年後には int の標準は64ビットになるだろうが、
その時もお前は
int型の範囲は-2147483648〜2147483647
と言い張る気か?
>>152
未来の話なんかどうでもいい。
質問です。

void main(void)
{
short i[2];
fnc(i);
}

void fnc(short *i)
{
scanf("%d",&(i[0]));
scanf("%d",&(i[1]));
}

コレ、int型ならうまく動くんですけどshortでやると止まるんです。
低脳なワタクシには理解し難いので詳しく教えてくださいエロイ人(−人−)
155デフォルトの名無しさん:04/03/03 22:20
>>154
%hdだったような。
156デフォルトの名無しさん:04/03/03 22:22
列挙型(enum)は整数型ですが、char, short, int, long とかのどれに該当するのでしょう?
157128:04/03/03 22:23
>>145
漏れには感謝なしか。
>>156
>列挙型(enum)は整数型ですが
まずはそのソースを出すことが先決だな・・・
159デフォルトの名無しさん:04/03/03 22:24
>>156
独立した型
enum A型とかenum B型とか
>>157
145じゃないけど、勉強になった!
ありがとよ!
>>156
実装依存。charで実装している例もintで実装している例もある。
>>157
漏れも勉強になったよ。
>>161
char 実装の enum は 256 個を超えるとあぼーんだな。
164154:04/03/03 23:02
>>155
動くようになりました、どうもありがとうです(*゚ー^)ノ~~
165156:04/03/03 23:09
>>161
アリガトン。 やっぱ、enum = int の前提でプログラムを作っちゃあかんのね。
166デフォルトの名無しさん:04/03/03 23:16
int != long int と同じことだろ
JISより引用
「列挙子並びの中の識別子は,型intをもつ定数として宣言され,」
>>167
ISO/IEC 9899:1999 の §6.7.2.2の2にもそんなことが書いてある。
169デフォルトの名無しさん:04/03/04 00:11
enum REKKYO{ZERO,ONE,TWO}rekkyo;
rekkyoはenun REKKYO型でZEROはint型?
170169:04/03/04 00:12
s/enun/enum/
>>167
最適化なし enum = int 型
最適化あり enum ≠ int 型

な某のコンパイラは逝ってよしですか?
「それぞれの列挙型は,char,符号付き整数型又は符号無し整数型と
適合する型とする。型の選択は,処理系定義とする。」
つまり、charでおさまる列挙型があったら、最適化して、
sizeofが1になることもありうる。
>>172
何に書いてあるの?
JIS
175デフォルトの名無しさん:04/03/04 03:11
>>155
414ページにかいてありますよ。
%jd とか
%td とか
%zd とか
%hhn とか
%Lg とか
%a とかも出てて便利です! (他の本だと出てない)
176デフォルトの名無しさん:04/03/04 03:15
Javaはintのサイズや範囲に規定があるが、Cは実装依存なことぐらいは常識だろ。

C99での「最低限これだけの範囲は表せなきゃいけない」ってのだって、
char は -127〜127 だし
int は -32767〜32767
ということになってる > 規格
shortはハードディスク(%hd)、longはレーザーディスク(%ld)と覚えよう。
>>176
charは0〜255の可能性もあるんじゃなかったっけ?
それともC99からはsignedに統一されたの?
179デフォルトの名無しさん:04/03/04 13:27
int main(){
/*un*/signed char c;
c = 255;
}
これがコンパイルエラーにならないのは仕様ですか?
180ヘタレ:04/03/04 13:39
/usr/include とは別の場所にあるライブラリを使いたい時は
どうしたらいいんでしょうか?
ごちゃ〜 と沢山あるところを指定したいのです。
アホな質問ですみません。
純然たるC使いでなく、ちょこっと使わねばならないのでつ・・・
>>179
コンパイラによるし、コンパイルオプションによって
何も言われなかったり、警告されたり、エラーになったり。
182デフォルトの名無しさん:04/03/04 13:50
>>179
仕様です。
charは8bitを超える情報量を表現できてもよい。
変換後の型で元の値を表現できないとき、結果は未定義とする。
未定義の場合、翻訳環境にも実行環境にもエラー処理の義務はない。
俗に「保証なし」と言われるケースにあたる。
>>181-182
なるほど、勉強になります。
184デフォルトの名無しさん:04/03/04 14:06
C言語の検索サイトおしえていただけないでしょうか?C言語の意味がでてくるみたいな、もしくはおすすめの辞書ありましたらおねがいしますだ
185デフォルトの名無しさん:04/03/04 14:13
Linux上でC言語を使用してサーバ―クライアント間のプログラムを作っていますが、
TCP接続でクライアント間とサーバ間で接続を行い通信を行っている途中、
クライアントのプログラムを終了した場合、サーバ側で接続が切れたかどうかを
判別する方法はないでしょうか?
>>>185 タイムアウト
187デフォルトの名無しさん:04/03/04 14:23
188ヘタレ180:04/03/04 14:24
自己解決しますた。どうもスミマセン。
189デフォルトの名無しさん:04/03/04 14:26
タイムアウトってことは一定時間通信が無かったら
接続が切れたこととするってな感じで、ファイルディスクリプタを
何かのシステムコールなどに通してその返り値などから判別する
という方法はないってことでしょうか?
190デフォルトの名無しさん:04/03/04 14:27
>>187
あ、スレ違いですか、すみません。向こうで聞いてきます。
192デフォルトの名無しさん:04/03/04 16:46
> int main(){

なんだこの中括弧は
193デフォルトの名無しさん:04/03/04 17:01
>>192
Ken Thompson氏などこのスタイルだが・・・
194デフォルトの名無しさん:04/03/04 17:04
彼は「int」なんて付けませんし、空白のあけかたがちがいます。
195>>193=しったか:04/03/04 17:05
>>193=しったか
196デフォルトの名無しさん:04/03/04 17:12
そもそもカーネルのソースみれば一目瞭然じゃん
>>195
ソースは?
198デフォルトの名無しさん:04/03/04 17:27
信者のひとはリー&ペリンのはず
199デフォルトの名無しさん:04/03/04 17:28
int main()
{
}

これってまずいん?
200デフォルトの名無しさん:04/03/04 17:29
確実にコンパイルエラーだな。
ウォーニングですむんじゃない?
202デフォルトの名無しさん:04/03/04 17:30
いいえ
実際ためしてみろよ。
1行目でふぇいたるなエラーだ
全角スペース?
204デフォルトの名無しさん:04/03/04 17:33
半角は表示に反映されないのよ。
細かいこと気にしないでくれ。

int main()
{
return 0
}

これってまずいのか?
連続の半角でなければされるのか。

「:」も忘れたし。
206 :04/03/04 17:37
まずいのかまずくないのかはコンパイラ様に聞けよ春厨。
207デフォルトの名無しさん:04/03/04 17:39
> 半角は表示に反映されないのよ。

いいえ、そんなことはないですね。

204も確実エラーですね。
とっくにためしてるって。
エラーが出ないのになんでまずいのか?って聞いてるんだ。

>>179はただスタイル問題か?

>>207
更新してから書き込めよ
210デフォルトの名無しさん:04/03/04 17:42
>>208
でるでしょ > エラー
仲良く両方にすればいいだろ

int main(){
{
return 0;
}}
212デフォルトの名無しさん:04/03/04 17:43
おまえら、初歩からやりなおせ
>>210
>205を反映すればでない。

int main()
{
return 0;
}
>>192がいってるのはただ中括弧の位置の問題のことか?
だったら一々くだらない
215デフォルトの名無しさん:04/03/04 17:45
>>213
引数は?
低レベルすぎて見てられません
217デフォルトの名無しさん:04/03/04 17:48
けっきょく最初に意味わからずに、ああだこうだ悩んだ216が一番の低れヴぇる
>>215
VC、GCCのデフォルトのコンパイルオプションでは出ない。


つうかマジ中括弧の位置ぐらいでくだらなくね?
219デフォルトの名無しさん:04/03/04 17:49
出る出ない、ではなく、引数は?
>>216って俺じゃないけど、まぁいいか。
>>219
これで満足?

int main(int argc,char**argv)
{
return 0;
}
222デフォルトの名無しさん:04/03/04 17:51
>>221
charと**の間にスペースを入れてくれないと不満
勝手に入れてくれ。
224デフォルトの名無しさん:04/03/04 17:56
int main ( int argc , char * * argv )
{
return 0 ;
}
>>213
>>205を反映すれば

int main()
{
return 0:
}

だろ。
>>225
確かに、気付かなかった。

だがもういいよ。
main関数の型を省略すると、どの型として認識されるんですか?
int
229デフォルトの名無しさん:04/03/04 18:37
>>226
> 確かに、気付かなかった。

ようするに馬鹿すぎるんだよ。この程度気付かないってことは。
たった2,3行だろ?

>>227

出直してこい!

230デフォルトの名無しさん:04/03/04 18:38
>>224
> int main ( int argc , char * * argv )

なんだよその「* *」ってのは。ほかにも変なところがいっぱい
231デフォルトの名無しさん:04/03/04 18:39
こんな、たった数行書くのに、何回再提出したら済むんだ?
おまえらだめすぎ。
おまいら、じゃれあってる場合ですか?
おれはさっき血尿がでたっていうのに。
>>232
オマエもうだめだな。体がボロボロ。
数日中に倒れて、帰らぬ人となるな。
なんかよー、ここCスレだろ?
void main(void) て書くとガッするくせに int main() は放置かよ
チンパンジー同士張り合ってるようなレベルの低さだな
放置してないから荒れてるんだろ
えっint main()ってダメなの?
int main(void)にしろってことかな?
238デフォルトの名無しさん:04/03/04 18:57
チンパンはいいから放置してくれ、目障りだ
int main()でなんでいけないんですか?
マジレスのみキボンヌ
どうもこのスレにはつまらない揚げ足取り
がいますね。恐らくPascalにもうるさいんでしょうね。
問題ないよ int main(){...}

JIS X 3010における関数宣言子の定義は、
「関数定義の一部の関数宣言で並びが空の場合、関数は仮引数を持たない。
 関数定義の一部でない関数宣言の並びが空の場合、仮引数の個数及び型の情報を
 もたない」(6.5.4.3)

6.3.2.2において
「実引数の個数が仮引数の個数と一致しない場合、その動作は未定義とする」
あれ?C言語ではmain(void)でvoidは規格では省略できないんじゃなかったっけ?
C++からvoidを書かなくても良くなったとか聞いたことあるような気がするけど…
漏れのコンパイラでコンパイルできるから
それでいいんだよ!
gcc -std=c89でもOKだよ。
逆に何だと通らないの?K&R以外に。
245226:04/03/04 20:37
>>229
煽りがラウンジレベルだな。

>>230
俺じゃねぇ。
246226:04/03/04 20:38
>>240
>どうもこのスレにはつまらない揚げ足取りがいますね。
全くだ。
247デフォルトの名無しさん:04/03/04 20:46
ていうか>>224はネタでしょ
それを理解できない>>230がアホ
248デフォルトの名無しさん:04/03/04 20:49
なんで荒れてるんだ?
ヒマなんだろう
250デフォルトの名無しさん:04/03/04 21:04
PGってくだらんことにこだわるなと思った。
じゃ、printfの動作は未定義か
PGって暇なんだな
やーい
ヒマグラマー
関係ないけどPG、SEって楽なもんだよ。
マ板は勉強・職務がいかにも大変そうに見えるけど
そんなに大したことじゃない。
彼らは大げさすぎるんだよ。
>>254
無職は黙ってろ
>>255
マ板の嘘を真に受けてないかい?
忙しさの度合いが一定している奴は会社に手厚く守られたSPFだ
258デフォルトの名無しさん:04/03/04 22:07
なんで、Cに//が出てくるの??
基本的に行の制約がないのがCなのに。。
>>258
プリプロセッサはどうする?
260デフォルトの名無しさん:04/03/04 22:19
>>258
人間には都合がいいから。
コメントなんてコンパイラには無意味なものだし。
261デフォルトの名無しさん:04/03/04 22:57
>>255
おっさん、反応しすぎw禿げるなよ
文字を文字列の終端にくっつける関数ってあったっけ
263デフォルトの名無しさん:04/03/04 23:36
strcatでいいか?
>>263
文字列じゃなくて、文字

char ch[2];

ch[0] = *p;
ch[1] = '\0';
strcat(buff, ch);

いまこうやってるんだけど、都合のいい関数ない?
265デフォルトの名無しさん:04/03/04 23:40
Enterを押さないで、リアルタイムに文字を入力
する方法ってありますかね?

たとえば「a」ってキーボードを押したら、Enter無し
で直接メモリに入力されるような感じの方法

わかる方よろしくおねがいします
質問!

int a = 4;
if(a < 3 && func(a)) return 1;
else return 0;

みたいなプログラムがあったとします。
ここで、func()は適当な関数です。
条件式の最初(a < 3)で、もうこのifは偽ですが、
それでもfunc(a)は実行させるんですか?
それとも、実行されずにreturn 0に飛ぶのでしょうか?

後、もし実行させずにreturn 0に飛ぶとしたら、
if(a < 3 && func(a)) ではなく、if(func(a) && a < 3) と書いたときは、
func(a)は実行されるのでしょうか?
267デフォルトの名無しさん:04/03/04 23:43
>>266
実行されない。デバッガ使え
268デフォルトの名無しさん:04/03/04 23:44
>>266
下の場合は実行される
>>267
どうもです。
デバッガ?ハイデッカーなら聞いたことある。
調べてみますわ。
270デフォルトの名無しさん:04/03/04 23:46
>>269
ちなみに>>267=268な。
まとめると上は実行されない、下は実行される。
オープンソースのゲームの質問です。

ttp://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/hengband/
から"Download tarball"をダウソして、Win98環境で"Bcc -tCW main.c"やってみたんだけど
「シンボル"_main"が未解決」と出てしまうです。

ソース見るとmain()はちゃんとあるんだけど……Bcc今まで使ってなかったから
設定が良く判りません。

誰かアドバイスください……
>>270
サンキューベイベー!
>271
何故良く判らないのに-tCWをつける?
>271
ソースにちゃんとしたmakefileもセットでついてるべさ。悩む必要がそもそもなし。
引数って同時に複数持っていけるの?
276デフォルトの名無しさん:04/03/05 00:35
>>275
複数の引数を持つ関数なんて、標準関数だけでもたくさんあるぞ・・・
277デフォルトの名無しさん:04/03/05 00:49
ここはCフェチのチャットルームですね
>>264
配列に直接書き込めばいいんじゃないの?
>>264
sprintf(buff, "%s%c", buff, *p);
>>279
それCの仕様として大丈夫なのか?
なんかやばそうな雰囲気があるんだが...。
strcat(a,b) って sprintf(a, "%s%s", a, b) だろ?
>>281
たとえば、aとbが逆だった場合、
#include <stdio.h>
int main()
{

____char a[] = "abc";
____char b[10] = "def";
____sprintf(b, "%s%s", a, b);
____printf("%s\n", b);
____return 0;
}
結果は(処理系にもよるだろうけど)"abcdef"にならない。
だから、sprintf(a, "%s%s", a, b);は「たまたま」うまくいくけど
Cの仕様的にはまずいんじゃないかな。
283100:04/03/05 02:19
>282 ハァ?aとbが逆だった場合だぁ?

strcat(a,b) っつってんだろがヴォケ
>>282 は釣りだろ
> sprintf(buff, "%s%c", buff, *p);
やばそうだな。
sprintf(s0, "%s", s1) が
while ( *s0++ = *s1++) ;
みたいに実装されていると未定義になる。
286デフォルトの名無しさん:04/03/05 03:21
>>281
strcat(a,b);はsprintf(a+strlen(a),"%s",b);
>279
 sprintf(buff+strlen(buff), "%c", *p);
288デフォルトの名無しさん:04/03/05 03:32
> なんで、Cに//が出てくるの??

常識です。

> 基本的に行の制約がないのがCなのに。。

そんな特徴はもともとどこにもありません。
そんなんだったら文字列も気楽に書けないぞ!
289デフォルトの名無しさん:04/03/05 03:36
> 質問!
> int a = 4;
> if(a < 3 && func(a)) return 1;
> else return 0;

インデント直してから出直してこい。
>>288
>そんな特徴はもともとどこにもありません。

for(;;) 文



for(
;
;
)


も同じに扱う事を行の制約がないというんだヴォケ
291デフォルトの名無しさん:04/03/05 03:38
思ったんだけど、ch[0] = *p;なんてやっているくらいだからきっとpは文字列をさしているんだよね。
もしそうならstrncat(buff,p,1);ってやればいいんじゃないかな。
pの先がNUL文字で終わっていないんだろ?
293デフォルトの名無しさん:04/03/05 07:45
よう、おれscanf極めたよ。お前らscanfの使用完璧にわかってるか?
俺はついにscanfの謎をといたよ。
scanfのなぞ? 安全に使うのは不可能って話か?
295デフォルトの名無しさん:04/03/05 07:52
ただのjokeでしょ。
scanfにこだわるやつは結局厨。
実際Cでscanfを使う用事は皆無と言っていい。
使いもしない関数を気にするやつは、scanfを使っている本で入門した馬鹿だけ。
296デフォルトの名無しさん:04/03/05 07:54
> も同じに扱う事を行の制約がないというんだヴォケ

そういうところが一部にあるだけ。Cにそんな特徴があるわけではない。
Cとしてそういう特徴があるわけではまったくない。Cがそうであるという証拠はどこにもない。
297デフォルトの名無しさん:04/03/05 07:54
>>290

forという関数かも ;-)
298デフォルトの名無しさん:04/03/05 07:56
>>292
pの先じゃなくて、pが指すアドレスから順に文字列としてたどったところに、ですね > ナル文字で終わっていない。

でもまあ、256分の1の確率で偶然ナル文字があるかも ;-)

299デフォルトの名無しさん:04/03/05 07:59
>>297
絶対にあり得ない。
300デフォルトの名無しさん:04/03/05 08:04
単純にstrcat(buf, p)して、何文字が先にたまたまナル文字がある確率にかける ;-)
(bufで確保してるサイズがつきる前に)

って、「文字を足したい」とかいいつつ、実際には、その後ろに'\0'も入れたいのよね?
(そうじゃないと、その後、どこまでの長さかわからなくなるので)
じゃあ、現状のやりかたで問題ないのでは?
もしくは
n = strlen(buf);
buf[n] = *p;
buf[n + 1] = '\0';
301デフォルトの名無しさん:04/03/05 08:05
>>299
じゃあ、空白あけろよ ぼけ
302デフォルトの名無しさん:04/03/05 08:09
>>292
strncatだから別に'\0'で終わっていなくてもいいんだが。
303デフォルトの名無しさん:04/03/05 08:11
でも、そうしたら、足したあとは文字列じゃなくなっちゃうよね。
304デフォルトの名無しさん:04/03/05 08:11
>>303
それはstrncpy
strncatは必ず'\0'を付け加える。
305デフォルトの名無しさん:04/03/05 08:13
>>303
っていうか、そもそもbufが文字列じゃなかったりするんじゃないかな。
char buf[256]; ぐらいになってて、

buf[0] = 'a';
buf[1] = 'b';
buf[2] = 'c';
ぐらいになってても、buf[3]の内容が\0である保証がなければ、
strcatやstrncatは使えないってことを、元の質問者は理解していないだろう。
306デフォルトの名無しさん:04/03/05 08:15
>>305
>>264をよく読めよ。もしbuffが'\0'終端していなければstrcatは使えない。
307306:04/03/05 08:16
あ、俺も305を最後まで読まなかった。
いくらなんでもそれはないと思うぞ。
308デフォルトの名無しさん:04/03/05 08:16
>>302
どこにstrncatだって書いてあるの?
このスレほど、罠の沢山砒素んでいるスレも珍しいですね。
310デフォルトの名無しさん:04/03/05 08:26
309は「なんだかおれのわからないことばかり話しているぞ、でも何か書きたい」と
思っただけの馬鹿。
308の目は節穴
312デフォルトの名無しさん:04/03/05 08:29
> ch[0] = *p;なんてやっているくらいだからきっとpは文字列をさしているんだよね。

この仮定はなりたたないだろうなあ。でもまあ、そのあとにstrncatを使わない理由にはならないけど。
>>312
成り立たなくても*pができるようだから、一文字だけのstrncatは問題ないね。
314313:04/03/05 08:33
あー、もしかしたらpはint *かもしれないから問題ないとは言い切れないか。
こんにちは。質問させてください。

ターミナルにncursesで画面を描画するプログラム
をつくっています。そのなかでプレゼンのように
A→B→Cと画面を3秒置きに変えたいのですが、

noecho();
A();
sleep(3);
B();

では、sleepしている最中にエコーバックが働きます。
キーボードバッファ自体はあとから捨てればいいので
問題ないのですが、sleep中に文字がずらずら出るのは
見苦しい上に、エンターを押すと画面がスクロール
していってしまいます。エコーバックさせずに
sleepと同等の処理をさせるにはどうしたらいい
でしょうか?助言お願いいたします。m(_ _)m
>>315
このスレの範疇では無理だと思う。

UNIXスレ
http://pc2.2ch.net/test/read.cgi/tech/1055110889/

犬スレ(見当たらない)

Windowsスレ
http://pc2.2ch.net/test/read.cgi/tech/1077470361/

あたりか、UNIX板、犬板あたりで聞いてみては?
317264:04/03/05 11:29
わ・・てっきりスルーされたかと思ってたのに。。

説明不足で申し訳ない、確かに p は文字列を指しています。(操作用として)
strncat でいけるっぽい。

どうもお騒がせしました、みなさんありがとう(つд`)
>>263でstrcatを指摘された時点でstrncatに気付くべきだ
319デフォルトの名無しさん:04/03/05 14:47
プリプロセッサについて
引数から文字列を定義するマクロって定義出来ないのでしょうか?

スクリプト用の変数を定義するのに

外部から見せる変数の定義用
#define _ExtLab(lab) {&lab,"lab"} ,

実際の定義用
#define _ExtLab(lab) double lab ;

のような定義として、一つの定義ファイルをincludeで使いまわせるようにしたいのです。

が、最初の 
#define _ExtLab(lab) {&lab,"lab"} ,

 _ExtLab(test) -> {&test , "lab" } ,
と、文字列部分が"lab"になってしまいます。
320 :04/03/05 14:57
#define _ExtLab(lab) double #lab ;

よーわからんが

 _ExtLab(test) -> {&test , "test" } ,

こうしたいのであれば

#define _ExtLab(lab) double #lab ;

でえーんとちゃう?
321319:04/03/05 15:04
スミマセン

例えば
#define _ExtLab(lab,name) {&lab,name} ,
として
_ExtLab(test,"Test")

とするのを、labとnameが同じなんだからlabだけで済まないかなという事なんです。


>>321
(#・∀・) <だから、やってみろよ
せっかく320が # で文字列化する例を出してるだろ
>>321
要はこうしたいんだろ?

#include <stdio.h>
#define HOGE(test)printf("%d\n%s\n", test, #test);
int main()
{
int test = 5;
HOGE(test);
return 0;
}

結果
5
test
324319:04/03/05 15:26
>>322-323
おお! 出来ました。 ありがとうございます。
325デフォルトの名無しさん:04/03/05 18:09
>>321>>322>>324
おまえら、こんなのどこで習ったの?入門書にのってねーぞ。
何の本よんでるんだ、おまえら?
>>325
>>324は分かんなかったから聞いたんだと思うが
327デフォルトの名無しさん:04/03/05 18:15
ここにくるたびに、俺のCのふがいなさを実感する。
望洋、久雄等の、本を、何冊もよんで勉強してるんだが、、
まじで、おまえら、どこでそんなスキルみがいてんの?
>>327
釣りかもしれんが、マジレスすると仕事で。
>>327
釣りかもしれんが、マジレスすると体育館で。
>329
つまらん!お前のレスはつまらん!
331難しい!:04/03/05 18:32
このプログラムに最優秀成績者と最低成績者をディスプレイするように
変更して下さい。
#include <stdio.h>
double average(int a, int b, int c);
char computegrade(double a);
void printresult(char* k, char g);
void main(){
int t1, t2, t3;
char* name; char g; double d; int i;
for (i=0; i<3; i++){
printf("what is your name:");
scanf("%s", name);
printf("%s Enter your three tests\n",name);
scanf("%d %d %d", &t1, &t2, &t3);
d=average(t1, t2, t3);
g=computegrade(d);
printresult(name, g);
}}
double average( int a, int b, int c){
return (double)(a+b+c)/3;
}
charcomputegrade(double a){
char g ='F';
if (a>=90) g='A';
else if (a>=80) g='B';
else if (a>=70) g='C';
return g;
}
void printresult (char* k, char g){
printf("%s your grade is: %c\n", k, g); }
>>331
宿題は宿題スレへ。
>>331
仕事中だから家帰ったらやってやるよ。
334難しい!:04/03/05 18:41
>>333
有難うございます。
期待して待っています.
>>331 = >>334
マルチは氏ね。
友人と二人で
『成功率Aの事柄をB回行い、少なくとも一度は成功する確率』
を計算するプログラムを作ろうと言う事になり、書き上げてはみたのですが
うまく動かず、おかしい点も見つけることができません。
以下に内容をコピペさせていただくので、宜しければ原因を教えていただけないでしょうか?


(やりかた含め、随所が稚拙なのは手探りで作ったがゆえのものです……申し訳ない。
 宿題でない証明になるでしょうか?)
{
double a,b,c,d,e,f,answer,i;
printf("確率の全体数を入力してください\n");
scanf("%lf",&b);
printf("そのうち、当たる確率を入力してください\n");
scanf("%lf",&a);
printf("試行回数を入力してください\n\n\n");
scanf("%lf",&c);

d=a/b;/当たる確率を小数点に変更、代入*/
e=1-d;/*1から確率を引いて、”当たらない”確率を代入*/
answer=e;/*自乗させたいので二つ用意*/

for(i=1;i<=c;i++);
{
answer=answer*e;/*試行回数ぶん、”当たらない”確率を掛け続ける*/
}

f=1-answer;/*1からanswer=”試行回数の間、一度も当たらない”
             確率を引く。=残るのは”少なくとも一度は当たる確率”*/

printf("少なくとも一回は当たる確率=%.3lf",f);  /*答えが表示される……はず*/
}


/*ちなみにこれを実行すると、数字がなんであろうが答えは0.750になってしまいます*/
皆さんちょっと聞きたいことがあるのです。
Windows環境IntelPen3にてプログラミングを行っています。
unsigned long型は32ビットですよね?
unsigned char型は8ビットですよね?
そうすれば、
unsigned char test[32];
とすれば、このtestは32*8で256ビットということになりますよね?
それでこのtestを同じくunsigned char型の
unsigned char test2[32]とXORをとりたいので。
いったんunsigned long型に変換してXORをとることにしたのですが…

for(i=0;i<7;i++)
((unsigned long*)test)[i] ^= ((unsigned long*)test)[i];

0〜7まで繰り返してますが、これは
256(test, test2のビット数)/ 32 = 8 と出てきたので、7にしました。

ところが、この0〜7を増やしてみると、何ら問題なく動いてしまいます
私の考えでは256ビットの変数をオーバーして読み込もうとしているので
アクセスバイオレーションが出て当然と思っていたのですが…
これはいったいなぜなんでしょう?私の考えが根本的に間違っているのでしょうか?
だって256ビットの変数をunsigned long(32ビット)で読み込んだら8回で256ビット
まで達してしまいます、それをオーバーして読み込めるということはいったい
どういうことなんでしょうか?
大変わかりにくい文章かもしれませんがどうぞよろしくお願いいたします。
{
double a,b,c,d,e,f,answer,i;
printf("確率の全体数を入力してください\n");
scanf("%lf",&b);
printf("そのうち、当たる確率を入力してください\n");
scanf("%lf",&a);
printf("試行回数を入力してください\n\n\n");
scanf("%lf",&c);

d=a/b;       /当たる確率を小数点に変更、代入*/
e=1-d;       /*1から確率を引いて、”当たらない”確率を代入*/
answer=e     ;/*自乗させたいので二つ用意*/

for(i=1;i<=c;i++);
{
answer=answer*e;    /*試行回数ぶん、”当たらない”確率を掛け続ける*/
}

f=1-answer;     /*1からanswer=”試行回数の間、一度も当たらない”
             確率を引く。=残るのは”少なくとも一度は当たる確率”*/

printf("少なくとも一回は当たる確率=%.3lf",f);     /*答えが表示される……はず*/
}


/*ちなみにこれを実行すると、数字がなんであろうが答えは0.750になってしまいます*/
/*見づらかったため貼りなおさせていただきました、申し訳ないです*/
340デフォルトの名無しさん:04/03/05 19:37
>>338
どちらもtestなのは書き間違いか?
Pentium3なら大丈夫かもしれないが、char配列をlong配列として扱うのはやめておけ(逆は問題なし)。

猿スレでも出ていたけど、多少ならばアクセス違反にならなくても不思議じゃない。
341デフォルトの名無しさん:04/03/05 19:39
>>339
for(i=1;i<=c;i++);の後ろにある【;】をはずせ
342338:04/03/05 19:42
>>多少ならばアクセス違反にならなくても不思議じゃない。
ということは、他の変数外まで進出してXORしてるということですか?
実は暗号化のプログラムなんですが、暗号化して複合化してもまったく問題なく
平文→暗号化→複合化、できています(MD5ハッシュで確認しました)。
日本語にかなり問題があると思われ。
恐らく↓のような感じでいいと思うが。
#include<stdio.h>
int main(void)
{
int a,b,c,i;
double d,e,f,answer;
printf("確率の全体数を入力してください\n");
scanf("%d",&b); //回数なんだから整数でいいでしょ。
printf("そのうち、当たる回数を入力してください\n"); //確率ってへんぽい
scanf("%d",&a); //これも
printf("試行回数を入力してください\n\n\n");
scanf("%d",&c); //これも

d=(double)a/b;// キャスト。
e=1-d;/*1から確率を引いて、”当たらない”確率を代入*/
answer=e;//別にいらない

for(i=1;i<c;i++)//;つけちゃだめ。i<=0だと一回少ない。
{
answer=answer*e;//e=e*eでいい。
}
f=1-answer;
printf("少なくとも一回は当たる確率=%.3f",f);/*答えが表示される……はず*/
return 0;
}
344デフォルトの名無しさん:04/03/05 19:53
ハッシュテーブルにチェイン法でデータを挿入する関数なんですが
mallocの行で「void* からcell*に変換できません」とコンパイルエラーなります。
なぜでしょうか?
struct cell {
char *s;
int data;
struct cell *next;
};
int insert(char *s, int i)
{
if(search(s) != -1)
{
printf("挿入済みデータです\n");
return 0;
}

struct cell *p;
p = malloc(sizeof(cell));

p->next = table[hash(s)];
table[hash(s)] = p;
p->data = i;
p->s = s;
return 0;
}
>>343
いやごめん
>>//e=e*eでいい。
全然よくなかった。
sizeof(struct cell)でないの。
347デフォルトの名無しさん:04/03/05 19:55
>>344
C++としてコンパイルしているだろ?
Cとしてコンパイルするか、p=(cell *)mallocとキャストしろ。
348デフォルトの名無しさん:04/03/05 19:56
p = malloc(sizeof(cell)); /* ここを */
P = (cell *)malloc(sizeof(cell)) /* こうする? */
349347:04/03/05 19:57
あとCとしてコンパイルするならcellはstruct cellに。
350344:04/03/05 19:57
>>346
sizeof(struct cell)でも同じエラーとなりました。
>>344
stdlib.hをincludeしてないんじゃないの?
352344:04/03/05 20:01
>>347
キャストしたらコンパイルできたんですが
c++だとなぜキャスト明示しないとダメなんでしょうか?
>>352
そういう仕様だから。
上位互換なんて言われているけど、完全じゃない。
>>344
怒んねえから正直に言ってみな。
拡張子どうなってる? 省略しただろ。
355344:04/03/05 20:05
>>353
そうなんですか。
有難うございます。
>>354
cppです。
>>336
とりあえず標準関数の pow を使うようにすると悩まされずにすむぞ。まあガンガレ
#include <stdio.h>
#include <math.h>
int main(void) {
int n;
double p, ans;
printf("成功確率を入力して下さい = ");
scanf("%lf", &p);
printf("試行回数を入力して下さい = ");
scanf("%d", &n);
ans = 1 - pow((1.0 - p), n);
printf("少なくとも1回は成功する確率 = %f", ans);
return 0;
}
357デフォルトの名無しさん:04/03/05 20:06
>>343
お前は人に教えられるレベルじゃない気がするんだが...
いやなんとなく。
>>355

そっか、cppか。

p = malloc(sizeof(cell));

この一文な、CではOKで、C++ではエラーなんだ。
おめーわ今、C++を使用中だ。わかるか?
>>357
根拠キボンヌ。
360344:04/03/05 20:11
>>358
そうなんですか!
キャストしたら甘くいきました
ありがとうございました”
>>360
つーか、Cを憶える気なら拡張子cppはやめれ、cに汁。
そのままだと、この先そんなんばっかりだぞ。
362デフォルトの名無しさん:04/03/05 20:13
>>358
でも全体を見渡すとCでもエラーなんだよなw
>>360
そうか、甘かったか・・・
364344:04/03/05 20:14
>>361
そう致します。
>>357
言いたい事はなんとなく分かる
>341
こんな所かよ! と友人と爆笑しました。
計算ライフを楽しんでおります、ありがとう

>343 >345
よくわかりませんが丁寧に教えていただいて感謝しております。

>356
powですか……やっぱり短く纏める手法があるんですね。
勉強になります。ありがとう。
367338:04/03/05 20:36
>char配列をlong配列として扱うのはやめておけ
とアドバイスいただいたのですが、char配列をint配列として
扱うのはOKですか?
どいつもこいつもデバッガの使い方を知らんのか
369343:04/03/05 20:39
すいません。今見たら本当に自分が
バカだとわかりました。
逝ってきます。
>>367
駄目。
371338:04/03/05 20:41
>>370
ちょっと待ってください、じゃどうやってXORすればいいんでしょう…
やってはいけない理由は何なんですか?
>>371
普通にやれ
何でcharでXORしないんだ?
さぁ?
375338:04/03/05 20:48
>>373
32回もループすると速度が落ちそうだからです
376デフォルトの名無しさん:04/03/05 20:50
>>371
http://www.pro.or.jp/~fuji/mybooks/cpro/cpro.4.3.1.html
ここの下の方に理由が書いてあるよ。
Pentium3なら整列していなくても大丈夫だろうけど。
ちなみにmallocが返すアドレスは全ての型に合うようにアラインメントされているから問題ない。
377338:04/03/05 20:53
どうもありがとうございましたm(_ _)m
素直に32回xorすることにします
>>375
大筋は省くがポインタのキャストで型をごまかすほどの理由には足りないな
ループのオーバーヘッドが嫌なら展開しよう
379338:04/03/05 21:02
何度も何度も申し訳ないのですが。
charとcharなら一つずつXORしても結果は同じでしょうが。
char[32]とint型だと、同じ8ビットにしてxorしてやらないと結果が異なって
しまいますよね?
やっぱりキャストで型をごまかさないといけないんじゃ…
380デフォルトの名無しさん:04/03/05 21:04
>>379
「intやlongをcharとして」なら問題ないってば。その逆が駄目なの。
いや、そもそもcharとintのXORを取りたいって言われても
どんな演算を期待してるのかわからんのだけど。
(元の話はchar同士だったよな?)
どこの部分のビットと取りたいか指定してあればわかるが
char[8]とintってことだろう。
338の環境ならchar[4]だろう。
384338:04/03/05 21:15
>>381
char[32]とint型だと、同じ8ビットにしてxorしてやらないと
ああごめんなさい
char[32]とint型だと、同じ32ビットにしてxorしてやらないと
ですね、ごめんなさい
385338:04/03/05 21:32
皆さんどうもありがとうございました。
解決いたしました
サラリーマン刑事面白かったわー

やっぱり西村雅彦出演のドラマはおもしれえわ
>>386
そうかい?
でもスレ違いだよ。
'xxxx.exe': 'C:\WINDOWS\system32\ntdll.dll' を読み込みました。シンボルが読み込まれていません。
'xxxx.exe': 'C:\WINDOWS\system32\kernel32.dll' を読み込みました。シンボルが読み込まれていません。
プログラム '[4068] xxxx.exe: ネイティブ' はコード 0 (0x0) で終了しました。

と、VCで出るのですが、どうしたらよいですか?
便器を洗う
しばらく洗ってなかっただろ?
390デフォルトの名無しさん:04/03/05 23:57
> >>多少ならばアクセス違反にならなくても不思議じゃない。
> ということは、他の変数外まで進出してXORしてるということですか?

2歩までならボール持ったまま歩けます。

ゴールしたも3秒以内ならOK
391デフォルトの名無しさん:04/03/06 00:06
1バイトずつxorしているソースの例 > http://www.vector.co.jp/soft/dos/util/se000901.html
392デフォルトの名無しさん:04/03/06 00:11
>>391
本当にあそこはなんでも載せてもらえるんだね・・・
393デフォルトの名無しさん:04/03/06 00:14
もっと簡単なcat.exeとかも!
394デフォルトの名無しさん:04/03/06 00:30
でも、このxor.exeのソース、以前ぱくらせてもらいました ;-)
(某ソフトで使うときに検証がめんどうだったので、うごいてるやつの初期化された配列が
ほしかったのだった)
懐かしいなぁ、おい。
.FINとかsetmode()とか、涙が出てきたよ。
396sage:04/03/06 01:47
>>388
気にしなくてよい。
kernel32.dll等をロードしたがシンボリックデバッガでデバッグできないってだけ。
397デフォルトの名無しさん:04/03/06 08:43
>>395
たしかに。
むかしはsetmode使わないといけないバグがありましたね。MSCに。
398デフォルトの名無しさん:04/03/06 09:38
なぁ、入門書おわったら次なにすればいいんだ?
399デフォルトの名無しさん:04/03/06 09:39
でたー
400デフォルトの名無しさん:04/03/06 09:39
>>398
何もしなくていいです。
>>398
もう卒業ですので、フリーソフトでも作ってください。
402デフォルトの名無しさん:04/03/06 09:46
>>400
息もしなくていいです。
オナニーして一息ついてください
404デフォルトの名無しさん:04/03/06 09:55
>>398
「次は何を...」ってきくやつがいるっていう時点で、その本は「だめ本」だという証拠!
その本の名前を言えよ! ソレでこそ有用な情報だ。
>>404
本には読者を未来へと導く使命があるかのような言い方だな。
冷たく突き放すほうがいいんだよ。
いやん、何度も突いてくれなきゃ寝かさないから。
もうあきたんだよ
>>404
無能な奴は何読んだって同じ事言うよ。
「読んだ」っていってもページめくっただけで、
中身が頭に入ってないからな。
本も読み手を選ぶ
読み手も本を選ぶ
本は生き物ぢゃ無いから選ぶことはできませぇ〜ん
春だな。
少なくとも、「こういうソフトを作りたい」
という目標があってその上で言語を学んだほうがよくないかな?
漠然とC言語を学んでもむなしさが積もってゆくだけだと思うが
>>411
コーダに文学的センスはいらないが
こうして自然言語でやり取りしてる時は
やっぱり浮いてるなあんた
SHやPerlは10行ぐらいでもそこそこ使えるプログラムが書ける。
CやC++だと10行じゃ大したものは書けないからなあ。最初の
段階である程度我慢を強いられるわけだ。
>>414
まぁまぁ。季節の風物詩と思って。
>>396
レスサンクス!
これできないとどうなるんですか?
>>417
できなくてもアプリのデバッグにはあんまり関係無いと思うんだが。
>417
MSが作ったDLLの中身をソースレベルでデバックできない
つまり、気にすんな
420デフォルトの名無しさん:04/03/06 21:33
> コーダに文学的センスはいらないが

楽譜のエンディングのところに書いてあるあれですね! (としかおもわないぞ。ふつう)
421デフォルトの名無しさん:04/03/06 21:36
國府田マリ子?
422デフォルトの名無しさん:04/03/06 21:36
>>411
> 本は生き物ぢゃ無いから選ぶことはできませぇ〜ん

でも、その割に怖がっている人がいると思うが。
423デフォルトの名無しさん:04/03/06 21:37
刷る際、怖がって紙が逃げるとか。
タバス
>>415
七行プログラミングスレでは、C/C++もそこそこ活躍しているようだが、
確かにPerlの表現力にはかなわない…
>>422
価格で読み手を選ぶ。




・・・なんで丸善はあんなに高いんだYO・・・
>>426
いい事いうなあ。確かにそうだ。
無論、買う方はそれなりに高い本を買う事もできるはずなので、
読み手の財布の具合というより、
読み手の習得への覚悟にかかってくるよな。
>>420
英吉利の爵位もったオサーンじゃね?
いや、むしろレッドツェッペリンのアルバムだろうな。。。
C言語はどっちかっていうと、クリームだろ
431デフォルトの名無しさん:04/03/07 01:18
クイックソートの時間計算量っていくらだっけ?
432デフォルトの名無しさん:04/03/07 01:20
スレ違い
433デフォルトの名無しさん:04/03/07 02:19
>>432
どこで聞けばいい?
435デフォルトの名無しさん:04/03/07 04:42
>>430
やーい > 言語
436デフォルトの名無しさん:04/03/07 04:48
435は「C言語」に突っ込んでいるつもりなのかな。
437デフォルトの名無しさん:04/03/07 04:51
TCP/IPの技術者は、RJ45のソケットみて勃起するそうです。
漏れはげんなりする。
俺はtcpdumpで逝けるYO
mac層は萌えるよな
いや、萌えるのはむしろプレゼンテーション層だな。
萌えるのはアプリケーション層で流れてる動画データだろうが。
>>442
もまいらアフォか信号が燃えるわけねえだろ
燃えるのは物理層にきまっとろうが
機械語で萌えろ
0と1に萌えろ
>>431
最良で O(N logN)
最悪で O(N^2)
>>446
平均は?
>>447
普通は O(N logN) と考えてええんでない?
>>446
平均で O(NlogN) じゃなかったっけ?
ねえおにいちゃんたち、標準ライブラリ関数の実装って処理系依存なの?
あたりまえだろ
>>449
最良も平均も O(N log N)だよ
C言語についての質問が少ないなぁ
454デフォルトの名無しさん:04/03/07 17:30
やーい > 言語
そういえばジョブスっていまなにやってるの?
456デフォルトの名無しさん:04/03/07 17:55
【やったね】C#最強伝説 第2章【ゲイツ】
http://pc2.2ch.net/test/read.cgi/tech/1070469339/
>>452
ランダムデータならそうだろうけど、
極端に偏ったデータを扱う場合には
平均が悪くなることもあろうて。
実際、極端に偏ったデータを扱うケースがよくあるしな。
>>457
それは「平均」ではなくて「最悪」
そんなネガティヴな思考でどうする。
最悪こそ最良と考えよ。
>>459
?
スクリプト荒らしuzeeな
そろそろ削除依頼いくか?
VCで、現在どの変数にどんな値が入ってるかリアルタイムで分かるようにするにはどうやるんですか?
464デフォルトの名無しさん:04/03/07 22:25
デバッガ
465デフォルトの名無しさん:04/03/08 03:51
hoge.log を 出力しつづけるプログラムつくってるんですが、
このhoge.logは、別のプログラムが吐き出すログが、ガンガン増えつづけています
逐次表示する部分を

/* ファイルチェック */
if ((fp = fopen(fileName,"r")) == NULL){
  printf("%sがOpen出来ません\n",fileName);
  return (-1);
}

/* ファイルの終端から読むため終端へ移動 */
fseek(fp,0L,SEEK_END);

while(1){
  if((feof(fp)) != 0){
    fgets(buf,sizeof(buf),fp);
    puts(buf);
  }
}

このように書いてみたんですが、ログが増えても表示してくれません。
どのようにしたら、いいでしょうか?
466デフォルトの名無しさん:04/03/08 04:05
>>465
fseekで末尾に移動してもfeofを呼んでもEOF指示子はセットされないから、いくらループしようともif((feof(fp))!=0)が真になることは決してない。
というかfseekが成功したらEOF表示子はクリアされる。
468465:04/03/08 04:24
>466-467
ありがとうございます
469デフォルトの名無しさん:04/03/08 04:33
while(1){
  fgets(buf,sizeof(buf),fp);
  if(strcmp(buf,"Linux") !=0 && strcmp(buf,oldbuf) !=0 ){
    strcpy(oldbuf,buf);
    puts(buf);
  }
}

システムに負担がかかるのかは判りませんが、常に読みつづけて、条件を満たしたら表示するようにしたらうまくいきました。
何故かファイルの最後を読んで表示すると、Linuxという文字が出るのは謎ですが・・
>>469
これは?
while(fgets(buf,sizeof(buf),fp) != NULL) {
 if(strcmp(buf,"Linux")==0) {
  puts(buf);
 }
}
471470:04/03/08 07:06
スマンカッタ
while(1){
 if(fgets(buf,sizeof(buf),fp) && (strcmp(buf,"Linux")==0)){
  puts(buf);
 }
}
472デフォルトの名無しさん:04/03/08 07:40
>>470-471
どもども、一瞬で終了するから考えちゃいました

いままでのだと
いきなりシステムの50%をCPUがくいだしたので、fgetsの前にsleep(1) をいれたら、2〜3%に落ち着きました。

473デフォルトの名無しさん:04/03/08 08:19
> スマンカッタ
> while(1){
>  if(fgets(buf,sizeof(buf),fp) && (strcmp(buf,"Linux")==0)){

空白あいてないし
474デフォルトの名無しさん:04/03/08 17:55
C言語ドスのコンソールの画面だけであきたんですけど。
ウインドウのGUIベースのプログラムつくってみたいけど、、
どうやってつくるの?
475 :04/03/08 18:01
君が使ってるC処理系による。
import java.awt.*;

public class sample
{
public static void main(String args[])
{
Frame f = new Frame("abcdefg");
f.setSize(500, 500);
f.show();
}
}
477デフォルトの名無しさん:04/03/08 18:42
int *pval, x;
x = 50;
pval = &x;
pval += 50;
この時、pvalの値を表示すると-1となりますが
pval += 50 のアドレスが使用中だっためNULLとなるのでしょうか
478ヽ(´ー`)ノ:04/03/08 18:50
>>474
>>1
> GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo!

>>477
pval はあくまで &x + 50 でしょ?
479デフォルトの名無しさん:04/03/08 19:00
>>477

NULLの意味を間違ってない?
あと使用中かどうかは関係ない。
480デフォルトの名無しさん:04/03/08 19:55
>>478
pval + 50 == &x + 50となりえますか?
481デフォルトの名無しさん:04/03/08 19:59
pval+nでnが2以上の時の結果は未定義だったかな。処理系依存だったかな。
>>480
>>478じゃないけどどの時点でのことを言っているの?
”pval = &x; ”ではそう。pval に他の値が入っていれば違う。

とにかく未確保の領域を指すポインタに対して参照剥がしをした場合、
どんな値が返ってもおかしくない、もっというとプログラムが落ちてもおかしくない。
483デフォルトの名無しさん:04/03/08 20:11
>>482
有難う
マジで聞いていたのか・・・釣りだと思った。
485デフォルトの名無しさん:04/03/08 20:27
>>484
pval + 50 == &x + 50
とならないのでおかしいと思ってよく見たら
int x; char *pval;した・・・
>>485
警告でないのか?
487デフォルトの名無しさん:04/03/08 20:31
>>486
出ませんでした。
488デフォルトの名無しさん:04/03/08 20:33
すごいコンパイラだなw
型チェックが一切働いていないww
>>487
もし代替品があるならそちらを使うことをすすめる。
勝手にオプションでオフにしたりしてない?
そうでないならそれなりにまともなコンパイラに変えた方がいい。テンプレにある。
491デフォルトの名無しさん:04/03/08 20:46
VC++.netなんですが
int x;
char *p;
p = &x; //ここで警告でるべきなんでしょうか?
>>491
出ないの?
6.0ではデフォルトで
warning C4133: '=' : 'int *' と 'char *' の間で型に互換性がありません。
と出るから.NETでも出そうだけど。
493デフォルトの名無しさん:04/03/08 21:01
>>492
出ません。
オプションも特に弄った記憶が無いのですが。
494デフォルトの名無しさん:04/03/08 21:04
タスク一覧にwarning出てないか?
VC++.netで試してみたけど。
495デフォルトの名無しさん:04/03/08 21:14
聞きたくない
496デフォルトの名無しさん:04/03/08 21:15
>>481
なわけねーだろ ぼけ
Cの基礎から勉強しなおしてこい
497デフォルトの名無しさん:04/03/08 22:00
>>494
デテマスタ!!!
498デフォルトの名無しさん:04/03/08 22:05
う〜ん。。。
ttp://www1.cts.ne.jp/~clab/Contents/Sortindex.html

のソースを使って、クイックソートとマージソートの、

「数字を比較する回数」を数えて表示させたいんですが、
どうしたらいいですかね?
グローバル変数を増やしていくってやり方がいいと思うんですが、
カウンタを増やす場所が違っているのか、正確な値がでません。。

誰か助けてください。。。
>>498
>カウンタを増やす場所が違っているのか、正確な値がでません。。
自分で原因を理解していて、なおかつそのソースを晒さずに
他人に間違った箇所を指摘してもらおうと考える奴の
頭の構造って、一体どうなっているんだ・・・
500デフォルトの名無しさん:04/03/08 22:13
>>496
http://www.st.rim.or.jp/~phinloda/cqa/cqa3.html
ここの「Q 【strrev】」を読め。そしてCの基礎から勉強しなおしてこい。

>>480
未定義だからなるとは限らない。というか何が起こってもおかしくない。
>>498
お前が作ったソースみせろ
502デフォルトの名無しさん:04/03/08 22:36
>>501
どうでしょうか?
http://www.koedo.com/11ya/sousu.html
503こんぴゅー:04/03/08 22:40
1) 3;
2)  a=3;
3)   d;  注:この直前の文はchar d[10];
4)  ((a=3)>2 || (b=0)<-1);
5)  "abcdefg";
6)  printf("%s",string="abcdef");  注:変数stringは文字型へのポインタ変数
各式の評価値を教えてください(理由もお願いします)
504デフォルトの名無しさん:04/03/08 22:42
はじめまして、少し教えて欲しい事があるのですが。
C言語の入門書を一通りやり終えたのですが、次は何をやれば良いのでしょうか
やはり、人様の作ったサンプルコードを読んで勉強するべきなのでしょうか。
目標はwindowsのゲームアプリを作りたいと考えています。
505デフォルトの名無しさん:04/03/08 22:43
>>504
windowsのゲームアプリを作る
>>74
>>231
>>368
>>499

UNIX板からふらふら…

このスレの存在意義って何?
俺に聞け!って謳ってる割には(ry

ま、そんなこと、どーでもいいんですけどねー

向こう帰ります
>>504
Petzoldの本か「猫でもわかる」あたりで入門だな
>>503
試してみればいいじゃん

>>506
もう来るなよ
>>504
ポインタ。大抵の入門書はポインタについて詳しく書き切れていないだろうから。
510デフォルトの名無しさん:04/03/08 23:29
>>500
ばかやろー
おまえこそちゃんと読め。せっかくFAQ読んでも、内容を理解できてないんじゃいみねーぞ。

つまり
> pval+nでnが2以上の時の結果は未定義だったかな。処理系依存だったかな。
これがマヌケ。

int *p;で
p + 2すれば、pがint2つ分増えるのは「常識」!
511504:04/03/08 23:29
>>507
具体的に教えていただいて助かります、明日から無料でできる「猫でもわかる」
を参考に勉強しようと思います。

>>509
ありがとうございます、引き続きポインタの勉強もして行こうと思います。
512デフォルトの名無しさん:04/03/08 23:31
> C言語の入門書を一通りやり終えたのですが、次は何をやれば良いのでしょうか

何もやらなくてよい。
その本がまともならね。
で、そういう質問をするってこと自体、その本がダメ本な証拠なので、
まずその本の名前を言えよ!
次に何をヤルかをおしえてもらうのは、まずはその本の名前を言ってからだ!
>>512
それは変でしょう
「何をしなければならないのか」は入門書なり講師なりから学んでも
「何がしたいか」はその人次第だと思う

目的から失速したら、それがその人の終点なんだから
514504:04/03/08 23:39
>>512
ごめんなさい、
自分が参考にしていたのは新C言語入門というものです。
ビギナー編とシニア編という物に分かれていましたが、基本的に書いてあることは
ほぼ同じでした。
ダメ本とは思いませんでしたが、ただ書いてあるサンプルが面白くないなと
思う事はありました。
515デフォルトの名無しさん:04/03/08 23:42
> 自分が参考にしていたのは新C言語入門というものです。
> ビギナー編とシニア編という物に分かれていましたが、基本的に書いてあることは

あの本はダメ本の典型です。たくさん売れていますが、内容がない「なんだかわかった気になる」
だけの本です。しかも高め。
やめたほうがいいですね。
もっとましな本を買いましょう。
>>503 とりあえず、氏ね

評価値について
http://pc2.2ch.net/test/read.cgi/tech/1078753142/

1 名前:こんぴゅ− mail : 投稿日:04/03/08 22:39
1) 3;
2)  a=3;
3)   d;  注:この直前の文はchar d[10];
4)  ((a=3)>2 || (b=0)<-1);
5)  "abcdefg";
6)  printf("%s",string="abcdef");  注:変数stringは文字型へのポインタ変数
各式の評価値を教えてください(理由もお願いします)
本の話はこっちでやれ

推薦図書/必読書のためのスレッド PART 16
http://pc2.2ch.net/test/read.cgi/tech/1076851442/

読んだ書籍の感想・紹介
http://pc2.2ch.net/test/read.cgi/tech/1064681919/

日下部陽一著 作ってわかるCプログラミング(第2版)
http://pc2.2ch.net/test/read.cgi/tech/1075398852/
518504:04/03/08 23:50
>>515
そうだったのか・・・。近くの本屋のプログラミング本コーナーには
C言語の本がズラーっと並んでいるのですが、その中で一番売れてます
と店長のお言葉があったので、つい買ってしまいました。
本選びも重要なポイントなのですね。
519デフォルトの名無しさん:04/03/08 23:52
いちばん売れてるものがよいものとは限らないのは常識!
いちばん売れてる車がいい車か?
520デフォルトの名無しさん:04/03/08 23:55
>>510
> それぞれが共通のオブジェクトを指してい るか、あるいはそのオブジェクトの最後の要素の次があると仮定して、その箇所 を指している場合のみ意味を持ちます。

お前にはこの意味が分からないのか?
>>504
まず好意のレスと悪意のレスを見極められるようになれ
アヒル本以外といいかも
523デフォルトの名無しさん:04/03/09 00:10
こわがらなければ良書ですよ。
524デフォルトの名無しさん:04/03/09 01:40
>>522
どのへんがいいですか?
>>510
全然常識ではありません。変な常識を振り回すのはよしましょう。
p + 2 の結果はpが何を指してるかによります。

int i, *p;
p = &i;

なんてときには、p + 1は正当ですが、p + 2は未定義の動作になります。

とくに>>500が言ってるのは>>477についてのことですから、
未定義の動作であるのが正しく、intふたつぶんとかマヌケな答にはなりえません。
526デフォルトの名無しさん:04/03/09 08:21
>>525
マイナス方向にはどこまで有効か知ってる?
527デフォルトの名無しさん:04/03/09 08:49
>>525 は、未定義と無保証の違いがわかってないらしいな。
pの値を実際指すオブジェクトがないエリアまで1つ以上はみ出すと保証はない。
(有効な値にならないような実装もあり、またそれを--して戻してももとにもどらなくてもよい)
528デフォルトの名無しさん:04/03/09 08:50
>>527
まあ、おそらくCFAQでも読んでわかったつもりになってるしったかなんでしょう。
>>528
カコワルイ
530デフォルトの名無しさん:04/03/09 08:57
おまえらなー
そんなん、実装する身になって考えればわかるだろ?
たとえば、すごく単純なCPUがあったとして(CAPXとか並みの(あアレはあせんぶらの名前か))、
アドレス空間が8bitだったとする(それじゃあCの規格は満たせないが、そこはおいといて)、
intが2バイトだとする。
int a[10]; と宣言して、
int *p;の
p = a; で、pにはたまたまアドレス236番地が入ったとする。
ところが、p + 9まででなく、p + 10まで有効でなければいけないので、
たとえばそのCPUが、255を超えたものを引き算しても元にもどらない仕様だったとする
そうするとint a[10]は234より低いアドレスに置く必要があることがわかる...(以下略)。
>>504
何かアプリを作りたくて言語学び始めたんじゃないの?
532デフォルトの名無しさん:04/03/09 09:52
>>532
宣伝カキコ?
534デフォルトの名無しさん:04/03/09 13:37
なんか、面白そう(でもないか)な話してるなぁ。乗り遅れた。

>>481は、おかしい。

>>510が言ってるのは
int a= 100, *p = &a, *b; //&a = 0x03b0が入ってるとする。
b = p+2; //bは0x03b8となる
参照したら、ぶっ飛ぶかもしれんが、値自体はこうなる。ってこと?なら正しい。

アドレスだろうとあくまで参照しなければ数値なわけで。
>>534
>参照したら、ぶっ飛ぶかもしれんが、値自体はこうなる。ってこと?なら正しい。

char *p = 0xFFFFFFFF, *b;

b = p + 2;

とかやったらどうなるかも考えたか?
>>535
いや、考えてない。
>>481>>510はそこまでのこと話てんの?
>>481がいってるのはそういうこと言ってるのか?
なら、俺が浅はかだったな。
規格を引用すればすぐ解決する話をいつまでもごちゃごちゃと
538デフォルトの名無しさん:04/03/09 17:45
char *ch = "hello";
char ch[] = "hello";

int ia[] = { 0, 1, 1, 2, 3, 5, 8, 13, 21 };
int *ia = { 0, 1, 1, 2, 3, 5, 8, 13, 21 }; /* ERROR!!! */

なんでintの場合はダメなんでしょうか?
>>538
>>1 にある C-FAQ ぐらい読もうな。
http://www.catnet.ne.jp/kouno/c_faq/c6.html#2

> char *ch = "hello";
これと
> int *ia = { 0, 1, 1, 2, 3, 5, 8, 13, 21 }; /* ERROR!!! */
これじゃ意味が違う。

char でも同じように
char *ch = { 'h', 'e', 'l', 'l', 'o', '\0' };
…としたらエラーになるよ。
>>539
ありがとうございます。つまり、

char a[] = "hello"; char *p = "world";

ここでいうaというのはコンパイラから見れば"hello"という文字列の
アドレスしか意味していないくて、pというのは変数の値
(ここでは"world"の先頭アドレスが入っている)を
意味しているということなんですね。二つの差異はコンパイラに
よって解消されているというか。
>>540
両者が別物だってことすらわかっていないと見える。もう一度熟読しろ。
a は { 'h', 'e', 'l', 'l', 'o', '\0' } で初期化された配列。
p は "world"という文字列リテラルの先頭へのポインタ。
542デフォルトの名無しさん:04/03/09 18:38
ソースでよく
spw->sp_expire こんな感じの記述を見かけます。

PHPやJAVAだと、オブジェクトを指してるんですけど、C言語の場合は、構造体を指しているのでしょうか?
アロー演算子
構造体のメンバをポインタで参照している
>>536
>>480はそういう釣りかと思ったわけ。
545貧乏紙:04/03/09 19:43
Javaにアロー演算なんてあったっけ???
アロー演算子などと言う物があろうとは
>>542
A->B は (*A).B と等価。
548デフォルトの名無しさん:04/03/09 21:35
> アロー演算子

電話で話すときに最初に言うやつですね
>>548
もしもし?
550デフォルトの名無しさん:04/03/09 21:37
>>547
その昔、某T社の青梅工場では、コーディング規約で「->」演算子禁止だった。
ばかげた規約。「.」で書いたら括弧つけなきゃいけなくてよけいに見づらいのに、
きっと担当者が頭悪くて、「->」なんてむずかしいものわからん! とおもってつけたした
条項に違いない。それ以来T社の製品は避けるようになった。ああいう頭の悪いやつが
いっぱいいる会社だとするとろくなことはないからな。
>>550
Javaでアロー演算子を排除するところを見ると、
あれを直感的に醜いと判断する人もいるんじゃないの?
552デフォルトの名無しさん:04/03/09 21:50
えー 便利なのに。
Javaで「*」がないのも、それと同じなわけ? :-)
>>551
ptr->mbr が醜くて (*ptr).mbr は醜くないって言いたいのか?
(*ptr)->mbr にしようか (**ptr).mbr にしようか悩んだことないだろ?
マシン寄りの泥臭いところを扱う職種の人に
そうじゃない職種の人が価値観を押し付けても意味ないんだよ。
554デフォルトの名無しさん:04/03/09 21:55
Cのバランスっていいよねえ。
たとえば#defineなんかすごく強力であぶない機能でしょ。
使うひとの良識にゆだねなれてる。でも、便利。

なんていうか、工具なんかでも、しろーと向けのとプロ向けのがあるじゃん。
安全機能はないけど、すごーくよく切れる刃物でばっさりとか、そんな感じ。
ポインターがないJavaは不便。(みえないだけでポインターっぽい部分だらけのくせに)
>>553
>ptr->mbr が醜くて (*ptr).mbr は醜くないって言いたいのか?
おれにいうなよ
>>555
ん、てっきりJava厨かと思ったが?
557デフォルトの名無しさん:04/03/09 22:08
Cは� ^ も . も 〜 もつかってるくせに、(#はプリプロセッサー)
$も@も使ってないのよね。なんでかな?

¥も_もつかってるなあ。

あ、` はつかってないか
>>557
(も_も¥。oO(すもももももももものうち)
559デフォルトの名無しさん:04/03/09 22:11
そのくせ、記号2つくみあわせをけっこうやってるのよ。
まあ、<< や >> はわかりやすいからいいとして
+= や %= のシリーズもいいとしても、
-> はたしかにかっこわるい。

!= はまあ伝統的にそれほどへんじゃないし (<>の流儀よりまし)、
560デフォルトの名無しさん:04/03/09 22:13
それより*や&に様々な意味を持たせながら・・・と言った方が。
561デフォルトの名無しさん:04/03/09 22:16
*や&の2重の意味はまあいいのよ。見分けつきにくいわけじゃないし
(lexは警告だしまくるが)

けっこう見分けつかないのはカンマ演算子と配列の引数のカンマ、これはよくない。
まあ、つかわなきゃいいのだが > カンマ演算子
562デフォルトの名無しさん:04/03/09 22:21
そういえばキーボードを見回してみたが、$と@と`以外は使っているな。
?も三項演算子とかトライグラフで使っているし。
563デフォルトの名無しさん:04/03/09 22:21
++ はわかりやすくてかっこいいよね。

==はいまひとつだけど。

fortranみたいに配列の括弧が()なのはいやだよね。[]でよかった。
関数の括弧はまあしかたないが、むしろみやすいぐらい。

うまく選んでるよねえ。センスがいいっていうか。

それにくらべてPerlときたら!
>>561
その観点で見ると順序演算子はアフォよけだな
565デフォルトの名無しさん:04/03/09 22:24
コメントが // なのもいいよね。
「'」だと見づらい。

' ' と " " の使い分けもバランスよい。(Delphiのはつかいにくいなあ)
Delphiの:と;と,の使い分けはセンスわるい
 (´Д`)
 (☞ )☞
  <  >
567504:04/03/09 23:54
こんばんは、
所で質問があるのですが、C言語だけでWindowsのアプリケーションは作れるのでしょうか?
やはりC++も学ぶべきなのでしょうか。
>>567
Windows2000のソースを見る限りできる。
569デフォルトの名無しさん:04/03/10 00:42
標準出力に計算結果を出力するとき,そのまんま画面に表示させれば問題ないのですが,
ファイルにリダイレクトするとスタックオーバフローになってしまいます.
リダイレクトするかどうかでなぜ動作が変わってしまうのでしょうか?
OSはWindows98で,コンパイラはVisual C++1.51,DOSプロンプトで実行してます.
>>569
ソースは?
ああ、ソースってのはソースプログラムのこと。
572569:04/03/10 00:55
すみません.手元には今ありません.
自動変数で長い配列を使ったり,二次元配列をmallocで確保したりしているので,
かなり怪しい動作になっています.
でも,たとえおかしな動作をしていても,リダイレクトはOSが制御しており,
アプリは関係ないはず,と思っているのですが間違っているでしょうか?
標準出力は出力がファイルにリダイレクトされている場合とそのままコンソールに
出力される場合でバッファリングの動作が異なる場合がある。(環境による)
UNIXでは、コンソール(tty)に出力する場合は、ラインバファリングというモードになる。
んで、mallocするかどうかや、そのサイズが変わるので、
自分のmallocとの干渉の具合が変わり、あぼーんするかどうかも変わる。

ちゃんとデバッガとデバッグ版mallocを使えばどこがわるいかわかるはずだが、
その技術がないなら、
mallocしたアドレスとfreeしたアドレスを全部ダンプしたり、
配列の上限と下限を超えていないか全部assertして調べるべし。
575デフォルトの名無しさん:04/03/10 01:43
    ∧
   / \
  ∧   ∧   この様に配列のデータが2の2乗で増えていく場合、(この場合最終的に4つになる)
 ∧∧  ∧∧  前の分岐のデータを参照して、次の分岐2つを作っていきたいんですが、
           プログラムの作り方の考え方を教えてください。
           前に質問スレと間違えて他に書いてしまいました。
「この様に」ってのがわかりません
「2の2乗で増えていく」って意味がわかりません
「前の分岐のデータを参照して、次の分岐2つを作って」ってのがわかりません

具体例をあげて説明汁
577デフォルトの名無しさん:04/03/10 01:49
>>575

typedef struct {
 データ;
 前のデータへのポインタ;
 次のデータへのポインタ1;
 次のデータへのポインタ2;
} hogehoge;

hogehoge data_ipa-i[データの最大個数];

こんな感じでどうよ
579575:04/03/10 02:24
#include<stdio.h>
main(){
int a[256][3][3],i,j,l,k;
for(l=0;l<256;l++){
for(i=0;i<3;i++){
for(j=0;j<3;j++){a[l][i][j]=0;}}}
for(l=0;l<9;l++){
k=0;
for(i=0;i<3;i++){
for(j=0;j<3;j++){
if(k==0){a[l][i][j]=1;k=1;}}}}

/* 説明が変で申し訳ありませんでした。プログラムがさっき考えてたとのと
違いますが、何倍くらいずつ増えていきます。今aに1を1こずつ9個それぞれ同じように
入らないように置きました。この後、これを使って、aに1を2個ずつ同じものができないいように
置きたいのです(72個)。この場合はこの後どういう風に考えればいいでしょうか。
>>578ありがとうございます。参考にします。*/
}
580デフォルトの名無しさん:04/03/10 02:57
隠しファイルって、普通にオープンできるんでしょうか?
>>579
C言語の前に日本語を勉強すべきではないかと
>>580
試せや
>>579
>今aに1を1こずつ9個それぞれ同じように
>入らないように置きました。この後、これを使って、aに1を2個ずつ同じものができないいように
>置きたいのです(72個)。
何がしたいのかさっぱりわからん。
(i, j, k)の組み合わせがどういうときに a[i][j][k]が
1になればいいの?

あと
>for(l=0;l<9;l++){
>k=0;
>for(i=0;i<3;i++){
>for(j=0;j<3;j++){
>if(k==0){a[l][i][j]=1;k=1;}}}}
って
for (l = 0; l < 9; l++) a[l][0][0] = 1;
と同じだよね?
584デフォルトの名無しさん:04/03/10 03:11
>>582
試したらオープンできんかった
fopen つかいました。
試したのは隠しファイルじゃなくてシステムファイルだろうな。pagefile.sysとかの。
>>584
きっとfopenの使い方がおかしい。

>>585
http://pc2.2ch.net/test/read.cgi/tech/1077697829/942
が言うには 「.hoge」とかいう隠しファイルらしい。
きっと>>584はUNIX系OS使い。
587580:04/03/10 03:29
>582
>585
>586

ことばたらずですいません
Linuxを使っています。

頭に ピリオドがついてる隠しファイル(不可視属性ファイルとでも言うんでしょうか?)が、普通にfopenで開けないんです。
隠しファイルといっておきながら ls -a とかやると見えるんで全然隠しファイルじゃないと思うんですが、

で・・パーミッションやUID,GIDは、確認しましたが全然問題ありません、
念のために、chmod 777 もしてみました。

viなどでは、普通に開けるので、問題ないとは思うのですが、理由が判りません。

一度リネームして開いてまた戻すってのも、アレ何で何か開ける方法があればアドバイスお願いします。
588デフォルトの名無しさん:04/03/10 03:33
>>586
>きっとfopenの使い方がおかしい。

その辺徹底的に調べてみます
ありがとうございます
589デフォルトの名無しさん:04/03/10 03:35
>>587
試しに.bash_historyを開いてみたが、開けたぞ。
fopenの後にperrorしてみな。本当にエラーが出ているのならエラーメッセージが表示されるから。
590デフォルトの名無しさん:04/03/10 03:41
考えられるのが第一引数と第二引数の・・・やべ言葉が出てこない。
fopen("r",".hoge");こんなことして、No such file or directory.
型が同じだからコンパイラが検出できない。
591デフォルトの名無しさん:04/03/10 03:44
>>589
ありがとうございます。
開けました。

配列初期化してなくて、頭にゴミが入ってました;
592デフォルトの名無しさん:04/03/10 03:45
配列・・・?
593デフォルトの名無しさん:04/03/10 03:48
> 念のために、chmod 777 もしてみました。

ぼけ! 666 だろうが。
594デフォルトの名無しさん:04/03/10 03:49
>>592
char FullPathName[255] = {'\0'}; ← \0いれてなかった
char FilePath [] = "/home";
char FtpAccessFileName [] = ".hoge";

strcat(FullPathName,FilePath);
strcat(FullPathName,"/");
strcat(FullPathName,uid);
strcat(FullPathName,"/");
595デフォルトの名無しさん:04/03/10 03:50
>>594
(^_^;)
そういう時はs(n)printfを使え。4回もstrcatを呼ばずに済む。
>>594
>strcat(FullPathName,FilePath);

strcpy(FullPathName, FilePath);
にすれば初期化の必要がないと思われ。
strcpy(FullPathName,FilePath);
strcat(...
strcat(...
strcat(...

とりあえず一番目のは strcpy にしる
598596:04/03/10 03:53
リロードし忘れた。
>>595の言うとおり。
>>593
+xで何か悪いことでも?
600594:04/03/10 03:54
>>595
sprintf(sql,"insert into login_info values('now','%s','%s','%s','%d','%s')",sqldns,sqlip,namebuf,login_bool,login_error_msg);

いままでこんな事かいてたのに、別のfunction になったらいきなり、strcat になってた;;

どうもありがとです
>>600
それと違って文字列だけだったからだろうな。
602デフォルトの名無しさん:04/03/10 04:10
> 配列初期化してなくて、頭にゴミが入ってました;

脳味噌くわれたのね。ゴミに
603≠593:04/03/10 06:38
>>599
その必要がないときにa+xするのは阿呆。
少数や分数を使いたいのですが、変数の全ての型が詳しく乗ってる表(サイト)
しりませんか?
>>604
あと、組み込みの分数型なんて無いぞ。
それ位自分で作れ。
>>604
規格読めよ
608デフォルトの名無しさん:04/03/11 04:41
>>604
411ペイジにすべて出てます。
609デフォルトの名無しさん:04/03/11 05:30
<Limit ALL>
Order Allow,Deny
Allow from 192.168.1. .moe12.moe.com
Allow from .hoge.com
Deny from all
</Limit>

これらを

192.168.1.
.moe12.moe.com
.hoge.com
このように別々に配列なりに格納したいのですが、スマートな方法が思いつきません。

perlのように正規表現が使えれば一発なんでしょうが、C言語だとかなり手はずを踏むみたいです。
何か良い方法のアドバイスお願い致します。
>>609
AhoのコンパイラIを読むことを推奨する。
レキシカルアナライザとパーサはツールを使えば簡単にできる。
611デフォルトの名無しさん:04/03/11 13:51
lexを使えばたしかに簡単だが、lexの吐き出すCのソースは非常にきたない。
それを「スマート」といえるかどうかはかなり疑問。
また、その程度のトークン切り出しにlexを使うのはかなり大げさすぎ。
正規表現さえもいらないからperlつかうこともないし
ふつうに1行読み込んで文字列処理でできる範囲です。

で、「どう切り出したいか」を文章で書いてみろ。
それに合わせたCのコードをおれが5分で書いてヤル
これからCをはじめようと思うんだけど
どのエディタがいいですか?
613デフォルトの名無しさん:04/03/11 14:14
当然vi
614612:04/03/11 14:18
統合開発環境だと何がいいですか?
615デフォルトの名無しさん:04/03/11 14:34
>>614
Eclipse
emacsかxyzzy
617デフォルトの名無しさん:04/03/11 14:52
前期のCの授業では、全面的にUnix上での実習だったので、当然viだった。
viのコマンドは全部暗記させられた。

夏休みに入る前、「家からsshできない学生」(つまりインターネット繋がっていない)の
ために、Windows上で課題やる場合のために、gvimをインストールさせられた。

先生のくちぐせ「viも使えないくせに技術者みたいな顔してるやつはだめ」
>>611
むしろ綺麗なソースを吐くflex++の代替品を作ってクレ
前期の国語の授業では、全面的に紙上での実習だったので、当然毛筆だった。
毛筆の筆法は全部暗記させられた。

夏休みに入る前、「家で習字ができない学生」(つまり書道セットを持っていない)の
ために、洋紙上で課題やる場合のために、筆ペンを購入させられた。

先生のくちぐせ「筆も使えないくせに日本人みたいな顔してるやつはだめ」
620デフォルトの名無しさん:04/03/11 15:09
>>619 はさっさと筆おろししろ!
621デフォルトの名無しさん:04/03/11 15:13
そのときは私は自宅からInternet使えたのでgvimはほとんど使わなかったが、
先生の推奨の_gvimrcの設定はここ
http://www.nurs.or.jp/〜void/WinTools/gvim.html

(学内にあるペイジと若干内容ちがうようだが...)
623デフォルトの名無しさん:04/03/11 15:39
別スレで聞いたんですけど、詳しい方が居なかったのでこちらで聞きます。

学校の授業でC言語教えてくれる講座があるんですけど、
C言語を勉強すると何かいい事があるんでしょうか?
どんな事ができるようになるんですか?

>>623
そんな心構えで勉強してもいい事はない。
C に限らずな。
>>621
「set compatible」なのか。悲しいことです。
その講座の講師に聞いてみれば?
627デフォルトの名無しさん:04/03/11 15:49
>>623
C「言語」を教えるような講師はどっちみちだめ。
628デフォルトの名無しさん:04/03/11 15:50
>>625
えー 当然set compatibleでしょう!
629デフォルトの名無しさん:04/03/11 15:52
なんで set noshowmatch なんだろう。
コピペするときウザイからかな。
630623:04/03/11 15:52
皆さん、手厳しいですね。
631デフォルトの名無しさん:04/03/11 16:02
>>617が使ってるviはuuでredoできるか?
2つ前の状態に戻るようなら本物のviじゃないぞ。
真のvi使いにマルチアンドゥなど必要ない。
>>631
厳しいなぁ。真のvi使いはset undolevels=0なのか。
かくいう俺は、折り畳みや分割ウィンドウ使いまくってるヘタレです。
viは日本語周りがダメだからいや。
634デフォルトの名無しさん:04/03/11 17:19
>>633
それは大うそ。よほどまぬけなのをつかっているにちがいない。
いまどきnviでもelvisでも日本語まわりはまとも。
(っていうか15年前でもそうでしたね)
635デフォルトの名無しさん:04/03/11 17:21
> viはuuでredoできるか?

それができないようなまぬけなviはない。nviであろうが、vimであろうが、できる。
(そのためのset compatible)

バグ(というかオリジナルとちがう)ところがあるのは、前者のほうで、
有条件での「u」したあとの「.」の挙動がちがうことだ。だがそこまでこわだれるのは
ちゃんとしたviフリークぐらいで、631レベルだと気付きもしないことだろう。
636デフォルトの名無しさん:04/03/11 17:23
>>629
> なんで set noshowmatch なんだろう。
「したいときには%する」のが男です。

showmatchなんてのは女子供みたいにキッシュ食べる連中がやることだ
637デフォルトの名無しさん:04/03/11 17:25
>>636
日下部氏は硬派だと思うんですが、
彼の家でのパーティーでは奥さんの作ったロレーヌ風のキッシュをおいしそうに
たくさん食べていましたよ。私は硬派ではなくて半熟ぐらいですが、あれはおいしかった!
638デフォルトの名無しさん:04/03/11 17:52
おことはだまってedだろ!
639デフォルトの名無しさん:04/03/11 17:54
どなたか、「viマグカップ」の入手の仕方を教えてください。
昔読んだナッツシェルのviの本のあとがきに、「viのコマンド一覧がかかれたマグカップがある」ような
ことが書かれていた記憶があるのですが、その後探してもみつからないのです。

端末の前で作業するときには最適だと思うのですが...
...見つからないので、しかたないので寿司屋の湯飲みで代用してます。
(さかなへんの文字をおぼえてもviはうまくならない...)
viなんて10個ぐらいコマンド覚えてれば十分じゃん。
641デフォルトの名無しさん:04/03/11 17:58
10個で最低限のことはできますが、それでは効率よくコーディングはできません。
そういう人間は一生、へぼ厨 から脱却できないわけです。

rogueのモンスターを全部覚えるよりはviのほうが簡単です。
642デフォルトの名無しさん:04/03/11 18:02
おれもvoid大せんせーの授業うけてみたいぞ。
さっきのページの上のほうをみてみたら、
どうやた、東風フォントをつかってtelnetしてviでccするっぽい。(Javaもか?)

かなり硬派な授業っぽいな。
男塾みたいにやってたりして
643デフォルトの名無しさん:04/03/11 18:03
>>642
あのー...女子学生も多いんですけど。うちのクラス。
viでコーディングするなんて正気の沙汰ではありませんね;-)
おまえら、みんなまとめて板違いじゃ
646 :04/03/11 18:30
イェンダーの魔除けを手に入れるのとvi使いこなすのは
どっちが難しいんでつか?
なんか昔のニュースグループを見てる気分になった
スーパーハッカー日下部陽一の降臨はまだですか?
>>646
魔よけは4つ捧げたが、viはまだ極めた気がしない。
どっかに最短手筋を競い合う
「詰めvi」とかいうスレがあったな。
vi使いをうまく使う奴が一番えらい。
でも、今はイラネ。
vi マンセー
653デフォルトの名無しさん:04/03/11 20:16
>611
ファイルの中で、このような部分を見つけたら

<Limit ALL>
Order Allow,Deny
Allow from 192.168.1. .moe12.moe.com
Allow from .hoge.com
Deny from all
</Limit>

Allow from 以降のIPとDNSを、hoge[n]; に入れてくれるか **hoge にでも入れるようにしてください。
検出した、件数もお願いします。

IPとDNSは横に、数十個スペースを区切り文字で、並んでる場合もありますし、1つずつ Allow from で書かれてる場合もあります。
IPは、192.168.1.1 と最後まで書かれてる場合と、192.168.1. で終わる場合もあります(DNSも同様です)

今、自分で1行読み込んで切り分けする部分を別に作っているんですが、私だと一時間はかかります。
>611の方が5分でできるとおっしゃるので是非お願いします。
654デフォルトの名無しさん:04/03/11 20:25
>>621
時々~を全角で書き込むやつがいるが、特殊なブラウザでも使っているのか?
>>653
ホームページで公開する。数日まってから検索する。どお?
656デフォルトの名無しさん:04/03/11 20:30
>>653
> 私だと一時間はかかります。

おいおい、自分でできるのなら自分でやれよ。
春だな・・・
659デフォルトの名無しさん:04/03/11 21:31
結局誰もできないんですかw
いまどきVtターミナルでEUC漢字ターミナルを知っているのはほとんどいない。
だな。1990以降IBMPCがDEC端末を駆逐したからな。イヤーン。
>>659
構文規則を明示しない構文解析など、誰もやろうとする筈がない。
662609:04/03/11 22:07
>>609 です
何とかできたので、色々教えてくれた方ありがとうございます

>>661

<Limit ALL>
Order Allow,Deny
Allow from 192.168.1.
Deny from all
</Limit>

これしかでてきません。
ファイルの中もこれだけです。

説明が下手で申し訳ありませんでした。
なんかvoid信者がうざいな
コテハン名乗ってくれないか?あぼーん登録するからさ

>>654
Safari だとそうなることもありますね!
またマカーか
void信者なのかそれとも本人なのかしらんけど、
あいつってもうプログラマとしては「あがり」だろ。

ちょい昔に石田晴久がどんな著作でも必ず
端末プログラムをのせてたのと似たようなもんで、
プログラマとしては終わっちゃった存在じゃないか。
666デフォルトの名無しさん:04/03/12 00:49
enum { a,b,c,d};

#define a 0
#define b 1
#define c 2
#define d 3
はどう違うんですか?
defineはプリプロセッサがただの数字に展開してくれるみたいですが
enumってなに?
変数なんですか?
667デフォルトの名無しさん:04/03/12 00:56
>>666
翻訳される段階もスコープも違う。
668デフォルトの名無しさん:04/03/12 01:01
表を作りたい場合どうすればいいですかね?
テキストファイルから名前、日にちなどchar型とかint型とか違うのを読み込まなきゃいけないんですが。
2次元配列とかかなと思うんですけど、出来ますかね?
オマイら、mainの定義をANSIにやるなら、とりあえず応援するよ。
がんばれ。
最近ツマンネぷ
ツマンネー。
>#define a 0
>#define b 1
>#define c 2
>#define d 3

大胆だな。
今度書いてみよう。
おれも正直#defineとenum区別できてない。

enum {
 a = 10,
 b = 20
};
とかやる。#define使うべきですかやはり
674デフォルトの名無しさん:04/03/12 04:15
> 時々〜を全角で書き込むやつがいるが、特殊なブラウザでも使っているのか?

おれもATOK使ってるときにはその失敗をよくやる。
職場ではMS-IMEなので失敗しないのだが、変換がたこだ。(会社で2chはしないが)
675デフォルトの名無しさん:04/03/12 04:18
> 表を作りたい場合どうすればいいですかね?

ふつうにやればできますね。
676デフォルトの名無しさん:04/03/12 04:19
おれも正直#defineとenum区別できてない。
しろよ。

#define A 0
#define B 1
#define C 1
#define D 2
とやっちゃったときにだれが忠告してくれる?
677デフォルトの名無しさん:04/03/12 04:20
viは斜めにうごけないので不便。
678デフォルトの名無しさん:04/03/12 04:21
>>665
こわがりですね。
679デフォルトの名無しさん:04/03/12 04:25
>>644
逆だろ。viやEmacs以外でコーディングするやつで、まともなコードかけるやつみたことない。
644みたいなやつがどんなへぼいエディターを使っているのかという情報には
少し興味があります。
おまえがつかってるテキストエディチャーの名前言ってみろ? ;-)
>>679
マジレスすると、どんなエディタを使ってるかは関係ないっす。
エディタは道具でしかないので、
おのおの使いやすいのを使っていればいいと思ってます。

逆にエディタでプログラマとしての力量をうんぬんする方が痛いと思いますよ。
とはいえwindowsでメモ帳使ってコードを書くのはどうかと思いますけど(矛盾)。

windowsだけで閉じた環境でいいのであれば秀丸だっていいでしょうしね。

私はunix(系)、windows、macその他と行き来があるので、
主にEmacsとvi使ってます。
これらの環境で共通してほぼ同じ操作ができるものというとこれくらいしか知らない
という消極的な理由ではありますけど。

まあでもEmacsは便利なんで結構好きではありますw
681デフォルトの名無しさん:04/03/12 08:52
> マジレスすると、どんなエディタを使ってるかは関係ないっす。

そんなこと言ってるやつが甘い。

ようするに出来損ないの自分が結果としてへんなエディター使っている事実を
認めたくないだけ ;-)

エディタについて語るスレはここですか?
Lisp はまともなエディタがないとプログラムしづらい。
>>681
エディターなんてなんでもいいんじゃないの?
効率のよさ、悪さってのはあるかもしれないけど、
できあがったコードのほうが重要なんでしょ?

ワープロやタイプライターでうって 紙に出力、スキャナーで取り込み でも、
コードが完璧なら、ちゃんとしたプログラムができる。
なんて言ってみる。(笑)

ついでに、あなたはエディター変えると仕事できないのですか?
環境激変のときのために 転職を考えておいたほうがいいのでは? (笑)
月並みな煽りに反応してみますた。
エディターに限らず、キーボードとかは小脳を使うから、どうしても慣れたもの一筋になっちゃうよね。
自分も、いまだにPC9801のキーボードを使いつづけている。

小脳ってすばやい思考の為に残しておきたいから、色んな環境に適応させたいとは思わないしな。
>>683
vi -l
>>687
というか、「まともなエディタ」ってのは
それのことを言ったつもりなんだけどね。
>>673
>おれも正直#defineとenum区別できてない。
漏れ的には enum で解決できるなら enum にする事を押し占めしる。

理由
・emum の一つ値が、ある(enum で定義された)グループに属している事が直ぐに分かる
・enum は自動的に連番を振ってくれる
・間違って番号を重複させた場合、コンパイラが教えてくれる
・enum 型のサイズは処理系定義なので、場合によっては1バイトで済むこともあり、
それによって効率が上がる可能性もある(そうすべきかどうかも、
コンパイラが勝手に判断してくれる)
690デフォルトの名無しさん:04/03/12 20:38
質問です。

do statement-list while (test) ;

のstatement-list中にcontinue;を置いたら、どっちへ飛ぶのでしょうか?

a) doの初め(statement-listの最初)から
b) whileのtestから

今コンパイラがないので試せません。
お願いします。
a
>>690
コンパイラがない理由
携帯だから: 道草くってねえでさっさと帰れ
PCなのに: 只コンいろいろあるだろ、サボんな
bだろーが
C言語なめんな691
>>689
あと環境にも拠るけど、デバッガで追っかけてるときに
数値じゃなくてシンボルで表示してくれることがあるね。
>689
>・間違って番号を重複させた場合、コンパイラが教えてくれる
名前の重複は許されないけど、値の重複は許されているんだけど。
グロ注意
int a=7;
int b=3;
a <<= b;

printf("%d\n",a);



これがどうしても分かりません。参考書どうりに打ってみると、参考書どうりの結果になるのですが・・・
なぜ?
C言語とか以前に、電子回路の本でも読んだら?
>>697
その参考書には何が書いてあるのかと
700デフォルトの名無しさん:04/03/13 00:29
   111
  1110
 11100
111000

で、56
>>697
「どうり」ってなんやねん。「どおり」やろー
特に詳しいことは書いてないです。ただ、56になるとだけ。
あと、a>>=b;
だと0になるのもわからないです。
111
 11
  1
  0

で、0
少しは自分で調べろっての。
釣りなら面白くないからやめとけ。
その参考書晒せ
俺はエディタにそれなりにこだわっているけど
知り合いの中年にFPGAのプロフェッショナルがいてその人がVHDLをメモ帳で書いている
ちょっと笑ったけど
腕前は相当なもん
エディタにこだわるのも良いけど何が本質かといえば別のところにあるだろ
emacs使っていない人間にマトモなコーディングするやつみたことない
とか言っている段階でたかが知れているのは確かかな
相当サムイ
↑相当サムイ
http://www.abon.net/uploader/src/abon0381.jpg

これを私は前から順に読んでいって、上から三つ目の代入演算子の<<=で
つまずいたわけです。どれだけ考えても分からないから
「代入演算子」でぐぐって見たものの、思うようなものが見つからず、ここに書き込む
ことにしたのです。
それでも仕方ないから、飛ばして次ぎ行こうとしたら・・・
上から6つ目のところに「ビット演算子」の<<があるじゃないですか、それも(11章)って書いてる。
このページは四章ですよ!?
これじゃあ前から読んでいったら分かるわけないじゃないですか。

明日、技術評論社に電話で文句言ってやりますよ。
URLにabonが入ってると、90%ブラクラだ。
間違いないっ
がんがれ(w
本当に晒すとは……釣りじゃなかったのか。
参考書の是非はともかく文句言うのはお前も一通り読んでからにしろ。
人に聞くのもな
712デフォルトの名無しさん:04/03/13 01:26
>>708
?:や,を載せるくらいなら間接参照演算子やアドレス演算子を載せろよな。
そっちの方が重要じゃ。
713デフォルトの名無しさん:04/03/13 01:27
あと構造体関連や添え字も
>>708
単項とか2項とかバラバラだな。
こりゃ文句言われてもしょうがないだろ。
そんな本捨てちまえ。
あと夢や希望も
716715:04/03/13 01:42
/* >>713に絡めたつもりだったんだけど>>714とつなげてもいけるな。 */
確認もせずに買う方が悪いというのは簡単だが、
こういった入門書は何が悪いのかもわからない、
という状態で購入するわけだから、
立派な詐欺だな。

審査とか基準とかないのか?
>>708
そんな本は窓から投げ捨ててここでも読め
http://www9.plala.or.jp/sgwr-t/

それから、書名と著者名晒しage希望
ただ単に演算子をいくつか紹介してるつもりじゃないの?
この1ページで糞とかいうのもあれだろう。
昔の技評の本は良書が多かった気がするけどな。
もう過去のことか。
>>719
4.1.2以降に何が書いてあるかだな
722デフォルトの名無しさん:04/03/13 03:02
> emacs使っていない人間にマトモなコーディングするやつみたことない

ほんとにそうですよね。
723デフォルトの名無しさん:04/03/13 03:04
>>686
おい、小脳ですばやい「思考」をする生物なんか、地球の生物の進化の課程にはみあたらんぞ。
宇宙人か?

ちなみに、キーボードの配列などの「慣れ」は、大脳の皮質の部分の仕事だ。
「指がおぼえてるもんで」とかいう比喩は実際に指に記憶能力があるわけではなく、
この皮質の部分のはたらきによるもの。
724デフォルトの名無しさん:04/03/13 03:05
> 審査とか基準とかないのか?

わたしが審査してあげます。
725デフォルトの名無しさん:04/03/13 03:06
> これがどうしても分かりません。

「どうしても」ってのは、何をしても絶対にってことだ。
つまり、あなたはここで質問しようがないをしようがぜったいにわかるわけがないのだ。
自分でそういってるのだし。
そもそもそうかるがるしく「どうしても」とかいうな。ぼけ。
726デフォルトの名無しさん:04/03/13 03:12
>>682
> エディタについて語るスレはここですか?

そうです。
727デフォルトの名無しさん:04/03/13 03:13
scanfつかっているような本はだめです。
お前は最初からscanfつかっているような本はだめですと思っていたのか!?
ものには順序というものがあるだろう!!
729デフォルトの名無しさん:04/03/13 03:32
順序は関係ないです。だめなものはだめ。
730デフォルトの名無しさん:04/03/13 03:33
>>727
gets()もな!
731デフォルトの名無しさん:04/03/13 03:34
タイトルに、C「言語」なんて書いてあるやつもだめね。

これでいきなり書名リストからばっさり半分はけずってしぼりこめるだろ?
C言語辞典はかなり役に立つぞ
733デフォルトの名無しさん:04/03/13 03:49
あの本だめですね。けっこううそがおおいし。
734デフォルトの名無しさん:04/03/13 03:55
バックスラッシュの代わりに円記号で書いてあるやつは絶対薦めないな。
735デフォルトの名無しさん:04/03/13 04:03
そういえば、うちらが前期にCを習ったときも、先生はぜったいに円記号なんか
使わせなかったもんなあ(東風ゴシックフォントを強制的に入れさせられた)

後期に、Javaの授業の若い女の先生が、改行の説明するとき「えんえぬ」って言うのよ。
最初、何かと思った。改行の話がでるたびにそう言うので、
隣の席のやつと「えんえぬだってさ...」などとそのたびに顔を見合わせてます。
>>728
確かに入力処理も使わないとifとかforに進めないから、scanfは使いたくなる。
#includeとかreturn 0;とかすでにおまじないを連発しているのに、
さらに戻り値チェックとかいっぱいおまじわないといけなくなる。
737デフォルトの名無しさん:04/03/13 04:26
だからといって安易につかってる入門書は、著者の底の浅さがしれる。
738デフォルトの名無しさん:04/03/13 04:43
while(1){
  処理
}

この部分をスレッドとして動かして、
別の処理2を

while(1){
処理2
}

として別々に動かしつづけたいのですが、どういった命令を使えばいいのでしょうか?
アドバイスお願い致します。
>>738
すまんがスレッドは標準Cの範疇には含まれない。

OSもしくは使ってるライブラリによって答が変わってくるので、
該当するスレを見つけてくれぬか。
なんかうざいなー。
>>665がよっぽど悔しくて必死なのかなー。
741デフォルトの名無しさん:04/03/13 05:49
>>739
ありがとうございます
OSはLinuxをつかっています。

fork() 関係を使えば、何とかなりそうな気がしないでもないので、Linux関連でプログラムしているスレ行ってきます
ありがとうございます
742デフォルトの名無しさん:04/03/13 06:14
>>741
Linuxってのはないから、ここ。
http://pc2.2ch.net/test/read.cgi/tech/1055110889/
743デフォルトの名無しさん:04/03/13 06:20
>>742
かさねがさねありがとうございます
744デフォルトの名無しさん:04/03/13 06:36
エディタ C言語を始めよう
コンパイラ Borland C++ 5.5

本を読みながら独学でC言語を勉強しています。
そして練習問題をしていて、初めてコードを書いて、デバッグをしています。
口座番号を入力(-1で終了)、月初の未払い残高、全請求額、全精算額、信用限度額を入力して
新しい未払い残高が信用限度額を超えた場合はその旨と口座番号、新しい未払い残高を表示する
プログラムを作っているのですが、どうしてもエラーが出てしまいす。

どこがいけないのでしょうか?
以下がエラーメッセージと書いてみたコードです。

警告 W8060 zandaka.c 11: おそらく不正な代入(関数 main )
エラー E2206 zandaka.c 33: 不正な文字 ' ' (0x8140)(関数 main )
エラー E2206 zandaka.c 33: 不正な文字 ' ' (0x8140)(関数 main )
エラー E2206 zandaka.c 35: 不正な文字 ' ' (0x8140)(関数 main )
エラー E2206 zandaka.c 35: 不正な文字 ' ' (0x8140)(関数 main )
エラー E2206 zandaka.c 35: 不正な文字 ' ' (0x8140)(関数 main )
*** 5 errors in Compile ***
*** コンパイル終了 ***
745744:04/03/13 06:38
#include <stdio.h>
main()
{
int num;
float mibarai, seikyu, seisan, gendo, new;
printf("口座番号を入力してください(-1で終了):");
scanf("%d\n", &num);
while (num = -1){
printf("月初の未払い残高を入力してください:");
scanf("%f\n", &mibarai);
printf("今月の請求額を入力してください:");
scanf("%f\n", &seikyu);
printf("今月の全精算額を入力してください:");
scanf("%f\n", &seisan);
printf("設定された信用限度額を入力してください:");
scanf("%f\n", &gendo);
new = mibarai + seikyu - seisan;
if (num > gendo){
printf("口座番号:%d\n", num);
printf("信用限度額: %.2f\n", gendo);
printf("新しい未払い残高: %.2f\n", new);
printf("信用限度額を超過しました。\n\n");
}
else{
printf("口座番号を入力してください(-1で終了):");
scanf("%d\n", &num);
}
  }
return 0;   
}
746744:04/03/13 06:40
すいません、見難くなってしまいました・・・
2chってTABは省略されるんですね、次からはスペースで字下げしないと・・・
747デフォルトの名無しさん:04/03/13 07:53
>>745
全角スペースを消せ。
748744:04/03/13 08:16
全角スペースが入ってました・・・。
呆れるほど初歩的なミスで自分が嫌になります。

もう1つのおそらく不正な代入っというのも
while文の比較演算子==を=と書き間違えるてました。

「よくあるミス」っていって本に書いてあるのを読みながら
「こんな間違いしねぇよ」ぐらいの勢いで読んでたのに、
見事にミスりました・・・
>>748
不正な文字 ' ' (0x8140( ってエラーが出てるが・・・・
750744:04/03/13 09:05
すいません・・・
不正な文字なんて表現になれていないもので、何がなんだか解らなくて。。。
しかも、=は==の間違いではなく、!=の間違いでした。

「擬似コードとトップダウン・タスク分解法を使ってアルゴリズムを明確化し
それを元にプログラムを書け」って問題だったんですけど、やっぱり擬似
コードを書いたあとでも流れ図は書かないとダメですか?

今、高校でCOBOLやった時にフローチャートを習ってたので、擬似コードを
見ながらフローチャートを書いてみて、自分が書いたコードからフローチャ
ート書いて比較してみたら全くの別物でした・・・

イチからやり直しです。
高校でCOBOLって、現実的なのかどうかよくわからないな。
752744:04/03/13 09:28
>>751
商業科なんで。
たぶん電気科はCやってると思うんですけど。
>>750
なんか懐かしい話してるな
俺は長年アマやってて初めてプロの訓練受けたのが
メインフレームのカードバッチでFORTRANだったよ
同じ環境でアセンブラとCOBOL(<85)もやった
とにかくウォーターフォールって考え方を文字通り
頭ごなしに押し付けられていたが最後まで馴染めなかった
今はスパイラルだよな 振り返ってみると当時の俺の中の
アマが言ってた主張そままだ もちろん収穫はあった
どこで何をしているのかは書けばいいってものじゃなく
積極的にアピールしろってところとかな

ところで商業科ってスプレッドシートだのSQLだのじゃねえのか?
もしかしてOS/2だったり・・・
754744:04/03/13 10:27
>>753
うちの学校はワードとエクセル、あとCOBOLでした。
前は98SEだったけど、今はXPに入れ替わってます。
COBOL っつーか、プログラミング勉強して役に立つの?
商業科って事務系とか一般企業のサラリーマンに就くと思ってたんだが。
学校で学んで、役に立てれる場面があるのか不思議なんだが。

まぁガンガってください。
>>744
if (num > gendo){

if (new > gendo){
口座番号と限度額比較してどーすんだ
757744:04/03/13 10:36
昔からプログラミングの勉強はしているみたいですよ。
3年位前にADSLの工事に来たおっさんが同じ高校の電気科出身らしくて
話を聞いたら役に立ったとの事。
昔は企業も体力があったから新人を育ててくれて、勉強させてくれたから
深いところまで勉強しなくても、基礎を知っているだけでも同僚を大きく
リードしたとかなんとか言ってました。
今はそんな企業ほとんどないと思うけど、俺は何を思ったか情報系の学校
に進学するんで、今から勉強しているしだいです。
ガンガリます。
>>755
一条校と職業訓練所の違いだろ
どっちかつーと学校で習わなかったことができるようになるために
基本的な考え方・・・と言うより基本のさらに下にある憲法のようなものを
憶えるわけで、できるだけ素のマシンと向き合う題材のほうがいい
759デフォルトの名無しさん:04/03/13 11:26
n次正方行列A,Bが与えられたとき
この2つの行列の積を求めるプログラムを書いてください
>>759
ぼるじょあがC/C++の宿題を片づけますYO! 21代目
http://pc2.2ch.net/test/read.cgi/tech/1078157730/l50
しかし、俗に言う2バイト空白を見せないエディタはプログラマ向けじゃないと思うなぁ。
その点では素のviも>744の使っているらしいエディタも同罪。
まぁ、viの場合は気合い入れないと入力できないから間違ってはいることは少ないが。

>>744
そりゃそうと、実数値はすべてdoubleを使う習慣つけたほうがいいぞ。
762デフォルトの名無しさん:04/03/13 11:51
> if (num > gendo){

なんで空白あけないんだよ
763デフォルトの名無しさん:04/03/13 11:52
> while(1){

なんでこう書こうと思うのかなあ?
何か変な本の影響? > 空白
764デフォルトの名無しさん:04/03/13 11:54
> エディタ C言語を始めよう
> コンパイラ Borland C++ 5.5

意味不明だ。
765デフォルトの名無しさん:04/03/13 11:56
> しかし、俗に言う2バイト空白を見せないエディタはプログラマ向けじゃないと思うなぁ。
> その点では素のviも>744の使っているらしいエディタも同罪。

いいえ。エディター以前の問題。
そんな文字が入る環境がすでにだめ。
>>761
765のは言い過ぎだと思うが
ソースの中に全角文字を入れること自体に
何も感じないようだと問題あるぜ?

地の文はもちろんだが注釈やリテラルでさえ
入りゃいいってもんじゃなく保証の範囲なんか
確認もしてないに1000ペリカ賭けてもいい
terapadが最強のエディタです。
それ以外にないですね。
768デフォルトの名無しさん:04/03/13 12:08
TeraPadは検索系がよわすぎ。
置換が遅すぎ(たいがいのエディターはあの50倍以上高速)
桁区切りが文字の上にかかるので見づらい
検索がファイル末をラップアラウンドさせされない。

利点は、ctrl+Wが最初からわりあててあること
無料なことぐらいかな。

既存のファイルはエンコードを自動判定でも、
「新規」のはそれとは別に設定できるべきだという話は早くからあがっていたのに、
かなりあとになってからの対応だった。作者のセンスのなさがうかがえる。
769デフォルトの名無しさん:04/03/13 12:09
せめて正規表現ぐらいつかえるようになれよ > TeraPad
770デフォルトの名無しさん:04/03/13 12:10
> 765のは言い過ぎだと思うが

いいえ、言い足りないぐらいでしょう。
わたしならもっと言います。
771デフォルトの名無しさん:04/03/13 12:14
わたしもviやEmacsを使えないやつで、「プログラマーです」とか自称してるやつは
最初から信用しないことにしてます。
あと靴下が白いやつも。
愛|♀ ̄≡)) 祈念
>>766
> ソースの中に全角文字を入れること自体に
> 何も感じないようだと問題あるぜ?
というか、コード書いてて日本語入力する必要あるの?

>>771
スーツに白い靴下ってのは、そもそも社会人としてどうかと思う。
774デフォルトの名無しさん:04/03/13 12:24
紺やグレーのスーツで
黒や茶色の靴はいてるのに
靴下が白ってのは

別に社会人じゃなくても
かなり問題だぞ。

女性が、シャネルのスーツきてハイヒールはいてるのに
ルースソックスはいてるようなものだ...と大先生がたとえてらっしゃいましたが。
白靴下伝説なんてここ数年のことだろ
それまでは今ほど気にしてなかったぞ
>>773
しかし、コメントを分けの判らんオレオレ英語で書かれると辛いが。
>>771
C言語をやってて vi や Emacs が何なのか知らないやつは問題だが
Unix 環境のプログラマじゃなければ使えなくても無問題。
コメントを日本語で書くのか・・・
日本男児なら日本語でコメントを書くのが当たり前。
おまえら一人の荒らしに釣られすぎ。
IMEの設定で全角スペースが入らないようにするとしわよせに成れる。
>>781
気にしない奴はコピペで持ち込む。
そう言う理由で,Windows使うこと自体が>765に反する。

まぁ、そう言う奴は2バイト空白どころか行末の無駄な空白とか
ファイル末の無駄な空行を放置しがちだよな。
コメント行の最後に空白を入れることはセオリーではないのですか?
784デフォルトの名無しさん:04/03/13 14:41
>>783
なんでわざわざ空白を入れるの?
日本語に対応してないコンパイラは

// クソ
クソ連結 ←この行もコメントになるのさクソ
ここもコメントだクソ
ここまで。

SJISでは'ソ'の2バイト目が0x5cに該当
初めて聞いた。
もしかしたら Shift-JIS で書いたプログラムを
日本語に対応してないコンパイラに通したときに
表とかソとかで終わる行が次の行と行連結されるのを
防ぐためなのかも?
かぶった。合ってたね。
でもおまえら、そんなC言語が大好きなんだろ?
もちろん
b(^ヮ゚) 大好きさ!
790784:04/03/13 15:14
ああなるほど。
//b(^ヮ゚) \
カワイイ
v(^ヮ゚)b
v<丶^∀´>b
>>783
そう言う空白に何か意味があるのだとしたら,それは無駄ではないんだからいいんじゃないか?
1, Shift JIS も通さないような腐ったコンパイラは棄てる。
2. 5/12 を文字コードの一部に含むような腐った Shift JIS は棄てる。
つーか、改行対策なら単純に/* クソ */でいいじゃないか。
そもそもcスレなんだし。
C99 では // が使える。
その C99 を使える代表的なコンパイラである GCC は、
Shift-JIS を認識できない。
なんかよーC使うこととUNIX使うことの区別ができてないアフォばっかりか、このスレ?
>>795みたいに棄てる自由が保証されてる香具師はおいといて・・・
↑過敏反応しすぎ
>>771みたいな厨がウザイってことか。
いきなり何のことかと思ったよ。
GCCは、はるか昔X68kでSJISパッチとかあったのに、
結局取り込まれなかった。
先人の苦労は確実に無駄になっている。
GNUってひでーな。
va_argを勉強しているのですが、

#defineva_arg(ap, type) \
(*(type *)((ap) += __va_size(type), (ap) - __va_size(type)))

これってap を typeのサイズ分インクリメントしてから同サイズ分デクリメントした
値(アドレス)を返しているように思えるんですが、同じサイズの足し引きして意味
あるんでしょうか?
>>802
何だろう? 仮想メモリ対策かな。
>>802
よく見ろ。apが更新されてるだろーが。

>>803
んなわけあるか。
>>802を見て思ったんですが、
apはどうして括弧で括らなければならないんでしょうか?
>>805
マクロ引数は、カッコがあると困る場合(上の type * とか)を除いて
カッコで括って使うのは常識だ。
ap に何が渡されても優先順位が正しく評価されるように、な。
もし、通常それが何の意味も無いように思えるものでも、
万が一を考えれば無いよりは有った方が良いわけだ。
807805:04/03/13 19:28
なるほど、よく分かりました。
ありがとうございました。
808802:04/03/13 19:46
>>804
>よく見ろ。apが更新されてるだろーが。
目薬指して良くみたら分かりますた。
何でこんな事でハマったんだろう
全角くらいでごちゃごちゃ言うなよ。
NEXTSTEPのCコンパイラはRTFで書いたソースがコンパイル出来てたぞ。w
NeXT キタ━━━━━━(゚∀゚)━━━━━━ !!
>>809
アラン・ケイを煽りまくってたあの迷機か
>>811
OS X や Darwin として生き残ってますが何か?
リアル・カラーコーディングの出来る優れものだったよ。
待ちの時のマウスカーソルが回転する虹色のディスク状になるとことか
Finder のリスト表示とか、
いろんなところに名残が見れるね。
パスワードのぷるぷるが好きだった
815デフォルトの名無しさん:04/03/14 02:36
圭\子
カーソ\ル
表\示
816デフォルトの名無しさん:04/03/14 02:37
> 気にしない奴はコピペで持ち込む。

そんなことで持ち込める環境こそゴミ。
817デフォルトの名無しさん:04/03/14 02:42
>>813
それ以前に、リソースにNEXTアイコンのビットマップ画像さえ入ってたじゃん > Mac OS X
名残って言うか、名前変えただけだったりして。
818デフォルトの名無しさん:04/03/14 03:12
>>777 は、
そう言って自分にいいわけしないと、いてもたってもいられないヤツですな。
かわいそうに。
>>817
Σ(゚д゚ ) シュゴー
821デフォルトの名無しさん:04/03/14 04:26
本に書いてあるソースを間違いなく入力しているのに、上手く実行できません。
数字の入力を促すメッセージの表示のあと変数に数値を受け取って処理する
というものなのですが、数値を入力してエンターを押しても改行されるだけです。
何を疑えばいいのでしょうか?

Dos窓で実行しています。
>>821
ナメとんのか
>>821
>何を疑えばいいのでしょうか?
貴方の頭
824デフォルトの名無しさん:04/03/14 05:43
>>822
なめてないです、本当にわからないのです。
本に書いてある通りソース打って、コンパイルして実行しても正しく
実行されないと困り果ててしまいますよ。
825デフォルトの名無しさん:04/03/14 05:45
#include <stdio.h>
main()
{
int counter, grade, total, average;

/* 初期化phase */
total = 0;
counter = 1;

/* 処理phase */
while (counter <= 10) {
printf("成績を入力してください: ");
scanf("%d\n", &grade);
total = total + grade;
counter = counter + 1;
}

/* 終了phase */
average = total / 10;
printf("クラス平均は %d\n", average);

return 0;
}
826デフォルトの名無しさん:04/03/14 05:46
これですけど、正しく実行できないんですよ。
scanfはスカン(プ
828デフォルトの名無しさん:04/03/14 06:09
>>825
scanf("%d\n", &grade);

scanf("%d", &grade);
829デフォルトの名無しさん:04/03/14 08:16
だからscanfを使ってる本はすてろとあれほどいっただろうに ぼけ。

で、その本の名前をまず書け!
>>821
scanf()を使ってるような入門書は捨てる。
でないと今後も同じように躓くぞ。
scanfを怖がりすぎている回答者はスルーする。
でないと今後も同じように話を逸らされるぞ。
scnafが悪いとは思わんが
どれも扱いが中途半端すぎるな
cin >> grade;
834デフォルトの名無しさん:04/03/14 09:47
832はscanfさえ書けない馬鹿。

> scanfを怖がりすぎている回答者は

っていうか、scanfはどうでもいいところでつまづくようにできてる。
しかもそれが後で何の役にも立たないときてる。
さらにscanfは現実のプログラムで使うことはまず100%ありえない。
入門書でscanfをつかうやつは、まじめに「教える」ことを考えいない証拠。
835デフォルトの名無しさん:04/03/14 09:51
たとえば、あえてあるぶぶんで「つまづかせ」て、そこで考えさせ、
そこで考えたことがあとでその読者がCを使う上で役立つようにしむけるのが、
「いい本」。で、逆にどうでもいいところではつまづかせないように整地しておいてスルーさせる。

scanfを使うことは、こういう常識からまっこうからさからってる馬鹿がやる方法。
scanfでつまづくのはただのscanfのへんなクセによるもの。しかも、
それをのりこえられたとしても、Cの他の部分への応用はまったくきかない。
さらにscanfは実際には使う用事がない。
scanfを乗り越えられたとしても、なんにもやくだたないのだ。
もちろん乗り越えられなかったやつはそこで排除される。
>>834=835?

>っていうか、scanfはどうでもいいところでつまづくようにできてる。

「どうでもいいところ」とは、具体的に何だ?


>さらにscanfは現実のプログラムで使うことはまず100%ありえない。

どうやって確認したんだ?


>「いい本」。で、逆にどうでもいいところではつまづかせないように整地しておいてスルーさせる。

「どうでもいいところ」とは、具体的に何だ?


>scanfを使うことは、こういう常識からまっこうからさからってる馬鹿がやる方法。

「こういう常識」とは、具体的に何だ?


>scanfでつまづくのはただのscanfのへんなクセによるもの。

「へんなクセ」とは、具体的に何だ?


>それをのりこえられたとしても、Cの他の部分への応用はまったくきかない。
>さらにscanfは実際には使う用事がない。

どうやって確認したんだ?
837デフォルトの名無しさん:04/03/14 10:11
レス番号を間違える834が馬鹿に一票。
不明瞭な指示語ばかり連発してないでフェアに批判してみろよ
839デフォルトの名無しさん:04/03/14 10:34
C言語の質問じゃなくてmakefileの質問なんですが、スレが無いのでここで質問させてください。
makeが成功していたらできたファイルを実行して、失敗したら実行しないという風にするには
どうやって書けばいいんでしょうか。
840デフォルトの名無しさん:04/03/14 10:38
そういえばmakeに関するスレがないな。UNIX板にも。
841840:04/03/14 10:40
makeファイル書いたことほとんどないけどこれで試してみたら一応できた
eee : ttt
./ttt
ttt : ttt.c
>>825
printf の次の行に
fflush(stdout); と書いてみれ。
>843 アフォ
>828 ヨメ
>>818
そう言う事にしたいのですか? :-P
>>839

make run

これで駄目?
make: *** ターゲット `run' を make するルールがありません. 中止。
だめだった
>>835
「つまづく」とは? あなたの奥様が産気づかれたのでしょうか?
連呼されてるようですが、唐突にそのような関係のない話を、
身勝手な造語でされても困ります。

奥様が心配なのはわからないでもないですが、
それならばこのスレッドに書いてないで病院に連れていくのが先決でしょう。

スレッドに関係のない話ついでですが、>>665についてはどう思われますか?
昔は「つまづく」だったんだがな。
爪先がつっかえるという意味だから。
scanfネタ振ってる奴答えてる奴はもう消えてくれ。
キモすぎ
>>848
日本語について突っ込むときに、自分もミスしてどうするんだよ...。

> 身勝手な造語でされても困ります。
s/身勝手/勝手/
fgetsしてsscanfを使いましょう
scanf煽り厨のどんなに暴れても決して変わらない特徴 (プププ
>848 「爪突くの意」とあるからある意味正しいような気がするが...

後、char を ちゃー と読む奴の気持ちも分からんでもない。
scanfの歴史を考えれば、printfとか納得するんだが。
printfよりはフォーマット文のほうが使いやすい。
もう一度voidの爪の垢を飲んで来いって話だな。
char(キャラクター) = 文字型変数
char(チャー) = ギタリスト

この差歴然
char(チャー)負け組み
char(キャラ)インテリ気取り
char(チェア)勝ち組
char(チャー)凡人
char(キャラ)常人
char(チェア)変人
char(キャー)超人
「シャア」は?
shar
>>860
坊や
>>861
(・3・)アルェー それは3倍ではないYo
「チャラ」は?
char(シー・エイチ・エー・アール)玄人向け
>>864
歌手
貸し借り無しってことだろ?
868デフォルトの名無しさん:04/03/14 17:44
開発ツールの製品レビューとかで
「ちゃー」とか発音しちゃうと、
信用なくすからね。
やめてね。>某○×社
チェアって読んでるんだけど、えっ!?って言う顔をされることがある。
読んでる → 呼んでる
>>870
どっちでも通じると思う。
872デフォルトの名無しさん:04/03/14 19:55
typedef struct
を禁止する奴の脳みそは腐ってるとしか思えない。
namespaceを汚すからって言ったって、
そんなデメリットよりメリットのがでかいだろ。
何を急にキレてるのやら。
まぁ意見には賛同するけど、
禁止する奴ってそんなにいるの?
typedef struct使うのって、お子様か大学生くらいだろ?

>namespaceを汚すからって言ったって、
>そんなデメリットよりメリットのがでかいだろ。
仕事でまともな大規模開発やった事あるなら、
絶対そんな事言わないわな。
>>872
typedefを叱られた丁稚が居直るようなら配属先や受けさせる研修も変えにゃならん
今現在のスキルレベルではなく吸収力の劣化が早そうだから
>>868
コンパイラの開発元は、ほとんど「ちゃー」としている。
某国とか、モビルスーツとか。
ぷ、リテラルて書いてあるだろ。
>>874
typedef struct使うのって、お子様か大学生くらいだろ?

すると、Windows のヘッダファイルの大半を書いたのは、
お子様か大学生という認識でよろしいか?
typedef struct 普通に使ってるけど何かまずいの?
>>879
C++ ではtypedef structしなくてもstructが省略できるからでは?
>>880
それは >>872
>namespaceを汚すからって言ったって、
と書いているのを知っててのレスか?
C++でもclassを丁寧に付けてますが何か?
>>881
そんな過去のレスは見てないでつ。
>>883
>そんな過去のレスは見てないでつ。
・・・ネラーの鑑だな。
>>880
C++ではstructはすべてのメンバがパブリックなクラスという意味であり、
あくまでクラスの特殊な形という位置づけ。Cのstructとは似てるが異なる。
構造体もクラスになるのか。なるほど。
何でC++をやるんだ?
ここはCだろうが。
またーりしろやこのくそども
氏ね。
>>872
逆にtypedef structのメリットってなんだ?
俺には打ち込む文字数が減るくらいしか思いつかん。
逆にデメリットは君が挙げてる通り明らかで重大だ。
だったら使うべきか、使わないべきか、もう答えは決まってるよな。
>>889
>逆にデメリットは君が挙げてる通り明らかで重大だ。

そこまでして namespace を汚したくないなら、
いっそのことプログラム書くのを止めたらどうよ?

いつまでも綺麗なままでいられるぞ。
>>886
そう、構造体でもコンストラクタが使えるしね。
892デフォルトの名無しさん:04/03/14 23:20
class CLS{};
class CLS cc;
C屋なら、この表記にこだわりぬきましょう。
よってtypedefしてstructを消してしまうのは邪道です。
いまどき純粋なCのコーディングしてるヤシって居るのか?
>>894
ウルセー悪かったなw。
疲れるけどね。
>>893
ああ、お前の言いたい事はよく分かったよ。

ところでさ、お前 va_list って知っているか?
そう、可変長引数の状態を保管しておく変数だ。

で、複雑なマシン上で stdarg を実装することを考えてみてくれ。
どうしても va_list を構造体を使って表現しなくてはいけなくなった時、
お前ならどうやって対応するんだ?
>>896
でもさ
va_listはANSIなので、俺はBSDなのでしらね。
では pthread_t だな(w

もし簡単な機械上(スタックマシン等)で、
スレッドの実行状態を構造体を使わずに
ただのポインタで表現できた場合、お前ならどうするんだ?
void main()で関数宣言すると、何か不都合があるんですか?
無い
>>899
ここの住人に叩かれる。
902デフォルトの名無しさん:04/03/15 00:22
このスレ、毎年春になると異様にスレの消費が速いな・・・
>>902
お前だろ、お前!
scanfといいtypedef structといい此処は本当にアホのすくつだな。