トップページ⇒tech
1001コメント280KB

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

レス数が1000を超えています。これ以上書き込みはできません。
0001v(^o^i)dNGNG
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

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

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

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

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

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

C言語なら俺俺に聞け! Part 74
http://pc2.2ch.net/test/read.cgi/tech/1078147042/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
0002scanf名無しさんNGNG
【コンパイラ】
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
0003デフォルトの名無しさんNGNG
乙うんこ
0004デフォルトの名無しさんNGNG
scanf厨やgets厨がいるので、なるべくscanf getsは使用しないように。
わからない人は↓を参考に。

int x,y;
char buf[16];
fgets(buf,sizeof(buf),stdin);
if(sscanf(buf,"%d %d",&x,&y) != 2) エラー処理
0005デフォルトの名無しさんNGNG
>>4
入力行がバッファサイズより大きい場合はどうするんですか?
その例ではintだからたまたま溢れませんが。
0006デフォルトの名無しさんNGNG
fgetsした文字数より多いことはないので溢れないことを保証したコードが書ける。
0007デフォルトの名無しさんNGNG
で、fgetsが一行丸々読み込めたかどうかをどうやって保証するんですか?
0008デフォルトの名無しさんNGNG
if(文字数が一杯でない || 最後の文字が改行)
 一行全部読み込めた
else
 まだ残りがある
0009デフォルトの名無しさんNGNG
では>>4はバグがありますね。
しかもgets||scanfと違って素通りする分非常に悪質ですね。
0010デフォルトの名無しさんNGNG
gets||scanfで素通りできるコード書いてくれぇ
0011デフォルトの名無しさんNGNG
>>10
その前に>>4のバグ修正をしたらどうでしょう?
0012デフォルトの名無しさんNGNG
仕様もわからないのに、どんなバグがあるというのでしょう?
0013デフォルトの名無しさんNGNG
初心者スレの初心者レベルの質問で逃げますか・・・
しようがないですね。
0014デフォルトの名無しさんNGNG
if(2 != scanf("%d %d", &x, &y))
0015デフォルトの名無しさんNGNG
>>14
くだらなくても、しようもないと答えてやれ
0016デフォルトの名無しさんNGNG
■お題
標準入力から単語二つからなる行を読み込み
辞書順で若い方を標準出力に表示しろ。
入力行の形式は"WORD1,WORD2\n"とする。
形式的におかしい行はエラーを出力しろ。
単語の長さに制限はないものとする。
入力は複数行あるものとする。
0017デフォルトの名無しさんNGNG
>>16
宿題はこちら
http://pc2.2ch.net/test/read.cgi/tech/1078157730/l50
0018デフォルトの名無しさんNGNG
構造体のメンバが4つあって、それの3つが構造体で、その中の一つの中にまた構造体があって、
関数ポインタも共用体もまじってて、defineで色々名前変えてるし
C言語1ヶ月の俺にはほとんど理解できないコードを今一生懸命解読してます。

まいる。
0019デフォルトの名無しさんNGNG
>>18
ドライバでは、そんな複雑な構造体がよく出て来るけどな。
0020デフォルトの名無しさんNGNG
データ構造を空間的に頭に思い描くことができるような
イメージトレーニングすればそんなの直ぐになれるよ。
0021デフォルトの名無しさんNGNG
右脳ですか?
0022デフォルトの名無しさんNGNG
よく出ている質問でしたらすみません。
その場合は解説しているページに誘導して頂けたらうれしいです。

BASICの「RIGHT$」「MID$」「LEFT$」と、
同じような動作をさせるには、
どうプログラミングしたらよいのでしょうか?

よろしくお願いします。m(_ _)m
0023デフォルトの名無しさんNGNG
>>22
多バイト文字も考慮するわけ?エンコードはどうする?
0024デフォルトの名無しさんNGNG
>>23
デフォルトは自動選別でお願いします。
IEの設定で選択できるくらいの種類だけでかまいません。
0025デフォルトの名無しさんNGNG
fgets() + strtok()を使ってるんだがだめか?
0026デフォルトの名無しさんNGNG
>>25
なに?それ
0027デフォルトの名無しさんNGNG
ポインタが全然理解できません。 だれかわかりやすく教えて(;´д⊂)
0028デフォルトの名無しさんNGNG
>>25
普通です。
0029デフォルトの名無しさんNGNG
ポインタは考えるんじゃない、感じるんだ!
0030デフォルトの名無しさんNGNG
>>27
http://kmaebashi.com/programmer/pointer.html

0031デフォルトの名無しさんNGNG
ポインタ王を探すのだ・・・
003227NGNG
>29,30
うー感じてきます、読んできます\n;
0033デフォルトの名無しさんNGNG
>27さんではないですが、

>はじめに
>C言語は、現在広く使用されている言語である。
しかし、Cは、より良い言語を開発しようという目的の下に開発された言語ではなく、
UNIXを開発するために、いわば「いきあたりばったり」で開発された言語である。
ゆえに、ダーティな構文や、コンパイラの実装を容易にするために手を抜いた部分が存在する。

>本文では、そのような「Cの暗部」のうち、「配列とポインタ」について述べる。

>対象読者は、Cをそれなりに習得しており、かつ、以下のような疑問を感じる人である。

>・Cの宣言では、[] は* よりも優先順位が高い。 ゆえに、char *s[10]; という宣言は、
「char へのポインタの配列」を意味する ---逆じゃないか?

いきなりここで躓きました・・・orz
0034デフォルトの名無しさんNGNG
>>33
実際に動かしてみれば分かるよ
0035デフォルトの名無しさんNGNG
ついでにアセンブラも覚えれば腕も上がる
コンパイルでアセンブラソースを吐かせてどんな動きしてるかとかな
0036デフォルトの名無しさんNGNG
>>18
>defineで色々名前変えてるし

この一文から、何か良からぬ事をやってそうな印象を受けるのはオレだけか?
0037デフォルトの名無しさんNGNG
>>22
>BASICの「RIGHT$」「MID$」「LEFT$」と、
>同じような動作をさせるには、
>どうプログラミングしたらよいのでしょうか?

1.それぞれの関数がどの様な処理を行っているのか?
  を紙などに自分が理解できる言語(日本人の場合はおそらく日本語)で書く。
2.1で書いたものをCに翻訳する。
0038デフォルトの名無しさんNGNG
>>36
いや、単純に #define を見慣れていないだけだろ。
stdin だって #define で色々名前変えていると言えなくもない。
003918NGNG
何でわざわざ名前を変えるんだよ。最初に決めた名前のまま使えよカスが。
まぁそれなりの理由があるんだろうけど、今の俺にはその理由とやらは理解出来ない。
0040デフォルトの名無しさんNGNG
>>39
そこまでいうのなら、ソースをうpしてみな。
皆がお前と同じ意見かどうかが分かる。
004118NGNG
でもこの言語を使いこなす事が出来たら、大きなパワーを手に入れることが出来るような気がする。
今までJavaを多少やってたけど、Cの方が全然難しいと思うから
その難解さが上記のような気持ちを、錯覚か?を起こさせてるのかもしれない。
004218NGNG
正直うpしたい気持ちは山々なんですが、守秘義務が有るので無理です。
後ヘッダファイルが8つ程と、Cファイルが30個程有るので大きすぎるし。
0043デフォルトの名無しさんNGNG
抜粋汁
0044デフォルトの名無しさんNGNG
>>41
>言語を使いこなす事が出来たら、大きなパワーを手に入れることが出来る
>Cの方が全然難しいと思うから

別に難しくないし、大きなパワーも手に入らないと思うよ。
0045デフォルトの名無しさんNGNG
うかつに C やるとおなかが大きくなるかも。。。
0046デフォルトの名無しさんNGNG
今やってる仕事で使っているデータ構造、
構造体のメンバ12個全て構造体で、その中には更に構造体の配列が入ってるものが多数。
全体で6KBほどだけど、どこにどうStubが入るのやらぱっと見じゃもう、全然わからねぇよ。
こんなもん、そのままバイナリファイルに落とすんだもんなぁ…
0047デフォルトの名無しさんNGNG
f() * g()
この式の関数の呼び出し順序は規定されていないようですが、
f() && g()
この式の場合はどちらの関数が先に呼び出されるのでしょうか?

