トップページ⇒tech
968コメント309KB

C言語なら、オレに聞け! <4>

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001ジョブス3.1世NGNG
おれは26才、4年間プログラムを一生懸命作ってきた。
C言語しか知らないがC言語なら誰にも負けない...
なんでも俺に聞くが良い。
だが、FAQに載ってる質問すると煽るぞ、ゴラア!!
それに勘違いするな、俺は貴様の宿題を解いてやるほど暇じゃない。

・comp.lang.c Frequently Asked Questions
http://www.eskimo.com/~scs/C-faq/top.html

・C FAQ 日本語訳
http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/C-faq/C-faq-00.html

前スレ、関連スレは >>2 へ
0002ジョブス3.1世NGNG
独断と偏見で選んだ関連スレだ。

関連スレ
・( ゚Д゚)ノ ギコ猫のプログラム相談室part5
http://piza.2ch.net/test/read.cgi?bbs=tech&key=980521175

・お兄ちゃんの宿題、私が答えるよ
http://piza.2ch.net/test/read.cgi?bbs=tech&key=982853418

・VisualC++相談室 2
http://piza.2ch.net/test/read.cgi?bbs=tech&key=981630730

・C++Builder相談室
http://piza.2ch.net/test/read.cgi?bbs=tech&key=969458279

・C++相談室
http://piza.2ch.net/test/read.cgi?bbs=tech&key=980175292

・C#相談室
http://piza.2ch.net/test/read.cgi?bbs=tech&key=977112364

・ネットワークプログラミング相談室
http://piza.2ch.net/test/read.cgi?bbs=tech&key=970344582

過去スレ
・C言語なら、オレに聞け!
http://piza.2ch.net/tech/kako/967/967985026.html

・C言語なら、オレに聞け! <2>
http://piza.2ch.net/test/read.cgi?bbs=tech&key=979529893

・C言語なら、オレに聞け! <3>
http://piza.2ch.net/test/read.cgi?bbs=tech&key=989929288
0003ジョブス3.1世NGNG
さあ、どうぞ
0004デフォルトの名無しさんNGNG
お疲れ様>1
0005デフォルトの名無しさんNGNG
次はジョブス3.14世になるのだろうか・・・
0006デフォルトの名無しさんNGNG
んで、どうなの?偶数に丸め込むのが正しいの?
信号処理でも0近傍は0に丸め込んだほうが量子化ノイズが抑え
られるので正しいような気がするが…
0007デフォルトの名無しさんNGNG
>>6
正しい正しくないは無い。
自分の作成するプログラムにとって必要と思えば採用すればいい。

組み込み系で、細かいデータの集積が必要とかいうなら入れればいいし、
一回一回のデータは単発で累積してどうこうってわけでもないなら入れなくてもいいし、
統計的に誤差を無くす手法なわけだから、そこらへんは設計者として判断しろ。
0008たっくんNGNG
質問します。
DIBのデータ構造はウインドウズでもリナック巣でもマックでも
同じ構造をしているのでしょうか?
0009デフォルトの名無しさんNGNG
>>8
意味が分からない。
何のデータ構造?ファイル?
0010中途半端くんNGNG
DIBってこれのこと?
http://www.sm.rim.or.jp/~shishido/dib1.html
0011デフォルトの名無しさんNGNG
>>1のFAQってリンク切れてない?
ところで日本語FAQに載っている曜日を計算するサンプルの
アルゴリズムが理解できない。誰か解説キボンヌ。
dayofweek(y, m, d) /* 0 = Sunday */
int y, m, d; /* 1 <= m <= 12, y > 1752 or so */
{
static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
y -= m < 3;
return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;
}
0012デフォルトの名無しさんNGNG
>>5
いや、3.11 か 95 だと思われる。
0013中途半端くんNGNG
>>11
ツェラーの公式を少し手抜きしたものでしょう

こういうの(y,m,d,wはint型で)
if(m<2){y--;m+=12;}
w = ( y+y/4-y/100+y/400+(13*m+8)/5+d ) % 7;
0014中途半端くんNGNG
>>13
まちがえた!!m<2 じゃなくて m<3ね

if(m<3){y--;m+=12;}
w = ( y+y/4-y/100+y/400+(13*m+8)/5+d ) % 7;
0015デフォルトの名無しさんNGNG
三点からなる集合X={x,y,z}においていくつの位相を定めることができるか?

この問題を解くプログラム誰か作ってください。
0016デフォルトの名無しさんNGNG
ファイルのサイズを調べるにはどうしたらいいでしょうか?

fp = fopen( hogehoge, "rb");
fseek( fp, 0, SEEK_END);
ftell( fp);

簡単に思いつくのはこれなんですが
unix 以外では正しくないんだとか
古いのはみんな切り捨ててもいいんですけども
stat か GetFileInformationByHandle ... めんどうくさいです
0017デフォルトの名無しさんNGNG
>>16
DOSでもWinでもその方法やってきた。
正しくないことはないだろ、原始的だけど
0018デフォルトの名無しさんNGNG
WinだったらAPI使えよ
0019デフォルトの名無しさんNGNG
C言語の現在の需要ってどのくらいあるのでしょうか?
それと、C言語の仕事ってどんなものがあるのでしょうか?
0020初めての・・・NGNG
スレ違いだったらすいません。
「C/C++できる人」というのは、
CとC++、両方できる人のことですか?
確かCとC++は別物だったハズ・・・

将来のためにC始めようと思うのですが。
良かったら教えてください。
0021jiniNGNG
>>20
> 将来のためにC始めようと思うのですが。
とてもいいことです
まともな物が書けるようになるまでは
C++は触らないほうが無難です。
0022デフォルトの名無しさんNGNG
>>16
stat(2)のstat構造体にファイルサイズがそのままあるだろ
0023ネタにマジレスNGNG
>>22
stat(2)はCの標準関数にはない

