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

このエントリーをはてなブックマークに追加
1v(^o^i)d
まず問題を冷静に吟味して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/

各種リンク、関連スレ、推奨NGワードは>>3-20あたり(誰か適当に貼って)

C言語なら俺に聞け! Part 84
http://pc5.2ch.net/test/read.cgi/tech/1088610149/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
2デフォルトの名無しさん:04/07/07 03:02
---------------糸冬----------------
3デフォルトの名無しさん:04/07/07 03:13
【コンパイラ】
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
前スレは中国の核くらいにきれいに終わったな。

6デフォルトの名無しさん:04/07/07 03:30
v(^o^i)d
推奨NGワード ↓
scanf
9デフォルトの名無しさん:04/07/07 09:33
long型(32bit)よりも大きな整数を扱いたいときは
どうしたらよいのでしょうか?
10デフォルトの名無しさん:04/07/07 09:39
unsigned long long int a;
とか宣言すれば、aは少なくとも64bit以上です。
11デフォルトの名無しさん:04/07/07 10:40
ファイルローカル(static)な配列の宣言だけ先にして、後から定義ってできないんですか?
extern だとできるようなんですけど。
12デフォルトの名無しさん:04/07/07 10:45
> ファイルローカル(static)な配列の宣言だけ先にして、後から定義ってできないんですか

できるにきまってるだろ ぼけ。
できなかったら こまるだろ ぼけ
で、なんで「できない」なんてまぬけに思い込んでしまったのだ?
理由を言え理由を! ぼけ
13デフォルトの名無しさん:04/07/07 10:46
で、32bitで足りない計算って、どんなことをやってるのか興味がある。
>>9
プロセッサを変える。
>>11
試してみれば?

extern int e;
static int s;

void foo(void){printf("%d, %d\n",e,s);}

extern int e = 123;
static int s = 456;

main(){foo(); return 0;}
16推奨NGワード:04/07/07 11:22
随時意見募集。

第一群
「頭悪すぎ」「空白あけろ」「空白あけるな」「ぼけ」「ボケ」「池沼」
「バカ」「馬鹿」「ばか」「アホ」「あほ」

第二群
「函数」「scanf」「;-)」 「;)」
>>13
資産管理
C言語に名前空間なんてあるか?概念としてではなく用語として。
http://ja.wikipedia.org/wiki/%E5%90%8D%E5%89%8D%E7%A9%BA%E9%96%93
>>10
嘘つきめ。
>>16
追加案。

第一群
「アフォ」「すぎー」

第三群
「初歩的な質問」「初心者です」
21デフォルトの名無しさん:04/07/07 12:08
> >>10
> 嘘つきめ。

どこがウソなんだか。
22デフォルトの名無しさん:04/07/07 12:11
> C言語に名前空間なんてあるか? 概念としてではなく用語として。

基礎の基礎だろ!
そんなこともしらんのか。
23デフォルトの名無しさん:04/07/07 12:16
> 関数原型における仮引数名

この原型ってのが「プロトタイプ」のことだと気がつくまで1分20秒かかった...。

関数定義かなにかのことかと最初の45秒ぐらいは思ってた。
>>9
DWORD 32
WDWORD 64
QDWORD 128
>>21
long long が世のコンパイラに普く実装されているとでも思っているなら
おめでてーな。
26デフォルトの名無しさん:04/07/07 13:23
先生に、CRTライブラリを使え、と言われたのですが、
家で使ってるパソコンは液晶テレビなので使えません。
どうやったら使えるようになりますか?
ていうか、何で貧乏人に合わせないといけないのですか?
パソコンがテレビなのかよ!
28デフォルトの名無しさん:04/07/07 13:29
ポインタのポインタとはどういった場面で効果を発揮しますか?
29デフォルトの名無しさん:04/07/07 13:31
>>26
対人恐怖症を克服しましょう。
char *get_ptr()

void get_ptr(char **p)
に書き換えるとか。
モニタをテレビというヤツ
ハードディスクをハードというヤツ
32デフォルトの名無しさん:04/07/07 13:32
>>18
削っておいた。

まあ、プログラムを一箇所プログラムーに変えただけであっという間に元に戻されるくらいだから、すぐに元に戻るだろうけど。
>>26
4行目は無いほうが面白いな。
>>31
ハードディスクをシーというオッサンも知ってる。
>>32
項目の番号が、1. 2. 3. 5. になってたから、直しておいたよ。
ハードディスクは一応ハードだろ
僕のハードディスクはソフトウェアです。
>>28
const char *m[]={"ばか","あほ","まぬけ",NULL};
char **p;
for(p=m;*p;p++) {
puts(*p);
}
39デフォルトの名無しさん:04/07/07 13:41
>>28
argv
40デフォルトの名無しさん:04/07/07 13:52
ポインタのポインタの使いかたはなんとなく理解できましたが
実際のところ38でうたれたプログラムもそうですが私の中では
あまり意識して使うほど処理が早くなってくるとは思えないのですが
どうでしょうか?
41デフォルトの名無しさん:04/07/07 13:53
suy.50のスクリプトを使ってWWR"02"を利用するのは可能なことですか?
それとも素直にoslでやるのが確実ですか?
君は処理を速くするためにポインタを使うのかね
>>40
速さ以前に文字列配列を実装するのには
ポインタのポインタ(配列でもいいけど)以外やりようがないんだけど。
>>40
38のプログラムのすばらしさが
わかるまでグランド走ってこい。
45デフォルトの名無しさん:04/07/07 14:12
>>42
データを参照したりするときなどにポインタを使えば
アドレスをインクリメントしたりしてデータを参照or変更できるので便利?
ポインタを使う利点はこんな感じだと考えていますがポインタのポインタ
を使ったことへの利点は・・・。
文字列配列を実装するのにポインタのポインタというのは38でうたれている
プログラムでわかりますがポインタのポインタを使って他に何か役立たせる
プログラムはありますでしょうか?
46デフォルトの名無しさん:04/07/07 14:18
suy.50のスクリプトを使ってWWR"02"を利用するのは可能なことですか?
それとも素直にoslでやるのが確実ですか?


>>45
int N=10
int M=50
int** array;
array=malloc(sizeof(int)*N);
for(int i=0;i<N;i++){
 array[i]=malloc(sizeof(int)*M);
}
こんな感じで動的に多次元配列を作るのに使ったり
>>18
Cにも当然名前空間の概念はあるし、用語としても用いられる。

使用例
>同じ識別子が異なる実体を指し示すのは、それらが異なる有効範囲を持つときか、
>又は異なる名前空間に属する時かのいずれかとする。
>(JIS X3010 「6.2.1 識別子の有効範囲」より引用)

>>32
2ちゃんねる感覚で他サイトを書き換えるな。大勢の人が迷惑する、すぐ直しとけ。
>>45
ポインタが有用だと思ってるなら、ポインタのポインタだって同じ有用さだよ。
指してる先がポインタだってだけで、普通のポインタと働きは同じだし。
50デフォルトの名無しさん:04/07/07 14:26
>>48
2ちゃんねる感覚で書き換えたわけじゃないんだけど。
直すことなんて誰でもできるんだから、自分でやれば?
51ニチェ:04/07/07 14:42
suy.50のスクリプトを使ってWWR"02"を利用するのは可能なことですか?
それとも素直にoslでやるのが確実ですか?


52サンチェ:04/07/07 14:43
suy.50のスクリプトを使ってWWR"02"を利用するのは可能なことですか?
それとも素直にoslでやるのが確実ですか?

53ニチェ:04/07/07 15:00
osieroya
>>48
それ用語としてって言うより無説明なまま普通の日本語として使われてるような。
Cの機能?として名前空間って定義されてる?
PDF落としてみたけど全文検索効かなくて調べられない・・・
http://www.jisc.go.jp/app/pager?id=54142
55ニチェ:04/07/07 15:10
kiitorunkaomaera
hayakuosiEROya
>>54
>それ用語としてって言うより無説明なまま普通の日本語として使われてるような。
その通りだと思う。
>Cの機能?として名前空間って定義されてる?
漏れの知る限りでは、されて無い。

Cの仕様書の中に(Cに限らないが)一般名詞として使われる用語だから
事典に載せる意味があるんじゃない。
C++のように機能としてのnamespaceと概念としてのnamespaceが別に
ある言語があるから話がややこしくなる。
5756 補足:04/07/07 15:44
名前空間が定義されてないって言うのは、
用語の意味が定義されてないって言うこと。
どの種類の識別子が異なる名前空間に属するかは、
規格で定義されている。
ANSI C言語辞典という本にはそれっぽい説明があるのだけど、
ANSIやJISでは定義されてないのかな? > 名前空間
そもそもname spaceってどっから来た用語なんだろう
>>59
ビックバンのとき
おしえてください。
#include <stdio.h>
void input(char *buf)
{
printf("名前を入れてください\n");
scanf("%s",buf);
}

void output(char *buf)
{
printf("私の名前は %s です。\n",buf);
}

int main()
{
char buf[8+1];

input(buf);
output(buf);
return 0;
}
ソースがあるんだけど、char *bufをなぜ使っているかがわかりません。
ポインタを使っているてことはわかるんだけど・・・なんかポインタ・・
だめぽ
62デフォルトの名無しさん:04/07/07 16:06
>>61
その場合は、
char buf[]
でも構わないけど。
またscanfか!!
しかもバッファオーバーフロー
最悪だ
お前ら釣られ杉ですよ
input(buf);
てのは
input(&buf[0]);
っていうのを省略したようなもの。

だから関数
void output(char *buf)
{
}
では、ポインタを受け取とる。
>>61
とりあえず
char name[8+1];
の変数は
void input(char *buf);
のbufに渡せるってことで納得して先進んどけ。
inputに名前の配列のアドレスを渡して書き込んでもらってると。
printf("名前を入れてください\n");
printf("名前が英数8文字以上の人は帰ってください。\n");
scanf("%s",buf);
6961:04/07/07 16:24
ありあとやした〜〜助かります。
英数8文字じゃなく、2バイト文字で表現しろつう、問題でしたので・・・

変なかきかたしてごめんなさい・・・。
初歩的な質問ですが・・・

dllを作成中なんですけど、文字列の出力方法がよく分かりません。
printf("あああ\n");
このprintfの中の内容を出力するにはどうすればいいのでしょうか?

構造体を使って作成しているんですけど、
構造体へprintfの出力内容の結果を返してくれる方法教えてください。

分かる方、よろしくお願いします。
>>61
これで万事OKさ

#include <stdio.h>
#include <stdlib.h>
char buf[8+1];

void input(void)
{
printf("名前を入れてください\n");
scanf("%s",buf);
return;
}

void output(void)
{
printf("私の名前は %s です。\n",buf);
exit(0);
}

void main()
{
input();
output();
return;
}
>>70
何をしたいのか良く分からん
>>72
printfの出力内容を格納したいんです。
>>70
sprintf() か?
>>73
freopenでもやっとれ
>>70
stdinを無理やりトラップすりゃいいのかも。
でもまっとうなやり方とは思えないな。
dllをビルドするときに
#define printf my_printf
とかやって自作の関数に飛んでくるようにすればいいんじゃないの。
標準のCにDLLは考慮されていたっけ?
DLLとは関係ないだろ。
>>77
あの質問内容だとDLLは関係無いだろ。DLLで使ってるってだけで。
printfは標準の範囲だと思うが?
>>77
されていないと思う
81デフォルトの名無しさん:04/07/07 17:12
sprintf使えば言いだけの悪寒。
しかしsprintfは文字配列へ出力する関数であって構造体へは出力できない
Microsoft 固有の仕様 →
>>74
>>75
>>76
出来ました。ご指導ありがとうございました。
ど れ を 使 っ た ん だ !
← Microsoft 固有の仕様
main()関数をmain.cというソースファイルに書き、
とある数をx乗してmain()関数に返すプログラムをsubmain.cに書くとします。
main.cとsubmain.cという二つのソースファイルをgccでコンパイルするとき
gcc -c main.c
gcc -c submain.c
gcc main.o submain.o -o result.exe
とすれば./result.exeで実行できるはずですが、-lmをコンパイル時につけていないためエラーが出ます。
submain.cではpow()を使うためmath.hをインクルードしています。
この場合、コンパイル時のどこで-lmをつければよろしいでしょうか?
最後のリンク時だろ
Cにはstring型がないですね?
>>88
ありがとうございました。
typedef char string[256];
>>89 必要ならどうぞ自分で作ってください。
3通り試せば判ることを何故聞くのだろう・・・
>>89
C++ならstd::stringがあるけどCにはない。
文字列はヌル終端のchar/wchar_tの配列やポインタで使う。
typedef struct { char s[16]; } string4;
typedef struct { char s[256]; } string8;
typedef struct { char s[1024]; } string10;
どうあがいても文字列に加算・比較・代入なんかの演算子を適用できるようにはならない。
>>95は代入は出来ますが?
98デフォルトの名無しさん:04/07/07 18:30
>>96
何か問題でも?
>>89
ない。char配列をそのまま使うしかない。
なんちゃって文字列型を作っても空しいだけ。やめとけ。
しかしC++で、string型のぬるま湯にどっぷり
浸かってて、Cに戻ると、かなり難儀するんだろうな・・・
C++で書いて遅い時とか、部分的にCで書き直すことはあるな。
速度に影響しない部分ならstring型とか
102デフォルトの名無しさん:04/07/07 20:00
>>40
よしよし、それでいい
どっかのぼけみたいに誰かが言うから盲信とかすんなよ
A社のコンパイラで得た知見がB社のコンパイラで通用するかどうか確認もせずに思
いこむな

まず速くなったか、小さくなったか、ちゃんと実測しろ
次になぜ速(遅)くなったか、なぜ小さく(大きく)なったか、しっかり比較考察し

そのためにはアセンブラ(つーかCPUのマニュアル)も読めにゃならん
たとえ1nsでも1byteでも価値の有無は要求が定義されるまで結論するな
それまで速度が要求に満たないときの選択肢と分析力を蓄積しろ