関数の呼び出しも&&演算子のの評価順と同じく左から呼び出されるのでしょうか?
それとも関数の呼び出しはコンパイラ依存で戻り値の評価が左からなのでしょうか?
0048デフォルトの名無しさんNGNG
>>47
f() が先に呼ばれる。
f() が 0(偽)を返せばその式の真偽が決定されるため、
g() は評価されない。
これをショートサーキットという。
004947NGNG
>>48
右からor規定されて無いだったらプログラミング言語Cを燃やしてる所でした。
ありがとう。
0050デフォルトの名無しさんNGNG
>>49
おまいは本よりも2chを信じるのか?
それは阿呆のすることだぞ。
自分でちゃんと規格なりコンパイルしてみるなりして
確認する癖をつけたほうがいいぞ。
0051デフォルトの名無しさんNGNG
コンパイルしてみるだけでは確認にはまったくならんが
0052デフォルトの名無しさんNGNG
ANSI Cの規格書を読んだことがあるのは俺を除いて日本に34人しかいないけどな。
0053デフォルトの名無しさんNGNG
君を入れても34人だったりして。
0054デフォルトの名無しさんNGNG
#include<stdio.h>
#define char_ int
#define int_ char
char* main( void ){
char_ char__ = (int_)'\0';
int_ int__ = (char_)char__;
int__ ^= 1;
printf(char__?"%d%d%d%d":"%#X+%#X=%#x",char__,int__,char__+int__);
}
005547NGNG
結局どっちなんでつかヽ(`∧´)丿
0056デフォルトの名無しさんNGNG
f(){exit(1);return 1;}g(){return 1;}main(){printf("%d",f()&&g());}
0057デフォルトの名無しさんNGNG
f(){exit(1);return 1;}g(){puts("@")return 1;}main(){printf("%d",f()&&g());}
0058デフォルトの名無しさんNGNG
f(){put("f");return 1;}g(){puts("g")return 1;}main(){printf("%d",f()&&g());}
0059デフォルトの名無しさんNGNG
>>55
いや >>48 で合ってるよ、規格上。
0060デフォルトの名無しさんNGNG
int*******************
**********************
**********************
**********main()
{putchar("*********"[sizeof("*****")]);}

なかなかいいプログラムができました。
0061デフォルトの名無しさんNGNG
BCCでコンソールアプリを作ってるんだけど、
起動時にDOS窓をアクティブにしないようにするにはどうすりゃいいの?
さっきからググってるけど関係ないサイトばっかりだ…欝
0062デフォルトの名無しさんNGNG
bcc /?
0063デフォルトの名無しさんNGNG
>>61
http://usr_vogel.at.infoseek.co.jp/Compiler/BCC/LinkerOption.html
0064デフォルトの名無しさんNGNG
>>61
これ?
bcc32 -laa
006561NGNG
ゴメソ…もうちょっと丁寧に書いたらよかった…
外部アプリから自作アプリ(CUI)を起動するとき、コマンドラインで
-hoge が渡されたらDOS窓を表示するけど、外部アプリのウィンドウフォーカスを持っていかれないようにする
っていう処理をしたいんだ。

0066デフォルトの名無しさんNGNG
外部アプリが固定なら、SetActiveWindowとかで戻してやればいいんじゃない?
0067デフォルトの名無しさんNGNG
外部プログラムも自作のものなら
CreateProcessする時に、ウインドウを表示しないようにすればいいかと。
006861NGNG
>>66-67
外部アプリは固定でないし、自作でもないんですよ。
それにSetActiveWindowだと(外部アプリが)一瞬フォーカスが奪われません?
0069デフォルトの名無しさんNGNG
まだ続くようならスレ違いなので環境依存スレかどっかへどうぞ
007061NGNG
×外部アプリが
○外部アプリの
007161NGNG
スレ違いでしたか…
それではどっかへ逝ってきます。
ありがとうございました。
0072デフォルトの名無しさんNGNG
jpegを表示するソース落ちてませんか?
ウィンでお願いします
0073デフォルトの名無しさんNGNG
>>72
こちらでどうぞ
http://pc2.2ch.net/test/read.cgi/tech/1077470361/l50
0074デフォルトの名無しさんNGNG
int main()
{
(***********************printf)("hello world\n");

return 0;
}

なかなかいいプログラムができました。
0075デフォルトの名無しさんNGNG
Cygwinで、VCをエディタとして使いたいのですが可能ですか?
0076デフォルトの名無しさんNGNG
>>75
VisualStudioをエディタとして使うことならできるんでないかい?
詳しくはスレ違いなどでVCスレなどでどうぞ。
0077デフォルトの名無しさんNGNG
>>75
alias VC=vi
0078デフォルトの名無しさんNGNG
>>76-77
藻前ら優しすぎ

>>75
スレ違い

で十分だろ?
0079デフォルトの名無しさんNGNG
っていうか、わざわざ使いにくいエディターつかってどうするよ。
viにしろ
0080デフォルトの名無しさんNGNG
梃子で。
0081デフォルトの名無しさんNGNG
>>74を見てて思ったんだが…

((printf+1)-1)("hello world\n");
は規格上NGでいいんだよね?
配列の一個オーバーは可能だけれども…これ、配列じゃないし
0082デフォルトの名無しさんNGNG
>>81
それ以前に、関数ポインタに加減算をすることは出来ない。
関数の大きさっていくつか分かるか?
0083デフォルトの名無しさんNGNG
>>82
>>81じゃないが、そういえばそうだ。
0084デフォルトの名無しさんNGNG
おまえら...だめすぎ。
008581NGNG
「関数自体の大きさ」は意味がわからないが
「関数へのポインタの大きさ」ならば意味はわかる

関数ポインタに加減算することが出来ないとすると
void (*arr[10])(void); みたいな
関数ポインタの配列は作れないことになる
なぜならarr[i]は*(arr+i)と等価だから
ってことはやっぱり関数ポインタに加減算は可能になる

ISO/IEC 9899:1999
6.3.2.3の8 関数ポインタ自体の説明
6.5.6の8と9 ポインタの加算と減算の説明

この二つを読んでみた結果そう解釈したんだけど…ちがう?
008681NGNG
こういうときの引用ってOKなんだよね?たしか…

6.3.2.3の8
A pointer to a function of one type may be converted to a pointer to a function of another
type and back again; the result shall compare equal to the original pointer. If a converted
pointer is used to call a function whose type is not compatible with the pointed-to type,
the behavior is undefined.

6.5.6の8抜粋
If the pointer operand points to an element of
an array object, and the array is large enough, the result points to an element offset from
the original element such that the difference of the subscripts of the resulting and original
array elements equals the integer expression.

この解釈、ちがう?(英語苦手で自信なし)
0087デフォルトの名無しさんNGNG
printf+1は.objで定義されたprintfの次の関数へのポインタに決まってるだろ。
ただし、次にどの関数が来るかは完全に処理系依存になってしまうが。
008881NGNG
>printf+1は.objで定義されたprintfの次の関数へのポインタに決まってるだろ
これ自体が処理系依存のような気がするんですが…
どこに書かれているか教えていただけますか?
0089デフォルトの名無しさんNGNG
>>88
ネタをネタと(ry
0090デフォルトの名無しさんNGNG
http://sikaku.gr.jp/nj/index4.html

ここのC三級とるにはどのくらいできればいいのでしょうか?
0091デフォルトの名無しさんNGNG
http://sikaku.gr.jp/nj/232.html
ここの3級のとこ見て、知らない用語があったらあきらめろ。
あと歴史もいるぞ。
0092デフォルトの名無しさんNGNG
>出題範囲 ライブラリ関数 char *gets(char *s);
これ試験に出るからよく覚えとけよ
0093デフォルトの名無しさんNGNG
>>92
2級の範囲だし
0094デフォルトの名無しさんNGNG
そんなヘボい検定受かったところで、役に立たん。
と日下部先生がおっしゃってましたよ。
0095デフォルトの名無しさんNGNG
Braian W. Kernighan and Dennis M.Ritchie The C Programming Language Second Editoin
を持っている人っています?
一部では糞本って言われているけど・・
0096デフォルトの名無しさんNGNG
>>95
恥ずかしながら原書を読んだことはないけど、
日本語訳の『プログラミング言語C 第2版』は糞で間違いない。

訳本の改訂版がだいぶ前にでたみたいだけど、そっちは知らん。
聞くところによるとそっちも糞らしい。
0097デフォルトの名無しさんNGNG
確か原本は1988年くらいに出た15年以上前の本だから、
もうさすがに古いだろうね・・・
0098デフォルトの名無しさんNGNG
関数の引数に、構造体で宣言したものを持っていくことはできるのでしょうか?
0099デフォルトの名無しさんNGNG
>>98
できる
0100デフォルトの名無しさんNGNG
main内で構造体の宣言して、関数funcにそれを(複数)持っていきたいのですが、
何がいけないのかできません
_| ̄|○
0101デフォルトの名無しさんNGNG
コードさらせ
0102デフォルトの名無しさんNGNG
もしかして、引数の中で、もう一度構造体の宣言をするのでしょうか?
0103デフォルトの名無しさんNGNG
>>102
しないしない。とっととコード晒せ。
0104デフォルトの名無しさんNGNG
struct yourst{};

void yourfunc(struct youst st){};
0105デフォルトの名無しさんNGNG
必要な部分だけ?でも何処が間違ってるか分からないから全部でしょうか?
なんなに長くはないですが
0106デフォルトの名無しさんNGNG
struct yourst{};
はmainの外に書け
0107デフォルトの名無しさんNGNG
>>105
問題が起こったらその問題を検証する最小限の別のサンプル作る習慣をつけるべし。
ここで質問するかどうかに関係なくね。
0108デフォルトの名無しさんNGNG
#include ~~~省略

typedef struct
{
int n1;
int n2;
}N;

func(abc.n1,abc.n2)
{
//省略
}
int main()
{
N abc;
abc.n1=1;
abc.n2=2;
int BB;
BB=func(abc.n1,abc.n2);
}

こんな感じです。
0109デフォルトの名無しさんNGNG
構造体以前の問題だな。関数funcの定義が変。
0110デフォルトの名無しさんNGNG
#include <stdio.h>

/*typedef struct
{
int n1;
int n2;
}N;*/

int func(int n1,int n2)
{
int BB;
BB=n1+n2;
return BB;
}
int main()
{
/*N abc;*/
int n1=1;
int n2=2;
int BB;
BB=func(n1,n2);
printf("%d\n",BB);
}

これが構造体を使う前のものです。
この状態ならばエラーは出ません。
0111デフォルトの名無しさんNGNG
N abc;
のNはintに相当し、
abcはn1に相当する
0112デフォルトの名無しさんNGNG
>>110
ところで
int func(int n1,int n2)
{
int BB;
BB=n1+n2;
return BB;
}
を
int func(int nnnnn,int mmmmm)
{
int BB;
BB=nnnnn+mmmmm;
return BB;
}
に変えてもちゃんと動くことは理解してる?
0113デフォルトの名無しさんNGNG
何がやりたいのかよく判らんが
↓これじゃだめなの?

typedef struct
{
int n1;
int n2;
}N;

func(int n1, int n2)
{
int BB;
BB=n1+n2;
return BB;
}
int main()
{
N abc;
abc.n1=1;
abc.n2=2;
int BB;
BB=func(abc.n1,abc.n2);
}
0114デフォルトの名無しさんNGNG
>>112さん
なるほど、知りませんでした。つまり型があってさえいれば変数名は変えてもいいのですね。
なんか解決できそうです。

>>113さん
ここでは最低限のものしかないてないので分かりずらかったですが、func内で
N abc意外にN defや N ghiと複数使う予定なのでこれだと
変数名が重なっちゃいます

もう一度頑張ってみます
0115デフォルトの名無しさんNGNG
>>113
int main()
(プ
0116デフォルトの名無しさんNGNG
>変数名が重なっちゃいます
どこに重なるんだろう?
問題ないと思うが。

typedef struct
{
int n1;
int n2;
}N;

func(int n1, int n2)
{
int BB;
BB=n1+n2;
return BB;
}
int main()
{
N abc, def, ghi;
abc.n1=1;
abc.n2=2;
def.n1=3;
def.n2=4;
ghi.n1=5;
ghi.n2=6;

int BB, CC, DD;
BB=func(abc.n1,abc.n2);
CC=func(def.n1,def.n2);
DD=func(ghi.n1,ghi.n2);
}
0117デフォルトの名無しさんNGNG
普通
void main()
だろ?
0118デフォルトの名無しさんNGNG
defやghiはfunc内で宣言して、使う予定です。main内ではabcのみとなります。
0119デフォルトの名無しさんNGNG
>>94
でも受けさせられたんだろ?
0120デフォルトの名無しさんNGNG
>>107
それ以前に、こんな基本的な文法の質問がでるってことは、
参考にしている本にそれが出てないってことでしょ?
その本の名前をまず書かせたほうが今後のためだぞ。
0121デフォルトの名無しさんNGNG
func(N abc)
{
N def, ghi;
int BB;
BB=abc.n1+abc.n2;
return BB;
}


abc.n1=1;
abc.n2=2;
BB=func(abc);
0122デフォルトの名無しさんNGNG
>>119
いや、それは学校の方針で受けることに決まってたので...。
合格率は前年度に比べて2倍にアップしましたよ!
0123デフォルトの名無しさんNGNG
ふつう、こんなダサイ書き方はしないよな。
> abc.n1=1;
> abc.n2=2;
> def.n1=3;
> def.n2=4;
> ghi.n1=5;
> ghi.n2=6;
常識的に、以下のように書く。
abc = {.n1=1, .n2=2};
def = {.n1=3, .n2=4};
ghi = {.n1=5, .n2=6};

格段に見やすい!
0124デフォルトの名無しさんNGNG
>>123
また、どうせ関数に渡すためだけにやってるんだったら、
わざわざ、
abc.n1=1;
abc.n2=2;
def.n1=3;
def.n2=4;
ghi.n1=5;
ghi.n2=6;
func(abc.n1,abc.n2);
func(def.n1,def.n2);
func(ghi.n1,ghi.n2);
などと書くのはまぬけ。
ふつうのまっとうなCプログラマーなら以下のように書く。
func((N){.n1=1, .n2=2});
func((N){.n1=3, .n2=4});
func((N){.n1=5, .n2=6});

おまえられヴぇるひくすぎ!
0125デフォルトの名無しさんNGNG
> 変数名は変えてもいいのですね。

「仮引数」と「実引数」という言葉ぐらい覚えろ!
あと、おまえの参考にした本の名前を言え!
0126デフォルトの名無しさんNGNG
>>124
その構文はきもすぎて嫌
0127デフォルトの名無しさんNGNG
>>124
いいえ。常識的にはこう書きます。
おまえがダメすぎなだけ。
0128デフォルトの名無しさんNGNG
常識ならN abc={1,2}, def={3,4}, ghi={5,6};じゃなかろうか。
0129デフォルトの名無しさんNGNG
Cを一昨日始めたばっかりなんだけど、Cでファイルの読み書きってどうやるの?
0130デフォルトの名無しさんNGNG
>>128
いや、変数に入れる必要ないだろ?
関数に渡すだけなら。
0131128NGNG
いやこうだな。構造体なんていらない。
BB=func(1,2);
CC=func(3,4);
DD=func(5,6);
0132128NGNG
>>130
うん。
0133デフォルトの名無しさんNGNG
>>129
「はじめたばかり」は何の言い訳にもなりません。
はじめたばかりのひとも10年やってるひとも使う関数は同じです。
また、質問の態度に関しても同じものが適用されます。

で、まずオマエの参考にしている書籍やWebの名前を書け!
そしたらおしえてやる。
0134デフォルトの名無しさんNGNG
>>129
stdin,stdoutをfreopenしてprintfやscanfを使う。
0135デフォルトの名無しさんNGNG
つかうなよぼけ > scanf
0136デフォルトの名無しさんNGNG
>>128
そのやり方は初期化では使えても代入では使えない。
0137デフォルトの名無しさんNGNG
>>136
そうなんだけど、初期化でいいと思ったんで。
0138デフォルトの名無しさんNGNG
おまえら、日下部先生の本でも読んで出直してこい。

構造体もちゃんと説明していない本読んでるのか?
0139デフォルトの名無しさんNGNG
そうして一日中噛り付いてるんだな
0140デフォルトの名無しさんNGNG
>>139
営業に必死なんでしょうかね。
0141デフォルトの名無しさんNGNG
C言語というかプログラム全般についてですが、スキルを上げる
道順 なんてありますか?

やらせたい処理の順序、使う手法、必要になるであろう文等、概要は
頭では分かっていますが、実際書こうとするとくだらない細かい所、
データのやりとりのやり方等で頭が混乱することが多いです。
(今日も配列からデータを取り出して処理し、再配列するプログラムを
追加するだけで一日使ってしまいました・・。

ある程度必要になる文章を憶えるしかないんだろうか、と思ってますが、
他の人はどうなんでしょうか。
0142デフォルトの名無しさんNGNG
とにかく使う。これしかない。
0143デフォルトの名無しさんNGNG
>>141
みんな最初はそうだよ。
例えば初めて英語を勉強するところを想像してみな。
最初はくだらない一言を話すのにも苦労するだろうけど、上達すると
もっと簡単に、もっと複雑な会話が出来るでしょ。

だから、ひたすら書いて読むこと。
読む方に関しては、お気に入りのプログラムを見つけて、それをゆっくり
読み進めるのが良いと思う。
0144デフォルトの名無しさんNGNG
> みんな最初はそうだよ。
そうでもない。
scanfを使っているような本で勉強するからそうなるだけ。
0145デフォルトの名無しさんNGNG
>>140
営業ってことは、どこかの出版社の人間?
0146デフォルトの名無しさんNGNG
そして2chを過信しすぎないこと
void main(void)だろうがint main()だろうがscanfだろうがたいした問題ではない
0147141NGNG
>>142,143
どうもありがとうございます。
やはり憶えるのが大事なんですね。
配列の扱いが特に苦手なんで、そういうプログラムを
探して勉強します。
0148デフォルトの名無しさんNGNG
大した知識ないやつに限って
void main(void)やら int main()やら
scanf やら if(n>0)とかつまらんところにケチつけたがるんだよな。
叩きたいけど、それだけの知識しかないから。
0149デフォルトの名無しさんNGNG
もういいじゃん。
その手の話題は過去ログに腐るほどあるし。
0150デフォルトの名無しさんNGNG
>>148
奥が深い症候群 だな
0151デフォルトの名無しさんNGNG
質問お願いいたします。
memmoveとmemcpyですが、memmove
だけで事足りると思うのですが、となると
memcpyの存在意義はなんなのでしょう?
また、文字列用にstrcpy等の関数がありますが
これもmem〜系関数で十分間に合うと
思うのですが。。。
0152デフォルトの名無しさんNGNG
>>151
あなたの存在意義も謎ですね
0153デフォルトの名無しさんNGNG
memcpy の方が速い。

strcpy の代わりに memcpy を使うためには
文字列の長さ+1を先に計算しておかないといけない。
0154デフォルトの名無しさんNGNG
>>151
memmove(d,s,n);
 まずsから空いているメモリtにコピーしてから、tをdにコピーするので遅い。
memcpy(d,s,n);
 いきなりsからdにコピーするので速い。
strcpy(d,s);
 memcpyのnの代わりに、sの0x00を検出してからdにコピーする。
0155151NGNG
>>153-154さん
レスありがとうございます。
すごくよくわかりました。一長一短というか
ちゃんと用途がある(特化してる)のですね。

ところで今VC6.0を使っているのですが、
memcpyの実装(memcpy.c)を見てみると、x86でないときは
RtlMoveMemoryというAPIを使っているのですが、
x86では1バイトずつしこしこコピっているようです。
どう考えてもAPIの方が最適化されていて早いような
気がするのですがなんででしょう。。。
0156デフォルトの名無しさんNGNG
>>154
> 空いているメモリtにコピーしてから、
本当か?
場合によって前からコピーするか後ろからコピーするか切り替えるように実装しないか?
0157デフォルトの名無しさんNGNG
>>155
ソース見る限り確かにそうだな。
しかし、x86の場合ならストリング転送に最適化されるはず。
確認はしてないが。
0158デフォルトの名無しさんNGNG
実装依存
0159151=155NGNG
>>157
その上x86のリリースビルドのときにはレジスタで処理するように極度に最適化
されったぽいアセンブラコード(memset.asm)とリンクするようになっている
みたいなのですが、デバッグビルドではAPI使わずに1バイトずつコピって、
リリースビルドではAPIどころか自身(C)のライブラリも使ってないって
どういうことなんですかネ。。。
0160デフォルトの名無しさんNGNG
>>159
Microsoft Corporationに聞けば。
0161デフォルトの名無しさんNGNG
>>155
ネタじゃなかったのか
0162デフォルトの名無しさんNGNG
そんなこと気にしてどうするんだろう
0163デフォルトの名無しさんNGNG
アセンブラ時代で、C覚えたての頃は気にしたな。
0164デフォルトの名無しさんNGNG
そら速度が要求されたら気になるだろ。
つか速度が要求されないのにC使ってる奴は(ry
0165デフォルトの名無しさんNGNG
> また、文字列用にstrcpy等の関数がありますが
> これもmem〜系関数で十分間に合うと
> 思うのですが。。。
0166デフォルトの名無しさんNGNG
>>164
速度を要求されないときは何使えばいいですか?
0167デフォルトの名無しさんNGNG
>>166
C#に決まってるだろ。
0168デフォルトの名無しさんNGNG
>>167
Win以外の環境で使えるのあったっけ?
0169デフォルトの名無しさんNGNG
>>168
Win以外に使いものになる環境あったっけ?
0170デフォルトの名無しさんNGNG
#include<stdio.h>


int func(int *z)
{
*z=55;
return 0;
}
main()
{
int a;
a=5;
func(&a);
printf("%d",a);

return 0;



}
55と表示したいのですが・・・
0171デフォルトの名無しさんNGNG
ですが?
0172デフォルトの名無しさんNGNG
>170
ちゃんと省略せずに「何も表示されない」と書けや
0173>>170NGNG
改行またはfflush(stdout)
0174デフォルトの名無しさんNGNG
main()
{
char buf[256];
int a;
a=5;
func(&a);
printf("%d\n",a);
gets(buf);
return 0;



}
0175デフォルトの名無しさんNGNG
CからDOSに命令を送るにはどうしたらよいのですか?
0176デフォルトの名無しさんNGNG
>>175
BIOSを呼ぶ。スレ違いなので詳しい情報は割愛。
0177デフォルトの名無しさんNGNG
>>176
やや、レスサンクスです。
詳しく載ってるようなサイトとか無いですかね?
0178デフォルトの名無しさんNGNG
>>177
int86x とか REGS とかでググッてみたら?
0179デフォルトの名無しさんNGNG
int86のコードよかったよな。
ライブラー中で、自己変更コードかいてるのはあそこだけだった。
0180デフォルトの名無しさんNGNG
>>148は自分の存在意義がなくなってしまってこまってるボケ
0181デフォルトの名無しさんNGNG
>>177
スレ違いと指摘されつつ、何故更に問う?
0182デフォルトの名無しさんNGNG
っていうか、scanf()やgets()を使ったプログラムの質問している時点でだめだめ。
そんな人間はもともと見込みがないです。
質問するだけ無駄。
0183デフォルトの名無しさんNGNG
>>182
推薦書スレと日下部スレの他にもいたんですね-;)
0184デフォルトの名無しさんNGNG
「こわい人」はみんな同一人物ナノか!
0185デフォルトの名無しさんNGNG
>>169
Winが動く環境ってPCだけじゃん
0186デフォルトの名無しさんNGNG
scanfマンセー
0187デフォルトの名無しさんNGNG
getsまんせー
今日も二回使っちゃったYO
0188デフォルトの名無しさんNGNG
gets一回2万円
0189デフォルトの名無しさんNGNG
>>188
一回20円じゃなかったっけ?
0190デフォルトの名無しさんNGNG
void mainも禁止
0191デフォルトの名無しさんNGNG
main() {

}は?
0192デフォルトの名無しさんNGNG
int main(void)は?
0193デフォルトの名無しさんNGNG
@echo off
0194デフォルトの名無しさんNGNG
>>182
そうか?Cが最初の言語だったら質問する人もいるんじゃないか?
おまえの一番最初の言語を覚えたときはどうだったんだ?
0195デフォルトの名無しさんNGNG
>>194
いつまでもつまらん話を続けてんじゃねえよ
0196デフォルトの名無しさんNGNG
>>194
ようするに、194は「初心者だからしかたない」と思い込んでいる馬鹿。
「初心者のうちはscanfやgetsを使ってもよい」と思い込んでいる馬鹿。

実際には、初心者にこそすすめてはいけないからこそ問題になっている。
熟練者なら問題点も把握しているから使うことができるか、熟練者は使う用事がない。
つまり、だれも使う用事がないわけだ。
0197デフォルトの名無しさんNGNG
>>193
ださい。
いまどきWindowsは、プロンプト出したら、
vi .cshrcして
set nobeep
から始まるのがふつう。
0198デフォルトの名無しさんNGNG
>>190
こわがりすぎー
(特定の単語をさけているだけでは? ^^;)
0199194NGNG
>>196
そんなこと言ってないし
scanfやgetsなんかの話題は相手にしてない
0200デフォルトの名無しさんNGNG
typedef struct
{
int i ; char c ;
} Kouzou ;

Kouzou GetKouzou ( void )
{
Kouzou kouzou ;
kouzou.i = 1 ; kouzou.c = '1' ;
return kouzou ;
}

int main ( void )
{
printf ( "%d\n" , GetKouzou().i ) ;
return 0 ;
}

VC6なんですが、「'.i':左側が構造体、共用体でない」とでてしまいます。
関数を書いたあとに.を押すとメンバーが表示される(VCの機能)ので、
正しい書き方だと思ったのですが。動かせるようにお願いします。
0201デフォルトの名無しさんNGNG
>>200
VC6(SP5)でコンパイルできたぞ。
他の部分が間違っているんだろう。
0202デフォルトの名無しさんNGNG
Kouzou kouzou ;
この書き方やめとけ
0203200NGNG
すいません。>>200は例文として作ったのですが通りました。
だから別の所に問題があるか調べていた所、元のソースではファイル分割していて
プロトタイプ宣言が無かったので通らなかったようです。すいません。
0204200NGNG
>>201
その通りでした。

>>202
例文用というのもあるのですが、どんな感じが良いでしょう。
0205デフォルトの名無しさんNGNG
>>199
> そんなこと言ってないし

ふふ..ごまかそうとしてもだめです。
0206デフォルトの名無しさんNGNG
> Kouzou GetKouzou ( void )

この書き方やめとけ。なんで括弧の内側に空白あける?
せっかくちょうどよく接するように括弧をデザインしたフォントデザイナーに申し訳ないとおもわないのか?

> typedef struct
> {
> int i ; char c ;
> } Kouzou ;

なんで、1行に2文書くようなせこい真似してるくせに、
「{」だけで独立した行にするんだ? おまえアホか?
ちゃんと書けよ。

> Kouzou kouzou ;
> kouzou.i = 1 ; kouzou.c = '1' ;

ここも1行に2文わざわざ書くし...。だったら複合定数で初期化しろよ。ぼけ
あと、宣言文をブロックの先頭にまとめて書くなら、それと最初の実行文の間には
1つ空行あけろよ ぼけ。


0207デフォルトの名無しさんNGNG
> printf ( "%d\n" , GetKouzou().i ) ;
return 0 ;

函数名と括弧の間に空白あけるなよ。ぼけ。よみにくいぞ。
0208デフォルトの名無しさんNGNG
>>207
ぼけ、ぼけ言うだけより、
書いたやつに「どんな本を参考にして勉強したらこんなひどい書き方になった」かを
質問しろよ。答えてもらえれば、そのほうがよほど有益な情報だ。
0209デフォルトの名無しさんNGNG
>>207
お前うざいって。
いいかげん消えて。
0210デフォルトの名無しさんNGNG
>>209
よく見かける人なんですか?
0211200NGNG
>せっかくちょうどよく接するように括弧をデザインした
>フォントデザイナーに申し訳ないとおもわないのか?
>「どんな本を参考にして勉強したらこんなひどい書き方になった」か
int kansuuA(BvoidC)D;
前にスペースを空けろといわれた事があって、
なんでAとDだけ?スペースを空けるのか分からなかったので
B、Cの方も空けていたのですが、A、Dだけ空けるのが正しいのですか?
0212デフォルトの名無しさんNGNG
>>211
どこも開けないのが普通。
int kansuu(void);
0213デフォルトの名無しさんNGNG
関数名を行頭に持ってくるのが普通。
int
kansuu(void)
{
}
0214200NGNG
>>212
int hensuu(int i,char *str,char c);
voidの場合は要らないのですね。ではこれの場合はどう空けるのでしょう。

>>213
doxygenを使うとき引数にコメントを付けるために、引数の方の行を
変える事はあったのですが、戻り値の方にもやるのですね。
0215デフォルトの名無しさんNGNG
>>214
べつにvoidの場合にかぎらず、括弧の内側は絶対にあけないんだよ。
あと、カンマの後ろ詰めるなよ ぼけ。
0216デフォルトの名無しさんNGNG
>>213
いや、ちっとも「ふつう」ではない。
そういう流儀もある、程度。

だが、括弧の内側に空白あけたり、カンマの後ろを詰めたりするのは「流儀」でさえないのだ。
0217デフォルトの名無しさんNGNG
>>207
なぜバックスラッシュを全角にするんだ?
0218デフォルトの名無しさんNGNG
>>216
たしかに「流儀」程度だな。
tgrind は、函数名が行頭からはじめてったほうが (つまり型名で改行したほうが)、
つごうよかったのだが、あれは、そういう流儀の人がつくったのかな。
0219200NGNG
>括弧の内側は絶対にあけないんだよ。
これは>>206さんが言ったフォントデザイナー説ですかね。

>カンマの後ろ詰めるなよ
左側だけ空ける定義はどこにあるのでしょう。
ポインタは char *p と変数側にくっつけますが、
これは char c , *p とあったとき、まずcharであってその後に、
普通のcharであるか、ポインタであるかがあるから、そうなるみたいですが。
0220200NGNG
>>219
>左側だけ空ける定義はどこにあるのでしょう。
逆です。右側だけです。猫もそうなってますね。
0221デフォルトの名無しさんNGNG
>>219
何を言ってるんだ??
誰もポインタの話はしてないよ。
『  カ  ン  マ  の  後  ろ  に  ス  ペ ー  ス  を  入  れ  ろ  』と言っているのだよ>>214は。
0222デフォルトの名無しさんNGNG
かぶった?
0223デフォルトの名無しさんNGNG
> これは char c , *p とあったとき、まずcharであってその後に、

っていうか、いっしょに定義するなよ。おまえみたいなボケが勘違いするから、
わざわざ1行で書くな。
もっと勘違いしやすいのは char* i, j; とかかいて、iとjが同じ型の変数だとおもっちゃうやつ。

とにかくカンマの後ろ詰めるな。
0224デフォルトの名無しさんNGNG
> これは char c , *p とあったとき、まずcharであってその後に、

カンマの前あけるなよ。ぼけ。
0225デフォルトの名無しさんNGNG
>>219
その前に、おまえが今までに参考にした書籍の名前を言え。
もし、複数読んでいるんだったら、一番影響を受けたやつか、最初に読んだやつだけでいいから。
0226デフォルトの名無しさんNGNG
十年一日の如く、この時期になると書式偏執狂が現れてくるな・・・

文句つけてる暇があったら、自分で書式整形ツールでもつくれよ。
その方がよっぽど世の中の為だ。
0227デフォルトの名無しさんNGNG
indent
0228200NGNG
>>224
理由は何なのでしょう。()の時みたいな理由があればよいのですが。

>>225
書籍は複数読んだのですが、特にスペースは気にしないで
通ればよいと思い詰めて書いていました。
よく読んだ本でエイ・エス・ティシステム・アカデミが出している
C PROGRAMING I と言う本があるのですが、見てみると
void main( void )
{
}
scanf( "%d" , &num ) ;
とかとなっている所もありました。
void mainに括弧の内側明け、コンマの前明けにscanf・・
全てそろってますね。
ただ誤字だらけの本なのでなんともいえませんが。
0229デフォルトの名無しさんNGNG
>>228
>理由は何なのでしょう。()の時みたいな理由があればよいのですが。
常識。
括弧の前後とかカンマの前にスペース入れるのは
履歴書を色鉛筆で書くのと同じぐらい非常識。
0230デフォルトの名無しさんNGNG
ドットとカンマが混在するような時や、何かの都合で
プロポーショナルフォントで表示するような時以外は、
どうでも良いんじゃない?<カンマの後のスペース

必要ならいつでも変換出来るし。
0231200NGNG
>>229
スペースのつけ方についていろいろ調べていたのですがみつからず、
演算子の優先順位で○○ではないか、権威ある人が書いた書き方が
そうでそうなったとかいろいろ想像していたのですが、
そういう風に言い切ってもらえてすっきりしました。
0232デフォルトの名無しさんNGNG
カンマの後にスペースを入れるのは、プログラムソース
というより、英文一般の風習だな。
0233200NGNG
>>230
了解しました。
0234200NGNG
>>232
これは核心を突く意見です。了解しました。
0235デフォルトの名無しさんNGNG
全角のカンマを使えば、スペースを入れなくても見やすいぞ。
0236デフォルトの名無しさんNGNG
コーディングスタイルで検索しろ
0237デフォルトの名無しさんNGNG
>>235
バーカ<・A・>バーカ
0238デフォルトの名無しさんNGNG
低レベルな議論しかできない人達ですねw
0239デフォルトの名無しさんNGNG
>>238
だって、ここでほざいてる香具師みんな
似非プログラマですからね。
0240デフォルトの名無しさんNGNG
エー
0241デフォルトの名無しさんNGNG
C言語チャットルームへようこそ
0242デフォルトの名無しさんNGNG
すいません。質問させてください。
これから私はC言語勉強するつもりなんですけど、初っ端のコンパイルが
旨く出来ません。原因わかる人がいたら教えて頂たいんです。
具体的には「インクルードファイル’stdio.h’をオープンできない。」
と表示されるんです。エラーはこれだけだと思われます。1errorsinCompile
と出てるので。よろしくお願いします。
0243デフォルトの名無しさんNGNG
誰かこの質問答えてあげて
http://pc2.2ch.net/test/read.cgi/tech/1078325423/650
0244デフォルトの名無しさんNGNG
>>242
コンパイラは何?
0245デフォルトの名無しさんNGNG
ありがちな原因として、該当するファイルを削除してしまった、
そうでなければ、ファイルを見つけられないことが考えられる。

必要であれば、インクルードファイルが置いてあるディレクトリを
コンパイラに知らせる必要がある。

ttp://www.google.com/search?hl=ja&ie=UTF-8&oe=UTF-8&q=%22C%E8%A8%80%E8%AA%9E%22+%E3%82%A4%E3%83%B3%E3%82%AF%E3%83%AB%E3%83%BC%E3%83%89+%E3%83%91%E3%82%B9%E3%82%92%E9%80%9A%E3%81%99&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=
0246デフォルトの名無しさんNGNG
>>243
もう答えてるじゃん
http://pc2.2ch.net/test/read.cgi/tech/1078325423/653
0247デフォルトの名無しさんNGNG
242です。244さん>コンパイラはborland5.5です。
bcc32というのかな?
245さん>ディレクトリの指定は出来てると思います。
指定できてないときはファイルが見つからないとでてるので。
0248デフォルトの名無しさんNGNG
C言語を始めようでも使え。
0249デフォルトの名無しさんNGNG
春だね
0250デフォルトの名無しさんNGNG
>>247
特定の環境の話題はスレ違い
0251デフォルトの名無しさんNGNG
>>247
スレ違いなのでこっちに移動しましょう。
http://pc2.2ch.net/test/read.cgi/tech/1054390397/l50
0252デフォルトの名無しさんNGNG
>>247
コンパイラの環境設定
http://www.mgs2.com/online.lesson/language.c/02.html
0253デフォルトの名無しさんNGNG
>>252
氏ね
0254デフォルトの名無しさんNGNG
検索しない初心者はウザイが、
その初心者を叩く自称上級者はもっとウザイ
0255デフォルトの名無しさんNGNG
>>254
初心者を叩く奴なんていたか?
0256デフォルトの名無しさんNGNG
245です。度々申し訳ない。
ディレクトリの設定とかパスとかしてるのに
コンパイルできません。何故だー
252はメモ町ではないエディタの使用なんですね。
考えられる原因をどなたかお教えください。お願いします
欝だ・・・。
0257デフォルトの名無しさんNGNG
>>256
bcc32.cfg
ilink32.cfg
0258デフォルトの名無しさんNGNG
>>256
エラーメッセージ全部見なきゃわかんない。
マルチイクナイ。
0259デフォルトの名無しさんNGNG
>>256
スレ違い
0260デフォルトの名無しさんNGNG
本当申し訳ないです。
エラーは以下の文章です。
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
sample1.c:
エラー E2209 sample1.c 1: インクルードファイル 'stdio.h' をオープンできない
警告 W8065 sample1.c 4: プロトタイプ宣言のない関数 'printf' の呼び出し(関数 mai
)
*** 1 errors in Compile ***
0261デフォルトの名無しさんNGNG
main()
main(void)
void main()
void main(void)

コレどう違うの?何か意味あるの?
0262デフォルトの名無しさんNGNG
main() 戻り値の型 int 。引数は不定だが、特に問題はない。
main(void) 戻り値の型 int で引数なし。
void main() 戻り値なしで、引数は不定。C では文法違反。
void main(void) 戻り値なしで、引数はなし。C では文法違反。
0263デフォルトの名無しさんNGNG
>>260
>>252
>>257
0264デフォルトの名無しさんNGNG
>>261
なんでvoidなんだよ ぼけ
0265デフォルトの名無しさんNGNG
> main(void) 戻り値の型 int で引数なし。

いいや。型宣言を省略した関数が「int」を返す保証はない。
標準規格でそう決まってる。それぐらいおぼえとけぼけ。

(89年にはそういうのがあったが、あれは過去との互換性のため)
0266デフォルトの名無しさんNGNG
> ディレクトリの設定とかパスとかしてるのに

いいえ。してません。
0267デフォルトの名無しさんNGNG
C と言えばまだ C89 だろー。
0268デフォルトの名無しさんNGNG
> エイ・エス・ティシステム・アカデミが出しているC PROGRAMING I

さっさと捨てて、まともな本買えよ。
0269デフォルトの名無しさんNGNG
戻り値ってint以外認められないの?
0270269NGNG
mainの戻り値ね
0271デフォルトの名無しさんNGNG
ふるい処理系だと、
int a=10, b=20;
a=-1;
b=1;
でprintf("%d\n", a); すると、
答えが「9」になる処理系もある。(いまどき絶対残ってないですが。いまの標準規格には適合しないので)

そんな処理系で、
int a = 10, b = 20;
a = -1;
b = 1;
だとprintf("%d\n", a); で「-1」になる。
0272デフォルトの名無しさんNGNG
>>267
C99です。常識。
0273デフォルトの名無しさんNGNG
>>270
少なくとも規格上は認められません。
void にしたせいで何が起こっても文句は言えません。
0274デフォルトの名無しさんNGNG
>>271
bは何のためにあるの?
0275デフォルトの名無しさんNGNG
>>271
それは、いまの「-=」演算子が、まだ木下藤吉郎だったころのなごり。
いまどき関係ない。
0276デフォルトの名無しさんNGNG
> エイ・エス・ティシステム・アカデミが出しているC PROGRAMING I

書名からしてミススペルしてるような本は買うなよ。
0277デフォルトの名無しさんNGNG
http://www.catnet.ne.jp/kouno/c_faq/c11.html
0278デフォルトの名無しさんNGNG
> というより、英文一般の風習だな。

いいえ。フランスでもドイツでもそうですよ。
0279デフォルトの名無しさんNGNG
Mは一個でもよい。
0280デフォルトの名無しさんNGNG
>>229
たしかに常識だわな。
つまり231が読んだその本は、そんな常識もわかってないような著者が書いたってことでOK?
0281デフォルトの名無しさんNGNG
>>279は極度の知ったかぶり。
実際には1個ではだめなので、よいこは真似しないように。(本気にするやつがいるかもしれないので)
0282デフォルトの名無しさんNGNG
ANSIってのはアメリカの規格だから、日本人は従わなくてもいいよな?
0283デフォルトの名無しさんNGNG
ちなみにピリオドの後はスペース二つです。

kouzou.  i
0284デフォルトの名無しさんNGNG
>>282
ANSI C を基にした国際規格 ISO C や日本規格 JIS C には従ってもらおう!
0285デフォルトの名無しさんNGNG
もはや恥じらいを感じないほどの初心者なので、質問させていただきます
できたファイルをコンパイルするためにMS−DOSを開いて A>*****.c と入力するそうですが、
そのMS−DOSをどうやって開くのでしょうか

関係あるかどうかわかりませんが、windows2000です
0286デフォルトの名無しさんNGNG
システムツール→アクセサリ→コマンドプロンプト

今後もCとは関係ない疑問がたくさん出てくるだろうが
わからないことが出てきたら、まず
http://www.google.co.jp/
に聞け。
0287デフォルトの名無しさんNGNG
>>285
PC98エミュレータをインストールして、MS-DOSをインストールする。
0288デフォルトの名無しさんNGNG
>>271
標準規格に適合しないから残ってないって? をいをい・・・
0289デフォルトの名無しさんNGNG
>>282
アメリカ製の処理系を使う場合は参考にせざるをえまい
ただし、こういうところで ANSI, ANSI と喚いている香具師の
大部分は ANSI の規格票なんか持ってない
何ページの何行目? って聞けば判別できる
0290デフォルトの名無しさんNGNG
>>289
聞いた方すら持っていないから適当に答えてもいいんだけどね。
0291デフォルトの名無しさんNGNG
ANSIをキーワードに検索かけたら
【yahoo!チャット女神】 a_ranransilva_a 20030513(美人,スレンダー巨乳)[XviD].avi
こんなのしかなかったよ。落としたけど。
0292デフォルトの名無しさんNGNG
みんなISOの9899のマニュアルを買って読んでるの?
C++の14882のPDFみたいにどこかに落ちてないかな
0293デフォルトの名無しさんNGNG
> 標準規格に適合しないから残ってないって? をいをい・・・

じゃあ残ってるとでも? ;-)
私がその手のコンパイラーを最後に見かけたのは1983年のことですので、
もう20年以上前のことです。
0294デフォルトの名無しさんNGNG
> ANSI C を基にした国際規格 ISO C や日本規格 JIS C には従ってもらおう!

それは89年の話。(15年前!)
いまのISOのはANSIを元にしてなどいない。
0295デフォルトの名無しさんNGNG
> MS−DOSを開いて

そんなものはありません。
0296デフォルトの名無しさんNGNG
>>287
いまどきのWindowsはそんなことしない。> DOSプロンプト
ふつうは、
スタートメニューから、[すべてのプログラム]->[Windows Services for UNIX]->[C Shell]
もしくは[Korn Shell] だ。
0297デフォルトの名無しさんNGNG
>>293
論点を逸らそうったってそうはイカのキンタマ

規格に合致しないことを「絶対に現存しない」と断言する根拠とした
アフォ発言は消えない (削除依頼しても無駄だろう)
0298デフォルトの名無しさんNGNG
>>293
> じゃあ残ってるとでも? ;-)

残ってるよ。
20年前に開発した機器の開発環境として動態保存してる。

「今時まず使われていないだろう」ぐらいにしとき。
世の中は、あんたの想像力をはるかに超えてるから、「絶対○○」なんて軽軽しく使うと「井の中の○○」と思われるのがオチだよ。
0299デフォルトの名無しさんNGNG
>>298
その二番目の○○には何が入るのでしょうか。
0300デフォルトの名無しさんNGNG
C と言えばまだ C89 だろー。
0301デフォルトの名無しさんNGNG
>>300
http://www.media-k.co.jp/jiten/wiki.cgi?%A1%E3%A4%B7%A1%E4#i2
0302デフォルトの名無しさんNGNG
だからISO9899の規格書はどこにあんのよ?
0303デフォルトの名無しさんNGNG
乞食根性まるだししてねえで買えよヴォケ!
http://www.jsa.or.jp
0304デフォルトの名無しさんNGNG
>>303
金ねえよ!
0305デフォルトの名無しさんNGNG
と思ったら意外と安かった。

ISO/IEC 9899:1999(とうぜん英語)えよ!3,870円
http://www.webstore.jsa.or.jp/webstore/Com/FlowControl.jsp?lang=jp&bunsyoId=ISO%2FIEC+9899%3A1999&dantaiCd=ISO&status=1&pageNo=0

JIS X 3010:2003(日本語翻訳)13,600円
http://www.webstore.jsa.or.jp/webstore/Com/FlowControl.jsp?bunsyoId=JIS+X+3010%3A2003&dantaiCd=JIS&status=1&pageNo=0&lang=jp
0306デフォルトの名無しさんNGNG
ISO/IEC 14882:2003 32,760円 C++は高すぎるぜ
http://www.webstore.jsa.or.jp/webstore/Com/FlowControl.jsp?lang=jp&bunsyoId=ISO%2FIEC+14882%3A2003&dantaiCd=ISO&status=1&pageNo=0
0307デフォルトの名無しさんNGNG
>>298
耄碌したおっさんをあんまり苛めるもんじゃないよw
0308デフォルトの名無しさんNGNG
これで普通に検索できるな。買う必要はなかった。
http://www.google.co.jp/search?q=9899+ISO+filetype%3Apdf&hl=ja&ie=UTF-8&oe=UTF-8&c2coff=1
0309デフォルトの名無しさんNGNG
> イメージベースのPDF(データを画像で取り込んだPDF)でのご提供です。

これってもしや検索できないということでは・・・
0310デフォルトの名無しさんNGNG
ビットパターンなら容易に検索出来る。
ベクトルデータだと少し手間だが。
0311285NGNG
>>286
はい、確かにに出ました
でもこれからどうしたらいいのかよくわからない・・・これはさすがにgoogleでもうちょっと粘ってみますが
今度来る時はポインタってなんですかくらいのレベルになっているだろうと思います

>>287
ありがとうございます。でもPC98を入手できるサイトが潰れてました

>>296
よくわかりませんが[すべてのプログラム]がありませんでした。すいません
0312デフォルトの名無しさんNGNG
すいません。セグメンテーション違反ってなんでしょーか・・・。
普通に動いてたプログラムが、突然そんなこといって動かなくなりました。
0313デフォルトの名無しさんNGNG
>>312
例えば
int *p;
/*ここで忘れ物*/
*p = 0;

あるいは
*ぬるぽ = ガッ;
0314312NGNG
>>313
申し訳ないです、全然意味がわからないです。
0315デフォルトの名無しさんNGNG
混じれすすると一行入力はgetsでもfgetsでもなくreadline使え。
0316デフォルトの名無しさんNGNG
>>312
例えば配列の範囲外アクセスや
代入も初期化もしていない(不定の)ポインタが指し示す先へのアクセス
これらの結果は「未定義の動作」なので何が起きても、若しくは何も起こらなくてもおかしくはない

未定義の動作のうち、よくあるのがSegmentation FaultとBus Error
多くのメモリ制御回路にはMMUというアドレス変換をする回路がついていて
CPUが指定した論理アドレスと物理アドレスが対応していないと例外処理を開始する
この他read禁止もしくはwrite禁止に対する違反を検出した場合や
物理アドレスにデバイスが実装されていなかった場合にも例外処理を開始する
例外処理とは具体的にはCPUへエラー信号を送り処理を委ねること
0317デフォルトの名無しさんNGNG
せぐふぉはガッに相当すると。
0318312NGNG
>>313-317
ありがとうございます。やっと解決しました。
どうやら配列外のアクセスをしてしまっていたようです。
0319デフォルトの名無しさんNGNG
マカー臭がする。
0320デフォルトの名無しさんNGNG
>>319
おいらNEWS使いだい
0321デフォルトの名無しさんNGNG
自然数xのlog2(x) + 1(小数点以下切り上げ)を求めたい。
で、今こんなの考えたんだけどこれより速いのがあったら教えて。

for (i=0; x >> i; i++) ;

xが自然数でiがlogね。
簡単に言うと1になったビットで最上位のものを速く求めたいって事。
言い換えるとxを越えない2^iのiを求めたい。
0322デフォルトの名無しさんNGNG
for (i=0; x >> i; i+=4) ;
for (i-=3; x >> i; i++) ;

最初は4じゃ無くても良い。
好きにしなされ。
0323デフォルトの名無しさんNGNG
>>321
x が 0 〜 2^n - 1 の一様乱数なら半分の確率で最上位ビットが1だから、上位ビットからテストした方が速いかもしれない。

各ビットが独立しているようなデータなら、真中のビットから二分探索した方が速いかもしれない。
0324デフォルトの名無しさんNGNG
>>321
>言い換えるとxを越えない2^iのiを求めたい。
xを越える最小の2^iのiに見えるんだが
0325デフォルトの名無しさんNGNG
>>324
log2(x) + 1 をお忘れですよ。小数点以下切り上げ。
    ~~~~~
0326デフォルトの名無しさんNGNG
元がシフトとインクリメントだから、下手にいじらない方が早いかもね。
処理系とCPUに依存しそうだが、落しどころは>>322あたりかな。

>>324あ、ほんとだ。
0327デフォルトの名無しさんNGNG
> 20年前に開発した機器の開発環境として動態保存してる。

そりゃ明らかにウソだね。
そのコンパイラーの名前言ってみろよ ;-)
0328貧乏紙NGNG
よーーし!
おじさんが今から、仮想記憶管理を説明しちゃうぞ!!!いいのか?えっ



仮想記憶システムのアドレス方式には2種類あり、ページング方式と、セグメント方式だ。
ページング方式とは論理的な構造とは関係なく一定の大きさに分割する。
セグメント方式では論理的な構造に基づいて分割するのでセグメントの入れ替えが
最小に抑えられるのだ。
しかし、メモリのフラグメンテーション(主記憶の断片化)が発生するので、リロケーション(主記憶上のメモリを先頭から記憶しなおす)が
発生しOSのオーバーヘッドが増大するのだ。
0329デフォルトの名無しさんNGNG
> C と言えばまだ C89 だろー。

「何度も言えば、そうだということになる(かもしれない)」という思い込みほど
かっこわるいものはありません。

ふつうC99ですね。(常識)
0330デフォルトの名無しさんNGNG
> 普通に動いてたプログラムが、突然そんなこといって動かなくなりました。

ふつうにうごいてた「と思い込んでた」だけだろーが。
たまたま運良くうごいてただけだ。そんなものは。
不安定な場所にたまたま運良く都合のいいデータがはいってただけ。
0331デフォルトの名無しさんNGNG
じゃ、
b=sizeof(x)*2;
for (i=1; x >> i; i+=b) ;
for (i-=b-1; x >> i; i++) ;
0332デフォルトの名無しさんNGNG
> for (i=0; x >> i; i+=4) ;
> for (i-=3; x >> i; i++) ;
おい、比較演算子の両側はあけるくせに、代入演算子はあけないのか?
(逆はたまにみるが)
0333デフォルトの名無しさんNGNG
>>328
でも、ページング方式の仮想メモリーのOSでも、
「Segmantation fault」ってのがでるのはなんでですかー!? ;-)
0334デフォルトの名無しさんNGNG
比較演算子?
xはiよりずっと大きいってか?
0335デフォルトの名無しさんNGNG
>>333
「Paging fault」というメッセージがないからです。
0336デフォルトの名無しさんNGNG
>>334
シフト演算子のことがいいたかったのだとおもわれ。

(だが、おれもあけるなあ > 代入演算子の両側。つめるとしろーとくさいので)
0337デフォルトの名無しさんNGNG
ページング方式と、セグメント方式を気にするより、
スタックとヒープを気にした方が実益があるぞ。
0338デフォルトの名無しさんNGNG
for (i=1; x >> i; i+=b) ;
for (i-=b-1; x >> i; i++) ;

空文の「;」を同じ行に書いちゃうやつは、ぜったい1回はハマる。
ちゃんと独立した行にインデントして書け。常識!
0339デフォルトの名無しさんNGNG
じゃ
b = sizeof(x) * 2;
for (i = 1; x >> i; i += b)
;
for (i -= b - 1; x >> i; i++)
;
0340デフォルトの名無しさんNGNG
そこの上げてるキミ、もう少し考えてから書き込むように。
0341デフォルトの名無しさんNGNG
どれのことだろう?
0342貧乏紙NGNG
>>333
Segmantation faultってなに?
ページフォルトのメモリー版?
0343デフォルトの名無しさんNGNG
キミのことだよ。
上げてるのは何人も居ないだろ?
0344デフォルトの名無しさんNGNG
>>321
表引き。これ最速。
0345デフォルトの名無しさんNGNG
わたしはあげてないからなあ。でも数人いそうだ > あげてるやつ
0346デフォルトの名無しさんNGNG
>>344
そういって8087のときみたいにバグをいれるのですね!
0347貧乏紙NGNG
Segmantation fault
わかった、セグメントがないという割り込みが発生している。
しかも、その割り込みは優先度が高い。
ページング方式でページがないというメッセージのつもりじゃない。
0348デフォルトの名無しさんNGNG
ハードのエラッタは容易に回避されるからタチがいいよん。
0349デフォルトの名無しさんNGNG
386でインラインアセンブラ使っていいならbsrとかは?
0350デフォルトの名無しさんNGNG
#include <stdio.h>
int main(void){
int i, x;
for (i = 0;i < 100;i++){
for (x = i;x;x >> =1) printf("@");
puts("");
}
return 0;
}
0351デフォルトの名無しさんNGNG
> for (i = 0;i < 100;i++){

なんでセミコロンの後ろあけない? カンマといっしょだろ?立場は。
中括弧の前もこれだし...
0352デフォルトの名無しさんNGNG
>>327
Microware C Compiler Ver. 1.0 ですが何か ?
その機械まだ動いてるし。

>>329
「お前の」 常識な。
この件についてたぶん世間の総意は得られていないと思う。

>>330
もう解決してるみたいだし、そんな誰でも知ってること書き込んで楽しい ?

>>333
OS がプロセスに与えたメモリ領域 (セグメント) を超えてアクセスしてるから。
(普通の OS では) Segmentation Fault は直接 CPU が発生するんじゃなくて、CPU からの Page Fault で起動された仮想記憶管理でプロセスがメモリーセグメント外のアクセスをしているとわかった時点でソフト的に例外を発生させる。
このページ処理中に IO エラーが発生すると Page I/O error となるよ。
0353デフォルトの名無しさんNGNG
> 「お前の」 常識な

この言い返しがいかにも中学生レベル ;-)
0354デフォルトの名無しさんNGNG
> その機械まだ動いてるし。

で、その機械の名前いえますか? ;)
0355デフォルトの名無しさんNGNG
#include <stdio.h>
int main( void ){
int i,x;
for( i=0;i<100;i++ ){
for( x=i;x;x>>=1 ) printf( "@" );
puts( "" );
}
return 0;
}
0356デフォルトの名無しさんNGNG
>>354
何顔真っ赤にしてんだ?w
0357デフォルトの名無しさんNGNG
>>356
相手すんな。つか自作自演か?
だったらウザイので消えろ。
0358デフォルトの名無しさんNGNG
>>357
相手すんな。つか自作自演か?
だったらウザイので消えろ。
0359デフォルトの名無しさんNGNG
>>359
相手すんな。つか自作自演か?
だったらウザイので消えろ。
0360デフォルトの名無しさんNGNG
>>356
恥かかされてるからだろ (ゲラゲラ
0361321NGNG
うおー、さすが2ch、レスが速い。

>>322
なるほど、分割するのですか。
やってみます。
>>323
分布は小さい数ほど多い逆比例分布なのです。
>>324-325
すいません、説明のしかたが悪かったみたいです。
>321のコードで期待した結果が得られています。
>>326
処理系、CPU共に不明なのですが言語はC又はJavaです。
>>331
なるほど汎用的ですね。
勉強になります。
>>338
for (i=0; x >> i; ) i++;
こ、これでいいれすか?
i = 0;
while (x >> i) i++;
こっちの方が分かりやすいかな?
>>344
255以下についてテーブルを持っておけば、いいですかね?
でも今どきのシステムなら殆ど変わらない気がします。
0362デフォルトの名無しさんNGNG
いっぱい書きましたね。
ようするに、言えないのですね? > 昔の機種名
0363321NGNG
32bitだと仮定して、
unsigned int i, x = func(seed);
for (i=31; !(x & (1 << i)); ) i--;

最上位から検索するとこんな感じでしょうか。
というか(x >> i)の真偽判定ってどうやっているんだろう?
ビットシフトなしで特定のビットを狙い撃ちして判定できれば
上位からテストしていけば最大32回の走査で済むから速くなりそう。
0364デフォルトの名無しさんNGNG
>>353
で、その下の行には突っ込まないのか ? (藁

>>354, >>362
言ってもわからんと思う。
基盤から内作してる設備だから。
一応 6809 + 6801 で、6809 側は C で組んでいた。(6801 側はフルアセンブラ。)
当時としては、ちょっとした冒険だったと思う。
まあ、ダメだったらアセンブラで組めばいいやと言う考えだったらしい。

>>359
なかなか謙虚な奴だな。(藁
0365デフォルトの名無しさんNGNG
>363
最上位から検索するなら、毎回notするより、
最初にnotしてから判定するよろし。
0366デフォルトの名無しさんNGNG
基盤 -> 基板
0367デフォルトの名無しさんNGNG
> 一応 6809 + 6801 で、6809 側は C で組んでいた。(6801 側はフルアセンブラ。)

やーい > 組んで
0368デフォルトの名無しさんNGNG
産業スパイっぽいのが暴れてるな
0369デフォルトの名無しさんNGNG
ほんとに温存しているなら、
そのコンパイラーのcharが符号付きか符号なしか、
「# define ...」と、「#」の後ろに空白あけることができたかどうかが言えるはず。

対応していないはずのregister宣言を書いた場合にどういうバグがでるかもな!

(覚えている自分が怖い!)
0370デフォルトの名無しさんNGNG
>>369
シッタカ確定
0371デフォルトの名無しさんNGNG
>>369
質問者は、聞きたい内容をはっきり書くように。
あと、上げないように。
0372デフォルトの名無しさんNGNG
>>369
なるほど、当時厨だったわけね(w
0373デフォルトの名無しさんNGNG
ようするに答えられないわけだな.
どっちも ;-)
0374デフォルトの名無しさんNGNG
すいませんC書くためのエディタ、何がいいか助言下さい。
これからもsakuraかなとは思っているのですが、
もしCに特化されたエディタなどがあれば、教えて頂きたいです。
0375デフォルトの名無しさんNGNG
>>371
質問はage、回答はsage
勝手にルールを変えないように
0376デフォルトの名無しさんNGNG
>>347
viがおすすめです。

Windowsだったら、プロンプトだして、
vi foo.c
と打ってください。
0377デフォルトの名無しさんNGNG
っていうか、単にお友達が欲しいだけのジジイだろ?
妙に懐かしい話題が出たので煽ってみた。と。
きっと、PETとかTRSとか昔の機種名を出すともっと反応するぞ。
でもな、スレ違いだ。

OSも CP/M とかな。角度とか。
0378デフォルトの名無しさんNGNG
sakuraエディターは、開発のしかたのコンセプトはいいのですが、
外部仕様のコンセプトがだめすぎです。
0379デフォルトの名無しさんNGNG
>>377
CP/M って OSだったのかー
0380デフォルトの名無しさんNGNG
MW-Cとか言ってたから、OS/9だな。
0381デフォルトの名無しさんNGNG
秀丸でいいのでは?
学生なら無料よ。
0382デフォルトの名無しさんNGNG
ひでまるもよくないなあ。
とくに金はらう場合は。
悪いことはいわん。viかEmacsにしとけ。
0383デフォルトの名無しさんNGNG
日下部先生の授業では、全員viでした。
0384デフォルトの名無しさんNGNG
>>382
おい犬厨、比較になってないぞ
0385デフォルトの名無しさんNGNG
>>369
悪いけど、覚えてない。

組込みだから、char は全て unsigned char でしか使わんし、# の後ろに空白を空けたことはない。
(これは、今でもそうだから覚えているけど。)

register は、記憶がない。(つーか、そのあとの 68020 版の奴とごっちゃになってる。)

動態保存 (= FD で保管) してるけど、今使ってるわけじゃないからな。
0386デフォルトの名無しさんNGNG
> 動態保存 (= FD で保管) してるけど

それは動態保存とはいわん。
0387デフォルトの名無しさんNGNG
ちなみに、いま試してみたら、「=-」はきかんかったぞ!
0388おこちゃまヘルパーNGNG
#define 動態保存 今でも担当から外れていないこと
0389デフォルトの名無しさんNGNG
手足や頭部は切り離して食べてしまった場合でも、残りを保存。
0390デフォルトの名無しさんNGNG
>>387
なんだ、けっきょくないんじゃん。いまどきそんなコンパイラー
0391デフォルトの名無しさんNGNG
>>387, >>390
ちょっと、コンパイル時のメッセージ書いてみてくれ。
そしたら、本物かどうかわかるから。
0392デフォルトの名無しさんNGNG
>>390
俺は持ってないってば。
0393デフォルトの名無しさんNGNG
>>392
悪い。 >>387 に対してだ。
0394デフォルトの名無しさんNGNG
でも、387は最初にかみついてたやつ本人なのかな?
0395デフォルトの名無しさんNGNG
なぜそんなに必死なんだろう…
0396おこちゃまヘルパーNGNG
old fashion
0397デフォルトの名無しさんNGNG
で、あおってたやつはどこ行ったの?
結局1人だったの?
0398デフォルトの名無しさんNGNG
unsigned long → ポインタ
あるいはその逆のキャストをするとどういう危険なことが
起こり得るのでしょう?
0399デフォルトの名無しさんNGNG
>>398
キャストした値をどう使うかで危険さが違うと思うが。
0400おこちゃまヘルパーNGNG
>>398
まず規格票を嫁
話はそれからだ
0401デフォルトの名無しさんNGNG
Cの規格ってどうして有料なの?
0402デフォルトの名無しさんNGNG
質問です。
GNUのHello,world!(メール確認機能とかあるやつ)のソースを読んでいて思ったんですけど、
オプションで"sailor"と指定すると"Nothing happens here."と表示されるのはイースターエッグなのでしょうか?
板違い・スレ違いなどはご容赦下さい。
0403おこちゃまヘルパーNGNG
>>401
俺らがなぜ無料で回答してるのかは聞いてくれんのか
0404デフォルトの名無しさんNGNG
>>403
楽しいから、だと思ってますた
0405デフォルトの名無しさんNGNG
どんなプラットフォームでもぱぱっと手軽に使える .c と .h
だけのハッシュテーブルライブラリ知りませんか?
0406デフォルトの名無しさんNGNG
std::map
std::set
std::multiset
0407デフォルトの名無しさんNGNG
>>406
もちろんそれが使えればいいんですけどCなので
0408デフォルトの名無しさんNGNG
おお、Cスレでした。ごめん。
0409デフォルトの名無しさんNGNG
>どんなプラットフォームでも
0410おこちゃまヘルパーNGNG
extern "C"
0411デフォルトの名無しさんNGNG
【緊急】ネット投票の協力
CNNのネット投票に協力してください。
今回の台湾総統選挙は公正と思いますか
ぜひ台湾に「Yes」を
http://www.cnn.com/2004/WORLD/asiapcf/03/20/taiwan.elections/index.html
QUICKVOTE
Was Taiwan's presidential vote fair?
Yes ●
No
宋楚瑜氏が先程、このネット投票の結果を利用して、選挙無効を群衆に訴えて
います。宋氏に悪用されないようにしましょう。
「台湾の声」編集長 林建良(りんけんりょう)拜
0412デフォルトの名無しさんNGNG
>>409
どんなC言語環境でも、に訂正します
0413デフォルトの名無しさんNGNG
>>405
汎用的なものは見たこと無いですな。
誰かくれ、にもう一票。
0414デフォルトの名無しさんNGNG
こういう小さなのは?
ttp://www.mnet.ne.jp/~tnomura/C.html
0415デフォルトの名無しさんNGNG
とりあえず、コンパイラのことをコンパイラーと言っていると
恥ずかしい上に自作自演がばればれだぞ
0416デフォルトの名無しさんNGNG
>>410の反対で C++ の機能として STL だけ使いたいときに

extern "C++" {
#include <map>
}

とかできないもんですかね。
0417デフォルトの名無しさんNGNG
#include <stdio.h>
#include <stdlib.h> /* malloc( ) を使うのに必要 */
#define BUFFSIZE 100
void Func1(void);
void Func2(char *str2);
char *Func3(void);
char *BuggyFunc(void);
void main(void);
static char str1[BUFFSIZE];
void Func1(void)
{
static int n = 1;
sprintf(str1, "%d Func1( )", n);
n++;
}
void Func2(char *str2)
{
static int n = 1;
sprintf(str2, "%d Func2( )", n);
n++;
}
0418417NGNG
char *Func3(void)
{
static int n = 1;
char *s;
s = (char *)malloc(BUFFSIZE * sizeof(char));

sprintf(s, "%d Func3( )", n);
n++;

return (s);
}

char *BuggyFunc(void)
{
static int n = 1;
char str[BUFFSIZE];
sprintf(str, "%d BuggyFunc( )", n); n++;

return (str); }
0419417NGNG
void main(void)
{
int i;

char *s;
char str2[BUFFSIZE];

for (i = 0; i < 4; i++) {
Func1( );
puts(str1);

Func2(str2);
puts(str2);

s = Func3( );
puts(s);
free(s);

s = BuggyFunc( );
puts(s);
printf("\n");
}
}

()をうめてこれ実行させるとPCクラッシュや、シャットダウン
0420417NGNG
//mskzow.c
0421デフォルトの名無しさんNGNG
おききしたいのですが
time_t timer;
time(&timer);

printf("%f\n", timer);
printf("%s\n", ctime(&timer));

この場合ctimeから今の時間に変換して表示できるのですが
変換する前の秒数?(1970年になったときからの秒数)が見たい場合はどうしたらいいのでしょうか?
上のやり方だと決まった数字だけでて来て 今の秒数は出て来ませんでした
よろしくお願いします
0422デフォルトの名無しさんNGNG
>>421
> printf("%f\n", timer);

%l じゃないの?
0423デフォルトの名無しさんNGNG
[MSC]time()関数の戻り値,および VC++のtime_t型
ttp://support.microsoft.com/default.aspx?scid=kb;ja;401928
0424デフォルトの名無しさんNGNG
>>422
%ld
0425デフォルトの名無しさんNGNG
int i = 0;
unsigned int ui = 0;

if (i < ui)

というコードを gcc -Wall でコンパイルすると何も言われず、
同バージョンの g++ -Wall でコンパイルすると
warning: comparison between signed and unsigned integer expressions
と言われます。

これは GCC のクセでしょうか?
それとも C++ の場合だけ警告するちゃんとした理由があるのでしょうか。
0426デフォルトの名無しさんNGNG
ちなみに
gcc version 3.2 20020927
というやつです。
0427421NGNG
皆さんありがとうございました
始めは%dでやったのですがマイナスだったので違うと思って他のやつでやってました
もう一つ聞きたいのですが
これって秒数じゃないんですか?
実行したら
[root@localhost test_3]# ./a.out
Su Mo Tu We Th Fr St
-1073750308
Mon Mar 22 02:50:49 2004

[root@localhost test_3]# ./a.out
Su Mo Tu We Th Fr St
-1073747236
Mon Mar 22 02:50:55 2004

[root@localhost test_3]# ./a.out
Su Mo Tu We Th Fr St
-1073749028
Mon Mar 22 02:50:58 2004
のように 増えたり減ったりしています
すいませんが もしよろしければ教えてください よろしくお願いします
0428デフォルトの名無しさんNGNG
特定のキーを繰り返し入力するプログラムはどう書けばいいのでしょうか?
キーボードのキーを指定して実行させるコマンドが分かりません
0429デフォルトの名無しさんNGNG
>>428
そんなものは無い。
0430デフォルトの名無しさんNGNG
入力してその特定のキーかどうかチェックする

現在、そのキーが押されているかどうかのチェックは環境依存になるぞ
0431デフォルトの名無しさんNGNG
>>427
difftime()を使ってみては?

time_t timer;
time(&timer);

printf("%.0f\n", difftime(timer, 0));
0432421NGNG
>>431
ありがとうございます
これで思っていた結果が出せたのですが 結局time(&timer)は何を得ているのかが分かりません
説明して頂けないでしょうか?
私もしらべたのですが分かりませんでした

まだdifftimeはなにか分からないのですが 今日はすいませんが寝ます
どうもありがとうございました
0433デフォルトの名無しさんNGNG
> とりあえず、コンパイラのことをコンパイラーと言っていると

え、「コンパイラー」だとだめなんですか?
0434デフォルトの名無しさんNGNG
プログラマーは末尾のーを省略して通ぶるのが一般的です。
0435デフォルトの名無しさんNGNG
>>434
あのー。じゃあその「プログラマ」にはならないのですか?
0436デフォルトの名無しさんNGNG
掲示板で末尾のーにこだわる香具師を見て、
「すごい。彼は通だな。」と思うかい?
0437デフォルトの名無しさんNGNG
で、どっちがいいんですか?
0438デフォルトの名無しさんNGNG
知らん。
0439デフォルトの名無しさんNGNG
>>437
プログラマー表記に絡んでくる自称通の馬鹿が多いから
どちらがいい、正しいに関係なくーを省略したほうが無難。
0440デフォルトの名無しさんNGNG
>>376
>>382
ありがとうございます。
非常ーーに申し上げにくいんですが・・・
当方、WindowsXPなのですが、コマンドプロンプトでもファイルを指定して実行でも
「vi foo.c」では何も起きないんです・・・。
どうすればvi使えるのでしょうか・・・・
0441デフォルトの名無しさんNGNG
>>440
http://www.microsoft.com/japan/windows/sfu/
0442デフォルトの名無しさんNGNG
>>439
「ドライバ」と「ドライバー」で話が通じなかったことを思い出した

「動かすにはドライバーが必要なんだよ」
(゚Д゚;)?
0443デフォルトの名無しさんNGNG
エコーをエコと言ったら通じないな。
0444デフォルトの名無しさんNGNG
3文字以上というオキテがあるそうだ。
0445デフォルトの名無しさんNGNG
>>440
viはWindowsXPにインストールされていないので
notepad foo.cと打てばいい。ちなみにvi, emacsはUNIXのエディタ。
0446デフォルトの名無しさんNGNG
リクエストがきた時にキーを自動で削除する方法が分かりません
00000001というキーがあったとします
00000001というキーが発行されました
00000001というキーはこの時点で必要ありません
次にリクエストがあった時に00000001というキーがそのまま残っていてはまた発行されるかもしれません
どう処理すれば良いでしょうか?
0447デフォルトの名無しさんNGNG
発行済みキーが無くなるまで取得する。
一括でフラッシュする関数も探してみれ。
0448デフォルトの名無しさんNGNG
レスありがとうございます

発行キーはTIME関数を利用して20億以上用意してあり
その中の00000001なので1/20億です
で・発行は00000002,00000003...と続いていくのです
その発行済みキーは20億以上用意してあるので無くなりません
だから一行ずつ消したいです よろしくお願いします
0449デフォルトの名無しさんNGNG
>>444
エコー
Echo

どちらも3文字以上だが?
0450デフォルトの名無しさんNGNG
>>449
省略後に3文字以上。
0451デフォルトの名無しさんNGNG
発行済み00000001キーが無くなるまで取得する。
ではだめなん?
0452デフォルトの名無しさんNGNG
C言語をマスターしたいです。
まず何をすればいいですか?
0453デフォルトの名無しさんNGNG
マ板がずっと落ちたママになてるのはどうして?
0454デフォルトの名無しさんNGNG
for(int i=0; i<10; i++)
とかやったときのiのスコープってどこまでなんでしょうか。
gccだとforループを抜けた後は無効なんですが、
VisualCだとループ後も有効になります。
0455デフォルトの名無しさんNGNG
>>454
それC++じゃなくて?
前者の動作は新しい仕様、後者は古いもの。
0456デフォルトの名無しさんNGNG
VC++はfor文のスコープを標準にするオプションなかったっけ?
0457デフォルトの名無しさんNGNG
スコープとブロックが1対1対応の方がわかりやすいなあ。
0458446.448NGNG
言葉足らずでしたな(汗

FILELIST
------------------
00000001
00000002
〜ほぼ無限(何故無限なのかと言うとリクエストも無限にあるから無限にあるから)
------------------
というFileが既に作られておりリクエストがあると00000001がまず発行され
次に00000002が発行されます
そんな感じに動くけれど発行された00000001は必要無い
ので発行されたキー:この場合00000001から順にファイルから消したい
キーは一つしかないです
ListFileからリクエストがある度に一行自動削除がしたいという事(^^;
0459デフォルトの名無しさんNGNG
メモリマップドファイルにしてその都度書き直す。
ファイルポインタで対処し、プロセスの終了時に書き直す。
ファイルポインタを別ファイルに書込んでおく。

最初のは、あらかじめファイル分割が必要かな。
0460デフォルトの名無しさんNGNG
みんな頭いいなぁ
俺は>>458が何をしたいかわからん
0461デフォルトの名無しさんNGNG
>>454 >>457
forループスコープの強制準拠だね
/Zc:forScope

分かりにくい名前のオプションだよなぁ
強制準拠って…

>>455
C99からはCでもOKになったんよ。確か。
0462デフォルトの名無しさんNGNG
>>461
でも奴はそれに準拠していないコンパイラを使っているはず。
0463デフォルトの名無しさんNGNG
973 名前:おさかなくわえた名無しさん メェル:sage 投稿日:04/01/09 22:08 ID:hOsI679G
ウデムシでヒットしたやつ・・・そんなにきもくないよ。裏からのはなかったけど

478 名前:ピロシキ次郎 ◆EVH/Kw0M :02/08/14 02:42 ID:???
番組の途中ですがここでウデムシ普及委員会から少し宣伝させて頂きます
皆さんもウデムシを知り、その素晴らしさを世界に広めましょう。

アフリカ産ウデムシ
http://www.geocities.co.jp/HeartLand-Namiki/3684/photo/ude0025.jpg
エイリアンな顔
http://www.geocities.co.jp/HeartLand-Namiki/3684/photo/ude0024.jpg
3.22 脱皮。脚が抜けきらない不全。
http://www.geocities.co.jp/HeartLand-Namiki/3684/photo/ude0000.jpg
http://www.geocities.co.jp/HeartLand-Namiki/3684/photo/ude0004.jpg
翌々日死亡。
http://www.geocities.co.jp/HeartLand-Namiki/3684/photo/ude0005.jpg

974 名前:おさかなくわえた名無しさん メェル:sage 投稿日:04/01/09 23:37 ID:ZX1eMQcM
>>973

どうしよう。今日寝れないかもしれない…
怖いよー。
。・゚・(ノД´)・゚・。  ウワァァァァァァアソ
0464デフォルトの名無しさんNGNG
>>445
> ちなみにvi, emacsはUNIXのエディタ。

vi はまあいいとして、emacs が UNIX のエディタとか言うと、ちょっと素人っぽいな。
0465デフォルトの名無しさんNGNG
kterm万歳
0466デフォルトの名無しさんNGNG
emacsは糞、xyzzy万歳
0467デフォルトの名無しさんNGNG
メモ帳でコーディングするやつが真の勝ち組。
0468おこちゃまヘルパーNGNG
>>464
俺もそう思う
0469デフォルトの名無しさんNGNG
randを使って0からRAND_MAXまでの乱数を発生させるとき、
最大値をRAND_MAXではなく100にしたいのですが、
この際、rand%101としたとき、
発生される0から100の間の数字には微妙な偏りが生じてしまうと思うのですが、
このような偏りを生じさせず、きちんとランダムに0から100の間で乱数を発生させる方法はありますでしょうか。
0470デフォルトの名無しさんNGNG
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/rand.3.html
0471デフォルトの名無しさんNGNG
良い乱数・悪い乱数
http://www001.upp.so-net.ne.jp/isaku/rand.html
0472デフォルトの名無しさんNGNG
>>470
>>471
どうもありがとうございました。
0473デフォルトの名無しさんNGNG
あとセキュリティにかかわるなら/dev/random
0474デフォルトの名無しさんNGNG
rand % 101よりは↓


(double)rand() / (RAND_MAX+1) * 101
0475デフォルトの名無しさんNGNG
> メモ帳でコーディングするやつが真の勝ち組。

cat > foo.c でデバイスドライバー書いちゃうBill Joyぐらいにならないと...。

Windows(DOS)ならさしずめ、copy con foo.c ってとこか。
0476デフォルトの名無しさんNGNG
> 前者の動作は新しい仕様、後者は古いもの。

それはC++の場合だろ。
Cの場合は、使えるようになった当初(もう5年も前だ!)から、同じ仕様のまま。
0477デフォルトの名無しさんNGNG
> 発生される0から100の間の数字には微妙な偏りが生じてしまうと思うのですが、
> このような偏りを生じさせず、きちんとランダムに0から100の間で乱数を発生させる方法はありますでしょうか。

for (i = 0; i <= 100; i++) すれば均等 ;-)
0478デフォルトの名無しさんNGNG
> > ちなみにvi, emacsはUNIXのエディタ。
> vi はまあいいとして、emacs が UNIX のエディタとか言うと、ちょっと素人っぽいな。

どっちもちがうだろ。まあEmacsはUnixに移植されてから有名になったわけだが。
0479デフォルトの名無しさんNGNG
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <limits.h>

#define MAX 11
#define OCC 1
#define EMP (-1)

int a[MAX];

main()
{
time_t seed;
int i, j;
int g;

time(&seed);
srand(seed % UINT_MAX);

for (i = 0; i < MAX; i++) {
g = rand() % MAX;
printf("%d ", g);
}
printf("\n");
}
0480デフォルトの名無しさんNGNG
その中心部分を以下のようにかえれば均等に。

for (i = 0; i < MAX; i++)
a[i] = EMP;
for (i = 0; i < MAX; i++) {
do {
g = rand() % MAX;
} while (a[g] != EMP);
a[g] = OCC;
printf("%d ", g);
}
printf("\n");
0481デフォルトの名無しさんNGNG
>>480
それだと遅くなるだろ。10000回ぐらいに増やしてやってみれば一目瞭然。

こうすればいいのでは?

for (i = 0; i < MAX; i++)
a[i] = EMP;
for (i = 0; i < MAX; i++) {
do {
g = rand() % MAX;
} while (a[g] != EMP);
a[g] = i;
}
for (i = 0; i < MAX; i++) {
for (j = 0; j < MAX; j++) {
if (a[j] == i)
printf("%d ", j);
}
}
printf("\n");
0482デフォルトの名無しさんNGNG
>>481
そんなに律儀に変数の「もとの意味」を尊重しなくても、
せっかく連続した整数になってるのだから、

以下のように、どう流用しようと正しく出ればいいのでは?
for (i = 0; i < MAX; i++)
a[i] = EMP;
for (i = 0; i < MAX; i++) {
do {
g = rand() % MAX;
} while (a[g] != EMP);
a[g] = i;
}
for (i = 0; i < MAX; i++)
printf("%d ", a[i]);
printf("\n");
0483デフォルトの名無しさんNGNG
if(MANKO_CHINKO == 100){
printf("MANKO%d" ,MANKO_CHINKO\n);
}
else
{
printf("MANKO%d" ,MANKO_CHINKO\n);
}
0484は ◆cplnFO9T0I NGNG
オブジェクトファイルからライブラリの作るのにはどうしたらいいですか?
開発環境はBCC5.5です。
0485デフォルトの名無しさんNGNG
>>484
http://pc2.2ch.net/test/read.cgi/tech/1054390397/l50
0486デフォルトの名無しさんNGNG
>>458
>リクエストがあると00000001がまず発行され
>発行された00000001は必要無い
>ので発行されたキー:この場合00000001から順にファイルから消したい

キーの発行の処理でファイルを削除するべきじゃないの?
0487デフォルトの名無しさんNGNG
>>479-482
MAX-1回目が終わった時に、次回に出る数が予測できてしまうが、そんなんで良いの?
0488デフォルトの名無しさんNGNG
全部ネタです。
0489デフォルトの名無しさんNGNG
ネタだったのか。それじゃ、マジレス。
このやり方はannealingとか呼ばれてる。
50年前から提案されていたが、この20年で急速に普及した。

#define RMAX 100

int avrand()
{
 int r,s;
 static unsigned int count[RMAX+1];
 static unsigned int cnt;

 r=rand()%(RMAX+1);
 s=(r+1)%(RMAX+1);
 r=count[r]<count[s] ? r : s;
 count[r]++;
 cnt++;
 if(cnt>(RMAX+1)*2){
  for(r=0;r<=RMAX;r++){
   count[r]>>=1;
  }
 }
 return r;
}
演算子にスペースを付けるとか付けないとかのご指摘は遠慮申し上げる。
0490489NGNG
if(cnt>(RMAX+1)*2)のブロックで、
cnt-=(RMAX+1)*2するのが抜けてた。すまん。
0491458NGNG
>>486
それはどうやるんですか?
0492デフォルトの名無しさんNGNG
486さんは、00000001をファイル名だと思ってるに500ウォン。
0493デフォルトの名無しさんNGNG
俺はC以前にビットとか16進数とか意味不明。
0494デフォルトの名無しさんNGNG
やっぱ、自己研鑽できない奴がいるんだな。
うれしいよ。俺もそうだったし。
0495デフォルトの名無しさんNGNG
なんだ。みんなそうだったのか。

すげー安心した。
0496デフォルトの名無しさんNGNG
嬉しがってる暇があったら、
ちったぁ試行錯誤すれ。
理解は試行錯誤の先にあるものだ。
0497デフォルトの名無しさんNGNG
>>496の言うとおりだ。
俺も16進数とか意味不明だが、試行錯誤の末に5進数まで理解できた。

年内に10進数、来年には16進数に到達する勢いだ。
継続は力なり。
0498デフォルトの名無しさんNGNG
5進数まで理解できれば、
一般のN進数まで理解できるだろうに...。
0499デフォルトの名無しさんNGNG
5進は右手で足りるけど、6進からは両手が必要。
11進からは右足を使うか左足を使うかは検討中。
0500デフォルトの名無しさんNGNG
ち(ry
0501デフォルトの名無しさんNGNG
今時16進数なんて使ってる香具師がいるとは・・・
そろそろ32進数に切り替えないとやばいよ・・・
0502デフォルトの名無しさんNGNG
>500
11進数が心地良いな。
俺はこれで十分だ。
0503デフォルトの名無しさんNGNG
>>499
ちんこをつかえ
0504デフォルトの名無しさんNGNG
>>501
16=2の(2の2乗)乗ということも分かんねーのかよー。
やばすぎるぜー。
0505デフォルトの名無しさんNGNG
そうか!次は256進数だったか。
表記には\0とか\rとか総動員だな。
対応エディタ作ってひとヤマ当てるか・・・
0506デフォルトの名無しさんNGNG
>>505
絶対作れよなw
0507デフォルトの名無しさんNGNG
>>504
プ
0508デフォルトの名無しさんNGNG
割り込み失礼します
breakは構造化プログラミングを破壊するので
breakを使わずswitch文をあらわす一般的な方法を示せ
という問題がでたのですがどうすればいいのかわからずてんてこ舞いです。
教えてください。
0509デフォルトの名無しさんNGNG
えぇ〜俺なんか片手で0から31まで数えられるYo
0510デフォルトの名無しさんNGNG
>>508
>breakを使わずswitch文をあらわす一般的な方法を示せ
日本語ワカリマセーン

>breakは構造化プログラミングを破壊するので
ハァ?
0511デフォルトの名無しさんNGNG
家を壊すぜ
ビルを壊すぜ
橋を壊すぜ
0512デフォルトの名無しさんNGNG
>>490
それ以前にforを通ったらrは壊れちゃうでしょ?
それに、cntは念のため初期化したほうが教育上いいのでは?
0513デフォルトの名無しさんNGNG
>>512
じゃあ、こうか?
#define RMAX 101

int avrand()
{
  static int count[RMAX];
  static int kt = 0;
  int s1, s2;
  int r;
  int i;

  s1 = rand() % RMAX;
  s2 = (s1 + 1) % RMAX;
  r = (count[s1] < count[s2]) ? s1 : s2;
  count[r]++;
  if (++kt > RMAX * 2) {
    kt -= RMAX * 2;
    for (i = 0; i < RMAX; i++)
      count[i] /= 2;
  }
  return r;
}
0514デフォルトの名無しさんNGNG
>>508
int k = 0;

switch (n) {
case '3':
 ++k;
case '2':
 ++k;
case '1':
 ++k;
}

...なわけない。
0515デフォルトの名無しさんNGNG
* を使って7セグメントLED風のデジタル時計を出すプログラムで、時間情報を取得してから
どうやって表示に反映させたらいいでしょうか?
0516デフォルトの名無しさんNGNG
ふつうに > どうやって
0517デフォルトの名無しさんNGNG
> breakを使わずswitch文をあらわす一般的な方法を示せ
else ifのことか?
0518デフォルトの名無しさんNGNG
>>515
ttp://pc2.2ch.net/test/read.cgi/tech/1078157730/374
0519デフォルトの名無しさんNGNG
>>517
たぶん出題者はそれを答えさせたいんだろうね。
でも、switchよりもっと汎用だよな。
if (i > 2) ...ってののあとに else if (x == 0) っても書いてもいいわけだし。
(switch文でそんな判定できるか!)

それに、そのやり方を使うのはべつに「breakを使いたくないから」なわけではない。
(delphiのswitchにはもともとbreakないもんなあ)

そもそもbreakは構造化プログラミングを破壊するので、っていいぐさが「大うそ」
その講師は「しったかぶり」してるのがばれちゃってるじゃん。
ここに名前をさらせよ!

そこで、汎用の「goto」しかないようなFortranだと、どこにでもgotoできちゃうので、
構造化プログラミングに反するコードもかけちゃうわけだが、そういうgotoをつかわなく
てもループを脱出できるようにしたのが、Cのbreakであり、VBのExit Forなわけ。
なので、breakはむしろ「構造化プログラミングのため」のものであり、
breakの濫用を恐れるってのは、かなりすじちがい。(そう濫用できるものでもないし、
かなりむずかしくつかって混乱させようとおもっても(gotoみたいには)できないのだ。

とにかくその課題出した講師の名前をここに書け!
0520デフォルトの名無しさんNGNG
>>519

漢なら算術IF文だろ!? だって、コードが面白くなるじゃん。

(上記の文を英訳せよ。5点)
0521デフォルトの名無しさんNGNG
If you are guy, then use arithmatic if. because, code is become to fun.
0522デフォルトの名無しさんNGNG
冠詞が
0523デフォルトの名無しさんNGNG
キッシュイーターは、goto文など最初から存在しない言語を使うべきなんです。
逆に、硬派の男は、そんなものを使ってはいけません。
ちょっとまちがえれば手を切ってしまうような、fool-proofがないかわりに、
その道具本来の性能をフルに発揮するようなそんなプロ用の道具、アセンブラーか
Fortranを使うべきです。
0524デフォルトの名無しさんNGNG
本物のプログラマハケーン
0525おこちゃまヘルパーNGNG
>>519
大ウソだあ? 冗談も休み休み言え
処理本体の中に制御の一部を持ち込むんだぞ
少なくとも構造化定理に出てくる制御のどれにもあたらないぜ
そういうあなたこそ「そういうgoto」とはどういうgotoかを
全然説明できてないようだが?
0526デフォルトの名無しさんNGNG
宗教戦争が始まりまつた
0527デフォルトの名無しさんNGNG
おいしいのにー > キッシュ・ロレーヌ
0528デフォルトの名無しさんNGNG
何でこんなくだらない話で盛り上がれるんだろう・・・
宿題スレ逝ったら?
0529デフォルトの名無しさんNGNG
>>508
関数へのポインタ使えばできるだろ。
この際一般的かは置いといて。
0530デフォルトの名無しさんNGNG
チャットルームですから
0531デフォルトの名無しさんNGNG
そんな話はちゃっちゃとおわれ
0532デフォルトの名無しさんNGNG
#include <stdio.h>

char *strcat(char *str1,const char *str2){

int i=0,length;

for(i=0;*(str1+i);i++);length=i;
for(i=0;*(str1+length+i)=*(str2+i);i++);

return &str1[0];

}


int main(void){

char str[128]="aaa";
char *str2=strcat("ABCDE",str);

printf("%s\n",str);
getchar();

return 0;

}


上のコードを書いてみました。予想では「ABCDEaaa」と表示されるはずなんですが、
うまくいきません。どうしたらいいでしょうか。
0533デフォルトの名無しさんNGNG
532はどうしてそんなのがしりたいんでしょうか
0534デフォルトの名無しさんNGNG
#include <stdio.h>

char *strcat(char *str1,const char *str2){

int i=0,length;

for(i=0;*(str1+i);i++);length=i;
for(i=0;*(str1+i+length) = *(str2+i);i++);

return &str1[0];

}


int main(void){

char str[128]="aaa";
char *str2=strcat(str,"ABCDE"); //ここ逆じゃないとだめじゃない?

printf("%s\n",str);
getchar();

return 0;

}
0535デフォルトの名無しさんNGNG
>>532
「"ABCDE"」にくっつけようとしてるから
そこに「"aaa"」をつけようとしても、そんな領域あるわけないでしょ
0536デフォルトの名無しさんNGNG
>>534
おぃおぃ。逆にしたら結果変わるだろw

あ、あとそれやっても"aaa"と出るだろうな。
printfの引数がstrだし。
0537デフォルトの名無しさんNGNG
>>536
いや、それはわかってるが・・・
まあこうか?
char *str = "aaa";
char str2[128] = "ABCDE";
strcat(str2, str);
printf("%s\n", str2);
0538デフォルトの名無しさんNGNG
>>532
printf("ABCDEaaa\n");
俺天才。
0539デフォルトの名無しさんNGNG
>>534
いまだにそんなに汚いコード書く奴がいるのか・・・
0540デフォルトの名無しさんNGNG
main関数の内容を変えないままできないでしょうか。
0541デフォルトの名無しさんNGNG
>>540
バグってるから駄目。
0542デフォルトの名無しさんNGNG
>>539
俺にいうな。
0543デフォルトの名無しさんNGNG
>>540
strcatの引数str2にくっつけるようにすればOK
0544デフォルトの名無しさんNGNG
>>540
バグにあわせて修正か。すごいな。
0545デフォルトの名無しさんNGNG
>>544
何言ってんのお前?
0546デフォルトの名無しさんNGNG
typedefって何の略なんでしょうか?
0547デフォルトの名無しさんNGNG
type definition
0548デフォルトの名無しさんNGNG
>>547 なるほど 即レスサンクスです。
0549デフォルトの名無しさんNGNG
int で入力した文字をchar型に変換したいのですが、どうやればよいのですか?
0550デフォルトの名無しさんNGNG
>>549
キャスト
0551デフォルトの名無しさんNGNG
>>549
ん?
int型整数をchar型整数に変換したいのならキャストで、
int型整数を文字列に変換したいのならitoa関数
0552デフォルトの名無しさんNGNG
sprintf
0553デフォルトの名無しさんNGNG
* を使って7セグメントLED風のデジタル時計を出すプログラムで、時間情報を取得してから
どうやって表示に反映させたらいいでしょうか?
0554デフォルトの名無しさんNGNG
配列の要素を指すポインタについてなんですが、

int arr[N], *p;
p = arr-1;  //(a)
p = arr+N;  //(b)
p = arr+N+1; //(c)

この場合(b)だけが合法で、(a)(c)はアドレスを計算ようとしするだけで
まずいんでしたっけ?
0555デフォルトの名無しさんNGNG
>>554
うん。まずい。
0556デフォルトの名無しさんNGNG
>>555
さんくすです。

>計算ようとしする× ==> 計算しようとする○
スマソ。
0557デフォルトの名無しさんNGNG
>>553
>>515
http://pc2.2ch.net/test/read.cgi/tech/1078157730/374
http://pc2.2ch.net/test/read.cgi/tech/1078157730/396

ニヤニヤ
0558デフォルトの名無しさんNGNG
*** *** ***
*   *    *
*** ***   *
  *   *   *
*** ***   *
0559デフォルトの名無しさんNGNG
lsic試食版を使いはじめて3日ほどになります
ゲームとしてサンプルのソースファイルをコピー、コンパイルしようとしたところ、
「can't open: el.h」と表示されました
質問1  このel(easy link library)は、C言語界の中ではどういった評判なのでしょうか?

でまあ結局DLしてみたわけですが、今度は「can't open: window.h」「can't open: windowsx.h」を始め、
winnls32.h ddraw.h dsound.h dinput.hなどが開けませんでした

質問2  これらはどこで手に入れることができるのでしょうか?

見た感じの印象としては、なんだか基本そうなものなのであせっております
ヘタレな質問で申し訳ないです
0560デフォルトの名無しさんNGNG
なんだこの文章・・・

ゲームとしてサンプルのソースファイルをコピー、コンパイルしようとしたところ、
→サンプルのゲームのソースファイルをコピーし、コンパイルしようとしたところ、
0561デフォルトの名無しさんNGNG
lsicはマジやめとけ。
せめてBCCかcygwinのgccにしとけ。いや、ほんとに。
金があるならVC++.net買っとけ。
0562デフォルトの名無しさんNGNG
>>559
質問 そのサンプルのソースファイルは何?
0563デフォルトの名無しさんNGNG
>>561
さすがに1行目を否定されたのは意外でした
「フリー コンパイラ」でググって手に入れたlsicですが、結構2ch評判よさそうだったので・・・
BCCとgcc、調べてみます。ありがとうございます

>>562
ブロック崩しです
http://ponk.jp/el/block/block.cpp
ここにありました
0564一星 ◆Cppn/.YI3. NGNG
>>563
 あんな制限され過ぎのコンパイラーではやってけないぞ。
>>561の言う様に、BCCかCygwinのgccがいいと思うな。
0565デフォルトの名無しさんNGNG
elライブラリをインストールできてないっぽいな
vc++以外だと少しの手間と知識が必要
bccはやり方書いてあっただろ
DirectXSDKもインスコしてなさそうだし

lsicからは使えないと思うぞ
0566デフォルトの名無しさんNGNG
なぜLIS-Cがいけないかというと
LIS-Cがメインで使われていたOSは現在主流のWindowsXPの
6世代前(Windows2000->Me,98,95,32s,3.1,DOS)という無茶苦茶古い時代の話だから。
0567デフォルトの名無しさんNGNG
>>554
(a)はいいだろ?
0568デフォルトの名無しさんNGNG
>>567
ダメだろ
0569デフォルトの名無しさんNGNG
>>567
その理由は?
0570デフォルトの名無しさんNGNG
> 6世代前(Windows2000->Me,98,95,32s,3.1,DOS)という無茶苦茶古い時代の話だから。

Windows2.0や1.0はシカトですか?
(XPがはいってないのが不思議)
0571デフォルトの名無しさんNGNG
>>568
(a)と(b)がOK、
(c)だけがだめ。
0572デフォルトの名無しさんNGNG
>>571
(a)がOKな理由がわからないなあ。添え字がマイナス方向の
一個はみ出しはCでは認めてないよ。
0573デフォルトの名無しさんNGNG
プラス方向の一個はみ出し、つまり(b)のみ可だよね?
0574デフォルトの名無しさんNGNG
>>573
その通り。C++のSTLのイテレータもそれと同様の考え方に
基づいて作られている。
0575デフォルトの名無しさんNGNG
>>564
いいHNですね。星新一氏の父親のようだ
ありがとうございます、そうしてみます

>>565
>elライブラリをインストールできてないっぽいな
確かにel.hをINCLUDEフォルダに入れただけです。そうかもしれません
>bccはやり方書いてあっただろ
とりあえずbccをDLしてみます
>DirectXSDKもインスコしてなさそうだし
SDKと言う単語が良くわからないので、きっとそうでしょうね。すいません
ありがとうございます

>>566
勉強になります。ありがとうございます
0576デフォルトの名無しさんNGNG
> Cでは認めてないよ。

まるで他の言語だとみとめてるみたいに聞こえますが...
0577デフォルトの名無しさんNGNG
>>576
そういう風にひねくれた受け取り方をする人の方が少ないと
思いますが・・・・・
0578デフォルトの名無しさんNGNG
>>554
アドレスの計算だけなら何やっても問題ない
全部大丈夫だ
0579デフォルトの名無しさんNGNG
int arr[N], *p;
p = arr-1;
このままの流れならマズイ結果になるだけで、

int arr[N], *p;
arr++;
arr++;
p = arr-1;
これなら大丈夫じゃないの。

まあ、
"アドレスの計算だけなら何やっても問題ない全部大丈夫だ"
と同じ理論だけど。
コンパイラも何も言わないと思うよ。

それから
"添え字がマイナス方向の一個はみ出しはCでは認めてないよ。"
配列とポインタ演算をごっちゃにしないように。
arr-1
はポインタ演算
0580デフォルトの名無しさんNGNG
配列で確保したアドレスが不連続だと困っちゃう。
0581デフォルトの名無しさんNGNG
ポインタの配列に格納されたアドレスと
配列の物理アドレスをごっちゃにしないように。
配列の物理アドレスは連続した領域を確保するでしょ。
0582デフォルトの名無しさんNGNG
> int arr[N], *p;
> arr++;
> arr++;
> p = arr-1;

2行めでエラー...ってのが0.1秒以内にわからないと
0583デフォルトの名無しさんNGNG
>>579
あのさ、
>int arr[N], *p;
>arr++;
>arr++;
>p = arr-1;
これ本当にコンパイル試してから書いてるの?arrは定数なので
コンパイルエラーが出るはずだよ。
0584デフォルトの名無しさんNGNG
> 配列で確保したアドレスが不連続だと困っちゃう。

そんなのは配列とはいわん。
0585デフォルトの名無しさんNGNG
>>579
>配列とポインタ演算をごっちゃにしないように。

気になったので一言。

例えポインタ演算であっても、それが配列内のオブジェクトを
指していた場合は、演算によって配列内及び配列の最後尾
の一つ後ろ以外のアドレスを指した場合は結果は不定となる。

不定とは、動作が停止するなどの重大な影響を与える事は
ないが、ポインタの内容が無意味となる事を指している。

だから論点は、「不定が果たして問題ないのか、それとも
問題があるのか」という点に集約される。
0586デフォルトの名無しさんNGNG
配列は、配列としてアクセスされる限りは連続だけど、
物理的に連続した領域である保証は無いよん。
0587デフォルトの名無しさんNGNG
参照さえしなければ、演算すること自体(arr-1, arr+N+1)は
問題はないってことかな? ただ配列要素(末尾+1を含む)の外を
指しているので、演算結果が予測できない値になるかもしれない、
ということですかね。
0588デフォルトの名無しさんNGNG
>>586
例えば配列の真ん中当たりでスワップアウトされていたりな。
アクセスの際に初めて物理的に連続な位置に置かれるな。
0589デフォルトの名無しさんNGNG
>>587
たぶんそういう意味でしょう。
極端な話、ポインタが32ビットで、配列の先頭アドレスが0x00000004
で、オブジェクトのサイズが8バイトだとすると、ポインタを-1すると
0xfffffffcになり、多くのOSでは明らかに連続とは言えなくなります。
(ラップアラウンドを許可しているOSならいいのかもしれないが、少なく
ともアドレス0は有効なデータであるはずがない)

もっとも0をポインタとして扱う場合はコンパイラがその処理系に有効
なnull pointerに変換するので、必ずしも0x00000000とは限りませんが。

演算そのものは実行しても害はないが、例えば arr - 1 + 1 とやっても
arrに戻る保証は仕様では規定されていないという事ですね。実際には
ほとんどの処理系ではarrに戻ると思うけど、それを当てにしたプログラム
は書いちゃまずいという事でしょう。
0590デフォルトの名無しさんNGNG
>>587
いやあの、たとえば配列が物理的に番地0から配置される場合、
-1しちゃったらどうなるとかいう問題が。

こういうのが起こりそうな例だとx86のリアルモードしか
おれには思いつかんのだけど、ありうることはありうる。
たとえばDS:0から配列が配置される可能性はありうるんで。

このスレ的には規格から外れてるから配列の先頭アドレス-1なんて
アドレスを生成しちゃいかんてことでおわりなんだけど、
それは上に書いたような実装のことが念頭にあったのだと思う。

ちなみに、配列の末尾アドレス+1が合法ってのは、K&Rにでてくるstrcpyのループ、

while (*p++ = *q++)
;

のようなコードを救うためだったと本で読んだ覚えがある。
無論アドレスの生成のみが合法で、デリファレンスしちゃいかん。
0591デフォルトの名無しさんNGNG
純粋なCって今でも手に入るんですか?
0592デフォルトの名無しさんNGNG
今も昔も手に入らんよ
0593デフォルトの名無しさんNGNG
GCC -ansi -pedantic
0594デフォルトの名無しさんNGNG
gcc だった...。なぜか大文字にしてしまった。
0595デフォルトの名無しさんNGNG
へえー知らなかった。
じゃあこういうの厳密にはダメなの?
良く見るけど。

struct hoge {
 size_t len;
 char data[1];
};

struct hoge *pHoge = malloc(sizeof(*pHoge) + 10);
char *ptr = pHoge->data;

*(ptr + 5) = '\0'; // 配列の添字を超えたアドレスは未定義?
0596デフォルトの名無しさんNGNG
signed intで負の数を、そのままunsigned intの変数に代入したとき、
その数は、単純にバイナリ値として扱われ、正の数になると考えてよいのでしょうか?
0597デフォルトの名無しさんNGNG
>595
http://www.catnet.ne.jp/kouno/c_faq/c2.html#6
0598デフォルトの名無しさんNGNG
>>586
>配列は、配列としてアクセスされる限りは連続だけど、
>物理的に連続した領域である保証は無いよん。
これってつまり、C言語から見るとすれば必ず連続しているってことですよね?
0599デフォルトの名無しさんNGNG
>>598
そういうこと。
ソースレベルでは、配列もポインタも連続した領域にアクセスするように見える。
入門書によく書いてあるメモリの配置そのままになっている。
ただし、実際にはCPUにとって、アクセスしやすいように、メモリ上に配置されている。
たとえば、char型の配列でも、16ビットCPUなら2バイトおき、32ビットなら4バイトおきに配置されることもあり得る。
0600デフォルトの名無しさんNGNG
ファイル入出力なんですが既にファイルの中にある数字(%ld)と文字列(%s)を
何かその数字や文字列を消すような要求があった時に、
別のファイルに手動ではなく自動で保存する方法(プログラム)って無いですか?
0601デフォルトの名無しさんNGNG
>>600
日本語で話せ
0602600NGNG
ファイル内にある数字や文字列を
管理者による手は加えずに、別のファイルに保存する方法でつ。
0603デフォルトの名無しさんNGNG
一行読み取って消すやつは消して別ファイルにコピー
を繰り返して、初めのファイルを消去、そして別ファイルの名前を
初めのファイルの名前に変える。
0604デフォルトの名無しさんNGNG
>603
コード示してもらうと助かります。
0605デフォルトの名無しさんNGNG
質問が曖昧すぎる。
0606デフォルトの名無しさんNGNG
>>602
他人に伝わる日本語で話せ
0607デフォルトの名無しさんNGNG
中身は同じで、名前だけ違うファイルを作りたいということなのか?
0608これで分かるかな?NGNG
-------------------------
12345  あいうえお
12346  かきくけこ
12347  さしすせそ 
12348  たちつてと
-------------------------

というファイルがあったとして、
例えば一行目(12345  あいうえお)←の登録者から、
「消したい」という要求があった時に
この行をデリート済みファイルとして他のファイルに保存したいでつ。
0609デフォルトの名無しさんNGNG
プログラムの結果は
-------------------------
12346  かきくけこ
12347  さしすせそ 
12348  たちつてと
-------------------------

このファイルと

-------------------------
12345  あいうえお
-------------------------

このファイルの二つになります お願いします
0610デフォルトの名無しさんNGNG
>>608
それでもわかりません。

登録者って誰?つーか登録とは?
「消したい」という要求はどうやって出す?
デリート済みファイルって何?
0611デフォルトの名無しさんNGNG
管理者、登録者ってのは何なんだよ。
OS? それともこのプログラムだけの概念?
0612デフォルトの名無しさんNGNG
>>608-609
母国語で書いてみな。分かる人が見てるかもしれないから。
0613デフォルトの名無しさんNGNG
一行目が誰かから登録されたIDで、その誰かはそのIDは使わないので消してくれと。
んじゃ、消すけど別のファイルに消したIDはとっておきますよ。
と言った感じで。
>管理者ってのは何なんだよ。
自動でやってもらいたいので「管理者など人の手は加えずプログラムだけで処理しきる
0614デフォルトの名無しさんNGNG
>>613は釣り師か。
やっと気づいた。
0615デフォルトの名無しさんNGNG
>>614
これだけ書いても分からない喪前はアフォなのか?
0616デフォルトの名無しさんNGNG
あー、一応忠告しとくとだな。
おまいさんの説明は質問されたことには触れずに他の妙なとこ説明してるんだよ。
それじゃ誰もわからん。下手すりゃ、釣り師扱いだ。
0617デフォルトの名無しさんNGNG
>>616
これだけ書いても分からない喪前はアフォでつね。
0618デフォルトの名無しさんNGNG
>>611が書いた「管理者、登録者ってのは何なんだよ。」には>>613で答えただろ
0619デフォルトの名無しさんNGNG
>>613

>>登録者って誰?つーか登録とは? (>>610)
>一行目が誰かから登録されたIDで、…

>>管理者、登録者ってのは何なんだよ。(>>611)
>自動でやってもらいたいので「管理者など人の手は加えず…

いわゆる再帰ですね。
終了条件が無いから無限ループですね。
0620デフォルトの名無しさんNGNG
ファイルの中身をメモリに読み込んで消したい行だけ他のファイルに書き込み、残りは元のファイルに上書き。
あとの細かいことはしらん。
0621デフォルトの名無しさんNGNG
終了条件はありません。登録者がいるって事はサーバプログラムだろ
あるわけないし。
0622デフォルトの名無しさんNGNG
>>621
>>619が言ってるのは

「登録」って何?って質問に
>一行目が誰かから「登録」された…
って「登録」という単語を使ってることを再帰といってるんだろ。
だから登録って何なんだ。

「管理者」も同じ。
0623デフォルトの名無しさんNGNG
登録はユーザーリクエストがあった時作られたID 作られたと言う表現を登録と言った。
管理者でもそのファイルに手を加えず、
プログラムだけでファイルの中にある文字列処理をしてほしいと言う事。
0624デフォルトの名無しさんNGNG
的外れな受け答えは釣りの基本でつね
0625デフォルトの名無しさんNGNG
>>624
和姦ねーヤツは釣りといってごまかす(www

0626デフォルトの名無しさんNGNG
hosh
0627デフォルトの名無しさんNGNG
#include <stdio.h>
#include <string.h>
#define FILENAME "test.txt"

int main(void){
FILE *fin, *fout1, *fout2;
char pat[16], buf[1024], *p;
fin = fopen(FILENAME, "r");
fout1 = fopen("temp.txt", "w");
fout2 = fopen("damelist.txt", "a");
printf("番号 >");
fgets(pat, sizeof pat, stdin);
(p=strchr(pat, '\n'))?(*p = '\0'):(pat[15] = '\0');
while (fgets(buf, sizeof buf, fin) != NULL){
if ((p=strstr(buf, pat)) != NULL){
fputs(buf, fout2);
} else {
fputs(buf,fout1);
}
}
fclose(fin);
fclose(fout1);
fclose(fout2);
remove(FILENAME);
rename("temp.txt",FILENAME);

return 0;
}
ちょっと違うが、こんな感じか。(エラーチェックもしてない。)
0628デフォルトの名無しさんNGNG
ソレだ!でも printf("番号 >"); コレは何でしょう?
0629デフォルトの名無しさんNGNG
いや別に文章のほうでもいいんだが。
それだとpatの大きさが小さいからふやすべきだな。
0630デフォルトの名無しさんNGNG
まあ、現実の仕事では>>608日本語を話せない馬鹿が仕様を
書いたりリクエストを出したりするからちょうどいい練習だろ(笑)
0631デフォルトの名無しさんNGNG
話し言葉で掲示板に書き込むとこういう事になってしまう
という分かりやすい例を見てしまった気がします。
0632デフォルトの名無しさんNGNG
春休みももう少しで終わるな…
0633デフォルトの名無しさんNGNG
javaとC++
いまから覚えるならどっち??????
0634デフォルトの名無しさんNGNG
>>633
どの言語がいいか(不毛な)議論をしてるスレなら他に腐るほどある。他池。
0635デフォルトの名無しさんNGNG
>>633
コイン投げでもして適当に決めなさい
どっちを選んでもどうせ五年後には勉強しなおすときが来る
0636デフォルトの名無しさんNGNG
>>627をネットワークにつなげるとどうなる?
リクエストがあるってことは、ネットワークプログラミングだろ。
0637デフォルトの名無しさんNGNG
画面制御にcursesを使い、getchでキーボードから文字を取ってるんですが、
取った文字をwprintsで表示すると自分の思う文字が表示されません。
ここで現われる文字はキーボードに対応するアスキーコードではないのですか?
エロイ人アドバイスお願いします。
0638デフォルトの名無しさんNGNG
>>637
スレ違い。
他のスレで質問するときはソースも一緒に書けよ。
0639デフォルトの名無しさんNGNG
-0001  あいうえお
12346  かきくけこ
12347  さしすせそ 
12348  たちつてと
とかしておいて、暇なときにバッチで縮小する。

というのは、今時はしないの?
0640デフォルトの名無しさんNGNG
>>639
へえーなるほど。
今時の人間なので参考になります。
0641デフォルトの名無しさんNGNG
>>639
どういう意味?
0642デフォルトの名無しさんNGNG
すみません。チョット質問が有るので聞いてください。
会計系の処理のところで、NPV法の為の算出式を作っています。
NPV法の基本式というのが、

NPV = - i + FCF1/r + FCF2/r**2 + FCF3/r**3 ・・・FCFn/r**n
但し i = 投下資本、 FCFn = n期のFCF、 r = 割引率、とする。
r**n というのが、rのn乗と理解してください。

こういった式をC言語で記述する場合、
i[n] = n期のFCF、time = 算出期間n、out = 投下資本

for( i = 1 ; i <= time ; i++){

  pv = in[i];

  for( j = 1 ; j <= i ; j++){
    pv = pv / r;
  }

npv += pv;

}

npv = npv - out;

といった式を作ったのですが、こういう記述以外での
記述方法は有りますか?
このままでもきちんと動くのですが、他の記述方法も
知りたいなと思いまして。

識者のかたよろしくお願いします。
0643デフォルトの名無しさんNGNG
識者まだー?
0644デフォルトの名無しさんNGNG
>>642
識者ではないが、普通ならこんな感じでいいんじゃないの?
(何のテストもしてないけど)

double NPV(double out, double in[], int time, double r)
{
double u;

out = -out;
for(u = r ; time -- ; u *= r)
out += *in ++ / u;
return out;
}
0645デフォルトの名無しさんNGNG
>>642
べき乗なら、
#include <math.h> しておいて、
pv = pv / pow(r,i);
とすれば j をつかった for 文は不要。
0646デフォルトの名無しさんNGNG
fgetsで読み込んだものって'\0'付加されないが
それに大してstrlenやstrstrをつかうのって問題ないのかな
よくそういうコードみるけど
0647デフォルトの名無しさんNGNG
>>646
え。されますよ。以下は規格じゃないけど、一応ISO/IEC 9899:1990に準拠してると
謳ってるFreeBSDのfgets(3)から抜粋。

The fgets() function reads at most one less than the number of characters
specified by size from the given stream and stores them in the string
str. Reading stops when a newline character is found, at end-of-file or
error. The newline, if any, is retained. If any characters are read and
there is no error, a `\0' character is appended to end the string.

エラーが起きたときは'\0'がつかないみたいね…。
エラーじゃないときは'\0'がつきます。
0648デフォルトの名無しさんNGNG
fgets()はヌル終端がつく。fread()はヌル終端がつかない。
どこかで記憶違いしたのでしょう。
0649デフォルトの名無しさんNGNG
そうだったのか、ずっと勘違いしてますた・・・(恥)
0650デフォルトの名無しさんNGNG
教えてください。
ある文字列と文字列の大小比較をしたいのですが
どうすればいいでしょうか?

char hoge[32];
char hage[32];

strcpy(hoge, "123");
strcpy(hage, "789");

if (hoge < hage) {
printf("Good!");
}

という感じです。よろしくお願いします。
0651デフォルトの名無しさんNGNG
|
|
|
|
|
|
↓
0652デフォルトの名無しさんNGNG
strcmpで比較。
0653デフォルトの名無しさんNGNG
>>652
それだ!
0654デフォルトの名無しさんNGNG
>>650
やりたいのは"文字"じゃなくて"数字"の比較じゃないのか?
0655642NGNG
>>644,645

ありがとうございます。

644さんのfor文がどういう意味になるのか分かりづらいのですが
チョット試してみます。

645さん、そうやって使える関数が有るのですね。
そうやるほうがシンプルになりそうなのでそうしてみます。

どもどもです。
0656デフォルトの名無しさんNGNG
void main(viod)
って書き方良くないの?
0657デフォルトの名無しさんNGNG
>>656
#define viod void
0658貧乏紙NGNG
殿!
voidは予約キーワードに指定されているためエラーが出ますぞ。
0659デフォルトの名無しさんNGNG
>>658
エラー出ないよ。

っていうか、
#define for if(0);else for
とかも出来るし。
0660657NGNG
>>658
ハァ?
0661デフォルトの名無しさんNGNG
>>658
プリプロセッサには関係ないし。
つーか関係あってもシンボルになるのはviodの方だから問題ないだろ。
0662デフォルトの名無しさんNGNG
>>656
それをCスレで書くと面白いことが起きるよって
どこかに案内でもあるのか?w

それともバカの一つ覚えなのかw
0663貧乏紙NGNG
しらななっか・・・
0664デフォルトの名無しさんNGNG
scanfって使っては(ry
0665656NGNG
viod…_| ̄|〇
で、結局void main(void)って良くないの?
どっかのスレでダメみたいなこと言ってたもんで…
0666デフォルトの名無しさんNGNG
>>665
動けばいいんじゃない?
0667デフォルトの名無しさんNGNG
ですよね〜!
ではvoid main(void)を愛用していきます。
0668デフォルトの名無しさんNGNG
釣られないぞ
0669デフォルトの名無しさんNGNG
愛用は止めとけ。
カニハンリッチはmain()
これに習うのがまっとうな人間。
0670デフォルトの名無しさんNGNG
public static void main(String args[])
0671デフォルトの名無しさんNGNG
>>670
#define public
#define String char*
0672我ながら厨房くさ〜NGNG
#include <stdio.h>

int g_int = 1234;

int *bar(void)
{
  return &g_int;
}

int ((*foo(void))(void))
{
  return (void*)bar;  /* ←気持ち悪い */
}

int main()
{
  int (*(*(*hoge)(void))(void)) = foo;
  int (*(*geho)(void)) = hoge();

  return printf("%d\n" *(,geho()));
}

上のプログラムを関数ポインタの勉強がてら作ってみたのですが、
コメント部のキャストを行わないと、
「式は引数リストのない関数に対して評価します」
という warning が出ます。でも void* にキャストするのも気持ち悪い。
かといって関数ポインタ型へのキャストは不正とされます。
なにか他の(キャスト?)方法はあるのでしょうか?
それともなんか変なことやってんのかな?
0673デフォルトの名無しさんNGNG
>>672
bar を (*foo) に置き換えた宣言を作ってみれ
0674デフォルトの名無しさんNGNG
>>672
#include <stdio.h>

int g_int = 1234;

int *bar(void)
{
  return &g_int;
}

int *((*foo(void))(void))
{
  return bar;
}

int _tmain(int argc, _TCHAR* argv[])
{
  int(*(*(*hoge)(void))(void)) = foo;
  int(*(*geho)(void))      = hoge();

  return printf("%d\n", *geho());
}

fooがint *(*)(void)を返していないことが原因
ちなみに関数ポインタはvoid *にキャストできない
0675デフォルトの名無しさんNGNG
急いで書いたからミスが多いな訂正する

#include <stdio.h>

int g_int = 1234;

int *bar(void)
{
  return &g_int;
}

int *(*foo(void))(void)
{
  return bar;
}

int main(void)
{
  int *(*(*hoge)(void))(void) = foo;
  int *(*geho)(void)      = hoge();

  return printf("%d\n", *geho());
}

fooがint *(*)(void)を返すと定義されていないことが原因
ちなみに関数ポインタはvoid *にキャストすることは出来るが
元に戻るとは限らない
(sizeof(void *)とsizeof(void (*)(void))を要比較、大体の処理系では異なる)
0676デフォルトの名無しさんNGNG
>667
ANSI C では void main(...) は許容されないから、
プロならやめといたほうがいいでしょう。
ホビープログラミングの場合はお好きなように。
0677デフォルトの名無しさんNGNG
>>676
プロなら納期までに動けば認めてもらえるんです

趣味ならプライド持ってこだわらなきゃ
0678デフォルトの名無しさんNGNG
えーとmain()の戻り値の話だよね?
0679デフォルトの名無しさんNGNG
>>677
氏ね
0680672NGNG
訂正
× int ((*foo(void))(void))
○ int (*(*foo(void))(void))

でした、すみません。
>>675
ちなみに上の書き方はなんかおかしいですね。
確かに、 int *(*foo(void))(void) のほうが正しそうです
(厳密にはどうなのか分からないところが悲しい・・・調べます。
・・・でも自分のは間違ってないか?動いてたけど)。
しかし 675 のをコンパイルしても、同じエラーが出ます。

「式は引数リストのない関数に対して評価します」って warning は
「関数実行しようとしてんのに、引数がねぇんだよ!!」
ってことだと思うので、(とかいいながら実行すると関数のアドレスを返してくれるから謎)
「ちがうよ、関数のアドレスを返してるだけなんだよ」
っていうキャストが必要なんじゃないかと思うのですが、
考えてみると、foo 関数の宣言から明確にそのことが分かるから・・・
つまり自分の認識が間違ってる?それともコ(ry

>>673
多重定義になるのでは?というか多分良く分かってません。どういうことでしょう?

void* にキャストするのは非常に嫌なのですが、
ぐぐったらそれっぽい記述があったのでしてみました
(スレ違いですが、VC6に関してはOKなのかな)。
個人的にはこっちのほうが warning じゃない?と思ってしまいます。
0681デフォルトの名無しさんNGNG
とりあえず頭の中を整理する意味で
typedef int* (*FUNC)(void);
とか書いてみるのは如何?
0682675NGNG
>>680
0683672NGNG
#include <stdio.h>

typedef int *(*pFunc)(void);
intg_Int= 1234;

int *bar(void)
{
return &g_Int;
}

pFunc foo(void)
{
return (pFunc)bar;
}

int main(void)
{
pFunc(*hoge)(void)= foo;
pFuncgeho= hoge();

return printf("%d\n",*(geho()));
}

で出来ました。(インデントは許して)
関数ポインタ型にキャストすればよかったんですか。
ちなみに 672 の「関数ポインタ型」→「(関数ポインタを返す)関数の型」ですた。
いろいろ知識不足でご迷惑をおかけしました。
これで寝れそうです。
0684675NGNG
>>680
VC7.1でコンパイルとおったよ。コンパイルのバグの可能性も疑うべし。
もしくはプリプロセッサが悪さをしているか…

察しのとおり関数ポインタのvoid*キャストはVCの拡張機能、
warningを出したいのなら言語拡張機能をOFFにするとよい

関数呼び出しをする演算子は()であって、関数名自体は関数を示す関数ポインタだよ
ちょうど配列のarrと[]演算子のarr[0]の関係かな?

関数宣言の外側の括弧はあっても無くてもいいよ、両方とも合法(BNF参照のこと)
やとうとおもえば((printf))("Hello");みたいなことも出来るしね

ちなみに動いてたから間違ってないはずと言うのは危険だよん
0685デフォルトの名無しさんNGNG
グローバル変数のアドレスを返して何がしたいんだろう。
0686デフォルトの名無しさんNGNG
おまいにはオブジェクト指向を勉強することをお勧めする

キーワード「隠蔽」
0687デフォルトの名無しさんNGNG
>>686
staticもつけないでか?
0688デフォルトの名無しさんNGNG
隠蔽なら値を返す関数を作ると思うけどな。
0689デフォルトの名無しさんNGNG
672は静的変数を知らないと予想。
0690デフォルトの名無しさんNGNG
>>687
そのうちつくだろ

>>688
そのうち構造体になるんだろ

第一テストコードに文句言うな
0691デフォルトの名無しさんNGNG
>>688
値返しだと読み込み専用になっちまう
Set関数を作れってことになると思うんだけど
operator関数みたいなことがしたくて仕方が無いから妥協
さらにはそのうち配列になる可能性があったりして
そんな妥協の産物といってみるテスト

さすがにstaticがついていない理由は思いつかなかった
0692デフォルトの名無しさんNGNG
staticがついていない理由

車内に代々伝わる呪いのコード
そのコードのメンテナンスをした者は必ず三日以内にバグまみれで発狂して死ぬ
いつしか「あのコードは決していじってはいけない」そんな決まりが生まれる
しかしあなたは上司からそのコードのメンテナンスを命じられた!
グローバル変数地獄のコードを直接いじらず外部に修正を加えるためには…
そう!グローバル変数のアドレスを関数の戻り値で公開するしかない!
これぞ差分プログラミング!

to be continued...
0693デフォルトの名無しさんNGNG
>683
何のためにやっているのか、はさておいて、
pFunc foo(void)
{
return (pFunc)bar;
}
この無駄なキャストはやめろ。激しく危険だ。
0694デフォルトの名無しさんNGNG
プログラムやったことがない初心者が、簡単なゲームとかを作りながらCを学んでいけるように作られているサイトってありますか?
0695デフォルトの名無しさんNGNG
ゲームとC
苦しい将来につながる呪いのキーワード
0696デフォルトの名無しさんNGNG
有名どころでは「猫でもわかる」ところかな。
0697デフォルトの名無しさんNGNG
>>695
じゃあ、アプリを作りながら学べるところ。
>>696
いいサイトですね。ありがとうございます。
0698デフォルトの名無しさんNGNG
>>697
アプリやゲームを作らずに学ぶ方法は漏れには思いつきません
0699 NGNG
−−−−−−−−−−−−−−−−−−−−−−−−−−
俺様用しおり
  ∧_∧   
 ( ´∀`)< 今日はここまで読んだ      
−−−−−−−−−−−−−−−−−−−−−−−−−−
0700デフォルトの名無しさんNGNG
どうも、今日も質問を持ってまいりました
check関数にすでに宣言された配列のデータを渡したかったので、

void main(){
   .............................
   check(numbers[]);
}

check(int numberscheck[]){
  ....................
}

このように書きました
こうすれば、numbers[0],[1],[2]・・・を全部numberscheckに渡せると思ったからです

しかし、 error C2059: 構文エラー : ']' と言われてしまいました
いかがいたしましょう
0701デフォルトの名無しさんNGNG
>>700
http://kmaebashi.com/programmer/pointer.html
0702デフォルトの名無しさんNGNG
渡し方が悪い
0703デフォルトの名無しさんNGNG
check(numbers);
0704700NGNG
>>701
ポインタ・・・
後ほどじっくりゆっくり見てみます。今はもうちょっと基本的なことをやるべきレベルだと思うので
ありがとうございました

>>702
すいません、できれば良い渡し方を教えていただきたかったです

>>703
「'check' : 関数が不正な 1 個の実引数をともなって呼び出されました。」と、出ます
0705デフォルトの名無しさんNGNG
>>704
じゃあそのnumbersの型に問題があるんだろ。
配列かポインタなんだろうな?
0706700NGNG
>>705
質問の答えになるか不安ではありますが、main関数の最初で、
int numbers[4];
こう宣言しています
0707デフォルトの名無しさんNGNG
>>706
それなら>>703で良いのだが。

プロトタイプ宣言が間違っているなら実際の定義と食い違ってエラーになるし、
宣言がないならそもそも型チェックでエラーになることはないし。
0708700NGNG
おぉう
プロトタイプ宣言を消して、check関数をmainより上にもってきたら、>>703ですんなり通りました
その問題のプロトタイプ宣言ですが、
void check():
だけでした

もうひとつ恥ずかしいことですが、配列を渡す時のプロトタイプ宣言はどのようにすればよいのでしょうか?
0709デフォルトの名無しさんNGNG
一行目をコピーして末尾に ; をつけろ

それと、おまえ、C++でやってるだろ?
0710デフォルトの名無しさんNGNG
ついでにいうとcheck(int numberscheck[])だと戻り値はvoidじゃなくてintだぞ
0711デフォルトの名無しさんNGNG
>>700

int check(int numberscheck[]);

int main()
{
check(numbers);
return EXIT_SUCCESS;
}

int check(int numberscheck[])
{
return 0;
}
0712デフォルトの名無しさんNGNG
たぶんVC++つかってて拡張子が.cppなのかな。
そうすると勝手にC++として処理されるらしい。
だからCとして扱ってほしければ拡張子を.cに汁。
0713700NGNG
>>709
すいません、ソースにはきちんと void check(); と書いてました。素直にコピペしたらよかった
そして、またも質問の答えになるかわからないけど、VC++使ってます
ついでにまたまた恥ずかしい話ですが、CとC++の違いがわかりません。ごめんなさい

>>710
戻り値はいらないのでvoidかなとか思ってました
そういうものなんですね

>>711
おお。なるほど
そのプロトタイプ宣言の書き方と、>>710のとおり戻り値を書き換えると、すべてが思い通りにいきました
本当にありがとうございました

>>712
よくわかりませんが、その通りです
そしてよくわかりませんが、またよくわからなくなったら.cにしてみます
ありがとうございます
0714デフォルトの名無しさんNGNG
>>713
>戻り値はいらないのでvoidかなとか思ってました
おいおい。戻り値いらないんだったら
void check(int numberscheck[]);

void check(int numberscheck[])
{
...
}

だろ。
0715700NGNG
>>714
なるほどう。その通りです
試しに両方のintをvoidに書き換えてみたら、
  関数は 'void' 型として宣言されていますが、値を返しました。
と言われました。すごい丁寧ですね。嬉しくなってきます

そして今日は return 0; でも値を返していると学びました
知りませんでした。何もかもが新鮮です
ちなみに0消して return; にするとコンパイルできました・・・なんて報告はいりませんか
0716デフォルトの名無しさんNGNG
初めて書いたものが動いたときのことを思い出すな。
0717デフォルトの名無しさんNGNG
hello world?
0718デフォルトの名無しさんNGNG
というか、初めてのCプログラミングをVC++環境でするという
ことが信じられないのだが、今の世の中これが普通なのか?
C以前に学ぶべきことが多くて混乱するだけの気が・・・
0719デフォルトの名無しさんNGNG
初めてプログラミングをする人は、コマンドラインを知らないというご時世だからな・・。
0720700NGNG
できたー!・・・といっていいのかな・・・ソースがどうもごちゃごちゃしすぎて・・・
それでもきちんと動作するようになりました。4桁の数当てゲームです
ランダムの数字を選ぶのと、今回の関数のことは人様の力を借りましたが、
1人でできたというのはやはり嬉しいものです。本当にありがとうございました!

>>718
その環境は、“弟の特権”と言うヤツかもしれません
意味のわからない単語は多いですが、とりあえず後でいいやと目をつぶってます
「コマンドライン」も意味はわかりません。きっとそれじゃダメなんでしょうね。でも今は許してください
0721わーおあまさがぜんぜんちがーうNGNG
わーおあまさがぜんぜんちがーう
0722721NGNG
すまねぇ、HSPに書くつもりが誤爆った(T_T)
0723デフォルトの名無しさんNGNG
>>722
ドンマイ
0724デフォルトの名無しさんNGNG
やっぱGUIじゃないと、人に「すごー」と言ってもらえないからねー。<初めてでVC
0725デフォルトの名無しさんNGNG
皆さんCを勉強してどれくらいでGIUに手を伸ばしましたか?
0726デフォルトの名無しさんNGNG
>>725
GIUって何だよ。
0727デフォルトの名無しさんNGNG
>>726
すまん。察して
0728デフォルトの名無しさんNGNG
彼は私の股間に手を伸ばし、GIUっと握った。
「ぼ、ぼく、まだCの勉強はじめたばかりなんです。GIUっなんて出来ません」
さらに彼は手を動かしながら、不安に怯える私に「やらないか」と言った。
0729デフォルトの名無しさんNGNG
>>728
親衛隊か? こいつ(藁
0730デフォルトの名無しさんNGNG
「ほら、もうこんなに」
「いや、GIUしないで」
0731デフォルトの名無しさんNGNG
GraphicalInterfaceUnit?

冗談さておき、自前でグラフィック画面にボタンを描画するような処理なら
結構すぐに始めたが。
#つーか、その頃手軽なGUIライブラリなんてなくってね。
0732デフォルトの名無しさんNGNG
>>731
そしてオブジェクト指向を覚えた後には
泥沼設計地獄が待っている

いや、楽しいんだけどさ
0733デフォルトの名無しさんNGNG
池沼設計の間違い? と言ってみる。
0734デフォルトの名無しさんNGNG
『プログラム板の方々への挑戦状』
これで一位とってくれー!なかなかとれん。。。もうだめぽ。
フローチャートの高速化のコツがわからん。
ttp://game5.2ch.net/test/read.cgi/game/1080879039/48-
0735デフォルトの名無しさんNGNG
質問です。

数値データをテキスト(CSV)から読みこんで処理するということを良くやるのですが、
データが大きいのでバイナリ化(?)でもして高速に処理したいんですが、
どうやったら良いのでしょうか?
CSVのファイルをソースにコピペして、どうにかしようかとも考えたんだけど、
もっと賢い方法があるような気がする。
教えて下さい。
0736デフォルトの名無しさんNGNG
>>735
生のデータを見ずに圧縮方法を考え出せる奴などこの世にはいない。
0737デフォルトの名無しさんNGNG
>>735
CSVを読み込んだら構造体の配列にでも入れるのだろうから、
そいつをバイナリイメージのままファイルに出力、
以降はそのファイルを読めばCSVを読むより多少は速いかも知らん。

だが、ファイルサイズとデータにもよるが、高速化すべきポイントが
そこかどうかはなんともいえないのが実情だがな。
0738デフォルトの名無しさんNGNG
>>735
とりあえず言えることは
テキストの数値データをバイナリデータに変換(文字列型を整数型に変換)
という処理がボトルネックになっているのならばすさまじいパフォーマンスアップが望める
しかし、テキストのデータのほとんどが文字列だった場合、それをバイナリにしたところで
それはテキストデータなのだから意味が無い、むしろ構造体を直接書き出すとかやった場合は
固定長文字列の場合はファイルサイズが大きくなり、可変長文字列だった場合は
処理に時間がかかるようになる

さあ、どっち?
0739デフォルトの名無しさんNGNG
ファイル分割ソフトをゴホッゴホッ
0740デフォルトの名無しさんNGNG
医者んとこ行って頭が悪いんで直してくれと頼んで来い。
0741デフォルトの名無しさんNGNG
「数値データ」と言ってるから、確実に高速コンパクトになるのでは?
ソースにコピペする覚悟があるようだから、バイナリファイルに書き出して、
(配列で有る必要は無い。int等の数値をsizeof(int)だけ順次書き込めば桶。ただ、charとかshortとか
を併用するなら構造体が便利)カスタムリソースとしてリンクすればよろし。
Win32なら、必要なAPIはLoadResource()、FindResource()
0742デフォルトの名無しさんNGNG
>>735
お歴々の言う通り、数値をバイナリ化しちまえば速くなると思う。
が、その数値ってのはCSVで管理してるくらいだから頻繁に書き換えるんじゃないのか?
そうなると今度は人の手で書き換える時が面倒になってしまうが。
0743デフォルトの名無しさんNGNG
なるほど。
スタティックリンクは諦めて、CSV<->バイナリの
変換フィルタを作るのが得策かね。
0744デフォルトの名無しさんNGNG
>>741
Win32以外で環境依存せずにカスタムリソースとしてリンクする手法があるなら教えてくれ。
0745デフォルトの名無しさんNGNG
リソースと聞いてひらめいた。

バイナリデータを24bitRGBの画像としてDIBで扱えば、フォーマットを忘れる事も無いし
グラフィックエディタで編集出来るぞ。
数値の全体観がヴィジュアルに把握出来るから何か良い事があるかもしれん。
ランレングス圧縮は標準だが、PNGで圧縮と洒落込むのも一興。
アングラの香りがするのも単調な日常業務にあってはスパイスだ。

ただし、16bitRGBはお勧めしない。
0746デフォルトの名無しさんNGNG
>>745
実際、8ビットや16ビットのデータをグレイ画像に落とす応用は結構ある。
問題はだ、16ビットグレイを扱えるツールが少ないことだな。
0747デフォルトの名無しさんNGNG
sizeof()の使い方を教えてください。
初心者向けCの本にはちっとも書いてないし、
関数でもないから(?)コンパイラの説明書にも
書いてないっす。
0748デフォルトの名無しさんNGNG
googleに聞けばよろし。
ttp://www.google.com/search?hl=ja&ie=Shift_JIS&q=sizeof%28%29&btnG=Google+%8C%9F%8D%F5&lr=
0749747NGNG
サンキュー
0750デフォルトの名無しさんNGNG
MSDNって何ですか?
なんか解説サイト見たら
MSDNライブラリを参照してください
と説明されていたのですが
0751デフォルトの名無しさんNGNG
>>750
http://www.microsoft.com/japan/msdn/library/
これくらいはぐぐれ。
0752735NGNG
みなさま、いろいろレスありがとうございます。
データは完全な数値データなので、高速化できるということですね。

>スタティックリンクは諦めて、CSV<->バイナリの
>変換フィルタを作るのが得策かね。

CSV->バイナリ、この作業がよくわからんのですが、、、
バイナリ化したデータ、これはobjファイルですよね?
で使うときはこれをリンクして使うわけですよね。

で、変換フィルターってのはどうやって作るんでしょうか?
とにかく、テキストデータを読み込んで、どうにかコンパイルして、
objファイルを生成するのかと思ってましたが、どんなもんなんでしょうか?

ちなみに環境はlinux gccです。
0753貧乏紙NGNG
データの形式には2種類あります。
テキストデータとバイナリデータです。
テキストデータはASCIIテキストを扱いOSによる文字変換の差を吸収します。
例
Windowsシステムでは改行と復帰を2文字(CR,LF)であらわしますが、Cでは\nの1文字ですので1文字に変換します。

バイナリデータとはどんなデータでも扱えます。バイナリデータはファイルのデータ
と文字が1:1で対応します。
>>735さんに質問ですが
本当にテキストデータでファイルがかかれてますか?
普通にfopen,fwrite,freadを使っていればバイナリデータで処理されるはずですが。。。
0754デフォルトの名無しさんNGNG
658 :貧乏紙 :04/03/30 20:41
殿!
voidは予約キーワードに指定されているためエラーが出ますぞ。
0755貧乏紙NGNG
16bitRGBって1bit余りでない?パリティーかなんか?
3色しかないから3の倍数だと思うんだけど。。。
0756貧乏紙NGNG
yakamashiii!!
0757デフォルトの名無しさんNGNG
>735
ソースリスト中で、配列の初期化にCSVテキストそのものをコピペすれば、
実行ファイル中ではデータはバイナリになっとる。
dat[4]={1,2,3,4};みたいなかんじ。
ただ、これではデータを変更する度にビルドする事になるし、
メモリが一括で確保出来る保証が無い。
>>743で言ってるのは、データはデータファイルのまま残すが、
CSVからバイナリファイルに変換して使用するという意味だと思われ

>753
CSVはテキストだけだと思ってたが、バイナリもあるのか?

>755
16bitRGBのRGBは、{0x1f, 0x3e0, 0x7c00}または{0x1f, 0x7e0, 0xf800}
のビットフィールドだね。
前者ではgの解像度だけが2倍で、後者では1bit余る。
もっと自由にビットを割振れる処理系もある。
0758735NGNG
>本当にテキストデータでファイルがかかれてますか?
はい。テキストです。
>普通にfopen,fwrite,freadを使っていればバイナリデータで処理されるはずですが。。。

読み込みは ifstream でやってます。

>データの形式には2種類あります。
>テキストデータとバイナリデータです。

その辺のことを良く知らないのです。
今、調べてたら、ifstream にもバイナリモードというのがあって、
これを使ったら良いのかなと考えてたところです。
少し勉強してみます。
0759デフォルトの名無しさんNGNG
>753
>普通にfopen,fwrite,freadを使っていればバイナリデータで処理されるはずですが。。。
誤解を招く表現だな。
普通にfwrite,freadを使ってれいれば、第一オペランドの場所にデータが有り、
そこを数値型でアクセスすれば数値になるし、文字型でアクセスすれば文字型になる。
というより、数値型と文字型の区別自体、文字列を扱う関数以外では意味が無いのでは?
0760デフォルトの名無しさんNGNG
おい、C++じゃないか
0761デフォルトの名無しさんNGNG
ライブラリ関数の_beginthread _endthread とか使ったときに
セマフォとかミューテックス使いたいんだけどどうすればいい?
0762デフォルトの名無しさんNGNG
そういうのを書いてる本は手元に置いとけ。
同期関係はこの本が良かった。
ttp://www.amazon.co.jp/exec/obidos/ASIN/4774108022/250-1842761-3041806
0763デフォルトの名無しさんNGNG
>>761
_beginthread()ってことはWinだよな。CreateThread()とかと一緒。
戻り値がスレッドのハンドルになってるので必要ならAPIに渡してやればOK。
0764デフォルトの名無しさんNGNG
0765デフォルトの名無しさんNGNG
>>735
C/C++室 Ver.5スレに行け。ここはCのスレだ。
その上で、もっと具体的にやりたいことを書け。

>>761
環境依存なら該当スレに行け。例えばWin32APIなら専用スレがある。
0766デフォルトの名無しさんNGNG
>数値データをテキスト(CSV)から読みこんで処理するということを良くやるのですが、
>データが大きいのでバイナリ化(?)でもして高速に処理したいんですが、

扱うデータが大量なのでファイル読み込み処理に時間がかかる
のであれば、RAMディスクを使う手もあるが。
0767デフォルトの名無しさんNGNG
>752

>バイナリ化したデータ、これはobjファイルですよね?
>で使うときはこれをリンクして使うわけですよね。

...だめだこりゃ
(逝ってみよう)

0768デフォルトの名無しさんNGNG
objファイルってtgifのファイルですよね?
0769デフォルトの名無しさんNGNG
tajiriをスイクトすればいいんじゃないか
0770デフォルトの名無しさんNGNG
処理が遅く感じるほどの大きなCSVを丸ごとメモリに読み込むのはお勧めしないよ。
バイナリ化もいいが、>>738も触れてたようにランダムアクセスを念頭に置くべきだよ。
0771デフォルトの名無しさんNGNG
固定長
キー
インデックス
昇順
0772デフォルトの名無しさんNGNG
地震キター!
0773デフォルトの名無しさんNGNG
地震オワッター!
0774デフォルトの名無しさんNGNG
地震age!!
0775デフォルトの名無しさんNGNG
>>753
>データの形式には2種類あります
>テキストデータとバイナリデータです
はっきり言うが、二種類など無い
テキストデータはバイナリデータの一種だ
存在するのは「テキストモード」と「バイナリモード」だ

初心者向けのWindows解説本ならまあただしい表記だが、
プログラマ向けの解説でのこの表現はただ誤解を産むだけ
0776デフォルトの名無しさんNGNG
>>775でめでたく>>759に戻ったわけだが、
このループからはどうやって抜けるのだ?
0777デフォルトの名無しさんNGNG
というか、>775は自分が頓珍漢であることに気付いてないんだろうなぁ。
0778デフォルトの名無しさんNGNG
>770
例えばだ、ある項目のトータルを計算したい場合などは
ランダムアクセスなぞ無意味
0779デフォルトの名無しさんNGNG
ちなみにファイルの読み書きでバイナリとテキストの区別をするのは
MSのローカルルールなわけだが
0780デフォルトの名無しさんNGNG
CP/M由来だから、MSのみというわけではないだろ。
現状はMSのOS以外では使われていない仕様だとしても。
0781デフォルトの名無しさんNGNG
つーか、TTY由来だよね。
0782デフォルトの名無しさんNGNG
770だが、

>>778
>ある項目のトータルを計算したい場合などは
>ランダムアクセスなぞ無意味

ランダムアクセスを想定したファイルの読み書きで
シーケンシャルなアクセスが遅いとは限らないと思う。
シーケンシャルに読みたい場合は、いちいちポインタを動かさず
適当な大きさの構造体なり配列に読み込めば、デリミタのない分
むしろ高速ではないか?
0783デフォルトの名無しさんNGNG
(続き)
固定長によるデータサイズの無駄を指してるなら、異存は無いです。
99%のデータが0..255だが最大値は100億、なんて場合は可変長だろうね。
0784デフォルトの名無しさんNGNG
>>782
だからあんたも頓珍漢だ。
正しいことを言うだけが能ではあるまい。

#まぁ、質問者が出てこないことにはこの調子で続くんだろうな。
0785700NGNG
質問に答えるだけではつまらないじゃないか。
0786デフォルトの名無しさんNGNG
>782
>シーケンシャルなアクセスが遅いとは限らないと思う

だからそーゆーことじゃねーよ
ランダムアクセスしなくてすむなら、無意味だっつーの
0787デフォルトの名無しさんNGNG
>>785
あなたはレス番号を間違えている
0788デフォルトの名無しさんNGNG
>783
ランダムアクセス&固定長って、
あぁそうか n番目を 先頭+(n-1)*サイズ でアクセスするのか

もまえは既に死んでいるぞ(w
07892ch初心者NGNG
 ものすごく基本的な事かもしれないのですが
わからないので質問させてください。

FILE *fp;
char c,str[50];
int i;

if((fp = fopen("test.txt","r+"))==NULL){
  printf("error");
  exit(0);
}
while((c = fgetc(fp))!=EOF){
  str[i]=c;
  i++;
}
str[i]='\0';

rewind(fp);
fprintf(fp,"test");

fclose(fp);

こんな感じの事をしたいのですが、"test.txt"が"test"という文字列より
大きい場合(この場合は4バイト)"test"の後ろに元のデータが残ってしま
います。

ファイルを読み込み、書き込みモードで2回開けばすむ事ですが、出来たら
一回で済ませてしまいたいのです。

 ファイルをクリアする関数とかあれば教えてください。
0790デフォルトの名無しさんNGNG
どのみちオープンを一回で済ませる意味がないがな。
たぶん望む動作は実現できない。
0791デフォルトの名無しさんNGNG
ってゆーか、rewind() するくらいなら freopen() 使え
07922ch初心者NGNG
そうですか
freopen()の存在自体しりませんでした(汗

freopen()で十分便利そうなので使いたいと思います。
ありがとうございました。
0793デフォルトの名無しさんNGNG
>>792
ファイルを切り詰める機種依存しない関数はない。
単純に削除するにはremove()。
空のファイルを作るにはfopen()で第二パラメータに"w"か"w+"。

>>791
どっからそんな発想が出てくるんだ?
0794791NGNG
>>793 何か?
0795デフォルトの名無しさんNGNG
>>794 まぁまぁ

俺様が推理するに
>791が r で読んで w でリオープン って意図を
>793 がアフォなので「はぁ?何逝ってんの」
って事だな
0796デフォルトの名無しさんNGNG
>>795 (w
俺様の超好意的な解釈によると
「>791は神!」って事では?
0797デフォルトの名無しさんNGNG
>>793-796
つまり
>どっからそんな発想が出てくるんだ?
(解釈1)はぁ?お前何一点の?(侮蔑)
(解釈2)私みたいな低脳には思いつきませんでした。(感嘆)
ということかな。
0798793NGNG
すまん、言い方が悪かった。

>>791
どっから「rewind()するくらいなら」なんて発想が出てくるんだ?
「fclose()してfopen()するくらいなら」なら判るんだがな。
0799デフォルトの名無しさんNGNG
いづれにしろ>793は低脳
0800800NGNG
>>799
ずとづの区別がついてから言おうな。
0801デフォルトの名無しさんNGNG
ひっしだな
0802デフォルトの名無しさんNGNG
いずれ(いづ‥)【何れ・孰れ】
0803デフォルトの名無しさんNGNG
||||||||||||||||||||
|||||||||||||||||||||||||||
||||@||||||||||@|||
|||||||||||||||||||||||
|||||||||▽||||||||||| >>ぬるぽ!
|||||||||||||||||||||
|||||||||
0804デフォルトの名無しさんNGNG
>802 九かな使いは認めません(w
0805デフォルトの名無しさんNGNG
ふぇらしてよ
0806デフォルトの名無しさんNGNG
ひっしだな
0807デフォルトの名無しさんNGNG
Cコンパイラは何をつかえばいいでしょうか?
自分の持ってる本にはVisual C++、もう一冊にはVisual C++は
上級者向けと書いてあるんです。初心者でも使えるコンパイラを教えてください。
0808デフォルトの名無しさんNGNG
コンパイルするだけなら何使っても川欄だろ
むしろ統合環境なVC++は難しいかも
0809デフォルトの名無しさんNGNG
class ex {
public static void main(String args[]) {
ex app = null;
app.hoge();
}
void hoge() {
}
}
0810デフォルトの名無しさんNGNG
それはCでないと小一時間(ry
0811デフォルトの名無しさんNGNG
>>807
とりあえずCの勉強始めようか、ってんならフリーのコンパイラダウンロードしてやって見れ。
0812デフォルトの名無しさんNGNG
わかりました。Borland C++ あたりを使ってみます
0813デフォルトの名無しさんNGNG
>>812
カエレ!
0814デフォルトの名無しさんNGNG
いや
0815デフォルトの名無しさんNGNG
まずはこちらをご覧下さい
http://www.uploda.net/anonymous/etc2/upload22465.c

二次元配列と言うものの勉強のため、1,3,5,2を押すと上下左右に、
冒頭で設定したwsizex × xsizeyの長方形の範囲内で動くプログラムを作ってみました
一見普通に動くのですが、偶然発見したことで、wsizexがwsizeyより2以上大きくなると異変が生じるのです
2時間くらい粘りましたが、このバグのもとが全然わからなかったわけです

めんどくさければ「どこがおかしいか」まで見つけてもらわなくても結構ですから、
「なぜバグるのかわからないときは、こうしている」という経験談を教えてください
0816デフォルトの名無しさんNGNG
char map[wsizex][wsizey]
で定義しつつ、使うときは
map[mapy][mapx]
なのはなぜだ?
0817815NGNG
>>816
ゴージャス!
すごい!早いですね。よく見つけてくれました
ありがとうございました。全部直りました
0818デフォルトの名無しさんNGNG
アホか
0819デフォルトの名無しさんNGNG
PrograM #00sER?YS

かっこいいトリップを見つけたので使ってください。
0820デフォルトの名無しさんNGNG
sizeofってなんか使い勝手わるいよな
0821デフォルトの名無しさんNGNG
>>820
おまえ用にできてないってことだ
0822デフォルトの名無しさんNGNG
>>821
あらそう??
つかAPIとかつかったりVBでリンクとったり
するときsizeofでいつもド壷にはまる
0823デフォルトの名無しさんNGNG
>>822
やっぱりそうじゃん
sizeof が「何を」返してるのか
根っこが見えてない
0824デフォルトの名無しさんNGNG
それは配列とポインタの違いを理解してないか
ポインタが型をもっていることを理解してないか
どちらかが原因の気がする
0825デフォルトの名無しさんNGNG
>>823
ではあなたのオツムで伝授してください。
ヨロオネ
0826デフォルトの名無しさんNGNG
>>825
受信側のプロトコルは? レイヤ1から公開しる
0827デフォルトの名無しさんNGNG
>>826
TCPアンスコIP
0828デフォルトの名無しさんNGNG
>>827
なるほど、おまいの脳にはつながってないわけか
0829デフォルトの名無しさんNGNG
自爆自演?
0830デフォルトの名無しさんNGNG
>>827
TCP_IP?
0831デフォルトの名無しさんNGNG
エーテルネット
0832デフォルトの名無しさんNGNG
正直おまいら相手してっと楽しい
これマジスレ
0833デフォルトの名無しさんNGNG
正直おまいら相手してっと勃起する
これマジレス
0834デフォルトの名無しさんNGNG
うっほ!
0835デフォルトの名無しさんNGNG
ファイルにCOBOLのパック型で書かれた数値を
を符号をつけてCHARのファイルに出力したい
(パック型とはバイナリ下位一ビットで符号を表しており
(Cは+ Dは-)で 100C なら 100 010D なら -10
符号をつけてCHARでファイルに出力したいです。

元ファイルがバイナリで 100C010D という形であれば
100-10 とテキストエディタで開いて見えるようにしたいです。

ソースを作ってみたのですが我ながらもう少し良い方法はないかと思っております
ご意見をいただけないでしょうか?
わかりにくい文章で申し訳ないのですが。宜しくお願いします
0836835NGNG
835続き ソース
typedef struct { unsigned char read_str[2];} INPUT_DATA ;
typedef struct { unsigned char out_str[4]; } OUTPUT_DATA ;
int main(argc,argv){
FILE *read_fp; FILE *write_fp; INPUT_DATA input_data; INPUT_DATA *p_input_data;
OUTPUT_DATA output_data;
  int i_count; long data1 ; char buf{sizeof("0000")};
p_input_data=&input_data;
fread(p_input_data,sizeof(input_data),1,read_fp);
for ( i_count=0 ; i_count < 3 ; i_count++){
if( 0x0f & p_input_data->read_str[i_count] == 0x0c ) {
data1 = ( 10 * str[0] + 0.1 * str[4] - 0x0c ) ;
} else if ( 0x0f & p_input_data->read_str[i_count] == 0x0d ) {
data1 = (-1) * ( 10 * str[0] + 0.1 * str[4] - 0x0d ) ;
} }
if ( 0< data1 && data1 < 10 ) {
sprintf( buf , "%i" , 0 ) ;
sprintf( buf + 1 , "%i" , 0 ) ;
sprintf( buf + 2 , "%i" , 0 ) ;
sprintf( buf + 3 , "%i" , data1 ) ;
}
else if ( -10< data1 && data1 < 0 ) {
sprintf( buf , "%i" , - ) ;
sprintf( buf + 1 , "%i" , 0 ) ;
sprintf( buf + 2 , "%i" , 0 ) ;
sprintf( buf + 3 , "%i" , data1 ) ;
} else if ( 10 <= data1 && data1 < 100 ) { ・・・ }
else if ( ・・・ それぞれの場合を出力 }
memcpy(output_data.out_str, buf, sizeof(buf));
fwrite(&output_data,sizeof(OUTPUT_DATA),1,write_fp);
; }
見づらくてもうしわけないです宜しくお願いします
0837835NGNG
なんどもすみません

10 * str[0] + 0.1 * str[4] - 0x0c
の str[4] は str[1]の間違いです。

0838デフォルトの名無しさんNGNG
> (パック型とはバイナリ下位一ビットで符号を表しており
情報処理試験を思い出した。
0839838NGNG
836を斜め読みしただけで判断するけど、
> 元ファイルがバイナリで 100C010D という形であれば
これはint型の変数をそのまま書き出したものということ?
0840838NGNG
でもそれじゃパック型は関係ないし、「ファイルにCOBOLのパック型で書かれた数値を」に反するし。
0841838NGNG
悪いw
sizeof(input_data)をなぜかsizeof(int)と読み間違えていたw
0842デフォルトの名無しさんNGNG
>>836
数値の入り方のルールがよくわからないんだけど、
少なくともdata1の計算がおかしい。
data1からbufに変換するところは無駄だらけ、
memcpy()も不要。
0843デフォルトの名無しさんNGNG
bufに変換するところは、

sprintf(buf, "%04d", data1);

でいいんでない?
0844デフォルトの名無しさんNGNG
>>836
ちょっと調べてみた。
パック型は、一桁4ビットなので1バイトで二桁ってことになる。
なので、変換関数はこんな感じ。
/* const char * pc はデータの先頭、4bitがa-fなら終端とする */
int pack2bin(const unsigned char * pc)
{
  int data = 0;
  while (*pc >= 0x0a) {
    data = data * 100 + (*pc >> 4) * 10 + (*pc & 0xf);
  }
  if (*pc == 0x0d) {
    data = -data;
  }
  return data;
}
0845fdNGNG
無料のC言語のプログラミングソフトないですか?
0846デフォルトの名無しさんNGNG
borland C++ compiler
0847デフォルトの名無しさんNGNG
プログラミングソフトってなんですか?
0848デフォルトの名無しさんNGNG
エディタのことかもしれない。
0849デフォルトの名無しさんNGNG
>>845
C言語のプログラムに最低限必要なのは、コンパイラとエディタ
コンパイラとは、人間がわかりやすく書いたプログラムを、コンピューターが理解できるように翻訳する通訳さんみたいなもので、
エディタとは、人間が書くためのもの。これは最低メモ帳でもできる

両方の機能を兼ね揃えたソフトはあるけど、無料でやりたいのならとりあえず個別に揃えよう
コンパイラは>>846がお勧めだよ
0850デフォルトの名無しさんNGNG
1.プログラムやったこと無い人が、毎日1〜2時間、本と猫でもわかるを参考にしながら勉強した場合、
どのくらいでバイトで使えるレベルのプログラマになれますか?

2.プログラミングのために、ノートかポケットPC、もしくはPalmのような手軽に起動できるタイプのPCを買おうと思っています。
スペックはどの程度あればいいでしょうか?
0851デフォルトの名無しさんNGNG
プログラマはデジタルガッテン
0852デフォルトの名無しさんNGNG
>>850
CやるならNECのパソコンがいいYO!
0853デフォルトの名無しさんNGNG
べつに社員とバイトで期待される技術に差はないと思うぞ。
むしろ教育しにくいバイトの方が、最初から高い能力を求められるかも。
0854デフォルトの名無しさんNGNG
東大生ならプラネットコンピュータでバイトとして採用してくれるよ。
0855デフォルトの名無しさんNGNG
>>851-854
バイトというのは一種の目安という意味で出しただけで、バイトになる気は今のところ無いです。(そもそも募集してない)
だいたいどの程度の期間を見ればいいのかと思いまして。

NECのパソコンですか。検討してみます。
機種より、CPUとかメモリのスペックを教えていただきたいのですが・・・
0856デフォルトの名無しさんNGNG
>>855
プログラミングをするだけなら、
メモリやCPUはコンパイラの推奨スペックさえあれば十分だと思う。
むしろ、画面のサイズや解像度の方が重要かと。

0857デフォルトの名無しさんNGNG
>>849
「通訳」というアナロジはインタプリタのために取っておいて欲しかったな、
という突っ込みが心に浮かんだ春の夜。
0858デフォルトの名無しさんNGNG
>>856
けっこう低いスペックでできますね。ノートの中古のほうが安そうですね。
ありがとうございます。

一応書いときます。
C++Builder 5 Enterprise

Pentium/90(推奨Pentium/166以上)のCPU
日本語Windows 98、Windows 95、Windows NT 4.0(SP3以降)、Windows 2000
48MBのメモリ(推奨64MB以上)
200MBのハードディスク(推奨500MB以上)
CD-ROMドライブ
マウスなどのポインティングデバイス

期間については・・・やっぱ人それぞれですかねえ・・・
0859デフォルトの名無しさんNGNG
Unix系のOSをインスコして、Unixのshellやtoolを勉強しながらCもやるといいかもよ。
windowsでもいいけど、言語だけじゃなく処理系とはどういうことなのか、理解すると応用的な能力がつく。

そもそもそのスペックだとwindowsは厳しかろ。いまどきwindwos95 や98はお勧めできないしな・・・。
俺はCPU 230MHz memory 64Mのノートwindows2000でよくプログラミングするが、このスペックだと統合開発環境は厳しいぞ。
0860デフォルトの名無しさんNGNG
>>850
人によって相当答えが変わると思うが、漏れの場合は十年かかった
環境が無かった、周りに出来る香具師がいなかった

ちなみに2chに来るようになってからのレベルアップはすさまじかった
最初はプログラム板で話していることがちんぷんかんぷんだったが、
いまでは理解できるようになった。2chっていいぞ、マジで
0861デフォルトの名無しさんNGNG
2chのいいところは、優良なサイトへのリンクを教えてもらえるところかな。
0862デフォルトの名無しさんNGNG
>>850
マジレスすると
1.その程度の心構えでは使えるレベルにならない

2.素直にディスクトップ買え
0863デフォルトの名無しさんNGNG
そして姉はバック転を失敗する
0864デフォルトの名無しさんNGNG
「ディスクトップ」がネタですかな…
0865デフォルトの名無しさんNGNG
>>850
まあ、2chには>>862みたいなのがいると言ういい例で砂
ま、こういう香具師は無視しとき
0866デフォルトの名無しさんNGNG
850=865
0867デフォルトの名無しさんNGNG
>>850
みたいに毎日少しずつ継続的にって考え方する人はある意味立派だと思うがね。
まあ>>862の言うことも一理あって、プログラムやる人ってのは基本的に
凝り性なんだよ。プラモ作るのに、ずっと完成するまで時間を気にしない
のと一緒。
個人的には、SYCOM辺りのショップブランドで安いの適当に買えばいいと思う。
しかし、学校とかへ持っていったり、空き時間にちょこちょこいじりたい
というのならば、やはり、普通のノートだろうね。
>>856の言うように、それなりの作業をするので、画面は広いのにこした
ことはない。ポケットPCとパームは駄目だと思うな。
ノートはメーカーのもののほうがいいので、中古でなるべく新しい予算に
あったものを買うといいと思う。それなりにいいのあるよ。
0868デフォルトの名無しさんNGNG
すいません、今からデカイ本屋行ってきます
何かオススメのC/C++基礎勉強の本がありましたら、教えて下さい
0869デフォルトの名無しさんNGNG
と思ったら別スレあるんでしたね。ごめんなさい本屋行く前に吊ってきます
0870デフォルトの名無しさんNGNG
ファイルの行を読み込む際に改行までのバイト数をあらかじめ
取得する方法はありますか?
0871デフォルトの名無しさんNGNG
>>861
2chのいいろころは、漏れがいるということ。
0872デフォルトの名無しさんNGNG
>>870
付加的な情報を別に用意するのでなければ、ない
0873835NGNG
皆さん回答ありがとうございます

>>843 さん うまくできました

>>844 さん
そのまま関数に組み込んで利用してみたのですがうまくいきませんでした。
101d という入力ファイルに対して 0 が帰ってきてしまいました。
まだまだ、改良の余地がありますのでいじってみます。
0874844NGNG
>>873
すまん、1バイト一桁と勘違いしていた頃の名残で
ループの終端条件がおかしい。
適当に直してくれ。
0875貧乏紙NGNG
>>870
こういうの作ってみました。。。

#include <stdio.h>
#include <string.h>

void main(){
FILE *fp;
char *ch;
long int f_size[128];
int i=0,k=0,j=0;

fread(&ch,sizeof(ch),1,fp);
while(sizeof(ch)>i++,k++,ch++){
if(*ch == '\n'){
f_size[j] = k*sizeof(char);
k=0;
j++;
}
}
}
0876デフォルトの名無しさんNGNG
ネタはよそでやってくれ(-_-;)
0877デフォルトの名無しさんNGNG
c++でgotoxy()のような動作をする命令はないですか?
0878デフォルトの名無しさんNGNG
>>877
ここはCのスレだぞ。
そのgotoxy()がCの関数ならC++からでも呼び出せるだろ。
0879デフォルトの名無しさんNGNG
>>860
>>865
>>867
結構かかるもんですね。
腰を据えてじっくりがんばっていきます。
凝り性っていうのには気づきませんでした。考えてみればそうですね。

どうもありがとうございました。将来、フリーソフトで恩返ししたいと思います。
0880デフォルトの名無しさんNGNG
ttp://www.kumei.ne.jp/c_lang/intro/no_26.htm
win2kでエスケープ・シーケンスってできますか?
0881デフォルトの名無しさんNGNG
>>880
すれ違い、かつ、日本語がおかしい
0882デフォルトの名無しさんNGNG
うまく作動しません。

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

main(){
int coin;
int head;
int tail;
int i;

srand(time(NULL));

printf("コイン投げ\n");

for(i=0;i<3;i++){
coin=rand()%2+1;
if(coin==1){printf("コインは表\n");head++;}
else{printf("コインは裏\n");tail++;}
}
printf("表が%d回・裏が%d回\n",head,tail);

return;
}
0883デフォルトの名無しさんNGNG
int head = 0;
int tail = 0;
0884デフォルトの名無しさんNGNG
return 0;
0885デフォルトの名無しさんNGNG
リスト操作はどういう事に使うんですか
0886デフォルトの名無しさんNGNG
会社に愛想が尽きたとき
0887デフォルトの名無しさんNGNG
>>885
リスト操作をリストの操作以外に使えるなら教えてホスィ。

質問の意味が曖昧だとかいう前にスレ違いクサイが。
0888デフォルトの名無しさんNGNG
>>875
つっこみどころ満載
0889デフォルトの名無しさんNGNG
うまく作動しません。

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

main(){
int coin;
int head=0;
int tail=0;
int kou[6];
int i;

int n;

srand(time(NULL));

for(n=0;n<6;n++){
for(i=0;i<3;i++){
coin=rand()%2+1;
if(coin==1){head++;}
else{tail++;}
}

kou[n]=(head*2)+(tail*3);
if(kou[n]==6||kou[n]==8){printf("陰コウ== ==\n");}
else{printf("陽コウ=====\n");}
}
return 0;
}
0890デフォルトの名無しさんNGNG
for(n=0;n<6;n++){
head=0; tail=0; //ここ追加
for(i=0;i<3;i++){
0891デフォルトの名無しさんNGNG
>>882==>>889
質問になってない。
0892デフォルトの名無しさんNGNG
>>891
質問ではなく独り言なんですが。
0893デフォルトの名無しさんNGNG
質問です。次のような構造体と関数があったとします。
typedef struct _POINT {
  int x;
  int y;
} POINT;
void SetPoint(const POINT point);

この関数を呼び出すとき、引数の構造体を即値で記述する方法はないでしょうか。
  SetPoint((const POINT*)(&POINT(4,5)));// ※イメージです、コンパイルは通りません

値をスタック領域にコピーするようなCPUコストが発生しないように、
以下のコードと同様のコンパイル結果が得られるようにしたいと考えています。
(1) static const POINT point = {4,5};
  SetPoint(&point);
(2) SetPoint((const POINT*)"\x04\x00\x00\x00\x05\x00\x00\x00");// ※Win32環境用
0894デフォルトの名無しさんNGNG
>>893
定数といえ定数と。
C99に準拠しているコンパイラを使っているのなら可能だが、そうでないなら不可能。
http://seclan.dll.jp/c99d/c99d07.htm#dt19991101
0895デフォルトの名無しさんNGNG
>>883>>884>>890
ありがとうございました。
0896893NGNG
>>894
複合リテラルという機能ですね。
VisualC++6.0をコンソールで使っていましたが、対応していようです。
コンパイルオプションを変えれば使えるのかもしれませんが・・・

C言語に手をつけて5年ほどになりますが、その場で必要なことしか覚えてきませんでした。
まじめな本で基本的な用語から勉強しなおした方がよさそうです。
ありがとうございました。
0897デフォルトの名無しさんNGNG
まだC99に準拠したコンパイラというのは少数派だからな。
フリーコンパイラとか、みんな準拠していないから、C99の新しい仕様は
コンパイラのヴァージョンを確認したうえで使わないと。
0898デフォルトの名無しさんNGNG
>>893
>値をスタック領域にコピーするようなCPUコストが発生しないように、

定数だとスタックに積まれない、と思っているのか?
0899デフォルトの名無しさんNGNG
>>898
コンパイラの最適化で詰まれなくなる可能性が上がる
ってことじゃない?
0900デフォルトの名無しさんNGNG
「呼ぶ側」のローカル変数領域とそのコピーコストを節約したいってことだろ
0901XNGNG
Cで電卓のプログラムを作ってください。
0902デフォルトの名無しさんNGNG
ソースコードがたくさんあるサイトってありませんか?
sourceforgeとかは嫌です。
0903デフォルトの名無しさんNGNG
何が嫌なのか分からんとお勧めしようが無いが。
0904デフォルトの名無しさんNGNG
>>902
http://www.vector.co.jp/soft/data/prog/se002453.html
0905デフォルトの名無しさんNGNG
www.gnu.org


……に行ったらストライキしてるしw
0906デフォルトの名無しさんNGNG
>>905
はぁ?主張してるだけでしょ。 www.gnu.org/home.html
0907デフォルトの名無しさんNGNG
Join the web strike from April 5 -> April 14, 2004!
0908デフォルトの名無しさんNGNG
>>893
そもそも
SetPoint((const POINT*)"\x04\x00\x00\x00\x05\x00\x00\x00");
みたいなひどい処理をせざるを得ない時点で設計が下手くそなんだと思うよ。
そんなわけの分からん新機能使う前に設計を考え直したほうがよくね?
5年もやってるとは思えない
0909デフォルトの名無しさんNGNG
#include <stdio,h>

void main() {
char arra[1];

gets(arra + 2);

return 1.2;
}
0910デフォルトの名無しさんNGNG
>>908
たまにいるよな、一時変数確保のCPU負荷がどうこう言うヤシ。
でもってそういうヤシに限って他のことが高負荷な処理になってたりする。
可読性を低くすることで請負の仕事の独占を図ってたりするわけだが。
プロマネは、そういう輩を見抜かないとねw
0911デフォルトの名無しさんNGNG
>>899
>コンパイラの最適化で詰まれなくなる可能性が上がる
>ってことじゃない?

最適化でスタックに積まれなくなるわけないじゃんw
0912デフォルトの名無しさんNGNG
処理系によってはスタックに積まずに渡すこともある。
大抵__fastcallみたいなものつきで関数を宣言しとかんとならんけど。

こういうのがついたら可能な限りレジスタで渡すようにする処理系はある。

最適化オプションによってすべての関数にこういった物がついてると
仮定してコンパイルさせることも可能なため、「最適化オプションによって」は
スタックに積まれなくなることもある。

「最適化で」積まなくなることもありうる。static関数の場合ですな。
0913デフォルトの名無しさんNGNG
あと、inline関数なんかの場合もね
0914デフォルトの名無しさんNGNG
SH-Cコンパイラはデフォルトでレジスタ渡しだし。
0915sageNGNG
> (1) static const POINT point = {4,5};
>   SetPoint(&point);
これなら{4,5}は実行初期化時からメモリに常駐され
スタックに詰まれることもないと思うが
関数側にもconst付いてるし
0916デフォルトの名無しさんNGNG
フラグ変数とビットマスクとかを使って内部の状態を保存してるんですが、
フラグ変数を使わないテクニックはありますか?
0917デフォルトの名無しさんNGNG
>>916
抽象的過ぎ
状態にも色々ある
0918デフォルトの名無しさんNGNG
>>917
ウインドウが表示されてるか、されてないかとか
クリックされたとか、されてないとか

こういう状態のことです。
0919デフォルトの名無しさんNGNG
>>918
「ビットフィールド」という答えで希望する解答になるのだろうか?
0920GNGNG
a[256][256]を
fwrite()で書き出したいのですが,
配列形式のままで出力できますか?
つまり,256こ並べて改行して..といった感じです.
ご存知の方教えてくださいまし.
0921デフォルトの名無しさんNGNG
>>920
forかなんかでも使いましょう。
0922デフォルトの名無しさんNGNG
会社でカレンダーソフト作る研修やっているのですが、分かりません。
漏れだけ終らなくてクビにされそうです。
助けてください…
0923デフォルトの名無しさんNGNG
スレ違いです。
別のスレに移動するか退職しましょう。
0924貧乏紙NGNG
カレンダーって、西暦0年1月1日が日曜日でそっから「うるう年と400年がどうの」
でfor文使って表示させたい月の1日が何曜日か調べてそっからさらに7での余りがどうのこうので
改行させるとかなんとか。。。
って言うかプログラム知らないのにプログラム作る会社に入ったの???
0925デフォルトの名無しさんNGNG
>>920
改行と言うことは、テキストエディタで読めるようにしたいのか?
それならfwrite()でなくてfprintf()だろ。
そもそも、その配列aの型は一体なんなんだ?
0926デフォルトの名無しさんNGNG
>>924
物を知らないのにコテハンで恥晒して楽しいか?
0927デフォルトの名無しさんNGNG
>>922
マジレスすると、暦に関するアルゴリズムが存在するし、
サンプルプログラムもWEB上に転がっている。

研修をしている会社が何故、暦のプログラムを作らせるか知らないが、
自力だけで解けとは言ってないだろ、きっと。

本読むなりWEBでググるなりして情報を見つけ出す
情報検索能力を問うているんだよ、きっと。
この能力はPGには確かに必要ではある。
ま、そんな大げさな能力でもないけどね。
0928デフォルトの名無しさんNGNG
かなり、ってか絶対底の質問だと思うんだけど許してな

コンパイルができません。
しようと思ってもソース ファイルが開けませんと出てしまって・・・
何が原因ですかね?
0929デフォルトの名無しさんNGNG
>>928
アプリの使い方とか基本的なことは、ここ(プログラム板)ではなくて
PC初心者 http://pc5.2ch.net/pcqa/
Windows http://pc5.2ch.net/win/
とかへ行ったほうがいい。Mac OS や Unix系 OS なら、また別の板だけど。
0930デフォルトの名無しさんNGNG
ぶっちゃけ、業界では、アルゴリズムを自力で実装する事を
要求されるプロジェクトを、初心者にやらせない。

1.コピペの十分に試されたアルゴリズムのソースを導入
2.自力で試行錯誤して考えたアルゴリズムのソースを導入

プロとして評価されるのは1。プロの世界は学校ではない。
0931デフォルトの名無しさんNGNG
もう100回ほど書いた。Zellerの公式でぐぐれ。
0932デフォルトの名無しさんNGNG
本で書いてあるクイックソートが全然理解できん。
アルゴリズムはわかるんだけど、参考書にのってるソースが理解できない。
ぶっちゃけ、アルゴリズムってどれぐらい理解してたらいいの?
0933デフォルトの名無しさんNGNG
>>932
実際に書かなきゃいけなくなるまでは仕様が理解できて使えればいい。
先ずは、qsort()やbsearch()を使っていろいろやってみたらどうだろう。
0934デフォルトの名無しさんNGNG
>>932
>アルゴリズムはわかるんだけど、参考書にのってるソースが理解できない。

そういう場合はどんなにアルゴリズムを勉強しても無駄。
言語自体を勉強しろよ。

何でそんな当たり前のことが分からないんだ?
0935デフォルトの名無しさんNGNG
ところで、>>930 と >>932 は、同じ「ぶっちゃけ」という言葉を
使っているが、もしかして同一人物だろうか?

だとしたら・・・(w
0936デフォルトの名無しさんNGNG
>>935 ぶっちゃけ別人だし(笑

>>934 アルゴリズムと言語は別物・・934はhellow,worldしかかけない
初心者
0937hello worldNGNG
>>936
煽るときはスペルミスに注意したほうがいいな。 (プ
0938デフォルトの名無しさんNGNG
>>930と>>932の文章鑑定

>>930の文章の特徴
文書の末尾に必ず「。」を用いる。英数字の表記に全角を用いる。
「、」をやや脈略無く使用する傾向にある。
体言止め等を用いて文章に勢いをつけている。上記の「、」の使用もその一環と思われる。
また「実装する事を要求されるプロジェクトを」の説で「実装することを」とするのは珍しい
大多数の日本人は「実装することが」とする。文章は日本標準語。

>>932
文書の末尾に必ず「。」を用いる。
特筆するべき特徴は「本で書いてある」の文面。大多数は「本に書いてある」とする。
「わかるんだけど」「のってる」「理解してたら」などから文章は東京弁であることが分かる。

結論:比較する文章が非常に短くて予測は困難であるが、恐らく別人の文章である。
0939デフォルトの名無しさんNGNG
>>932
正しい手順を踏めば、理解しやすいはず。
ってか、君の言っているクイックソートのソース見せてくれないと、
なんとも言えないと思う。
0940デフォルトの名無しさんNGNG
俺ももしB木のアルゴリズムを使えと言われたら、
そこらへんに転がってる洗練されたプログラムを
引っ張り出して来そうなんだが、ダメなのかね?
0941デフォルトの名無しさんNGNG
>>932
いっそ関数型言語使えば?
クイックソートとか書きやすいよ
0942デフォルトの名無しさんNGNG
ぶっちゃけ、Cでクイックソートを記述しても複雑とは思えない。
簡単に言えば、
・全体をA,Bに二分割して、Aをソート
・Bをソート
って事を再帰すれば良いのだから。
0943デフォルトの名無しさんNGNG
>>942
でも境界条件を考えるのが鬱陶しい
0944デフォルトの名無しさんNGNG
#include <stdio.h>
void QuickKojunSort(int array[], int left, int right);
int main(void){int gakusei[] = { 165, 158, 170, 156, 175 };
int i;
QuickKojunSort(gakusei, 0, 4);
for (i = 0; i < 5; i++){ printf("%d\n", gakusei[i]);}
return 0;}void QuickKojunSort(int array[], int left, int right){
int jiku,big,small,flag,temp;
if (left < right) { jiku = array[left];
big = left + 1; small = right;flag = 0;
while (flag == 0){
while ((array[big] <= jiku) && (big < right))
{ big++; }
while ((array[small] >= jiku) && (small > left))
{ small--;}
if (big < small) {temp = array[big];
array[big] = array[small]; array[small] = temp; } else {
flag = -1;}}
array[left] = array[small];
array[small] = jiku;
QuickKojunSort(array, left, small - 1);
QuickKojunSort(array, small + 1, right);}return;}
こんな感じです。クイックソートのソース、微妙にしか理解できん
0945デフォルトの名無しさんNGNG
再帰のなら何も見ないでかけるんだが

void quick(int *s, int left, int right){
int pl = left, pr = right;
int x = s[(left + right) / 2];

do{
while (x > s[pl]) pl++;
while (x < s[pr]) pr--;
if (pl <= pr){
swap(int, s[pl], s[pr]);//交換
pl++; pr--;
}
} while(pl <= pr);

if (pl < right) quick(s, pl, right);
if (left < pr) quick(s, left, pr);
}
0946デフォルトの名無しさんNGNG
>>945その、クイックなら、理解できるが、もっと早いクイックソートの
ソースが理解できん。ぶっちゃけ、944のソース理解できるか?
0947デフォルトの名無しさんNGNG
>>945 944も再帰だ(w

>>946 944と945はほとんど同じだ
全体を分けるのに 944はarray[left]を基準にしている
945はs[(left + right) / 2]を基準にしている

0948デフォルトの名無しさんNGNG
プログラム業務の会社で働くには、Cどれぐらいできたらいいの?
どれぐらいのアルゴリズムを覚えたらいいのでしょうか?
0949デフォルトの名無しさんNGNG
アルゴリズムは覚えなくても構わん
0950デフォルトの名無しさんNGNG
944はある要素(枢軸)をソート後の配列の置かれるべき位置に移動している。
その際、枢軸より小さな要素は配列の若い方、大きな要素を逆の方へ移動させた。

945とは少し違うね。
0951デフォルトの名無しさんNGNG
そんなアフォな事いってる間は
入れないだろうな
0952デフォルトの名無しさんNGNG
>945とは少し違うね

> swap(int, s[pl], s[pr]);//交換
ってのは違うのか?
0953デフォルトの名無しさんNGNG
C言語の埋め込みSQLを現在しているところを
SELECT *  FROM TBL
WHERE A = :A;

LIKEを使ったWHERE条件に変えたいんですが
 
SELECT *  FROM TBL
WHERE A LIKE ':A%'

としても動いてくれません。
埋め込みSQLでLIKE文は使えないんでしょうか?
0954デフォルトの名無しさんNGNG
それは C言語の話ではないだろ(w
0955デフォルトの名無しさんNGNG
>954 もしかして printf() で '%'を出力するにはどうするか?ネタかも
→ヒントは 書式指定
0956デフォルトの名無しさんNGNG
>>954

SQLは忘れちゃったが
;Aの中に%も代入しちゃえばよかったんじゃなかったっけ?
違ったらスマソ
0957956NGNG
あれ?いい加減に書いたのにあってた?
俺も捨てたもんじゃないな。
0958デフォルトの名無しさんNGNG
>>957
はぁ?
0959デフォルトの名無しさんNGNG
あきれてものが言えないだけです。
0960956NGNG
やっぱり?ハズレ?
いい加減なこと書くと駄目だな。

0961デフォルトの名無しさんNGNG
そして民族はりんごの皮を煮る
0962デフォルトの名無しさんNGNG
次スレ
http://pc5.2ch.net/test/read.cgi/tech/1081597375/
0963デフォルトの名無しさんNGNG
>955
414ペイジの表を見ればわかりますね。
0964デフォルトの名無しさんNGNG
#include <stdio.h>

int main()
{
printf("\x1b[4;31m");
printf("色が変わってアンダーラインが付くはず\n");
return 0;
}

猫プロに書いてあったんだけど、色変わらないしアンダーライン付かない
ttp://www.kumei.ne.jp/c_lang/intro/no_26.htm

環境
WIndowsXP pro
VC++6.0
0965デフォルトの名無しさんNGNG
cmd.exeだとダメなんぢゃない
0966デフォルトの名無しさんNGNG
>>964
ANSI.SYS。
スレ違いですよ。
0967デフォルトの名無しさんNGNG
>966
XPでansi.sysなんか組み込んでも無駄ですよ。
まあおとなしくcygwinでもつかっとけってこった。
0968デフォルトの名無しさんNGNG
>>964
コンソールAPI使えば9x系,NT系どっちもいけるよ。
サンプルは猫の58章にある。
0969964NGNG
>>965-968
猫プロの26章のはGNU環境、9x系で動作するもので
NT系では動作しないということですね。
58章はまだ先なので気が付きませんでした。
レスありがとうございました。
0970デフォルトの名無しさんNGNG
typedef struct {
char hoge[5];
char hoge2[5];
} Hoge;

Hoge hogehoge;

foo(&hogehoge);


/* 以下、fooの本体 */
void foo(Hoge *bar) {
    int i = 123;

    memset(bar, '\0', sizeof(bar));
    printf("bar->hogeの値は[%s]です。", bar->hoge);    /* 初期化されてない */

    sprintf(bar->hoge, "%d", i);             /* コピーされない */
    printf("bar->hogeの値は[%s]です。", bar->hoge);
}


まず、以上のコードでは、Hoge型の変数hogeの内容は初期化されませんか?
sizeof(Hoge)
とすればよいのでしょうか?
(すいません。本来なら試してから質問するのが筋です。ですが今実行環境がありません)

次に(これが本当の疑問です)、
sprintfが反映されないのは何故でしょうか?

ご指導よろしくお願いします
0971デフォルトの名無しさんNGNG
> Hoge hogehoge;
これは何処で宣言しているのか?
0972デフォルトの名無しさんNGNG
>971

typedefはヘッダーファイルで

Hoge hogehoge;
は1つ上のレイヤーの関数内で宣言しています。
0973デフォルトの名無しさんNGNG
973
0974デフォルトの名無しさんNGNG
void baz(void) {
    Hoge hogehoge;

    foo(&hogehoge);
}
0975デフォルトの名無しさんNGNG
>>970
sizeof(bar)だとHoge *(ポインタ)の大きさ(うちでは4)になる。
0976デフォルトの名無しさんNGNG
>972
あぁスマソ

> memset(bar, '\0', sizeof(bar));
こっちの事か。sizeof(Hoge)だな。
sizeof(ポインタ)とsizeof(構造体)の違いだ。
0977デフォルトの名無しさんNGNG
sizeof(*bar)
0978デフォルトの名無しさんNGNG
この場合、sizeof(bar)だろうがsizeof(*bar)だろうが表示結果は変わらないんじゃないか?
全部を0にしようが先頭数バイトを0にしようが。
0979978NGNG
あ、表示結果とは言っていないか。
0980デフォルトの名無しさんNGNG
初心者です。
main関数でいつもreturn 0;を返してますが
さきほどreturn 1;をみました。
1が返るとどうなるの?
0981デフォルトの名無しさんNGNG
そーだね。
0982デフォルトの名無しさんNGNG
>>980
この一行目は明らかに釣り。
0983デフォルトの名無しさんNGNG
1が返っていく
0984980NGNG
ほんとにわかりません。
1が返って終わりですか?
0が返ったときと何がちがうんですか?
0985970NGNG
>>979

結果から言ってしまえば、いずれにしても
"bar->hogeの値は[]です。"
と表示されると思いましたが、実際に動かすと不定値と思わしき値が表示されます。
0986デフォルトの名無しさんNGNG
>>985
bar->hoge2にしていないか?
0987デフォルトの名無しさんNGNG
>>984
cmd.exe で実行しているなら、echo %ERRORLEVEL%
UNIX shell 上なら echo $?
0988デフォルトの名無しさんNGNG
>>986
漏れもそれに一票
0989970NGNG
>>986

それは無かったと思います。
(すいません。確認できませんが・・・)

*bar = '\0';

とすると先頭アドレスの中身に'\0'が代入されて、
やはり"bar->hogeの値は[]です。"と表示されるような気がしますが、
やはり不定値が表示されました。
0990デフォルトの名無しさんNGNG
構造体に整数って代入できたっけ・・・・
0991デフォルトの名無しさんNGNG
> *bar = '\0';

これは許される事なのか?
0992デフォルトの名無しさんNGNG
ネタの臭い
0993デフォルトの名無しさんNGNG
>>989
じゃあ構造体の定義でchar hoge[5]よりもchar hoge2[5]を上に持ってきたとか。
0994デフォルトの名無しさんNGNG
とりあえず詰め物を構造体の先頭にすることは禁止されているから。
0995デフォルトの名無しさんNGNG
>989 コンパイルできないだろ?
0996970NGNG
>>994

そうですか・・・。

コンパイラが認めてないのであれば、私の勘違いかもしれません。
ただ、数時間これと格闘していたので、いろいろやってみた気がしたんです。

パッケージ開発中のソースなので、実物は晒すことができないんですが、
明日、もう一度、間違いじゃないか確認してみます。
0997デフォルトの名無しさんNGNG
>数時間これと格闘していた

実にいぃですなぁ〜のんきで。
うらやますぃ
0998970NGNG
>>995

そうですか・・・

今確認できないのが残念です。

それは非常に興味深いのですが、

*bar = '\0';
はNGで

memset(bar, '\0', sizeof(*bar));
はOKということですか?
(これはメモリに展開しているhogehogeの先頭アドレスも含めた全体に'\0'が代入されるのではない?)
0999デフォルトの名無しさんNGNG
>>996
顔から火が出るほど恥かしくなるようなミスをしてるか、ネタかのどっちかだな。
1000デフォルトの名無しさんNGNG
0x3e8 げと


したいんだな♪
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。