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

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

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

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

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

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

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

推奨NGワード: 「;-)」 「;)」 「ぼけ」 「頭悪すぎ」

C言語なら俺に聞け! Part 79
http://pc5.2ch.net/test/read.cgi/tech/1084138965/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
2なんでぼるじょあなんだよ:04/05/17 08:22
【コンパイラ】
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
Emacs のインデントが気に入らないのですが。
4GCCスレ560:04/05/17 11:17
>>1-2
乙です
>>1
乙。だがスレタイに「ぼけ」が入ってないだろ ぼけ
>>3
設定変えられるだろ
7デフォルトの名無しさん:04/05/17 15:14
RPGを作っているのですが攻撃時のダメージをどう与えるか分かりません。
ダメージをランダムに0〜200以内で発生させるにはどうしたら良いでしょうか
8デフォルトの名無しさん:04/05/17 15:45
97:04/05/17 16:01
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <assert.h>

#define sleep 200
#define N 200

void sleeps(int count)
{
clock_t t = clock() * (1000/CLOCKS_PER_SEC);
clock_t tterm = t + count;

while (t < tterm) {
t = clock() * (1000/CLOCKS_PER_SEC);
assert(t != (clock_t)-1);
}

return;
}

int param(int count)
{
count=0;
int i=0;
107:04/05/17 16:01

for(count=0; count<10; count++) {
printf("■");
sleeps(sleep);
}
printf("\n");

return 0;
}
int main(int i)
{
int j=0;

while(1) {
param(1);
printf("味方の攻撃 %d\n", (int)((double)rand() / ((double)RAND_MAX + 1) * N));
sleeps(sleep);
}

return 0;
}思いっきり途中ですけど、ここまで出来ましたが攻撃時の数値がランダムになりません
どうすれば良いでしょうか。
>>10
srand
127:04/05/17 16:03
sleeps関数を作って■が0.2秒ごとに10個溜まったら攻撃と言う感じにしてあります。
>>11
srand?どこで?
7です すみません出来ました。ですがもう一つ知りたいのですが
■のパラメータが10個溜まるのを0.2秒置きにしてあります。
これも0.1秒〜1秒の間で行う事は出来ますか?
const int gdim[] = {100,100,100,100};

int func(const int* dim)
{
return sizeof(dim)/sizeof(int);
}

int main(void)
{
int ans;

ans = func(gdim);

return 0;
}

配列の要素数を調べたいけど、gdimのサイズを返さずに
int*の大きさを返してるみたいなんですけど
どうすればいいですか?
16デフォルトの名無しさん:04/05/17 18:57
>>15
int func(void)
{
return sizeof(gdim)/sizeof(int);
}
>>14
0.2秒という指定を0.1秒や1秒にすればいいだろ
多分お望みの機能を実装するのに関数じゃ無理。
マクロにしとけ。
19デフォルトの名無しさん:04/05/17 19:09
配列を使って
n×nの行列の2つの行列をかけ合わせるプログラムをつくりこれを用いてA**(2**m)を計算するプログラムを作ってください。
>>19
いやです。
宿題なら専用のスレへ。
>>19
作ってくださいと来たか。
 C/C++の宿題をやらせて、お兄ちゃん 22代目
 http://pc5.2ch.net/test/read.cgi/tech/1083050221/l50
1が見えない。山崎渉だろうか。
>>16,18
サンクス
24デフォルトの名無しさん:04/05/17 19:56
>>http://pc5.2ch.net/test/read.cgi/tech/1084138965/997
初心者対応のコード書く必要のある職種はあるよ
大多数は逆だけどね
25デフォルトの名無しさん:04/05/17 19:58
>>15
グローバルやめろ ぼけ
話はそれからだ
>>25
ぼけぼけ言うなぼけ。ぼけって言ったほうがぼけなんだぞぼけ。
27デフォルトの名無しさん:04/05/17 21:21
>>26
もうちょっとヒネれ
ネタとしては悪くないが
それじゃ食いつき悪いだろ
タイピングソフトを造りたいと思うんですが、
コマンドラインから一文字入力するごとにプログラムに渡す処理をしたいんですけど
getcを使うと、エンターを押さないとプログラム側に入力した文字を渡せません。

一文字入力した瞬間にプログラムに文字を渡すにはどうしたらよいでしょうか?

JAVAでやれとかいうのは無しで。
定時間(5ms)で動いてる関数があります。
その関数の中で複数の処理を時間に応じて実行
したいのですが、以下のやり方以外にいい方法ないでしょうか?

void test(void)
{
if(count++ == 200)
処理A
if(cuont == 400)
処理B
if(count == 600)
処理C
count = 0;
}
test関数は5ms毎に動くので、count=200っていうことは1Sってことです。
実際は処理は10個ぐらいあります。
個人的にcountの値が処理数に応じて大きくなっていくのが嫌です。
>>29
大きくなるのがいやならカウントダウンにすればー
実際どこかしらでカウンタ使う以外ない
>>28
kbhit()
>>28
標準ライブラリでは無理。
処理系提供のライブラリで当該機能を探すべし。
処理系固有の話はそれぞれのスレで。
countの値が一定の法則で増えていくなら、関数テーブルでディスパッチしたいところ。
kbhit()、getch()、カーソル移動、色変え、タイマー、
ここらあたり標準に組み込んでほしいな。
>>34
でももういまさら
36デフォルトの名無しさん:04/05/17 22:21
C04できないかな? 爆弾じゃなくて
37デフォルトの名無しさん:04/05/17 22:25
iniファイルから読み込むプログラムを教えてください。
iniファイルには2つのint型の数値が入ってます。
そんなんじゃわからん。
iniファイルをそのまま見せろ。
printfで間違えて%lfとか書いてあったりしますが、
例えば、gccで-ansi -Wallとかやっても警告すらでません。
そのほかにもいくつかのコンパイラでANSI指定してみても、
警告もでないし、正しく実行されます。

しかし、ANSI Cの規格書を読む限り、%lfとした場合の動作は
未定義なので、コンパイラは警告を出すべきだと思いますが、
なぜ出ないんでしょうね。
誰か教えてください。
>>39
そこは言語ではなくライブラリの引数のミスなので
コンパイラは普通検出できない。
やってやれないことはないし、ミス多発地点だから
やってくれてもいいとは思うけどね。
>>29
if (++count < 200)
return;
count = 0;
if (n == 10)
n = 0;
switch (n++) {
...
}
なあ、なんでgccにはconio.hさんがいないんだ?
標準じゃないんだから、無くても不思議ではない。
44デフォルトの名無しさん:04/05/17 22:54
>>41
そのやり方でもいいんですが、それだとファイル
内変数をcountとnで二つ取ることになりますよね。
1つで実現するのは無理ですかね。
>>44
見栄えの問題なら、こういうやつ?
void test(void)
{
if ( ++count % 200 ) return;
switch ( count / 200 ) {
case 1:
処理A
break;
case 2:
処理B
break;
case 3:
処理C // これが最後なら
count = 0;
break;
}
}
なんでcountが大きくなるといやなんだ?
わけわからん。
自分のちんぽより大きくなるのが気にくわんのだろう
>>44
なんで二つにするのがいやなのかわからんが
ひとつにしたければくっつけたら?
struct {int count, n;} cnt = {0};
49デフォルトの名無しさん:04/05/17 23:34
>>45
おまえswitchの時点でのcount/200がいくつになってるか知らんのか?
>>49
200の倍数ですが
C言語でWINDOWSとLinux両方でプリントするプログラムを考えています。
Canon LBP-220(レーザープリンタ)を使う予定です。
WIN32APIとMFCとを使わないで、CUIで作りたいのですが、思いつきません。
誰か教えていただけないでしょうか。
Cの変数って(intとか)処理系によって(コンパイラによって?OSによって?)サイズが
変わるって本に書いてあったけど、何か利点があるのでしょうか?
それとも何かの制約上仕方なくそうしているだけで、別に得することはないのでしょうか?
>>52
int はその処理系でもっとも自然に扱えるサイズがとられる。
普通は、CPUのレジスタサイズがそのままintのサイズになる。
目の前の窓ガラスの外に、大きな巣を張ったクモ(こげ茶色をした
いかにもなタイプ(潰すと汁が沢山出てきそうなやつ)がいます。
部屋の明かりに誘われて飛んできた虫を捕まえる魂胆なのでしょう。
なかなか知恵のあるやつだと思います。そこで質問です。
クモは頭を下にしたまま長時間じっとしてますが、頭に血が登って
しまったりしないんでしょうか。また、頭を下にしなきゃならない
理由が何かあるんでしょうか?
55デフォルトの名無しさん:04/05/18 00:27
> CPUのレジスタサイズがそのままintのサイズになる。

これがかなりの大うそ。
しったかぶりくん!
>>55
普通は、という条件がついてるのに「かなりの大うそ」ですか?
正しくは?
蜘蛛の体内管は非常に細いために毛細管現象が起こります。
したがって逆さまでも重力で体液が下方にたまるということはありません。

頭を下にするのは習性です。おそらく磁場か重力場を感じ取り、体の方向
を決めているのでしょう。綺麗な巣を作ることが出来るのもこの習性による
ものです。
55じゃないが、都合のいいサイズであって、レジスタとはかぎらんわなあ
では後学のために、
int が レジスタサイズではない処理系(コンパイラ)と、そのメリットを教えてください。
普通は、か。便利な言葉だ。
8bitCPUではintが16bitだね 普通は。
intが8bitだと使いづらいからね 普通は。
メリットはオーバーフローをしないようにだね 普通は。
といっても普通はレジスタだなw
>>61
それはうそ。
8bitのint だって 、普通に使われている。
>>63
普通は、という条件がついてるのに「うそ」ですか?
条件がついているから「うそ」ではない。
と書いたのは私ではない。
ということにしたいのですね;)
それを疑うなら反論のしようがありませんけどね。
68デフォルトの名無しさん:04/05/18 01:06
>>39
最新の規格ではprintfにおける%lfは%fと同じになったらしいよ。
69←エッチ:04/05/18 01:14
 
>>59
PS2はint→32bit,レジスタサイズ→128bit

メリットなんて知らん。
まあ、intが128bitってのも無駄だが。
>>59
64ビットプロセッサだと
byte=8,short=16,int=32,long=64
にしたらなんかきれいじゃん。int=64にしたら32bitがなくなるし。
>32bitがなくなるし
short=32,int=64,long=64 だろ
byteって何?
bitの集まり
75デフォルトの名無しさん:04/05/18 01:39
74=71
必死だな
ハズレ
77デフォルトの名無しさん:04/05/18 01:44
>>59
普通はintが32bitなので、それ以外にすると動かない腐ったソースがたくさん出てくるから。
ま、互換性のため。つまり、普通は32bitというわけだ。
いわゆるマイコンに限れば普通16bitかもね。関わりたくない世界だ。

>>70
つまり、普通じゃない。

>>73
charの間違いだと思われ。
78デフォルトの名無しさん:04/05/18 01:46
nyで落としたBorlandのコンパイラがint=16bitだったな。
>>78
80x86は16bitCPUだからな。
intは普通は32bitか
C言語スレとは思えないアホな書き込みだな
>>80
ま、ガンガレw
82デフォルトの名無しさん:04/05/18 01:51
80 :あぼーん[あぼーん]:あぼーん
あぼーん


誰?
8371:04/05/18 02:08
byte=8
と書いたのは漏れだ。死にたい。
>>71
Javaですな。
byte→charだけど
8571:04/05/18 02:13
>>80
77は、intが32bitであることを前提に書かれたくそコードが多すぎるので、
互換性のために、1ワード?(レジスタサイズまたはバスサイズ)が32bit以上になっても、
intが32bitのままにされてしまうと言いたいのだと思う。
特殊なケースを持ち出しても普通は論法を覆したことにはならないよ。
87デフォルトの名無しさん:04/05/18 02:21
また普通か!
俺的にはどうでもいい。

typedef signed char s1;
typedef unsigned char u1;
typedef short s2;
typedef unsigned short u2;
typedef long s4;
typedef unsigned long u4;
typedef __int64 s8;
typedef unsigned __int64 u8;
typedef float f4;
typedef double f8;

…という具合に、実サイズが判る形に置き換えちゃってるし。
もちろん、コンパイラに合わせて書き換える必要あるけど。
マンドクセー
C99 的には >88 ダメだ
まったくの初心者なんで、煮詰まってます。
チェックボックスにチェックを入れるとテキストフィールドに入力出来る状態に
チェックを外すと、入力出来ない状態にしたいのですが、どうしても出来ません。

void jCheckBox1_actionPerformed(ActionEvent e) {
boolean a;
a=jCheckBox1.isSelected();
jTextField1.setEnabled(true);
}
(テキストフィールドのenabledプロパティをデフォでfalseにした状態)

にすると一度だけ入力出来るようになり、そのままチェックを外しても入力をすることが出来る状態になってしまいます。
よろしければご教授お願い致します。
void jCheckBox1_actionPerformed(ActionEvent e) {
boolean a;
a=jCheckBox1.isSelected();
if(a){
jTextField1.setEnabled(true);
}else{
jTextField1.setEnabled(false);
}
}
どうもありがとうございましたー
おかげさまで出来ました。
仮にこれを「if」を使わずに組み込むとしたら、どのようになるんでしょうか?
「?」でも使え
96デフォルトの名無しさん:04/05/18 02:57
>>94-95
jTextField1.setEnabled(a?true:false);
こんな感じか。
97デフォルトの名無しさん:04/05/18 03:02
void jCheckBox1_actionPerformed(ActionEvent e) {
jTextField1.setEnabled(jCheckBox1.isSelected()?true:false);
}

これでいいんじゃない?
void jCheckBox1_actionPerformed(ActionEvent e) {
boolean a;
a=jCheckBox1.isSelected();
jTextField1.setEnabled(a) ;
}
void jCheckBox1_actionPerformed(ActionEvent e) {
jTextField1.setEnabled(jCheckBox1.isSelected());
}
>>91-99
これCか?
ひゃくげと
101デフォルトの名無しさん:04/05/18 08:24
ふつう
unsigned long long int

long long int
だね。最近使う用事が多いのだが
102デフォルトの名無しさん:04/05/18 08:25
レジスターは24bitでも、intが16bitのマシンはよくあるね。
>>100
仮にCでかかれていたとしても標準Cでは無いな
srand((unsigned) time(NULL));
/* 1〜200の擬似乱数を1個ずつ発生 */
for (i=0; i<1; i++) {
j = 0; // バッファクリア
j = rand()%200;
printf("%d",j);
}
と言うような事をしているのですが最初に出てくる値は確かにランダムなのですが
その後、規則正しく増えていきます。不規則に上限する値を出すにはどうしたら良いですか?
乱数を、jという変数に格納してはありますが rand()%200 を直接入れても構いません
>>103
>jTextField1.setEnabled
構造体のフィールドに関数ポインタ持たせれば不通に通るだろ。
107デフォルトの名無しさん:04/05/18 10:20
>>104
srandは一度だけ呼ぶ。