この業界(特にこーゆーとこ)はそこいら中、
反面教師だらけだが(勝機がまだあるってこったな)
少なくとも自分は科学者であれ
103デフォルトの名無しさん:04/07/07 20:02
科学者だったらコンパイラ作るよな普通。
それにしては科学者の数とコンパイラの数がずいぶんと違うようだがw
科学者の全員がコンパイラを公開してるとは思えんがw
公開してないのに、コンパイラ作ってるって良く分かるよなw
107:04/07/07 21:16
CとC++で同じプログラムで違う結果が出る
プログラムを教えてください。
printf("%d\n",sizeof('A'));
109デフォルトの名無しさん:04/07/07 21:48
perrorとstderrの使いかたがよくわからないのですが理解するのになにかいい
例やホームページはないでしょうか?
使用例としては
fprintf(stderr,"ERRMESSAGE\n");や
perror("socket");があるのですが、、、
int a;
void *p = &a;
int *p2 = p; // err@c++
>>107
ただの拡張子をc/cppそれぞれ試してみろ。
但しC99対応だと可変長配列の扱いでできるはず。でも構造体のメンバにはできないなどの制限つき。
const int N = 256;
char Buf[N];
すいませんおしえてください。NECのC言語教育プログラムなんですが、

int a=10;
void test(int a);



void test(int a);
int a=10;

では、testの中でaをprintfすると結果が異なりますよね。
これがあるので「変数は先に書きなさい」ということなのでしょうか?
回答例が見れないので先に進めません。
>>112
本当にそんな設問なわけ?
>>107
#include <windows.h>
const int WINAPI WinMain(
 const HINSTANCE hInst, const HINSTANCE hPrevInst,
 const LPCSTR lpszCmdLine, const int nCmdShow)
{
 return 0;
}
int main()
{
 printf("%p", main);
}
__cplusplus使ったら一発か
117デフォルトの名無しさん:04/07/07 22:46
>>112
void test(int a)
{
printf("%d", ::a); /* これじゃ、エラーだよな・・・ C++ だし・・・ */
}
int a = 10;
void sine(int a)
{
printf("%d", a); /* これ、絶対グローバルには逝かないし */
}
mein()
{
extern int a;
test(a); /* 定義位置かんけーねーし */
}
void dqn()
{
int a;
test(a); /* ぜってーグローバルちゃうし */
}
118112:04/07/07 22:58
>>113 >>117
すいません勘違いしてました。
1ページで問題終わりかと思ったら2ページにまたがってました。
回答例もありました。先にすすみます。
119デフォルトの名無しさん:04/07/07 23:06
>>119
やってみりゃいいだろ。
>>119
このスレの109にも書いただろ
マルチ氏ね
122デフォルトの名無しさん:04/07/07 23:55
iアプリのNS−TOWERをC言語で作りたいのですが、プログラムどうすればいいですか?
>>122
エディタで入力してコンパイルすればいいのです。
これ以上はご自分でお調べ下さい。
12411:04/07/08 00:07
>>12
static int s[];
// ここらへんで s を使う
static int s[] = {123,456,0};

こんなソースが書きたかったのですが、
gcc> :1: error: array size missing in `s'
msvc> (1) : error C2133: 's' : unknown size
とエラーになってしまいます。
gcc は -pedantic つけなければ通ったので、拡張されてるっぽいです。

>>15
そのソースを試させてもらった所、ちゃんと宣言と定義が別々にできているようでした。
でもやっぱり(サイズ指定無しの)配列にしようとするとエラーになってしまいます。
>>122
あなたが作っても、
それは NS-TOWER ではありませんよ?
>>124
その場合配列の宣言は、サイズ指定が必要。

static int s[3];
// ここらへんで s を使う
static int s[] = {123,456,0};

なら通るはず。
127デフォルトの名無しさん:04/07/08 01:34
> long long が世のコンパイラに普く実装されているとでも思っているなら

っていうかふつう使えるだろ。
おまえのは使えない? そりゃにせもののCコンパイラーだな
普くにふつうで反論か
アホばっか
129デフォルトの名無しさん:04/07/08 01:37
> そもそもname spaceってどっから来た用語なんだろう

むかーしからある
130デフォルトの名無しさん:04/07/08 01:46
やーいにせもの > 128
煮物は火をとめたとき、ぐぐっと旨みが染み込むもんじゃよ。
>>127
lsic-80 は long long 使えないぞ。
でも、にせものじゃないぞ。
133デフォルトの名無しさん:04/07/08 09:29
あきらかなにせものです > lsi-c
134デフォルトの名無しさん:04/07/08 09:30
失礼なヤツだな
135デフォルトの名無しさん:04/07/08 09:34
っていうか常識 > lsi-cはにせもの
>>129
で、どっからきたの?
137超初心者:04/07/08 10:18
すみません。以下のプログラムをコンパイルして実行すると
text.txtの内容を出力した後に変なオバケが出力されるんです・・・
どうしてなんでしょうか・・・・

int main(){

FILE *fp;
int c;
int d;
char str[256];

fp = fopen(text.txt,"r");

if(fp == NULL){
printf("だめでした");
exit(-1);
}
while(!feof(fp)){
c = fgetc(fp);
str[d] = c;
d++;
}
fclose(fp);
str[d] = '\0';
printf(str);
}
dを初期化
printf("%s", str)
>>137
fp = fopen(text.txt,"r");ってなんだよおい。
とりあえずfp = fopen("text.txt","r");と読み替えておくぞ。

>>138を補足すると、text.txtの中に出力指定子があると
printfはそれを解釈してしまうってことだ。
今回はただの習作みたいだからprintf("%s", str)でもいいけど、
パフォーマンスが必要な場面ではputsのほうがいい。

それと本質的ではないが、text.txtのサイズが255バイトを超えると
確保していないメモリを破壊してしまうので危険だ。
switch文で例えば、

switch(a){
case 1 :-------
case 2 :-------

case n :-------
}
のような物を作ったとき、nの限界ってありますか?
141デフォルトの名無しさん:04/07/08 10:33
>>139
putsじゃ改行してしまうからfputs
142デフォルトの名無しさん:04/07/08 10:34
>>140
INT_MAXまで
143超初心者:04/07/08 10:36
>>138
即答アリです・・
書き間違えてました・・・

d=0;
printf("%s",str);

でコンパイルできたんですけど、実行すると
text.txtの内容出力語、改行が入って1文字変なオバケ文字が出るんです・・・
144デフォルトの名無しさん:04/07/08 10:38
どうしてみんなfeofを使いたがるんだろうね。

>>143
while((c=fgetc(fp)!=EOF){
str[d] = c;
d++;
}
145超初心者:04/07/08 10:42
>>144

お化け出ませんでした!!!

なんでなんですか??
146デフォルトの名無しさん:04/07/08 10:50
>>145
http://nssearch.hp.infoseek.co.jp/clang/1088151291.htmlの627以降
fscanfについてだが、fgetcも同じ。
>>140
Cの仕様では256通りまでは保証されている。
>>138
ププフ
解らないなら黙ってろよププ
>>137,>>145
おまいは fgetc を一回余分に呼び出してるんだよボ○ケ

printf("%c", EOF);
ってやってみな、同じオバケ文字出るから。
↑書込みは一回にまとめてほすぃ。
リソースを無駄に消費する人はCに向かないのでは;-;
151デフォルトの名無しさん:04/07/08 11:12
150は何を勘違いしているんだろう。
152超初心者(ボ○ケ):04/07/08 12:12
ヤバイです。まだわかりません・・・・

144さんのfgetcを使った方法がOKなのは理解できるのですが

feof()の戻り値はEOFであれば0以外の値、そうでなければ0ですよね・・
!feof()なんでEOFがあったら0以外の値じゃない値がwhileで判断され
ループを抜けるはずなのに・・・
なのに抜けないで一回EOFを代入してからループを抜けるんですよね;

・・・・・・なんでだろう・・・
153デフォルトの名無しさん:04/07/08 12:17
>>152
>>146>>149は無視かよ。
>>152
この場合、feof()が真を返すのは、
fgetc()がEOFを返した後だ。
初心者を自称する奴って理解できないレスを無視して
質問を繰り返す傾向にあるな。
ちょうしにのるなよ
156 = 152
158超初心者(ボ○ケ):04/07/08 12:52
>>153
いえ・・何回も読んだんですけどね・・・

>>154

そうか!!!!なるほど!!わかりました!!!
ポインターをインクリメントするのはfgetc()ですよね;;
ありがとうございます(TT

>>155
いえ、読んだんですよ〜

>>156

スミマセン・・

>>157

ちがうよお〜〜
>>158
>ポインターをインクリメントするのはfgetc()ですよね

しない。














# ファイルポジションの更新はされるだろうが…
160超初心者(ボ○ケ):04/07/08 13:18
>>159

たぶんそれのことです・・
161超初心者(ボ○ケ):04/07/08 13:24
あ〜やっとわかった気がします・・・

fgetc()がEOFを吐き出して代入しちゃった後に
while判定でループを抜けるってことですね。

勘違いしてました。ファイルの最後にはEOFが必ずあるもんだと思ってたんですよ。
なんかの関数がEOFを吐き出さないとEOFはないんですよね・・・





大変お騒がせしました。
みんな・・・ありがと〜〜〜〜♪
>>161
・・・・・・認識がぁぁぁ・・・・・・
163超初心者(ボ○ケ):04/07/08 13:28
>>162

あれ・・まだ間違ってます??;
164デフォルトの名無しさん:04/07/08 13:32
>>162
まあいいじゃないの。
これで中級者の仲間入りだな。
a[10]という配列があり、a[0]からa[9]にrand()を使って乱数をいれていきます。
もちろんsrand()を使って配列の識別子が違えば異なる値が入るようにします。
ここでsrand()を使ってもたまたまa[0]とa[7]の値が同じになってしまうことってあるのでしょうか?
それともそのプログラム中はsrand()を使えば、一度使った乱数は二度と使わないようになっているのでしょうか?
同じになってしまう可能性があるのならrand()を使うたびに以前に代入した配列の値をチェックして同じ値にならないようにしないといけないのでしょうか?
アドバイスお願いいたします。
重複する可能性は常にある。
それが嫌ならs[0]..s[9]に0..9をセットしてから
ランダムにシャッフルしとけ。
168デフォルトの名無しさん:04/07/08 16:59
初歩的な質問なのですがご教授願います。
int型の値をchar配列に格納したいのです。
アドバイスお願いいたします。
>>168
入れてみれば
>>168
入れてみれば
union{
 int n;
 char c[2];
};
>>168
入れてみれば
char c[4];
int i;
i=1234;
*(int*)c=i;
圧縮すればいいんじゃない
>>167
a[?] にはいる値が 0..9 とはどこにも書いていないぞ
>>168
-128から127の範囲なら、そのまま代入していい
>>174
配列にいれるっていってるんじゃねの?
char c[sizeof(int)];
int i;
*(int *)c = i;
おまえら非道いなw


char b[10];
int n = 12345;
sprintf(b, "%d", n);
>>174
そのまま代入したらコンパイラに怒られるよ
178デフォルトの名無しさん:04/07/08 17:30
>>177
*か[0]をつけろ
179デフォルトの名無しさん:04/07/08 17:44
randとsrand関数についてなんですが、
srand関数にこちらが指定した値を使用して初期化して
rand関数で乱数を得るプログラムをVSでexeを作成した場合、
OS、PCその他問わず全部同じ乱数が出てくるものなのでしょうか?
よろしくお願いします。
>>179
乱数の生成ルーチンが同じならね。
>>179
保証はないけど実質同じ。
DLLの実装変われば怪しいけどまずないだろうね。
でも変わらないことに依存したコードは書くべきじゃないと思うよ。
どうしてもというなら自前の生成ルーチンを作ってstaticリンクするとか。
#include <stdio.h>

int main(void)
{
int i;

while(1){
printf("0か1を入力して下さい: ");
scanf("%d",&i);
if(i==0 || i==1) break;
else printf("入力が違います。\n");
}
return 0;
}

0か1の入力を求めるプログラムです。0か1を入力してもらうまで
無限ループするようにしています。エラーは数字を入力する分には、入力のやり直しができるのですが、
英字を入力すると入力を受け付けなくなって、print分が延々と出力されてしまうところです。
簡単に直せそうなのですが、私の頭では難しいです。こんなことで3日間悩んでます。
できたらどなたか正しく書き直して欲しいのです。
>>181
実質同じ?
DLL?
お前はいったい今まで何を学んできたんだ!?

>>179
どこでも同じ値が欲しければ自分でsrand/rand相当の関数を作ったり、MTなんかをつかったりすれば。
scanf("%s",a);
で何も入力せずエンターを押すと終了するようにしたいのですがどうしたらいいでしょうか?
>>182
応急処置でいいなら
rewind() を使うといい。
ちゃんとやるなら
scanf は使うべきではない。
ほらよ

#define RAND_MAX 0x7fffffff //same stdlib.h
static u32 rnd_next;
static int do_rand(u32 *ctx)
{
 return ((*ctx = *ctx * 1103515245 + 12345) % ((u32)RAND_MAX + 1));
}
int rand()
{
 return do_rand(&rnd_next);
}
void srand(u32 seed)
{
 rnd_next = seed;
}
>>182
scanf(1回目):英字が入力されると%dなんで無視。バッファに入力された英字が残る。

whileでループ
↑↓
│scanf(2回目以降):先にバッファから読もうとする。しかし英字なら%dなんで無視。バッファに入力された英字が残る。
└┘
こうして無限ループの出来上がり。直すとこうかな。
int main(void)
{
  int i;
  char s[256], *endstr;
  while(1){
    printf("0か1を入力して下さい: ");
    fgets(s, sizeof(s), stdin); //もしくはscanf("%256s", s)
    i = (int)strtol(s, &endstr, 10);
    if((i == 0 || i == 1) && *endstr == '\0')
      break;
    else
      printf("入力が違います。\n");
  }
  return 0;
}
>>185
if (*a == '\0')
 return;
誰か作ってくれ
const char *getline(); /* 標準入力から一行読み取る。長さ無制限 */
void freeline(const char *p); /* getlineで取得したバッファを開放する */
warata
192182:04/07/08 18:21
>>186 188

どうもありがとうございます!
こんなに早くレス頂けるなんてホント嬉しいです。
みんないい人ですね。

それでは、ありがたく使わせていただきますm(_ _)m
>>167,>>173
レスありがとうございます。
確かに配列に入る値は固定ではなくランダムにしたいのです。
srand()では重複してしまう可能性があるとのことなのですが、
以前に代入した配列を全てチェックしていかなければならないのでしょうか?
もしそうなら配列が1000個とかあるとチェックするのがきついのですが...
>>193
藻妹は根本的に解ってないだろ。
srand が何なのか小一時間調べろ。
>>194
srand()に与える引数が毎回変わればいいってことですよね?
ってことはsrand()の引数にシステム時刻を指定すれば重複することは限りなく少なくなるってことですよね。
でも重複しない可能性は0ではない。100%重複させないようにするには以前の配列をチェックするしかない。
合格でしょうか?
( ゚д゚)ポカーン
>>190
const char *getline()
{
 line *line;
 char buf[256];
 char *tmp;
 int len;
 
 line = malloc(1);
 *line = 0;
 len = 0;
 while(fgets(buf, sizeof buf, stdin))
 {
  len += strlen(buf);
  tmp = realloc(line, len);
  if(tmp)
  {
   line = tmp;
   strcat(line, buf);
  }
  else
  {
   free(line);
   return 0; // メモリが足らない時はNULLを返す
  }
 }
 return line;
}
インデントが全角になってるから、半角に置換しないとコンパイルできない
スマソ >>197 はぜんぜんだめだな。
どうせならfgetline()キボンヌ
構造体配列 rank[i] で定義した文字列 rank[i].name を、
普通に定義した文字列 char name[MAX_LINE] に代入したいのですが(MAX_LINEは20です。)

name = rank[i].name ;

とするとコンパイルエラーがでます。
解決するにはどうしたらいいですか?
馬鹿かお前は。
Cでそんな文字列のコピーの仕方できるわけねぇだろ。
strcpy(name,&(rank[i].name))でも使え。
202200:04/07/08 19:31
>>201
すいません、馬鹿でした・・・
回線で首吊ってきます
203168:04/07/08 19:45
>>169
>>170
>>171
>>172
>>174
>>175
>>176
ありがとうございます。
できました。
>>199
1. バッファを malloc して
2. 取り敢えず fgets して
3. 最後に改行コードが付いてたら {
4.  バッファを realloc して
5.  続きを fgets して
6. }
つう感じ?
>>195
srand をどうやろうが、rand は重複する。
チェックするしかないことにはやく気がつけ。
その前に、どのくらいの範囲のランダム値なんだ?
それによっては、>>167 をちょっと改良すれば
いけるんじゃねか?
RNDで1〜5までの整数値を20個作りたいんです!って感じだな
<<205
レスありがとうございます。
1000個くらい(もしくはそれ以上)のノードにIPアドレスのように32bitの整数値を一意に割り当てたいのです。
うまい方法ありますでしょうか?
赤黒木に重複チェックしながら登録
209185:04/07/08 20:52
char a;

scanf("%d",&a);

if(a == '\0')
return;

とやってもうまく行きません。どうしたらいいでしょうか?


もちろんscanfのリファレンスを全部呼んだ上での質問だろうな?
scanf("%c",&a);
だろぼけぇ。
char a;

scanf("%c", &a);

if (a == '\n')
return;
213179:04/07/08 21:02
184,187さん、その他の皆さん。
ありがとうございました。
ここで出た事を参考に作ってみます。
それではまたわからないことがあったら来ますので
その時もよろしくお願いします。

scanfはそろそろ利ファンレスから削るべきだな。
ヘッダの中でプロトタイプを見つけた奴だけが使えるようにするべき。
ついでにprintfも。
なんか換わりになるもので、おんなじぐらい便利なのがあればな。
てか、何でいまだに標準にそういうのが組み込まれないんだ…
なんでprintfが出てくるの?
printf削ると不便だと思う…
218デフォルトの名無しさん:04/07/08 22:03
scanf削ると不便だと思う・・・ 結局同じ (プゲラ
219デフォルトの名無しさん:04/07/08 22:05
まぁ、fprintfでいいんじゃない?

    |┃三             ________________
    |┃              /
    |┃ ≡    _、_   < scanfと聞いちゃぁ黙っちゃいられねえ!
____.|ミ\___( <_,` ) _ \
    |┃=___    \    ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    |┃ ≡   )   人 \ ガラッ