ちなみにC FAQ 19.12:では
http://www.catnet.ne.jp/kouno/c_faq/c19.html
> もしも"ファイルの大きさ"が、C言語を使ってファイルから読むこと
> のできる文字の数ということであれば、一般にはこの数を前もって知
> ることは不可能である。
とある。
0024ネタにマジレスNGNG
>>23 補足
> ftell()はバイナリーファイルを除いては正しくバイト数を返すとは限らない。
>>16 の例は
バイナリモードで開いているので正しいバイト数を返してくれる
すなわちファイルサイズを返してくれる。
と期待して良いと思う。
0025デフォルトの名無しさんNGNG
>>19
需要:かなり有る
仕事:いろいろある
0026デフォルトの名無しさんNGNG
>>23
POSIX.1にはあるんで、現状WinNTやフツーのUnixなら問題無いんでは?
0027としNGNG
memsetを高速化するにはどうしたら良いですか?
0028デフォルトの名無しさんNGNG
>>27
アルゴリズムを練り上げるべし
0029デフォルトの名無しさんNGNG
age とこう。にしても part 3 は速かったなぁ
0030デフォルトの名無しさんNGNG
memset
memmove
memcpy
strcpy
strcmp
これを関数使わずにCで書ける人、やってみてください。
0031デフォルトの名無しさんNGNG
>>30
自分でやれ
宿題か?
0032デフォルトの名無しさんNGNG
>>30
#pragma intrinsic( memset, memcpy, strcpy, strcmp)
ほら、4/5はできたぞ。あとはmemmoveだけだな(ワラ
0033デフォルトの名無しさんNGNG
>>20
CとC++の間にJavaを入れとくといいと思う
0034デフォルトの名無しさんNGNG
関数atoiを使わずに『数字→数値』変換するのに一番適しているのは、
for&ifかswitchかmemcmpのどれがいいと思いますか?

>1 前回から一ヶ月も経っていないのに4かぁ〜。
  がんばれ
0035デフォルトの名無しさんNGNG
>>34
sscanf
0036デフォルトの名無しさんNGNG
>>34
flex
0037デフォルトの名無しさんNGNG
int main()
{
 int a = 10;
 int b = 12;
 cout << a << b << endl;
 return 0;
}

エラーがでるのですがどうしてでしょう?
本に書いてあるとうりに打ち込んだのですが。
0038デフォルトの名無しさんNGNG
再帰を用いたプログラムと再帰を用いないプログラムでは、
プログラムの読みやすさや、計算にかかる手間などは
どう違うんでしょうか?
0039デフォルトの名無しさんNGNG
2つの n 次正方行列の積って、

/***** c[n][n] は予め0で初期化 *****/
for (i = 0; i < n; ++i)
    for (j = 0; j < n; ++j)
        c[i][j] += a[i][j] * b[i][j];

こんなんでいいの??
無い頭をどう捻ってもこれで行列の積が求まるとは
思えないんだけど…
0040デフォルトの名無しさんNGNG
>>15
ていうかお前位相の定義わかってるか?
わかってないならその単位はあきらめろ。
位相がわかってないやつに数学科を卒業させてやるわけにはいかない。

わかってるならそれをちゃんと説明して、
プログラムでどう実装すればいいか聞いてみろ。

#純粋数学やってないひとに単に位相って言うと、波の位相だと
#思われるのがオチ。
004115NGNG
>>40
おまえに卒業させてもらうわけじゃないぞ
こたえる気ないのならだーってろ!!
0042Perl厨房NGNG
>>37
#include <iostream.h>
0043デフォルトの名無しさんNGNG
>>39
b[i][j]をb[j][i]と間違ってるか
bがあらかじめ転置行列にしてあるのかどっちかじゃない?
004437NGNG
>>42
それは入れてます。でもエラーがでるんですが...
0045デフォルトの名無しさんNGNG
>>44
とりあえず、どんなエラーが出たか、書けや。
0046デフォルトの名無しさんNGNG
>>41 残念ながらここはCのスレッドであって数学の専門家はあまりいないんだな。
その一言はきっと数学知識のある貴重なプログラマの反感を買ったのだな。
0047デフォルトの名無しさんNGNG
>>41
アッヒャッヒャッヒャhyaハ
0048デフォルトの名無しさんNGNG
>>11
fj.comp.lang.c で訊けば、坂本氏本人が教えてくれるかもね。
0049デフォルトの名無しさんNGNG
ライブラリのqsort,bsearchとかってvoid型ポインタから
どうやってポインタが指す内容を操作してるの?
voidのままではポインタ操作できないのでキャストしなければ
いけないと思うけど、キャストする型が判別できないし・・・
0050へたれNGNG
>>37
>>44
本の通りに打ち込んだということから言語に触れて間もないと思う。
インクルードファイルのフォルダ指定が間違ってるとか・・・。
使ってるソフトとかは何かな?VC++とか使ってるならそれは無いと思うけど。
で、endl って何?C++はほとんど知らんし・・・。
一応うつしてやってみたけど問題なく終了。実は;が:になってるとか・・・。
何はともあれエラーがわからなければ、何がおかしいかわかんないよ。

>>38
連結リスト(であってると思う)を使う時は
再帰使ったほうが解放させるときの処理が簡単に書けるから再帰使ってる。
俺の意見は参考にならんと思うけど一応。
0051sageNGNG
>>49
三番目の引数と四番目の引数が
なにを意味するか考えてみるべし < qsort
0052デフォルトの名無しさんNGNG
>>37
Cには、そんな命令(関数)はありません。
もし、あなたの環境がCなら出来なくて当然ですし、
C++なら、スレ違いなので、そっちに行って聞いて下さい。
0053デフォルトの名無しさんNGNG
>>39
+= なの? ただの = でいいんじゃない。
005416NGNG
>>17,18,22,23
レスありがとうございます。statつかえばいいのですけど system-depend な
定義に少し食傷気味といいますか、、なんとか C 標準で書けないものかと
お知恵拝借いたしました次第です。
C の規格自体がもう古いので何かしようとするとキツイ制限にはまって
しまいますが、かといって広い環境でサポートされて高速に動くのは C
くらいしかないかなとジレンマに陥ります。

>>24
バイナリストリームなら期待したように動作するのでしょうか?
それなら解決です。でも何やら気になる一文があるのですが...
これってバイナリやステート依存なストリームには SEEK_END は undefined
behavior なのでしょうか...? (英文は苦手です・涙)

>>26
やはり POSIX を標準として書くべきでしょうか..
スレッドもマップトファイルも C 標準ではもはや無理ですし..

規格書の気になる一文(ISO-C99N896 302p)
>211Setting the file position indicator to end-of-file, as
>  with fseek(file, 0, SEEK_END), has undefined behavior for
>  a binary stream (because of possible trailing null
>  characters) or for any stream with state-dependent
>  encoding that does not assuredly end in the initial shift
>  state.
0055デフォルトの名無しさんNGNG
>>54
一般のストリームと言うことになるとSEEK_ENDは未定義かもしれんが、
まぁファイルなら大丈夫だろう、と言ってみるけどよく知らん。
0056デフォルトの名無しさんNGNG
ファイルに書かれた数字を行ごとに2次元配列に読み込むには
どうすればいいのでしょう?
ファイルは
12,45,30,11,0,.....
2,6,4,100,55...
3,41,67....
こんな形で、カンマがあってうまくいきません。
たすけて。
0057デフォルトの名無しさんNGNG
>>56
> ファイルに書かれた数字を行ごとに2次元配列に読み込むには
> どうすればいいのでしょう?
次元数が決まっているなら
fscanf(fp, "%d,%d,%d\n", ary[n][0], ary[n][1], ary[n][2]);

決まっていないなら
fgets, strtok, atoiなどを駆使して自分で書け
0058デフォルトの名無しさんNGNG
>>56
どんな風に格納するかわからんが
fscanf(fp,"%d,%d,・・・",&a[0][0],&a[0][1]・・・);
が一番簡単
0059デフォルトの名無しさんNGNG
>57,>58
解決しそうです
ありがとうございます
006057NGNG
>>57
しくじった。初歩的なミスだ(;_;)
> ary[n][0]
&ary[n][0]

鬱だ、今日は調子が悪い
0061デフォルトの名無しさんNGNG
そんな簡単なカンマの読み方が!!!!
Cを5年やってて気付かなかったYO・・・

死なないとダメかな?
でも今死ぬと3億のプロジェクトが・・・・うみゅー
0062荒らしNGNG
荒らすぞ
0063荒らしNGNG
ああ
0064荒らしNGNG
ああ
0065荒らしNGNG
ああ
0066荒らしNGNG
ああ
0067荒らしNGNG
ああ
0068荒らしNGNG
ああ
0069荒らしNGNG
ああ
0070デフォルトの名無しさんNGNG
プログラムなんかつくてるやつ
しねや
0071デフォルトの名無しさんNGNG
プログラムなんかつくてるやつ
しねや
0072デフォルトの名無しさんNGNG
プログラムなんかつくてるやつ
しねや
0073デフォルトの名無しさんNGNG
プログラムなんかつくてるやつ
しねや
0074デフォルトの名無しさんNGNG
プログラムなんかつくてるやつ
しねや
0075デフォルトの名無しさんNGNG
課題丸投げ厨が逆ギレか。わかりやすいぞ>>62-74=15
007615NGNG
うるせーぞ
わりーかよー
やめてほしかったら問題とけよー
0077デフォルトの名無しさんNGNG
おもしろいからもっとヤレ
0078デフォルトの名無しさんNGNG
>>76
荒らしてるヒマがあったら勉強しろ。
0079デフォルトの名無しさんNGNG
>>76
http://piza.2ch.net/test/read.cgi?bbs=tech&key=991726421&nofirst=true&st=16&to=16
008015NGNG
>>79
うっせーなー
おめーなんかにきーてねーよ
0081デフォルトの名無しさんNGNG
>>85
うっせーなー
おめーなんかにようはねーよー
もーくんなよー
たんいおとしてくびになっちまえよー
0082デフォルトの名無しさんNGNG
>>80
邪魔だから消えろ
0083デフォルトの名無しさんNGNG
C++について聞いたら怒る?
0084デフォルトの名無しさんNGNG
>>83
スレ違い
0085デフォルトの名無しさんNGNG
>>81
わかりました
逝ってきます
008615NGNG
このスレのやつは自分のわからないことにや答えられないときは
怒ってごまかすからむかつく。
自分もできないって素直に言えないのかなー
0087デフォルトの名無しさんNGNG
>>86
ごめんなさい
できないです
だから ここにこなくてもいいです
サヨウナラ
0088デフォルトの名無しさんNGNG
>>86
答えが返ってこない=わからない
としか考えられない想像力の欠如した人間はこの板には不要です。
さっさと回線切って首吊ってください。
0089デフォルトの名無しさんNGNG
>>86
1.簡単すぎて答えるまでもない
2.答えを書いてしまうとネタとして面白くない
3.課題を他人にやってもらうような奴に単位をやる必要はない
0090デフォルトの名無しさんNGNG
>>86
まず自分が率先してやりましょうね
0091デフォルトの名無しさんNGNG
数値を文字定数/文字列に変換するのってどうやるんでしょうか?
いや、ASCIIコードとかでなくて、7→'7'/"7"みたいな。
厨房な質問ですんまそん
0092デフォルトの名無しさんNGNG
man sprintf
0093デフォルトの名無しさんNGNG
>>91
int i = 7;
char c = '0' + i; /* あまり行儀はよくない */
char s[2];
sprintf(s, "%d", i);
0094>>92NGNG
どもっす!助かりました〜
009591,94NGNG
>>93
2つの方法っすよね?
両方覚えといて使ってみます〜
どもです
0096デフォルトの名無しさんNGNG
>>93

>char c = '0' + i; /* あまり行儀はよくない */

なぜこれが行儀良くないの?普通では?
0097デフォルトの名無しさんNGNG
>>96
文字コード体系に依存するから。
'0'の次が'1'であることは言語仕様としては保証できっこない。
0098デフォルトの名無しさんNGNG
char numbers[] = "0123456789abcdef...";
char c = numbers[i];
009996NGNG
>>97

------------- X3010 5.2.1 文字集合 (一部抜粋)---------
10個の10進数字, 0 1 2 3 4 5 6 7 8 9 について
0の右側に並んでいる各文字の値は,一つ左側にある文字の値に
比べ1だけ大きくなければならない。
------------------------------------------------------
ってなことが規格で決まってるよ。つまり数字の値は連続している
と決め付けていい。

ただし、アルファベットは連続しているとは限らない。
たとえばEBCDICではアルファベットは切れている。でも
数字はやはり連続している。

K&Rの28pにも「幸いこれはどの文字セットにも当てはまる」
と書いてある。
0100デフォルトの名無しさんNGNG
>>91
ざっと見た所では、98が1番良いように見える。
これなら、10進数以外にも適用出来るし…。
ただ、一度でも、printf系を使用しているプログラムで、
それ程、高速性を求めないのなら、sprintfでも良いかと…。
010196NGNG
#define quote(n) #n

でいいんじゃないの?

98のは10進数なら

const char numbers[10] = "0123456789";

だな。
0102デフォルトの名無しさんNGNG
すぐ機種依存だからダメとか言うやついるけど、
相手が特別な環境を指定してない限り
そこまでこだわらなくてもいいと思うんだが?

個人が趣味や勉強、仕事でちょこっとやる程度のもので
環境依存をごちゃごちゃ言うのはみっともないと思うのは俺だけか?

・・間違ってはいないとは思うが、そこまで言う必要はないと思うということでね
0103デフォルトの名無しさんNGNG
>>102
> 個人が趣味や勉強、仕事でちょこっとやる程度のもので
> 環境依存をごちゃごちゃ言うのはみっともないと思うのは俺だけか?
趣味や勉強が高じてプログラマとなった場合、
環境依存を考慮しないプログラマ、動けば良いと考えるプログラマは困る。

また、ある質問から議論が派生するのは有意義だとは思わないかい?
# 議論はスレッドを分離すべきだとかいう意見はともかく
0104デフォルトの名無しさんNGNG
意見ありがとうー

有意義だとは思うし、将来のためではあると思うけど、
なんか全体に「考えないやつはダメ人間」みたいな口調が
多い気がして・・・考えすぎか?

意見交換になっている部分は勉強になるし、俺知らなかった!と
いうのもあるから嬉しいんだけど
0105デフォルトの名無しさんNGNG
【質問】
Linuxで標準入力バッファをクリア(破棄)する方法をご存知の方が
いればアドバイスをお願いします。
0106デフォルトの名無しさんNGNG
char c;

scanf("%*c", &c);
0107デフォルトの名無しさんNGNG
コード領域に読み込まれたコードを書き換える事はどうやっても出来ませんか?
0108デフォルトの名無しさんNGNG
>>107 マシンとOSによる
0109デフォルトの名無しさんNGNG
>個人が趣味や勉強、仕事でちょこっとやる程度のもので
>環境依存をごちゃごちゃ言うのはみっともないと思うのは俺だけか?

普段の生活でズボラなコードを書いているからこそ、こういう
オープンな場で話したりするときくらいはしっかり高尚にやるべき、
って気がする。個人の趣味(MFCの好き嫌い)とかはともかく、規格に
書かれてることとかはさ。
011020NGNG
>>21,33
レスどうもです。
C→Java→C++の順が理想みたいですね、ありがとうございます。

ところで、賛否両論ありそうですが、ソフトは何を使った方がいいんでしょうか?
VC++買えばCとC++両方できるって聞いたんですが・・・
教えていただけるとありがたいです。

・・・Javaをやるなら、それも買わなきゃいけないんですねぇ・・・金が・・・
0111デフォルトの名無しさんNGNG
>>104
の主張もわかる。
 オレが仕事で関わっている環境も、至れり尽くせりなので
ここで論じられている慎重で繊細なコードも参考程度に過ぎ
ない。でも、未知の世界を知る上で重宝しているし勉強になる。
また、2chでの投げやりでツッケンドンな発言は、方言のような
感覚で慣れてしまった。メールアドレスを原則的に公開する掲
示板ならもっと紳士的なところもある。
0112デフォルトの名無しさんNGNG
>>110
BCCかGCCならタダだよ。
CもC++もできる。

Javaもタダでできますよ。
011320NGNG
>>112
GCCってなんですか?
聞いたことがないのですが
0114デフォルトの名無しさんNGNG
C言語のお手本のようなソースってどこかにありませんか?
こーゆー書き方こそ理想だって感じの
0115デフォルトの名無しさんNGNG
いや考えないやつはダメだろう、やっぱ。
少なくともプログラマとしては。
0116デフォルトの名無しさんNGNG
宗教論争開始の予感...
0117デフォルトの名無しさんNGNG
>>113
GNU CC を知らんのか。ゴルア

ttp://www.asahi-net.or.jp/~wg5k-ickw/html/online/gcc-2.8.1/gcc_toc.html
0118デフォルトの名無しさんNGNG
>>113
gccをキーワードにして検索エンジンで検索をしてみよう
検索しないと「教えて君」のレッテルを貼られるぞ。
http://www.sra.co.jp/wingnut/gcc/

>>114
> C言語のお手本のようなソースってどこかにありませんか?
K&Rにのってるソース
C言語を作った人が書いたソースなので一番信頼できると思う。
0119デフォルトの名無しさんNGNG
でもほんと言うと、ソースコードを大量に読みまくる中で
自然に (経験的に) 良いコードと悪いコードを見分けられる
ようになるのが理想だったりしますか?
0120デフォルトの名無しさんNGNG
ProCもわかる?
ワカルなら教えて!!
0121デフォルトの名無しさんNGNG
良いコードと悪いコードを見分けられるとそりゃ嬉しいかもしれんが、
本当に参考にしたい情報に選択肢が無いこともある。

MSのSDKのサンプルも、ものによって設計思想やら書き方やらが違うので、
調べたい件についてのサンプルが自分とは根本的に違うスタイルだったりして、
泣きそうになりつつもそれを解析する羽目になったり。
0122デフォルトの名無しさんNGNG
>113
GlobalComunicationClub
>114
#include<stdio.h>
int main()
{
printf("aho\n");
return 0;
}
0123デフォルトの名無しさんNGNG
getchar()について質問します。
stdin ストリームからの 1 バイトの取得 とのことなんですが、
以下のプログラムではa,bの値を入力からとって、その和をcに入れ、
リターンを入力してからcを表示させ、リターンを入力させて終了させたいのですが、
getchar()がそのように動いてくれないのは何故ですか?
それからこれを回避するにはどうすればよいでしょうか?

main(){

int a,b,c;

printf("Input a b ");
scanf("%d %d",&a,&b);

c = a + b;

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

getchar();
printf("end\n");

}
0124デフォルトの名無しさんNGNG
scanfしても\nはバッファ残っているので
c=a+b
の下に
fflush(stdin);
を入れましょう。
0125デフォルトの名無しさんNGNG
stdinとstdoutはどう違うのでしょうか
厨房な質問ですいません
0126デフォルトの名無しさんNGNG
>>125
スタンダードインプット?
スタンダードアウトプット?
みたいな?
て感じ?
0127デフォルトの名無しさんNGNG
stdinが標準入力で
stdoutが標準出力です

何も指定していなければ、
stdinはキーボード、stdoutは画面をさす事が多いです。

組み込み系は……とかいう話はおいといて。
0128デフォルトの名無しさんNGNG
>>124
fflush()は出力ストリームに対して使うものであり,
入力ストリームには使えません. 規格では, 入力ストリームに
対するfflush()の動作は未定義になっています.
(完全征覇79ページ)

…ってことらしい。
0129デフォルトの名無しさんNGNG
>>128
入力ストリームに対しては,その効果は不定である。

   プログラミング言語C 第2版 より
0130124NGNG
>>128-129
ありがとう。
勉強になった。
0131sageNGNG
>>123
scanf("%d %d",&a,&b);
じゃなく
scanf("%d %d ",&a,&b);
にしとこうね
0132名無しNGNG
>>123
1回目のgetcharはこれで代替できるでしょ?
scanf("%d %d\n",&a,&b);
2回目のは・・・
0133デフォルトの名無しさんNGNG
カッコ悪いけど
2回getcharしておいたら?

ちなみに、VC++だとfflushはstdin
でもOKのはず。ヘルプ見たけどちゃんと
定義されてた。

BCCでも試したけどこれもOKだった。
0134デフォルトの名無しさんNGNG
前に出たのと同じ質問なんですけど、
入門書を読み終わった後に読むのに適した
ソースコードってどっかにありませんかね?

入門書にのってるやつはちょっと短すぎる気が・・・
0135sageNGNG
>>134
良い心行きだね。

libcあたりのコードでも読んでみるといいかも。

精読は無理だし無駄だから、
自分の理解できそうなコードを探して読もう。

それぞれの関数の仕様は、infoなりmanなりMSDNなりに
載っているから、あとは、コードを読むだけだよ。
0136>39NGNG
/***** c[n][n] は予め0で初期化 *****/
for (i = 0; i < n; ++i)
  for (j = 0; j < n; ++j)
    for (k =0; k < n; ++k)
      c[i][j] += a[i][k] * b[k][j];

じゃなかったっけ?
0137デフォルトの名無しさんNGNG
googleあたりで、
ゲーム ソース C とか
ゲーム ソース トランプ とか
適当に検索するとソース付きのが結構あるよ。
カードゲームとか簡単なのを見つけて、
ちょっとずついじってみるのが楽しいと思う。
実際に動かせるってのは何より楽しいから。
0138134NGNG
>>135
素早い解答ありがとうございます。
しかし、libcあたりのコードといわれてもよくわからんのですが・・・
googleで検索かけてみたんですけどイマイチです。
厨房ですみません。

>>137
どうも。確かにけっこうありますね。
こんなの見てるとテトリスでも作ってみたくなりました。
でも何を勉強すればいいんだろうか。
0139123NGNG
で、結局どうすればいいんでしょう?
fflush(stdin)がscanfの入力にかかわらずきちんと動いてくれるのですが…
0140デフォルトの名無しさんNGNG
#define N 5
を使わずに、入力して、5を入れるのは、どうすればよいのでしょう?
int N;っているのかな?
0141sageNGNG
>>134 =138
http://nephtys.lip6.fr/ftp/pub/linux/mips/libc/src/

たとえばだけど、ここにあるのが GNU版libc(glibc) のソース。
でかいからといって躊躇せず、
落として、読んでみよう。

memcpyとかstrcpyとかprintfとか
普段君が使っていそうな関数のソースが入っているぞ。
0142デフォルトの名無しさんNGNG
そうなると *BSD をインストールする方が早いかも
0143デフォルトの名無しさんNGNG
>>138
カーネルのソースを読んでみよう。
そんなに難しい、ものでもない
ソースの入手も簡単だし。
0144デフォルトの名無しさんNGNG
カーネル?
0145sageNGNG
いきなりカーネルもいいけど、基底技術を先に身につけとかないと
カーネルのソースを読んだくらいで↓↓みたいな恥ずかしいやつになっちゃうよ

http://mentai.2ch.net/test/read.cgi?bbs=prog&key=992037045

>>144
OSの中心にある機能だよ。
0146デフォルトの名無しさんNGNG
>>140
コンパイル時に
-dN=5
0147デフォルトの名無しさんNGNG
>>146
-DN=5
じゃなくて?
0148デフォルトの名無しさんNGNG
>>147
ああ、そうかも
0149デフォルトの名無しさんNGNG
>>143
マジレス。

kernel のソースを読むためには、計算機アーキテクチャに関する
知識と OS 一般の知識が必要。MMU ってなんですか、って人間に
は仮想記憶サブシステムは読めないし、例外発生時の CPU の動
作を知らないとプロセス管理サブシステムは読めない。

それに kernel は処理の流れが一様ではなくて、非同期にいろいろ
なイベントが発生するのが前提だから、慣れないと読むのは大変だ
と思う。

あと、最近の *BSD や Linux kernel のように規模が大きいプログラ
ムだと「実装」から「設計」を把握するのは辛いも。コードを読む前に、
適当な書籍やら論文やらで「設計」を知らないと、見通し悪くて挫折
するよ。

個人的には kernel 読むのが初めてって人間には *BSD, Linux の
kernel は勧めない。まずは計算機アーキテクチャを勉強して、次に
小規模な kernel (UNIX V6, MINIX, L4) を読むのがお勧め。
0150デフォルトの名無しさんNGNG
ちょっと気になったんだが >>143 >>145 って、ホントに kernel のソース
コード読んだことあるの?
0151デフォルトの名無しさんNGNG
>>150
あるよ。ちょっとだけど。
0152sage=144NGNG
>>150
Linux, FreeBSD, WinCEのカーネルなら実際に読んだよ
得るものは余りなし。
0153143NGNG
キャラクタデバイスのとこなら大体読んだ。
あと、init起動するところとか。
0154sage!=134 && sage==145NGNG
ごめん、144じゃない、145だった。

カーネルコードを実際に読むより、
カーネルに関する解説書を読むほうがためになるよ
0155デフォルトの名無しさん NGNG
>おれは26才、4年間プログラムを一生懸命作ってきた。
>C言語しか知らないがC言語なら誰にも負けない...
ってどんなシステムのどんなプログラム作ってきたわけ?
デバイスドライバとかか?
0156デフォルトの名無しさんNGNG
>>155
4年間 って短いな・・・
長くやってりゃいいって訳でもないけど、期間だけで言ったら
オレは30歳で20年間プログラムを書き続けてるんだけど・・・
0157デフォルトの名無しさんNGNG
いいスレだ
0158デフォルトの名無しさんNGNG
>>155
過去スレのC言語なら俺に聞けをみればわかる
ジョブスが何者なのかも
なぜ3.1世なのかも
0159ジョブス3.1世NGNG
>>155-156
デバドラもやったし、μITRONをフルスクラッチもした。
データベースも構築したぞ。
俺にとり4年は十分過ぎる年月だ。
お前らには負けない。
0160デフォルトの名無しさんNGNG
>>159
>μITRONをフルスクラッチ
すなおにすごいと思う。尊敬できるかもしれない。
0161sageNGNG
うん、すごいすごい
かないません
0162デフォルトの名無しさんNGNG
>>159
参考までに、μITRONの勉強をしたいんだけど
いいサイトがあったら教えてくれないか?

今度作らされそうなんだが、とっかかりが全然つかめない。
一を聞いて十知るつもりなんで一だけ教えてほしい。
0163ジョブス3.1世NGNG
>>162
なぜ作る?俺の時とは違い、今時μITRONが実装されていない
CPUを探す方が難しかろう。そんなに徹夜したいのか?

今あるか知らんが、パソコン用のNORTiがソースコードつきで
配布されているんでキーワードを頼りに検索しろ。
じゃ無ければ買え。
0164デフォルトの名無しさんNGNG
Win+C言語でグラフィックを学びたいです。どうすれば?
0165デフォルトの名無しさんNGNG
デスクトップに三角形を書くプログラムを教えてください。
0166デフォルトの名無しさんNGNG
油性ペンを買ってくる。
画面に向かう。
三角を書く。
0167デフォルトの名無しさんNGNG
>>164
書店に行って「プログラミング Windows 第五版」買ってきて読め。
0168165NGNG
>>166
ありがとうございます。苦労しましたが、何とかできました

次は、画面に描いた三角を消したいんですが、どうすればいいですか?
0169デフォルトの名無しさんNGNG
>>168
お好み焼きかなにかで使うヘラで削りましょう。
それでもだめなときは
シンナーに浸した布で拭くと落ちるそうです。
0170デフォルトの名無しさんNGNG
>>167
どうも。
0171デフォルトの名無しさんNGNG
>>169
画面のスイッチを切るほうが早いと思われ
0172デフォルトの名無しさんNGNG
>>171
油性ペンで書いたものは、スイッチを切っても消えません(藁
0173デフォルトの名無しさんNGNG
揮発性ペンで書かれた不揮発な記録。
0174デフォルトのNGNG
DLLからメモリアーロック、フリーするソフト(C++、malloc)なんですが
Win95/NT/2000では正常終了するのですが、98だけが異常終了します。
OSにもどる情報を書き換えてしまっているようなんですが。
なぜ98だけで起こるのでしょうか。
開発環境は、VS6(S3)です。
0175デフォルトの名無しさんNGNG
>>174
> DLLからメモリアーロック、フリーするソフト(C++、malloc)
ネタか?俺の知ってるmallocは
「DLL」からメモリを「アーロック」しないし、
「ソフト」でもないぞ。

mallocの機能をまともに言えん奴はmallocなぞ使うな。
0176>174NGNG
その問題は、SP2で解決しているはず・・・。
http://www.microsoft.com/japan/support/kb/articles/J046/3/30.htm
0177デフォルトの名無しさんNGNG
>>175
偉そうなことは何かアドバイスしてから言っとけ
このバカ
0178デフォルトの名無しさんNGNG
>>177
> 偉そうなことは何かアドバイスしてから言っとけ
オマエモナー
# 目糞、鼻糞を煽る
0179デフォルトの名無しさんNGNG
>>1
自分の能力の高さを自慢したいだけの人に
聞くのって、聞いた方がバカをみるよね。
0180デフォルトの名無しさんNGNG
>>178
典型的なヴァカ
0181デフォルトの名無しさんNGNG
>>179
情報源なんてなんでもいいさ。
使えるものは犬でも使うさ。
0182デフォルトの名無しさんNGNG
>>179
C言語なら俺に聞けの初代スレをみればギャグだってわかるのに。
0183デフォルトの名無しさんNGNG
>>179
たぶんこのスレの<1>〜<4>の1は全て別人。
>>159も別人。
0184デフォルトの名無しさんNGNG
すいませんがお聞きします。
配列などを初期化するとき
for(i = 0;i < 255;i++ )
 counts[i] = 0;
}
ってやるのと
memset(counts,0,sizeof(counts));
ってやるのとどちらがいいのですか?
0185デフォルトの名無しさんNGNG
>>184
どっちも何もmemsetしかないじゃん
forを固定回数でまわすなよ。わら
0186デフォルトの名無しさんNGNG
むかし、countがfloatとかdoubleとかだとmemset では問題かも〜
ってきいたことがあるよ。個人的には、
double counts[128] = {0};
とかかな。
0187 NGNG
#if defined
individual
#pragma
#if!defined
#use
unsigned
using std::FILE;
template <class charT,class traits>
#undef
Struct
using NAMA std;
class NAMA1 :public locale::facet
class NAMA2 :public NAME1{
Static size_t rand_ =0;
Static struct tm* tmb=0;
#define NAME1 (NAME2)
#define NAME (NAME | PARAMETER)
int _RTLENTRY _EXPFUNC printf(const char * __format,...);
typedef
wchar_t
#define FOPEN_MAX (_NFILE_)
extern "C"{

各々わかんない、.libファイルと.hファイルの関係と作り方トLCCLIB.EXEのありか
0188デフォルトの名無しさんNGNG
>>186
>double counts[128] = {0};

これだと、counts[0]以外は未定義状態だなあ
0189デフォルトの名無しさんNGNG
>>184
普通はmemsetの方が速い。

>>186
全ビット0が0.0にならない処理系の場合。
IEEE形式なら問題なし。

最初の要素は0.0が代入されると思われるが、
それ以降はmemset相当のコードになるはず。
0190デフォルトの名無しさんNGNG
>>189
普通は memset の方が早いが、たいていは初期化部分のコードよ
りも実際に配列を操作する部分のコードの方が実行時間に効いてく
る。初期化部分がボトルネックになっていることが明確でない限り、
わざわざ移植性を落としてまで初期化部分で時間稼がなくて良し。

ただし移植性がそもそもない場合、たとえば Win32 only の構造体
を初期化するような場合は、どっちでも良い。構造体の要素を個別
に初期化してると、定義が変わったときに初期化漏れが出る可能性
もあるしね。
0191デフォルトの名無しさんNGNG
>構造体の要素を個別
>に初期化してると、定義が変わったときに初期化漏れが出る可能性
>もあるしね。

わしこれでチョンボやった経験あり。
0192デフォルトの名無しさんNGNG
printf("input to count file name : ");fflush(stdin);
fgets(filename,256,stdin);

fp = fopen(filename,"rb");
if(fp == NULL) {
  printf("can't open file : %s",filename);
  exit(-1);
}

ちゃんと存在しているファイルなのに開いてくれません。
なぜでしょうか? }
0193デフォルトの名無しさんNGNG
filenameの宣言が見たい
0194デフォルトの名無しさんNGNG
>>192
> fgets(filename,256,stdin);

こんなふうにした場合、おしまいにリターンが付いてきそうな気がする。
0195デフォルトの名無しさんNGNG
fflush()については
>>128-129参照

ってなんでfflush()?
0196デフォルトの名無しさんNGNG
C言語
0197デフォルトの名無しさんNGNG
TestDlg.obj :
 error LNK2001: unresolved external symbol "void __stdcall・・・"

このエラーの意味って何?
0198デフォルトの名無しさんNGNG
>>192
ここを
> printf("can't open file : %s",filename);
printf("can't open file : [%s]",filename);
こう修正後に実行してみて、
can't open file : [filename
]
と表示されるようなら>>194が理由。
0199デフォルトの名無しさんNGNG
>>197
宿題は手伝わないって言ったでしょ
0200197NGNG
>>199
お願いビーム!
0201197NGNG
>>199
宿題じゃなく仕事なんだ。
先に進めなくて・・・納期が・・・。
0202197NGNG
っていうかスレ違いだった。
VC++でのエラーだった。
0203デフォルトの名無しさんNGNG
>>201 に笑った。別の職業につけ。
0204197NGNG
はーい
0205192NGNG
みなさま、アリガトウございました。
ご指摘のとうりリターンがついてました。
0206デフォルトの名無しさんNGNG
俺だったら、納品するプログラムで
> fgets(filename,256,stdin);
こんな入力方法とる奴はクビにするね。
0207デフォルトの名無しさんNGNG
>>206

>>192と>>197は違う人じゃない?
0208206NGNG
>>207
御意誤爆鬱死。

でも>>197みたいな質問を2chに書く奴はやっぱりクビにしたい(w
0209デフォルトの名無しさんNGNG
>>206
> こんな入力方法とる奴はクビにするね。
理由書けや。
どーせ256みたいな定数でなくsizeof(filename)とか
エラーチェックしろとか細かいツッコミだろ?
0210206NGNG
>>209
fool proofについて考慮されてないって事だよ。
0211197NGNG
あー。もう面倒だから、辞表提出してきた。
これでもおれ、チーフだったから、開発メンバー
みんなめちゃくちゃ混乱してた。ワハハノハ。
0212デフォルトの名無しさんNGNG
>>211
マジ?
ネタ?
0213192NGNG
>俺だったら、納品するプログラムで
>> fgets(filename,256,stdin);
>こんな入力方法とる奴はクビにするね。

たびたびすいません。なにがいけないのでしょうか?
勉強中なのでおしえてもらえませんか
0214デフォルトの名無しさんNGNG
>>213
プログラム中に「定数」をばらまいてはいけない。
Cならマクロ、C++ならばconstを使うべし。
0215デフォルトの名無しさんNGNG
>>214
そうか?
時と場合によるんじゃないのか?一回しかでないもので
絶対変更のないものならいいんじゃないの?
この場合はどうかしれんが
0216デフォルトの名無しさんNGNG
>>211
ネタにしても寒いな。
マジだったら、そんな奴をチーフにしてる会社はさっさとつぶれてくれた方が社会のためだ。
0217デフォルトの名無しさんNGNG
--1--
1本100円のボールペン
10本以上買うと、
A店 10%OFF
B店 8本ごとに1本おまけ
購入数を入力して
単価の安いほうを出力

例
9 同じ
15 A店
30 B店

--2--
価格を入力してポイントを出力する
100円以上の商品に対して
10円ごとに1ポイント

例
80 0
100 1
110 2
200 11

--3--
駐車場の使用時間を入力して料金を出力
基本料金 500円
(1時間)
1時間超えると、10分につき100円課金

53 500
62 600
70 600
71 700

コーディングしてください。
0218デフォルトの名無しさんNGNG
>コーディングしてください。

あまりの大胆さにちょっとワロタ
0219デフォルトの名無しさんNGNG
>>217
> それに勘違いするな、俺は貴様の宿題を解いてやるほど暇じゃない。
0220217NGNG
#include <stdio.h>
void main(void)
{
int ne,kazu,a,b,g;
printf("購入数=");
scanf("%d",&kazu);
ne=100;
a=0;
b=0;
g=kazu*ne;
if (kazu>=10) {
a=g*0.1/kazu;
b=g/(kazu+kazu/8);
}
if (a<b) {
printf("A");
}
else if (a>b) {
printf("B");
}
else {
printf("同じ");
}
}
0221デフォルトの名無しさんNGNG
(゜д゜)<宿題は別スレでやれ
0222217NGNG
ここはプログラム作成ウィザードスレではないのですか?
0223デフォルトの名無しさんNGNG
>>220
バグリスト
・kazuが0の場合、多分プログラムが落ちる
・kasuが1〜9の場合、「同じ」と表示される。
・どんなkazuを入力しても「A」と表示される。
下記の計算部分がバグっている。

> g=kazu*ne;
> if (kazu>=10) {
> a=g*0.1/kazu;
> b=g/(kazu+kazu/8);
> }
0224整数定数NGNG
>>214

整数定数なら enum を使えと,カーニハン先生はおっしゃってました.

enum { BUFSIZ=4096 };
0225217NGNG
小数点が使えないのかなあ?
0226デフォルトの名無しさんNGNG
>>225
intって何ですか?
0227デフォルトの名無しさんNGNG
>>217
激しくスレ違い。麻衣ちゃんに頭下げて教えて貰え。
0228デフォルトの名無しさんNGNG
http://piza.2ch.net/test/read.cgi?bbs=tech&key=982853418&ls=50
↑宿題はこちらに
0229デフォルトの名無しさんNGNG
(゜д゜)<age
0230デフォルトの名無しさんNGNG
だがしかし、思わずチャレンジしたくなる宿題は許可したいぞ。
0231デフォルトの名無しさんNGNG
>>226
こんなの見ちゃっていいのかしら・・・
わあ! これなんて intのCですよ、先輩
0232デフォルトの名無しさんNGNG
いや、だからチャレンジするのはかまわないけど宿題スレでやれよって話。
やるなとは言ってない。
0233麻衣NGNG
待ってるわよ
0234デフォルトの名無しさんNGNG
>>231
おお 懐かしい
随分マニアなシーン持ってくるね(笑)
0235224NGNG
カーニハン先生って何?
0236デフォルトの名無しさんNGNG
>>235
をい。
今すぐgoogleへ逝ってこい。
0237デフォルトの名無しさんNGNG
ゴーグル
0238デフォルトの名無しさんNGNG
ガグル
0239デフォルトの名無しさんNGNG
ガーゴイル
0240デフォルトの名無しさんNGNG
ゴール
0241デフォルトの名無しさんNGNG
void のポインタの並びを動的に確保したいんですけど、
void ** が出てきて困るんです。

void **storage = calloc (capacity, sizeof (void *));

で、こうしようと思うんですが、

void *p, *q;
/* p にどこかで値を入れる */
char **storage= calloc (capacity, sizeof (char *));
storage[n] = (char *) p;
q = (void *) storage[n];

これは合法なんでしょうか?
0242デフォルトの名無しさんNGNG
go for
0243デフォルトの名無しさんNGNG
>>241
char**はよくてvoid**が困る理由が分からんが、
void*へ/からの代入はキャストも不要だろ。
0244デフォルトの名無しさんNGNG
> char**はよくてvoid**が困る理由が分からんが、

C FAQ 日本語訳を読んでいると、4.9 で void ** はダメっぽいふうに
書いてあるので困りました。いろんな型へのポインタの並びを
管理しようとして、const void * で引数をもらっています。
それならと、void ** 以外で処理することにしたんですが、
他の環境に持っていった時に、異なる型へのポインタでは
サイズが変わるかも、と考えて書き込みました。
けれど考えてみたら、ポインタをキャストできるんだから、
どんな型へのポインタでもサイズは変わらないんですよね?
ということで、

void *p, **storage = calloc (capacity, sizeof (void *));
storage[n] = 何らかの void *;
p = storage[n];

を使ってもいいものかどうかについてお願いします。
ダメなら、char ** などを使ってみようと思います。

> void*へ/からの代入はキャストも不要だろ。

7.7 に書かれているようなコードで覚えたので、
void * もキャストするものと思っていました。
でも、読んですぐなものでまだ癖が抜けません。
0245243NGNG
>>244
規格上ポインタのサイズが同じであることは要求されてなかったと思うけど、
そういう処理系ではchar**でもやっぱりダメだろうからvoid**使っとけば。

> void *p, **storage = calloc (capacity, sizeof (void *));
> storage[n] = 何らかの void *;
> p = storage[n];
>
> を使ってもいいものかどうかについてお願いします。
いいもなにも、このコードは暗黙のキャストもまったくないじゃん。
「何らかの void *」とpが他の型へのポインタなら話は分かるけど、
やっぱり正しいコード。C++だとキャストが必要だけど。
0246デフォルトの名無しさんNGNG
>>245

C FAQ 4.9 の

> C 言語には汎用のポインターへのポインター型は存在しない。

を誤解していたようです。
void ** を使ってデータ操作すること自体が、ダメなんだと思ってしまいました。

void sample (void **arg);
int *p;
sample (&p); /* p をなんとかしてほしい */

のようなことがダメだと言っているんですよね?

私の場合は、既に void * でもらっているポインタの値を出し入れするだけなので、
関係なかったんですね。
0247デフォルトの名無しさんNGNG
それは void のサイズが分からないからだめなのでは?

void array[10];

と同じ理屈。
0248C初心者NGNG
初心者な質問で申し訳ないのですが……。

標準関数の読み方って、なにか決まりがありますか?

strcpy ストリングコピー? エスティーアールコピー? ストルコンプ?
strcmp ストリングコンプ? ストリングコンペア?

熟練プログラマの皆さん方、どう発音されてますか?
0249デフォルトの名無しさんNGNG
すとらこぴー。すとらこんぷ。
何て呼んでもいいと思うけど?変な読み方だとおもろいし(笑)
0250デフォルトの名無しさんNGNG
strcpy → スーピー
strcmp → スープー
strcat → スッチー
0251デフォルトの名無しさんNGNG
stdio → スタイオ
stdlib → スタリブ
string → スリン
stderr → スァ
0252デフォルトの名無しさんNGNG
読み方と命名規則は一ヶ月に一度は話題になるな。
ローカルルールに追加しない?
0253デフォルトの名無しさんNGNG
人に言うときは
stdio → スタンダードアイオー
っていったほうがいいけど心の中ではなんでもいいと思う
0254sageNGNG
心の中ではスタジオ
でも、口に出すときはエスティーディーアイオー

なんでもいいよ。もう。
0255デフォルトの名無しさんNGNG
そういや、たまに本当にスタジオって言ってるおっさんいるよなー
0256デフォルトの名無しさんNGNG
俺もスタジオヘッダに一票。

スタンダードアイオーなんて知ったかぶりっ子っぽくてイヤン。
0257デフォルトの名無しさんNGNG
どうせstudioと勘違いしてるなら、「すてゅーでぃおう」と言ってほしいね。

そういえば、マイクロソフトの製品で
ビジュアル・スタディオ
というのがあったな。変なの。
0258デフォルトの名無しさんNGNG
>>256
知ったかぶりじゃなくて、そのものなんだが・・・
余程昔辛い目にあったんだろうねえ
0259デフォルトの名無しさんNGNG
独学でやっている人にはスタンダードインプットアウトプットが
正式だと知らない人がまれにいる。でもプログラマーとしての
技術は十分あるのでバカにもできない。
だから好きによんでいいと思うよ。実力さえあれば。
0260マジレスさんNGNG
下のプログラムを、実行すると答えの桁数の所に、
整数どうしの足し算でも
小数点が付き、.0000となりますが、
.0000を消すにはどこに何を付け加えればいいですか?
#include <stdio.h>
int main(void)
{
float var1,var2,answer;
int op,flg;

printf("値1\n");
scanf("%f",&var1);

printf("値2\n");
scanf("%f",&var2);
printf("1、足し算 2、引き算 3、掛け算 4,割り算\n");
scanf("%d",&op);
if(op == 1){
answer = var1 + var2;
flg = 0;
}
else if(op == 2){
answer = var1 - var2;
flg = 0;
}
else if(op == 3){
answer = var1 * var2;
flg = 0;
}
else if(op == 4){
answer = var1 / var2;
flg = 0;
}
else{
flg = -1;
}
if(flg == 0){
printf("答え %f",answer);
}
else{
printf("計算方法の指定が間違っています");
}
return 0;
}


0261デフォルトの名無しさんNGNG
モットprintfシラベロ
0262デフォルトの名無しさんNGNG
>>259
独学だとしてもstdioがstandard input/outputの略だと気付かない
奴はバカでしょ。他にstdlibとかstdargとか、stdがstandardと
気付くためのヒントはいくらでもあるし。
0263デフォルトの名無しさんNGNG
>>260
キミの頭にC言語に関する基礎知識を加えればいいですよ
0264マジレスさんNGNG
>>263
そんな冷たい事言わずに、教えて。
0265中途半端くんNGNG
>>260
%d
0266259NGNG
>>262
そうなんだけどどう呼んでてもプログラムができれば
かまわないというはなしで
0267デフォルトの名無しさんNGNG
char* ps = (char*)malloc(100);
memset(ps, '\0', 100);
ps = "50,50,50,50,50";
siri.SendHexNumber( ps );
free(ps);
こういうやり方は、やっぱり違反なのでしょうか?
教えてください
0268中途半端くんNGNG
>>267
合法
0269デフォルトの名無しさんNGNG
>>267
oioi
>ps = "50,50,50,50,50";
>free(ps);
自分でなにしてるかわかってる?
0270デフォルトの名無しさんNGNG
intはなんて読めばいいの?
0271デフォルトの名無しさんNGNG
>>267
free(ps)のときにはpsはスタティックな領域を指しているので、
おそらくSEGVかなんかで落ちる環境も多い。
ps = "..."じゃなくてstrcpy(ps, "...")ってしたいんじゃないの。
0272デフォルトの名無しさんNGNG
>>267
strcpy

VBとかから入った人はこんなの書くね
0273デフォルトの名無しさんNGNG
>>270

1. イント
2. インテ
3. インテジャ

エラボウ
0274デフォルトの名無しさんNGNG
>>267
malloc&freeは、もう少しポインタの事を勉強して、
そのコードが何を意味するか、分かってから使った方が良いかと…。
0275デフォルトの名無しさんNGNG
>>270
アイティーン
0276デフォルトの名無しさんNGNG
(i)インター(n)ネット(t)テクノロジー
0277デフォルトの名無しさんNGNG
mallocの使い方まずいの?
ps = "50,50,50,50,50";
が違法というか、一般的かどうかを聞きたかったんだけど
0278デフォルトの名無しさんNGNG
私が得をする情報をタダでください。
それによって私は大変な恩恵に預かりますが、あなたには何の
メリットもありません。
でも、いいじゃないですか? どうせ情報なんてタダでしょ?

とても困っているので、情報を知っている人は私を助けなければ
いけません。これは義務です。
初心者にも分かるように説明してください。
私は、ごく普通の人間なので、パソコンのわけの分からない知識は
ありません。勉強するつもりもありません。時間の無駄です。
検索するなんて面倒です。どうしてそんな面倒な事するの?
知ってる人に聞けばいいじゃん。どうせタダだし。

マルチとか質問スレというのはヲタクのルールです。
私は普通の人間なのでヲタクのルールなど知ったこっちゃありません。
早く教えてください!
早く教えろ!
早く!
これだけ言ってもまだ教えねーのか?!
0279デフォルトの名無しさんNGNG
>>277
malloc/freeを使う意味が無い。
文字列コピーでもしたかったのか?
0280デフォルトの名無しさんNGNG
ソースから、抜き出したんで、あまり的確じゃなかったかも
すまん
0281デフォルトの名無しさんNGNG
>>270
インタラプト
0282デフォルトの名無しさんNGNG
漏れは今、独学でCやってるんよ。
それで、先日「独習C」って本買ったんだけど
この本の内容は何日(何ヶ月)くらいでマスターできるんかな?
すでに、初級本の「C言語〜はじめてのCプログラミング〜」はマスター済みです。
現在は学校には行ってません。

あと、「独習C」マスターしたらC++に進んじゃって大丈夫やろか?
0283デフォルトの名無しさんNGNG
言語だけマスターしても意味がないんじゃ・・・
一つの言葉を覚えたら徹底的に使うことが大事だと思うよ
0284デフォルトの名無しさんNGNG
>>277
mallocの使い方と
ps = "50,50,50,50,50";
は、それ程、問題無いが、その後の、
free(ps);
が問題がありすぎる。
その為、そのコードが合法か聞かれた場合は、
それしか目が行かない。
ちなみに、freeが無い場合、大抵の処理系では合法で、
(見た事はありませんが、(聞いた事ならある))
exit時にメモリを開放しない処理系では、違法。
0285デフォルトの名無しさんNGNG
>>282
野球のルールを知ってるだけじゃ、甲子園には行けないぞ。
0286282NGNG
>>283

マスターってのは
その本の内容を理解したって意味で使いましたっす。

C++を勉強しようとしたら全く解らんのでCから始めたんやけど…
0287282NGNG
>>285

とりあえず今は、勉強するしかないかな〜と思ってます。
まだ、独学で始めて1ヶ月なんですよ。

実践で使いこまなきゃ話にならんで〜
…ってことは勉強してると良くわかります。
だって、問題出されたり質問されたりしても全然答えられんもん。
0288デフォルトの名無しさんNGNG
>>284
あるクラスのメンバー関数の中の一部なんだけど
freeしちゃだめなの?
0289282NGNG
ちなみに、趣味でゲーム作ろう思ったのが勉強始めたきっかけっす。
0290デフォルトの名無しさんNGNG
>>284
あんまり問題なくないぞ。
何の為にmallocしてんのかわからん。
0291デフォルトの名無しさんNGNG
>>290
mallocはもういいんで、他にいろんな処理してる関数の抜き出しなんで
適切じゃなかった、
で、なんでfreeしちゃだめなの?
0292デフォルトの名無しさんNGNG
>>291
あっはっは。
freeの引数にはmallocで確保した領域の先頭アドレス
(つまり、最初にmallocしたときのpsだな)を入れなきゃ。
いまのままじゃ"50.・・・"の文字列の先頭アドレスだから
狂っちゃうよ。
0293デフォルトの名無しさんNGNG
>>291
malloc(), realloc() を介して確保したメモリ以外は free() してはいけない。
そういう前提で free() は書いてあるので、文字列定数へのポインタを渡す
と、困った事態になる。

たいていはメモリアクセス保護違反で異常終了するが、環境によっては
その時にはエラーが出ずにメモリ上のデータを壊す(そして後で変数の
値がおかしくなっていることに気づく)かもしれないし、OS が暴走するか
もしれない。
0294デフォルトの名無しさんNGNG
相も変わらずアホな議論をしておるな
0295デフォルトの名無しさんNGNG
これは議論なのか??
>>293がC言語のイロハを厨房に教えている教室かと思った。
0296デフォルトの名無しさんNGNG
>>267の話題で
>>292 >>293
以外はダメダメ。
メモリに展開されているインスタンスをイメージできればこんなミスはしなくなる。
0297デフォルトの名無しさんNGNG
>>267
ヒープとスタックの違いは理解してる?
0298デフォルトの名無しさんNGNG
>>293
>malloc(), realloc() を介して確保したメモリ以外は free() してはいけない。

では、callocで確保したメモリはどうやって解放するの?
0299デフォルトの名無しさん NGNG
初歩的な質問ですみません。
ゲームを高速化するために、VC++6.0Pro で、MMX命令を使った
プログラムを書きたいのですが、インラインアセンブラ
以外の方法で画像のスプライト処理などをする
ライブラリなどはありませんでしょうか。
どなたか教えてください。
0300デフォルトの名無しさんNGNG
>>297
ヒープとデータセグメント
>>267にとっては同じようなもんだろうが(藁
0301デフォルトの名無しさんNGNG
>>267の話題で
>>292 >>293
は親切すぎてダメダメ。そんなの267以外は分かってるちゅうねん。
コンパイルでエラーが出ないからっていって、やっていいことと悪いことがある。
それまでのヒントで、自力で調べるくらいじゃないとな。

>>298
callocは中でmallocを出してるって、MSDNにも書いてあるだろ。
それくらいも見ないのか?
0302224NGNG
>>301
alloca()と間違えたのでは?

>>235
カーニハン先生はひとことでいうとC言語の権威です.
もとの発言の文脈に依存した言い方だと,
カーニハン先生は「プログラミング作法」という書籍の著者であり,
その本の中で整数定数をenumで書くことを推奨しているのです.
「プログラミング作法」はカーニハン先生ご自身の名著である
「プログラミング書法」と「ソフトウェア作法」を
最新の言語に即して書きなおしたというところでしょうか?

#残念ながら「ソフトウェア作法」の原題でもある「Software tools」という
#考え方についてはあまり触れられていません.

[Amazonでの紹介]
http://www.amazon.co.jp/exec/obidos/ASIN/4756136494/t/249-9249061-2910751
0303デフォルトの名無しさんNGNG
ソープってなんですか?
気持ちいいんですか?
0304デフォルトの名無しさんNGNG
ソープ? 石鹸のことだよね。
気持ちいいって・・・まあ、そりゃあ身体や顔洗えばスッキリするけどさあ。
0305デフォルトの名無しさんNGNG
SOAPのことと思われ
0306デフォルトの名無しさんNGNG
Hop Soap Proffecer
0307デフォルトの名無しさんNGNG
if (条件) {
}
else {
}
か、
if (条件)
else
ですか?

{ }
はいりますか?
0308デフォルトの名無しさんNGNG
>>307
デフォルトで{}をつける癖をつけろ
0309デフォルトの名無しさんNGNG
>>307
308に同意。
しかし、

if( a == 0 ) {
a++
}
else {
continue;
}

とかする馬鹿はすぐ殺せ。
0310デフォルトの名無しさんNGNG
そもそも、不用意にcontinue使う奴はクビ。
0311デフォルトの名無しさんNGNG
continueっていかんの?
0312デフォルトの名無しさんNGNG
>>311
いけない理由はgotoとほぼ同じ。
0313デフォルトの名無しさんNGNG
if (p != NULL)
  debug_printf("fclose シヨーヨ\n");
  fclose(fp);

「なんか、NULL pointer assignment とかいって止まるんですけど、
コンパイラがバグってるんでしょうか?」
0314デフォルトの名無しさんNGNG
同様の理由でreturn乱用も死罪だ。
0315デフォルトの名無しさんNGNG
>>313
ネタ?
>>308
0316デフォルトの名無しさんNGNG
>>313
pって何?
0317デフォルトの名無しさんNGNG
>>313
あなたがバグってマス
0318デフォルトの名無しさんNGNG
なんでcontinueがだめなの?
使い方しだいだと思うけど。
そんなふうに硬直した思考してると
世の中から置いてきぼりを食っちゃうぞ
0319学生NGNG
KL展開のプログラムを作っているのですが、
固有ベクトル以外に作らなければならないプログラムがわかりません。
画像の入出力はできます。教えてください。
0320デフォルトの名無しさんNGNG
>>318 ”不用意に”って書いてあるじゃん。煽りたいだけ?
0321デフォルトの名無しさんNGNG
>>318
使い方しだい、か。例を挙げてくれないか?
今まで、continueを使ってたソースで「こいつ何考えてんだ?」と
思わなかったことが無いのでな。
0322デフォルトの名無しさんNGNG
>321
同じく。おれもcontinueは必要だと思うが。
0323310NGNG
>>318
そう、使い方次第だよ。だから>>312と書いた。gotoだって使い方次第だ。
gotoでは多重ループから一気に抜けるときとかの例があるだろ。
continueが有効な例てのをあげてくれ。
0324デフォルトの名無しさんNGNG
あーあ、みんなムキになっちゃって。
あたま弱いんだね
0325sageNGNG
どれがお好み?

while (fgets(buf, sizeof(buf), fp) != NULL) {
  if (buf[0] == ';') {  // skip comment line
    goto continue_loop;
  }

  /* normal task */

continue_loop:
  ;
}


while (fgets(buf, sizeof(buf), fp) != NULL) {
  if (buf[0] == ';') {  // skip comment line
    continue;
  }
  else
  {
    /* normal task */
  }
}

while (fgets(buf, sizeof(buf), fp) != NULL) {
  if (buf[0] != ';') {  // skip comment line
    /* normal task */
  }
}

while (fgets(buf, sizeof(buf), fp) != NULL) {
  if (buf[0] == ';') {  // skip comment line
    continue;
  }

  /* normal task */
}
0326デフォルトの名無しさんNGNG
>>323
gotoだと、コピペが難しくなるのが問題なんじゃないか?
0327デフォルトの名無しさんNGNG
>>325
2番目のは continue が要らない典型的な例だと思う。
0328デフォルトの名無しさんNGNG
>>325
自分で書く時は絶対3番目。
0329デフォルトの名無しさんNGNG
インデントの深さと真偽のわかり易さによって3か4のどちらか
0330デフォルトの名無しさんNGNG
>>325
自分で書く時は絶対4番目。
0331デフォルトの名無しさんNGNG
個人的にはcontinueを使った人のプログラムを引き継ぐのは嫌かも。
continueを多用する人はループの記述にwhileを好む傾向にあると思う。
反対にforの方を好む人はcontinueを嫌うのかな?
どちらにしろ宗教だからあまり熱く語らないほうが良いと思うよ。
0332sageNGNG
ああ、二番目、馬鹿だね、これ。

if (buf[0] == ';') {
  /* skip */
}
else {
  :
  :
の間違い。
0333デフォルトの名無しさんNGNG
で、どれがcontinueが要る例なんだ?
選ばせるんじゃなくてお前が必要だと思うのを書けっつってんだよ
0334デフォルトの名無しさんNGNG
4だろ。あほ?
0335sageNGNG
よけいな部分外してるけど、>>325が何をやりたいコードかわかるよね?
にもっと複雑な処理を加えていったときにどうなるか
適当に想像してみよう。

こういうのを定型的に書くとき、1, 2, 3 番で書くのがもっともスマートだと思うなら
止めないから、それでやってね。
0336デフォルトの名無しさんNGNG
何かCのバーチャルマシンって有りませんでしょうか?
処理系とstdio.h程度で良いのですけれど。
あれば弄って遊びたいのです。教えてください。
0337デフォルトの名無しさんNGNG
>>336
インタプリタか?
CINTで検索してみ。
0338333NGNG
>>334
キミ、バカ? != 使えばいいじゃないか。
必要性のあるものを書け、と言ったんだよ。
やっても意味ねーことを書いてどうするんだよ? バカ。
0339デフォルトの名無しさんNGNG
>>338
それは >>325 の 3 番目のコードを使え、という意味だよね? 4 番目を
忌避する理由って何?
0340デフォルトの名無しさんNGNG
>>339
ネストマニアなんだよ。
括弧が10段くらいついてるとカコイイと思ってるんだ
0341デフォルトの名無しさんNGNG
continueもbreakもgotoも全部やってるこた同じじゃ!
制御構文破綻してしまった時の対処療法。
0342デフォルトの名無しさんNGNG
>>338
空行読み飛ばしのロジックを追加したくなったとき
やっぱり、
if(!(buf[0]==';' || buf[0]=='\n')) {
なんですか?

カコイイ!
0343デフォルトの名無しさんNGNG
>>341
returnも中身にいれとくれよ
0344デフォルトの名無しさんNGNG
>>343
忘れてた!thanx
関数がまだ途中なのに出てくる、
頭クラクラしてくるアレね。
0345デフォルトの名無しさんNGNG
>>341
使っていいのは for, while, do - while, if (else) のみという主張? 根拠
を示してくれよ。

continue の使い途については >>342 が代表的なところだが、ほかでも
「原則として処理するが例外的にスキップする」というロジックには、非常
に相性が良い。条件式が単純なものではなくて、副作用のある複数の
操作を途中で挟む場合には 3 のパターンは使いにくいし。
0346デフォルトの名無しさんNGNG
>>341
破綻するような設計ダサイよ

それいうなら、
while, do while, for, if goto
ループ構造書く意味ではどれも同じだよ

で、ifとgotoで制御構造書いても怒らないの?
0347341NGNG
なるべく簡単な制御構文の関数を沢山作るように設計していけば、
自然と処理手順のワープは無くせるって意味だよ。

制御構文こねくり回して複雑にして、破綻の恐怖に怯えながら
仕事するのは嫌だからね。

人に薦められてこういう作り方に変えていったんだけど、
とりあえず簡単な制御構文だけで10年以上メシ食ってるから、
騙されてはいなかったかなと思っている。

まあ、先にいっとくけど、必ず解のある方法論じゃないんだけどね。
仕様によっては、設計の段階でかなり悩むこともあるが、
後で苦しむよりは正解と思う。
0348名無しさんNGNG
fflush(stdio); を使うとエラーになってしまうんですけど、なんで?

エラー E2451 chotto.c 117: 未定義のシンボル stdio(関数 input_file )
エラー E2451 chotto.c 131: 未定義のシンボル stdio(関数 input_line )
0349ズバット解決!NGNG
>>348
stdioが未定義
0350デフォルトの名無しさんNGNG
>>248
s/stdio/stdout/
0351名無しさんNGNG
>>349
本のやつを丸写ししたんだけど、本のやつはstdio定義してないんだよね
0352デフォルトの名無しさんNGNG
>>351
その本晒しキボンヌ
0353名無しさんNGNG
>>352
アスキー・ラーニングシステム実習C言語 三田典玄著
ISBN4-7561-1787-2
0354デフォルトの名無しさんNGNG
>>347
continueは簡単でないですか?
0355デフォルトの名無しさんNGNG
その本ダメだってバヨ
Cの参考書はK&Rにはじまり、ANSI/ISO企画書に移り、
そしてまたK&Rに終わるのだ。

その他の本はすべてK&Rの劣悪な焼き直し。
0356名無しさんNGNG
>>350はどういう意味なんでしょうか?
0357338NGNG
ifとgotoさえありゃ何でもできるんじゃボケ
while()もfor()もdo{} whlie()も必要ねーんだよ!

returnなんか無駄だ
全部mainで書けばいいだろ? バカ
0358デフォルトの名無しさんNGNG
>>357
突き詰めれば、確かにその通りだ。
0359348NGNG
で結局僕が悪いんでしょうか。それとも、本?
0360デフォルトの名無しさんNGNG
>>359
誰もが一度はやるミスなんで、悪くないですよ。

asciiの本に間違いが載ってるのはあたりまえなんです。
0361デフォルトの名無しさんNGNG
>>357
生産性と保守性を考えないなら、それでもいいですね。
でもどうせならアセンブラでやってください。
0362デフォルトの名無しさんNGNG
>>357
mainはどうやって呼ばれるんだろう・・・
0363デフォルトの名無しさんNGNG
>>356
sed.exe というテキスト変換ツールのコマンドだとおもう。
>s/stdio/stdout/
stdioをstdoutに置き換えるコマンド(だったかな?)
昔やった記憶がある。
0364348NGNG
>>360
そうですか。ありがとうございました。それにしてもこの本、改訂3版って書いてあるのに...
0365デフォルトの名無しさんNGNG
>>364
C言語の仕様が何度かかわっているので
それにあわせて何カ所か書き換えてるんだと思います。

決して、誤字脱字を直すための改訂はしてないと思います。
0366デフォルトの名無しさんNGNG
>>365
「決して」ですか?(ワラ
それって出版社の方針?
0367デフォルトの名無しさんNGNG
>>357
> ifとgotoさえありゃ何でもできるんじゃボケ
> while()もfor()もdo{} whlie()も必要ねーんだよ!

> returnなんか無駄だ
> 全部mainで書けばいいだろ? バカ
素晴らしい、その信念を貫きとおしてくれ。

ただし、そのソースは俺に見せるなよ。
猥褻物陳列罪で射殺するかもしれないから。
0368真338NGNG
>>357
偽者を名乗るなら、せめて話の流れが通じるようにしてくれ
0369デフォルトの名無しさんNGNG
関数の最初に必要のある処理かどうかを判定して、
必要なければreturnで返しちゃうのってだめなんですか?
0370デフォルトの名無しさんNGNG
>>369
状況わかんないしな・・・。
オーバーヘッドとか気になるなら先に判定して呼べばいいんでは。
・・・とかって、一概には言えないと思うけれども。
インライン展開されたら関係ないし(笑)
それか、もっと別の問題を言ってるのかな。
0371デフォルトの名無しさんNGNG
いちおあげ
0372デフォルトの名無しさんNGNG
俺は好きだが。
「複数のリターンはいかん!」と言う人は、

foo(args) {
 if (is_argument_error(args)) {
  return ARGUMENT_ERROR;
 }
 if (!need_this_func(args)) {
  return CONDITION_ERROR;
 }

 /* 通常処理 */

 return SUCCESS;
}
みたいなコードも拒否するのかな?
0373369NGNG
>>372
僕もそういう書き方をよくします。
でも上のほうの書き込みをよむと、
だめのような感じだったので聞いてみたのですが
他の人はどうなんでしょうか?
0374デフォルトの名無しさんNGNG
構造化プログラミングの主張に、「関数の出口は一つにする」がある。
0375デフォルトの名無しさんNGNG
>>374
それを守ると、一体どういう御利益があるのでしょう?

良く、int return_codeとかの変数を使って、無理やり関数の最後でリターンする
ようなものを見ますけど(しかもインデントが深い)、そのような構造より>>372の
ようなコードの方が見やすいと思いますけど。
0376デフォルトの名無しさんNGNG
>>375
賛成
関数の出口を一つにするなんてのはよっぽどのばかしかやってないよ
0377デフォルトの名無しさんNGNG
上の方であったエラーの場合の処理も含んで…
トラップとか、アボートとかを目的にした場合は、その方が分かりやすいと思う。
仕様変更とかでごちゃごちゃになることも考えにくいし。
ただ、それを前提とした設計の是非が問われるところだが、
代替案があればってところでしょう。

要求された仕様を実現するためにまず制御構文から設計するような手法だと、
仕様変更の度に制御構文を設計し直すハメになりやすい。
仕様を満たす手法をなるべく一般化する方向で設計し、
制御構文はその手法を満たす単なる手段でしかないと思っておけば
今日も安心して眠れるってことでしょう。
それこそ>>357=偽338のいう冗談じゃないけど、if文だけで実現したって
いいんじゃないすか?趣味の範囲内にはして欲しいけど。

あと、誰も触れなかったけど、switch()中のbreak;を書くなという突っ込みなら、
少し話しが違う。
0378RIP_MAPIRONGNG
ちゃんとコメント入れれば複数の制御分岐でもいけると思うけどな。
というか複雑なアルゴリズムを実現するには、多少の制御分岐は
必要になるわけで、函数の階層化&分散 と 函数当りの制御分
岐数 は反比例な関係にあるわけで、どちらも度が過ぎれば可読
性は極端に落ちる。
あと、複雑なコードを書く必要性がでたらC++への移行も考えてい
いんじゃないかな。
0379デフォルトの名無しさんNGNG
int a[3][5];
a[0][0] = data;
・
・
・
みたいに
int **p;
p[0][0] = data;
・
・
・
で実現したいんですけど、どうやってメモリを確保してやればいいんでしょう?
0380アナルサイコーNGNG
>>379
**じゃなく*でいい
malloc(sizeof(int)*3*5)
0381RIP_MAPIRONGNG
>>379
本屋に走ってCMagazineを買いなさい。
0382デフォルトの名無しさんNGNG
>>381
・・・Cマガはいかんだろ
0383379NGNG
と思ったけど
実現できました。失礼しました。
0384デフォルトの名無しさんNGNG
>>382
今月号はポインタ特集らしいからじゃないの
0385デフォルトの名無しさんNGNG
>>372
今の職場、

int hogehoge( int a )
{
a = get_nanka();

switch( a )
{
case 0: return( 0 );
case 1: inc( a ); return( a );
case 2: return( 2 );
}

b = get_nanika();
for( i = 0; i < MAX_VALUE; i++ )
{
if( b == 100 ) return( -1 );
b += check_nantoka();
}

return( 0 );
}

みたいなことをする人が山のようにいるのだが
これは問題ないと思いますか?
0386デフォルトの名無しさんNGNG
returnに
カッコをつけるなYO!!
0387デフォルトの名無しさんNGNG
>>386
本題はそれじゃないだろ
0388デフォルトの名無しさんNGNG
>>385
渡された引数を局所変数に転用するのはいただけない。
0389デフォルトの名無しさんNGNG
>>385
たかがループ変数をグローバルで定義すんなYO!!
0390385NGNG
どうやらここには、読解力のないバカしかいなかったようだな・・・
今の職場がどれだけ恵まれているかわかったよ!
パパ!ママ!僕はこの腐った職場で花を咲かせるよう!!
0391デフォルトの名無しさんNGNG
>>390
>>389のメールアドレスはどうなってる?おバカちゃん。
0392デフォルトの名無しさんNGNG
>>390
>>386-389はどう見てもネタ。
0393sageNGNG
>>385
そのコードで開発・保守をやってて
利益がでてるなら、それでいいんじゃない?

でもね、最初に書くときに一般化とわかりやすさのための工夫をすることで
後に発生するであろう様々な無駄な工程が、今よりも、圧縮できるってことを
君が偉くなったときに思い出してね。
そのための手法は、広く公開されているし、特別な投資がいるわけでもないよ。
0394デフォルトの名無しさんNGNG
>>372
その書き方は、昔からよくあるパターンだし、別にいいんでないの?

でも、新規で書くときは使わないな。
emacsとかのマクロで、関数入り口, 出口にどかっと
enter/leaveログを吐くコードとか書き足せるほうが楽でしょ。
0395デフォルトの名無しさんNGNG
教えてぇ〜
どうすれば、PCIバスの情報取得できるの?
本屋立ち読みしたけど、わからな〜い
0396デフォルトの名無しさんNGNG
ユーザーに入力させた文章を、ある関数で受け取り、また他の関数に渡すなんて処理をするとき
一般的な、常識のあるプログラマはどのようにするのでしょうか?
受け取るとき何で受け取り、渡すとき何で渡すのか教えてください。
0397デフォルトの名無しさんNGNG
>>396
ポインタたらい回しの術
0398デフォルトの名無しさんNGNG
ポインタたらい回しは、あくまで見せる、だけだから気をつけてね

んじゃ!
0399385(本物)NGNG
>>393
いや、これじゃあダメだと今年入った新卒の僕らが反論しているんですが
先輩は「社会ではこれが常識だ、趣味の世界と一緒にするな」と言ってくるんですよ。
ですから、これが社会で常識のコードなのか知りたくて・・・
0400デフォルトの名無しさんNGNG
>>399
すごい会社だね。辞表の書き方は本屋さんに行けば
わかるから明日有給とって買いにいこう。
0401デフォルトの名無しさんNGNG
ここはC言語のスレだからかもしれないけど、
ここ数年はthrowで飛ばしてcatchで受けるっつうプログラムばっか書いてたから、
385みたいなプログラムは、凄く懐かしい香りがするよ。
復帰値はエラーコードっていうのが、なんだかなつかしいよ。
0402デフォルトの名無しさんNGNG
<4>も早えぇな。議題は相変わらず不毛だが…
0403kkIP1A0019.hkd.mesh.ad.jpNGNG
#include <stdio.h>
main(void)
{
printf("氏ねや");
}
0404kkIP1A0019.hkd.mesh.ad.jpNGNG
#include <stdio.h>
main(void)
{
int a,b;
{
printf("input number n!\n");
b=1;
for(a=1;a<=10;a++)
{
b=b*a;
printf("kekka%2d=%10d\n",a,b);
}
}
}
0405デフォルトの名無しさんNGNG
これをお願いします。別のスレでも聴いたのでですが、
分からなかったので…。
学校の授業で以下のプログラムを説明せよという宿題が出たのですが、
病気で休学していたので、さっぱりです。
どなたか簡単にせつめいしていただけないでしょうか。
まことにぶしつけなのは承知ですがどうかお願いします
分かっていることは、ペイントソフトのプログラムみたいです。



void_fastcall TForm1::BtnCLsClick(TObject *Sender)
{
Image1->Picture->Bitmap->Width=320;
Image1->Picture->Bitmap->Height=240;
Image1->Picture->Bitmap->Canvas->Pen->Color=clWhite;
Image1->Picture->Bitmap->Canvas->Brush->Color=clWhite;
Image1->Picture->Bitmap->Canvas->Rectangle(0,0,320,240);
PaintBox1->Canvas->CopyRect(ClientRect,Image1->Picture->Bitmap
->Canvas,ClientRect);
}
0406デフォルトの名無しさんNGNG
学校でマルチポストは好まれないと教えるべき。
0407デフォルトの名無しさんNGNG
>>405
全ての行を日本語にしてみればすぐわかるよ。
0408デフォルトの名無しさんNGNG
>>408
ネタ?
引数のSenderは何しとるん?
0409デフォルトの名無しさんNGNG
>>408
??
0410日本語化バッチNGNG
空_急いで呼ぶ TForm1::ボタン消しクリック(TObject*送信器)
{
1つ目の絵>-絵>-ビットマップ>-幅=320;
1つ目の絵>-絵>-ビットマップ>-高さ=240;
1つ目の絵>-絵>-ビットマップ>-キャンバス>-ペン>-色=clWhite;
1つ目の絵>-絵>-ビットマップ>-キャンバス>-ブラシ>-色=clWhite;
1つ目の絵>-絵>-ビットマップ>-キャンバス>-長方形(0、0,320,240);
1つ目の塗る箱->キャンバス->CopyRect(ClientRect、1つ目の絵―絵>>-ビットマップ>-キャンバス、ClientRect);
}
0411ハジメテミタNGNG
piped = errno==ESPIPE;

errno29のilligal seekですが、この記述の意味がわかりません。。
if(errno==ESPIPE) piped = ESPIPE;
って意味?
piped は int です。
0412デフォルトの名無しさんNGNG
>>411
piped = (errno==ESPIPE ? 1 : 0);

または
if(errno==ESPIPE)
  piped = 1;
else
  piped = 0;
0413中途半端くんNGNG
>>411
piped = ( errno == ESPIPE );
0414411NGNG
>>412,413
ありがとうございます。
UNIXのコマンドのソースを読んでみたら、こんな記述が出てきて戸惑いました。。
もうひとつ教えてください。
char stdbuf[SIZEBUF];
setbuf(stdout, stdbuf);
なのですが、
ストリームのバッファリングがいまいちわかりません。。。
というより、バッファリングがいまいちわからないのですが、簡単に教えていただけますか?
あと、この記述のあと、stdbufは使われていませんが、
ここでは何をやってるのでしょうか?
0415411=414NGNG

標準出力のときstdbufに格納してから、出力しているってことでしょうか?
0416デフォルトの名無しさんNGNG
>>411
一時的にデータを格納する領域。
0417デフォルトの名無しさんNGNG
>>414
> setbuf(stdout, stdbuf);
通常ストリームはBUFSIZ分のバッファを用意しているが、
それを変えたい場合、上記の関数を使用する。

> バッファリングがいまいちわからないのですが、簡単に教えていただけますか?
例えば、ベルトコンベアから次々と荷物が送られてくるとする。
荷物を運ぶコストが非常に大きい場合、1個1個荷物を運ぶよりも
ある程度まとまった荷物を一気に運んだ方が効率が良い。
その荷物を格納しておく場所をバッファといい、手法をバッファリングという。
0418デフォルトの名無しさんNGNG
、下のCプログラムを書き換えてpivot=0やとても小さい数でもちゃんと計算できる
ように下のプログラムを完全なものに
したいのですが・・・
どうやったらいいのですか?
ここをこうかえる、というように具体的に教えて下さい。
マジでお願いします。

#include <stdio.h>
#define IMAX 3
#define JMAX 4


double array[IMAX][JMAX]={

{ 2, 1,-1, 5 },

{-3, 3, 2, 1 },

{ 1,-2,-2,-1 },

};


void PrintMat(void){
int i,j;
for(i=0;i<IMAX;i++){
for(j=0;j<JMAX;j++){
printf("%5.2f ",array[i][j]);
}
putchar('\n');
}
putchar('\n');
}


void SweepOut(void){
int i,j,axis;
double pivot,aik;
for(axis=0;axis<IMAX;axis++){
pivot=array[axis][axis];
for(j=axis;j<JMAX;j++){
array[axis][j]/=pivot;
}
for(i=0;i<IMAX;i++){
if(i!=axis){
aik=array[i][axis];
for(j=0;j<JMAX;j++){
array[i][j]-=array[axis][j]*aik;
}
}
}
}
}


main(){
PrintMat();
SweepOut();
PrintMat();
}
04191NGNG
age
0420411=414NGNG
>>416,417
ありがとうございます。
理解できました。
0421デフォルトの名無しさんNGNG
ホンをよんでいたら
strName = "test";
って感じで文字列を代入していたのですが
こんなことが許されるのでしょうか?
0422デフォルトの名無しさんNGNG
>>421
strNameの型を書け。
0423デフォルトの名無しさんNGNG
>>421
問題ない。許される。
0424新米PGNGNG
シリアル通信がうまくいかない!

VC6.0でデータ受信がうまくいっていません
調査した所、ReadFileの読み込みで1024バイト以降のデータ
が異常なデータになっていました。
なにか設定が足りないのだと思いますがわかりません。。。
熟練の皆様お願いします。
0425辣腕PG NGNG
>424
ネタ?

たったそれだけ書いて何をどうしろと?
0426デフォルトの名無しさんNGNG
>>425
1を聞いて10を知る練習をしろ、と言っているのでは?
実際こういう質問をしやがるプログラマは多いからな。
0427デフォルトの名無しさんNGNG
>>425
わからないのところは創造で補うべし。創造だぞ。
0428新米PGNGNG
>>425
すみません、素人さんにはわからない説明をしてるので
ごめんなさい。
0429デフォルトの名無しさんNGNG
文字列を右端と左端の空白部分を計算する
ことで、中央にそろえるプログラムを勉強
しますが、本には下のように書いて
いました。しかし、これだとrigのほうが
上手くいきません。(printfで調べました。)
この記述は間違っているのでしょうか?

n=strlen(s);//
for(i=0;i<n;i++)
if(! isspace(s[i])) break;
lef=i;
for(i=n-1;i>=0;i--)
if(! isspace(s[i])) break
rig=n-i-1 ;
k=(lef+rig)/2;

(C言語集中ゼミ softbank刊 P174)
0430デフォルトの名無しさんNGNG
>>428
あんまなめんな。
素人じゃなくたってわかんねーよ。
せめてCreateFileのパラメータくらい全部かいとけやゴルァ!
0431民生NGNG
S−JIS ⇔ EUC の変換をするにはどうすればいいですか?
0432デフォルトの名無しさんNGNG
>>431
Winなら秀丸に食わせて、s-jisで保存したりeucで保存したりします
Linux/Unixならnkfに食わせます
system関数を使うとよいでしょう
0433デフォルトの名無しさんNGNG
>>431
system("nkf -S -e <sjisfile >eucfile");
system("nkf -E -s <eucfile >sjisfile");
0434新米PGNGNG
>>430
すみません、ちょっとかじった人にもわからない説明をしてるので
ごめんなさい。
0435民生NGNG
>>433

まじ助かります。ありがとうございます。
0436民生NGNG
>>433

変数レベルで変換するにはどうしたらいいですか?
0437デフォルトの名無しさんNGNG
>>431
そんなもん検索すればいくらでも出てくるだろうに。
http://alfin.mine.utsunomiya-u.ac.jp/~niy/algo/
0438デフォルトの名無しさんNGNG
>>434
再現可能な情報をくれ。
5W1Hって知ってるか?
厨房じゃなきゃ意味わかるよな?

Read時ってことは送られてくる情報が1024bytesで切れてて、
あとはゴミッちゅう可能性もあるが、相手にもよるよな。
0439デフォルトの名無しさんNGNG
>>434
少なくともお前より経験も実績もあるが何か?
「設定が足りないんだと思います」とか書いておきながらその肝心の設定を
何一つ書いてなけりゃ答えようがねえよ。
0440デフォルトの名無しさんNGNG
>>428 >>434
>>424には「説明」らしきものは何も書いてないんだが。
0441デフォルトの名無しさんNGNG
>>439
経験と実績だけの方ですね、なんの実績だか・・・(冷汗)
経験豊富なあなたもごめんなさい。
>>440
>428の理由により、ごめんなさい。

たまに出来る人が混じってる2ちゃんですが
今回はみんなはずれみたいなので、終了します。
0442デフォルトの名無しさんNGNG
なんだ真厨か。
0443デフォルトの名無しさんNGNG
const int MAX = 100 ;
const int * pMAX = &MAX ;
int i = 50 ;
pMAX = &i ;

のとき、*pMAXの値は何か?
プログラムせずに答えよ。

と言われて困っています。

pMAX が const だから
pMAX = &i ;は出来ないんじゃないかと思うので

*pMAXは 100だと思うんだけどあってる?
0444デフォルトの名無しさんNGNG
>>443
50
0445デフォルトの名無しさんNGNG
なぜでしょうか?

pMAX = &i ;

がどうして可能なのか分かりません。const指定してるのに。
0446デフォルトの名無しさんNGNG
>>445
int const* pMAX =&MAX;
なら、
pMAX = &i;
はできない。
0447デフォルトの名無しさんNGNG
>>445
50
0448445NGNG
?>446
どこが違うのでせう!?
0449445NGNG
constキーワード指定の場合、派生の順序がよくわかっていません。>俺
0450デフォルトの名無しさんNGNG
int * const p; // const な 「intへのポインタ」
const int * p; // 「const int」へのポインタ
0451新米PGNGNG
追記
直りました、やはりあの書き込みで説明不足って事はなかったみたいです。
他の掲示板にも意見を求めたらあっさり解決。
ちょっと2ちゃんにはがっかり。
0452厨房PGNGNG
>>451
何が原因だったの?
僕も同じようなことをやるかもしれないから
参考までに教えてほしいです
0453デフォルトの名無しさんNGNG
>>452
ほっとけ。ただの煽りだ。
0454445NGNG
>int * const p; // const な 「intへのポインタ」
>const int * p; // 「const int」へのポインタ

うーん、では
const * int p と
int const * p はどうよむのでしょうか(日本語訳!?すると)?
0455sageNGNG
>>454
K&R読んで勉強しとけ

int main()
{
int a = 0;
const int *p1 = &a; /* 変更不可能な, intを指すポインタ */
int const *p2 = &a; /* 変更不可能な, intを指すポインタ */
int * const p3 = &a; /* intを指す, 変更不可能なポインタ */

*p1 = 1; /* error */
*p2 = 1; /* error */
*p3 = 1;

p1++;
p2++;
p3++; /* error */

return 0;
}
0456445NGNG
>>455
446さんは
*p1 = &a; /* ok */
*p2 = &a; /* error */
と言ってるのですが!?
0457sageNGNG
const int *p1 = &a; /* 変更不可能なintを指すポインタ */
int const *p2 = &a; /* 変更不可能なintを指すポインタ */
int * const p3 = &a; /* intを指す変更不可能なポインタ */
のほうがわかりやすいか。
おまけ
const int * const p4 = &a; /* 変更不可能なintを指す変更不可能なポインタ */
0458新米PGNGNG
>>452
DCBでした。
気をつけてね。
>>453
勉強しましょうね。
0459445最後の質問NGNG
>>457
有難うございました。「おまけ」で納得できました。

最後に
const int
int const
どっちを先に書いても同じなのですね?質問ばかりですいません。
0460445NGNG
同じだとすると446さんは間違えたのだろうか。
0461デフォルトの名無しさんNGNG
>>458
痛い煽り(w
DCBなのはわかりきってるだろ。DCBのどのメンバだよ(w
知ってる単語並べりゃいいってもんじゃねえだろ(プ
0462デフォルトの名無しさんNGNG
>>460
そゆこと。
0463460NGNG
>>460 >>462
御意。
正しくはconst* int 〜だったね。
宇津出汁脳。
0464445NGNG
>>460
いや、ご回答頂いただけでも感謝してます。マジで。

でもsage.
0465デフォルトの名無しさんNGNG
画像処理での、「輪郭線(境界線)追跡」を行うプログラムが書けません。
誰か教えて下さい。お願いします。
0466デフォルトの名無しさんNGNG
>>465
追跡か?
ある点から周りを見渡して現在の点と最も近い値を持つ点に移動。
これを繰り返す。

「ある点」は輪郭抽出とかであらかじめ探しておく。
0467465NGNG
>>466
よくわかりません。
0468デフォルトの名無しさんNGNG
>>465
http://www.gctv.ne.jp/~tsugu/sotuken/binedge/

よく知らんが検索かけたらうじゃうじゃ出てくるぞ。
あとマルチポストは止めろよな。Cとも関係ないしな。
0469デフォルトの名無しさんNGNG
>>467
とりあえず、この板の住人はマルチポストするような厨房に教えてくれるほどお人好しでも暇人でもないって事だ。
0470デフォルトの名無しさんNGNG
>>468
マルチポストに対する注意はマルチポストしていいの?
0471デフォルトの名無しさんNGNG
放置しとけ
0472デフォルトの名無しさんNGNG
>>429
breakの後に;を忘れている。
0473デフォルトの名無しさんNGNG
>>472
おいおいそのくらい大目に見ようぜ
0474デフォルトの名無しさんNGNG
2次元配列を動的に用意するのはどうすればよいのよ!
0475デフォルトの名無しさんNGNG
>>474
動的にメモリ確保
0476初心者NGNG

下記のソースがまともに動きません。なぜでしょうか?
コンパイラはエラー0,警告0で通ります。
Nを1000にすると問題なく動くのですが。
sizeof(int)は2です。

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

#define N 10000

main()
{
int i,d[N];

for ( i=0 ; i<N ; i++ )
{
printf ( "%d ",d[i]=rand() );
}

return 0;
}

環境:Duron800/128M/HD60G/Windows98SE(DOS窓)
言語:LSI-C86試食版
0477デフォルトの名無しさんNGNG
>476
スタックがあふれているから。int d[N]をmainの上に持っていくと動くはず。
0478よおNGNG
AIXでは、動いてるぞ
おそらくLSI-C86の何らかの制限に引っ掛かってると思うけど
0479初心者NGNG

ありがとうございます。
int d[N]をmain()の上に持っていくと動きました。
Nを30000にしても動きました。
スタックがあふれるなんて、再帰的なことをしない限り
気にすることないと思っていたのですが、勉強不足でした。
0480デフォルトの名無しさんNGNG
>>479
> スタックがあふれるなんて、再帰的なことをしない限り
> 気にすることないと思っていたのですが、勉強不足でした。
LSIC86はかなり古いコンパイラだからな。
# intが2byteだし、near, farポインタがあるし...

LSIC86ではSモデルでは2500byteのスタックをデフォルトで用意する。
必要なスタックを確保したい場合、コンパイルオプションに
-k'-s 2000'を追加する。これで8kのスタックが確保できる。

詳しい話はマニュアルLSIC86.manの3.9 スタックの大きさ
を見てみよう。
0481デフォルトの名無しさんNGNG
関数でmemset関数とmemcpy関数の機能がついてないのでmemsetとmemcpyの
サブルーチンを作らなくてはいけないのですが、ソースは具体的にいうとどのようになるのでしょうか?
初心者なので難しいです。

void *memset(void *s,int c,size_t)
{
void *a[size_t];
int b = 0;
strcpy(a,b);
return(a);
}

まさかこんなソースになるわけないし。。。
0482>481NGNG
システムコール使っていいのか?
0483デフォルトの名無しさんNGNG
>>481
新卒で、先輩から
「Cの勉強がてら、memsetとmemcpyを自力で作ってみ」
と言われたとかいうことじゃないよな?
0484デフォルトの名無しさんNGNG
>>481
memcpyがなくてstrcpyがある・・・どういう環境だ?
0485デフォルトの名無しさんNGNG
>>481
/* ネタ用memset */
void *memset(void *s,int c,size_t n)
{
  return memmove(s, c, n);
}

/* 先輩が予期しているmemset */
void *memset(void *s,int c,size_t n)
{
  unsigned char *p = s;
  int i;
  for(i = 0; i < n; n++) {
    p[i] = c;
  }
  return s;
}

memcpyはこれを参考にして自分で作れ
0486デフォルトの名無しさんNGNG
>>481
たのむからK&Rくらい読んでくれ。
0487デフォルトの名無しさんNGNG
お前は次に 「K&Rってなに?」 と言う!
0488デフォルトの名無しさんNGNG
481さん、ありがとうございます。
大変恥ずかしいっす。。。
0489デフォルトの名無しさんNGNG
>>485
i++だよな?
0490デフォルトの名無しさん NGNG
K&Rってなに?
0491デフォルトの名無しさんNGNG
ちなみに
for(i = 0; i < n; i++) {
ですよね?
0492デフォルトの名無しさんNGNG
VCのプログラムを高速化をしたいので
ソースのどの部分がオーバーヘッドになっているのかを調べたいです
確か、各関数の実行時間を調べる関数があったと思いますが・・・
教えて下さい
0493デフォルトの名無しさんNGNG
void *memset(void *s,int c,size_t n)
{
  unsigned char *p = s;
  int i;
  for(i = 0; i < n; i++) {
    p[i] = c;
  }
  return p;
}
0494デフォルトの名無しさんNGNG
>>489, >>491
yes しくじった。
0495デフォルトの名無しさんNGNG
戻り値は、
return p;
ではないのですか?
0496デフォルトの名無しさんNGNG
>>495
no, memsetはsを返す仕様

http://www.linux.or.jp/JM/html/LDP_man-pages/man3/memset.3.htm
0497496NGNG
>>496
URLが間違ってた
正:http://www.linux.or.jp/JM/html/LDP_man-pages/man3/memset.3.html
0498デフォルトの名無しさんNGNG
>>492
関数?
profilingでなくて?
0499デフォルトの名無しさん NGNG
会社でボーナス査定システムを作成することになりました。今年のボーナスは
ボーナス=(基本給*2.3)+能力給+ボーナスポイント
という計算で求める。基本給とボーナスポイントは下の通り。
勤務年数    基本給    ボーナスポイント
0−5年    80000  10000
6−10年  100000  12000
10−15年 120000  15000
16年以上  150000  18000
ランク  能力給
 A   基本給*3      
 B   基本給*2.5
 C   基本給*2
 D   基本給*1
という問題があるんですが、自分で作ったプログラムが下にあるのですが、
エラーが1つあるのですが、どこかわかりません。自分では完璧だと思うですが。
だれか、教えてください。

基本給=kihon 能力給=nou ボーナスポイント=point 勤務年数=nennsu
ランク=rank ボーナス(答え)=answer
#include <stdio.h>
int main(void)
{
int nennsu,kihon,nou,point,answer;
char rank;
printf("勤務年数は?");
scanf("%d",&nennsu);
printf("ランクは?");
scanf("%s",rank);
if(nennsu>=16){
kihon = 150000;
point = 18000;
}
else if(nennsu>=11){
kihon = 120000;
point = 15000;
}
else if(nennsu>=6){
kihon = 100000;
point = 12000;
}
else{
kihon = 80000;
point = 10000;
}
if(rank= 'a'){
nou = kihon * 3;
}
else if(rank = 'b'){
nou = kihon * 2.5;
}
else if(rank = 'c'){
nou = kihon * 2;
}
else (rank = 'd'){
nou = kihon * 1;
}
answer = (kihon * 2.3) + nou + point;
printf("あなたのボーナスは、%dです",answer);
return 0;
}
0500中途半端くんNGNG
>>499
エラーは2点
・ifがいっかしょぬけてる
・ださいこーどかくな
0501デフォルトの名無しさんNGNG
どこ?抜けてないよ。
初心者なの、ださくてごめん
0502デフォルトの名無しさんNGNG
>>429は何が問題なの?
0503デフォルトの名無しさんNGNG
>>502
うまく動かないのならだめってことだよ。
0504デフォルトの名無しさんNGNG
>>429
sが何のときうまく動かないの?
0505デフォルトの名無しさんNGNG
要素数が100の整数型配列aを定義し、for文を利用して配列の要素を
すべて0にする文を示しなさい。

こんな問題があるんですけど、配列の要素をすべて0にするという意味がわかりません。
わかる方いたら何方か教えてください。
0506中途半端くんNGNG
>>505
int a[100],i;
for(i=0;i<100;i++)a[i]=0;
0507デフォルトの名無しさんNGNG
>>499
ifの中の代入式って…。
それとswitch使おうね。
というか、Cの教科書読もう。
0508デフォルトの名無しさんNGNG
>>505-506
宿題スレでやれ。
0509デフォルトの名無しさんNGNG
int a[100];
bzero((sizeof int)*100);
0510デフォルトの名無しさんNGNG
>>509
int a[100];
bzero(a,(sizeof int)*100);
0511デフォルトの名無しさんNGNG
>>510
先生に怒られるんじゃないの?
0512504NGNG
>>504
放置しないで(><;)
0513デフォルトの名無しさんNGNG
>>511

int a[100];
for (a[0]=1;a[0];){
bzero(a,(sizeof int)*100);
}
0514デフォルトの名無しさんNGNG
int a[100];
for(a[0]=1;;a++){
if(a[0]==99){
a[0]=0;
break;
}
a[a[0]]=0;
}
0515デフォルトの名無しさんNGNG
int a[100];
for (bzero(a,(sizeof int)*100);0;);
0516デフォルトの名無しさんNGNG
sのなかみが長さゼロの文字列の時何が起こる?
>>512
0517デフォルトの名無しさんNGNG
>>507
技術評論社の「C言語によるはじめてのプログラムレッスン1」の一番最後の問題
なんだけど、問題集の答えだと、たくさん行があり、この一冊をやった知識で
自分で作成したプログラム。だから、答えが無いし、初心者だから、エラーになって
しまう理由を教えて。
0518デフォルトの名無しさんNGNG
typedef struct sHOGE{
int a[100];
}HOGE;
HOGE i={0};
int a[100];
*(HOGE*)a=i;
0519デフォルトの名無しさんNGNG
typedef struct sHOGE{
int a[100];
}HOGE;
HOGE i={0};
int a[100];
for(*(HOGE*)a=i;0;);
0520512NGNG
>>516
(?_?;)
長さが0だとlefもrigも0でいいのかなぁ・・・?
0521名無しNGNG
>>514
配列宣言した a を a++ は違うだろ

むかしZ80のコードでいかにして64Kすべてをクリアするかという
問題があった。プログラム自信も消してしまうのだ
0522デフォルトの名無しさんNGNG
>>521
あうー
a[0]++の間違いっす。
0523sageNGNG
こういうの書いたことあるなあ。

とりあえず、コンパイラのエラーと警告文をすべて読んで、理由を調べてみること。
がんばれ。
0524デフォルトの名無しさんNGNG
もしかして
strlen("")が返す値は未定義(._ .;?
0525デフォルトの名無しさんNGNG
>>524
なんで?
0だろう?
0526524NGNG
んなわけないか(;^_^
0527デフォルトの名無しさんNGNG
じゃ、n==0だと、

n=strlen(s);

for(i=0;i<n;i++)
 if(! isspace(s[i])) break;
lef=i;

for(i=n-1;i>=0;i--)
 if(! isspace(s[i])) break

rig=n-i-1 ;

k=(lef+rig)/2;

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

for(i=0;i<0;i++)
 if(! isspace(s[i])) break;
lef=i;

for(i=0-1;i>=0;i--)
 if(! isspace(s[i])) break

rig=0-i-1 ;

k=(lef+rig)/2;
0528sageNGNG
>>524
とくに、sがNULLの時以外は平気みたいだね。

s = " "; /* 空白三つ */
のとき
lef, rig が共に3にならない?
0529デフォルトの名無しさんNGNG
nが0でもいいと思うけどな〜

for(i=0;i<0;i++)
 if(! isspace(s[i])) break;
lef=i;   // i == 0 なので lef == 0

for(i=0-1;i>=0;i--)
 if(! isspace(s[i])) break;
rig=0-i-1; // i == -1 なので rig == 0

k=(lef+rig)/2;
0530デフォルトの名無しさんNGNG
>>528
sが空白3つの時、lefとrigは3になりますが、
それは意図した動きだと思います。

sがNULLだと駄目ですね。
>>429
strlenで失敗するから、rig以前の問題・・・?
429さんは何の文字列でチェックしたのかな〜(・_・ )
0531sageNGNG
fgetでとってきてて
\r\nがついてるのに一票
0532デフォルトの名無しさんNGNG
c言語の質問ってわけではないですが・・・。

再帰を解説する書籍やページにはよく、クイックソートがのっていますよね。
だいたいの本は「これを再帰を使わずに書くとかなり厄介なことになるので・・・」
などと書いていますが、実際にどんなプログラムになるのか書いているのはすくないです。
そこで、自分で繰り返し版に直してみようと思ったんですが玉砕しました。

どう書けばいいんでしょう?また、どこかにソースがのっているページってありますか?
0533デフォルトの名無しさんNGNG
>>532
その時点で目的は達成されてるんじゃないのか?
「かなり厄介なことになる」というのは体感できたんだろ?
0534デフォルトの名無しさんNGNG
>>533
532はどんなプログラムになるのかを知りたいのであって、
どんな結果になるのかを知りたいのじゃないから
目的は達成されてないだろ・・
0535デフォルトの名無しさんNGNG
>>532
そういえば俺も見たことないなあ。
ゼロから作るとしたら、元データと同量のワークエリアを
確保していいのならすぐできそうだけどね。
0536デフォルトの名無しさんNGNG
>>532
厄介でもないよ。

int *quick_sort(int *a, int n)
{
 int pivot, h, l, *high, *low, sp;

 high = (int*)malloc(sizeof(int)*stack_size(n));
 low = (int*)malloc(sizeof(int)*stack_size(n));

 high[0] = n - 1;
 low[0] = 0;
 sp = 1;

 while(sp > 0){
  sp--;
  h = high[sp];
  l = low[sp];

  if(h <= l)
   ;
  else{
   pivot = partition(a, h, l);

   high[sp++] = h;
   low[sp++] = pivot + 1;
   high[sp] = pivot - 1;
   low[sp] = l;
  }
 }
}

partition()とかは自分で作れ。バグあったらごめん。
0537デフォルトの名無しさんNGNG
>>532
ちゃんと書こうとすると多少やっかいかな。
再帰で引き渡す引数を保管しとかないといけないですから。
引数になる値を配列なんかに入れてとすれば
あとはオーバーフローさせないようにすればいいだけか。
一日悩めば出来るでしょう。

どっかの本で見たような記憶もあるけど何だったか忘れた。
0538532NGNG
>>533 - 537
いろいろ、ありがとうございます。

ただ、c言語(というよりプログラミング)を勉強しつつやっているもんで
あんまりややこしいことはまだできないですが・・・。がんばって、やってみます。


アルゴリズムの勉強っておもしろいですね。文法覚えるよりずっと楽しいです。
C言語の入門書は山ほどあるのに、アルゴリズムの本って少ないようなきがしますが、
いいのはありますか?(っていうのはスレ違いかな)
0539デフォルトの名無しさんNGNG
>538
おすすめなのかはよく分からんけど
アルゴリズム辞典(奥村晴彦著)だとバグフィックスされたソースが
ネット上ですべて手に入るからいいかもしれない。
0540536NGNG
return a; 忘れたよ……。
0541デフォルトの名無しさんNGNG
>>539
どっからに手に入るの?
0542532NGNG
>>539
多分これです

http://www.vector.co.jp/soft/data/prog/se002453.html

>>536
せっかく書いていただいたのに、解読できません。
もっと基本的なことからやらないといけないのかも・・・。
しっかりやります。
0543532NGNG
すいません。間違いです
× >>539
○ >>541
0544デフォルトの名無しさんNGNG
>>539
アルゴリズム事典は初心者にはだめだろ。
あれは説明がわかりずらいぞ。
Cプログラマのためのアルゴリズムとデータ構造
SOFTBANK
から始めるのがいいんじゃないの
0545デフォルトの名無しさんNGNG
C言語でURLエンコード・デコードする関数を教えてちょ
0546デフォルトの名無しさんNGNG
自分で作れ。
0547デフォルトの名無しさんNGNG
char input[256];
char output[256];

int enUML(char* MOTO,char* HENKANGO){
     write(1,"後は任せた!!\n",13);
}
0548デフォルトの名無しさんNGNG
bitset関数とbitget関数の環境がないので自作するように言われてるけど
アルゴリズムが・・・

void *bitset(A,bit)
{
int *d=A;
int i = d + bit;
int m;
while(*d>0){
m = (*d)%2;
*d=m;
if(i==d)
*d++;
d++;
}
}

これだと、駄目な気がします。誰か教えてください。
0549ぶっふばるとNGNG
>>548
int bitset( int A, int bit )
{ return A | 1<<bit ; }

int bitget( int A, int bit )
{ return A>>bit | 1 ; }
0550けろNGNG
>>549
下は & だよね
0551ぶっふばるとNGNG
>>550
わざとです(>>548への愛のムチ)

うそです。すみません。てきとうにかいてました。
0552デフォルトの名無しさんNGNG
>>549
int bitset( int A, int bit )
{ return A | (1<<bit) ; }

優先度注意。
0553デフォルトの名無しさんNGNG
欝だ。あってた。氏のう。
0554デフォルトの名無しさんNGNG
>>549
bitset(int A, int bit)
が A の bit目のビットを1にするってのなら
int bitset(int A, int bit)
{ return A | (1<<bit-1); }
じゃないんですか?
0555デフォルトの名無しさんNGNG
(bit-1)
0556shigeNGNG
通常の表現:
ブッ殺してやる!

↓
ていねい語表現:
死にますよ〜
0557shigeNGNG
まだCなんて使ってるんですか (嘲笑)

君らにはrubyなんて理解も出来ないと思うけどね。
0558デフォルトの名無しさんNGNG
自爆だね(w
0559どーでもいいことだがNGNG
>>554
ふつー、MLB が 0。
0560初心者NGNG
>>552
<<,>>の方が | よりも優先度が上。覚えとこう。
だけど、誤解を招かない、という意味で括弧を記述するのなら良し。
0561デフォルトの名無しさんNGNG
>>557
大抵のRubyユーザはUNIX野郎なのでCをカリカリ書きますよう。
大体RubyのソースはCで書かれているし……
0562shigeNGNG
熊ヒゲの誘惑・触れ合う体毛モンゴル相撲の巻
0563デフォルトの名無しさんNGNG
何? 職場でいじめられたの?
0564865NGNG
>>559
MLBって何?MSBの間違いでしょ。
それにどっちが0かはエンディアンネス次第。
リトルエンディアンだと普通はLSBが0ビットだよ。
0565デフォルトの名無しさんNGNG
>>564
いや、エンディアンに関わらずLSBが0だろ。
0566564NGNG
>>565
ビッグエンディアンだとMSBが0ビットって書いてある事多いよ。
0567デフォルトの名無しさんNGNG
バイトを反転させて受け取るdatget関数と反転させてセットするdatset関数を
作っているけど他の型に対応させるのが難しいです。

char *datget(char *d,int n)
{
int i;
char *dd;
dd = d;
for (i = 0; i < n; i++)
dd[i] = d[n-i-1];
dd[n] = '\0'
return(dd);
}

じゃ、違うと思うし・・・。誰かわかりますか?
0568デフォルトの名無しさんNGNG
こんなとこか?

char *datget(char *d, int n)
{
int i;
for(i=0; i<n/2; i++) {
char dd;
dd = d[i];
d[i] = d[n-i-1];
d[n-i-1] = dd;
}
return dd;
}
0569568NGNG
鬱だ。

誤 return dd;
正 return d;
0570デフォルトの名無しさんNGNG
>>567
> 他の型に対応させるのが難しいです。
void *datget(void *d,int n)
にして、関数内部ではunsigned char *で扱え。

> dd[i] = d[n-i-1];
2つの値(a, b)の交換を行う為にはもう一つ変数(t)がいる。
xorとか変なテクニックを使わない限り
t = a; a = b; b = t;
としないと交換できない。

また、d = "1234567", n = 7の場合
dの0番目とdの4番目を交換d = "7234561"
dの1番目とdの3番目を交換d = "7634521"
dの2番目とdの4番目を交換d = "7654321"
dの3番目以降は交換する必要はない。

ヒントは以上、検討を祈る
0571デフォルトの名無しさんNGNG
void ludcmp(float **a,int n,int *indx,float *d)
をmain関数で呼出したいのですが、引数をどのようにしたら
いいのか、わかりません。多分 a は配列だと思うのですが、
どなたか分かる方よろしくお願いします。
0572中途半端くんNGNG
>>571
float **a,*d;
int n,*indx;
ludcmp(a,n,indx,d);
0573デフォルトの名無しさんNGNG
>>567
datgetとdatset何が違うの?同じでいいと思うんだが
ソースを見る限りだと汎用のbyteswap関数作れば事足りる

>>570
void *は賛成だけどunsigned char *にする必要はないと思われ
つーか、どっちでもいいと思う
0574デフォルトの名無しさんNGNG
>>566
手元にある数種類のプロセッサのマニュアル見てみた。

ちなみにMC68000、SH3、H8/300、TMS320DSPすべてビッグエンディアンだが
MSBが0になってるのはひとっつも無いぞ。。
0575デフォルトの名無しさんNGNG
>>573
> void *は賛成だけどunsigned char *にする必要はないと思われ
void *dだとd[i]とするとは文法エラー。
dはなんらかの型にcastする必要がある。
byte単位に処理を行う仕様なのでchar *, unsigned char *が適切。
unsigned char *としたのは俺の趣味
0576デフォルトの名無しさんNGNG
567ですが、これでは無理でしょうか?

char *datget(void *d, int n)
{
int i;
unsigned char *dd;
for(i=0; i<=(n-i-1); i++) {
dd = d[i];
d[i] = d[n-i-1];
d[n-i-1] = dd;
}
return d;
}
0577573NGNG
>>575
言葉不足でした。unsigned char *にする必要ないってのは
無駄に長くなるから、char *でも大丈夫ってこと。

結果はどっちでも一緒でしょ?
0578デフォルトの名無しさんNGNG
>>576
とりあえずコンパイル*だけ*は通すようにする
論理的なエラーは自分で見つけよう
> char *datget(void *d, int n)
char *datget(void *d, int n)

> unsigned char *dd;
char dd;

上記2個所を修正し、さらに
int main(void){
  char s[] = "123456789";
  char *p;
  p = dataset(s, strlen(s));
  printf("%s\n", p);
}
を付けて自分の思っている通りに動くかどうか確認しろ。
"987654321"と出力できれば正常だろう。

他の型に対応するのはまずこれができてからだ。
0579573NGNG
>>576
要素数が奇数の時に一回無駄にループする。

void *datget(void *d, int n)
{
char *p1 = (char *)d;
char *p2 = (char *)d + n;
while (p1 < p2) {
char t = *p1;
*p1++ = *--p2;
*p2 = t;
}
return d;
}
0580デフォルトの名無しさんNGNG
>>564
MLBは間違えた。LSBだな。Least Bit。
エンディアンは関係ないよ。メモリとレジスタをごっちゃにしないこと。
0581デフォルトの名無しさんNGNG
>>576
void *datget(void *d, int n)
{
char *p1 = (char *)d;
char *p2 = (char *)d + n;
while (p1 < p2) {
*p1 ^= *--p2;
*p2 = *p1^*p2;
*p1++ ^= *p2;
}
return d;
}
とか。
0582581NGNG
>>581
しかし効率わるいね(^^;
0583デフォルトの名無しさんNGNG
配列で宣言の時に要素数を指定せずにその最大値を
途中で変更したりしたいのですがどうしたらいいですか。
0584デフォルトの名無しさんNGNG
>>583 こうやればいい
#include <stdlib.h>

int main()
{
  int i;
  int* p;

  p = (int*)malloc( sizeof(int) * 10 );
  if( p == NULL )return 1;

  for( i=0; i<10; i++ ){
    p[i] = i;
    printf( "p[%d]=%d\n", i, p[i] );
  }


  p = (int*)realloc( p, sizeof(int) * 20 );
  if( p == NULL )return 1;

  for( i=0; i<20; i++ ){
    p[i] = i;
    printf( "p[%d]=%d\n", i, p[i] );
  }

  free( p );

  return 0;
}
0585デフォルトの名無しさんNGNG
すいません。下のダイクストラのアルゴリズムで最短経路を始点から表示させる方法が
どうしても解りません。どうか教えてください。すいません。

include <stdio.h>
#define s 10000
#define v 30
#define YES 1
#define NO 0

int main(void);
int Min(int, int);
int MinSearch(int l[v], int c[v],int);
int n;
int main(void)
{
int i, j,k;
int sel[v], chk[v], distance[v];
int weight[v][v];
 printf("頂点の数を入力せよ");
scanf("%d",&n);
printf("各頂点間の距離を入力せよ\n");
 for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
printf("%d-%d:\n",i,j);
scanf("%d",&weight[i][j]);
}
}

for(i=1;i<=n;i++){
chk[i] = NO;
distance[i] = s;
}
printf("始点となる頂点を入力せよ : \n", n );
scanf("%d", &sel[0]);
chk[sel[0]] = YES;
distance[sel[0]] = 0;

for (i = 1; i<=n; i++) {
for (j =1 ; j<=n; j++) {



if(chk[j] == NO){
distance[j] = Min(distance[j], distance[sel[i-1]] + weight[sel[i-1]][j]);

}
}
sel[i] = MinSearch(distance, chk,n);

chk[sel[i]] = YES;
}


for (i = 1; i <=n; i++) {
printf("頂点%dから頂点%dまでの最短距離は%d \n", sel[0], i, distance[i]);

}
}
0586デフォルトの名無しさんNGNG
続きです
int Min(int a, int b)
{
if (a < b)
return(a);
else
return(b);
}

int MinSearch(int l[v], int c[v],int n)
{
int i, min, num;

min = s;
for (i = 1; i <= n; i++) {
if (c[i] == NO && l[i] < min) {
min = l[i];
num = i;
}
}
return(num);
}
0587583NGNG
さんくす。
2次元以上の配列はどうしたらいいでしょうか?
0588デフォルトの名無しさんNGNG
587は584に対してです。
0589デフォルトの名無しさんNGNG
>>587
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
int i,j;
int**p,**q;

q=p=(int**)malloc(sizeof(int)*10);
for (i=0;i<10;i++){
q[i]=p[i] = (int*)malloc( sizeof(int) * 10);
if( p == NULL )return 1;
}
for( i=0; i<10; i++ ){
for( j=0; j<10; j++ ){
p[i][j] = i*10 +j;
printf( "p[%d][%d]=%d\n", i, j, p[i][j] );
}
}

p=(int**)malloc(sizeof(int)*20);
for (i=0;i<20;i++){
p[i] = (int*)malloc( sizeof(int) * 20);
if( p == NULL )return 1;
}
for( i=0; i<20; i++ ){
for( j=0; j<20; j++ ){
p[i][j] = i*20 +j;
printf( "p[%d][%d]=%d\n", i, j, p[i][j] );
}
}
for (i=0; i<10;i++){
free(q[i]);
}
free( q );
for (i=0; i<20;i++){
free(p[i]);
}
free( p );
return 0;
}
0590デフォルトの名無しさんNGNG
>>589
ご苦労さま。でもメモリリークしてるよ。
n次元配列に対応できる記述ってあるのかな?
0591shigeNGNG
  ハハハ
  ∧_∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ( ^∀^)<  あほか
 ( つ ⊂ ) \_________
  .)  ) )
 (__)_)     (^∀^)ゲラゲラ


ruby >>>>>>>>>>>>>>>>>>>>>>> C
0592564NGNG
>>580
説明しにくいんだけど、MSB FirstとLSB Firstってのは、普通はバイト
の並び順だけど、実際にはビットの並び順とも考えられると思う。

もしメモリをバイト配列じゃなくて、ビット配列として扱えたとすると、
例えば32ビットの値はリトルエンディアンならLSBが0番目でMSBが31番目、
ビッグエンディアンならMSBが0番目でLSBが31番目という感じになる。

俺はこんな風に解釈してるんだけど、どんなもんでしょ?
0593デフォルトの名無しさんNGNG
こんな風にして文字列入れるの邪道かな。

char str[100];
int i = 0;

while((str[i++] = "sage"[i]) != 0);

すなおに

char str[100] = "sage";

って書けって。
そりゃそうだ。
0594デフォルトの名無しさんNGNG
>>593
正道じゃない?
最初から入れたい文字列が決定しているわけじゃないときは
それなりに有効だと思う。

!=0 はいらないけど
0595593NGNG
>>593
そうですね。
!= 0
いりませんね。

邪道かなと思ったのは
"sage"[i]とするのはどうなのかなと。
0596デフォルトの名無しさんNGNG
#include<stdio.h>
#include<string.h>

#define SIZE 256

int main(void)
{
char buf[SIZE];

printf("input?");
while( fgets(buf, SIZE, stdin) != NULL){
buf[strlen(buf)-1] = '\0';
printf("]%s\n", buf);
printf("input?");
}
printf("end");

return 0;
}
とするして、input?Ctr+Z を入力すると最後のendが表示されません。
どうしてなんでしょう?
printf("\nend");
にすると
input?end

printf("\n\nend");
にすると
input?
end
になりました。
0597デフォルトの名無しさんNGNG
strcpy 使わないのが邪道ってこと?
それとも "sage"[i] のこと?
後者なら、
char hex[9];
for ( int lpc = 0; 8 > lpc; lpc++, i >>= 4 )
hex[ 7 - lpc ] = "0123456789ABCDEF"[ i % 16 ];
hex[8] = 0;

という程度なら邪道とは言えないのでは?

より邪道っぽいのは以下。

char mes[100];
int i = 0;
while ( i++[mes] = i["test"] );
0598580NGNG
>>592
世の中広いから、もしかしたら MSB が 0 番目ってマニュアルに書いてある
CPUがあるかもしれないけど、ふつーは、LSB が 0 じゃない?

8 ビットや 16 ビットで考えたとき、1 にしたいなら
MSB が 0 だと 8 ビットで 7, 16 ビットで 15 を指定しないといけない。
だけど、LSB が 0 なら CPU のビット数に関係なく 0 を指定できるし。
ちなみに MSB が 0 ではビットの重みと番号が一致しないのでばらばらに
なってしまう。

まず、レジスタでそう定義すると (MSB 31 .... 0 LSB )
エンディアンは関係しないのです。
勿論、メモリ上に読み書きするとエンディアンに応じたビットパターンが
書き出されるけど、それは別の話。レジスタに出し入れする段階で
自動的に処理されるから問題ないよね。
0599デフォルトの名無しさんNGNG
>>592
ビッグエンディアンはデータバスの最下位ビットがより上位のアドレスにマッピング
されるのでやっぱりLSBは0なのよ。
0600デフォルトの名無しさんNGNG
>>597
どうでも良いけど、[ i % 16 ]; は [ i&0x0f ]; にした方が良さげ。
0601デフォルトの名無しさんNGNG
>>600
iをunsigned intにするとi % 16と書いても出てくるコードが
i & 0xfになるコンパイラはあります。
0602デフォルトの名無しさんNGNG
16は0x10なのでわ?
0603デフォルトの名無しさんNGNG
>>602
あほらしすぎて突っ込む気にもなれん…
15 & 16はいくつだ?
15 % 16はいくつだ?
0604デフォルトの名無しNGNG
>>601
>>597 だけど、>>600 はマイナスの場合を恐れていると思われ。
だからつまり、unsigned にすることで解決なのであってるんだけど。
もちろんコンパイルテストの時は unsigned にしたさ。
宣言部が落ちたのは申し訳も無し。
0605デフォルトの名無しさんNGNG
フルカラーを256色にきれいに減色する方法をおしえてください。
急いでいます。お願いします。
0606デフォルトの名無しさんNGNG
>>605
モノクロにする
0607605NGNG
>>606
カラーのままきれいにしたいのですが。
お願いします。
0608デフォルトの名無しさんNGNG
>>605
解像度を縦4倍、横4倍にする。
0609デフォルトの名無しさんNGNG
>>605
減色用アルゴリズムはいくらでも手にはいるし
ライブラリだって多く市販されている。

Cの話題じゃないからどっかいけ
0610605NGNG
>>609
おめーがどっかいけ!
0611デフォルトの名無しさんNGNG
>>605
よし、じゃあ1から教えてやるから必ず実行しろ。

1.丈夫なヒモを用意する。長さは2〜3m程度でよい。
2.直径50cm程度の輪を作る。
3.輪が地上2mくらいになるよう、高いところから吊す。
4.輪の中に自分の頭を突っ込んで思いきりぶら下がる。

これでお前が抱えているすべての問題は解決する。
0612デフォルトの名無しさんNGNG
>iをunsigned intにするとi % 16と書いても出てくるコードが
>i & 0xfになるコンパイラはあります。

intでもi%16uだったらOK?
0613デフォルトの名無しさんNGNG
>>601
それは最適化がかかってるだけ。勘違いしない方がいい
0614605NGNG
>>611
おまえがやれよ。ばっかじゃないのか
0615デフォルトの名無しさんNGNG
>>605
フルカラーな色データをRGBそれぞれ上位ビットだけ取り出して
0616デフォルトの名無しさんNGNG
>>605
マジメにやるなら色ヒストグラム出して代表色にク
ラスタ分け。が時間がないなら 615 の単純量子化で
緑に重みがけくらいが一番よいかな?
0617デフォルトの名無しさんNGNG
>>613
何も指示しなくてもこの程度の最適化はやってくれる、という例なんだけど。
0618デフォルトの名無しさんNGNG
>>614
教えて君のくせに偉そうな口を叩くな。死ね。
0619デフォルトの名無しさんNGNG
>>593
str[5]からstr[99]の内容が、
・前者のやり方だと、ごみ
・後者のやり方だと、'\0'
になるんじゃなかったっけ。
あんまり意味ない領域だから、別にどうでもいいけど…。
0620ユニホームな七資産NGNG
>>618
611がネタ振ったつもりだったら煽られたくらいで乗るなバカ。
本気で言ってたんなら俺からも言わせて貰う。他人の苦しみを
理解できないおまえは生きてる資格がない。氏ね。
0621アンドレザジャイアントNGNG
>>611
何も起こらんじゃねーか、どーしてくれる
0622デフォルトの名無しさんNGNG
>>620
誰が苦しんでるんだバカ(藁
0623デフォルトの名無しさんNGNG
>>621
肉体派カコイイ
0624デフォルトの名無しさんNGNG
>>621
あなたの場合は、充分太いワイヤーで直径80cmほどの輪を作り、
地上4m位の高さに吊す必要があります。
もちろん充分に頑丈な梁か枝に吊しましょう。
0625593NGNG
>>597
そうですね。
while(str[i++] = *("sage" + i));
なんてのも考えたんですけど、
そちらのほうが邪道っぽいですね。

>>619
そのとおりです。
まあ、メモリが0でクリアされてないとダメなときって
そう無いでしょうから。
あったらあったで0で埋めてからやればいいんだし。
0626デフォルトの名無しさんNGNG
argc, argvの読み方がわかりません。
0627心の中ではNGNG
オーグシー
オーグブイ
0628あははのはNGNG
>>622
俺
0629sageNGNG
あーぐしー
あーぐぶい
0630デフォルトの名無しさんNGNG
argc,argvって何の略?
0631sageNGNG
argument counter
argument vector
0632NANASINGNG
[0.0, 1.0) の非負 倍精度 浮動小数点実数の乱数返す関数教えてください。

drand48( )以外でおねげーしますだ。
0633#include <nanasi.h>NGNG
>>632
そんなこと人に聞かないでマニュアル読め。
0634632NGNG
マニュアルにあるか?
標準関数ではないでしょ。

double drand48(void){
  double ans;
  ans=((double)(rand()))/32768;

  return(ans);
}

とりあえず自分ではこのくらいしか思いつかん。
0635デフォルトの名無しさんNGNG
>  ans=((double)(rand()))/32768;

即値32768は何とかなりませんか。
0636???NGNG

下記のソースを実行すると、

Welcome to the real world.
27

Welcome to the real world.
4

と表示されます。なぜでしょうか?
文字数+'\0'=27ですから2行目の27は納得できますが
関数にポインタ渡しをすると配列のサイズが4になってしまいます???
Visual C++6です。

#include <stdio.h>

void Sub ( char *Text );

int main( void )
{
  char Text[] = "Welcome to the real world.";

  printf ( "%s\n", Text );
  printf ( "%d\n\n", sizeof Text );

  Sub ( Text );
 
  return 0;
}

void Sub ( char *Text )
{
  printf ( "%s\n", Text );
  printf ( "%d\n\n", sizeof Text );
}
0637632NGNG
>>635
なりますね・・・。
double drand48 ( void ) {
  double ans;
  ans = ( (double ) ( rand( ) ) ) / ( RAND_MAX + 1 );

  return ( ans );
}

どうでしょう?
0638デフォルトの名無しさんNGNG
コールバック関数というものがよく理解できません。
こういうプログラムがあった場合、prt関数はコールバック関数といえるのでしょうか?
全然違う?

#include <stdio.h>

void function( void (*p) ( void ) )
{
  p();
}

void prt( void )
{
  printf( "hello, world" );
}

int main()
{
  function( prt );

  return 0;
}
0639デフォルトの名無しさんNGNG
>>636
char *Text は配列ではありません。
char型データをさすポインタです。

だから、char *Textと宣言されているときのsizeof Textは、
VCのポインタのサイズである4になったのでしょう。

char Text[] = "xxxxx"
は、charの配列 "xxxxx"を初期値として持つ配列型変数です。
配列型変数に対して sizeof 演算子を適用すると、
配列の要素数*配列の要素のサイズ が得られることが決まっています。

配列と、ポインタ変数は、似て異なるものです。
0640デフォルトの名無しさんNGNG
>>638
大体あってます。
0641>639NGNG

636です。
詳しいレスありがとうございます。
しかし、Cは奥が深いですね・・・。
勉強し直します。
0642デフォルトの名無しさんNGNG
>>638
通常あるイベントに対し呼び出されるためにポインタとして登録される、
関数をコールバック関数といいます。以下典型的な例。
#include <stdio.h>
#include <stdlib.h>

void hehe(void){
printf("hehe\r\n");
}
void huhu(void){
printf("huhu\r\n");
}
void hihi(void){
printf("hihi\r\n");
}

void (*function[])(void)={
hehe,
huhu,
hihi,
NULL
};

int main(int argc, char* argv[]){
int i;

for(i=0;*function[i]!=NULL;i++){
(function[i])();
}
return 0;
}
0643デフォルトの名無しさんNGNG
>>641
君が浅いだけです.K&R全然薄いジャン.
0644デフォルトの名無しさんNGNG
>>643
わざわざ追い打ちかけるな
0645638NGNG
>>640、642
レスありがとうございます。
でも642さんのプログラムって関数ポインタを使って関数を呼んでるだけですよね?
そういうのをコールバック関数っていうんですか?
0646デフォルトの名無しさんNGNG
たとえばWindowsの世界でいうコールバック関数でも
やっぱり関数ポインタを使って関数を呼び出しているだけです。

引数、戻り値、リンケージのタイプなどに取り決めがあって、
実行時に呼び出し先を登録、変更したりできるものを
コールバックといいます。

C言語的にいえば、ただの関数ポインタを使った関数よびだし
になる場合が多いと思います。
0647デフォルトの名無しさんNGNG
>>645
もう少し具体的に書くと下のサンプルのようになります。
hoge()は0,1のイベントに対応する関数を登録すると引数に指定した
方の関数をコールバックします。
これらの応用でステートマシン等が簡単に記述できます。
#include <stdio.h>
void hehe(void){
printf("hehe\r\n");
}
void huhu(void){
printf("huhu\r\n");
}
void hoge(int i,void (*function1)(void),void (*function2)(void)){
printf("event=%d ",i);
if(i) (*function1)();
else (*function2)();
}
int main(int argc, char* argv[]){
hoge(0,hehe,huhu);/*イベントに0を与える*/
hoge(1,hehe,huhu);/*イベントに1を与える*/
return 0;
}
0648デフォルトの名無しさんNGNG
↓のヲ教えてくだされ!!
全体的にわかりません

#include <setjmp.h>
#include <signal.h>
#include <stdio.h>
#include <unistd.h>

extern void jump_to_toplevel(int);
jmp_buf toplevel;

main(int argc, char *argv[])
{
void (*sig)(int);

if (setjmp(toplevel) == 0) {
sig = signal(SIGINT, jump_to_toplevel);
printf("You have five seconds.\n");
sleep(5);
} else {
signal(SIGINT, sig);
printf("Inturrupted!\n");
return 1;
}
printf("Done!\n");
return 0;
}

void
jump_to_toplevel(int x)
{
longjmp(toplevel, 1);
}
0649デフォルトの名無しさんNGNG
>>648
ざっと見た感じだと、たとえばCtrl+Cのようなシグナルを受けたら
割り込み入ったら教えてくれるようなものかな?
実行すればわかるだろうけど・・・
0650sageNGNG
大域jumpだな

setjumpを呼ぶと0が帰ってくるので
SIGINT割り込みのハンドラにjump_to_toplevelをセット、
その後五秒待機する。

何も起こらなければ5秒後に、Done!を表示して終わり。

SIGINTが発生すれば、
jump_to_toplevelが呼ばれる。
ここで、longjumpで、setjumpを呼んだところまで制御を戻し、
setjumpが0でない値を返したように振る舞う。

で、SIGINTを元の割り込みハンドラに戻して、
mainが1を返して終了する。
0651638NGNG
>>646,647
レスありがとうございます。
関数のポインタを渡すことによって、渡した先でその関数を呼べるようなものと理解しました。
イベントによって呼ばれる関数のような、自分が直接呼ばない関数を記述するのに向いているわけですね。
0652デフォルトの名無しさんNGNG
あの・・・
コールバック関数は、OSから呼び出される
ユーザープログラムと教わったのですが、
たとえば、Cではmain関数で、Windowsプログラミングでは
WinMainとウィンドウプロシージャが
コールバックだと・・・・
あれは嘘だったんですね?
0653638NGNG
>>652
コールバック関数の使い道として「OSから呼びださせる」というのがあると理解すればいいのではないでしょうか。
0654デフォルトの名無しさんNGNG
MFCなどのフレームワークからも、でしょうね。
0655デフォルトの名無しさんNGNG
OSからだろうがライブラリからだろうが、(擬似)非同期で処理をする
時に使うもんだよ。
あ、でも非同期ってのも分からないんだろうな…
0656638NGNG
どちらかというと、「非同期で処理をさせるのに向いている」だと思うのですが。
0657ただのばかNGNG
イメージ的には「○×が起こったら、このボタン押してね」って
感じですね。ボタンがコールバック関数にあたります。
0658デフォルトの名無しさんNGNG
>>ただのばか
あたらねーよ.ボタンにつけるハンドラがソレだろ.
0659shigeNGNG
ばーかばーか
0660デフォルトの名無しさんNGNG
>>656
勝手に思っとけよ.
0661デフォルトの名無しさんNGNG
>>658-660
初心者が読むんだから少しは自重しろボケ
0662デフォルトの名無しさんNGNG
>>661
何のカンケーがあんだ?
0663C初心者NGNG
ビット演算、シフト演算がいまいちピンときません。
2進数、16進数などの良い参考書をご存知でしたら教えて下さい。
初心者なお願いで申し訳ないです。
0664デフォルトの名無しさんNGNG
86でもいいからアッセンブラを使って
プログラムしてみる。そうするとイメージが湧く。
0665663NGNG
>>664
すいません。アセンブラできません。

10進数や16進数を2進数(0と1の並び)で表示する関数を
自作して、それで勉強していますが、何かわかりやすい解説の載っている
本があればと思いまして。
0666デフォルトの名無しさんNGNG
>>665
自分でいろいろ試す、それが一番わかりやすいよ。

~,^,|,&,>>,<<
ビット演算子はこれで全部と思うよ
0667デフォルトの名無しさんNGNG
>>665
n 進法で l 桁の数 α = a_l a_(l-1) ..... a_1 a_0 は

  l
α=Σ a_k * n^i
  k=0

これじゃあかんの?
0668デフォルトの名無しさんNGNG
間違えた
n^i -> n^k です。

激しく鬱。
0669デフォルトの名無しさんNGNG
いや、付随して覚えることも多いでしょ。
例えば2の補数表現とか、データ型によって
シフト演算の意味が違うとか。

情報処理の問題集で練習ってのもありかな。

その辺は、クリアしてたらゴメン。
0670デフォルトの名無しさんNGNG
その内自然にできるようになるっしょ。
0671 NGNG
キーボードから文字をCtrl-Dで終了するまで読み取り、
アルファベット、数字、その他に分類してそれぞれの数を数えて、
表示するプログラムを作る方法を教えてください。
改行文字も「その他」で数えてください。
0672デフォルトの名無しさんNGNG
>>671
>>1 をよく読めタコ

>だが、FAQに載ってる質問すると煽るぞ、ゴラア!!
>それに勘違いするな、俺は貴様の宿題を解いてやるほど暇じゃない。
0673デフォルトの名無しさんNGNG
while((c=getchar())!=EOF)isalpha(c)?a++:isdigit(c)?d++:e++;
ほれ。もう来るなよ。
0674デフォルトの名無しさんNGNG
邪悪なCソースコンテストみたい。
0675デフォルトの名無しさんNGNG
>>671は放置モード決定。
http://mentai.2ch.net/test/read.cgi?bbs=prog&key=994065886
0676デフォルトの名無しさんNGNG
>>675
そのスレ見て思ったんだけど。。。
2ch って思ったより優しいオニイタマが多いのね。
0677デフォルトの名無しさんNGNG
そうね、いろいろ(間違ったのもあるけど)ヒント
あるのに自分でやる気一切なし、って感じ。
環境聞いても答えないし。
0678デフォルトの名無しさんNGNG
友達がintは4バイトではないとか言っているんですが
ばかですよね。sizeofで調べても4バイトになるのに。
笑い飛ばしてもいいですか?
0679デフォルトの名無しさんNGNG
int はそのマシンで処理するのに最も適したサイズになります。
従って自分を笑い飛ばしなさい。
0680デフォルトの名無しさんNGNG
ネタですか?

そうでないとしたら、
環境すっ飛ばしてintのサイズってわからないです。
0681おじいさんNGNG
わしがわかいころはのー int っていったら 2bytes
だったんだがのー、さいきんのやつはせちがらいのー
0682678NGNG
知らなかった。
0683デフォルトの名無しさんNGNG
おいおい
0684初心者NGNG
C++BuilderでPaintのプログラムを打ってるんですが、
Imageコンポーネントって具体的に言って、どういう働きをして
どういうことができるんですか?
あと、ビットマップとはなんですか?
0685デフォルトの名無しさんNGNG
>>684
ここまでスレ違いなのも逆に珍しい。
0686初必者NGNG
64bit処理系でgcc 使ってるのですが、ビットシフト演算は
32 以上は無理なんでしょうか? 対象はlong longです。
asm で書くしかない?
0687デフォルトの名無しさんNGNG
>>686
頑張ればできる。
0688デフォルトの名無しさんNGNG
>>686
やり方はいくらでもあると思われ。
一例

#include <stdio.h>
#include <math.h>

long shiftleft(long long i,long j){
return i*(long long)(pow(2.0,(double)j));
}
long shiftright(long long i,long j){
return i/(long long)(pow(2.0,(double)j));
}
int main(int argc, char* **argv){
long long x=0xaa55ff00aa55ff00;
printf ("num=%x result=%x\r\n",x,shiftleft(x,45));
printf ("num=%x result=%x\r\n",x,shiftright(x,45));
return 0;
}
0689初必者NGNG
>>687
腕立て何回やれば....

じゃなくてやっぱり inline で asm で作るのが正解でしょうか?
0690688NGNG
げ、バグだらけ。これでどだ。

#include <stdio.h>
#include <math.h>

long long shiftleft(long long i,long j){
return i*(long long)(pow(2.0,(double)j));
}
long long shiftright(long long i,long j){
return i/(long long)(pow(2.0,(double)j));
}
int main(int argc, char **argv){
long long x=0xaa55ff00aa55ff00;
printf ("num=%x result=%x\r\n",x,shiftleft(x,45));
printf ("num=%x result=%x\r\n",x,shiftright(x,45));
return 0;
}
0691初必者NGNG
遅そう。
0692デフォルトの名無しさんNGNG
見掛け上、べき乗計算と乗除になってるけど
コンパイラは、ちゃんとシフト演算にしてくれ
るのですか?
0693初必者NGNG
>>692
なりません。関数なんだから。

それと細かいことですが、printf内部は %Lx にしておかない
と64bit表示にならないかと。
0694デフォルトの名無しさんNGNG
>>692
そのような最適化はしてくれません。
pow()はこの場合2のべき乗の整数演算ですので64個の配列による
ルックアップテーブルで高速化できます。
他にもlongのシフト演算に分けて計算する方法もあります。
インラインasmもモチロン選択肢に入れてよいでしょう。
0695デフォルトの名無しさんNGNG
つまり、そう言う最適化はコンパイラには期待できない
ってことですね。ありがとうございました。
0696初必者NGNG
速度要求が厳しいので inline になりそうです。
やっぱ楽は出来ませんね。
0697shigeNGNG
こうやってPerlユーザが馬鹿にされて、コケにされて、侮辱されて、(当然のことだ)
顔を真っ赤にして耐えている姿を想像するだけで俺の気分は爽快になる。

Ruby万歳。俺にこんな快楽を与えてくれたRubyに幸いあれ。
0698デフォルトの名無しさんNGNG
とことん呆れた。Rubyユーザは板から出ていけ。
0699デフォルトの名無しさんNGNG
ローカルの配列の確保できる大きさの限界を知りたいのですが、どうしたらよい
でしょうか?
0700デフォルトの名無しさんNGNG
>>699
おそらくそのマシンの機械語命令のディスプレースメント値
の上限次第だろうが、ローカル配列はスタック上に取られる
ので、あんまりデカイの使うのは感心しない。

という書き方は不親切だろうか?
0701デフォルトの名無しさんNGNG
>>699
allocaで確保し続けてSEGV捕らえてサイズを計算
0702デフォルトの名無しさんNGNG
alloca で割り当てられるサイズはマシン依存するので、
増分(いや減分か)をちゃんとしらべてな。
というかアドレスを表示すればいいのか。

それと、大抵はSEGVまでやらんでも alloca が NULL 返
すはず。
0703701NGNG
>>702
allocaってきちんとNULL返すの?少なくともVC++の_allocaは
例外飛ばすって書いてあるよ。UNIX系の方は処理系依存でしょ

サイズも4KBずつとかで失敗するまで確保し続ければわかる
0704デフォルトの名無しさんNGNG
俺の若い頃はintは4bitだった。
0705 NGNG
.libファイルってなんですか?
0706 NGNG
.hファイルで関数作れると言っておきながら
.libはどうなるんだよぉん〜
0707違NGNG
>>704
つまり、アナタはもうすぐ米寿ってことですね?
0708デフォルトの名無しさんNGNG
質問。C言語の文法について。

externは「外部ファイルで定義されてるよ」という宣言。
グローバルスコープにあるstaticは「内部ファイルでのみ参照するよ」という宣言。

で、俺の認識は間違ってないでしょうか?
詳しい定義を知っている人は教えて下さい。

#どうでもいいがC言語の予約語の使い回しは何とかならないものか
0709デフォルトの名無しさんNGNG
>>708
間違ってないと思う。

予約語を使い回したいの?
0710708NGNG
>>709
レスサンクス。
>予約語を使い回したいの?
ではなくて、同じ予約語が複数の意味を持つのが嫌だ。
void func()と(void*)とか、今回のstaticとか。
0711デフォルトの名無しさんNGNG
>>708
C言語ではメモリも演算子も使い回しです
i = 10 * 10;
*p = &i;
とか
つまり、そーゆものだと割り切りましょう。
0712デフォルトの名無しさんNGNG
>>708
C++ではさらにstaticの意味が増えてるぞ。
0713デフォルトの名無しさんNGNG
予約語に振り回されるのが嫌ならlisp使いなさい
0714710NGNG
なにげにexternとか、ある用法を知らない人がいそうだ。
int i=3;
void func(){extern int i;printf("%d==3",i);}

>>712
クラスのstatic変数/関数、という意味?
他にもC++でstaticって拡張されたっけ
0715デフォルトの名無しさんNGNG
>>714
関数の中でexternを使うのは意見Cと互換性がありそうだけど、必ずextern "C++"
になってしまうんだよね。extern "C"とかやろうと思ってもエラーになってしまう。
0716714NGNG
>715
ごめん、詳しく教えて。
extern "C"って外部のアセンブラプログラムを
宣言するときの、「おまじない」程度にしか知らないので
0717デフォルトの名無しさんNGNG
>>716
extern "C"は見てのとおりリンケージをCの規則にするよ、ってことだべ.
なんで仕様書を参照せんのだ.
0718デフォルトの名無しさんNGNG
>>717
ばーか、スレタイトル見ろよ。氏ね。
0719714NGNG
おい殺すな(汗)

>>717
いや全然見ての通りじゃないと思うのですが。
まぁ自分で調べますけど、その説明でexternを
知らない人が解るはずがないと思います。
0720デフォルトの名無しさんNGNG
>>718は口が悪いと思うが、
externを知らない>>714は頭が悪いな。
0721デフォルトの名無しさんNGNG
>>718
仕様書を見た上での話じゃないのか?
まぬけだな。
0722デフォルトの名無しさんNGNG
連結リストをソートするのにいい方法ってありませんか?
ソートは一通りわかるんですが、連結リストだとなんか大変なんで。
0723デフォルトの名無しさんNGNG
>>722
マージソート
0724デフォルトの名無しさんNGNG
> 722

ケースによっては2分木にデータ構造を変更する。
ソートの必要がなくなる。
0725715NGNG
>>719
仕方ないので少しコメントするよ。
C++の外部リンケージはデフォルトではextern "C++"になる。このリンケージでは、
リンカに渡すことになるシンボルが、関数の引数情報を処理系依存の方法で関数名
に追加した形式になるのに対して、C言語との互換のためにあるextern "C"では、
そうした型情報がシンボルに反映されない。

関数内でextern宣言した場合、extern "言語"のような宣言をすることが許されな
いので、C++式の型情報を含んだシンボルしか参照することができない。
通常、extern "C"とextern "C++"の違いは関数に対するものだけど、処理系はオブジ
ェクト型に対しても、その型情報をシンボルに含めることができる。実際Visual C++
などではそうなっているような感じ。

つまり、extern "C++"以外のリンケージについては、必ず関数の外で宣言しないと
いけないということ。namespaceについても似た状況がある。
0726デフォルトの名無しさんNGNG
Cスレでなにいってんの、このひと?
0727725NGNG
>>726
Cで作成した成果物を有効利用するために必要なノウハウだよ。
0728デフォルトの名無しさんNGNG
Cスレでなにいってんの、このひと?
0729デフォルトの名無しさんNGNG
725 の内容はCスレだからこそ大切なことだと思う。
#何故かわからない人はシステムの include ファイルの中を見てみよ
#う。見ても「こんなのC++のためだろが!」とか言ってる奴はこ
#の世では既に必要とされない人間だ。

古巣のいごごちの良さに味をしめ、巣を飛び出せない弱虫カコワルイ。
目を覚ませ。
0730デフォルトの名無しさんNGNG
signed int の値 n を b ビット右シフトした
値を 0 に向かって丸める式を教えて下さい。
例えば、n = -1, b = 1 ans = 0

n >> b; じゃだめみたいです。
0731デフォルトの名無しさんNGNG
わかりづらいのでもうすこし。
1 ビット右シフトするということは 2 で割ることに近似するので
-1 / 2 = -0.5。 -0.5 は 0 に向かって丸めると 0。
答えは 0。
綺麗な式になるんでしょうか?うーん…
0732730NGNG
あ、でもこんなのはナシです。
return (signed int)( (float)n / (float)pow(2,b) );
0733フツーNGNG
これでいいかな?
return (n + (n < 0)) >> b;
0734デフォルトの名無しさんNGNG
>733
ありがとうございます。えっと…これでいいのかな。
ちょっと検算しています。(^^;
0735734NGNG
b=1のときはいいのですが b=0 や b=2 以上になったとき
ちょっと合わないみたいです。
n=-32767 b=2 ans = -32767/4= -8191.75= -8191
(n+(n<0))>>2=-8192
なかなか難しいです…。
0736デフォルトの名無しさんNGNG
n / (1 << b) じゃだめなの?
0737デフォルトの名無しさんNGNG
>>735
こんなんは、どうや?
return ( (n<0) ? ((signed int)-((unsigned int)-n>>b)) : (n>>b) ) ;
0738デフォルトの名無しさんNGNG
0に向かって丸める方法

 正なら単に右算術シフトだけすればいい

 負数なら 色々あると思う。
思いついたのは
  1)符号反転して処理した後符号反転する
if(n<0) return -(-n>>b); else n>>b;

  2) (1<<b)-1を加算してから右算術シフトする
retur ( n +( (1<<b) -1 )&(n>>32 ) )>>b;
0739デフォルトの名無しさんNGNG
>>715
externの使用方法がextern "C", extern "C++"しかない知らん厨房逝ってよし!

C++でも>>714の書き方は正当な書き方で、もちろん
int i=3;
int main(void) { extern int i; cout << i; return 0; }
と書いても正当だ。

また、ここでexternを省略し、
int i=3;
int main(void) { int i; cout << i; return 0; }
とすると動作が変わってしまう。

結論:715は知ったか厨房 なんか反論ある?
0740初必者NGNG
>>739
凄く恥ずかしいよ、君。あれリンケージタイプの話だぞ。
0741デフォルトの名無しさんNGNG
extern の仕組みがわかってない消防逝って良し!
と言われないように、謝るか、釈明するかしてくれ。
0742デフォルトの名無しさんNGNG
>>740
> あれリンケージタイプの話だぞ。
確かに>>725はリンケージタイプの話であり特にこちらも異存はないが、
C++ではexternはリンケージタイプの指定だけに使われる予約語ではないし、
Cではexternはリンケージタイプの指定に使われる予約語ではない。

ここまで言えば>>715は
> 凄く恥ずかしいよ、
ってゆーのがわかるだろ?
0743初必者NGNG
わからんな。
>>715 が言ってるのはローカルスコープではリンケージタイプが
選べんので賛否両論あるだろうと言う話で、別に>>714を否定して
いる訳ではない(思いっきりtypoってるので真意は測れないが)。
キーワードはローカルでの関数の extern 宣言だ。mangled-name
にならんように出来んって話だと思う。

まあ715が舌足らずなのは確かだが、プログラマならそれくらい
理解できんか?
0744デフォルトの名無しさんNGNG
C/C++習得度の問題というより日本語習得度の問題になってるね。
何故彼らは相手を攻撃するだけが目的の自分の幼稚な文章自体が、一番
厨房臭く見えてしまうことに気付かないんだろう?
0745デフォルトの名無しさんNGNG
>>744
真実よりも勝ち負けを優先するのは受験戦争を勝ち抜くための
鉄則です(w
0746739NGNG
>>743
> >>715 が言ってるのはローカルスコープではリンケージタイプが
> 選べんので賛否両論あるだろうと言う話で、別に>>714を否定して
> いる訳ではない
うん、否定はしていないが飛躍はしている
Cでは通常externとは外部参照を指定する予約語なのに
何故、C++のリンケージの指定というものを言い始めたのだろう。
話が飛躍しすぎ

この疑問の仮説として思い浮かんだのが
「externの使用方法がextern "C", extern "C++"しかない知らん厨房」

>>744
> 何故彼らは相手を攻撃するだけが目的の自分の幼稚な文章自体が、一番
> 厨房臭く見えてしまうことに気付かないんだろう?
同意。ところで、1バイト情報の無い書込みをageる奴も厨房臭くない?

# 厨房って自分の厨房臭さに気づかないから厨房でいられるんだね。
0747デフォルトの名無しさんNGNG
こりゃだめだ。全然わかってない。
相手にするな>初必者
0748デフォルトの名無しさんNGNG
>>746
リンクの仕組みも知らん厨房逝ってよし
0749初必者NGNG
>>747 了解。
0750744NGNG
>>746
なにが「同意」だ。あほか。おまえのこと言ったんだよ。
0751739NGNG
>>748,他以下の疑問に答えてくれ

int foo(void) { return 1; }
int main(void) { extern int foo; cout << i; return 0; }
上記の場合>>725の理由により駄目だろう。が、
int i = 3;
int main(void) { extern int i; cout << i; return 0; }
の場合、extern宣言したのは関数でもないし、構造体でもない。
それでも駄目なのか?その場合、何故駄目なのか?

>>750
> あほか。おまえのこと言ったんだよ。
何故>>750は相手を攻撃するだけが目的の幼稚な文章をageるんだい?
やっぱりオヤジ臭と一緒で自分の厨房臭って解らないみたいだね。
0752学生NGNG
ちょっと話がそれちゃうけどいいですか?
CマガにC++入門講座って言うアセンブラのコードも
眺めながら学んでいこうって感じで連載やってるんですが、
このアセンブラのコードを自分で見たいときはどうやって見るんですか?

コンパイラはbccしか持ってないです。
0753デフォルトの名無しさんNGNG
マニュアル読め.
どうせこぴ物で持ってねーんだろ.
0754735NGNG
>>736
単純な割算なので可能なら除算は…
>>737-738
-(-n>>b) は INT_MIN あたりの挙動が難しいのでキャストが
必要になりそうです。分岐はちょっとネックになるかもしれないです。
キャストや(1<<b)-1をあらかじめ加算するのはテクニカルですよね。
これ以上高速な方法は…ないですね、たぶん。(^^;)
脳に汗かきました。(^^;) ありがとうございます。
0755デフォルトの名無しさんNGNG
>>753
つか、フリーの bcc の話でしょ?

>>752
-S

つーか、引数無しで起動すると option の説明でるやん。
0756初必者NGNG
>>752
bcc についてるのかどうか知らないんだけどデバッカが
あればそれで動作を追っかけると非常に勉強になります。
良かったらお試しあれ。
0757デフォルトの名無しさんNGNG
ちなみに何に使うの?ホントにINT_MINとかMAXも必要なの?
0758学生NGNG
>>755 >>756
ありがとー。出来たよー。

それと、4月号のこの連載のFig.1っておかしくないんでしょうか。
0759デフォルトの名無しさんNGNG
どんな絵?どっかに上げてよ.
0760デフォルトの名無しさんNGNG
>>751
int i = 3;
int main(void) { extern "C" int i; cout << i; return 0; }
って書けたらいーねってことじゃね?

>上記の場合>>725の理由により駄目だろう。が、
へ?
0761学生NGNG
int foo;
int bar;

これをgccでC++としてコンパイルすると
上の方省略
.globl foo
.bss
.align 4
.type foo,@object
.size foo,4
foo:
.zero 4
.globl bar
.type bar,@object
.size bar,1

どこがおかしいと思ったかは、一番下はsize bar,4じゃないの?かです。
アセンブラは全く分からないので.bss .align .zero あたりも
怪しい気がするけど、こんなもんかな程度に気に止めてます。
0762739NGNG
>>760
> int main(void) { extern "C" int i; cout << i; return 0; }
> って書けたらいーねってことじゃね?
もし可能ならば
int main(void) { extern "C"{ int i; } cout << i; return 0; }
だろうな。
C/C++では関数内で関数が定義できないんで別に関数内でリンケージ指定の
externはできなくとも違和感は感じない。
0763初必者NGNG
>>760
腹立ったのだろうがエサをやるな。
762を見れば程度はわかるだろう。
0764760NGNG
>>762
extern "C"とかってのが、以前のexternの拡張ってのは理解してる?

例えば、
 extern void f();
ってのは、
 extern {
  void f();
 }
と等価。書き方のスタイルの問題といわれればそれまでだけども。

Cで言う
 extern [型宣言文];
ってのがC++では、
 extern "言語りてらる" [型宣言文];
って書けるようになったの。
つまり、externでいままでどおり外部リンケージを指定すると共に、
"C"などを指定することで名前解体をしないことをコンパイラに教えてるの。
だから、もし可能ならextern "C" int i;でへーきだと思うけろも。
この場合の{}は複文を一度にextern宣言する意味しかないよ。

例えばC++での
 extern "C" int i;
は、Cで
 extern int i;
と書いた場合と同様のリンケージ動作を期待して書くの。
たぶん、この辺でわからなくなってるんだと思うけど。。。
0765デフォルトの名無しさんNGNG
>>763
だって、かわいそうで見てられないのよ、なんか(笑
0766初必者NGNG
>760
やめとけ。何度かやったが、その度に自分に都合の良いように
意見を変えるタイプだから、また君の発言から得た情報で頓珍
漢な反論をしてくるだけだぞ。
0767デフォルトの名無しさんNGNG
>>766
むぅ、そうかも。。。(-_-;;
0768760NGNG
ちなみに、
>"C"などを指定することで名前解体をしないことをコンパイラに教えてるの。
って書いてるけど、
もちろん"C++"って書くと名前解体されるよ。突っ込まないでね(++
0769初必者NGNG
>>761
余計なことでゴチャゴチャしちゃってゴメンね。

.size bar 1 がメモリ確保のディレクティブなのかな?
なら確かに変ですね。.align に付いてはプロセッサが
大きなデータを読むときの境界を指定するものです。
データ・アラインメントとかのキーワードで調べてみて
下さい。
0770デフォルトの名無しさんNGNG
Ada、BCPL、C、C++の次はDelphiか…
0771デフォルトの名無しさんNGNG
>>770
バカ
(ちょっとワラタけど)
0772sageNGNG
だからあんたたち、Cスレで何書いてるの?

つっこみどころ多すぎて笑える
0773デフォルトの名無しさんNGNG
どうも 739 は理論で勝てなくなると必死になってこの手を使うようだ。
そういえば上のほうにもあったな。
0774sageNGNG
739じゃないよ。
でも上の人たち739と同じくらい勘違いしてるって気づかない?
0775デフォルトの名無しさんNGNG
気付かないからちゃんとどこが勘違いか書けよ。
場合によっては認めるから。
0776sageNGNG
C++の話題はスレ違いだっていってるんだけどな。
いいや、今からここはC++スレだ。
0777デフォルトの名無しさんNGNG
>>776
あのさあ、ちゃんとこのスレ読んでる?適当にこの辺だけ読んでるのか?
0778sageNGNG
ちゃんと1からこのスレ読んでる?

いや、でもいいよ。C++スレだから。
0779デフォルトの名無しさんNGNG
やっぱおまえ739だろ。
0780デフォルトの名無しさんNGNG
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| extern "C"とextern "C++"はリンク時に影響するからな
\__  _________________
━━━∨━━━━━━━━━━━━━

     _Mona
     Mona@ItteyoshiChubodomo

  iii■∧  /
━ (,,゚Д゚) / ━━━━━ ∧∧━━    ∧∧
   |   つ ∇      ( ゚Д゚)     (゚Д゚; )
   |  |┌─┐   /⊂   ヽ    /⊂  ヽ
 〜|  ||□|  √ ̄ (___ノ〜 √ ̄ (___ノ〜
   ∪∪ |   |  ||   ━┳┛  ||   ━┳┛
 ̄ ̄ ̄ ̄|   | ====∧==========
    / ̄ ̄ ̄ ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    | Cスレでなにいってんの、この人
    \____           ∧
         / ̄ ̄ ̄ ̄ ̄ ̄ ̄ . ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
         |  引っ込みつかなくなってんだよ、きっと
         \_______________________
0781初必者NGNG
はぁ。。。AA出した時点で負けを認めたようなものだよ。
0782デフォルトの名無しさんNGNG
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| やっぱおまえ739だろ
\__  _________________
━━━∨━━━━━━━━━━━━━

     _Mona
     Mona@ItteyoshiChubodomo

  iii■∧  /
━ (,,゚Д゚) / ━━━━━ ∧∧━━    ∧∧
   |   つ ∇      ( ゚Д゚)     (゚Д゚; )
   |  |┌─┐   /⊂   ヽ    /⊂  ヽ
 〜|  ||□|  √ ̄ (___ノ〜 √ ̄ (___ノ〜
   ∪∪ |   |  ||   ━┳┛  ||   ━┳┛
 ̄ ̄ ̄ ̄|   | ====∧==========
    / ̄ ̄ ̄ ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    | まるで野獣だよ
    \____           ∧
         / ̄ ̄ ̄ ̄ ̄ ̄ ̄ . ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
         |  氷魚が休みだからなあ。今日は。
         \_______________________
0783デフォルトの名無しさんNGNG
あら、図星でしたか。これは失礼。
0784デフォルトの名無しさんNGNG
http://www.cgigame.com/bbs/raiv.html
0785デフォルトの名無しさんNGNG
確かにここはCスレだけど、
間違ってることほったらかしたままでいいわけがない。
いろんな人が読むのよ。
まぁ、スレ移動して続けるのも手だけれども、もう終わってるけど(笑)

モナー貼ってイヤミ言うくらいなら、だまってろ。スペースが無駄。
0786学生NGNG
>>769
親切に答えてくれてありがとー。
スレ違いみたいだしまた来ますね。
0787デフォルトの名無しさんNGNG
分類学的にいえばC++は、Cから派生したものでCであるといえるが、
CはC++であるとはいえない。
よってCに関わるC++の話題は良し。
0788739NGNG
>>714, >>初必者
> extern "C"とかってのが、以前のexternの拡張ってのは理解してる?
知らなかった...。

> externの使用方法がextern "C", extern "C++"しかない知らん厨房逝ってよし!
> C++ではexternはリンケージタイプの指定だけに使われる予約語ではないし、
> Cではexternはリンケージタイプの指定に使われる予約語ではない。
この発言は撤回する。
また、自分が無知なのを気づかず>>714を厨房呼ばわりしたことを謝罪する。m(_ _)m スイマセン
あと、初必者に無礼な口を利いていたことを謝罪する。m(_ _)m モウシマセン
あっ、>>750には無礼な口を利くのは当然なので謝らない。

あと、C++の話題はスレ違いだっていってる奴とかAA貼り付けてる奴と
同一人物だと思われているようだが人違いだ。

で、これからの話題は議論ではない、純粋な質問。
(続く)
0789デフォルトの名無しさんNGNG
>>788
> あっ、>>750には無礼な口を利くのは当然なので謝らない。

君さ、そんなことだから何時までたっても”厨房”なんて呼ばれるんだよ。
文体からしてかなり若そうだけど、君が言われるのは「精神が厨房」なんだ。

純粋な質問などと能天気なことしようと思ってるらしいけどさ、態度を
改めるのがさきじゃないか?
0790739NGNG
>>788
> 714は>>715の誤り

>>789
> 態度を改めるのがさきじゃないか?
俺が先に無礼な口を利いた人には謝罪し、態度を改めた(と自分では思っている)
煽り目的に無礼な口を利いた奴には謝る必要がない(と自分では思っている)

715や初必者には謝る必要があると思ったが、750には謝る必要性が感じられない。
0791739NGNG
やはり、質問しようとしていろいろ調べてみたが、
C++全体に関する自分の知識不足を痛感した。

もう少し調べる時間が欲しいので今回のやりとりはこれで終わりにしたい。

>>789
750について謝る必要があるかどうか、
まだ続けたいんだったらその話題は別スレッドにしてくれ。
多分、スレ違いなので...。
0792デフォルトの名無しさんNGNG
>>790
> 715や初必者には謝る必要があると思ったが、750には謝る必要性が感じられない。

だから餓鬼だって言われるんだ。
そう感じられないんだったら口に出すな(これくらいのことも分からんのか)。
0793750NGNG
>>792
おいおい。あんたももうやめんさい。彼も少しは成長したんだから
いいじゃん。
0794デフォルトの名無しさんNGNG
>>793
情けないねぇ。
俺が739をやりこめようとしてるとでも思ったのか?
0795デフォルトの名無しさんNGNG
>>794
新しく作ってみた、こっちでやってくれ
http://piza.2ch.net/test/read.cgi?bbs=tech&key=994396298
0796デフォルトの名無しさんNGNG
俺は「技術板の利用方法」などという大それた議論をやりたいわけじゃない。

表面上反省したかに見える(こう言われてもしかたないのだぞ)739のような
書き込みを放っておくべきではないと思ったから、忠告しただけだ。

トリガーとなる発言さえ少なくなればよいのだ。
0797デフォルトの名無しさんNGNG
おいおい、ガキの喧嘩はよそでやってくれ。

技術問題で、お互いの思想をぶつけ合った喧嘩は
たとえその思想が幼稚なものであってもそれなりに面白いけど、
単なる口喧嘩はここでやる必要は無し。
0798デフォルトの名無しさんNGNG
ギャハハハハ、煽りうまいね、チミ。
0799デフォルトの名無しさんNGNG
自作自演
0800C初心者NGNG
248,663で質問した者です。みなさんありがとうございました。
0801C初心者その2NGNG
Win2000のDOS窓用ソフトを動かすのに
バックスラッシュ、|、/、を同じ場所で連続表示させて、くるくる回ってるみたいな
ものを表示してみたいのですが、どんな方法があり得ますか?
0802デフォルトの名無しさんNGNG
>>801
ちょっとウェイトした後バックスペースで消して表示、を繰り返す
0803デフォルトの名無しさんNGNG
>>801
サンプル

#include <stdio.h>
int main(int argc, char** argv){
long i,j;
char c[4]={'|','/','-','\\'};
for(i=0;1;printf("%c\b",c[i=(i++)%4]))for(j=0;j<10000000;j++);
return 0;
}
0804デフォルトの名無しさんNGNG
>>803
えーん
最適化最強にしたら空ループが消えちゃったよ〜
0805デフォルトの名無しさんNGNG
>>803
はんぱじゃないくらいバグバグだね...
#include <stdio.h>

int main()
{
for (int i = 0; ; i++) {
putchar("|/-\\"[i % 4]);
for (volatile int j = 0; j < 10000000; j++)
;
putchar('\b');
fflush(stdout);
}
}
0806デフォルトの名無しさんNGNG
あぁ、fflush()と\b逆だな...
0807デフォルトの名無しさんNGNG
/**/#include <stdio.h>
/**/
/**/int main()
/**/{
/**/ for (int i = 0; ; i++) {
/**/ putchar("|/-\\"[i % 4]);
/**/ fflush(stdout);
/**/ for (volatile int j = 0; j < 10000000; j++)
/**/ ;
/**/ putchar('\b');
/**/ }
/**/}
0808デフォルトの名無しさんNGNG
くそっ、タコのこと胃炎な…鬱
/**/#include <stdio.h>
/**/
/**/int main()
/**/{
/**/ for (int i = 0; ; i++) {
/**/ putchar("|/-\\"[i % 4]);
/**/ fflush(stdout);
/**/ for (volatile int j = 0; j < 10000000; j++)
/**/ ;
/**/ putchar('\b');
/**/ }
/**/}
0809デフォルトの名無しさんNGNG
/**/#include <stdio.h>
/**/
/**/int main()
/**/{
/**/ for (int i = 0; ; i++) {
/**/ putchar("|/-\\"[i % 4]);
/**/ fflush(stdout);
/**/ for (volatile int j = 0; j < 10000000; j++)
/**/ ;
/**/ putchar('\b');
/**/ }
/**/}
0810デフォルトの名無しさんNGNG
a b
<pre>
a b
</pre>
0811デフォルトの名無しさんNGNG
>>809
forの中に変数宣言をするのは止めて・・・
0812デフォルトの名無しさんNGNG
ヤダ
0813デフォルトの名無しさんNGNG
>>809
intが16bitで無限ループになると見た。
0814デフォルトの名無しさんNGNG
>>813
int main()で書くなら戻り値を書くべき。
ワーニングが出るぞ。
0815デフォルトの名無しさんNGNG
失礼。814は809へ。
0816デフォルトの名無しさんNGNG
>>813
そんな環境は存在しない.
0817デフォルトの名無しさんNGNG
>>814
カタカナで書くならウォーニングだぞ…
CDワークマンでもいいのか?
まったく恥ずかしいな.
プレイステーションアワードも同じくらい恥ずかしいが.
0818デフォルトの名無しさんNGNG
>>817
ワーニングであってるよ
0819デフォルトの名無しさんNGNG
>>817
命名、古寺の小僧。
0820デフォルトの名無しさんNGNG
>>819
どういう意味?C言語系?
0821デフォルトの名無しさんNGNG
>>817
いまだにそんなこと言ってる君のほうが100倍恥ずかしいんだけど
0822819NGNG
>>820
現代訳を探したら、小寺の小僧だった。
鬱だ…。

http://www.d1.dion.ne.jp/~y_kiuchi/setuwa/konj28-8.htm
0823801NGNG
801です。
DOSプログラミングな本を見たら座標が云々で、点を打つ関数がどーのこーのと書いてあってサパーリ
でしたが、こんな方法で実現できたんですね。
そもそもなんでこんなことを思ったかといえば、Linuxの起動時にスキャンディスク
の様なのがはじまって、パーセント表示と共に、この棒がくるくる回っててどうやって
ルンダろうと思ったのです。
コードの量から些細なことみたいですが感動しました。
0824デフォルトの名無しさんNGNG
>>817は、ウォークマンをwarkmanと思っている厨房。
0825デフォルトの名無しさんNGNG
>>822
あぁ、814もその程度のレベルがあればいんだけどね…
0826デフォルトの名無しさんNGNG
>>824
warkならワークでいーだろがボケ.辞書くらい轢いてからにしろ.
0827初級者NGNG
あの、上の方にあったんですが、
i = (i++) % 4
ってiの値は変わりませんよね?
それとも仕様上不貞なのでしょうか?
0828デフォルトの名無しさんNGNG
(1) % 4 = 1
(2) % 4 = 2
(3) % 4 = 3
(4) % 4 = 0
(1) % 4 = 1
:
:
0829デフォルトの名無しさんNGNG
>>828
そうはならない っていってるじゃん
0830デフォルトの名無しさんNGNG
>>826
warkなんて単語あるのか?
0831sageNGNG
>>827
仕様上は不定なので、
なにが起こるかわかりません。

んなわけはないんだけど
たとえばそのコードでプログラムが止まっちゃうようなコンパイラがあったとしても
よいことになってます。
0832sageNGNG
>>830
だから辞書くらい引いてからにしろって.
ホントにバカ丸出しだな.
0833デフォルトの名無しさんNGNG
>>831
不定は不定だが、それはありえんだろ.
0834デフォルトの名無しさんNGNG
>>809
iがオーバーフローして負数になった時表示が不正になるとみた。
0835中級車NGNG
>>834
やってから言うなって.
0836sageNGNG
http://www.catnet.ne.jp/kouno/c_faq/c11.html#35
0837デフォルトの名無しさんNGNG
>>826
ウォークマンはworkmanだろ(w
意味わかってんのか? ボーケ
0838デフォルトの名無しさんNGNG
>>837

ボケがいまいち。2点
0839デフォルトの名無しさんNGNG
warsman の方が強いと思われ
0840デフォルトの名無しさんNGNG
>>827
アセンブラレベルまで考えれる人間には何の問題もないのは一目
瞭然。言語論で遊んでるトイプログラマ達は勝手にやってて、っ
て感じ。
でも自分はそーゆーコードは書かない、ってとこだな。
0841デフォルトの名無しさんNGNG
>>sage
warkなんて単語うちの辞書には載ってないぞ。
だから意味を教えてくれ。
0842初級者NGNG
>>836
とりあえずANSI C的には未定義のようですね。
バカなアセンブラ上がりのまぬけなコードにぶつからないように
祈るバカりですね…
0843デフォルトの名無しさんNGNG
いつの間にか目的と手段が入れ替わるバカが多いな。
0844ふぇNGNG
ANSIバカはCの歴史を思い出せ
0845初級者NGNG
>>844
う〜ん、複数のコンパイラでマトモに動くものを作るには
ANSI等の標準規格に依存するしかないと思うのですが?
どんな歴史ですか?
0846デフォルトの名無しさんNGNG
>>827
1行にコードを集積する事が良い訳ではない。
0847デフォルトの名無しさんNGNG
???
それを言うにはちと例題が悪いのでは?
0848デフォルトの名無しさんNGNG
>>840
そういうコードは書かないという根拠が、
ANSI/ISO規格なんじゃないの?
0849デフォルトの名無しさんNGNG
>>805-からこっち書いてある事がでたらめばかりじゃないの?
24時間常駐している奴が約1名居るようだしな。
ANSIの規格がどーたらと言った難しい話の前に、早くwarkの意味を書けよ。
0850デフォルトの名無しさんNGNG
>>849
相変わらずバカ丸出しだな。
0851sageNGNG
なんでどうでもいい揚げ足取りするかな。
別に規格に関することは難しくもなんともないよ。

http://www.google.com/search?sourceid=navclient&q=warkman
0852デフォルトの名無しさんNGNG
>>849
http://www.google.com/search?q=wark
意外といろいろあるようです
0853デフォルトの名無しさんNGNG
ttp://www.geocities.co.jp/HiTeens-Penguin/5233/profile.html

MD warkmanも実際にあるようです。
0854rmsNGNG
いろんな環境で動くコードを書きたければ、
GNU autoconfをヨロシク。
http://www.gnu.org/software/autoconf/autoconf.html
0855デフォルトの名無しさんNGNG
>>854
ピンぼけだねぇ。
それとも最近のautoconfはi=i++をどこでも同じに動くことを保証して
くれんのか?
0856デフォルトの名無しさんNGNG
>>855
i=i++;
と
i++;
って、たいていの場合は同じだよな。
でも、そんなの書くな。
0857デフォルトの名無しさんNGNG
i++,i=i
と同じ場合もあるし、そうでない場合もあるんだってば
0858デフォルトの名無しさんNGNG
>>851
>>804辺りからあげ足の取り合いスレになっているから自然な
流れなのでは?

>>852
Warkmanという人名はあるみたいだね。
でもwalkやworkと間違えているお間抜けな人が凄くHITするのは
気のせい?

>>853
良く判らないけれど、そのサイトの高校生はSONYのwalkmanを
warkmanと間違ってるんじゃないの?
SONYのサイトで検索してもwarkmanはヒットしないし。
まぁバッタもので有るかも知れないね。
0859デフォルトの名無しさんNGNG
>>855 >>857
そんなコード書かなきゃいいだろ
i=i++の結果を保証して欲しけりゃJavaに逝け
0860C初心者NGNG

auto型char配列

 char str[10];

があるとします。この時、以下のコードは全て同じ意味(結果)になりますか?

A: memset( str, 0x00, strlen(str));
B: memset( str, '\0', strlen(str));
C: memset( str, 0, strlen(str));
D: str[0] = '\0';
E: str[0] = 0;
F: str[0] = NULL;
G: strcpy( str, "");

要は初期化です。
また、AからGまでどれも同じ結果が得られる場合、一般的に
どれが良いコードでしょうか。
それとも、auto型は初期化しないのが普通ですか?
初心者な質問ですみません。よろしくお願いします。
0861デフォルトの名無しさんNGNG
>>860
A-Cはそもそも初期化されていない配列に対する strlenが未定義なので
同じかどうか以前にダメ。

D-Gはおなじ。

どっちかっつーと Dがまともな書き方。
E, FはUNIX系に多いタイプ量を減らした書き方。
Gはたぶん馬鹿にされるからやめとけ。
0862デフォルトの名無しさんNGNG
>>860
これに答えたらまたあげあし取りする気?
最近のこのスレのパターンだしね。
マジに知りたいのなら初心者スレで聞く事をお勧めする。
0863デフォルトの名無しさんNGNG
>>860
結果は同じには、ならない。
使う時は、どんな初期化が必要化考えてから、
好きに初期化すれば良い。
0864デフォルトの名無しさんNGNG
Gはなんで馬鹿にされるんですか?
0865デフォルトの名無しさんNGNG
Fもダメだろ。
0866デフォルトの名無しさんNGNG
>>860
strlenじゃなくsizeofならば、A−Cの中ではBが一番まともかな。
全クリアでね。
DはA−Cとはまた違う意味で初期化。
Fは厳密に言うと間違い。
Gは無駄。
0867デフォルトの名無しさんNGNG
>>860
結果は同じになる。
行頭に全角文字があるから全てコンパイルエラー。
エラーメッセージが違うけどな。
0868デフォルトの名無しさんNGNG
Gは効率は悪いけど読みやすい。俺は良く使う。
0869デフォルトの名無しさんNGNG
>>865
Fは、厳密にはいいみたい。
でも、かっこわるいから、やめといた方がいいね。
0870C初心者NGNG
すばやい回答ありがとうございます。

>>861
>A-Cはそもそも初期化されていない配列に対する strlenが未定義なので
>同じかどうか以前にダメ。

つまり、変数に何か入れる前には strlen は使えない、と言う事でしょうか?
strlen の戻り値が10になる保証は無い、という意味ですか?

Fはまれに NULL が ((void *)0) と定義されている場合があるようですが……。
Gは他人のコードに書いてあった記述なのですが、
見た時ちょっと違和感があったので。
やはりDが無難でしょうか。

>>862
そのような気は毛頭ありません。本当に初心者です。以前にもこのスレで
お世話になりました。
0871デフォルトの名無しさんNGNG
860は何処に行った?
0872デフォルトの名無しさんNGNG
そゆこと。
0873デフォルトの名無しさんNGNG
862だが申し訳ない。疑心はよくないね。

strを文字列として使う限りGは不正じゃないですよ。
Fは#define NULL -1である処理系も有り得ますからNGです。
866の言うように全初期化が紛れがなくて良いと思います。
0874デフォルトの名無しさんNGNG
>>870
>つまり、変数に何か入れる前には strlen は使えない、と言う事でしょうか?
strlenが、どのような関数なのか考えて下さい。
>Fはまれに NULL が ((void *)0) と定義されている場合があるようですが……。
それを知っているなら、使うべきではない。
>Gは他人のコードに書いてあった記述なのですが、
>見た時ちょっと違和感があったので。
問題はない。ただ、そんな事で関数を使うべきでもない。
>やはりDが無難でしょうか。
Dか、strlen(str)をsizeof(str)に換えたB。
使う時は、どちらが必要なのかを考えて。
0875デフォルトの名無しさんNGNG
揚げ足取るつもりじゃないけど、
NULL != 0な処理系ってどんなの?
0876デフォルトの名無しさんNGNG
>>873
>Fは#define NULL -1である処理系も有り得ますからNGです。
その、処理系がNGだと思うのは俺だけ?
0877デフォルトの名無しさんNGNG
処理系に依存せずNULLポインタは常に0だよね。
その上で NULL という名前のマクロを 0 以外に定義する処理系は
NGだとおもう
0878デフォルトの名無しさんNGNG
>>875
0番地付近にレジスタをアサインしている処理系は保護のため
NULL=-1として逃げている場合が多いようです。
0879デフォルトの名無しさんNGNG
NULLポインタの実体(アドレス値)が0でなくてもいいのはしってたけど
実際の定義が0でないのは初耳。
thx
0880デフォルトの名無しさんNGNG
Gの場合は""という文字列が確保され、その文字列がstrにコピー
されると思うのですが、確保された""はどうなるのでしょうか?
0881デフォルトの名無しさんNGNG
>>878
それは、コンパイル後のコードの問題であって、
Cの中で、NULLポインタが0でないものは、NGだと思う。
0882デフォルトの名無しさんNGNG
>>877
整数として評価されたときに0になるだけだよ。
0883C初心者NGNG
>>873
ありがとうございます。
結論としては、

memset( str, 0x00, sizeof(str));

これがベストということでOKですか?
「全初期化が紛れがなくて良い」とおっしゃるのは、str[0]からstr[9]までの
10バイトがすべて0になるから、先頭だけ0にするより安全、と
いうことですよね。
0884デフォルトの名無しさんNGNG
プログラムの静的領域に "" の形で置かれます。
動的に確保されるわけじゃなくて、プログラムのデータ領域をロードしたときに
すでにそこにある、と思ってください。
0885デフォルトの名無しさんNGNG
>>880
'\0'
0886デフォルトの名無しさんNGNG
正数として評価というのが果てしなく謎なんだけど、
ポインタが 0 と等しいかどうか比較する
ポインタが 0 と等しくないことを比較する
ポインタに 0 を代入する
だけ、Cは特別扱いしてるだけだよ?

中に何の数字が入っているかどうかは、処理系依存。

でも、上に上げた比較の都合で、不定ポインタをNULLという
名前で定義してるわけだから、
0以外の値になってるってのは、その処理系がおかしいと思うなあ。

ダメプログラマが勝手に定義した値じゃなくて?
0887デフォルトの名無しさんNGNG
>>883
個人的には、「0x00」ではなく、「'\0'」の方が良いと思う…。
ついでに、「0x00」を使うなら、「0」と等価なので、
他の定数を使ってるなら、それらと合わせた方が、見やすいかも…。
0888デフォルトの名無しさんNGNG
おもしろいからマターリ論議しようね。
0889C初心者NGNG
訂正します。

memset( str, '\0', sizeof(str));

これがベストのようですね。
皆さん、ありがとうございました。

>888
とても勉強になるので、マターリしたいのはやまやまなのですが、
眠くなってまいりました……。
0890デフォルトの名無しさんNGNG
returnで帰ってくる値を日本語で表す場合、
ポピュラーなのは「返り値」「戻り値」「リターン値」のどれですか。
上にない他の言い方でもOKですので、教えて下さい。
0891デフォルトの名無しさんNGNG
返り血
戻り血
痢痰血
0892デフォルトの名無しさんNGNG
(・∀・)血でソースを検索するとイパーイ出てくるよ!
0893デフォルトの名無しさんNGNG
>>890
どれでもいいんでないの?
あまり一般的ではないけど「関数値」という言い方もあるね。
0894デフォルトの名無しさんNGNG
>>891
全くつまらんな.0点.

>>890
かえりちだな.
0895デフォルトの名無しさんNGNG
>>890
復帰値
0896890NGNG
>>891-895
こうやってみると、呼び方は沢山あるようですが、
ポピュラーな呼び方は、ないようですね。
これからは、周りに合わせて適当に呼ぶようにします。(日本人的考え)
どうもありがとうございました。
0897デフォルトの名無しさんNGNG
>>896
まぁその3つがその順でポピュラーじゃないか?
それ以外は業界の変人だ!
0898デフォルトの名無しさんNGNG
業界の変人は、世の中では普通の人間?
0899デフォルトの名無しさんNGNG
>>898
いいえ。もっと変人です。さらにその中の変人が天才と呼ばれます。
0900デフォルトの名無しさんNGNG
漏れの上司はリータンヴァリュウといいます。
聞こえるたびに思考が途切れて困ります。
0901デフォルトの名無しさんNGNG
>>900
リターン値よりはマシと思われ.
0902デフォルトの名無しさんNGNG
>>890
もどりね
0903デフォルトの名無しさんNGNG
クイックソートを作るって課題がでました。ちょっとわからないので
皆さんお願いします。
さー、みんなで考えよー
0904デフォルトの名無しさんNGNG
>>903
次スレッドに持ち越しだな。
新スレ立ててくれたら考えてあげるよ
0905デフォルトの名無しさんNGNG
>>849
英辞郎 on the Webにはエントリーがありました。発音は不明。
http://www.alc.co.jp/
wark
【名】 痛み
【自動】 痛む

アメリカのOn line dictionaryのサイトをいくつかわまってみましたが、
エントリーのあるdictionaryは見つからず。

ただ、大物のOxfordが会員制(無料?)のため調べることができず。
0906デフォルトの名無しさんNGNG
質問があるのですが
4(1-1/3+1/5-1/7+・・・・・・・)
を求めるプログラムで()の中を
つくろうとしたのですが

#include<stdio.h>

int i;
double a,b;

main()
{
a=1;
b=1;
for (i=1;i<100;i++){
b = b+2;
a = a + 1/b * pow(-1,i-1);
}
printf("a= %d",a);
}

じゃうまくいきいません。
どこがいけないのでしょうか?
0907デフォルトの名無しさんNGNG
>>906
powなんてつかうな
0908デフォルトの名無しさんNGNG
じゃあ何をつかえばいいんですか??
0909デフォルトの名無しさんNGNG
>>908
階乗なんてどこにあるの?
0910デフォルトの名無しさんNGNG
項ごとに符号がかわるとこがよくわかんなくて・・・・
0911デフォルトの名無しさんNGNG
(i%2)*2-1
0912デフォルトの名無しさんNGNG
i&1?1:-1
0913デフォルトの名無しさんNGNG
powのかわりに(i%2)*2-1でいいんですか?
超初心者ですいません。
0914中途半端くんNGNG
>>910
動くかな?

double a=0,b,f=1;
for(b=1;b<200;b=b+2)
{
 a=a+1/b*f;
 f=-f;
}
a=a*4;
printf("a=%f\n",a);
0915デフォルトの名無しさんNGNG
あー、どういう仕組みか解らんのなら使わん方が良いよ

c=1 と置いてループ中に c=c*-1 するも良し
偶数項と奇数項でループをわけるでも良し
0916デフォルトの名無しさんNGNG
a=0,b=1;
for(i=1;i<100;i++){
 a=a+1/b-1/(b+2);
 b=b+4;
}
とかね
0917デフォルトの名無しさんNGNG
age
0918デフォルトの名無しさんNGNG
偶数か奇数の判定をしたいのですがどのような方法がありますか?
2で割ったあまりを調べる以外に。
0919中途半端くんNGNG
>>918
最下位ビットとか?
0920918NGNG
>>919
大量に調べる場合はそっちの方が早いんでしょうか?
0921デフォルトの名無しさんNGNG
他になんか手あるの?
0922中途半端くんNGNG
>>920
つまり、 if(a%2) と if(a&1) とどっちが速いか?
0923sageNGNG
>>922
自分で計ってみなさい
0924中途半端くんNGNG
>>923
オレが測るの? たぶん a&1 の方が速い?
0925sageNGNG
>>924
ごめん、誤爆。

俺もbit演算だと思うけど、結局どっちも同じになる環境ってあるかもね。
実際にやって、はかって、納得してみるのがいいよ>>920
0926ひよこNGNG
ふと疑問に思ったので質問させていただきます。
関数を作る時、 sample(int a, int b); のように
引数を作ると思うのですが
printf(); 関数などは引数が使用者によっていくらでも増やすことが
できますよね?
このような関数はどうしたら作れるのでしょうか
0927デフォルトの名無しさんNGNG
...
だっけ?
0928中途半端くんNGNG
>>926
K&R本の可変引数リストの項を読めばいいんじゃない?
0929sageNGNG
#include <stdarg.h>

int monaprintf(char *p, ...)
{
int rc;
va_list ap;
va_start(ap, p);
rc = vprintf(fmt, p);
va_end(ap);
return rc;
}

int main()
{

}
0930918NGNG
ありがとうございました。
計測してみます。
0931デフォルトの名無しさんNGNG
int main()
{
int i;
double data[10];

for(i = 0;i < 10;i++) {
printf("%d番目の数字を入力してください : ",i+1);
scanf("%f",&data[i]);
}
printf("\n入力されたデータは以下になります。\n");
for(i = 0;i < 10;i++)
printf("%f\n",data[i]);
printf("\n");

return 0;
}
実行して数字を入力すると、変な数字が表示されるのですが
なにが悪いのでしょうか?
0932デフォルトの名無しさんNGNG
どっか悪いところあるか?チキショウ!

#include <stdio.h>

#define MAX_NUM_DATA 100
#define MAX_NUM_HIST 10
#define FILENAME "prog8_d.txt"

int read_data( char *filename, int *data, int N);
void print_hist( int n );


main(){
int data[MAX_NUM_DATA];
int hist[MAX_NUM_HIST];
int n;
int i;
int idx;

n = read_data( FILENAME, data, MAX_NUM_DATA );
for( i=0 ; i<10 ; i++ ){
hist[i]=0;
}

for( i=0 ; i<n ; i++ ){
idx=data[i]/10;
if(idx==10)idx=9;
hist[idx]=hist[idx]+1;
}


for( i=0 ; i<MAX_NUM_HIST ; i++ ){
print_hist(hist[i]);
}
}


int read_data( char *filename, int *data, int max_data ){
FILE *fp;
int n;
int d;

if( ! (fp=fopen(filename, "rb")) ){
fprintf(stderr,"could not open file %s\n", filename);
return(-1);
}
n = 0;
while( n<max_data && fscanf(fp,"%d",&d)==1 )
data[n++] = d;

return(n);
}


void print_hist( int n ){
int i;
for( i=0 ; i<n ; i++ )
putchar('*');
putchar('\n');
}
0933デフォルトの名無しさんNGNG
>>931
float data[10];
にしてみよ。さすれば汝救われれれれ.
0934デフォルトの名無しさんNGNG
>>933
というより、むしろ…まあ、いいや
0935デフォルトの名無しさんNGNG
>>932
一応つっこんでおこう
#define MAX_NUM_HIST 10
の意味がないところがあるぞ…
0936932@研修期間NGNG
くっそ〜…それだけですか?
なんか、prog8_d.txt読み込めないぜ!

クビがかかってるからアセるぜ〜…
0937デフォルトの名無しさんNGNG
>>936
というか、社会人が宿題以下の問題を持ち込んだのは
あんたがはじめてだよ。(大爆笑)
0938デフォルトの名無しさんNGNG
あのー、ちょっとおたずねしたいのですが、

-- qwe.h --
typedef struct QWE {
 :
} Qwe;

-- asd.h --
typedef struct QWE Qwe;
struct ASD {
 Qwe *pQwe;
 :
}

-- asd.c --
#include "qwe.h"
#include "asd.h"
 :
-- any.c --
#include "asd.h"
 :

とかやると、asd.c では、同じtypedefを二回やることに
なりますよね。
今使っているコンパイラでは全然警告も出ずに、
これでいけてるんですけど、これって規格上でも
おっけーなんでしょうか。
0939デフォルトの名無しさんNGNG
>>938
いやなら#ifdefでククレカレー
0940932@研修期間&鬱NGNG
>>937

くっそぉ〜…!!

営業で入射したんだけどね…
いつのまにか、プログラマーの新人に回されたのさ!
自分はメールくらいしか出来ないんだけど、何でやねん!

とりあえず、第一関門でクビになったら給料半月分しか出ないッスよ。(泣)
0941デフォルトの名無しさんNGNG
fp=fopen("0.txt","r");

0.txt〜29.txtまでをランダムで開きたいのですがどうすれば良いでしょうか?

i=rand()%30
fp=fopen(%d".txt","r",i);
これじゃだめですよねぇ

どうすればいいのでしょうか?
0942デフォルトの名無しさんNGNG
>>941
sprintf が便利
0943デフォルトの名無しさんNGNG
sprintf ってもんがあるでしょー >>941
0944932@研修期間&鬱NGNG
このスレの人達は
漏れに半月分の給料で
ガマンしろとおっしゃっている。ああ、おっしゃっているとも!

エラー0だけど、何で読み込めないんだ〜!!
0945デフォルトの名無しさんNGNG
>>944
あのさ、nも0だろ、たぶん
0946デフォルトの名無しさんNGNG
sprintfですか?
Cやり始めて3ヶ月でまだ使ったことがない文ですが
早速今から試してみようと思います
ありがとうございます
0947デフォルトの名無しさんNGNG
>>944
prog8_d.txt
の中身がわからんのに答えられるか。
scanfは実務じゃ使わないがな。
0948932@研修期間&鬱NGNG
>>947

ぐお!すいません!

12
46
76
23
65
34
9
57
4
…(中略)
20
63

数字の間は「・」みたいので区切られてる。
コピペしたら改行された…くっそ〜!
0949デフォルトの名無しさんNGNG
>>948
>数字の間は「・」みたいので区切られてる。
それが原因だよ(大爆笑)
0950デフォルトの名無しさんNGNG
>>948
ファイルを一括で読みこんでstrtokで「・」を抜け
0951デフォルトの名無しさんNGNG
>>948
「・」
改行の化けだろう
0952932@研修期間&鬱NGNG
>>949
え?じゃあどうすれば…

爆笑されまくってるな…くそ!営業マンはつらいヨ
0953デフォルトの名無しさんNGNG
i=rand()%30
sprintf(motxt,"%d.txt",i);
これで1〜30.txtをランダムで出せるようになりましたが
ファイルオープンの仕方が良く分かりません
自分ではこうしてみましたが
fp=fopen(%s,"r",motxt);
コンパイルできません
何処が間違ってるのでしょうか?
0954932@研修期間&鬱解消ぎみNGNG
しがない営業マンに
やさしくしてくれたみなさん、ありがとうございます。

ドキュソな私にも理解できそうな
気がしてきたので、あとは自力でがんばります。
(くっそ〜…あと、9問もあるぜ〜。もっと難しいのが)
0955デフォルトの名無しさんNGNG
>>953
君はイチからやりなおしだ。
0956デフォルトの名無しさんNGNG
>>953
fopen の仕様ってちゃんと見た?(大爆笑)
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/fopen.3.html
0957デフォルトの名無しさんNGNG
>>953
それだと0〜29.txtだね(大爆笑)
0958デフォルトの名無しさんNGNG
>>955
ぎゃあ
fp=fopen(motxt,"r");
良く見たらこうでした

この先不安だ(ポインタとか)
0959デフォルトの名無しさんNGNG
>>957
i=rand()%30+1
すんまそん
0960デフォルトの名無しさんNGNG
>>932
でも、チミのコードは比較的素直で読みやすい
0961修士一年NGNG
さあ問題
int i;
int b[90];

for(i=0;i<10;i++)
b[i]=i*10;


さあ,b[0]〜b[9]までの数字を文字化けせずに
どうディレクトリ内の"result.dat"に書き込むにはどうすればよいか?
簡単すぎるよな。やっぱり。
0962デフォルトの名無しさんNGNG
>>961
「文字化けせずに」というのが分かりません。
普通にテキストファイルで書き出せばいいの?

「ディレクトリ内」というのはカレントディレクトリですよね?
0963デフォルトの名無しさんNGNG
>>961
copy con result.dat
0
10
20
30
40
50
60
70
80
90
^D
0964デフォルトの名無しさんNGNG
>>962
「自分でやってみたら文字化けした(しかも自分では理由はわかっていない)」に1500カノッサ
0965デフォルトの名無しさんNGNG
自分でやってみたがうまくいかなかった、はよい傾向。
age
0966デフォルトの名無しさんNGNG
>>961&963-965
文字列ではないものに対して、文字化けするって、どういうことだ?
0967デフォルトの名無しさんNGNG
おおかた値を直接書き出したんだろう
fprintfでも使え>>961
0968ジョブス2世NGNG
新しいスレッドを立てた、よろしく!

C言語なら、オレに聞け! <5>
http://piza.2ch.net/test/read.cgi?bbs=tech&key=994908590
レス数が950を超えています。1000を超えると書き込みができなくなります。