ところで、
> for (i=0; i<1; i++) {
はネタか?
108107:04/05/18 10:21
増えてゆくと言っているからsrandを読んでいるのは一度だけか。
109103:04/05/18 10:22
>>107
一回表示するだけだから
110デフォルトの名無しさん:04/05/18 10:25
>>109
だから、それをループにする意味があるのかと(ry
>>104
>/* 1〜200の擬似乱数を1個ずつ発生 */
コメントとコードが一致していない
betunidoukakougaiijane-kaYO
結局どう書けばいいんだ?srandの辺りがおかしいのは分かってんのよ
rand()がどういう値を持つか決めてないし
>>104
>その後、規則正しく増えていきます。
となっているが、このコードだと一回しか乱数を得ていない。
繰り返しているのなら、その繰り返し全体を書いてくれ。
115デフォルトの名無しさん:04/05/18 10:34
とりあえず、srand((unsigned) time(NULL));はmainのはじめに。
>>114
コードを書いた後実行ファイルが動いている時に規則正しい
またはコードそのものに適当な変更を加えても乱数にもかかわらず一回目の実行と二回目の実行が同じ数値だったり。
不正確な質問に妄想で答えるなよ。
地球がゴミで埋まってしまう。
118デフォルトの名無しさん:04/05/18 10:37
> igned) ti
空白あけるなよぼ(ry
>>116
乱数列はあくまでもsrandを実行してからの一連のrand()が疑似乱数になるもので
srandに与える種が変わらないときは乱数列自体が同じになる。

で、種はtimeなので、同一秒内だとまったく同じ乱数列になる。
120119:04/05/18 10:52
繰り返し起動し、乱数列の最初の値からきっちりランダムっぽくしたいときは
srandに与える種が起動の度に確実に変わるものを選んだほうほがいい。
(が、そういう手段は処理系依存になる)

また、だんだん大きくなるとかいってるのは、使っているrand()の実装が
種がだんだん大きくなるのにあわせて大きくなるような影響を受ける
アルゴリズムなんだろう。
別の疑似乱数ライブラリを入手して利用すれば改善するかもしれない。
>>119
では、結局どこをどうすれば>>104は乱数になるのカナ?
122デフォルトの名無しさん:04/05/18 10:54
なんで挑発的になっているんだろう。
>>104
>と言うような事をしている

書いてある部分以外でバグってる、に一票。
>j = 0; // バッファクリア
すぐ下で代入されるのになんの為の代入だ?
普通はどういう処理系を普通と呼ぶのですか?
126デフォルトの名無しさん:04/05/18 13:51
>>125
規格合致処理系
127Error@MSN:04/05/18 13:59
79で質問に答えてくださった方、ありがとうございました。
サーバー側でテストをしてみたいんですが、
コンパイルしたあとに出来るファイルも転送しないといけないのでしょうか?
test.exe,test.objなどです。
128デフォルトの名無しさん:04/05/18 14:16
>>127
前スレは落ちていて見られない。
質問をもう一度貼ってくれ。
結局>>14について、誰も解決出来るコードが書けないのか
落ちたな。この板。
130128:04/05/18 15:39
あー思い出した。例のCGIの質問か。
> 出来るファイルも転送しないといけないのでしょうか?
当然。ただ、ソースファイルやオブジェクトファイル(.obj)はいらないぞ。


# .exeか。なんか動かない気がする。
131デフォルトの名無しさん:04/05/18 15:41
>>129
コードじゃないが>>17が答えているだろ。
132129:04/05/18 15:47
>>131
間違い。">>114について" だ
133129:04/05/18 15:48
ああ…。>>104だ 何度もスマソ
自分の理解能力が無いことを板のせいにするのもどうかと。
>>114の希望に沿った回答が無い以上、>>119の答えが精一杯だと思うが。
あと、>>106のリンク先も読む事をお勧めする。

それとも、コードを示さないと何も分かりませんか?
135デフォルトの名無しさん:04/05/18 16:16
tu-ka>>115が正解だYO
>>129
おまえはまず日本語から勉強しろ。
>>127
もう遅いかもしれんが、サーバのOS、コンパイル環境のOSや
コンパイラ名(セルフかクロスかも)を書けば適切なレスがつくぞ

PC(Windows)のVC++でmakeしたexeをUNIX系OSに持っていったところで
クソの役にも立たんからな
下の問題について教えて。
while文使って整数の2乗を描くプログラムを作れだとさ。
0 
1 *
2 ****
3 *********

  ・
  ・
こうやって表示させるためにはどうしたらよろすぃ?
139デフォルトの名無しさん:04/05/18 16:55
>>138
pow関数を使え
>>138
宿題スレ行け、もしくは氏ね
素数を表示させるようなプログラムを書いてみましたが、
何かが激しく間違ってる気がしてなりません。
一応素数は表示されるんですが、いっぱい表示されちゃうです。
どうしまぷよ

#include<stdio.h>
main()
{
 int a,b;
 for(a=2;;a++){
  for(b=2;b<a;b++){
    if(a%b==0) break;
    printf("%d\n",a);
    }
 }
}
142デフォルトの名無しさん:04/05/18 17:48
>>141
ネタはよそでどうぞ。
>>141
#include<stdio.h>
main()
{
 int a,b;
 for(a=2;a<1000;a++){
  for(b=2;b<a;b++){
   if(a%b==0) goto boke;
  }
  printf("%d\n",a);
 boke: ;
 }
}
>>105
いや、だから、そういうことを言っているんじゃなくて、別スレに行けといっているのだよ。
そのくらいのことは大体の人が理解しているだろうよ。
終わったネタを蒸し返すなよ
>>143
for(b=2;b<a;b++){

for(b=2;b<(a/2);b++){
のほうが良くないか?
int main() {
char *s;

gets(s);
printf(s);

return 333;
}
セキュリティホール ゲッツ!
>>141
factor使え
150143:04/05/18 21:56
>>146
改良の余地はたくさんあると思うが、なるべる>>141のプログラムを
生かすようにした。

その修正は、4が素数になってしまうのでダメ。
151150:04/05/18 21:58
×なるべる
○なるべく
152Error@MSN:04/05/18 22:31
>>127,130
ありがとうございました。
153デフォルトの名無しさん:04/05/18 23:25
>>147
fgets使えば直るぞw
>>153
もっと根本的な問題もある分けだが…(w
155デフォルトの名無しさん:04/05/19 00:35
#include <stdio.h>

main()
{
  int i, j, k;

  for (i = 0; i < 10; i++) {
    printf("%d ", i);
    for (j = 0; j < i; j++) {
      for (k = 0; k < i; k++)
        printf("*");
      
    }
    printf("??/");
  }
}
156デフォルトの名無しさん:04/05/19 00:36
> for(b=2;b<(a/2);b++){
> のほうが良くないか?

空白あけろよ ぼけ
>>156
それ飽きた
158デフォルトの名無しさん:04/05/19 01:11
>>157
飽きるほど言わせるなぼ け
コード規約は会社ごとに違うだろぼけ
うちでは、こう書くんだぼ け

/* ----- fugafuga ----- */
void* f(int a, int b)
{
 if(a < b) { /* hogehoge */
  func(a, b);
  a += b -1;
 }
 return NULL;
}
160デフォルトの名無しさん:04/05/19 01:23
>  if(a < b) { /* hogehoge */

空白あけろよ ぼけ

> a += b -1;

空白あけろよ ぼけ
>>160
>空白あけろよ ぼけ
空白あけるなぼけ
よくhogeとかfooって使うのはなんで?
163デフォルトの名無しさん:04/05/19 01:31
それらは系列が違うのでまぜるな危険
164デフォルトの名無しさん:04/05/19 01:36
hogeはhageと一緒に使う物。
fooはbar,bazと一緒に使う物。
165デフォルトの名無しさん:04/05/19 01:44
bizは?
>>162
RFC検索汁
man嫁
141のプログラム、やっぱり(a/2)の方が圧倒的に速いのでこうしたらいいのでは。

#include<stdio.h>

main()
{
 int a,b;

 for(a=2;;a++){
  for(b=2;b<(a/2);b++){
    if(a%b==0) goto next;
    }
  if(a!=4) printf("%d\n",a);
  next:;
}

}
VC++で勉強してるものです

Cでご飯食べている方々にお聞きしたいのですが
派遣先やら社内での開発環境はやはりVCが多いのでしょうか?

gcc関連はほとんど勉強してないのでそれで問題ないのか気になったので
質問させてもらいました
makeユーティリティプログラムなるものが使ってる参考書で出てきたので
正直あせっております

ウラハラUNIX系が多かったり・・・・

よろしくお願いします
>>169
スレ違い。つーか鼬害?

unix系の知識は兎も角、VC使いを自認するなら最低限Windowsの操作(*1)、
できればコマンドライン操作(*2)、願わくばCygwinが使えるようであって欲しい。

#1:ショートカットキーとかVCの設定変更とかできる程度でもいいから
#2:コマンドラインからプログラムを起動するとかリダイレクトでファイル作るとか

それさえできない香具師が多過ぎるよ……_/ ̄|○
>>169
Emacs だろ?
ハカー は、2行以上のコマンドには、Makefile 使うんだよ。
>空白あけろよ ぼけ

嫌ならindent使え ぼけ
http://www.vector.co.jp/soft/solaris/x86/se045590.html
> 嫌ならindent使え ぼけ
> http://www.vector.co.jp/soft/solaris/x86/se045590.html

/usr/bin/indent 使えぼけ

つーか、Emacs 使えぼけ
174デフォルトの名無しさん:04/05/19 09:04
ふつうccです。現場でVCなど使いません。
175デフォルトの名無しさん:04/05/19 09:04
マクロ定義を退避し、あとで復帰させたいのですが、以下のようにしても上手くいきません。
何か良い方法はないでしょうか。

#ifdef WINAPI
#define TTT WINAPI
#undef WINAPI
#endif
...

#ifdef TTT
#define WINAPI ##TTT
#undef TTT
#endif
176デフォルトの名無しさん:04/05/19 09:05
> if(a%b==0) goto next;

ださ...
なんでこんな目的にgotoが必要?
177デフォルトの名無しさん:04/05/19 09:05
すいません、上記のトークン連結演算子(##)は余計ですので無視してください。
>>175
##とる
179175=177:04/05/19 09:07
>>178
すいません、上記のトークン連結演算子(##)は余計ですので無視してください。
180178:04/05/19 09:15
>>177
リロードしなかった。
しかも的外れな答えでした。
スマソ

>#ifdef WINAPI
>#define TTT WINAPI
>#undef WINAPI
>#endif
TTTを使う前にWINAPIをundefしてるから、たとえば
  int TTT WinMain()

  int WINAPI WinMain()
に置き換わるけどWINAPIはWINAPIのまま。

何か良い方法1
  #define WINAPI ○○  // WINAPIがこう定義されてたら
  #define TTT ○○   // TTTをこう定義する(WINAPIじゃなくて○○)

何か良い方法2
  WINAPIをundefしない
>>176
まさかループ脱出用のフラグでも立てろと?
ださ...
182175=177:04/05/19 09:23
>>180
なるほど、#define TTT WINAPI が実行されたときに WINAPI の値が解決され、
TTT に○○○がセットされるわけではなく、
展開時に TTT→WINAPI→○○○ と解決されるということなのですね。
プリプロセッサの動きをよく理解していませんでした。ありがとうございます。
>>176
いつも使わないからといって、ここぞという時にも使わない香具師はぼけ
とりあえずこうすればgotoは消せるが
  for ( b = 2; a%b ; ++b ) {
   if ( b >= (a/2) ) {
    if ( a != 4 ) printf("%d\n",a);
    break;
   }
  }
>>168のやつ、結果をファイルにリダイレクトさせるようにして
ずっと動作させてたら 3160687 まで来た。
簡易ベンチマークにいいかもね。
183の"ここぞという時"がどんな時なのか興味
あそこだよあそこ
http://www.kumei.ne.jp/c_lang/intro/no_57.htm
ここのサンプル実行しても、
WinMain関数宣言してるか確認しろってゴルァされるんだけどどうすればいいの?(つд`)
>>189
スレ違いだゴルァ
メッセージは改変や省略せずに書けやゴルァ
つかってるOSとコンパイラ書けやゴルァ
>>190
あ、これってCには入らないんだね…カーチャンカンベン('A`)
とりあえず聞いてくれたので折角だから書くよ

'WinMain' : 関数はオーバーロードできません。
'WinMain' の宣言を確認してください

こんなんが出る…OSはXP、コンパイラはVC++6.0
>>191
とりあえず見てしまったので折角だから答えるよ。
HANDLE を HINSTANCE に置き換える
193いお:04/05/19 20:39
アルゴリズムで、文字列のALONGSTRINGSSORTINGANDMARGINGEXSAMPLEを使って置換え選択法で
ランを作ってください
いやです。
>>192
アリガd、無事出来ますた
196いお:04/05/19 20:46
お願いします
質問なんですが、ディアブロUというゲームをやっていると、突然
Assertion Failure
Location : Fog\Src\Mem\mem.cpp, line #1277
Expression : !TESTBITDWORD(pPoolBlock->pUsageTable, nBlockOffset )
とエラーが出てきて画面が固まってしまいます。
板違いだったら申し訳ないのですが、(.cppってC言語だと思ったので)
これってどんなエラーなんですか?
何か分かる方いらっしゃいましたら対処法を教えてください><
>>197
メーカーに聞け
作った人以外には無意味な情報だ
IA32環境のlongが32bit
IA32e(IA64)環境でlongが64bit
という前提の下

uint64_t a=0; #として
printf("%llu\n", a);
とするとIA32では、コンパイル時にwarningが出ないけど、
IA64ではwarning出ます。
#longが64bitなので
#まぁwarningだから無視してもいいけど。。。

#if (BITS_PER_LONG == 32)
printf("%llu\n", a);
#else
printf("%lu\n", a);
#endif

とすると、コンパイル時にはどちらの環境でもwarningが
でません。

で、↑のプリコンパイラ文を使う方法以外の解決案(マクロ)
あったら教えてください。

ある男が、自分を愛している3人の女の中で誰を結婚相手にするか長いこと考えていた。 そこで彼は3人に5000ドルずつ渡し、
彼女らがその金をどう使うか見ることにした。

 一人目の女は、高価な服と高級な化粧品を買い、最高の美容院に行き、自分を完璧に見せるためにその金を全て使って こう言った。
「私はあなたをとても愛しているの。 だから、あなたが町で
 一番の美人を妻に持っているとみんなに思ってほしいのよ」
二人目の女は、夫になるかもしれないその男のために新しいスーツやシャツ、車の整備用品を買って残らず使いきる と、こう言った。
「私にとってはあなたが一番大切な人なの。だからお金は全部
 あなたのために使ったわ」
最後の女は、5000ドルを利殖に回し、倍にして男に返した。
「私はあなたをとても愛しているわ。 お金は、私が浪費をしない、 賢い女であることをあなたに分かってもらえるように使ったのよ」

……男は考え、3人の中で一番おっぱいの大きい女を妻にした。
>>199
printf(BITS_PER_LONG == 32 ? "%llu\n" : "%lu\n",a);
>>201
それ、別のwarningがでない?
>>202
コンパイラはそこまで賢くないと思うが。
#printf("%s\n", foo);がputs(foo);に最適化されたのには驚いたが。
>>199
C99 的には、

#include <inttypes.h>
printf(SCNo64 "\n", a);

なんだけど、VC++ では使えない罠。
205デフォルトの名無しさん:04/05/20 00:18
入力した文字列のそれぞれの文字の数、例えば「あいうえああえ」って入力したら
あ:3
え:2
い:1
う:1
みたいなのだすにはどうしたらいい?少ない文字数ならswitch文使えば良いんだろうけど
多いときは??
間違えた、
printf(PRIu64 "\n", a);

>>205
少ない文字数だとしてもどうやってswitch使うのやら
208デフォルトの名無しさん:04/05/20 00:33
>>207
case 'a': a++; break;
case 'b': b++; break;

みたいな
文字とカウントのペアをつくれ
>>205
多かろうが少なかろうがテーブルだろ
211デフォルトの名無しさん:04/05/20 01:17
テーブルってなに?
>>211
食卓
ひねりがないな
未来から来たサイクロプスの息子です
そもそも全角文字でswitch使えんの?
case 'あ': ・・・
リスト構造でもつかって、あたらしいのがくるたびmallocしてけ

typedef struct {
int cnt;
char moji[2];
char* next;
char* prev;
} LIST;
環境依存です
>>215
charでなければならないというわけではない。shortでもlongでも。
>199
プリコンパイラ文って何だよという突込みを入れたいところだが、
各printfで処理を切り分けるのも面倒だと思われるので、>204
みたいなのを自前でどこかに定義すればいいのではないかと。

#if (BITS_PER_LONG == 32)
#define SPEC_U64 "%llu"
#else
#define SPEC_U64 "%lu"
#endif

みたいな感じで。
あ、じゃあ全角だったらshotrにcastしてswitch…
って、だからどうやってswitch文で実現すんだよ。
と思ったが、65536個のcase文を作ればできるか。
いつか全角文字が気軽に使える日が来るといいね
223デフォルトの名無しさん:04/05/20 02:13
> とりあえずこうすればgotoは消せるが
>   for ( b = 2; a%b ; ++b ) {

空白空けるなよ ぼけ。
空白あけろよ ぼけ。
空白あけろよ ぼけ。
空白空けるなよ ぼけ。
空白空けるなよ ぼけ。
224デフォルトの名無しさん:04/05/20 05:09
空白を空けるとコンパイルが遅くなるから嫌。
225デフォルトの名無しさん:04/05/20 09:07
じゃあ何でカッコのすぐ内側にあけてるんだよ ぼけ
226デフォルトの名無しさん:04/05/20 09:09
おまえら...。
count[code]++; すればいいだけだろうが
227デフォルトの名無しさん:04/05/20 09:13
int
main
(
)
{
printf
(
"hello world\n"
)
;
return
;
}
これで満足か?
228デフォルトの名無しさん:04/05/20 09:34
>>227
改行は二回続けて入れろぼけ
i\
n\
t
m\
a\
i\
n
(ry
230デフォルトの名無しさん:04/05/20 10:30
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
enum{ YLEN = 24, XLEN = 79 };
const double PI=3.14;
char a[ YLEN ][ XLEN ];
int i, j, t,r ;
double g=9.8;
for ( j = 0; j < YLEN; j++ )
for( i = 0; i < XLEN; i++ )
a[ j ][ i ] = ' ';
for ( i = 0; i < XLEN; i++ ) a[ 23 ][ i ] = '-';
for ( j = 0; j < YLEN; j++ ) a[ j ][ 0 ] = '|';
a[ 23 ][ 0 ] = '+';
for ( t = 0; t < 25; t++ ){

double r =(double) 45/180*PI;
int cx = (int)(3.1* cos(r)*t);
int cy = (int)(3.1*sin(r)*t-1/2*g*t*t);
a[-cy+23][cx+0]='*';
} /* for */
for ( j = 0; j < YLEN; j++ ){
for( i = 0; i < XLEN; i++ )
printf( "%c" , a[ j ][ i ] );
printf( "\n" );
} /* for */
return ( 0 );
} /* main */
と45度の斜方投射のプログラムを作ったのですが、どこがだめでしょう??
231デフォルトの名無しさん:04/05/20 10:30
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
enum{ YLEN = 24, XLEN = 79 };
const double PI=3.14;
char a[ YLEN ][ XLEN ];
int i, j, t,r ;
double g=9.8;
for ( j = 0; j < YLEN; j++ )
for( i = 0; i < XLEN; i++ )
a[ j ][ i ] = ' ';
for ( i = 0; i < XLEN; i++ ) a[ 23 ][ i ] = '-';
for ( j = 0; j < YLEN; j++ ) a[ j ][ 0 ] = '|';
a[ 23 ][ 0 ] = '+';
for ( t = 0; t < 25; t++ ){

double r =(double) 45/180*PI;
int cx = (int)(3.1* cos(r)*t);
int cy = (int)(3.1*sin(r)*t-1/2*g*t*t);
a[-cy+23][cx+0]='*';
} /* for */
for ( j = 0; j < YLEN; j++ ){
for( i = 0; i < XLEN; i++ )
printf( "%c" , a[ j ][ i ] );
printf( "\n" );
} /* for */
return ( 0 );
} /* main */
と45度の斜方投射のプログラムを作ったのですが、どこがだめでしょう??
232デフォルトの名無しさん:04/05/20 10:31
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
enum{ YLEN = 24, XLEN = 79 };
const double PI=3.14;
char a[ YLEN ][ XLEN ];
int i, j, t,r ;
double g=9.8;
for ( j = 0; j < YLEN; j++ )
for( i = 0; i < XLEN; i++ )
a[ j ][ i ] = ' ';
for ( i = 0; i < XLEN; i++ ) a[ 23 ][ i ] = '-';
for ( j = 0; j < YLEN; j++ ) a[ j ][ 0 ] = '|';
a[ 23 ][ 0 ] = '+';
for ( t = 0; t < 25; t++ ){

double r =(double) 45/180*PI;
int cx = (int)(3.1* cos(r)*t);
int cy = (int)(3.1*sin(r)*t-1/2*g*t*t);
a[-cy+23][cx+0]='*';
} /* for */
for ( j = 0; j < YLEN; j++ ){
for( i = 0; i < XLEN; i++ )
printf( "%c" , a[ j ][ i ] );
printf( "\n" );
} /* for */
return ( 0 );
} /* main */
と45度の斜方投射のプログラムを作ったのですが、どこがだめでしょう??
その注意力のなさ
234デフォルトの名無しさん:04/05/20 10:51
2〜300までの素数を表示させたいのですが、以下のようにやると2のときだけ表示されません。
どうしたらよいのでしょうか?ご教授ください。

#include <studio.h>

int main ( void )
{
int i;
int j;
int sum = 0;

for ( i = 2 , i <=300; i++ ) {

if ( i = j ) {

sum = sum + 1;
printf("%4d", i);

if (sum%10 ==0 ) {

printf("\n");

}
}
}

printf("number of sosuu = %d", sum);

return(0);
}
( ゚д゚)ポカーン
236234:04/05/20 10:54
やっぱりバグがるのですか?
>>234
jって何だ
238234:04/05/20 11:00
jは2〜300の整数です。
>>238
入ってないじゃん
240234:04/05/20 11:03
なるほどです。もう1回挑戦してみます。
大量の処理を行う時、

for(i = 0 ; i < 10000 ; i++)
{
printf("Hello!!\n");
}
こうするとCPU使用率が100%になってしまうので、

for(i = 0 ; i < 10000 ; i++)
{
printf("Hello!!\n");
Sleep(1);
}
こうしてみたら、CPU使用率1%位になったのですが、処理に時間がかかりすぎます。
精度は別として1msのウェイトを入れているから当たり前なのですが。

実際には延々と裏で走り続けるプログラムなので、100%はまずいのですが、
速度もある程度維持したいので Sleep(1); はちょっと遅すぎます。

この辺の調整方法で正攻法というのはありますでしょうか?
242デフォルトの名無しさん:04/05/20 11:05
>>241
スレ違い
つまり、違うスレッドを…
>>241
プライオリティの低いスレッドを作ってそいつにやらせろ。
あるいはそのプロセス自身のプライオリティを下げて実行しろ。
CPUを100%使うのが悪いんじゃない。
フォアグラウンドのタスクを邪魔するのがいけないんだ。
245241:04/05/20 11:29
ワーカースレッドなる物を学んで出直してきます。
>>245
その前にC言語の問題じゃないって気づけよ。
>>230-232 なにかだめなのか?
248デフォルトの名無しさん:04/05/20 12:41
>>247
なにがだめなのかも分からないんです。
>>248
誰が駄目だといったのか? その人に聞け
>>248
駄目と言った人が駄目なようだ
>>230-232
for ( t = 0; t < 25; t++ ){
double r =(double) 45/180*PI;
int cx = (int)(80.0* cos(r)*t);
int cy = (int)(80.0*sin(r)*t-1.0/2.0*g*t*t);
cx /= 10; cy /= 10;
if (cx>=0 && cx<XLEN && cy>=0 && cy<YLEN)
a[-cy+23][cx+0]='*';
} /* for */


ところで、こうゆうループの中で変数宣言するのが最近は普通なの?
やっぱり同じものを3度も貼ったことがダメなんじゃないのか?
それより、せっかくmath.hをインクルードしながら、PIを自分でdefineしてるのはどうよ?
M_PI使えばいいのに。
>>251
ループの中でしか使わないなら漏れもそう書くな。
スコープが小さくなるようにしたほうが間違いを起こしにくいし
最適化にも良いわけだしな。
>>251
昔から普通だと思ってたが?
昔のコンパイラはループの中では変数宣言できなかったような。
>>255
どこでも{}ブロックの先頭で宣言ってのは
かなり昔からできた気がするが。
DOSだとMS-Cの3ぐらいでもできたんじゃないかと(だがさすがに確認できん)
ブロックの先頭で宣言できるのは、ANSIから?
258255:04/05/20 18:45
>>257
そんな気がします。
もう確認できないけど。
昔ってANSI以前を指すんかい(笑
それはそれでもいいが、>>251を読んでも、ANSI以前と比較してるとしたら終わってるよ(w
260255:04/05/20 19:56
>>259
もちろん251を読んでいるけど、
どういう意味?
>>260
おいおい・・・

>ところで、ホゲホゲ 最近は普通なの?
とくれば、「俺は知らなかったよ」ってことだろ。
流行ってることを知らなかったか、そのものすら知らなかったか、普通どっちかだな。

で、>>251はANSIを知らないって解釈するか?
262デフォルトの名無しさん:04/05/20 20:38
ANSI知ってるやつ挙手しろ!




その中で、本当にアメリカ国内用の規格票を取り寄せてるやつはいるか?
・・・少ないんだコレが (プププ
>>262
で?
そんなもん取り寄せてコンパイラでも作るのか?
入力ファイルから、指定された検索文字列を含む行のみを出力ファイルに出力したい。
(入力ファイル)  (検索文字列)  (出力ファイル)
あいうえお
かきくけこ   →  "くけ"    → かきくけこ
さしすせそ

のようにしたいんすけど、どうやるの?

参考サイト
ttp://www.kumei.ne.jp/c_lang/intro/no_20.htm
>>265
宿題?
>>265
一行読む。
その行に検索文字列が含まれていれば→出力
ファイルの終端なら→終了
でなければ戻る。
268デフォルトの名無しさん:04/05/20 21:31
>>264
話逸らすんじゃねえよ
「そんなんANSIで保証されてねえだろ ぼけ」
とか言ってるてめえら糞ばっかり
269デフォルトの名無しさん:04/05/20 21:33
void main(void)
{
printf("sine\n");
}
キチガイが紛れ込んだようだな。
だったら環境依存で好きにかけばいいだろ?バカ?
272デフォルトの名無しさん:04/05/20 21:46
図星だったか (ゲラゲラ
273255:04/05/20 22:06
>>261
そういう意味ですか。

251氏と255(俺)は別人です。
で、俺は251氏の書き込みを読んで、おそらく251氏はANSI以前のコンパイラを知っている人だと解釈して、
共感して、255の発言をしたのです。
274251:04/05/20 22:07
ブロックの先頭での変数宣言はANSI以前からあったような気がする。
けど、対応していないコンパイラもあったし、対応していても、ループするたびに
新しい変数領域を確保するコンパイラもあった。
そのせいかどうか知らないが、初心者向け教本は変数の宣言は関数の先頭でする
ように教えているのが多かったように思う。

上級者がコンパイラの特性を判ってて使う分には別に問題ないんだけど、漏れはいつも
関数先頭で変数宣言していた。

いまどきのコンパイラでそんな事を気にするのは時代遅れなのかなと思ったんよ。
微妙に荒れちゃったみたいでごめんね。レスくれた人ありがとう。
配列の中からその数字を見つけ出し その数字を削除して その削除した所を詰める
作業がしたいんですけど よくわかりまへん。ご教授ください

#include<stdio.h>
int main(void){
int a[4]={1,2,3,4,5};
int key;
int i,j;

scanf("%d",&key);

for(i=0;i<=4;i++){
if(a[i]==key){
a[i]=a[i+1];
}

}

for(j=0;j<=4;j++){
printf("%d\n",a[i]);

}

return(0);

}
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
277255:04/05/20 22:38
俺も251氏と同じ感覚で、「関数先頭で変数宣言派」です。
使っているコンパイラの特性がわかっていて、保守性が高い(読みやすい)コードが
かければそれでいいと思います。
私の発言こそ、スレが荒れてしまう原因を作ってしまったと思います。
ごめんなさいです。
278275:04/05/20 22:39
sayounara
int end = sizeof(a) / sizeof(int);
for(i = 0; i < end - 1; i++)
  if(a[i] == key)
    memmove(&a[i + 1], end - i - 1);
280デフォルトの名無しさん:04/05/20 22:43
とある大学で学生にC言語を教えることになったんですが、
学生に1人、Mac 使いがいるらしくて、「Mac でプログラミングの勉強できますか?」などと聞かれてしまいました。
Mac OS X でフリーのプログラミングツール(とりあえずはコンパイラとエディタ)というとどういう物が主流なんでしょうか。
当方、根っからの窓厨なので Mac のことは全然知らないんで・・・。
gccじゃないの? しらんけど。
ANSI以前の規格で書かれている有用なソースは多い。
使う必要は無いが、読める必要は有るよー。
>>280
最初から付いてるんじゃなかったけ?
ともかくスレ違い。
284デフォルトの名無しさん:04/05/20 22:48
>>0xff

スレ荒らすのはあんたじゃないよ
古いコンパイラが現役で動いてる
事実を受け入れられなくて
金切り声でわめくガキんちょが
いらん争い創ってるだけだよ
現実から見聞きした情報が少なすぎて
最近出た本から得た上っ面の情報だけ見て
著者も意図しない方向へ感化されてるのさ
285デフォルトの名無しさん:04/05/20 22:51
ANSIとか見たこともない「条文」とやらで
いきがってるバカばっかり
286280:04/05/20 22:52
>>283
スレ違いですか。
まあ、ともかく回答ありがとうございます。
キチガイに粘着されますた。
>>284
そう、荒らしているのはオマエ!
288デフォルトの名無しさん:04/05/20 22:53
ANSIと言うたびにこう聞いてやれ「何ページの何行目?」
コピペしたソースが動かないと途方に暮れるから、規格外は許せません!
なんでムキになってるかわからん
教授か上司にでもいぢめられたか?
291デフォルトの名無しさん:04/05/20 23:00
割り込みハンドラみたいのをコピペするアフォが後を絶たんようだな
292デフォルトの名無しさん:04/05/20 23:01
>>290
うぜー職制をたたき出した直後だが何か?
293デフォルトの名無しさん:04/05/20 23:13
構造体の必要性がわかりません
誰か教えてください
294デフォルトの名無しさん:04/05/20 23:15
>>293
いらん。 断言する。
必要性は誰に教えられることもなく
自分で感じ始めるまで
あらゆる処理を構造体なしで書いてみろ。
>293
ドキュメント性を高めるため。
独立した変数(多くは配列)を使ってもたいして変わらん。
ひとつ。一発で大量のデータを受け渡しが出来る。値渡しにしてもポインタ渡しにしてもね。
ふたつ。C++的な発送
>>294
そのレス、好きです。
ごもっとも。

>>293
295の言うとおり可読性の向上はもちろんだが、
異なる型の変数が複数個あった場合、
一つのポインタで全ての変数の受け渡しができるわけよ。
298296:04/05/20 23:24
うわ、途中で書き込んでしまった。
まぁいいや。もうめんどくさい。
書こうとしてたふたつめはたぶん理解できないだろうから。
それより>>294の回答がベストだな。
複数のデータをまとめて新しい型を作ることが出来る。
落ちゲー作ってるとき、適当に変数をパカパカ宣言してた。
ある程度できあがったところで「1P専用じゃねぇか!」ってことに気づいた。
2Pできるように変更するとき、
いままで適当に宣言してた変数を構造体にいれて、2個の配列にした。

そんなことに使えます。
301199:04/05/20 23:45
プリコンパイラ文…
プリしか合ってなかった。。
すみません

printf("%"PRIu64 "\n", a);
で解決しました(`・ω・)ノ
#kernelのsourceなので/usr/include/のファイルは
#参照できませんが、inttypes.hを参考に定義して解決

ありがとうございましたm(__)m
>>301
kernelでそんなもん…

まぁ何のkernelか書いてないけど。
失礼しました。
「マリオ大佐の冒険」です。
304199:04/05/21 00:02
実際はprintkですが(*´Д`)
syslogに情報を書き出す部分いじってます。

>>304
いらぬ詮索でした。失礼。
>293 例えば、マップ上に沢山のアイテムを置くとして、
位置:x,yと属性をひとまとめにして扱いたい

struct item{
int x,y;
char name[256];
int val;
};

とか
307デフォルトの名無しさん:04/05/21 04:53
> for ( t = 0; t < 25; t++ ){

空白あけるなよ ぼけ
空白あけるなよ ぼけ
空白あけろよ ぼけ
308デフォルトの名無しさん:04/05/21 04:57
> > 昔のコンパイラはループの中では変数宣言できなかったような。
> どこでも{}ブロックの先頭で宣言ってのは
> かなり昔からできた気がするが。
> DOSだとMS-Cの3ぐらいでもできたんじゃないかと(だがさすがに確認できん)

おまえぼけ。
MSC 3どころかMSC 1もまだなく、Lattice-Cもなく、WIndowsどころかMS-DOSもなく、
そもそも、Cにenumどころかvoidさえなく、i++できても++iができなかった時代、
というか、Cがまだベル研関係者にしかくばられていなかった時代から、
できるぞ。
309デフォルトの名無しさん:04/05/21 05:05
> ブロックの先頭での変数宣言はANSI以前からあったような気がする。
> けど、対応していないコンパイラもあったし、

対応してない処理系なんかねーよ! いいかげんなこと言うんじゃねーよ ぼけ
enumがなくてもvoidがなくても、bitフィールドがなくても、構造体の代入ができなくても、
printfがなくても、ブロックの内側での変数宣言だけはできるのがCだ。
さすがにそこまでできないような処理系はCとは呼べん。

> 対応していても、ループするたびに
> 新しい変数領域を確保するコンパイラもあった。

おまえ、意味わかってていってるのか? たとえば、一番よくあるスタックフレイムによる
auto変数の実装であれば、
for (i = 0; i < 10; i++) {
int j;
{
int k;
....
}
....
}
は、j も kもそこへくるごとに、「確保される」のはあたりまえなんだよ ぼけ!
いいか? ここでいう「確保」ってのは、スタック上で、そこを「使う」ために「生きて」
いることを言う。つまり。そのブロックの外にでたら、そのエリアは「死んで」しまう
だけ、単にスタックポインターをずらすだけのはなし、mallocみたいに「確保」にコストがかかるわけじゃあない。
そもそも、呼び出した関数から戻れば、その関数の中のauto変数は「死ぬ」だろ?
(実際にはスタックポインターずれるだけが、その後に別の関数を呼べば、そっちの
関数のauto変数がそのエリアを使うわけなので内容(残骸)は「壊れ」る)..

そんなのは常識だろーが ぼけ おい、しっかりしろよ おまえら。
310デフォルトの名無しさん:04/05/21 05:07
> 学生に1人、Mac 使いがいるらしくて、「Mac でプログラミングの勉強できますか?」などと聞かれてしまいました。

Macならふつうにコマンドラインで
cc foo.c
と打てばいいだけ。
もちろん、その前に
vi foo.c
とやってソースファイルをうちこんでいかなきゃいけないがな。
詳しくは、
man cc
しろ。
311デフォルトの名無しさん:04/05/21 05:09
ある構造体を定義して、そのインスタンスを2つ作り、
そこにデータを格納した後、それらのインスタンス同志の比較
をしたいんですが、バイナリdiff(という言い方でいいかわかりませ
んが、つまり文字列としての比較でなく、ビット毎に比較してしまい
たいんですが)する関数とか stdio.h にありますか?
312デフォルトの名無しさん:04/05/21 05:10
> ANSI以前の規格で書かれている有用なソースは多い。
> 使う必要は無いが、読める必要は有るよー。

だーかーらー、ANSI以前も以後も、ブロック先頭の(たとえば forの中括弧の中の)変数宣言は
ずっと保証されている正しい書き方なんだってば。

ANSI以前でも以降でも、int a[10]; で0〜9の10個の要素が確保されるだろ?
それと同じぐらい「あたりまえ」のこと。「いや、11個確保されryコンパイラーがあった!」
なんていう話を持ち出しても「はあ? そんなのCとはよべんだろ」って言われるのと同じこと。
313デフォルトの名無しさん:04/05/21 05:11
> ある構造体を定義して、そのインスタンスを2つ作り、

そんなものはありません > インスタンス
「変数」といいなさい。
>>311
その質問に対する回答なら、「ない」。
但し、構造体変数同士を比較するのに使える関数は標準ライブラリ中に「ある」。
315311:04/05/21 05:34
>>314
わかりました。ありがとうございました。
よく探せということですね。みつかりました。
316デフォルトの名無しさん:04/05/21 05:35
> 古いコンパイラが現役で動いてる事実を受け入れられなくて

ぼけ。そういう問題じゃない。

ブロックの内側での変数宣言(関数のブロックだけじゃなくて、その内側の)は、
べつに古い新しいの問題ではなく、ANSI以前の、初期のCからずっとできたし、
89年のANSIの文法でもしっかり規定された、Cの基本中の基本だよ ぼけ。

それを使えることを知っていても、「たまたまつかえる」とか「ANSI以降なら使える」とか
「ANSIでは使えないが昔は使えた」などと思っているようでは、ぜんぜんだめ。
むかーしからいままで、Cであれば「必ず」使える機能だ。それぐらいおぼえとけぼけ
317デフォルトの名無しさん:04/05/21 05:41
つまり、「それは標準規格にない規格外の機能だろ」とか言ったやつもおおぼけだが、
そう言われて自信なくなって「う、でも昔からつかえてたから、規格がどうのは関係ないだろ」なんて
言うやつも やはりボケなんだよ。
ぼけ同士でまぬけなこと言い合ってるんじゃねーよ ぼけ

初期のCからあるCの基本中の基本であり、当然標準規格(C89でもC99でも)でも規定されている。

たまたま「自分が知らなかった」からっていって規格外とか言うんじゃねーよ ぼけ。

そういえば、a = "0123456789abcdef"[i]; なんていうコードも、「それって
規格外じゃないの?」なんてまぬけなことを抜かすやつが以前ここにいたなあ。
そいつと同程度だよ おまえらは
318デフォルトの名無しさん:04/05/21 05:49
>>280
> 学生に1人、Mac 使いがいるらしくて、「Mac でプログラミングの勉強できますか?」などと聞かれてしまいました。

Macは最初からコンパイラーもエディターも入ってますよ。
viしてccすればいいです。
319デフォルトの名無しさん:04/05/21 06:44
>>318
ださい
320デフォルトの名無しさん:04/05/21 07:07
viやccはダサいのかー
代わりに何を入れればいいのですか?
321デフォルトの名無しさん:04/05/21 07:13
C言語スレの皆さん今日は。私は自作板の通称厨スレからきたものです。
厨スレには録音という自称年収5000万のスーパープログラマーというもの凄い池沼がいるのですが
彼が本当にプログラマーであるかどうかが争点となってちょっとした論争がおきてます。
設問
>JISコードをシフトJISコードへ変換する関数を作成しなさい。
>関数の引数はJISデータを示すchar型ポインタと変換されたSJISデータを
>格納するchar型ポインタとする。
>また、変換ルーチンには流れをつかみやすくするためにgoto文を用いる事。
>入出力のチェックは別関数で行っているものとする。
彼の書いたコード。
−−−−−−−−−ここから
ia=a[0];
ib=a[1];
if(ia>0x09f) ia-=0x040;
ia-=0x081;
if(ib>0x07e) ib--;
ib-=0x040;
i=ia*0x0bc+ib
ia=i / 0x05e;
ib=i % 0x05e;
ia=ia+0x021;
ib=ib+0x021;
a[0]=ia;
a[1]=ib;
チェックしたいなら下記を追加しておけ。
if(a[0]<0x021 || a[0]>0x07e) return(1);
if(a[1]<0x021 || a[1]>0x07e) return(1);
−−−−−−−ここまで
私はプログラムの知識が全くないので解らないのですが、これってあってます?
又、これを書いた人物が年収5000万のスーパープログラマーと言える技量があるか
どうかの判定もお願いしたいのです。よろしくお願いします。
>>321
俺にはC言語はじめて1週間の人間が書いたように見える。
本来なら、こんな事をお願いするのは筋違いなのですが、
屁理屈をこねまくって、設問から解答まで8時間以上が経過し、
設問した人も、判定しようとした人も善意の有志は皆疲れ切って
今、寝ています。
ですので、もし、時間にゆとりのある方がいらっしゃいましたら判定をお願いします。
324デフォルトの名無しさん:04/05/21 07:39
じゃあ、逆にSJISからUTF8に
{
  int hi, lo;
  int key;

  hi = FF(sc >> 8);
  lo = FF(sc);

  if (sc < 0x80)          /* ASCII */
    return (UCS2)(0x0000 | sc);
  else if (0xa0 <= sc && sc <= 0xdf)  /* JIS X 0201 kana */
    return (UCS2)(0xfec0 + sc);
  else if (hi <= 0xfc && 0x40 <= lo && lo <= 0xfc) { /* JIS X 0208 */
    key = (hi - ((hi >= 0xe0) ? 0xc1 : 0x81)) * 188;
    key += lo - ((lo >= 0x80) ? 0x41 : 0x40);
    if (key >= MAX_S || shiftjis_table[key].unicode == NONCHR)
      return UCS_NONCHAR;
    else
      return shiftjis_table[key].unicode;
  }
  else
    return UCS_NONCHAR;
}
325デフォルトの名無しさん:04/05/21 07:41
ヌヒの次はぼけかw

>>316
>Cであれば「必ず」使える機能だ

本音ではそう言いたいよ?
でも俺、悪魔の証明はできねえし
信じらんねー仕様のコンパイラ色々見てる

ところでANSIのルールブックを見たことない香具師がANSI, ANSIとわめくのと
ベル研のconfidentialを見たことない香具師が(ry じゃねーだろな?
326デフォルトの名無しさん:04/05/21 07:43
> > Cであれば「必ず」使える機能だ
> 本音ではそう言いたいよ?

本音もくそもなく、実際使える。

それができない処理系も考えなきゃ...なんていうことを言い出したら、
「whileやifが使えないCだってあるんだから、使うな!」も言える。
それぐらいの基本だ。


327デフォルトの名無しさん:04/05/21 07:44
> ところでANSIのルールブックを見たことない香具師がANSI, ANSIとわめくのと

あのー、いまどきANSIなんていうやつがぼけだとおもいますが。
328デフォルトの名無しさん:04/05/21 07:44
>>326
その通り
329デフォルトの名無しさん:04/05/21 07:45
しかも「ルールブック」なるものはない。
330デフォルトの名無しさん:04/05/21 07:46
>>326
だいたい規格制定以前ってことは
そもそも「Cとはこういうものを言う」って
定義自体が存在しなかったわけだろ

そんなん言い出したらオリジナルのccだけじゃん
331デフォルトの名無しさん:04/05/21 07:47
それにANSIなりJISなりISOなりの規格表を「見たことあるのか?」なんてまぬけなやつは、
自分が見たことない->ほかのやつもみたことないにちがいない、というまぬけな思い込みな
わけだ。
ふつう見てるだろ。
自分が簡単に入手できないからといって、そう思い込みたがるやつは間抜け。
332デフォルトの名無しさん:04/05/21 07:47
333デフォルトの名無しさん:04/05/21 07:47
> だいたい規格制定以前ってことは
> そもそも「Cとはこういうものを言う」って
> 定義自体が存在しなかったわけだろ

いいや。すべてのCでそうだった。
334デフォルトの名無しさん:04/05/21 07:48
>>333
どうやって確認したんだよ?
335デフォルトの名無しさん:04/05/21 07:48
>>331
その通り
336デフォルトの名無しさん:04/05/21 07:48
> そんなん言い出したらオリジナルのccだけじゃん

こいつぼけ。おりじなるはccではない。そんなことしらんのか...
337デフォルトの名無しさん:04/05/21 07:48
>>331
>規格表

人の揚げ足とるんならてめーがしっかりしろ ぼけ
338デフォルトの名無しさん:04/05/21 07:49
>>333はぼけ厨だな。
>>1の推奨NGワードに「いいや」もいれておくべきだった。
>>321
そもそもShiftJISからJISに変換しているように見える。
#詳しく調査してないが。
スタイルにも「慣れ」が感じられない。
340デフォルトの名無しさん:04/05/21 07:50
returnにも括弧をつけているところに慣れを感じる。
341デフォルトの名無しさん:04/05/21 07:52
おら会社いくど
ぼけが答えにつまってるの
待ってらんねー
342デフォルトの名無しさん:04/05/21 07:52
>>340
それは慣れじゃないだろ。
ふつうは初心者も熟練者もつけない。
特殊な人間の「くせ」でつけるやつはいるが。
343デフォルトの名無しさん:04/05/21 07:55
>>321
年収いくらぐらいの技量に相当するか、うちの学校の先生に聞いてきます。
でも、見た感じおれよりできない感じだけどなあ。
仮にSJIS->JISか美しく書けたところで、年収5000万はないっしょ
345339:04/05/21 08:01
>>321
ちょっと変わっているのは、掛け算割り算を行っている辺り。
というのも、一般的に知られている変換ロジックではその演算はあまりしないから。
ここで問題になるのは、慣れているからそのロジックを生み出せてそれを記述できたのか、
既存のライブラリか何かから探してきたから記述できたのか、どっちかの判断が難しいことだね。
>>344
いやだから、それ以前に課題はJISからSJIS。
>>318
私のMacはMacOSが動いていますが、viもccもありません。
>>340
寧ろ非常に素人臭いんだが。
>>347
9er ですね?
350デフォルトの名無しさん:04/05/21 08:11
> 私のMacはMacOSが動いていますが、viもccもありません。

そのMacはにせものです。

本物のMacはviもccも入っています。(だから梱包といて取り出して電源いれれば、
すぐCコンパイラーが使えます)
親から譲り受けた株式と不動産の収入が4750万円。
>>350
入ってないです。
MacOS X Developper Toolsをインストールしないとccは入らないです。
353デフォルトの名無しさん:04/05/21 09:13
>>352
だからそれはにせものだと何度言わせれば(ry
そもそも稼動中のMacのなかでOSXがはっているやつって、半分以下じゃ
ないかな・・・
Macユーザって機能とか重視しないからなかなか買い換えない印象がある。
355デフォルトの名無しさん:04/05/21 11:11
Macは見た目が重要だから買い換えるだろう。
Macは見た目で特許をとろうとしているくらいだしなw
winで動くdockクローンソフトを配布停止にもしたし。
さあスレ違いも佳境に入ってまいりました。
マック!マック!マック!マック!
スズゥーキィィィ!!
360デフォルトの名無しさん:04/05/21 13:18
カンマ演算子で
for (i=0; i<10; fnc1(), i++) {
  fnc2();
}
と書くのと、カンマ演算子を使わずに
for (i=0; i<10; i++) {
  fnc1();
  fnc2();
}
と書くのでは何か違うのですか?
if (a==b) {
 c1=0;
 c2=0;
 c3=0;
}
とかを、
if (a==b) c1=0, c2=0, c3=0;
などと{} を書かずに書けるとか。
  fnc1(i);
  fnc2(i);
なら意味が変わってくるな
363デフォルトの名無しさん:04/05/21 13:29
>>362
なんで?
>>360
その例だと、fnc1()とfnc2()の呼ばれる順番が違う。
365デフォルトの名無しさん:04/05/21 13:31
>>360
違う。
fnc1とfnc2の呼ばれる順番を考えてみな。
マクロを書くとき以外、カンマ演算子を使う必要はないと主張する。
少なくとも、カンマ演算子を使って書いたからといってコードが読み易くなるとは、俺は思わない。
単に主義・スタイルの問題だが、そういうことも大事だ。
367デフォルトの名無しさん:04/05/21 13:58
>>366
forで使うだろ。
for(i=0,j=0・・・みたいに。
>>367
馬鹿?
おまえが使うかどうかは知ったこっちゃ無い。
使わなくても書けるだろ。
>>367
ちなみに、そう書きたくなるってことは、ループの条件にiとjの2つが絡んでいるということだ。
もし違うなら、そう書くべきではない。
で、そういう場合は条件判定も、iやjの増分(増分とは限らないが)も、複雑だろう。
とすると、ほんとうにfor文がふさわしいのか?
while文の方が読みやすい・保守しやすいのではないか、そこまで考えなくてはならない。
だから367の例だけで「使うだろ」と言われても、「使う必要あるのか?」としか答えられない。
i = i++;
を実行すると悪魔を召還できるってほんとですか?
371デフォルトの名無しさん:04/05/21 14:07
>>368
なら、マクロを書くときにも使う必要はないな。
>>366
馬鹿?
使わなくても書けるだろ。
>>371-372
なんか楽しいか?
カンマ演算子の有効性を主張する、骨のある奴はいないのか?
>>370
処理系依存ですが、本当です。

ちなみに
if( a==0 )
を実行するとボケ之助を召還できます。
375デフォルトの名無しさん:04/05/21 14:23
>>374
×ボケ
○ぼけ

ちなみにボケは>>373
>>375
無理して話題に加わらなくてもいいんだよ?
C言語をマスターしたらまた来てね。
377デフォルトの名無しさん:04/05/21 14:28
>>376
なら聞くが、どうしてマクロを書くときには「必要」なんだ?
例を出してみろ。
カンマが演算子だ、なんていうイっちゃった発想には敬服するが
使って嬉しいもんじゃないな。
とはいえ

  int i;
  char buf[1024], *ptr;
  for (i=0, ptr=buf; i<N && *ptr; i++, ptr++) {
    :

こーゆーのはたまに使うけどな。
379デフォルトの名無しさん:04/05/21 14:41
>>378
演算子だぞ。
引数の区切りのあれとかは違うけど。
>  char buf[1024], *ptr;
あーあ、やっちゃったね。
このソフトバッファオーバーフローであぼーんだな。
>>380が一番アホだな。
>>378
本でも読めよ。
383デフォルトの名無しさん:04/05/21 14:44
376は逃げたか
384360:04/05/21 14:45
みなさんレスありがとうございます。
for (i=0; i<10; fnc1(), i++) {
  fnc2();
}
と書くと、fncの実行順としては
for (i=0; i<10; i++) {
  fnc2();
  fnc1();
}
になるということでいいでしょうか?
で、for(i=0,j=0・・・ のように複数の値の増減が無い場合に前者のように
書くのはスタイルの問題という理解でいいのでしょうか?

私自身はまだC言語初心者のせいか、後者の方がイメージしやすいのですが、
というか前者のような書き方を使いこなせないのですが・・・
>>384
読めるのなら問題ない。

初期化→比較→真なら→文→増分→比較→・・・・
         →偽なら→終わり
>>385
forの説明なんぞしてどうする。
387378:04/05/21 16:30
>>379
>演算子だぞ。
いや文法上はそうだけど、そういう強引な仕様が如何にも C だなあ、って話。
文法上はって・・・
389デフォルトの名無しさん:04/05/21 17:53
>>387
> カンマが演算子だ、なんていうイっちゃった発想には敬服するが

↑これはCに対して言ったの?
さすがにちょっと苦しいね>387
カンマが演算子なんて言い張るならどう演算しているのか言ってみろ。
>>391
話にもならん。
プッ逃げたな
これに懲りたら半端な知識で議論に参加しようなどと思うなよ。
>>393
自分の無知を誇らしげに晒すなよ(w
そういえばどこかにint x, yやhoge(x, y)がコンマ演算子の使い方だ
って言ってるページがあったな
また馬鹿を釣ろうとしているのか?
強制IDの板なら録音をまとめてあぼ〜ん出来るのになぁ
>>391は釣りじゃなくガチだったのか?
元々、「カンマ演算子」の話だ。
しかし、「カンマは演算子」にしてしまうと、意味がおかしくなるからな。
Cでは「,」を、引数の区切りとして使う場合と、カンマ演算子として使う場合があるからな。
fgetsで文字列を読み込んで、終端に\0を付加したいときの
一般的なやり方を教えてください
>>399
fgets()が勝手に\0つけてくれます。
>>400
ありがとうございます
getsと違い\nも入るんですね
\0がどうとか勘違いしてました
402デフォルトの名無しさん:04/05/21 19:38
>>391
Cではあまりにも色んな場面で'\054'を使うが
おまえさんが言ってるのはどれのことだ?
これが正確に言えない香具師には
説明しても無駄なんだが・・・
C言語では、文字列は「'\0'で終端するcharのシーケンシャルな集合」と定義されているので
リファレンスに「文字列をセットする」と書かれていれば'\0'で終端されている。
>定義されているので
どこで?
405!=391:04/05/21 19:45
>>402
日本語で話せよ
>>404
まじめな質問なのか、揚げ足とって喜びたいだけなのか?
おまえ、今日、ずっと粘着している厨房なんだろ。
407デフォルトの名無しさん:04/05/21 20:05
>>404
俺も聞きたい (プ

>>405
>!=391
必死だなw
054=44=0x2c=, とでも言いたいんだろうが
なんでわざわざ '\054' なんだろ。
409デフォルトの名無しさん:04/05/21 20:10
ところで>>326よ、もう半日経ったぞ ぼけ
早く答えろよ、いつまで待たせる気だよ?
410デフォルトの名無しさん:04/05/21 20:11
>>408
'\054'じゃない処理系の名前を知らないんだろ? 正直に言ったらどうだw
>>410
何が'\054'じゃない処理系の話をしているの?
412378:04/05/21 20:26
「カンマ“が”演算子」は確かにおかしいな。スマソ。
>>389
そうそう。
複数の式をひとつにまとめられる以外にメリットないでしょ?
俺は{}の代わりにたいてい,で繋げるよ。
こっちのほうがわかりやすいからね。
>>412
>複数の式をひとつにまとめられる以外にメリットないでしょ?

評価が出来る。

この利点すら分からない奴に、偉そうにC言語を語ってもらいたくないな。
まとめられるだけだったら演算子っていわないじゃんか。
416デフォルトの名無しさん:04/05/21 20:49
>>411
プ
417デフォルトの名無しさん:04/05/21 20:52
とぼけてりゃそのうち諦めてもらえると思ってる甘ったれがいるな
たまには徹底的にいじめてやるのもまた一興
'\054'
俺がみたことあるのは、こんな感じ。実際はもちょっと凝ったことやってたわけだが。

#ifdef DEBUG
#define A(x) (hoge(), y)
#else
#define A(x) (y)
#endif

z = A(y);
420419:04/05/21 21:05
おいおい、マクロの引数が・・・
typoだからつまらん突っ込みは勘弁。
>>420
つまらんミスにいちいち突っ込むやつはいない。
と突っ込んでみる。
422デフォルトの名無しさん:04/05/21 22:08
>>391出て来い! オラ
日本語で話せよ
424デフォルトの名無しさん:04/05/21 22:37
>>423
ニホンゴワカリマスカ?
425デフォルトの名無しさん:04/05/21 22:40
煽られつかれてsageだした惨めなあいつw
#ifdef DEBUG
#define return if (fprintf(hogehoge), 0) {} else return
#endif

カンマ演算子がないと、これが使えんので、ぜひとも必要
forなんて使う奴はアホだなwhileだけでできるだろう?
0x0Aとか書く奴はバカだな10でできるだろう?
428デフォルトの名無しさん:04/05/21 23:35
アホでいいバカでいい
どうせぼけが言ってる基準
429デフォルトの名無しさん:04/05/21 23:38
whileなんかイラネーヨ
漢はgotoひとすじ
>>426
死ね
if (fprintf(hogehoge) & 0) {} else return
432デフォルトの名無しさん:04/05/21 23:41
>>426さえ死ねばいらなくなるってだけのくだらねえサンプルだな
433デフォルトの名無しさん:04/05/21 23:42
>>426
こうすればカンマ演算子はいらない。

#ifdef DEBUG
#define return if (fprintf(hogehoge)&0) {} else return
#endif
C言語で書いたバイオリズムのソースってないですか?
あるだろうね
>>435
どこでしょう?一例を教えてくださいませ。
検索ワードぐらい教えてやれよ。不親切だなぁ。
検索ワード:C
>>438
オマエモナー
440デフォルトの名無しさん:04/05/22 01:15
n*nの行列の2つの行列をかけあわせるプログラムをつくり、これを用いてA^2^mを計算するプログラムをつくれ
>>440
それが人にものを頼む態度か
じゃなくて宿題?
442デフォルトの名無しさん:04/05/22 01:21
> カンマ演算子の有効性を主張する、骨のある奴はいないのか?
そのまま呼ぶなんて、きみたち 通じゃないね。

jazzはずーじゃ
飯はすーめ ね

>>441
マルチだな。放置汁。
444デフォルトの名無しさん:04/05/22 01:21
> カンマ演算子の有効性を主張する、骨のある奴はいないのか?
そのまま呼ぶなんて、きみたち 通じゃないね。

jazzはずーじゃ
飯はすーめ ね

445デフォルトの名無しさん:04/05/22 01:22
>>441
問題そのまんまかいてしまいました(*_*)宿題おしえてください!!
446デフォルトの名無しさん:04/05/22 01:22
> カンマが演算子だ、なんていうイっちゃった発想には敬服するが

カーニハンもそう言ってますよ。
447デフォルトの名無しさん:04/05/22 01:25
> 0x0Aとか書く奴はバカだな10でできるだろう?

小文字にしろよぼけ
448デフォルトの名無しさん:04/05/22 01:26
> C言語で書いたバイオリズムのソースってないですか?

a = atol(argv[1]);
printf("%d %d %d\n", a % 23, a % 28, a % 33);

これだけでできるね。
449デフォルトの名無しさん:04/05/22 01:27
コンマ子算演!
馬鹿!
カンマ演算子が無ければ、BASICでマルチステートメント多用して少しでも実行速度
上げようとしてた苦労が浮かばれないじゃないか!
Cでも同じように書きたいだろ。
ポインタのインクリメント
p++
は繰返子
452デフォルトの名無しさん:04/05/22 01:30
450はBasicでのまるちすていとめんとkのくぎりが何だったか思い出せないぼけ
453デフォルトの名無しさん:04/05/22 01:30
通はマンコ演算子って言うんだよ!!
さて、このスレは月曜まで使い物になりませんのでご注意下さい。
455デフォルトの名無しさん:04/05/22 01:32
カンマ演算子のいいところは、「いろいろつなげて、結局最後のものの値」になるところ。

a = foo(), bar(), hoge(); だったら、
3つは必ずその順に実行されるし、最後に実行したhogeの価がaに入る。
ほかにこんな便利な演算子はない。
はぁ、
457デフォルトの名無しさん:04/05/22 01:32
無効なキャスト式というエラーの回避方法を教えて下さい。

キャストをやめる
459デフォルトの名無しさん:04/05/22 01:33
引数が3つであるような関数fooに

foo(a, (b, c), d); ってやってみたんですが、うまくいきません。
どうしてですか?
関数の引数にはカンマ演算子は使えないのですか?
460デフォルトの名無しさん:04/05/22 01:37
キャストをやめても出る場合は何がおかしいんですかねぇ〜
main()
{
f(0,(0,1),2);
}

D:\>cl a.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.

a.c
Microsoft (R) Incremental Linker Version 6.00.8447
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

/out:a.exe
a.obj
a.obj : error LNK2001: 外部シンボル "_f" は未解決です
a.exe : fatal error LNK1120: 外部参照 1 が未解決です。

上手く行ってるけど?
お前らこの関数をどう思う?

int sjisTojis(unsigned char *a)
  {
    int i,ia,ib;
    i=((a[0]-0x021)*0x05e)+a[1]-0x021;
    ia =i / 0x0bc; ib =i % 0x0bc;
    ia+=0x081; ib+=0x040;
    if(ia>0x09f) ia+=0x040;
    if(ib>0x07e) ib++;
    a[0]=ia; a[1]=ib;
   return (0);
  }
ウザい
クサい。
ξ
Ξ
じゃこれはどう思うよ
ttp://www.exp.org/egg_battery/egg_battery.html
>>460
ウダウダいわずにソースを晒したほうが早い
469デフォルトの名無しさん:04/05/22 04:31
c言語の標準ライブラリがヘッダーごとにまとめてあるサイト、書籍って知らないですか?
よく使うヘッダーなら結構あるのですが、dir.h,stdarg.h,io.h,signal.hなど、普段あまり使わないような
ヘッダーの標準ライブラリが載ってるといいのですが。。。
信号機のプログラムを作ろうと思うんですが自分のCレベルでは画像を扱えません。
妥協して「青」や「黄」「赤」という具合に表示させようと思います

そこで教えてもらいたいのですが、

「青」 (一定時間経過) --> 「黄」
       ↑
ここの判断がどうしたらいいかなと悩んでます

time.hのtime関数あたり調べたんですが現在の時刻の表示やらなんやら。。
ちょっと違うなぁと思いまして。。

どなたか教えてくださーい
よろしくお願いします
>>469
あなたのパソコンの ../man/man3 あたりがよくまとまってていいと思うよ。
マジオススメ。Windowsは知らん。
>>470
1、Sleep関数を使う。
Sleep(500); //数値はミリ秒単位
2、Timerイベントを発生させる。
http://www.kumei.ne.jp/c_lang/
・Windows SDK編 第1部 (第9章 タイマーを使う、第10章 タイマーを使ったアプリケーション)
473デフォルトの名無しさん:04/05/22 09:04
C言語で3の100乗を計算することはできますか?
>>473
できる。
int とかの組み込み型使ってやったらオーバーフローするだろーけど。
515377520732011331036461129765621272702107522001
具体的にどうするのでしょうか?
やり方の乗っている参考書などあれば教えてください
お願いします
「多倍長計算」あるいは「多桁計算」で
ググってみてはいかがでしょう。
478デフォルトの名無しさん:04/05/22 09:51
演算の方がよろしくてよ
system("ruby(ry
漏れのID今Gcc〜なんだが、ここじゃでない...
>>474>>475>>477>>478
有り難うございました。
探してみます
482デフォルトの名無しさん:04/05/22 10:32
>>469
LSIC-86のやつは?一部欠けてるけど
以下マニュアルから引用

 4.1.1 言語仕様
(略)
wchar_tおよびL'...', L"..."はサポートしていません

 4.1.2 ライブラリ
<locale.h>と、その中で定義されているマクロや関数はサポートしていません
多バイト文字をあつかう関数群(mblen()など)はサポートしていません
483デフォルトの名無しさん:04/05/22 10:47
教えて!
大学はじめて習ってるんですけど、課題で下記の問題を回答しなければいけないんですがわかる方おしえて!!

float 型と double 型には inf と nan という特別な値が用意されている.
適当な文献をあたって inf と nan という特別な値が持っている意味を調べ,プログラムを作成して inf と nan を実際に発生させよ.
>>483
宿題は自分でやろうね。はあと
485デフォルトの名無しさん:04/05/22 11:55
486デフォルトの名無しさん:04/05/22 11:56
>>454
すると月〜金は使い物になってたのか
おまいにとってw
487デフォルトの名無しさん:04/05/22 11:58
>>483
>>1
488デフォルトの名無しさん:04/05/22 12:14
>>462
> お前らこの関数をどう思う?

同じような変数と同じロジックを使うとしても、ふつうはこう書く。
short sjisTojis(unsigned char *a)
{
  int i, hi, lo;

  i = ((a[0] - 0x21) * 0x5e) + a[1] - 0x21;
  hi = i / 0xbc + 0x81;
  lo = i % 0xbc + 0x40;
  if (hi > 0x9f)
    hi += 0x40;
  if (lo > 0x7e)
    ++lo;
  return hi << 8 | lo;
}

引数でもらったところに上書きしてもふつう不便なので(SJISはそのまま文字列でつかえるが、
ISO-2022-JPだとASCII文字との境目にいろいろいれなきゃいけないので)
489デフォルトの名無しさん:04/05/22 12:15
> c言語の標準ライブラリが

そんな言語はありません。

同様に
jAVAもないし
c++もないし
cObOlもない
490デフォルトの名無しさん:04/05/22 12:17
まあ、もとのは、8bit分の16進数をわざわざ3桁で書いてあるあたり、
どうみてもしろーとだ。
491デフォルトの名無しさん:04/05/22 12:31
>>489
つまんね
492初心者:04/05/22 12:52
コンパイルするときにこのエラーメッセでたんですが、どういう意味か教えてください。
これ→warning: overflow in implicit constant conversionと
これ→warning: decimal constant is so large that it is unsigned
>>492
訳すとこうなるか:
警告: 暗黙定数変換中のオーバーフロー
警告: 10進定数がunsigned型でいられないほど大きい
495280:04/05/22 13:02
>>492
そのまんまの意味なんだけど。
英語が読めない?

警告: 定数を暗黙的に型変換する際にオーバーフローが生じました
警告: 十進定数は値が大きすぎなので、unsigned 型として扱われます。

例えば、int 型が16ビットとすると(いまどきそんな処理系少ないけど)、

signed int n; // -32768〜32767 までの範囲しか表せない
n = 40000; // 40000 は↑の範囲に収まらないので unsigend int 扱いされる
// ↑40000 を n に代入しようとすると、オーバーフロー扱いされる
>>280 の癖に生意気だぞ。
喧嘩腰名馬鹿麦価
498初心者:04/05/22 13:23
ありがとうございます。英語読めません。
ほんと初心者なんでunsigned型ってのも分かんないんですが…
>>498
調べろ。
500初心者:04/05/22 13:33
はーい…
501初心者:04/05/22 13:42
あとfloatとかdoubleで
なんで(1.0/0.0)=infなんですか?
>>501
手計算してみろ。
>>501
仕様です。

1.0/0.0=∞以外にどうなって欲しの?
数学的に厳密に扱って 1.0/0.0=NaN(未定義)にして欲しいのか?
504初心者:04/05/22 14:14
だってinfって∞って意味じゃないですか?
だから1.0/0.0=NaNっぽい気がするんですが、
数学とは意味が全然違うんですか?
>>504
一応、lim_(x→0) 1/x = ∞ なんだが。
数学だと、非常に小さな数と0、非常に大きな数と∞は区別すべきものだけど、
コンピュータ上だと精度の問題があって2者の区別が付かないから。
数学が苦手なオレには
infって∞だから 1.0/0.0 = inf ってのが
数学と意味が同じっぽい気がするんだが。
507デフォルトの名無しさん:04/05/22 14:22
>>504
とりあえずIEEE754を見れば。
>>506
大丈夫、本当に数学に弱い人は 1/0 = 0 だと思ってるらしいから。
http://www.yomiuri.co.jp/komachi/reader/2004030200131.htm
5.1 非数(NaN)
NaN(Not a Number) は0/0 や√.1 など,数でなくなる状況のときに生成され
る特殊な数であり,それはどこかでInvalid operation が起こったことを示してい
ます(表2).いったんある部分がNaN として評価されると,それ以降の評価はす
べてNaN として評価されます.また,NaN には順序や同値関係はありません.

5.2 無限大(Infinity)
無限大(Infinity) は,オーバーフローが起きたときでも処理を続けることができ
るようにするために導入された特殊な数で,コンピュータ上ではInf と表示されま
す.Inf の生成は数学の無限大記号∞と同じような扱いができるように定められ
ています.そのため,いったんInf と評価されたとしても,limx→∞ 1/x = 0のよう
なルールがあるので,最終的な演算結果は浮動小数点数になる場合があります.
510初心者:04/05/22 14:48
ありがとうございました。
もっと勉強します。
511506:04/05/22 15:40
>>508
どうも。
さすがのオレも小学2年生よりはマシみたいですね。
512デフォルトの名無しさん:04/05/22 16:01
そんなことより聞いてくれよ
同僚のソースみたらさ

#define HANDRED 100

int value = HANDRED;

とか書いてあんの

おまえ今後valueが100から200に変わったらどうすんのかと
#define の意味ないだろと
さらにはスペル違うだろと

奴曰く「grepしやすいじゃん」との事なんですが

誰かコイツを説得してください
513デフォルトの名無しさん:04/05/22 16:08
>>509
√.1
√.1
√.1
√.1
√.1

>>508
あのページ見て思ったんだが、
問題の核心は「1/0がいくつになるか」よりも
むしろ「解なし」を教えてないってことにある
俺が習ったのは中学んときだが遅すぎると思う
514デフォルトの名無しさん:04/05/22 16:08
>>512
ワラタ
>>462
前にもどこかで聞かれたから書いたけど、0x5eを掛けると言うロジックが特殊。
試しにそのとき提示した一般的なロジックを手動最適化してみたが、
その結果はやはり掛け算は行わないで済ませるのが得策だという結果が出た。
516デフォルトの名無しさん:04/05/22 16:22
>>512
つーか旦那んとこコーディング基準ねーの?
HANDRED がか?
 ~~
c言語の勉強はじめようとおもうんだけど、
実際にパソコンでうって動作たしかめたりするにはどうやってやれば
いいですか?
学校ではemacs つかってターミナルでコンパイルして実行してたのですが、
家ではOSがXPなのでやり方がわかりません。
だれかおしえてー
>>518
http://www.cygwin.com/setup.exe
でemacs&gccな環境が手に入るよ
>>519
ありがとー
521512:04/05/22 19:14
>>516
「保守性のない定数マクロを使わないこと」
なんてコーディング基準はなかったよ
命名規則はあったけど
実際は
#define D_xxx(プロジェクト名)_HANDRED
だった
cygwinってどうやって起動させるの?
// STRSTRREV (strstrの逆)
//**********************************************************
static char *STRREV;

char *STRSTRREV(char *s1, char *s2)
{
char *p, *wk;
int i, len;
p = strstr(s1,s2);
len = (p - s1);

wk = malloc(len+1);
if(wk==NULL) return 0;

for(i=0; i<len+1; ++i) wk[i] = 0;

for(i=0; i<len; ++i) wk[i] = *(s1+i);

STRREV = wk;
free(wk);
return STRREV;
}

free(wk)で落ちてしまう。のでデーターが帰ってこない。
//free(wk); (コメント)にしたら問題なく動作するのですが、
free()で落ちる原因って何ですか?

コンパイラーはgcc-3.2.2-5
つうかfree()して何を返したいのかと
>>523
なんで解放した領域を返してるの?
釣りじゃね?
527デフォルトの名無しさん:04/05/22 19:48
fgetc関数でファイルを読み込むのに、改行(\n)を取得できない事
がたまにあるのですが、そんな事は、おこり得るものなのでしょうか?
>>524
>>525

>>523 使い方、勘違いしてました。ありがとう^^;
529522:04/05/22 19:57
どれクリックすれば動くの?
>>522
http://www.cygwin.com/cygwin-icon.gif
みたいな悪趣味なアイコンができてるはずだからそれをクリック
できてねーよ
でてきました。ごめんなさい
>>523は何がしたいんだ?
「strstrの逆」ってのも意味わからんし。
534
そのまんまの意味だろ。
cygwinでエディタどうやってつかうの?
いや、あのソースを見ればやりたいことはわかるが…逆か?
いい間違い。

>>533では何がしたいのかも疑問だったが、
改めてソースを見ればやりたいことはわかった。
でも、逆か?
539デフォルトの名無しさん:04/05/22 20:39
質問を変えます。ファイルポインタのバッファに改行が読み込まれない
事はあるのでしょうか?関数はfgetc()です。
540デフォルトの名無しさん:04/05/22 20:39
>> 505
>lim_(x→0) 1/x = ∞ なんだが。

lim_(x→+0) 1/x = +∞
lim_(x→-0) 1/x = -∞

lim_(x→0) 1/x = ∞ では、ありません。
だいたい、∞ は、数ではないですよ。

勉強しなおしましょう。
空気を読みましょう
542デフォルトの名無しさん:04/05/22 21:52
から・・・け・・・?
くうけだろがヴぉけ
そらきがつきまへんでしたな
数学の概念上は、非数もまた数の一種なんだけどな。
+∞はどんな数よりも大きい数を表し、-∞はどんな数よりも小さい数を表す。
矛盾した存在だけどね。
>>540
いや、∞の定義の仕方しだいでは lim_(x→0) 1/x=∞ になるよ。
リーマン球面とかで検索してみ。
まあ、ここまで来ると揚げ足取りでしかないけど。
547デフォルトの名無しさん:04/05/22 23:13
数学の話なら板違い
>>545
「数」っていうから混乱するんだと思う。
∞はどんな「実数」よりも大きい数として定義して、
{実数, ∞} で新たな集合を作ると、これも数(というか、順序環)としての性質を持つ。

と、いい加減にスレ違いもはなはだしくなってるんだが。
空白あけろとかツマラン書き込みよりずっと有意義だけどな
>>549
つまらないと感じるのは、お前が厨房だからだってば。
バカじゃねーのw
>521
>#define D_xxx(プロジェクト名)_HANDRED

ワロタ
きっとコメントに
if(x==0){
 /* xが0に等しければ実行 */
 :
}
とか回転だろうな...
二度手間
二度手間って言うか、保守性を考えると余計なお世話。
// x を 0 に初期化
x = 0;

こんなのも見たことあるYO!
つーか、
bool setFlag(bool & data); // フラグを取得
って見たことあるよ(C++だけど)。
セッターで取得ってなにさ…
>セッターで取得

プログラムの気持ちになって考えているんだろう。
想像力の問題だな。
558デフォルトの名無しさん:04/05/23 08:57
こういうのを見たことがある。

#define return_main return
#define return_sub1 return
#define return_sub2 return

int main(void){ return_main 0;}
void sub1(void){ return_sub1;}
double sub2(double x){ return_sub2 x;}
fscanf(fp, "%s", s); //文字列を出力

・・・ファイルの気持ちになって。
560デフォルトの名無しさん:04/05/23 09:42
> if(x==0){

空白あけろよ ぼけ

>  /* xが0に等しければ実行 */

こういうボケなコメントは絶対書くな
C
562デフォルトの名無しさん:04/05/23 10:00
/*
     Cで書かれています。
*/

#include <stdio.h>
  ・
  ・
#!/usr/bin/cc
#include <stdio.h>
...
/*
  秀丸で書きました(フォントはMS ゴシック)。
*/
/*
  Cで書かれています。
*/

#include <stdio.h> /* stdio.hをインクルード */
  ・
  ・
/*
  秀丸で書きました(フォントはMS ゴシック)。
*/
/*
  Cで書かれています。
*/
/*
  精魂込めてます
*/

#include <stdio.h> /* stdio.hをインクルード */
/* ぜんぜん面白くないね。日曜の朝からいったい何やってるのこの人たち。 */
567デフォルトの名無しさん:04/05/23 11:54
>>562
IOCCCにあったな、それ
568デフォルトの名無しさん:04/05/23 11:58
>>548
いい線ついたな
実数とdoubleの値を同一視するから話がおかしくなるんだよ
∞にばっか気をとられてるけど実数にεなんかねーし
明らかに等しくない集合に不毛な妄想(ry
>>568
(・ε・)キニシナーイ
CONSTANT SECTION.
03 CON-0 PIC 9(1) VALUE 0.
03 CON-1 PIC 9(1) VALUE 1.

以下20くらいまで続く
571デフォルトの名無しさん:04/05/23 12:53
>>570
インデントしろ ぼけ
572デフォルトの名無しさん:04/05/23 13:41
> /*
>      Cで書かれています。
> */

/*
*     Cで書かれています。
*/
にしろ ぼけ。(2桁めに*が並ぶように)
むしろ // の方が良いと思われ
何で?
行が増えるたびにわざわざ*とか//とか書くの?
575デフォルトの名無しさん:04/05/23 13:44
Shiftを押さなくて済むしな。
>何で?

その行だけ見てコメントかどうか分からないだろ?
...ってゆーか分かりたい、分からせて
>      Cで書かれています。
これだけ見てコメントと分からない奴がいるだろうか?
> その行だけ見てコメントかどうか分からないだろ?
> ...ってゆーか分かりたい、分からせて

大抵の環境で色gsdfghjkl;:」
579デフォルトの名無しさん:04/05/23 14:18
> 行が増えるたびにわざわざ*とか//とか書くの

あたりまえ!
それを「わざわざ」と感じるようだったら、エディターのが自動でつけてくれるやつにしろ。
580デフォルトの名無しさん:04/05/23 14:55
>>539
釣りだと思うが、、、 答えとく。
fgets(b, size, f) の結果で
b が、 .*\n\0.*
の形にならないことはある。
\nに出会う前にファイルの終りに達したり、size-1 文字あったり、
その他なにかエラーが怒ったとき (怒)
581デフォルトの名無しさん:04/05/23 15:03
cの基礎文法とその他(データ構造とか)を一通り勉強したつもりの
漏ですが、次のすてっぷとして何勉強しようか迷ってます。
(一応プリグラマ志望。)
そこで、linuxのほとんどはcで書かれているいうので、そのソースでも
勉強しようと思ったが、cだけの知識じゃ足りないし・・・
マジ何しよう・・・コンピュータの世界って広いし・・・
582デフォルトの名無しさん:04/05/23 15:05
> cの基礎文法とその他(データ構造とか)を一通り勉強したつもりの

そんな言語はないぞ ぼけ!
583デフォルトの名無しさん:04/05/23 15:06
cってのは、Cの文法から、ビットフィールドとunionとdo-whileと#ifとかと、ポインターを
省いた言語ですよ ;-)
だから、その知識だけでlinuxのソースは読めないでしょう ;-)
すいません
以下のプログラムで悪いとこはあるのでしょうか?
原因不明です

角括弧インクルードストディオドットエイチ角括弧綴じ
ルビンの壺括弧
イント メイン 丸括弧ボイド丸括弧綴じ
    プリントエフ丸括弧チョンチョンネタじゃないっすよ円マークエヌチョンチョン丸括弧綴じセミコロン
    リトラン ゼロセミコロン
ルビンの壺括弧綴じ

コンパイルしようとしても
エラー E2206 netajanaissuyo.c 1: 不正な文字 '角' (0x8a70)
以下、' 'の中に
角括弧インクルードストディオドットエイチ角括弧綴じ と、
縦読みさせられました。
なぜコンパイラに馬鹿にされなければいけないんでしょう
585581:04/05/23 15:09
スマソ。
cじゃなくてCで・・・。
586デフォルトの名無しさん:04/05/23 15:10
<inlude studio.h>
{
int main(void)
printf("ネタじゃないっすよ¥n");
retrun;
}

まず、いちばんいけないのが、ヘッダーファイルの名前だな ;-)
あと、円記号などつかってるから改行にならない。バックすラッシュにしろ。

あと細かいところいくつか。
悪いところはあなたの頭の中にあります。
588デフォルトの名無しさん:04/05/23 15:11
>>585
おまえは典型的な「で、次は何をやればいいのですか?」症候群だ。
つまり、「わかったつもりになる」だけで理解ができるわけじゃない、偽物入門書を読んで
どこもひっかからなかったが、何も得てない状態です。

そんなわけで、おまえの読んだ入門書の名前を書けよ!
それが唯一意味のある情報だ! (この本はダメ本だっていう情報ね!)
589581:04/05/23 15:16
>>588
偽物入門書の情報をカキコしたところで、
漏の「わっかたつもり症候群」が理解されるの?
全部ダメ言われるから意味なし。
591デフォルトの名無しさん:04/05/23 15:35
> 漏の「わっかたつもり症候群」が理解されるの?

そいつはどうでもいいわけ。ほかのひとにとって「有用な情報」かどうかが重要。

つまり「ああ、その本を読むとこうなるのか」ってのは、かなり役立つ情報だよ。
592デフォルトの名無しさん:04/05/23 15:36
>>590
ちがうだろ。
「だめ」はすでに書名出す前からいわれてるんだよ。

べつに「ダメかどうか判断してあげるから名前を出せ」といわれているわけじゃなく、
「おまえの本はダメなことが判明しかたから、名前を言え」といわれてるだけなんだから。
何言ってるか分からない
とりあえず何か作ってみて壁にぶちあたるのが一番早いかと
あの、どうやったらgmpって使えるようになるんでしょうか
cygwinをインストールして、gmpをダウンロード
./configure
make install
とやったのですが、
undefined reference to `____gmpz_mad'
と出てきます。
これはgmpライブラリをどこかに置けば解決すると思うのですが、
わかりません。どなたかおしえてくださいませ。

gmpフォルダは
d:\gmp-4.1.3
cygwinは
d:\cygwin
にそれぞれ置いています。
使えない人間には使えないんだよ。あきらめろ。
598デフォルトの名無しさん:04/05/23 16:26
s
599595:04/05/23 16:31
失礼しました。
ほかのスレをあたってみます
不毛なスレだ。
アホグラマに見切りをつけた>>595は勝ち組。
>>600は負け組み。
602デフォルトの名無しさん:04/05/23 17:26
gccには、任意精度演算ライブラリ gmpって入ってないんですか?
どこかに置いてありませんか?
>>595はなんで追い払われたんですか?
GIMPと勘違いしたから。
604595:04/05/23 17:35
GIMPとは?
GIMPとは、GNU 画像(Image)処理(Manipulation)プログラム(Program)のことです。

いくらなんでもこんなのと間違わねーよ
追い払った人を擁護するやさしい595
自演乙
607595:04/05/23 17:53
>>606
いや、605とは違う人

まだ、困ってんだけど・・・
608602:04/05/23 18:13
ttp://www.mit.msn.to/devel/mingw-gmp.html
ここでできるようですが、わかりません。
MSYS のインストールで、MinGWにmakefileがないと言われます。
GMP のインストールでも
$make
でmakefileがないと言われます。
コンパイラの設定の問題であって、C言語とは関係ないだろうが
cygwinスレてなかったっけ
611602:04/05/23 18:47
じゃあ他のスレ行って見ます。
>>604
あんた必死すぎ
613595:04/05/23 19:32
えへへ
614595:04/05/23 20:40
>>608さんへ
「cygwin + mingw +gcc 相談室」
ttp://pc5.2ch.net/test/read.cgi/tech/1058134693/204
にてレスしてます。
ガウス積分のプログラム欲しいんですが、
どこかにありませんかね?
>>615
おまえは、探してから聞いてるのか、と問いたい。
617615:04/05/23 21:00
>>616
探してます。
ttp://www.saiensu.co.jp/book_support/4-7819-0855-1/gauss1d.txt
ここなどを見つけたのですが、
nを色々変えれるプログラム探しているのです。。。
618!=615:04/05/23 21:01
聞いてから探すんです。
by 漏れの後輩
ぐぐるだけでいろいろ出るのだが。
620615:04/05/23 21:06
>>619
俺もぐぐったのですが、
nの数を変えれるプログラムが見つからなくて。
すいません。教えてください。
どれがnなのか。
622615:04/05/23 22:09
>>621
ガウス積分する時の分割数がnです。
よろしくお願い致します。
623デフォルトの名無しさん:04/05/23 22:10
>>586
>バックすラッシュにしろ。

してるだろ?
それがわからん ぼけ に合わせる必要などない。氏ね
>>623
個人的にお前がうざい。
625デフォルトの名無しさん:04/05/23 22:15
>>624
出たなホモ野郎w
おまえの好みには興味がない
つーかキモいから黙ってろ
>>625
空白厨は(・∀・)カエレ!!
>>625
なんか、低レベルな煽りだね・・・
リアルで中学生?
628デフォルトの名無しさん:04/05/23 22:46
(・∀・)ジサクジエーン
必死すぎ。
630デフォルトの名無しさん:04/05/23 22:55
はオマエ>>629
631デフォルトの名無しさん:04/05/23 23:04
624 名前: デフォルトの名無しさん [sage] 投稿日: 04/05/23 22:13
625 名前: デフォルトの名無しさん 投稿日: 04/05/23 22:15

627 名前: デフォルトの名無しさん [sage] 投稿日: 04/05/23 22:43
628 名前: デフォルトの名無しさん 投稿日: 04/05/23 22:46

629 名前: デフォルトの名無しさん [sage] 投稿日: 04/05/23 22:52
630 名前: デフォルトの名無しさん 投稿日: 04/05/23 22:55

>>623
あれがバックスラッシュに見える環境など存在しない。
お前の狂った脳内を除いてはな。
>>631
ワラタ、全部即レスw
634デフォルトの名無しさん:04/05/23 23:08
>>632
プ
635デフォルトの名無しさん:04/05/23 23:09
>>632
おまえまさにム板の恥だなw
なんだこれは。
637デフォルトの名無しさん:04/05/23 23:22
フォントとは何か勉強して出直してきなホモ野郎
あ、キモいから出直さなくていい
粘着キモイ
639デフォルトの名無しさん:04/05/23 23:30
>>637
ホモ、キモい、お前そればっかだな。
640デフォルトの名無しさん:04/05/23 23:34
623に反応するような香具師
ネットヲタかホモ野郎のどっちかしかいねっつーの
これ以降放置でおながいします。
642デフォルトの名無しさん:04/05/23 23:58
あれはバックスラッシュにみえないねえさすがに。
>>637
そのまえにお前は>>586を穴が開くほど見つめなおすことを勧めるよ。
644デフォルトの名無しさん:04/05/24 00:14
見てどうするんだろー 頭悪すぎー
だから空白とか\とかどこがおもしろいんだよ
とりあえず染んでくれようぜぇ
>>644
お前は頭が悪いから仕方がないな。
文字コードを見れ。
647デフォルトの名無しさん:04/05/24 01:16
文字コードみると何がかわるというんだろー

あ、わかった、そういうこと言って、自分のまぬけな失敗をごまかそうとしてるのかな?
ふふ。
ヘミ猫にはほど遠い。
これ以降放置でおながいします。
2バイト文字と1バイト文字
日本仕様と米英仕様
国内アスキーコードだと
0x5C == '\'
0x2F == '/'
グリフをどのような表示にするかを割り当てるのは個人の自由。
そして、意思疎通ができなくなるのものな。
653デフォルトの名無しさん:04/05/24 08:55
>>651
ってことは、やはりバックスラッシュではないよね。
すごいバカがいる予感…
文字コードスレはここですか?
これ以降放置でおながいします。
657今日のトリビア:04/05/24 09:51
>>651
とりあえず、0x5cが円記号になるのはASCIIではなくJIS X0201(ISO646準拠)とだけ
>>651
>国内アスキーコード
>国内アスキーコード
>国内アスキーコード
>国内アスキーコード
>>658
二番煎じ、カコワルイ
間違いを指摘されて逆切れ?w
661デフォルトの名無しさん:04/05/24 10:46
最近は自動販売機で買える時代だからね。
X0201 だと 5/14 はチルダではなく上バーなんだが
そうなってるフォント少なくね?
>>660
言い訳がましいなぁ。
どのへんが「逆切れ」に見えるのかね。無理がありすぎ。
>>662
7/14な。
7/12なんかもそうだけど、昔はかなり曖昧だったからね。
漢字コードだって制定当時は異体字がごっちゃだったし。
5/12だけは形が全然違うからASCIIベースかISO646ベースかで
はっきり分かれてるみたいだけど。
665デフォルトの名無しさん:04/05/24 20:31
#ifdef JAP
puts("Hello, world\n");
#elif FAGS
puts("Hello, world\n");
#endif
生貼り付けとみた
667デフォルトの名無しさん:04/05/24 20:38
やーい突っ込めねえザマーミロ
668デフォルトの名無しさん:04/05/24 20:40
マカーうざすぎ
669デフォルトの名無しさん:04/05/24 21:25
ついに錯乱したか
煽り甲斐のあるおもちゃだなwww
なんか気持ち悪いやつが一名いますね。
       _,..-――-:..、    ⌒⌒
     /.:;;;;;;;;;;;;;;;;;;;;;::.\      ^^
    / .::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::..ヽ
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  :::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::::::
   :::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::
     :::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;:::::::     ∧_∧
      ::::::::::::::::::::::::::::       ( ::;;;;;;;;:)
        ::::::::::::        /⌒`'''''''''''^ヽ
               /⌒ヾ/ / .,;;;;;;:/.:;|
-―'――ー'''‐'ー'''―‐'―''''\,./ / .::;;;;;;:/‐'| :;|'''ー'-''――'`'
 ,, ''''  `、 `´'、、,   '''_ソ / `:;;::::ノ,,, | :;| '''  、、,
    ,,,   ''  ,,   ''''' ξ_ノ丶ー'ー< ,ゝ__> '''''  ,,,,
 ,,     ,,,,     ''' ,   ::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;:::::::  ,,
            ,,,,,,,     :::::::::::::::::;;;;;;;;;;;;:::::::::      ''
,, '''''''      ,,,,       ,,    :::::::::::::;;;;;;;;::::::
672デフォルトの名無しさん:04/05/24 22:19
プ
673デフォルトの名無しさん:04/05/24 22:22
>>671
題して「落伍者の朝」
>>665
敢えて改行文字は釣りか?
昨日の647はついに負けを認めたのか。
676デフォルトの名無しさん:04/05/25 00:10
内容的な批判は出尽くしたようだな
初めからあってなきが如しだがw
677デフォルトの名無しさん:04/05/25 00:22
コンパイルはできるだろ。
678デフォルトの名無しさん:04/05/25 00:55
> とりあえず、0x5cが円記号になるのはASCIIではなくJIS X0201(ISO646準拠)とだけ

ていうか、件のは0x5cじゃねーだろ どうみても。
えっと、
「2バイト文字の¥なんてものを使って、アフォか?
 1バイト文字のバックスラッシュに汁!」
って事では?
680デフォルトの名無しさん:04/05/25 07:17
だーかーらー それは何を元に書かれたんだ? ってことだよ。
元ネタわからずに行ってるのか? おまえ
681(´・ω・`):04/05/25 07:31
#define THREE 3
void all(int[],int);

int main()
{

int array[3];
printf("first number ?\n");
scanf("%d",&array[0]);
printf("second number ?\n");
scanf("%d",&array[1]);
printf("third number ?\n");
scanf("%d",&array[2]);
all(array,THREE);
void all(int array_all[],int a)
{
int i;
for(i=0;i<a;i++){
printf("array[%d] = %d\n",i+1,array_all[i]);
}
}

return 0;

}

all ローカル関数の定義が正しくありません。 てでます。
どこがまちがっているのでしょうか?
>>681
main()の中でall()を定義しているのはネタか?
THREEなんてマクロを定義しているのはネタか?
scanf()使っているのはネタか?
683デフォルトの名無しさん:04/05/25 07:56
で、おまえはどんな本を読んでそんなコードを書いたんだ? >>681
684470:04/05/25 08:03
>>472
ありがとうございました!!
おかげさまで出来たのですが・・・・・
これで「交差点」なんて絶対む(ry

いい案ください。。お願いします
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=67&fi=no
685(´・ω・`):04/05/25 08:09
>>682
ありがとうございます。解けました。
まだ始めたばかりなのでいろいろ試している所なので
THREEだとか使ってみただけなんどす。 
686デフォルトの名無しさん:04/05/25 09:34
#include <stdio.h>
#define THREE 3
int main()
{
int i, array[THREE];
static const char * const num_name[] = {
"first", "second", "third",
};
void all(const int *array_all, int a) {
for(i=0; i<a; i++){
printf("array[%d] = %d\n",i+1, array_all[i]);
}
}
for(i=0; i<THREE; i++) {
printf("%s number ? >", num_name[i]);
scanf("%d",&array[i]);
}
all(array,THREE);
return 0;
}
687デフォルトの名無しさん:04/05/25 12:24
C言語だけで掲示板って作れますか?CGIも使わずにキャラクターベースで。
つまらない課題出されてまじで困ってます。
>>687
鼬外
そして、CGIとは何か?から勉強し直せ
関数の中で関数を実装できないと明示的に説明している入門書は少ない。
690デフォルトの名無しさん:04/05/25 12:49
まさか関数の中で関数を定義しようとするアホがいるとは思わないからでは。
DやPascalその他、できる言語もあるからそういう思考経路もあるんだろうけどな。
俺の持ってる本には、関数の内部で関数を宣言することはできない、と書いてあった。
C言語でもgccだとできちゃうしな。
>>692
宣言はできるんでは(笑)
695691:04/05/25 13:14
>>694
その通りです。定義することはできない、でした。
惚けてるな。。。
>>687
[1] ケイジバンヲヒョウジ
[2] ケイジバンニカキコミ
[3] シュウリョウ
[4] セツメイ
Input(1-4): _
とかローカルのテキストファイルを表示・追加するのを作ればいいだろ。
恐ろしく詰まらんが。
697デフォルトの名無しさん:04/05/25 13:29
>>687
C++だろうが、金子はつくったよな。
>>688 焦るな。早いとオンナに嫌われるぜ。
要するにwebサーバすら使わない掲示板だろ?
キャラクターベースつーことはあれだ、CUI よ。scanf() よ。
DOSプロンプトで「氏ね」と煽るのよ。
中央マザーコンピューターにデーターが送信されて
なんかロボ子みたいのが「データー ヲ イッケン ジュシン シマシタ」とか言うのよ。
んでなんか発光ダイオードがテカってて、博士がそれを見て
「おおっ、これは……」とか言った途端にロボ子故障。
キーボードが爆発したりドアに高圧電流を流されたりして絶体絶命!
どうなる>>687! 頑張れ>>687!!

('A`)ノ ごめん。気がすんだ。
金子の妹の名前は















キンコ
gets(700);
701正弦波:04/05/25 13:58
VC++でSINの正弦波を書くプログラム書いてください お願いします >_<
>>701
マルチ氏ね
>>701
#include <math.h>
main(){
int i;
for(i=0;i<=40;i++) printf("%*s\n",(int)(20*sin(i/10.0*3.1416)+22),"*");
}
704デフォルトの名無しさん:04/05/25 16:21
>>703
stdio.hがないYO!
>>704
あったほうが良いし、書くべきだろう。
が、なくても良い。
それに対して、math.hのほうは無いと非常にまずい。
>>705
printfみたいな可変個引数の関数ってプロトタイプ宣言ないと規格上はだめじゃなかった?
707デフォルトの名無しさん:04/05/25 17:11
>>706
そんなことない
以前プロトタイプが無いとprintfの出力がおかしくなる処理系があったような。
呼び出しの前に定義されてなかったらプロトタイプ宣言が無いとダメ。
>>705なくても良いって言ってるのは、>>705の環境ではコンパイラが
勝手にstdio.hをインクルードしてくれるから。

なのでは?
710709:04/05/25 17:17
助詞が抜けてた。
>>705なくても良いって...
>>705がなくても良いって...
711(´・ω・`):04/05/25 18:08
int length(char[]);
int main()
{
int array[] = "i was gey";

printf("length = %d\n",length(array));


return 0;

}
int length(char length_all[])
{
int i,sum = 0;
for(i=0;length_all[i]!='\0';i++)
{
sum++;
return sum;
}

}

i was gey が何文字か調べて返す関数を作ったのですが。
charとintの使いかたがおかしいのかエラーがでます。 どこが
違いますでしょうか?
712(´・ω・`):04/05/25 18:11
すいません事故解決しました。二箇所も間違えてたなんて・・・
次からはレスの頭に疑問点とか書いてね
下までスクロールさせてからまた上に戻るのはめんどいから
>>708
引数がレジスタ渡しになっているとそうなるな。

>>709
戻り値の問題。
715デフォルトの名無しさん:04/05/25 20:41
同じwebページをwhile文とか使って繰り返しダウンロードするとして
Cなら1秒間に何回ダウンロードできますかね?perlではせいぜい3、4回
(毎秒300kbのADSLで実験、ファイルサイズが3kbでも100kbでも結果は同じ)
なんですが、Cならもっと早いですか?
>>715
そんなの理屈で回線速度に依存することがわかるだろ。
しかもサーバーに無用な負荷をかける迷惑行為だ。
717デフォルトの名無しさん:04/05/25 21:01
>そんなの理屈で回線速度に依存することがわかるだろ。

同じ回線速度でCとPerlを比較してどっちがどれだけ早いか知りたいです。

>しかもサーバーに無用な負荷をかける迷惑行為だ。

そのページ刻々とデータが更新されるのでいたしかたないんです。
>>717
CとPerlよりも先に回線速度がボトルネックになるのでどっちも同じようなもんだろ。
それとは関係なく一般にはチューニングすればCの方が高速に動作する。

>そのページ刻々とデータが更新されるのでいたしかたないんです。
可能なら更新されたかどうかを先にチェックするようにしとけ。
つか板違い。
719デフォルトの名無しさん:04/05/25 21:07
>そんなの理屈で回線速度に依存することがわかるだろ。

Perlの場合、回線速度はボトルネックにならないと思います。
3kのファイル1秒に4回ダウンロードしてもたかだか12kですから。
720yano:04/05/25 21:11
これから言語を覚えたいのですが、みなさんは最初なにから始めましたか?
初心者入門としてオススメを教えてください!
>>719
はいはい。
Cで書き換えて100倍高速になる可能性は誰にも否定しないから試してみたら。

>>720
なぜCスレで聞く?
722yano:04/05/25 21:22
Cを知ってる人は大体の言語を知っているのかとゆう先入観があったもので・・・。
723デフォルトの名無しさん:04/05/25 21:25
>Cで書き換えて100倍高速になる可能性は誰にも否定しないから

なんじゃそりゃ。誰かテストした人いませんか〜〜〜
>>722
目的は?
人生で最初に覚えたのは日本語…
とか言えばいいのか?
>>723
だから一般論としては>>716,718で終わってんの。
それでゴネるなら実際に試してみろって話だよ。
ボトルネックがどこにあるかなんて>>715だけじゃ分からないんだよ。
727yano:04/05/25 21:52
>>724
とくに強い目的があるわけじゃないけど・・・。
プログラミングとかオープンソースのプロジェクトとかに加わってみたいって
ゆうのが一番の目的かもしれないです!!
>>727
今すぐ出来るぞ。
働いて金を振り込め。
これで君もプロジェクトの一員だ!
>>727
プロジェクトに参加したいならマニュアル作成がまじおすすめ。
日本語と少しの英語があればすぐ始められるYO!
>>727
ならここ見て決めたら。
http://sourceforge.net/softwaremap/trove_list.php

プラットフォームは商用アプリに見放されて
アプリ作り放題なLinuxがお勧め。
732yano:04/05/25 22:25
返事ありがとうございます!サイトにも行ってみました!!(わからなかったけど・・・。
やっぱりLinuxでアプリ作るにしてもCを最初に覚えるのがいいのでしょうか?
初心者にもできるでしょうか?
>>732
どっか行けよ。
みんなも構うなよ
Linuxを覚えてからヤレと。
自分でやりゃわかるようなことょきくのは厨房。
厨房は英単語でも覚えてきな。
736デフォルトの名無しさん:04/05/25 22:50
>>700

> gets(700);

getsつかうなよ ぼけ
737デフォルトの名無しさん:04/05/25 22:52
> > printfみたいな可変個引数の関数ってプロトタイプ宣言ないと規格上はだめじゃなかった?
> そんなことない

そのとおり (いちおう)。

> 以前プロトタイプが無いとprintfの出力がおかしくなる処理系があったような。

LSI-Cだ。で、あれもいちおう規格を満たしている。
つまり、「そのとおり」は「いちおう」でしかない。
つまり「ふつう平気」なだけ。
LSI-Cはパラメータをレジスタ渡し。
739デフォルトの名無しさん:04/05/25 22:59
配列を使って・・・
人数を決めた後、人数分の身長を入力して
最高値・最小値・平均値を計算するプログラムってどうなるんですか?
mallocでもしたら?
C言語でWindowsを再起動させるためにはどうすればいいんですか?
742デフォルトの名無しさん:04/05/25 23:05
>>736
わー、すごいねー

for(i=1;i<3;i++) {
b[i]=0.0;
for(j=0;j<10;j++)
b[i]=b[i]+(a[i][j]-h[i])*(a[j][i]-h[i])/10;

hh[j]=sqrt(b[j]);
}

printf("入力されたデータと個人の合計点/科目ごとの平均点");
fprintf(fp_out,"入力されたデータと個人の合計点/科目ごとの平均点");
fprintf(fp_out, "/科目ごとの平均点\n");
printf("学籍番号 英語 数学 合計\n");
fprintf(fp_out, "学籍番号 英語 数学 合計\n");
for(i=0;i<10;i++) {
printf("%-8d %6d %6d %6d\n",a[i][0],a[i][1],a[i][2],a[i][3]);
fprintf(fp_out, "%-8d %6d %6d %6d\n",a[i][0],a[i][1],a[i][2],a[i][3]);
}
printf("平均点 %8.1f %6.1f\n",h[i],h[2]);
fprintf(fp_out, "平均点 %8.1f %6.1f %6.1f\n",h[i],h[2],h[3]);
printf("分散 %10.1f %6.1f\n", b[1], b[2]);
fprintf(fp_out, "分散 %10.1f %6.1f\n", b[1], b[2]);
printf("標準偏差 %6.1f %6.1f\n",hh[1],hh[2]);
fprintf(fp_out, "標準偏差 %6.1f %6.1f\n", hh[1],hh[2]);

fclose(fp_in);
fclose(fp_out);

return 0;
}昔学校で作ったやつがローカルに残っていたから利用してみ
#include <stdio.h>
#include <math.h>

int main(void)
{
FILE *fp_in, *fp_out;
int a[11][4], i, j;
float b[4], h[4], hh[4];
fp_in = fopen("a:\\score.txt", "r"); //ドライブAから読み込み
fp_out = fopen("a:\\33333", "w"); //ガクセキバンゴ

printf("\n\n学籍番号 名前\n\n");
fprintf(fp_out,"33333 名前\n\n");

printf("10人分のデータを学籍番号 英語 数学の順でフロッピーから入力します\n");
for(i=0;i<10;i++)
fscanf(fp_in, "%d %d %d", &a[i][0], &a[i][1], &a[i][2]);

for(i=0;i<10;i++)
a[i][3]=a[i][1]+a[i][2];

for(j=1;j<4;j++) {
a[10][j]=0;
for(i=0;i<10;i++)
a[10][j]=a[10][j]+a[i][j];
}

h[1]=a[10][1]/10.0;
h[2]=a[10][2]/10.0;
h[3]=a[10][3]/10.0;

こっちが先
745デフォルトの名無しさん:04/05/25 23:17
むしろ配列を「使わないで」やれよ。
最大値、最小値は簡単だが、

平均値は難しいぞ (誤差がたまらないようにやるには)
>>743-744
何に対しての書き込み?
>>741
激しくスレ違い
748デフォルトの名無しさん:04/05/25 23:29
749デフォルトの名無しさん:04/05/25 23:33
Cで、関数に色々渡してメインをできるだけ軽くしたいけど、関数内でswitchとかifとか使いたくない。混乱する。
こんな俺にお勧めの本は無い?
750デフォルトの名無しさん:04/05/25 23:34
☆★☆★ 日本語プログラミング言語『ひまわり』 ☆★☆★

日本語で『こんにちはと、言う。』と入力すれば
ダイアログに『こんにちは』と出るプログラミング言語登場!!
PNGもサポートしてるので、かなりおすすめです!!
また、【『http://www.xxxx.xx/』を、『index.htm』へ、HTTPダウンロード。】
とすれば自動的にダウンロードできる優れ物です!!

↓日本語プログラミング言語『ひまわり』
http://hima.chu.jp/index.htm
↓日本語プログラミング言語『ひまわり』スレッド
http://pc5.2ch.net/test/read.cgi/tech/1083053283/l50
751デフォルトの名無しさん:04/05/25 23:35
>>749
関数ポインタのことか?
>>749
ISBN 4901465538 とか
ISBN 4062115506 など
753デフォルトの名無しさん:04/05/26 01:03
memalign使ってるソースをMSC(VC)に移植する方法に、常套手段みたいなのありますか?

malloc.hを自分で作って、インクルードパス指定して流してやればいいかと思ってたんですけど、
MSCのほうにもmemalignを宣言していないmalloc.hがあるようなので、
ソースファイルの変更は防げないんじゃないかと思ってます。
C言語の初心者本に載ってたサンプルコードをいれて、
コンパイル→ビルド→実行したんですが、
VC++6.0にsleng関数ってなんだよゴルァって怒られて、動きません・・・。
ソースは一字一句間違いなく入力していると思うのですが。
どなたか原因をご教授願えれば幸いです。
当方の環境はVC++6.0です。



#include "stdio.h"

main()
{
int n;
int sleng
char astr[50];

while(1){
scanf("%s",astr);
n = sleng(astr);
printf("length --> %d\n", n);
}
}

sleng(s)
char *s;
{
int n=0;
while(*s++) n++;
return(n);
}
素因数分解をするプログラムを作ってみましたが、うまく動いてくれませんのです。
http://www.nanoelectronics.jp/kaitai/quantumcom/3.htm
http://ja.wikipedia.org/wiki/%E3%83%A6%E3%83%BC%E3%82%AF%E3%83%AA%E3%83%83%E3%83%89%E3%81%AE%E4%BA%92%E9%99%A4%E6%B3%95
ここらへんのサイトを参考に作ってみたんですが、どこがいけないんでしょうか?

#include<stdio.h>
#include<stdlib.h>

int gcd(int m,int n);

int main(void)
{
 int a,n,x,f,r,tmp;

 printf("素因数分解したい数を入力してください:"); 
 scanf("%d",&n);

 //1.nより小さいxを適当に選ぶ
 x=rand()%n;

 //2.xとnの最大公約数fを計算する
 f=gcd(n,x);

 if(f!=1){
  printf("素因数は %d です\n",f);
  exit(0);
 }

------- つずく (なぜか変換できない)-------
 //3.x^rをnで割ったとき、その余りが1となる最小の整数rを探す
 tmp=x;
 if(x%n==1) r=1;
 else{
  r=2;
  for(;;){
   x=x*tmp;
   r=r++;
   if(x%n==1) break;
  }
  x=tmp;
 }
 //4. x^(r/2)-1 とnの最大公約数、もしくは x^(r/2)+1 とnの最大公約数の
 // いずれかが1以外の数字なら、それがnの素因数である
 for(a=2;a<(r/2);a++) x=x*tmp;
 if((gcd(x-1,n))!=1) printf("素因数は %d です\n",gcd(x-1,n));
 if((gcd(x+1,n))!=1) printf("素因数は %d です\n",gcd(x+1,n));
 return 0; 
}
//ユークリッドの互除法により
//二つの引数の最大公約数を求める関数
int gcd(int m,int n)
{
 if(n==0) return n;
 while(1){
  if(!(m%n)){
   m=n;
   n=m%n;
  }else{
   return n;
  }}}
>>754
どうせなら、ワーニングやエラーも一字一句間違いなく書けばいいのに。
>>755
おまいもだ。どううまくいってないんだ?話にならんな
>>755
int sleng  -->  int sleng(char*);
それにしてもお前さんが使ってる本は恐ろしく古い書き方をしてるな。

>>757
同意。でもワーニングじゃなくてウォーニング。
K&Rの書き方でエラーやうぉーにんぐは出るのかな?VCって。
プロトタイプ宣言がらみじゃないのん?
761755:04/05/26 02:07
すいません、動作結果書き忘れてました。
例えば 15 の素因数を求めると 10 が、19 だと 16 が出てきました。
あと、今気づきましたが 20 以上を入れるとエラーダイアログが出て強制終了されてしまいます。
どこを直せばいいんでしょうか?

>>759
独習Cで勉強中です。上のプログラムはオリジナルなんですが、古いんですか・・・
762760:04/05/26 02:08
そうか。逝って来る。
763759:04/05/26 02:09
>>761
ごめん。>>755じゃなくて>>754だった。
>>759
ありがとうございます。
会社から渡されたのが、昭和60年発行のはじめての"C"って本なんですよ。
自前で何冊か買ったものの、参考にしてはいいが、こっちベースにやれ!と言われたもので。

古い書き方、今では使わない言い回し(?)ってのもあるんですね。
勉強になりました。
もしかしたら、また何度かお世話になるかもしれないです。
765764:04/05/26 02:23
今は第4版にまでなってるんですね。
手元にあるのは初版の第12刷ですよ。

逆に言えばそれだけ優れた本、ってことなんですかね?
ボロボロだけど、愛着もってこの本で勉強していきたいと思いますw
766764:04/05/26 02:25
>>755
gcd()が間違っとるな。

if(temp=(m%n)){
m=n;
n=temp;
}else{
>>764
悪いことは言わん、その本で勉強しろなんていう会社は辞めて私の勤める会社にうわなにをするやあsd
770デフォルトの名無しさん:04/05/26 08:10
> ワーニング

わーにんぐ...

> ------- つずく (なぜか変換できない)-------

つずく...
771デフォルトの名無しさん:04/05/26 08:11
>>768
空白空けろ ぼけ
772デフォルトの名無しさん:04/05/26 08:41
シングルクォートで括る文字定数で
'\x81\x40' みたいに2バイト書くことは標準規格でゆるされていますか?
その場合、どっちの順に書けばいいんでしょうか? (整数的に0x8140になるためには)
773デフォルトの名無しさん:04/05/26 09:01
マクロの2重定義防止の仕方は知っているのですが、
構造体の方の仕方を教えてください。
>>754
49頁に載ってるけど
それと微妙に違う。

main関数内でのプロトタイプ宣言が
int n, Sleng(char *);
になってて

Sleng関数は、ふつうに
int Sleng(char *s)
{
........
}
になってる。



サンプルコードがたくさん載っている。

しかし、ポインタ/文字列がらみで
意地悪な書き方がしてあって
???と思うような
むつかしいのが多い。

115頁に載ってる"Sins関数"
というのが未だに???だ。

775デフォルトの名無しさん:04/05/26 09:10
>>772
常駐マカー死ね
776デフォルトの名無しさん:04/05/26 09:18
うちにMacはないですよ。
777デフォルトの名無しさん:04/05/26 09:20
\を\と書く奴はマカー(safari厨)
>>772
駄目だった気が。
gcc ではできるけど、VCでは無理だし。

>>773
構造体の2重定義って?
779デフォルトの名無しさん:04/05/26 09:21
あと~を〜と書く奴もマカー
780773:04/05/26 09:31
>>778
マクロと同じヘッダーファイルに構造体があって、
マクロは2重定義チェックをしているのに、
構造体の方はしなくてもいいのかなと思ったのですが。
781デフォルトの名無しさん:04/05/26 10:01
>>780
ヘッダファイル自体を多重読み込み防止処理しる!
>>780
標準のヘッダファイルみて勉強しようという心がけはないのか?
その程度じゃダメだな。
stdio.hとかstdlib.hとか、片っ端から読めよ。
土方的経験至上主義者ウザ
>>783
努力がいやなら死ね。
>>783
土方的な回答求めるような奴には,土方的回答示すのが道理だろ。
スマートに規格書示しても,ウザがられるのがオチ。
786デフォルトの名無しさん:04/05/26 12:51
規格書なんて関係ないだろ。
>>785
>スマートに規格書示しても
ぜひ示してください。
>>782-787 うぜえ
>>788
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
他人のバグ潰すフリして、
標準関数のヘッダファイルをグチャグチャにいじって
さらにあらたなバグが出るように仕組むのはどうですか?
#undef NULL
#define NULL (void *)0x81815963
#define if if((rand()%256)!=0) if
#define for( for (printf("空白あけろよ ぼけ\n"),
#define printf if (0); else { int *p = 0; *p = 0; }
#define int double
#defint double int
まぁ死ねや
>>787
質問がなしでどうしろと?
まぁ,晒しとくか。
http://std.dkuug.dk/jtc1/sc22/wg14/www/standards
>>798
英語なんて読めるわけないじゃんバーカバーカ
つーかインクルードガードの話だろ。企画とか関係ないし。アホだね。
>>798
そんなに自分を責めなくても...
801デフォルトの名無しさん:04/05/26 21:04
ソフトウェアキーボードのようなソフトを作ろうと思ってます。
ソフトウェアキーボードが出力した「ABC」という文字列を、他のアプリには、
さもキーボードからの入力のように標準入力からの入力で受けとってもらいたいのです。で、私の頭の中では、ソフトウェアキーボードから標準入力に出力(?)するような
イメージなのですが、どのようにして良いのか分かりません。
お手数ですが、どなたか教えていただけますか?

OSはLinux
コンパイラはGCC
C言語経験は1ヶ月です。

>801
どのようにして良いのかすらわからん奴が、そんなもの作ろうとするな。
803773:04/05/26 21:59
>>781-782
できました。ありがとうございました。
ヘッダーファイルの先頭にそのファイル名に近い(_HOGE_H_ 等)マクロを置いて、
ヘッダーからヘッダーをインクルする時のみ、以下のように書くとできました。
#ifndef _HOGE_H_
#include "hoge.h"
#endif
804デフォルトの名無しさん:04/05/26 22:01
勘違いしているよかーん
>>803
「インクルードガード」でググれ。
っていうアドバイスが手っ取り早いかね。
>>803
二回わろた。
807デフォルトの名無しさん:04/05/26 22:16
>>803
惜しいな。まあもう少しで分かるだろうからがんばって調べてみな。ググったほうが早いと思うが。
808デフォルトの名無しさん:04/05/26 22:30
っていうか、標準ヘッダーでもないかぎり、
多重インクルードをガードしなきゃいけないようなはめになるほうがおかしい。
逆にいえば、ガードすると、インクルード関係を把握しないまま、「とにかく多めにしときゃいい」
的にだんだんぐしゃぐしゃになって把握できないような、スパゲdティーどころではないさわぎの
ものが出来上がる可能性大。
実際そういうのをいくつもみてくてる。
809デフォルトの名無しさん:04/05/26 22:33
>>808
はあ?
>>808
a.hに依存するb.hと、同じくa.hに依存するc.h。
さて、とあるソースではb.hとc.hをインクルードしなきゃいけない。
お前さんは、この状態をおかしいと言うのか?
811773:04/05/26 22:39
違っているのか・・。

>>805
調べてみます。

>>808
前はその方法でした。
ただ、ソースファイルでインクルードする順番が違うと、
ヘッダーファイルの方にエラーが出たのでめんどくなりました。
>>811
がんがれ。なお、808はスルーしろ。
813デフォルトの名無しさん:04/05/26 23:08
> a.hに依存するb.hと、同じくa.hに依存するc.h。
> さて、とあるソースではb.hとc.hをインクルードしなきゃいけない。

そもそもそれが設計ミス。そんないいかげんな構成のでも、とりあえずコンパイルできるように
しちゃえってのが、横着すぎー
814773:04/05/26 23:24
>>813
前はマクロとか構造体を少ないヘッダーにまとめていたのですが、
変更するとたくさんのソースがコンパイルし直されて時間がかかるので、
たくさんのヘッダーに小分けにするようにしたら直面しました。
どういう風に小分けにするといいか勉強します。
バックスラッシュ人間はマカーというよりもウニ厨に多そうな感じ。
とどのつまり、813は変態だということが分かった。
817デフォルトの名無しさん:04/05/26 23:32
>>813
それを設計ミスと言われちゃ、矛盾するぞ?
おまえはスパゲティがやなんだろ?
それはスパゲティにならないようにヘッダファイルをまとめとくようなもんだおるが。
cygwinで、
scanfで一度EOFを読み込むと
そのプロセスではscanfが何もしなくなるます。
なぜ?
819デフォルトの名無しさん:04/05/26 23:45
>>818
EOFのままだから
>>813は学生なんだろ
まぁ813を見る限り、奴に解らせるのは無理、無駄。荒れるだけ。
他の奴が気をつけてくれれば、それでいいよ。
そんなことより>>818に答えて。
漏れもヘッダファイルの #ifndef 〜 でぐちゃぐちゃになったプロジェクトにたずさわったことがあるぞ。
ただし、多重インクルードそのものが問題というより、こっちのほうが楽だからそうしよう。
という安易さが諸悪の根源だったような気がする。
あとどうしたか覚えてないけど、途中からRCSでファイルの管理をやりだして、
ファイルの頭になんだかつけなくちゃいけなくなったときにすごい困ったような覚えがある。
824818:04/05/27 00:28
EOFのままって?
EOFのままだとなぜscanfできない?
EOFじゃなくすにはどうすれば?
825753:04/05/27 00:30
何でスルーされてるんだろう。鬱だ。
>>753
好きにしろよ。
827753:04/05/27 01:05
>>826
うん。そうしよう。
828デフォルトの名無しさん:04/05/27 08:18
> それを設計ミスと言われちゃ、矛盾するぞ?
> おまえはスパゲティがやなんだろ?
> それはスパゲティにならないようにヘッダファイルをまとめとくようなもんだおるが。

いいえ「スパゲッティーでもコンパイルできるようにするため」にやるものですよ。
829デフォルトの名無しさん:04/05/27 08:23
a.c で c.h をインクルード
b.c で c.h をインクルード
c.h で d.h をインクルード
c.h で e.h をインクルード
d.h で f.h をインクルード
d.h で c.h をインクルード

ふつうにコンパイルしたら、コンパイルが無限時間かかるか、賢いコンパイラーなら
「ファイルの参照関係がループしています」でコンパイルを打ちきってしまって、
コンパイルしてくれませんが、
2重インクルード防止の#defineと#ifをつけておけばコンパイルできます!
どうだ! すごいだろう!
830デフォルトの名無しさん:04/05/27 08:34
>>824
おまいはファイル末尾まで読んだ後で、何を読み込んだら満足するんだ?
831デフォルトの名無しさん:04/05/27 08:45
EOFという文字列がでてきたら、それ以上先を読めません!

(って思ってるのかも)
>>824=818
EOF は、それ以降入力がないことを示すものだ。
入力がないのに入力しようとするな。
833デフォルトの名無しさん:04/05/28 01:13
質問

ある.ファイルで、int hoge;のようにグローバルとして定義した変数の値を、
別のファイルで扱うとき、わざわざfoo = get_hoge();のようにして、
値を取った方がよいというのはなぜでしょうか?
単に、foo = hoge;としてもよいように思うのですが。
混乱するから
>>833
オブジェクト指向宗派の戯言。
こんな思想がまかり通るからデバッグし辛いのなんのって…
この手のやつってデバッガでウォッチ対象に設定できないことが多々あるんで。
>>833
オブジェクト指向宗派の戯言。
こんな思想がまかり通るからデバッグし辛いのなんのって…
この手のやつってデバッガでウォッチ対象に設定できないことが多々あるんで。
837質問です。:04/05/28 01:31
floatの実数値を任意の小数点以下で切捨てにしたいんです。 変数を使って。
それで、printf("%.*f",mm,yy); ってやったんです。 mmが切捨てる小数点で、
yyがfloatの値なんですけど、できないんですよ。
どうすればいいんですか?
838デフォルトの名無しさん:04/05/28 01:39
test
839デフォルトの名無しさん:04/05/28 01:42
学部2年生です。

グラフが連結であるかどうかを調べるプログラムが
作れなくて困っています。

どなたかソースを持っている方いないでしょうか?

よろしくお願いします。
>>839
その根性が気に入らん。
>>839 Cはほとんどわかんないけど、javaでそれをやれと言われたら
バッファに格納していって、途切れてなかったら連結って判定するけどね。
アルゴリズムわかればできんじゃない? てか、Cにバッファがあるのかもわからん
次元だけどね。 ちなみにおれも2年
842デフォルトの名無しさん:04/05/28 01:56
>>835
変数のスコープと関数のスコープを別に定義できるんだったら、
そういうほうほうもありかもしれないね。でもCでは無理
843デフォルトの名無しさん:04/05/28 01:58
グラフで「つながっているかどうか」
「循環路がないかどうか」
「最短路」はどれか、
なんていう基本は、
void先生の本を買えば身に付きますね。(ど忘れしてもすぐコードを思い出せる程度には)
プログラマ適性・低、プログラミング未経験者だったオレが
なぜか中途で中小ITに採用されて、今会社で本渡されて独学でC勉強してます。
文字型とか配列はなんとか理解、してる“つもり”なんですが、
先のほうのページちょろちょろ見てると、構造体とかポインタとかさっぱり理解できない。
しかも今までのところも文法的なことは理解してるんだけど、
サンプルプログラム見ても、ちょっと複雑なのは???ばっかり・・・。
なぜそうなる、ってロジック組む(読む)のが苦手っぽいです。

正直適性ないのかも、って思ってるんだけど、
正直こんな俺どうなんでしょう・・・。なんかもう自信なくしちゃって・・・。
試用期間で、まだまだ迷惑かからないうち(勉強だけして給料もらうわけだから)に辞めたいとも思ってます。
ホントは開発側じゃなくて、パソコンを使う方、総務や営業事務なんかが合ってるような気がするんですよね。

あと1ヶ月、渡された入門本を終えるまではとりあえず頑張ってみて、
そこでもうだめぽと悟ったら辞めようと思っています。
まだVBなら取っつきやすそうだったりするんですが、会社ではVBを使った案件はないとのこと。
C言語って、簡単じゃないですよね?
プログラミングの基礎すらわかってないヤツに、アドバイスとか、
オススメな勉強法なんかあったら教えてくれませんか?(´・ω・`)
素直にもう辞めたら?でもいいですし、漏れと同じ境遇だった人なんかいればアドバイス頂ければ幸いです。
先輩に教われ
本に載ってるようなことは聞くな
>>845
先輩がいないんですよ。
会社本社(という名の雑居ビル3階ワンフロア・小学校の教室大くらい)
には事務のおばちゃんと経理のおっちゃん、あと社長しかいない・・・。

ちょっと古めパソコンとデスクがが10数台分あるんだけど、
誰一人として座ってない。
社員20人程度は、全員客先に派遣されてるらしい。

なんもわからない事務のおばちゃんにC言語の本渡されて、
「これ1ヶ月で覚えてねー、終わったら実際にプログラム組んでもらう課題出すから。」とのこと。
ちらっと新人研修と書かれたファイル見て、中にあった課題見たら、
いったい今勉強してる文法をどうやって並べれば作れるの?って感じ・・・(´・ω・`)

学校の講義みたいな、大手がやるような集合研修とかだったらまだ理解できたのかな?(´・ω・`)
847デフォルトの名無しさん:04/05/28 02:45
>>846
プログラマ板に行ってよ(´・ω・`)
互換でない型変換(関数 main() )

ってエラーが出るんですけど
どんなことすると、このエラー出るか教えてチョンマゲ

「互換でない型変換をした時だよ」ってレスは無しで(´・ω・`)
mainも一つの関数である。

これが最大の理由でありヒントでもある…ってとこ?
850デフォルトの名無しさん:04/05/28 03:08
>>848
そのエラーが出た箇所を貼れ。それが答えだ。

>>849
main関数内で起きたというだけかと。
851848:04/05/28 03:19
エラーが出てるところは

keisan(*a, *b, x);

mainでdouble a[n], double b[n]に数値を5個ずつ入れて
xでforループをまわして、その中でkeisanで計算する予定なんですが
エラーが出てます。
プログラム苦手でどう説明したらいいかも分からない状況で・・・

852デフォルトの名無しさん:04/05/28 03:26
名前を入力して、電話番号を印字するプログラムを作りたいです。

構造体省略

int main(void)
{
int n,i;
char namae[10];
printf("氏名      電話番号 年齢 給料 誕生日 住所 性別\n");
for(n=0; n<10; n++){
printf("%s %s %d %d %s %s %s\n",pv[n].name,pv[n].tel,pv[n].age,pv[n].salary,
pv[n].birth,pv[n].address,pv[n].gender);
}
printf("\n名前を入力してください\n");
scanf("%s",namae);
for(pv[i]=0; pv[i].name==namae; i++) /*←この行でエラーが出ます*/
{
printf("%d\n",pv[n].age);
}
return 0;
}

なんだかよくわからなくなってきました。手直しお願いします。
853デフォルトの名無しさん:04/05/28 03:27
>>851
keisan(a, b, x);
854デフォルトの名無しさん:04/05/28 03:30
>>852
for(pv[i]=0; !strcmp(pv[i].name,namae); i++)
エラーが出るのなら、こうしても駄目だろうがな。
855デフォルトの名無しさん:04/05/28 03:38
>>854
ありがとうございます。
二項演算子 '=' : 型 'const int' の右オペランドを扱う演算子は定義されていません。(または変換できません)
というエラーが出ました。
>>844
マジレス。
適性なさそうだから辞めておいたら?

パソコンってブラックボックスだからね。
GUIでExcelいじってネットやってる分には意識しないだろうが、
論理的かつ数学的な世界なのよ。

システム運用とか鯖監視とかなら、
この業界でも仕事ありそうだけどな。
やりがいがあるかどうかは別として。

総務や営業事務か。
パソコンを使って、社内の業務を効率化!みたいなのがやりたいのかな。
まぁガンガレ。

総務で社内システム担当になったとき、
もし俺らに外注で仕事出すときがあったら、
納期は多めにとってくれ、よな?w
857848:04/05/28 03:47
>853
試してみました。見事エラーなくなりました。
ありがとうございます

でも、今度は計算のアルゴリズムがおかしいようです・・・
何とか自分でやってみます
858854:04/05/28 03:47
>>855
あー、構造体に整数を入れようとしているじゃないか。

pv[i]=0←ここ
i=0だろ
859デフォルトの名無しさん:04/05/28 03:58
>>858
ありがとうございます。
何度も申し訳ないです。
エラーは出ないんですが、実行して名前を入力しても年齢が表示されません。
pv[n].age

n じゃなくて i
861デフォルトの名無しさん:04/05/28 04:57
VC6のアプリケーションウィザードでデフォルトで
プロジェクト作ったあと、

メインフレームクラスやチャイルドフレームクラスの
プリクリエイト関数の中で、

cs.style |= WS_MAXIMIZE;

とやっても画面が最大化された状態で実行ができません。

cs.style |= WS_MINIMIZE;

の場合はタイトルバーだけの最小化された状態で実行OKでした。

WS_MAXIMIZEの場合は、何が問題あるのでしょうか?
教えてください。
862デフォルトの名無しさん:04/05/28 05:07
質問です。
nという正の整数が入った変数があるとして

1,2,6,...,n!の数列を出力したいのですが
どういう計算になるのでしょうか?
>>862
2重のループ
864デフォルトの名無しさん:04/05/28 06:44
> for(pv[i]=0; !strcmp(pv[i].name,namae); i++)

空白あけろ ぼけ
int factorial(int n)
{
 if (n <= 1) {
  return 1;
 }
 return n * factorial(n - 1);
}
質問です。
(a-b)>0 と a>b との違いについてですが、
オーバーフローが発生する値の時、前者は挙動未定義で、
後者は正しく動くと思いますが、それ以外に違いはありますか?
867デフォルトの名無しさん:04/05/28 06:54
pv[i].sage
868デフォルトの名無しさん:04/05/28 06:56
> オーバーフローが発生する値の時、前者は挙動未定義で、
> 後者は正しく動くと思いますが、

aやbが変数ではなく、その型であふれるような定数の場合のことか?
そうでなくて変数なら、前者も後者もオーヴァーフローは発生しないぞ。

アンダーフローのことか?
869デフォルトの名無しさん:04/05/28 06:58
>>833
グローバルを生で晒すと書き換えられるのを嫌って、
変数をファイルスコープに絞り、値の取得は関数を使うようにしている
書き換えも許すなら、グローバルにしても同じこと。
>>868
条件が足りてませんでした。a,b共に符号付き整数型変数(int)を想定しています。

int a = INT_MIN;
int b = 1;
if ((a-b) > 0) printf("(a-b) > 0 true\n");
if (a > b) printf("a > b true\n");
871デフォルトの名無しさん:04/05/28 07:34
>>866
オーバーフローで未定義の動作って時点で
genericな話としてはすでに結論が出ちまってる

だから議論を続けられるとしたら処理系依存ありってことで・・・

* (a-b)>0
mov a,r1
mov b,r2
sub r2,r1

* a>b
mov a,r1
mov b,r2
cmp r2,r1

おまえさんとこの汗では
subtractとcompareはどう違うんだ?
>>842
static int hoge;
>>871
movl $-2147483648, -4(%ebp)
movl $1, -8(%ebp)
movl -8(%ebp), %edx
movl -4(%ebp), %eax
subl %edx, %eax
testl %eax, %eax
jle L15
subl $12, %esp
pushl $LC0
call _printf
addl $16, %esp
L15:
movl -4(%ebp), %eax
cmpl -8(%ebp), %eax
jle L16
subl $12, %esp
pushl $LC1
call _printf
addl $16, %esp
L16:

Win32のgcc3.2.3(mingw)で、こうです。
オーバーフローを考えなければ特に違いはなさそうですが。。
rand関数で0〜65535を発生させるにはどうしたいいのでしょうか?
rand関数を複数回呼び出すまではわかったのですが…。
>>874
rand を複数回呼び出しても0〜65535の範囲にはならんぞ。
正規乱数にでもしたいの?

普通、[0, N) 間での範囲の乱数を作りたければ
rand() / (1.0 + RND_MAX) * N
とする。
これを int にキャストすれば0〜N-1の整数乱数が得られる。
876874:04/05/28 10:40
返答ありがとうございます。
r=rand() / (1.0 + RAND_MAX) * 65535;
として10億回試行したんですが
0〜65533
しか抽選できませんでした。
long型を最後にint型にしているのですが、これがいけないのでしょうか?
877874:04/05/28 10:44
すいません、0〜N-1だから
r=rand() / (1.0 + RAND_MAX) * 65536;
ですね。これだと、0〜65534でした。
VC++ってRAND_MAXが0x7fffだねw
879マネージャ:04/05/28 11:20
すみません恐縮ですが教えてください。実務で困っています。
私はPGじゃないのでさっぱりわからなくてお手上げです。
文字列"[aaaaa.bbbbbb.cccccc.ddddddd.eee]"があるのですが
一番最後(右端)のピリオドを探し出し、それ依然の文字のみ取り出す形で
結果"[aaaaa.bbbbbb.cccccc.ddddddd]"にしたいのですが
方法がわかりません。どなたか教えていただけないでしょうか
お願いします。
strrchr?
{
  char moji[] = "aaaaa.bbbbbb.cccccc.ddddddd.eee";
  *strrchr(moji, '.') = '\0';
}
for(int i=strlen(str);i>0;i--)
 if(str[i-1]=='.'){
  str[i]=0;
  str[i-1]=str[strlen(str)];
  break;
 }
}
まちがえた。
for(int i=strlen(str);i>0;i--)
 if(str[i-1]=='.'){
  str[i-1]=str[strlen(str)+1];
  str[i]=0;
  break;
 }
}
884マネージャ:04/05/28 11:46
皆様さりがとうございます。C言語って難しいですね。
どれを使用させていただけばよろしいでしょう
885マネージャ:04/05/28 11:55
>>883を試してみたのですが
"[aaaaa.bbbbbb.cccccc.ddddddd.]"
と最後のピリオドが残ってしまいました。
"[aaaaa.bbbbbb.cccccc.ddddddd]"にするには
どこでマイナス1すればよろしいでしょうか?
886マネージャ:04/05/28 12:15
行けました
str[i]=0; を str[i-1]=0;
にしたら期待していた値が変数にはいりました。
しかし難しいですね
ループ内で何が行われてるか分からず
最後のstr[i]=0; にいきなりほしい結果が入るので
まさにキツネにつままれた感じでした。マジックですね!!

どうもありがとうございました。
{
  char moji[] = "aaaaa.bbbbbb.cccccc.ddddddd.eee";
  strrchr(moji, '.')[-1] = '\0';
}
888デフォルトの名無しさん:04/05/28 13:23
>>887
strrchrの戻り値をチェックしろよ。
889デフォルトの名無しさん:04/05/28 14:13
「与えられた文字列より、その文字列の副文字列を列挙するプログラム」がわからない
漏れも判らない
891デフォルトの名無しさん:04/05/28 14:47
>>890
まじですか?
勝手な推測だが、講義の流れがあった上でその問題じゃないのか
「副文字列」の定義がわからない
少なくともC言語の話じゃないな。
895デフォルトの名無しさん:04/05/28 15:05
副文字列
文字列をA B C としたら
A AB ABC
B BC
C 
そんなの超能力者以外にはわかりません。日本語もおかしいし。
ACが含まれていないことを考えると、単なる組み合わせでもないわけだ。
>>895 の通りなら

  char *hoge;
  size_t len, width, from;

  len = strlen(hoge);
  for (width=1; width<=len; width++)
    for (from=0; from<=(len - width); from++)
      printf("%.*s\n", width, hoge + from);

つか宿題スレ向きだな。
>895の言っていることが微塵も理解できないのですが。
>>895はACもだろ
A B C Dの場合なら
A AB AC AD ABD ABC ACD ABCD
B BC BD BCD 
C CD
D
>>899
「長さ L からなる文字列の、M 文字目から N 文字を抜き出す」じゃないの?
>>900
それ順列。
902901:04/05/28 16:47
違う組み合わせだ。俺って莫迦。
久々に宇宙語を見た。
904デフォルトの名無しさん:04/05/28 17:46
配列の要素を交換する関数なんですが、
@とAが違うのはどう理解すればいいんでしょうか?
@に*が、Aに[]がないのはどうしてですか?

void swap(int[]@,int,int);
int main()
{
int array[] = {1,2,3,4,5},i;
printf("before\n");
for(i=0;i<5;i++)
printf("array[%d] = %d\n",i,array[i]);
swap(array,2,3);
printf("after\n");
for(i=0;i<5;i++)
printf("array[%d] = %d\n",i,array[i]);
return 0;
}
void swap(int *aA,int num1,int num2)
{
int tmp;
tmp = *(a+num1);
*(a+num1) = *(a+num2);
*(a+num2) = tmp;
}



プログラマなら○+数字を使うな。
>>904
void swap(int [], int, int);
という宣言は、
void swap(int *, int, int);
と書いても同じ。
ついでに言えば、
void swap(int array[], int index1, int index2);
と書いても同意だ。

私なら*(a+num1)と書かずにa[num1]と書くが、
それはまた別の話か。

>>905
プログラマじゃなくても読み手の環境を特定できない状況で使って欲しくないね。
>>904
まずは http://www.kouno.jp/home/c_faq/c6.html を読め。それから質問しろ。
908デフォルトの名無しさん:04/05/28 18:32
今はHTMLが多少理解できるくらいなんだけど、
C言語とかのプログラミング言語って習得できる?

なんか就職試験でプログラマ適性試験ってあるくらいだから、
向き不向きってあるんですかね?

C言語なんかのに向いてる人ってどんな人ですか?
プログラム覚えるのにそんな向き不向きはないと思う。
頑張れば誰だって覚えられるさ。

ただ、それを仕事にするのは向き不向きがあると思うが。
一日中(時には徹夜で)、モニタに向かってコードをいじったり、バグを探したりすることに絶えられるかどうか。
これが一番大事な適正です。
言語自体はむずかしいものでもないしな。一つひとつは。
>>908
スレ違いに気付かないようじゃどうしようもないな。
PG 以前に、大人として。
>>912
たぶん学生だと思うが?

文脈から読めないようじゃお前もダメだな。








あ、俺もか。
914デフォルトの名無しさん:04/05/28 19:18
C言語に限らず、言語はある程度の適性必要だと思うが?

覚えてできるもんじゃない。
そもそも理解できない人も多いと思う。
まぁそれは努力に比例するんだろうが。

誰でもできるっていうなら、
俺も今からでも頑張れば野球選手になれるってことだよなw

でも、それはしない。

>>908
それはなぜだと思う?
20過ぎたら大人ですよ。
>>915
最後にあ、俺もか。って書いてあるじゃんw
917デフォルトの名無しさん:04/05/28 19:40
まあ、Cは大人になってからってことか。
918デフォルトの名無しさん:04/05/28 19:41
プログラマーを20で目指し始めるって遅いかな?
プログラマ板でやりやがれ、お前ら。
920671:04/05/28 19:52
また>>671コピペしちゃうぞ
>>918
会社入って初めてプログラミングに触れるSEもいますよ、いっぱい。
    ______
   /∴∵∴∵∴\
   /∴/∴∵\∴∵丶
  /∴<・>∴∵<・>∴∵|  
  |∵/ ●    \∴| tanasinn
  |/三 ,/   三 |∴|
  |: (___|____/ |:/
   \  \_/  /∴\  
    \____/∴∵∴|      ●  
     ━(〒)━\∴∵∴|     <  
     |       |∴∵∴|    /  
 
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   :::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::
     :::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;:::::::     ∧_∧ !?
      ::::::::::::::::::::::::::::     Σ( ::;;;;;;;;:)
        ::::::::::::        /⌒`'''''''''''^ヽ
               /⌒ヾ/ / .,;;;;;;:/.:;|
-―'――ー'''‐'ー'''―‐'―''''\,./ / .::;;;;;;:/‐'| :;|'''ー'-''――'`'
 ,, ''''  `、 `´'、、,   '''_ソ / `:;;::::ノ,,, | :;| '''  、、,
    ,,,   ''  ,,   ''''' ξ_ノ丶ー'ー< ,ゝ__> '''''  ,,,,
    ______
   /∴∵∴∵∴\
   /∴/∴∵\∴∵丶
  /∴<・>∴∵<・>∴∵|  
  |∵/ ●    \∴| tanasinn
  |/三 ,/   三 |∴|
  |: (___|____/ |:/
   \  \_/  /∴\  
    \____/∴∵∴|      ●  
     ━(〒)━\∴∵∴|     <  
     |       |∴∵∴|    /  
 
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   :::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::
     :::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;:::::::     ∧_∧ !?
      ::::::::::::::::::::::::::::     Σ( ::;;;;;;;;:)
        ::::::::::::        /⌒`'''''''''''^ヽ
               /⌒ヾ/ / .,;;;;;;:/.:;|
-―'――ー'''‐'ー'''―‐'―''''\,./ / .::;;;;;;:/‐'| :;|'''ー'-''――'`'
 ,, ''''  `、 `´'、、,   '''_ソ / `:;;::::ノ,,, | :;| '''  、、,
    ,,,   ''  ,,   ''''' ξ_ノ丶ー'ー< ,ゝ__> '''''  ,,,,
924デフォルトの名無しさん:04/05/28 20:26
>>921
SEってPGスキルない香具師だと思ってたyo (w
925デフォルトの名無しさん:04/05/28 21:22
intsでエラーが出るのですが、
{}の内容をどうすれば直るでしょうか。

#include <stdio.h>
int main(void)
{
int *ints[] = {{1,2,3}, {4,5,6}};
char *chars[] = {"hoge", "foo"};
return 0;
}
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。
>>925
{}の内容の方を変えたいのか?
int [][こっちはサイズ指定汁]={{1,2,3},{4,5,6}};
>>926
書かれなきゃわからんのか?
930925:04/05/28 21:34
>>926
VC何ですが。
warning C4047: 'initializing' : 間接参照のレベルが 'int *' と 'const int ' で異なっています。
error C2078: 初期化子の数が多すぎます。
warning C4047: 'initializing' : 間接参照のレベルが 'int *' と 'const int ' で異なっています。

>>927>>928
何か本を見ていた所charの方が載っていたので、
intでもできるかなと実験してみた所エラーになりました。
931925:04/05/28 21:35
>>926
VC何ですが。
warning C4047: 'initializing' : 間接参照のレベルが 'int *' と 'const int ' で異なっています。
error C2078: 初期化子の数が多すぎます。
warning C4047: 'initializing' : 間接参照のレベルが 'int *' と 'const int ' で異なっています。

>>927>>928
何か本を見ていた所charの方が載っていたので、
intでもできるかなと実験してみた所エラーになりました。
932デフォルトの名無しさん:04/05/28 21:38
今日はいたるところでこの現象が起こっていますな。
933デフォルトの名無しさん:04/05/28 21:39
今日はいたるところでこの現象が起こっていますな。
char *s="abc";
ってのは
char s[]={'a','b','c','\0'};

ちなみに int n[]={1,2,3,4}; とは書ける
くすっとわろた。
>>934
嘘は教えるな。
嘘を教えるのはやめようや。
安心しろオレは騙されない
嘘と教えるのはやめようや。
嘘に教えるには騙される
941デフォルトの名無しさん:04/05/28 21:55
上のは書き換えだめぽよ。
書き換えは環境によるんぢゃ?
環境によるからだめぽなんだよ!
だめぽは書き換えによる
for文で
for(i=0;i<=7;i++)を
繰り返し行いたいのです。
つまり、iは0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1,2,3,4・・・
としたいのです。
そこで以下の分を作ったのですが
気になっているのはgotoを用いたことです。
下の文と同じ意味を持つ文をgotoを使わずに組むことはできますか?
また、この場合はgotoを使ってもいいのでしょうか?

while(1)[
    for(i=0;i<=7;i++){
        何らかの処理
        if(条件式==128){
           goto nukedashi;
        }
 
すいません、途中で書き込んでしまいました。
続きの文を載せます。

           goto nukedashi;
        }
    }
}
nukedashi:

なんですが・・・どうでしょうか?
>>934
char *s="abc";
ってなんだ?w
>>945
break;すりゃ良いだろ
949デフォルトの名無しさん:04/05/28 23:44
会社の研修の課題でgoto文使うなゴルァって怒られた(´・ω・`)
参考書にも載ってるのに、なんで使っちゃだめなの?
950デフォルトの名無しさん:04/05/28 23:47
>>945
そのケースでgotoを避ける奴は例外なく低脳
いや、breakにするとfor文だけ抜けて
while(1)に吸収され、またfor文を行うことになってしまいます。
かといって、for文の}の下にbreakをつけると
8回ごとしかfor文を抜け出てこないので
for文を任意の回数実行させたい時に困ってしまいます。
スレ一覧をgotoで検索するといい
>>949
お前の書いたソース見なきゃ答えられない。
>>950さん
では、この場合は使ってもいいということですか?

>>949さん
goto文を使うとプログラムが読みにくくなるそうです。
スパゲッティ プログラム goto
でググってみると色々見つかります。
駄目だから環境によるんです。
956デフォルトの名無しさん:04/05/28 23:58
while(flag == 0){
  for(i=0;i<=7;i++){
        何らかの処理
        if(条件式==128){
           flag = 1;
         break;
        }
}
flagを使えばまあ一応書けるが。
>>945
gotoを使って読みにくくなる規模であれば、関数にして 途中でreturnすればよい。
そう大きくなくとも、後々を考えて関数化しておくと都合が良い場合もあるだろう。
>>956のような手はお勧めしない。
>>956さん>>957さん
ありがとうございました。
私個人としては、この場合のgotoは
スパゲッティにならないのでいいと思っていました。
>>956さんの方法もメモしておきます。
私のプログラムは全然大きくないので
とりあえず私の方式で行くことにします。
>>956
for(i=0;;i=(i+1)&7){
 なんらかの処理
 if(条件式==128){
  break;
 }
}

こんなんでどうよ?
関数に包んで return したくなるねぇ
いくつかの構造体を引数に取るAPIのテストをしようと思ってます。
その構造体に読み込ませるテストデータをファイルで用意しといて、
再婚パイルしなくてすむようにしたいです。そういう場合、
例えば
struct T1 {
char str[10];
int a;
int b;
};
のような構造体に読み込ませるデータは
"Hello, world"
1
2
とか書いておいて順番にロードしていくような
イメージでいるんですが、何かもうちょっとうまい
方法ってありますかね?皆さんはこういう場合
どういう風にテストデータを読み込ませてますか?
文字列に空白が無いなら

文字列 1 2
:
ってデータに汁かな
先頭に保存数とかいれておいて読むときはループで回す。当然バイナリな。
#include <stdio.h>

void StrnCpy(char *szDest, char *szSrc) {
szDest = (char*)malloc(strlen(szSrc)*sizeof(char));
strcpy(szDest, szSrc);
printf("StrnCpy内: %s\n", szDest);
}

int main(void) {
char *szPtr, *szSrc = "hoge";
StrnCpy(szPtr,szSrc);
printf("StrnCpy外: %s", szPtr);
return 0;
}

というようなコードを書いたんですが、出力はこうなります。
> StrnCpy内: hoge
> StrnCpy外: (null)
StrnCpy関数内部で割り当てたメモリは関数外部には持ち出せないようなのですが、これを回避するにはどうすれば
良いのでしょうか?ポインタを返すにはstaticとすると思いますが、この場合staticなローカル変数を宣言、初期化して
アドレスを第一引数(szDest)にコピーしても結果は変わりませんでした。どうか解決法をお願いします。
ぽいんたのぽいんた
966964:04/05/29 02:32
少し訂正です。strlenは終端\0抜きの文字数を返すはずなので
szDest = (char*)malloc(strlen(szSrc)*sizeof(char)+1);
とする必要がありそうですね。あと、この場合はUnicode利用時に発生する
文字数←→バイト数問題は放置の方向でお願いします。
>964 だからポインタのポインタ使えって
968964:04/05/29 02:36
>>965さん
ポインタのポインタを使って手抜き実装してみたところ見事にぬるぽで落ちたのでいろいろ調べてがんばってみます。
ありがとうございます。
void StrnCpy(char **szDest, char *szSrc) {
*szDest = (char*)malloc(strlen(szSrc)*sizeof(char));
strcpy(*szDest, szSrc);
printf("StrnCpy内: %s\n", *szDest);
}

char *szPtr, *szSrc = "hoge";
StrnCpy(&szPtr,szSrc);
970964:04/05/29 03:00
うまく行きました。
http://black.sakura.ne.jp/~third/programming/c/c25.html
このあたりの解説を読んでコードを書いているうちに>>969さんの書き込みに気付いてちょっとカンニングしてしまいましたが。
Cに対する理解が深まった気がします。本当にありがとうございました。
#include <stdio.h>

- void StrnCpy(char *szDest, char *szSrc)
+ char *StrnCpy(char *szDest, char *szSrc)
{
szDest = (char*)malloc(strlen(szSrc)*sizeof(char));
strcpy(szDest, szSrc);
printf("StrnCpy内: %s\n", szDest);
+ return szDest;
}

int main(void)
{
char *szPtr, *szSrc = "hoge";
- StrnCpy(szPtr,szSrc);
+ szPtr=StrnCpy(szPtr,szSrc);
printf("StrnCpy外: %s", szPtr);
return 0;
}

972デフォルトの名無しさん:04/05/29 05:03
以下のようなプログラムで、mapDataをポインタで返し
mainのmapを変更するとmapDataが変更されるようにしたいのですができません。
1次元配列ならできたのですが、2次元でのやり方を教えてください。

int *[5]GetMap(void)
{
static mapData[5][5];
return map;
}
int main(void)
{
int *map[5] = GetMap();
return 0;
}
>>972
なんか凄いソースだな。

それはさておき、無理に高次元配列に拘らなくてもええやん。
1次元配列を使ってあとは自前でシミュレートすれば。
typedef int (*m)[5];
m GetMap(void);

int (*map)[5]=GetMap();
975デフォルトの名無しさん:04/05/29 08:51
>>972

int (*GetMap(void))[5]
{
    static int mapData[5][5];
    
    return mapData;
}
int main(void)
{
    int (*map)[5] = GetMap();
    
    return map[0][0];
}
976デフォルトの名無しさん:04/05/29 09:05
>>945

int main(void)
{
    int i, j;
    
    for (j = 0; ; j++) {
        i = j & 7;
        何らかの処理;
        if(条件式 == 128){
            break;
        }
    }
}

128ならループの外で判断できそうだが。
977デフォルトの名無しさん:04/05/29 09:39
空白あけろ
978デフォルトの名無しさん:04/05/29 10:01
for (i = 0; なんらかの処理, 条件式 != 128; i = (i + 1) & 7) {
  ;
979ボブ:04/05/29 10:04
DSPの実験でスルー動作のプログラミングを作成したのですが
スルー動作とは解りやすくいうと何ですか?詳しく教えて下さい。
お願いします。
980デフォルトの名無しさん:04/05/29 10:09
さて次の話題
981972:04/05/29 10:50
ありがとうございます。

>>973
今まではそのやり方でやっていました。
1次元にして[y*MAP_SIZE_X+x]みたいな感じにして。

>>974>>975
どちらもできました。
まだ、この文法が分からないので、参考にさせてもらい勉強します。
982945:04/05/29 11:02
>>959さん>>976さん
ありがとうございます。
実行速度はn%8よりn&7のほうが速いのですね。
勉強になりました。
四則演算と同じ計算をビット演算で行える時は
ビット演算を使いたいと思います。
あと、なるべくgotoは使わずに
>>959さん>>976さんの方法を使ってみたいと思います。
それでは、しつれいします。
まあgotoも使い方によっちゃ悪くない。同じ(パラメータのみ多少異なる)エラー処理をいくつも
書くのも、それだけのために他関数に飛ばしてソースを追いにくくするのも馬鹿らしい場合なんかには
積極的に使ってもいいんじゃないかと@Microsoft
Cでgotoを使わない理由を考察するスレ goto loop3;
http://pc5.2ch.net/test/read.cgi/prog/1072018444/
985デフォルトの名無しさん:04/05/29 13:01
ttp://www.sikaku.gr.jp/nj/index4.html
C言語プログラミング能力認定試験(3級)を受けようと
思っていますが、どのくらいの難しさでしょうか?
自分は「独習C」で勉強した程度です、アドバイスお願いします。
987デフォルトの名無しさん:04/05/29 13:24
>>986
俺が知っているものと同じなら、Cの歴史も勉強しておけ。
988986:04/05/29 13:28
>>986
アドバイスありがとうございます。
Cの歴史についての勉強も頑張ってみます。
989デフォルトの名無しさん:04/05/29 13:50
新スレ立ててくるぞおめーら。
>989乙。

C言語なら俺に聞け! Part 81
http://pc5.2ch.net/test/read.cgi/tech/1085806791/
質問です。
for(m_hoge=1;m_hoge<m_hoge2;m_hoge++)
のようにメンバ変数をforに入れるより
int hoge2=m_hoge2;
for(int i=1;i<hoge2;i++)
とした方が高速化するといわれ、実際にやってみたら高速化したんですが
これはどのような理由ででしょうか?
新たに変数を作ってコピー回数が増えて逆に遅くなるんじゃないか?と思ったのですが・・・

初歩的な質問ですみません。
992デフォルトの名無しさん:04/05/29 15:18
>>991
そのm_hogeというのは実際はa.m_hogeみたいな形か?
それなら比較するたびに構造体の中からメンバーを取り出す手間が省けるから速くなったんじゃないの?
>>991
http://www.emit.jp/prog/prog_opt0.html
ここに同じような最適化の例がある。
994デフォルトの名無しさん:04/05/29 15:25
レジスタにおかれるかどうかってことか?
アセンブルリストを見ろ。
---終了---
996デフォルトの名無しさん:04/05/29 15:33
>>995
氏ね
997デフォルトの名無しさん:04/05/29 16:05
>>991
コンパイラが賢ければどちらも同じになる。
メンバ変数ということはC++でスレ違いだが、コンパイラがforの内側の処理でそれが
変更される可能性があると思ってしまうと、毎回メモリアクセスになってしまう。
998デフォルトの名無しさん:04/05/29 16:11
999get
999デフォルトの名無しさん:04/05/29 16:12
999gets
1000デフォルトの名無しさん:04/05/29 16:12
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。