printfはイイ女だろ、scanfのようなガバマンとは違うよ
scanfは別に無くても不便ってことはないだろう。
あって便利なときはあるけど。
224デフォルトの名無しさん:04/07/08 22:19

   ∧_∧  / ̄ ̄ ̄ ̄ ̄
  ( ´∀`)< >>220モナー
  (    )  \_____
  | | |
  (__)_)
>>214
変わりにgetch()を標準にして欲しい。まったく危険が無い。
文字列の入力とかコードが多くなるけど、
文字列の代入が出来ないCらしくていいと思う。
226デフォルトの名無しさん:04/07/08 22:26
GUI も通信もセキュリティも10進演算も・・・
いまさら変更なんてできるわけないだろ。
お前らの脳みそをCに合わせろ。
228デフォルトの名無しさん:04/07/08 22:29

    ∧ ∧___  ダッコ♪
   /(*゚ー゚) /\
 /| ̄∪∪ ̄|\/
   |        |/
     ̄ ̄ ̄ ̄
%u30D1%u30B9%u30EF%u30FC%u30C9%u3092%u5165%u529B%u3057%u3066%u304F%u3060%u3055%u3044%u3002

%u30D1%u30B9%u30EF%u30FC%u30C9%u304C%u6B63%u3057%u304F%u3042%u308A%u307E%u305B%u3093%u3002
"godhand"ですが何か
231デフォルトの名無しさん:04/07/09 02:35
レス数がずれているので修正カキコ
232デフォルトの名無しさん:04/07/09 11:49
西暦を入力してその年にサッカーのワールドカップがあったかを表示するプログラムソッコウで作れますか?
12時までにはほしいです...
233デフォルトの名無しさん:04/07/09 11:49
むりか。。。
簡単だろ
隣の生徒に聞け。勇気を持って話しかけろ。
236デフォルトの名無しさん:04/07/09 11:57
pow関数なんですが
これはXのn乗を求めることが出来る関数だと思うのですが
このアルゴリズムを教えて頂けませんか?
>>232
ワールドカップが行われた年を全て配列に入れておき、
入力された値と比較。
238デフォルトの名無しさん:04/07/09 12:00
いや、テスト中でこれが問題なんだ

#include <stdio.h>
#include <conio.h>

int main()
{
int year;
printf("年:");
scanf("%d" , &year);
if(year <= ワールドカップが始まった年 && year % 4 == 0)
printf("その年にはワールドカップがあります");
else
printf("その年にはワールドカップはありません");

getch();
return 0;
}

>>237
お前天才じゃん。
241デフォルトの名無しさん:04/07/09 12:03
239>>
ありがたい!

でも、なんかエラーでないっすか?
ネタはもういいよ
サッカー 歴史 ワールドカップ W杯 http://rekishi.shukyu.net/whai.html
>>241
if(year <= ワールドカップが始まった年 && year % 4 == 0)

ここかえたか?
245デフォルトの名無しさん:04/07/09 12:05
どうかえんだ?
246デフォルトの名無しさん:04/07/09 12:06
ごめ・・・迷惑かけすぎ。。。
(・∀・)カエレ!!
#include <stdio.h>
#include <conio.h>

int main()
{
int year;
printf("年:");
scanf("%d" , &year);
if(year <= 1930 && year % 4 == 0 && year != 1942 && year != 1948)
printf("その年にはワールドカップがあります");
else
printf("その年にはワールドカップはありません");

getch();
return 0;
}
それ間違ってる
#include <stdio.h>

int main()
{
int year;
printf("年:");
scanf("%d" , &year);
printf("もうワールドカップはありません");
return 0;
}
if(year >= 1930 && (year % 4) == 0 && year != 1942 && year != 1948)
v(^o^i)d
>>252
うまいな。voidか。
m(^a^i)n
v(^v^;)v
g(^e^t)s
>>255-257
core dump
nu(^ll^p)o
bash: syntax error near unexpected token `nu(^ll^p)'
zsh: number expected
ええっと、あの〜
DOSウィンドウから卒業できるのはいつでしょうか?
もっとこう、windowsのウィンドウとか出てきたり、GUIのアプリケーションだったり、
画像を扱ったりしたいです、そろそろ。
>>262
勝手にSDKなりMFCなりつかって卒業してください。
>>262
そういうスレへどうぞ。
qtハニー
文字列の全角と半角を判別する関数と、
文字列の中にスペースが含まれているか判別する関数ってありますか?
>>263,264
飛び級で行けますか?
char *szStr = "This has three spaces.";
if(strchr(szStr, ' ')) printf("True\n");
else printf("False\n");
>>262
オレも似たようなことを書いて
「お前には一生無理」
とレスもらったことがあるが、
今では普通にWindowsプログラミングしてる。

故に
「いつでしょうか?」
という質問にはこう答えておこう。

い つ か 。
while(*str){
 if(iskanji(*str) && iskanji2(*(str+1))) {
  /* 漢字だ */
  str+=2;
 }
 else if (isspace(*str)) {
  /* 空白だな */
  str++;
 }
 else {
  /* その他 */
  str++;
 }
}
>>270
アフォなプログラムだな。
結局バイト数を数えてるだけか。
>>271
お前もアフォだな、中で好きにしろってこどじゃないのか?
↓以下放置でおながいします
C入門書クリアレベルでどの程度のプログラムが書けるようになってればいいでしょう?
分割コンパイルができる。
自作のライブラリをどんどん蓄積していける。
標準ライブラリにどんな機能があるかを把握している。
分からないことはリファレンス・ネットを使って解決できる。
>>274
それは基礎の基礎でしかない。アルゴリズムの本やプログラムの作り方を学べ
>>274
flex ぐらい
C入門書すらクリアむずそうだ
>>274
ACM国際対抗プログラミングコンテスト
http://pc5.2ch.net/test/read.cgi/tech/1088830826/l50
int a ; に scanf("%d" , &a); で数字を入力して整数以外を入れたらエラーがでる(小数点とか)
ようにするのは入力の後に if( a % 1 != 0 ){ /* エラー文 */ } でいけますか?
それとも自動的の小数以下は切り捨てられますか?
281デフォルトの名無しさん:04/07/09 19:04
>>280
いけません。
小数点は切り捨て。
>>280
何故試したり仕様を見たりしませんか?
283280:04/07/09 19:07
現在試せる環境じゃないからです・・。
スマソ
>>270
iskanji() て何さ?
このスレ的には mblen じゃないか?
>>280
>整数以外を入れたらエラーがでる(小数点とか)
>ようにするのは
ライブラリを書き換えて下さい。
つか、scanf 使うなって何万回言わすんじゃヴぉけ!
c言語で書かれたミニコンパイラのソースってどこかにありませんか?
>>280
char temp[2]; とでもして
if (scanf("%d%1[.]", &a, temp) != 1) {
  printf("error\n");
}
とでもしたら。
ない
>>286

286か。やるな。
ttp://fabrice.bellard.free.fr/otcc/
ほれ。

>>289
ありがとうございました!
291デフォルトの名無しさん:04/07/09 19:57
>>285
使うべき場目かどうかを見ろと言え
論理的な判断の手本を見せろ
scanfは使用不可。どんなときでも。
scanfは使用不可って、一般が使うような物に使うのなら同意だが。
テストとかに使うとか、使用者が限定されているなら別に使ってもいいと思うぞ。
gccがgetsと同様に警告出したらscanf死滅するのにな。
295デフォルトの名無しさん:04/07/09 20:26
警告を出すのはgccじゃない
学校のプログラミングの授業では最初にprintfとscanfを教えてもらった気がする・・・
>>291
グズグズ言ってねぇでお前がやれよ。

    |┃三             ________________
    |┃              /
    |┃ ≡    _、_   < scanfと聞いちゃぁ黙っちゃいられねえ!
____.|ミ\___( <_,` ) _ \
    |┃=___    \    ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    |┃ ≡   )   人 \ ガラッ

スキャンエフをNGワードに指定しますた。
ザンギエフをNGワードに指定しますた。
×スキャンエフ
◎スケァネフ
\    /
 ( ´∀`) ザンギエフへ げんきですか。いま溜めてます
       _ 
      i_iヽ
    (゚д゚,,;;) うるさい死ね 溜めるな殺すぞ
______
\    /
 ( ´д`) ごめんね。ガイルはじめて溜めたから、ごめんね
       _ 
      i_iヽ
    (゚Д゚;;;)うるさいくたばれ、溜めんな
______
\    /
 ( ´∀`) ソニック撃っておきました。ガードしてね 飛び込みはしますか?
       _ 
      i_iヽ
    (#)Д`;;) 死ねくそガイル

入力した4桁の整数のそれぞれの桁の数を下からarrey[0]〜arrey[3]に
格納するにはどうすればよいでしょうか?

ex)1234
arrey[0] = 1
arrey[1] = 2
arrey[2] = 3
arrey[3] = 4
>>303
1234 = 1000*1 + 100*2 + 10*3 + 1*4
>>303
あれー?
>>303
上から格納しているようにも見える。
下からなら、10で割った余りを入れればいいんだがな。

  for (i=0; moto>0; i++, moto/=10) {
    // どうでもいいが、arrayでは?
    arrey[i] = moto%10;
  }
>>303
壮大な釣りですね。
すいません、単純に勘違いしてました。
×arrey
○array   ですねorz
それと例も逆になってます・・・鬱
309ザンギュラ:04/07/09 21:51
ザンギュラ
>>309
ザンギュラのスーパーウリアッ上
scanf
312デフォルトの名無しさん:04/07/09 23:40
VCでCUIのプログラムを作ったのですが、
Windows(XP/200/98等)内のDOSプロンプトでは動作するのに、
Windows98の起動ディスクで起動したDOSプロンプト内では動作しません。
Win32APIは使っていません。
調べた範囲ではSTUBが動作してしまっているようなのですが、
どうすればこの場合STUBではなく通常動作させられるのでしょうか?
>>312
特定のコンパイラの話題ならよそでやってくれ
LSI−Cで作るとか。
315デフォルトの名無しさん:04/07/09 23:48
>>313
スレ違いを指摘する人は誘導するように
甘えるな。
317デフォルトの名無しさん:04/07/09 23:56
>>316
甘えじゃない、挙証責任だ
言いがかりでないことを自ら示せ
>>312
本当にWin32APIを使ってないなら
スタブ内でプロテクトモードにして
設定した上でジャムプしる
>>317
中途半端な煽りを繰り返す暇があったら自分で探せよ池沼。

1 名前: v(^o^i)d 投稿日: 04/07/07 02:52
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

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

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

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

320デフォルトの名無しさん:04/07/10 00:01
>>319
言いがかり確定
VCは標準なんだからいいんだよ。gccなんかと一緒にしてもらいたくないな。
322デフォルトの名無しさん:04/07/10 00:05
スレ違いごめんなさい。
適切なスレを見つけたのでそちらに移動します。
>>315, >>317, >>320はわたしじゃありません。
>>321に釣られる
>>321
VCってなんですか?
325デフォルトの名無しさん:04/07/10 00:10
学校でプログラミングの授業が始まったのですが
最初のほうで早くもつまづいてます・・・
while文を用いて「nippon」という文字列を10行表示汁!
って問題なんですが
#include<stdio.h>
void main()
{
int a=0;
while(a>=10){
printf("#nippon\n");
a++;
}
}

これじゃだめなんでそか?出てこないんですけど・・・。
CPad for LSI C-86とかいうのを使ってます。
〜の間(aが10以上)
>>325
while文は、条件式が 成 立 し て い る 間 繰り返します。

a>=10 という条件とaの値を考えてみましょう。
328デフォルトの名無しさん:04/07/10 00:12
>>324
レモン、ピーマン、キウイ等に多く含まれる栄養素
329デフォルトの名無しさん:04/07/10 00:38
#define until(a) while(!(a))
質問でっす!!!
循環リストの長所と短所と、どのようなアプリケーションに
循環リストは向いているかを教えて〜〜
どっかでみたな
332デフォルトの名無しさん:04/07/10 01:13
昔このスレで、端のあるリストネタでvoid信者が暴れたことがあったね。
333330:04/07/10 01:17
そんなコトがあったんや〜
というか、C言語を授業でしてるんだけど、先輩が言うには
卒業するころには社会で十分やっていけるくらいの力はつく
って言われたんだけど、今まだこんな単純な質問をしてて大
丈夫なのかな俺・・・藁
ちなみに今2年
334デフォルトの名無しさん:04/07/10 01:21
>>333
その先輩は社会へ出たのか?
335デフォルトの名無しさん:04/07/10 01:36
>GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
そのスレって何処の事なのでしょうか?どなたか教えていただけませんでしょうか。
336330:04/07/10 01:36
俺ら公立の情報系の大学なんだけど、
その先輩の就職先自体はわからない。でも俺らの学科は
結構いいとこに就職が決まってるらしいよ。大学院とか行か
なくてもいい感じみたい。
循環リストは先頭を任意に変更できる配列という側面を持つ
undo情報の保持に向く
338デフォルトの名無しさん:04/07/10 01:39
>>335
なければ作れ。
会社員になるやつはバカ
>>338
>あらゆる質問はまずすれ立てるまでもない質問はここでスレにしてください。
341330:04/07/10 01:47
>>337
ありがと!!参考にさせていただきます。
循環リストの短所とかはありますか?

>>339
それでも俺は会社員になるだろな〜
なんだかんだ言っても、やっぱ安定した収入は欲しいしね
342デフォルトの名無しさん:04/07/10 01:50
>>336
腐っても工学者なら何事に対しても基本的な態度を忘れるな
もう一度聞く、その先輩は (ry
>>337
undoって循環である必要ないって言うか終端が分からないと駄目なような。
短所は可変長でないこと。
一周したら前の情報が強制的に上書きされる。
>>343
おそらくキリングバッファのことだと思われ
346ダメ無職:04/07/10 02:00
2進法も出来ない文系崩れの失職者。あるのはパソと時間だけ。
で、C言語を習得したいと思い立ったんだけど、どのくらいでプログラム書けるようになるだろうか?
unkoが口に回ってこないように気をつけよう
>>346
10年ぐらいかな
349330:04/07/10 02:02
>>343-345 347
ありがと〜かなり参考になります
いろいろ勉強させていただきます
350デフォルトの名無しさん:04/07/10 02:05
>>346
明日にでも書いてやる! くらいの勢いがないと第2スキューズ数年かかっても無理。
351343:04/07/10 02:05
なんか混乱してきたような
struct item{
 struct item *next;
};
でnextを辿ってくと最初に戻るデータ構造の話をしてるんだよね。

>>344
可変長じゃないの?項目なんていくらでも追加していけると思うけど。

>>345
キリングバッファって循環リストで実装されての?
>>346
とりあえず2000時間くらい
そのあとどうするか自分で判断したら?
>>351
もっと詳しく君の考えている循環リストの定義を知る必要があるが
とりあえず
> nextを辿ってくと最初に戻るデータ構造
だからリストの追加は付加だ。サイズは一定になる。

> キリングバッファって循環リストで実装されての?
されてる
354デフォルトの名無しさん:04/07/10 02:09
マルチプロセスとグローバル変数についての質問です。

1.親プロセスにてグローバル変数 FILE* fp を アペンドで開く

2.子プロにて必要なときにfpに書き出し、fflush()する
子プロの数は不定。

これは作りとしては正しいのでしょうか?
試しに作って動かした感じでは問題ないのですが、
負荷が高くなったとき(多プロセスで一斉に出力したとき)はどうなるのでしょうか?

あと、更に基本的な質問。
このケースって*fpがいくつも複製されているという認識でいいでしょうか?
(同じファイルを示すアドレスがいくつもできている)
>>346
書けるようになってどうするの?
会社はC言語ができるだけの人なんていらないよ?
>>354
君はスレッドプログラミングについての書籍を読みなさい
357353:04/07/10 02:16
>>353
>だからリストの追加は付加だ。サイズは一定になる。
item *new = malloc(sizeof(item));
new->next = curr->next;
curr->next = new;
はリスト(項目)の追加といわないの?
これと同じ意味で削除もできるよね。

>されてる
了解。

キリングバッファは循環リストで実装され
キリングバッファはundoとは別物ってことだね。
358354:04/07/10 02:22
>>356
マルチスレッドだと、全メモリが1空間で共有ということだよね。
対比してマルチプロセスのグローバル変数ではどういうことなのだろうかと。
別プロセスでそれぞれがグローバル変数のコピー(というかメモリ)を持っても、
問題なくfflush()できているのが不思議なもんで。
マルチプロセスではそのへんは安全としか書いてないから質問しますた。
>>357
だから最後のセルが最初のセルを指すのが循環リストな訳で。
・・・別にいいけどね、間にいくらでも任意のセルを挿れたりしても・・・
360ダメ無職:04/07/10 02:23
いや、CAD入力を個人で下請けしてたんだけど、取引先に合わせた市販のCADソフトもフリーソフトもカスタマイズすれば効率がよくなる部分がたくさんあった。
具体的にはC言語を覚えて特定企業の書式に特化したCAD開発をしたい。
>>358
ちょっとそのへんの説明を軽くC言語で書いてみて
手元のアルゴリズム本をいくつか見てみたけど、巡回リストの特徴が
固定長なんて書いてあるのはなかったね。
循環リストは挿入や削除も可能
ただし値のpush・popをする主体とサイズの変更をする主体が同一だと
循環リストの利点は生きてこないんじゃないかな
>>360
プログラマ板に行くといい。あちらでも無視されるかもしれないが。
365デフォルトの名無しさん:04/07/10 02:44
>>361
unix/cなのでマルチプロセスですが。
今、ソラで書いたのでマクロ名や微妙な間違いはご愛敬ということで。
#include <stdio.h>

FILE* fp ;
int iChild ;
int iFlg = 0 ;
main(){
    int pid ;
    fp = fopen(...,"a");
    signal(SIGCHLD,childend); signal(SIGTERM,mainend);
    while( iFlg==0 ){
        sleep(1);  pid = fork();
        switch(pid){
            -1 :
                break ;
            0 :
                hoge() ;
                exit(0);
            default :
                iChild++ ;
                break ;
        }
    }
    while( iChild > 0 ){ ; }
    fclose(fp);
}
366デフォルトの名無しさん:04/07/10 02:45
続き。
hoge(){
    int i ;
    for( i=0;i<5;i++ ){
        sleep(i);
        fileflush();
    }
}

childend( int i ){
  int pid = waitpid();
  iChild-- ;
  signel(SIGCHLD,childend);
}

mainend(){
    iFlg = 1 ;
    signal(SIGTERM,mainend);
}

fileflush(){
    fprintf(fp,"hoge(%d)",getpid());
    fflush(fp);
}
iFlg はどこでリセットされるの?
368デフォルトの名無しさん:04/07/10 03:09
>>367
直接質問と関係ないと思うけど、mainend()のつもり
369デフォルトの名無しさん:04/07/10 03:14
strstr("abc", "") で第1引数と同じアドレスが返るのは合理的ですか?

strchr("abc", '\0') で「c」の次のアドレスが返るのって合理的ですか?

どうもなっとくいかないのですがー
>>367
え? iFlg = 1 して子プロセス作ってそのまま放置じゃん。
while にどうやって入るの?
アンカずれた >>370>>368
372デフォルトの名無しさん:04/07/10 03:18
iChildにはvolatileをつけろ
373デフォルトの名無しさん:04/07/10 03:20
いずれにせよ、環境依存なので他のスレでどうぞ。
374368:04/07/10 03:23
そだね。iChildは初期化漏れ。
つか、そのへんの話じゃなくて、
マルチプロセス時のグローバル変数fpの話なのだが。
環境依存ってこの話題じゃないよね?
普通のunix/cも不可か?ここは
375デフォルトの名無しさん:04/07/10 03:26
while( iChild > 0 ){ ; }
こんなことをするならvolatileをつけろという意味なんだけど。
fp は使い回しだよ。各プロセスが同じ fp にアクセスしてる
ただ同時に fp にアクセスしないようにする必要があって
iFlg で進入するプロセスを制限していると思うのだが
肝心の iFlg = 0 にする決まりがない
377デフォルトの名無しさん:04/07/10 03:33
>>374
普通とか言われても、ANSI-Cにはforkなんて関数は無かったと思うが。
ちなみに、forkしても親プロセスでオープンされたファイルは引き継がれる
(ので、POSIXな部分では安全?ANSI部分は知らんけど)
マルチスレッドに関する規定が標準Cにない以上、如何に一般的であったとしてもマルチスレッドはスレ違い。
379デフォルトの名無しさん:04/07/10 10:52
>>369
strchrの実引数に、意味が処理系定義となっている部分があるので、何とも言いようがない。
>>358の質問の意味が話からないorz
OSって偉いな、ってだけではダメなの?
指定したフォントと大きさ(MSPゴシック、12など)でプロンプトに文字列を出したい。
やり方教えてください。
DOS窓の設定変えろ
コマンドプロンプトなんかのコンソールはそういう性格のものじゃないしな。
384デフォルトの名無しさん:04/07/10 13:16
>>374
やっと意味あるレスだよ。サンクス。
fpの実データは同じで、ポインタはそれぞれ。
なのでfflushした時点で書き込み部分は更新される、
と解釈すればいいような気がしてきた。
このへんは、子プロ&親プロでfpとfpの中身を出力してみればわかりそうだ。
・・・と、やっと気づきました。

ところで、標準C=ANSIという規定なのか?この板は?
確かにforkはANSIにはないけど、
unixの伝統的なシステムコールなのでアリだと思うのだが。
WinAPIならさすがに質問しないが。
ANSI99はどうするんだ?

しかし、>>378はマルチプロセス=マルチスレッドなのか?(w
あとシグナルや>>375みたいなツッコミはうぜぇ。
ソラで書いたので細かいことはご愛敬だと書いてる。
実際にはきちんと書くに決まってるだろうが。

iFlgはシグナルで処理。
以上

1971 C
1978 K&R 1/e
(1983 C++)
1989 ANSI C (C89) <--- K&R 2/e
1996 ISO C (C95)
1999 ISO C (C99)

1971 C
1978 K&R 1/e
(1983 C++)
1989 ANSI C (C89) <--- K&R 2/e
1990 ISO C (C90)
1996 ISO C (C95)
1999 ISO C (C99)
>>384
「unixの伝統的な…」
 ~~~~~~
環境依存以外の何だとおっしゃるのでしょうか。
CはUNIX専用言語だということを知らないアフォがいるようだな。
確かに他の環境に移植はされたがそれは異端だよ。
>>384
>fpの実データは同じで、ポインタはそれぞれ。

グローバル変数だろうがへったくれだろうが
別プロセス空間で動いている限り別物。
fork した時点でのコピーでしかない。
っつー話は環境依存だと思うが。
>unixの伝統的なシステムコールなのでアリだと思うのだが。
伝統的も糞もない。
>>384
>マルチプロセス=マルチスレッドなのか?(w
>マルチスレッドはスレ違い。
況やマルチプロセスをや。

標準C=ANSIと言う気は(私は)ないが、ごく一部のOSに限定されても困ると言うだけ。
unixのシステムコールはありでWinAPIはなし? めでてぇな。
unix C は環境依存にはなりませんよ
そのために C が開発されたんだし
例外処理
元々unix向けに作られた言語であろうと、
現在そうであるかは別だと思うが
393384:04/07/10 13:52
>>390

>標準C=ANSIと言う気は(私は)ないが、ごく一部のOSに限定されても困ると言うだけ。
>unixのシステムコールはありでWinAPIはなし? めでてぇな。

あのソースは しすごでもBSDでもLinuxでも移植が容易。
当たり前だ。長い期間かけて標準化された。あるいはデファクトスタンダードとなったんだから。
お前は馬鹿か?WinAPIはWinでしか通用しないだろうが。
お前は馬鹿か?UNIXシステムコールはUnixでしか通用しないだろうが。
fork すると何が
(゜д゜)ウマー!なの?
397デフォルトの名無しさん:04/07/10 14:00
#include<stdio.h>

void main()
{
int a;
while(1){
printf("数字入力(0〜100):");
scanf("%d",&a);
if( a <= 100 && 80 <= a )
printf("Best!!\n");
break;
if( a < 80 && 65 <= a )
printf("Better!!\n");
break;
if( a < 65 && 50 <= a )
printf("Good!\n");
break;
if( a < 50 && 0 <= a )
printf("Bad!\n");
break;
else
printf("入力エラー\n");
}
}

自分馬鹿です
エラーが出ます(else 文が if と一致しません。)

ダレカタスケテ
>>397
ちゃんと{と}で囲むように。
またscanfか
>>397
#include<stdio.h>

void main()
{
int a;
while(1){
printf("数字入力(0〜100):");
scanf("%d",&a);
if( a <= 100 && 80 <= a ){
printf("Best!!\n");
break;
}
if( a < 80 && 65 <= a ){
printf("Better!!\n");
break;
}
if( a < 65 && 50 <= a ){
printf("Good!\n");
break;
}
if( a < 50 && 0 <= a ){
printf("Bad!\n");
break;
}
else
printf("入力エラー\n");
}
}
401397:04/07/10 14:05
>>398
アリガトウ
402397:04/07/10 14:05
>>400
アリガトウ
403デフォルトの名無しさん:04/07/10 14:11
>>394
UNIXをひとくくりにする馬鹿ハケーン。
>あのソースは しすごでもBSDでもLinuxでも移植が容易。
をきちんと読んだか?

しかし、その後は平和な質問がでてきたな。
>>394

Windowsでも(ry
蒸し返すな馬鹿
406デフォルトの名無しさん:04/07/10 14:16
UNIX厨は専用スレあるんだからそっちいけよ。
407デフォルトの名無しさん:04/07/10 14:18
WindowsはM$だけだろ。
UNIX、Linuxはマルチベンダ。
その違いがわからないアフォが多いようですね。
結論
 Unixネタは許容範囲
 それ以外は出て行け
これからは POSIX と呼びませう
410デフォルトの名無しさん:04/07/10 14:22
>>408
>>1を読み直せ。
411デフォルトの名無しさん:04/07/10 14:26
>408
UNIXネタというより、問題になったレベルくらいのシステムコールネタだな。

>410みたいなアフォはスルーで。

標準CをANSIだけのほうがスレとして偏りすぎ。
もとはUNIXなんだから、UNIXで普通に動くものは標準という認識でOK。
特定ベンダ・ディストに偏るならUNIX・Linux板または専用スレへかな。
412デフォルトの名無しさん:04/07/10 14:29
仕様書すら読めない人が多いようですね。
それとも、自分の都合のいいように脳内変換しちゃうのかな?
↑勝手に脳内変換する馬鹿
414デフォルトの名無しさん:04/07/10 14:34
> 標準CをANSIだけのほうがスレとして偏りすぎ。

ふつうISOだろ。
415デフォルトの名無しさん:04/07/10 14:35
> void main()

すでにここがだめ
早く俺に聞け!
UNIXでは動くけどWindowsやその他で動かないところは
その都度 UNIX厨の方が教えてくれるそうです
速やかにM$を捨てなさい
捨てられたのはCの方なわけだが
.NETでCは死滅します。
>>419
馬鹿発見晒し上げ
421デフォルトの名無しさん:04/07/10 15:19
>>385
http://www.cecile.co.jp/p/ch9/

>>388
ニホンゴワカリマスカ?
ゲンザイケイ「ダ」 「デアル」
カコケイ「ダッタ」 「デアッタ」
422デフォルトの名無しさん:04/07/10 15:21
仕様書?
そんなアフォSヨがつくったもんなんかみてられるか。
423デフォルトの名無しさん:04/07/10 15:22
>>391
Cで書かれたコードという意味ならセーフだな
ただし、同じ意味でセーフにせにゃならん例がすごい数になるなあ
ちゃんと状況説明できる香具師なんてここにいるのか?
特定のOSに愛着する奴キモイ

次スレでは
>GUIなどの標準Cでは
の部分を

ISO Cの規格内では

に変更しよう。
425デフォルトの名無しさん:04/07/10 15:26
>>415
コード追えないぼけは消えろ
int main()
     ↑ここがダメ
427デフォルトの名無しさん:04/07/10 15:29
しかし、ISO、WindowsAPI、unix/Cでそれぞれスレが立つのもイヤだな。
って優香unix/Cだけではスレが勿体無い。
WindowsAPIはそれだけでも(レスの数が多いという意味で)アリの気がするが。
OS、コンパイラを指定すればOKにすれば?
どうでもいいんだそんなことは
早く質問しろ
FAQと煽りと雑談にはむちゃくちゃ寛大などころか率先してレス付けるのにな。
お前らちょっと病的だよ。
>>427
【初心者歓迎】C/C++室 Ver.7【環境依存OK】
http://pc5.2ch.net/test/read.cgi/tech/1086373839/
431デフォルトの名無しさん:04/07/10 15:35
>>367 と同じで、どうしてリセットされるのかわからないのですが。。。
>>427
お前が厭かどうかは関係ない。

Win32API質問箱 Build20
http://pc5.2ch.net/test/read.cgi/tech/1088140233/l50

UNIXプログラミング質問すれ Part3
http://pc5.2ch.net/test/read.cgi/tech/1085930894/l50
434デフォルトの名無しさん:04/07/10 16:17
> #include<stdio.h>

その前にここがだめ
435デフォルトの名無しさん:04/07/10 16:18
> ちゃんと状況説明できる香具師なんてここにいるのか?

オレがいいと認めたものは許可。
そうでないものはヨソで。

簡単でわかりやすいルールだろ?
436デフォルトの名無しさん:04/07/10 17:51
>>384は下手に出ていればいい気になりやがってこのやろうってところか
これからは回答にUNIXのシステムコールやライブラリを含めるか。
438デフォルトの名無しさん:04/07/10 18:42
ダレカタスケテ
自分バカです

#include<stdio.h>

void main()
{
int i = 1 , j = 1 ;
while( i <= 100 ){
printf("%3d",i);
while( j == 10 ){
printf("\n");
}
j++;
i++;
}


予期せぬEOFが検出されました
{}の対応を調べれ
440デフォルトの名無しさん:04/07/10 18:48
void main()はダメ。
441デフォルトの名無しさん:04/07/10 19:01
> while( i <= 100 ){

っていうか、なんだよこの空白のあけかたは...。

こういう間抜けなコードを書くやつって、たいがいこういうへんな空白なのよね。
442デフォルトの名無しさん:04/07/10 19:05
#include <stdio.h>

main()
{
  int i;

  for (i = 1; i <= 100; i++)
    printf(((i % 10 == 0) ? "%3d\n" : "%3d"), i);
}
443デフォルトの名無しさん:04/07/10 19:08
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

main () {
int i,n;
double p,z,v,x,y,r,count;

srand( time(NULL));
printf("n :");
scanf("%d\n",&n);
for(i=0,count=0;i<n;i++)
{
z=(double)rand()/(double)RAND_MAX; /* 0<z<1の値をランダムに表す */
x=(z-0.5)*2; /* -1<z<1の値をランダムに表す */
v=(double)rand()/(double)RAND_MAX;
y=(v-0.5)*2;
r=(x*x)+(y*y);
if(r<1){
count++;
}
}
p=(count/n)*4;
printf("π=%f\n",p);
return(0);
}

-1≦x≦1,-1≦y≦1の範囲でランダムにn個の値をとり、
原点を中心とする半径1の円の中にある値の数を
countとして数えていき、n個に対するcountの割合に4かけると
πの値になるっていうプログラム。
コンパイルはできたのに値がうまくいかない。なぜ?
444デフォルトの名無しさん:04/07/10 19:16
> コンパイルはできたのに値がうまくいかない。なぜ?

空白のあけかたが変だから。
445デフォルトの名無しさん:04/07/10 19:18
> コンパイルはできたのに値がうまくいかない。なぜ?

scanf使ってるから。
446デフォルトの名無しさん:04/07/10 19:21
他には?
444,445以外の回答者はいないのか?
(double)rand()/RAND_MAX
では
0<x<1 ではなく
0≦x≦1 になる。

>>443
scanf("%d\n",&n);
449デフォルトの名無しさん:04/07/10 19:24
>447
すいません。そこはスルーしてください。
書き間違えました。
450デフォルトの名無しさん:04/07/10 19:28
>>443
何ですか?
>>443
scanfに\nはいらん
452デフォルトの名無しさん:04/07/10 19:30
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N10000000

main()
{
double x, y;
double count;
int i;

srand(time(NULL));
count = 0;
for (i = 0; i < N; i++) {
x = ((double)rand() / (double)RAND_MAX - 0.5) * 2.0;
y = ((double)rand() / (double)RAND_MAX - 0.5) * 2.0;
if (x * x + y * y < 1)
count++;
}
printf("π=%g\n", (count / N) * 4);
return 0;
}
453デフォルトの名無しさん:04/07/10 19:31
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N  10000000

main()
{
  double x, y;
  double count;
  int i;

  srand(time(NULL));
  count = 0;
  for (i = 0; i < N; i++) {
    x = ((double)rand() / (double)RAND_MAX - 0.5) * 2.0;
    y = ((double)rand() / (double)RAND_MAX - 0.5) * 2.0;
    if (x * x + y * y < 1)
      count++;
  }
  printf("π=%g\n", (count / N) * 4);
  return 0;
}
454デフォルトの名無しさん:04/07/10 19:33
>>451
あ、すいません。
でも、直してもcountの値が増えないんですが、
根本的に間違っているんでしょうか?
455デフォルトの名無しさん:04/07/10 19:33
intが16bitマシンなのだろう
456デフォルトの名無しさん:04/07/10 19:44
>>453
ありがとうございました。
うまくいけました。
どこが悪かったんでしょうか?
457デフォルトの名無しさん:04/07/10 19:45
> うまくいけました。
> どこが悪かったんでしょうか?

空白の空け方です。

今後は正しい空白のあけかたで書くようにしなさい。

458デフォルトの名無しさん:04/07/10 19:46
(1) scanfを使わないようにする
(2) 空白のあけかたを正しくする
-> なおった
わしょーい
ifの後に空白空けるなボケ 
関数と間違いやすい?ドコまで低脳なんだよボケ
460デフォルトの名無しさん:04/07/10 19:51
> ifの後に空白空けるなボケ 

ifのあとの空白をつめるな ぼけ
461デフォルトの名無しさん:04/07/10 19:51
whileのあとも同様
コーディングスタイルについていちいちたたき合うな ぼけ
463デフォルトの名無しさん:04/07/10 19:52
つめたら見づらいのはあたりまえ。
で、みづらいからといって、括弧の内側に空白あけるのはさらにぼけ
464デフォルトの名無しさん:04/07/10 19:52
コーディングスタイルについついちきちきばんばんしろ ぼけ
> ifのあとの空白をつめるな ぼけ

ifのあとに空白空けるな ぼけ

whileのあとも同様
466デフォルトの名無しさん:04/07/10 19:53
>>462
言われるとそんなにつごう悪いのか ;-)
ifの後に空白入れると見やすくなると思ってるなら、関数の後にも空白入れろ ぼけ
>>466
両方に対して言ってるのでそれはありません ;-)
469デフォルトの名無しさん:04/07/10 20:01
>>467
> ifの後に空白入れると見やすくなると思ってるなら、関数の後にも空白入れろ ぼけ
予想以上のレスがついた
470デフォルトの名無しさん:04/07/10 20:03
>>469
反論できないのか ぼけ
>>467
関数名の後ろってことか?
472デフォルトの名無しさん:04/07/10 20:06
>>471
どこでもいい とにかく空白あけろ ぼけ
473443:04/07/10 20:08
scantf("%d\n",&n);
の\nをどけたらできました。
πの値が大きかったので、間違いだと思ってました。
>>456
>443でも巧く行ったぞ。但し、nの入力の後で入力を打ち切ったがな。
まぁなんだ、scnaf()は使うな、ってことだ。
475デフォルトの名無しさん:04/07/10 20:12
>>474
なんでそんな結論になるんだ ぼけ
ifの後に空白入れないからだろ ぼけ
見辛いとか言ってる先天的染色体異常者なボクちゃんは、
とても見やすい構文カラーエディターは使えないのかな?
メモ帳でプログラムしちゃってるのかな?
それとも色盲の症状もでちゃってるのかな?
病院は9時で閉めるから早くねんねしてね。
戻り値もないのに関数っていうな ぼけ
C ってステキな言語だね。
でも、関数名を括弧の内側に書けた方がもっとステキだね。

(printf, "%s\n", "Hello, World.");
schemer?
480デフォルトの名無しさん:04/07/10 20:40
なんでscanfはだめなの?
481デフォルトの名無しさん:04/07/10 20:44
>>480
空白をあけないからだ ぼけ
>>481
あけたら使ってもいいんですか?
483デフォルトの名無しさん:04/07/10 20:57
>>473 scantf スキャントフ
>>474 scnaf シナフ

とりあえずモチツケ
484443:04/07/10 21:01
うわ、又間違えた。
逝ってきます。
485デフォルトの名無しさん:04/07/10 22:46
「ぼけ」さん、だいぶ骨抜きになってきたねw
486デフォルトの名無しさん:04/07/11 03:05
はじめまして。以下のソースの内容を見ていただきたいのですが、
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=108

このプログラムの、数学や英語のソートを行うと、うまくいきません。
どうしたらよいのでしょうか?
input.txtは。名前 数学の点数 英語の点数
という順番にならんでいます。
>>486
症状くらい書け
488486:04/07/11 03:17
>>487
すみません。
症状といたしましては、
・昇順に並び替えたいのに、順番がめちゃくちゃになる
・名前がネという名前で表示されている人が何人か出てくる
といった具合です。
どうかよろしくお願いいたします。
ここまであつかましいデバッグ依頼は初めてだな
490デフォルトの名無しさん:04/07/11 03:22
これは宿題スレの守備範囲だろ?
491デフォルトの名無しさん:04/07/11 03:39
> scantf("%d\n",&n);
> の\nをどけたらできました。

やっぱりぼけな質問するやつはscanf使ってる
の法則
492デフォルトの名無しさん:04/07/11 03:41
> 見辛いとか言ってる先天的染色体異常者なボクちゃんは、
> とても見やすい構文カラーエディターは使えないのかな?

...やはりぼけだったか...
493デフォルトの名無しさん:04/07/11 03:57
> 症状くらい書け

症状きくまでもねーだろ ぼけ

バグはここだ
> scanf("%s", temp.name);

理由:
scanf使っているから
494デフォルトの名無しさん:04/07/11 04:03
突然ですが、とてもC言語に詳しいようなのでひとつお聞きしてよろしいでしょうか?
私は今自宅のPCでJavaを勉強しています。そして今回あらたにC言語を勉強する羽目になってしまいました。(業務でつかうため)
でも、私はPCのことはあんまりわかりません。
Javaを入れたときに環境変数でPATHを設定しましたが、Cをいれたらこれをかきかえなくちゃならないんですか?二つの言語を同時につかうにはどうしたらよいのでしょうか?
>>494
C言語のコンパイラによる。マニュアル読め。
両方入れても別にぶつからないから書き換えというかパスを追加すればいいだけ。
497デフォルトの名無しさん:04/07/11 04:08
case SortEng : sortmath(&list); break;

ここおかしくない?
498デフォルトの名無しさん:04/07/11 04:12
> PATHを設定しましたが、Cをいれたらこれをかきかえ

書き足すんだよ ぼけ
499デフォルトの名無しさん:04/07/11 04:19
「ぼけ」さん、だいぶ骨抜きになってきたねw
500デフォルトの名無しさん:04/07/11 05:19
どういうわけか一瞬Perlに見えた。
>494
それよりそんな状態で業務アプリケーション作ってるほうが気になる。
ましてC言語なんて・・・(((((゜д゜;)))))
502名無しさん@そうだ選挙に行こう:04/07/11 11:41
>>492
言い返せないのか やっぱりぼけだなお前は
初心者的な質問でごめんなさい。



「sca­nf」とか「空­白」とか「ぼ­け」って言葉がここでは流行ってるんですか?
>>503
というよりNGワードです
Cってずいぶんプリミティブな言語ですね。
それが魅力なんです
#include <stdio.h>
#define QUE 1+1

int main()
{
int ans;
printf("%dは?\n",QUE); //ここで"1+1は?"と表示させるにはどうしたらいいですか?
scanf("%d",&ans);
if(QUE == ans)
printf("正解");
else
printf("ハズレ、答えは%d",QUE);
return 0;
}

508名無しさん@そうだ選挙に行こう:04/07/11 14:42
関数ポインタって、なんに使うんですか?
コールバックとか
qsortでも使ってみれ
>>494
>突然ですが、とてもC言語に詳しいようなのでひとつお聞きしてよろしいでしょうか?
よろしいですって言われてから質問しろよボケ
>>507
すまん。このぐらいしか思いつかん。

#include <stdio.h>
#define QUE 1+1
#define QUE_STR "1+1"

int main()
{
int ans;
printf("%sは?\n", QUE_STR); //ここで 〜
以下同文
またscanfか
あー俺の512がー
printf("%sは?\n", #QUE); //ここで 〜
>>514
おれもそう思ってやってみたけどコンパイルできんかった。
は?
>>516
は?
哀れ
error C2014: プリプロセッサ ディレクティブのシャープ記号 (#) の前に、空白文字以外の文字があります。
error: syntax error at '#' token
>>520
VC使えよぼけ
>>521
gcc使えよぼけ
>>521-522
どっちも使うなよぼ­け
>>523
選挙行けよぼけ
525名無しさん@そうだ選挙に行こう:04/07/11 16:40
>>507

どうして printf("%d", QUE * 2); しないのー?
>>524
選挙権ある歳じゃねえよぼ­け
lcc使えよタコ
>>525
1+1*2を計算する必要がないからじゃないのー?
未だにGW気分
cl.exeが吐くメッセージなんでSJISなんだよぼけ
オレのtermはeucしか見れねーんだよタコ
alias cl 'cl.exe \!* | nkf -e' で解決したと思っていいのかクソ
だれか>>525が言わんとしている事を教えてくれ
532113:04/07/11 17:03
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=110
を Borland C++ Compiler 5.5.1でコンパイルするとbreak;の次の行すべてで
w8066実行されないコードとでます。
どこが間違ってるのか教えてください。
533名無しさん@そうだ選挙に行こう:04/07/11 17:05
nkf で -eをdefaultにしたのはKusakabe先生ですよね。
>>532
while( fscanf( fp, "%s", &t1 ) != EOF ) {
これか?                  ↑
535名無しさん@そうだ選挙に行こう:04/07/11 17:16
test
536名無しさん@そうだ選挙に行こう:04/07/11 17:16
うわ、本当に名無しが変えられている。死ね夜勤。
537532:04/07/11 17:17
>>534
違うようです。
538名無しさん@そうだ選挙に行こう:04/07/11 17:19
char w1[30],w2[30]・・・なんてやらないでchar w[32][30]にすればいいのに。
>>532
全てのif文while文の後をブロック化しろ。話はそれからだ。
なお、534の指摘は正しい。
540名無しさん@そうだ選挙に行こう:04/07/11 17:20
printf("%f\n", (n1+ n2+ n3+ n4+ n5+ n6+ n7+ n8+ n9+ n10+ n11+ n12+ n13+ n14+ n15+ n16+ n17+ n18+ n19+ n20+ n21+ n22+ n23+ n24+ n25+
n26+ n27+ n28+ n29+ n30+ n31+ n32)/i1);

↑あとこれは%dで受け取るべき。
541名無しさん@そうだ選挙に行こう:04/07/11 17:21
> あとこれは%dで受け取るべき。

なんで連体形?
>>541
意味ねーよ。
つか連体形ってしらねーし。
543名無しさん@そうだ選挙に行こう:04/07/11 17:25
> つか連体形ってしらねーし

ぼけ
>>541
空­白あ­けろ/あけ­るなとか
言ってるのはお前か?

>>542
連体形知らないって何歳だよ・・・
545名無しさん@そうだ選挙に行こう:04/07/11 17:26
>>541
なんで体言止めなの?
546名無しさん@そうだ選挙に行こう:04/07/11 17:26
>>532
elseの後に空白入れろ ぼけ
27歳。連体形なんか知らない。おすすめ。
548名無しさん@そうだ選挙に行こう:04/07/11 17:27
メール欄でわかると思うが、542!=540
549534:04/07/11 17:27
スマソ 矢印がズレたばっかりに・・・
550名無しさん@そうだ選挙に行こう:04/07/11 17:28
>>547
選挙行け ぼけ
>>547
未然形
連用形
終止形
連体形
命令形
>>550
もう行って来た。8時前に。まじおすすめ。
未然形 ・・・ 決して死なせない
連用形 ・・・ 奴の死を無駄にはしない
終止形 ・・・ 死んだ
連体形 ・・・ あいつを殺して俺も死ぬ
命令形 ・・・ とっとと死ね
554名無しさん@そうだ選挙に行こう:04/07/11 17:32
>>552
俺はまだ行ってないぞ ぼけ
最近の選挙って全部名前だから面倒だった。
結局ひらがなの人にするよね。
556名無しさん@そうだ選挙に行こう:04/07/11 17:36
れんほう に入れました
おいC言語よりもよ、うちの前に止まっている違法駐車トラックをなんとかしろよ!!!
金曜日に警察に電話したら「花金だからねー来週にしてもらえる?」だとよ。
頭にきたから「お前をscanfするぞ!!!」と言ってやったさ。

あー言ってやったさ!!!
で、どこが笑えるんだ?
お前の頭の回転の鈍さ
ゲラゲラ
面白い!!!!!!!もっとキボンヌ!!!!!!!!!
561名無しさん@そうだ選挙に行こう:04/07/11 17:43

ボケラ ボケラ 空白入れろ ボケラ ボケラ
562名無しさん@そうだ選挙に行こう:04/07/11 17:49
"べきだ"の"だ"の省略だろとマジレス
563名無しさん@そうだ選挙に行こう:04/07/11 17:51
さっき投票に行ってきたが、唯一神はカタカナだった。
564532:04/07/11 17:59
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=111
直しました。
今度は7行目 宣言の構文エラー、15行目 宣言が正しく終了していない
と出ました。

>>540
小数点以下まで答えを求めるにはどうしたらいいでしょうか?
565名無しさん@そうだ選挙に行こう:04/07/11 18:03
>>564
printf("%f\n", (double)(n1+ n2+ n3+ n4+ n5+ n6+ n7+ n8+ n9+ n10+ n11+ n12+ n13+ n14+ n15+ n16+ n17+ n18+ n19+ n20+ n21+ n22+ n23+ n24+ n25+
n26+ n27+ n28+ n29+ n30+ n31+ n32)/i1);
>>564
すげー根気だな。脱帽。
>>564=532
main()関数のブロックがなくなったぞ。エラーが出たら先ず見直せ。
568532:04/07/11 18:52
>>567
ありがとうございました。
コンパイルはエラー無しでできたんですが
思ったとおりに動かないのでもう少し考えたらまた来ます。
w1からw31、n1からn31までは初期化されてないとか
t1と比較すべきが"t1"と比較してるとか
そういう基本的な突っ込みはもう誰かしたの?

>>566
賛成。俺もあげなプログラムは途中で挫折する。
もっと楽に書くべ。
570567:04/07/11 18:58
あー、と思ったが、それだけじゃなくてあちこち問題だらけだ。
・fscanf()の使い方が間違っている。
・strcmp()で"t1"と比較しているが、それでは意味がないだろう。
・変数の初期化は個別にやらないとダメ。
・32単語以上出てきたときに破綻する。

って、纏めている間に>569が指摘しているね。
571567:04/07/11 19:01
あー、未だあった。
・途中でw1が間違って比較対象になっている。
なんで>>532は2次元配列使わないんですか?
自分で疑問に思わないんだろうか。
似たようなの繰返し書いてて、
「こんなこと誰も彼もがやってるわけない、すっきり書く方法が何かあるはずだ」と。
思っててもそれどころじゃないのかな。
574569:04/07/11 19:23
組んではみたが、i1の役割が分からん。重複率かなんか求めてるのか?
>/* ファイルを閉じる */
なんてコメントを入れるくらいなら
>printf("%d\n", (n1+ /*(中略) / n32)/i1);
にコメントをくれ。
575532:04/07/11 19:24
>>573
思ったんですが探しても見つからずこうなりました。
2次元配列を調べてみます。
576532:04/07/11 19:27
>>574
同じ単語が何回出てきたかを数えたいんです。
577572:04/07/11 19:29
もう一つ、なぜ>>532はcharの方は配列使ってるのにintの方は使わないんですか?
なんか分からないけど文字列のときは配列使う、というのがインプットされてるんですか?
578569:04/07/11 19:31
>>576
もう一度いうが
>printf("%d\n", (n1+ /*(中略) / n32)/i1);
にコメントをくれ。
同単語の出現数をカウントしたいのならi1はいらない。
各単語の1回目のカウントはi1に奪われているが、それは意図した動きなのか?
579名無しさん@そうだ選挙に行こう:04/07/11 19:34
char fstr[64], lstr[64], str1[64], str2[64];
char buf[256];
long fl, ll;
int i, n;

fgets(buf, sizeof buf, stdin);

for (i=0,n=0; !(buf[i]=='['); i++,n++) str1[n] = buf[i];
str1[n+1] = '\0';
for (i++,n=0; !(buf[i]=='-'); i++,n++) fstr[n] = buf[i];
for (i++,n=0; !(buf[i]==']'); i++,n++) lstr[n] = buf[i];
for (i++,n=0; !(buf[i]=='\0'); i++,n++) str2[n] = buf[i];

fl = atol(fstr);
ll = atol(lstr);

for(; fl<=ll; fl++) printf("%s%ld%s", str1, fl, str2);

return 0;

str1の最後に入力していない文字が入る事があるのですが
何故なんでしょうか?
str1[n] = buf[i]; //こいつが終わった時点で
i++,n++ //これが行われ
!(buf[i]=='['); //これが判定され
str1[n+1] = '\0'; //これが行われる

n が余計に足されてる。
581名無しさん@そうだ選挙に行こう:04/07/11 19:39
>>579
str1[n] = '\0';

ところで、!=という演算子を知っている?
ところで・・・・エロ画像連番 URL 群簡略表現の展開プログラムとみましたがいかがですか?
583532:04/07/11 19:40
>>577
インプットされてました。intにどう配列を活用するのかわかりません。

>>578
同じ単語が何回出てきたか調べたあと、その平均を出すためです。
584569:04/07/11 19:42
>>532
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=149
たたき台。
i1関連のコードがないが、仕様がよーわからん
最近は配列を飛ばしていきなりファイル操作へ移るのか・・・?
正しく動くようになりました。
有難う御座います。
>>583
とりあえず、n1 n2 n3 と書くのと、n[1] n[2] n[3] と書くのは、
手間のことだけ言えば同じようなもんだというのはわかるよな。[ と ] 書き足すだけだから。
それを
for (k=1; k<=3; k++) {
 n[k] がどうのこうの
}
と書けたら楽だよな。上限が 1000 だの 2000 だのに増えても書き直す場所・書き足す場所少ないからな。
そこまで理解できたらあとは int n[32] とか int n[33] とか宣言しちまえばいい。
588579&586:04/07/11 19:51
>>581
知っていますが思いつきませんでした。
そちらの方が簡略になりますね。

>>582
エロではありませんが掲載するほうです。
手入力がめんどくさいのでリダイレクトしようかと思って。
思いつかない==知らない
システムコール並の質疑限定で聞いてやるよ
餓鬼共質問し給え
591名無しさん@そうだ選挙に行こう:04/07/11 20:15
システムコール並の質疑ってなんですか?
聞くだけなのかよ
593デフォルトの名無しさん:04/07/11 20:27
> 同じ単語が何回出てきたか調べたあと、その平均を出すためです。

awkで書けよ...。1行でかけるぞ!
>>593
ぼけ は付けないの?
答えるに値する質問ならば答えようではないか!
596デフォルトの名無しさん:04/07/11 20:41
でふぉ名無しに戻った
よし、ガンガン難しい質問してこい!聞き流してやるよ
598532:04/07/11 21:42
>>584
最後をこう変えました。
for ( i = 0; i < WORDS_MAX_NUM; ++i )
{
fprintf(fp,"\n%s---%d", words[i], wordCounts[i]);
}

fclose(fp);

return 0;
}

あとweとwe,が別の単語として扱われてるんで、
while( fscanf( fp, "%s", &buf ) != EOF )
{
StrReplace( String, ",", " " );
    StrReplace( String, ".", " " );
    StrReplace( String, ";", " " );
こうやって置き換えようと思ったんですがうまくいきません。
599デフォルトの名無しさん:04/07/11 22:05
C言語でDLLファイルを読み込むプログラムを作成したいのですが、
アドバイスや参考になるHPがありましたら、お教え下さい
>>532
fscanf()は空白を剥がすが、StrReplace()はきっと空白に置き換えてそのままなのだろう。
>>599
gtkにある
>>599
該当の環境のスレでどうぞ。
603デフォルトの名無しさん:04/07/11 22:06
StrReplaceって何?
>>603
google
605デフォルトの名無しさん:04/07/11 22:08
>>604
いろんなのが引っかかるんだけど。
ペルソナが有力?
>>599
freadとか使えば?
607デフォルトの名無しさん:04/07/11 22:09
>>599
fopenしてfread
608599:04/07/11 22:09
>>601
すみません、「gtk」でぐぐってもよくわからないいんですが、何かの略ですか?

>>602
え!?スレ間違えてますか?
609デフォルトの名無しさん:04/07/11 22:10
>>608
ええ、間違えてます。
もっとレヴェルの高い質問所望
しょぼーん
612デフォルトの名無しさん:04/07/11 22:12
しょもーん
g ガ
t チン
k コ
614599:04/07/11 22:18
>>613
・・・
615デフォルトの名無しさん:04/07/11 22:19
>>614
さっさと出てゆけよ。
int *(*i[100])( char **p);

ってどういう意味????????
617デフォルトの名無しさん:04/07/11 22:22
charのポインタへのポインタ。
618デフォルトの名無しさん:04/07/11 22:22
>>616
関数ポインタの配列
pとiの関係は?
>>616
「intへのポインタを返しcharへのポインタへのポインタを引数に取る関数」へのポインタの配列
621デフォルトの名無しさん:04/07/11 22:24
int *(*i[100])( char **);
これと同じ。pにはなんの意味もない。
いみ、わかんね。
関数ポインタの配列ってナニ?
意味あるの?
624デフォルトの名無しさん:04/07/11 22:32
>>623
便利。
625デフォルトの名無しさん:04/07/11 22:33
>>623
荒らすことが目的なら消えろ。
626デフォルトの名無しさん:04/07/11 22:33
レベルの高い質問まだ?
>>625
おまえが消えろ
>>625
何だよ、おめーの方が荒らしてんじゃん。バッカじゃねーの
関数ポインタの配列って、
配列の中身がポインタで、
そのポインタの指しているのが関数の(先頭)アドレスってこと?
これが間違ってないなら、どういう場面で便利なの?
630デフォルトの名無しさん:04/07/11 22:34
>>629
関数をいっぱい使いたい時。
やさしいC を終えた程度のレベルなんですが
次に読む本でおすすめありますか?
やっぱカーニハンでしょうか?

プログラミングの本ってタイトルから難しいの
多くて、迷います・・・
>>631
つくってわかるC
auther:日下部陽一
>>630
はぁ?
634auth"e"r:04/07/11 22:36
auth"e"r
>>630
複数の関数を選択したい場合が生じるってことは、関数の設計がそもそも杜撰だったってことではないいのですか?
以降、635はスルーで。
637635:04/07/11 22:38
なんで?
なんかヘンなこと言った?
>>635
つまりお前は
if (hoge)
 Hoge();
else
 Hage();
とかやんないんだな
>>635
この手の技法は綿密に設計しとかないと使えません。
釣られるなよ。
変数をテーブル化するのと本質的には変わらん。
なぜ配列というものがあるのか。それの答えが、この問いへの答えだ。
>>638
そのような分岐が不可避になった事例はありません。

>>639
すみませんが、綿密な設計の結果の例を示して頂けませんか?
>>641
それは敗北宣言と受け取って宜しいですか?
644デフォルトの名無しさん:04/07/11 22:43
やっぱり荒らしじゃん・・・
>>632
Amazonで調べてみました
なかなかよさげですね ありがとうございます
なんだ敗北って?
>>642
kansu_table[n]();
>>642
構文解析とか
649641:04/07/11 22:45
え?! 勝利宣言だよ!
650642:04/07/11 22:47
私の質問に答えてくれる人はこのスレにはいないようなのでもう消えます。
他の板を探します。ありがとうございました。
>>650
それは敗北宣言と受け取って宜しいですか?
引数を指定する必要がある関数をポインタ経由で呼び出すとき、引数を指定する必要はあるんですか?
別に質問に答える必要はないしな。
教えてもらいたいなら、それなりの態度があるだろ。
>>652
ある。
教えて君
>>651
だれがどう見ても敗北です。
でも単にポインタだけを指定して引数をあらわに記述しない例をどこかで見たのですが
これは妄想ですか???
>>657
その例を詳しく教えてください。
659デフォルトの名無しさん:04/07/11 22:54
>>657
じゃあ必要な引数がないか、引数リストが省略されていたんじゃないの。
>>657
別の関数ポインタ型にキャストでもしていたんじゃね?

関数ポインタ型は、引数や戻り値まで含めて型宣言されるわけで、
宣言したからにはそのとおりに呼び出さなきゃエラーになるのがC。
>引数をあらわに記述
>引数をあらわに記述
>引数をあらわに記述
>引数をあらわに記述
>引数をあらわに記述
プ
あらまー
663デフォルトの名無しさん:04/07/11 22:57
露とかいてあらわと読むんだよね。
天ぷら君のおかげで知った。
露光の露
露出の露
露骨の露
炉利の露
>>659
>>660

助言ありがとうございます。
「あらわ」で変換すると「新を」がでてくるのはウチのIMEのバグか?
あれ、うちのは粟原とか芦原だ。何でだ
670デフォルトの名無しさん:04/07/11 23:04
>>668
それは あ わ ら だ。
あ ら や だ
し ん だ
673デフォルトの名無しさん:04/07/11 23:23
>>670
南斗水鳥拳!?
お前らちゃんと朝鮮人選挙権を実現できる政党に投票したか?
世界経済共同体党に投票しました。
sprintfってのが便利らしいですね
どう便利なのか教えてみ?
セキュリティー上の各種問題点の原因であるgets()が仕様から削除されてないのはどうしてですか?
作成する全てのプログラムに
高いセキュリティ性が必要であるとは
限らない
>>678
あなたが作成したプログラムについて、(将来にわたって)どのようなプログラムから呼ばれるかを
あなたは完全に把握していますか?
それでもgetsを使いますか?
getsを使うようなアホは即刻クビだから安心汁w
必要もないのにセキュリティを気にする奴は、
セキュアなプログラムを書けない。
682デフォルトの名無しさん:04/07/12 00:31
>>679
リリースしないプログラムの場合、把握できる場合はあるね
BL4でホールピペット使ってしくじるアフォがいてもそんなことが
ホールピペットそのものの販売禁止にする理由にはならないように
オレはプログラマになるつもりは全くないから問題なし
自分で欲しいなぁと思ったものを作るのみ

でもgetsは使わないな
>>681
できる限りセキュアにコードを書く人間と、あなたのような態度の人間では、
どちらがより優れたエンジニアでしょうか?
>>684
まずは、セキュアであるとはどういうことかの見極めから始めよう。
コード単体で見てもセキュアかどうかは見えないよ。
>>685
getsが使われている“単体の”コードはセキュアかどうかを判断できませんか?
そのコードが将来どのような利用をされるかを完全に把握できる神なら安全であると判断するかも知れませんが、
あなたは神ですか?
687677:04/07/12 00:37
私の質問に答えてくれる人はこのスレにはいないようなのでもう消えます。
他の板を探します。ありがとうございました。
688677(本物):04/07/12 00:39
>>687
はいはい、あんたは消えていいから。
>>686
判断できません。
どう使われるか分からないものを、getsがあるかどうかで判断することは不可能です。
>>689
どのような入力がなされるかわからないのに、バッファの制限が破綻しているgetsを使うのですか?
それでも判断が不可能であると主張しますか?
ダンディ坂野
きょうびgetsなんか使わネーヨ(プゲラ
とかいう書き込みが当然返ってくると思ってたのにスゲーがっかり・・・
>>690
セキュリティが問題とならない場面では、べつに構わない。
セキュリティが問題となる場面では、gets使わないことがセキュアである
証明とはならない。
>>693
論点がズレまくってるんですが、
セキュリティが問題になる場面と、そうでない場面をどうやって判断するんですか?
セキュリティが問題にならないとあなたが判断した場面では、あなたはgetsを使いますか?
プログラムは全部外注
>>694
違う違う、いつもgets使うんだよ
うひゃあ
ダメだコリャwww
698532:04/07/12 00:52
完成しました。手伝ってくれた方々どうもありがとうございます。
一応ココにアップしました。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=113
>>696
万が一、あなたが職業プログラマなら、ぜひ勤務先を教えてください。
取引先だったら一大事です。
なるほどね。
だからPGはバカにされるのね。
>>694
他人のシステムの仕様までは知らないし、いずれにせよ
「セキュアとはどういう状態か」というのはそれぞれの仕様で決めるべきで
あって小手先で弄るようなものではない。

俺はgetsは使わないけどな。
バッファオーバフローが気持ち悪いからというだけだけど。
scanfがどうのこうのgetsがどうのこうの
プログラマって勉強しないの?
ここで質問に答えてる人は職業プログラマですか?
705デフォルトの名無しさん:04/07/12 01:31
ここの質問答える人はレベル低いのばっかだよ。
make通らないけど何でとか、そういう質問でないと聞くだけ無駄。
よほど基本的なことでない限り、他の質問スレがいくつかあるからそっち当たってみ。
706デフォルトの名無しさん:04/07/12 01:36

          ┌┬┬┬┐
    ―――┴┴┴┴┴―――――、
.  . /  ̄ ̄ ̄//. ̄ ̄| || ̄ ̄ ̄||| ̄ ||    __________
  ./    ∧// ∧ ∧| ||      |||   ||  /
 [/____(゚_//[ ].゚Д゚,,) ||___|||   || <  >>705を迎えに来ました
. ||_. *  _|_| ̄ ̄ ∪|.|.       |ヽ.__||  \__________
. lO|o―o|O゜.|二二 |.|  和親坂病院 ||
 .| ∈口∋ ̄_l__l⌒l_|___|_l⌒l._||
   ̄ ̄`ー' ̄   `ー'  `ー'   `ー'
707569:04/07/12 01:55
>>698
あぁ……自分で書いといてなんだが、見つけたあともbreakしたほうがいいな。
表示・i3・i4のループは1つでいい。
あと変数名のセンスがばらばらなので、自分の命名に置き換えたほうがええやろね。
>>694
ズレてんのはあんただ。

getsが必要なら使う、不要なら使わん、それだけだろ?
俺は使ったことないがな。
やっぱりレベル低いね
>>684
>できる限りセキュアにコードを書く人間
こんなバカは役に立たね
それが分からんバカはじゃもっと役に立たねぇ
言われたことだけやっとけや
711デフォルトの名無しさん:04/07/12 02:05
> セキュリティー上の各種問題点の原因であるgets()が仕様から削除されてないのはどうしてですか?

順序としてはscanfが先だからです。
うほっ
香ばしい
もっとやれwww
仕様書にgetsを使うなって書いてなければgetsを使うのか。さすが奴隷プログラマ。
思考停止だな。
プログラマの社会的地位が低い理由が分かったような気がする。
状況判断もできずに細部にこだわって結局進捗の守れんやつっているんだよなぁ
テスト用のコードにエラー処理入れようとするやつとか

なにが重要でなにが重要でないかを見極められないやつは奴隷で充分
その上でクライアントからの入力取得にgetsを使おうとするやつは隔離すればよい
プログラムって中国人とかがやるんじゃないの?
こういう形でしか伸びないのか、このスレ。
とりあえずこれ見て落ち着け。

        MMMMMMMMMMM
        MMMMMMMMMMM
       M            M
       M −−    −− M
       M  O      O  M
       M      l      M
      MML           JMM
     MMM L    V    J  MMM
     MM   L       J    MM
           l      l
          /        L
         / --O---O/ /
        / /l     / /
        9m  )     mm (
           ----------
           (   V    )
           l    l    l
           l    l    l
           l    l    l
           l    l    l
          cuuuu cuuuu
>>716
そりゃそうだろ、IT土方は我々中国人にお任せあれ!
中国人はソフトウェアの違法コピーが盛んなので、プログラムもコピペだらけです。
コーディングスタイルに一貫性がありません。
コメントも日本語だったり英語だったり中国語だったりします。
あるいは中国人がGPL汚染から世界を救う救世主なのかもしれないな。
中国人の汚染から世界を救う救世主はどこに?
チベトはもう終わったし…
722デフォルトの名無しさん:04/07/12 08:47
メモリ領域にはどうして
TEXT
DATA
BSS
STACK
HEAP
の5種類しかないんですか?もっと多様なメモリの使い方があっても
いいと思いませんか?
723デフォルトの名無しさん:04/07/12 09:11
うちのには8種類ありますよ
724デフォルトの名無しさん:04/07/12 09:13
ディジタル土方は中国人より日本人向きなのよね。実際。

中国やネパールは人件費安くて、中国人やネパール人の設計者はけっこういるが、
コーダーはほとんど日本人...という変な図式があちこちにある > 国内
725デフォルトの名無しさん:04/07/12 09:15
>>723
その8種類とはどんなものがあるんですか?教えて下さい
3種類ってのもあったな。
>>722
Cのループ制御はどうして、

while
for

の2種類しかないんですか?もっと多様な制御文があっても
いいと思いませんか?
>>579
思いっきりスレ違いだが、別にプログラム組まなくていいんだよ。ほれ!
$ for n in `seq -w 0 52`;do wget http//:www.eroero/img$n.jpg;done
>>727
いまさらCに拡張を求める奴は素人
>>727
多様化するまえに、while があれば済むということに気がつかないか?
>>730
ifとgotoとscanfがあれば済むということに気がつかないか?
733デフォルトの名無しさん:04/07/12 10:10
foreachはきもいからいらない。
ここの連中はdo whileをしらないの?
>>734
いや、お前だけ。
736デフォルトの名無しさん:04/07/12 11:21
質問です
gets()関数についてですが、たとえば・・・・

float a;
char c[100];
printf("数1を代入してください。\n");
scanf("%f",&a);
printf("演算子をひとつ入力してください。\n");
gets(c);

とした場合、演算子が入力できず、

float a;
char c[100];
printf("演算子をひとつ入力してください。\n");
gets(c);
printf("数1を代入してください。\n");
scanf("%f",&a);
のような形でgets(c)の処理を一番前に持ってきた場合入力が可能になります。
gets()関数は、必ず最初に宣言するものなのでしょうか?
後々で宣言してもいい場合何か方法あるの??
すんません、おしえてください。
>>736
scanf()の仕様をよく判っていないなら使うな。その奇妙な振る舞いはscanf()の仕様をお前が判っていないからだ。
gets()は通常使ってはいけない。fgets()で置き換え可能なのでそちらを使うか、他の入力関数を使え。
>>722
何のシステムの話をしているのか知らんが
他所でやれ莫迦。
739デフォルトの名無しさん:04/07/12 11:41
>>736
scanfとgetsを混ぜて使ってはいかん
740デフォルトの名無しさん:04/07/12 11:42
>>736
scanf()が改行コードを読み込んでないから、gets()が
ストリームに残った改行コードを読み込んでしまってると
思われ。
scanfは挙動が把握しにくいから初心者のうちは使わないほうがいいかも。

そのコードは、↓で動くようになると思う。

printf("数1を代入してください。\n");
scanf("%f",&a);
char ch;
printf("演算子をひとつ入力してください。\n");
scanf("%c", &ch);
741722n:04/07/12 12:24
馬鹿ばっかりなスレだな
>>1
743デフォルトの名無しさん:04/07/12 12:36
>>722が馬鹿だという意味では。
馬鹿馬っ鹿り
馬鹿秤
746デフォルトの名無しさん:04/07/12 13:02
状態遷移を表す際、関数ポインタを使って、関数テーブルを組んで、
switch文による冗長な表現をしないで済むようにするテクニックがあるそうですが、
テーブルを組むところがわかりません
何かよい実例など、ないでしょうか?
たとえば
void func1(void)
{}
void func2(void)
{}

typedef void (*FUNC)(void);
const FUNC f_ar[] =
{
func1,
func2,
};

/* 呼び出し */
f_ar[0]();
>>747
いちいち typedef すんな ぼけ
ぼけがでてきてから極端に低レベルになったな。
全くだ。特にスルーできない>>749-750辺り
751スレ違いですけど:04/07/12 14:38
この前、遊びで英語外来語を使わずにプログラミングの話をしようって事に
なったんですけど結構面白かったです。

お金帝国、視力検査言語、機械語の翻訳化、教室、たすたす、直接ぺけ
など、色々面白い単語が出てきました。
でも、ほとんど会話になりませんでした。
板違いです
>>751
お金帝国 これなに?
視力検査言語 わかったC言語でしょ
機械語の翻訳化 逆アセンブルのこと?
教室 教室は教室?
たすたす C++でしょ あれインクリのこと?
直接ぺけ なにこれ?
DirectX
教室は class だろうたぶん。
翻訳「化」ってなんだろうな。化をつけざるを得ない状況ってなんだ。
このスレは700過ぎると荒れるのね。
教室は class room だろ。
class ならむしろ 教科 だ。
お金帝国→金の帝国→北朝鮮
#include <stdio.h>
#include <stdlib.h>
struct btree{
unsigned int ipadd;
unsigned int id;
};
struct btree *talloc(void)
{
return malloc(sizeof(struct btree));
}
main(){
FILE *fp;
struct btree *root;
root=talloc();
fp = fopen("aaa.txt","r");
fscanf(fp,"%u",root->ipadd);
fclose(fp);
上記のプログラムを実行するとコアダンプしてしまいます。
root->ipaddが怪しいと思うのですが、どのようにすれば解決しますでしょうか(ipaddに値を格納したい)?
アドバイスお願いいたします。
760デフォルトの名無しさん:04/07/12 17:07
>>759
&root->ipadd
レスありがとうございます。できました。
&(*root).ipaddでも同じですよね?
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=255&fi=no
この後にリストに格納された単語をソートを使って辞書順に並び替えたい
のですが、どうもうまくいきません。教えてください。
>どうもうまくいきません。教えてください。
そのうまくいかない、ソートのプログラム部分も
晒さないとだれも教えてくれない悪寒・・・
>>762
マルチいくない。
宿題丸投げイクナイ。
>>763さんのアドバイスにレスしないイクナイ。

で、答
void sort_list(Node *head){
Node *current_node, *sorted_node, *min_ptr, *temp;

if(head->next->next == head->next) return;

sorted_node = head;
while(sorted_node->next->next->next != sorted_node->next->next){
min_ptr = sorted_node;
current_node = sorted_node->next;
while(current_node->next->next != current_node->next){
if( strcmp(min_ptr->next->c, current_node->next->c) > 0)
min_ptr = current_node;
current_node = current_node->next;
}
temp = min_ptr->next;
min_ptr->next = min_ptr->next->next;
temp->next = sorted_node->next;
sorted_node->next = temp;

sorted_node = sorted_node->next;
}
}
>>764を自動翻訳にかけてみた。(ただし %s/_/-/g)

無効の種類リスト(ノード*頭){
ノード*-流れノード、*にソートされたノード、
場合(頭―次に>―次の==頭>―nexはノードをソートしました>=頭)
一方(ソートされたノード>-次に―次に>―ソートされたn min-ptr=ノード>)
ソートされた現在のノードの=ノード>-次、一方(現在のノード>-次に―次に>)
場合(strcmp(min-ptr>-次に―c(野良犬のmin-ptrの=の現在のノード);
現在のノードの=の現在のノード>-nex}臨時職員=min-ptr>-次に;
min-ptr>-次の=min-ptr>-次に―n臨時職員>-次のソートされた=ノード>-次に;
ソートされたノード>-次の=臨時職員;ソートされたソートされたノードの=
}
}
char s[256];
の様に変数を宣言するとき、
数字256の部分は最大でいくつまで指定できるんでしょうか
限界とかありますか?
プラットフォーム・コンパイラによる。
ただし一般的にはそれほど大きな値は指定するべきではない。
大きな領域をとる場合mallocを使う。
>>767
さんくすです
769デフォルトの名無しさん:04/07/12 20:48
>>767
「大きな領域」の基準が不明瞭な処理系依存になる
目的により static や auto でリンカ側に調整させるべき
俺的にはスタックにはchar buf[8096]が許容範囲だな。
別に根拠はないが。
>>769
使い捨てアプリでもない限り
「大きな領域」はstaticやautoには取らないだろ。
どっちにしてもメモリ効率悪すぎ。
ギガ単位のファイル扱うならファイルにマップすりゃいいし。
772デフォルトの名無しさん:04/07/12 20:59
>>771
だから、何バイトが境だよ?
773デフォルトの名無しさん:04/07/12 21:00
アルバイト
>>772
自分で線引きできないなら>>770に倣っとけ。
喪前は8096バイト以上使用禁止。
>>774
はいはい、お見事なお答えでやんす (プ
>> 770
8096て何?残りの96バイトは何用?
8192の残りね。
>>776
ヘッダー用だぼけ
>>776
放っといてやれよ
リンカのマニュアル読めないんだからw
こんな質問に答えなんか無いだろ?バカ?
>>779
ゲラゲラ
もしスタックに置くのなら、リンカなんか関係ないだろ。
ここはポインタに苦手意識を持つ人の集うスレですね
>>781
関係あるかどうかが

 リ ン カ の マ ニ ュ ア ル に 書 い て あ る

わけだが (ハライテー
ひとり香ばしい人は何がしたいのですか
学生さんが引っ込みがつかなくなっただけだろ。
わざとバカな事を言ってとりあってもらえるのが嬉しいだけの人間失格者でしょう
788デフォルトの名無しさん:04/07/12 21:29
>>786
線引きできると思うなら荒らしてないで自分でしてみたら?
( ´,_ゝ`)
790デフォルトの名無しさん:04/07/12 21:33
非科学的厨とぼけ厨の戦いが繰り広げられる予感!
ふと思ったんだが、このスレで毎日のように繰り返されてる
しょーもない煽り合いって全部一人の自演じゃないかな。
>>792
何を今更。
ここは精神科患者のレス療法用のスレですのでお察っし下さい
>>792
そうだよ。たまに面白がって乗っかっていく奴もいるが、
全部と言わずもほぼ一人。
796デフォルトの名無しさん:04/07/12 22:02
どうして報道ステーチョンの印象操作ってあんなにキモいんですか?
>>796
お前も負けず劣らずキモい
>>797
大躍進で良かったね(プ
799デフォルトの名無しさん:04/07/12 22:31
>>791
おやおや、自分じゃ敵わないと見るや ぼけ 先生にすがるしかなくなったか

# なっさけねー 人間どんなに落ちぶれても、ああはなりたくないね
# 言い返すのに失敗することと自分の間違いを認めることくらい区別できろよまったく
>>799
ぼけ先生、自演ご苦労様です!プゲラッチョ

# カッコイイー 人間どんなに落ちぶれても、ぼけ先生みたいになりたいね
# 空白あけることとscanfの間違いを認めることくらい区別できろよまったく
C言語で、質問が・・・・


すいません。部屋間違えました・・・
非科学的ぼけ発生中
このスレはPart 84で終わりました
ほんとは前スレで終わるはずだった
805デフォルトの名無しさん:04/07/12 23:09
非科学的ぼけはHSP信者
前スレは綺麗に終わったのに馬鹿がスレ立てたせいでこんな展開に・・・
次スレはC言語なら ぼけ に聞け! にしよう
次スレは C言語なら ぼけ に聞く! にしよう
scanf goto pointer buf
ネタは尽きた

(・∀・)埋め!
はえーよ!
>>809
getsもそこに追加してくれ。
812デフォルトの名無しさん:04/07/13 09:24
上の方にちょこっと書いてあった mblen ってどういう使い方するんでしょうか?
man みてもよくわかりません。コード(sjis,euc,utf)がいったいなにになるのかとか?
具体的にどのように使われるのか偉い人教えてください。
813デフォルトの名無しさん:04/07/13 09:37
> mblen ってどういう使い方するんでしょうか? man みてもよくわかりません。

man読め
>>813
オレもだが、わかんないヤシはでてこなくていいよ。
>>812
Shifted JIS だとか日本語EUCだとか意識せずに
複数バイト文字列を処理したいなぁ、とか思ったときに使う。
(実際の文字コードは実行時の環境で決まり、
 自動判別してくれるわけではない)

例:
  //
  // マルチバイト文字列の文字数
  int mbstrlen(const char *strbuf)
  {
    int ct = 0, len;

    while ((len=mblen(strbuf, MB_CUR_MAX)) > 0) {
      ct++;       // 文字数カウント
      strbuf += len; // 次の文字
    }
    if (len < 0)
      return -1;   // 文字列誤り
    return ct;
  }
len = mblen("あいうえお",5);
だとlenは4になるのかな?
やれや池沼
いや、面倒だし。
だから池沼って言われるんだ
いや、あんたに池沼とか言われても、どうってことないし。
どうせ誰に言われてもどうってことないんだろ。池沼なんだから
822デフォルトの名無しさん:04/07/13 13:27
循環リストはどのようなアプリケーションに向いているのですか?
Cスレをデジャヴのループに陥れるのに向いています。