1 :
デフォルトの名無しさん :
04/12/11 16:26:05
立てたくて仕方の無い年頃、か。
自分じゃ何もせずに愚痴言うだけの
>>3 よりはまし。
>>5 いや、スレ立てをソフト開発か何かと勘違いしてないか?
継続スレのスレ立てぐらい、ホスト制限さえ無ければ誰でも立てられるが。
7 :
デフォルトの名無しさん :04/12/11 17:17:29
川本です。
石橋です 木梨です とんねるずです この歌をいただいて 初めて演歌の心を知りました・・・
10 :
デフォルトの名無しさん :04/12/11 18:08:57
C言語の質問ではないのですが、 ビープ音を使って人が話しているような音を出す事ってできるのでしょうか?
11 :
デフォルトの名無しさん :04/12/11 18:10:30
妄想力による。
12 :
デフォルトの名無しさん :04/12/11 18:27:10
>>10 8bit機全盛の時代にそんなのあったな
F-BASIC に TALK コマンドを新設するソフト
「さんだ〜ふぉ〜す」も有名
karateka の主人公は come on ! と叫ぶし
13 :
デフォルトの名無しさん :04/12/11 18:59:12
>>6 スレを「立てた」「立てなかった」の問題であって、
「立てられる」「立てられない」の問題ではないだろ。
いつもその調子で論理のすり替えやってんの?
スレ立て如きに何もしないの愚痴だの言うのがおかしいって
埋め厨が来るまでそのまま放置しとけばいいでしょ。
次スレが立ったら即移動しなきゃいけないわけではないからなぁ。
19 :
デフォルトの名無しさん :04/12/11 22:28:32
教えてください。 入力した文字列を格納した配列のポインタを戻したいんですけど、警告がでました。 警告1:プロトタイプ宣言のない関数'input'の呼び出し。(関数 main) 警告2:コードは効果をもたない。(関数 main) 警告3:問題のあるポインタの変換。(関数 input) ソース↓ #include <stdio.h> #define MAX 256 char *input(); void main() { *input(); } char *input() { char s[MAX]; printf("COMMAND:"); scanf("%s", s); return s; }
#include <stdio.h> #define MAX 256 char *input(void); void main() {char *p; p=input(); } char *input(void) { static char s[MAX]; printf("COMMAND:"); scanf("%s", s); return s; }
21 :
埋め厨 :04/12/11 22:32:16
こんばんわ。埋め厨です。
うんこトークしようぜ!!!
printf()で " や %d を出力するにはどう書いたらいいんでしょう?
>>23 printf("[\"] [%%d]\n");
26 :
デフォルトの名無しさん :04/12/11 23:12:23
>>20 動きました!
ローカル変数の扱いの間違いだったんかな?
ありがとうございました。
いやー、やっとスレが主系と副系に落ち着いたな。一時とはいえ4本もあるのは異常事態だったが。
埋め厨恐るべしだな。
30 :
デフォルトの名無しさん :04/12/11 23:27:54
まだ異常事態だよ
949 :デフォルトの名無しさん :04/12/11 21:42:51 初心者です。 参考書によって void main() と書いてあるものと int main() と書いてあるものの2種類ありますよね。 intにしてreturnしても、どこにも使われてないし プログラムも問題なく動くので 全部voidでいいと思うんですが。 voidにしてはいけない理由でもあるのでしょうか。
993 :デフォルトの名無しさん :04/12/11 23:09:50
その通り、処理系が認めていればなんでもいい。
ただし、コードの可搬性はなくなる。
994 :デフォルトの名無しさん :04/12/11 23:11:27
>>993 可搬性をどの程度持たせるべきかとは、全く別な議論だな
996 :993 :04/12/11 23:12:30
>>994 その通り。個人だったら個人で、団体なら団体で勝手に決めればいい。
ISO/IEC 9899:1999
5.1.2.2.1 Program startup
1 The function called at program startup is named main. The implementation declares no
prototype for this function. It shall be defined with a return type of int and with no
parameters:
int main(void) { /* ... */ }
or with two parameters (referred to here as argc and argv, though any names may be
used, as they are local to the function in which they are declared):
int main(int argc, char *argv[]) { /* ... */ }
or equivalent;9) or in some other implementation-defined manner.
997 :デフォルトの名無しさん :04/12/11 23:12:42
>>980 他
JIS X3010:2003(いわゆるC99)ではこういう風に書いてある。(ISO/ANSIも同じだろう)
5.1.2.2 ホスト環境
5.1.2.2.1 プログラム開始処理
プログラム開始時に呼ばれる関数はmainとする。
処理系はこの関数に対してプロトタイプを宣言しない。
この関数は次の4種類の方法のいずれかで定義しなければならない。
1. int main(void);
2. int main(int argc, char *argv[]);
3. 上記2つの方法のいずれかと等価なもの。
4. 処理系定義
ちなみに5.1.2.1でフリースタンディング環境の場合プログラム開始時に呼ばれる関数は(戻り値の型・引数含め)処理系定義と書いてある。
36 :
デフォルトの名無しさん :04/12/11 23:41:10
>>35 LinuxのようなOSもそのフリースタンディング環境になるの?
OS自体のこと
>>36-37 OS自体はフリースタンディングだと思う。
ただシェルあたりは独立したプログラムにするのであれば、それはフリースタンディングではないだろうな。
ちなみにフリースタンディングの条件はこの2つのようだ。 ― 複素数型を使っていない ― 標準ヘッダは<float.h>, <iso646.h>, <limits.h>, <stdarg.h>, <stdbool.h>, <stddef.h>及び<stdin.h>しか使っていない
40 :
デフォルトの名無しさん :04/12/11 23:56:33
41 :
デフォルトの名無しさん :04/12/11 23:59:59
<iso646.h>の中身ワラタ
<iso4649.h>
前スレでマンデルブロー集合について質問した奴です。 なんとか計算の結果を2次元配列風に表示するところまではできたんですけど 実際に2次元配列に結果をいれることが出来ません。 アドバイスおねがいします、、、
44 :
デフォルトの名無しさん :04/12/12 00:52:15
まさか2次元配列の使い方が分からない訳じゃないだろうから
・メモリが確保できない
・二次元配列を関数の引数に渡せない
のどちらかかな。
ちゃんと
>>1 のFAQを読んでいるなら、違うだろうけど。
46 :
デフォルトの名無しさん :04/12/12 00:56:44
2が1番小さい素数、3が2番目に小さい素数・・・・・、 i番目に小さい素数を返す関数nthprime(i)をつくり、500番目に 小さい素数を求めよ。 作成したプログラムのアルゴリズム書け。 ただし関数nthprimeは再帰呼び出しを用いて作成すること。 #include<stdio.h> int primep(int) ; int nthprime(int) ; int main() { int i = 500 ; printf("%d",nthprime(i)); } int primep(int i) { int k ; for(k = 2 ;k < i ;k++){ if(i % k == 0){ return 0 ;return 1 ; } } } int nthprime(int i) { /*ここがわからないです・・・*/ } 誰かお願いします。
>>46 機能か一昨日同じような問題に答えた記憶があるな。宿題スレで。
48 :
デフォルトの名無しさん :04/12/12 01:03:23
>>47 ぶっちゃけ同じ人なんですが〜アルゴリズムについて
教えていただけなかったので・・・。
というかint primep(int i)の中身が納得できないんです。。。
49 :
デフォルトの名無しさん :04/12/12 01:03:38
if(i % k == 0){ return 0 ;return 1 ; } ここがわからないです
for(i=0; i<SIZE; i++) { for(j=0; j<SIZE; j++) { mandel[i][j] = 0; } } こんな感じでなら二次元配列すべてに0を入れたりi+jの結果を入れたりすることはできるのですが、、、 マンデルブロー集合の計算でもfor文を使いまくってるんで そこから見直したほうがいいでしょうか?
>>49 オレも他の人もそんなことは一度も書いていない
52 :
デフォルトの名無しさん :04/12/12 01:10:14
>>51 もしわかってるならでいいんですが
i=500だったらこれで素数判定はおかしくないですか?
>>51 for(k = 2 ;k < i ;k++){
if(i % k == 0){
return 0 ;return 1 ;
}
}
だっただろ?
なんで勝手に問題書き換えるんだよ
あれ?最初から違ってたのか
for(k = 2 ;k < i ;k++){ if (i % k == 0) { return 0; } } return 1 ; こうね
素数は1とそれ自身以外では割り切れない数のことだ。 そのforループの中では、渡された数が2〜(渡された数-1)の範囲の数で割り切れるか試してるわけだ。 割り切れたら素数じゃないから0を返し、割り切れなかったら素数だから1を返してる。 OK?
57 :
デフォルトの名無しさん :04/12/12 01:19:04
int nthprime(int i) { if(i == 500) { nthprime(0); } return 3571; }
>>43 計算の結果とやらがローカル変数に格納されていて
格納先の2次元配列との受け渡しでポインタ処理を間違っていたり、
どちらかの変数の寿命に整合性が取れていないことが原因かとみた。
>>52 どう考えてもわかってない人の方が少ないから、そういう言い方は逆に失礼だと思うよ。
60 :
デフォルトの名無しさん :04/12/12 01:33:43
>>60 どこにも1が素数だなんて書いてないと思う
いつから宿題スレに落ちぶれたんだ?ここは。
63 :
デフォルトの名無しさん :04/12/12 01:37:09
>>60 違うが、「この関数を使って」で示された関数はそこを考慮してなかった
それをそのまま使っただけだ。
66 :
デフォルトの名無しさん :04/12/12 01:38:30
>>59 みなさんすみませんでしたm(_ _)m
>>56 つまりそこでのiっていうのは500ではないのですか?
>>67 いや俺が覚え間違えてたのかな〜と思っただけ。
>>66 iが500だったら
for(k = 2 ;k < 500 ;k++)
になるから、
if (i % k == 0)
ここでiは2〜499で割り切れるか試されるの!
なぜわかってくれんのだ
>>68 そうかごめん。
>>69 そうかもしれんorz
71 :
デフォルトの名無しさん :04/12/12 01:47:53
>>70 わからない理由は答えが3571になるのに素数判定では500までしか
やらないからです。
すみません。バカで・・・。
>つまりそこでのiっていうのは500ではないのですか? そう500だね
>>71 素?
nthprimeはnまでの中の最大の素数、じゃなくて、
n番目の素数 を求める関数だろ
74 :
デフォルトの名無しさん :04/12/12 01:50:22
>>71 primepは単に与えられた数が素数か素数かを判定するだけ。
3571を計算してるのはnthprimeの方。
nthprimeの方で数字を1から順番にprimepで評価してやって、
primepが3571回1を返した時点でその回数を返してやるの。
int main() { int i = 500 ; の i と、 int primep(int i) の i が別のもの、って事が判ってないんじゃないの?
今更だけど
>>26 さん、
>>20 のコードって思いっきり間違ってますよ
input()でとって来たの使って作業してると、そのうち動かなくなると思われ…
78 :
デフォルトの名無しさん :04/12/12 01:57:32
>>75 あっ、nthprimeの方で数字を1から順番にprimepで評価して
るんですか〜!わかりました!!
ありがとうございました!
みなさんありがとうございました!
79 :
デフォルトの名無しさん :04/12/12 01:58:56
>>79 やっとわかってくれたと思ったのに(;´Д`)
81 :
デフォルトの名無しさん :04/12/12 02:02:45
>>80 でも76さんのおかげでなんとなくわかりましたよ!
これ以上はご迷惑でしょから〜大丈夫です。
ありがとうございました!
>>50 同等のことをしているつもりの動かないコードを晒せ。
83 :
デフォルトの名無しさん :04/12/12 02:08:53
定本Cプログラマーのためのアルゴリズムとデータ構造っていう、アルゴリズムの入門書に 正規表現のプログラムが載っているのですが、理解できる気がしません。 ・・・・・・正規表現なんて、実際使えればもんだいないですよね?
Cの入門のとき #include <windows.h> #include <stdio.h> int main(){ MessageBox(NULL, "", "", MB_OK); return 0; } ってプログムを止める方が楽しいと思った。
85 :
デフォルトの名無しさん :04/12/12 02:15:10
>>83 プログラム見るんじゃなくて、理論から勉強しろ。
>>83 あの本はわかりやすかったと思うんだけどなぁ
87 :
デフォルトの名無しさん :04/12/12 02:40:07
>>85 あのーー。オートマトン理論とかいうやつですかね?
やっぱりあれ勉強しないといけないんですか・・・・
アルゴリズム入門というからには理論を勉強するのが筋。 単に関数だけコピペで使いたいのならネットで拾ってくればいいし。
>>87 Turing Machineから勉強すると良いよ。
それに、オーダーの概念も知らないでしょ。
Java勉強しようかと思っていたところだったが、またひとつ課題ができてしまいましたね(汗 時間があれば勉強してみます。ありがとうございました。
91 :
デフォルトの名無しさん :04/12/12 04:47:19
TuringMachineは勘弁してやれ
94 :
デフォルトの名無しさん :04/12/12 10:40:24
>>92 そのくらいは自分で考えないと、この先何もできないような…。
つーか、strxxxのサンプルソースなんかいくらでもあるんだから
せめて探すくらいしなさい。
95 :
デフォルトの名無しさん :04/12/12 10:46:03
素数は、「1とそれ自身以外では割り切れない」数のことだ。 素数が1、ではない
97 :
デフォルトの名無しさん :04/12/12 11:37:05
1とその数以外に約数を持たない1より大きな自然数だなぁ
100 :
デフォルトの名無しさん :04/12/12 11:44:24
>>99 「1より大きな」ってあたりが美しくない
もっとエレガントに定義してみな
確かに「自然数で」が抜けてるw
103 :
デフォルトの名無しさん :04/12/12 11:48:06
字面的に短くとは言ってないぞ
誰がそんな事言ってんだ
105 :
デフォルトの名無しさん :04/12/12 11:51:43
さ、おじさんもう寝るぞ 明日までにできてるかな?
素数と思ったら素の数を素数とする。
108 :
デフォルトの名無しさん :04/12/12 12:22:07
「2つの約数を持つ自然数」ってのはどう?
109 :
デフォルトの名無しさん :04/12/12 15:35:53
#include <stdio.h> #include <stdlib.h> #define N 6 int array[] = { 9, 0, 2, 5, 3, 2 }; // 適当な入力 int order[] = { 0, 1, 2, 3, 4, 5 }; // 0 から N-1 まで昇順 int shoujun(const int *a, const int *b){ /* ここに order[] に対する処理を加えたい */ return (*a-*b); } int main(){ int i; qsort(array, N, sizeof(int), (int(*)(const void*, const void*))shoujun); for(i=0;i<N;i++){ printf("%d ", array[i]); } printf("\n"); for(i=0;i<N;i++){ printf("%d ", order[i]); } printf("\n"); return 0; } stdlib.h の qsort() を使い、出力として array[] = { 0, 2, 2, 3, 5, 9 }; 昇順に order[] = { 1, 2, 5, 4, 3, 0 }; 元の array[] の要素の小さい添え字順 という操作を qsort で用いる関数に order[] に対する処理を加えて 行いたいと考えているのですがいまいち方法が分かりません。 そもそも qsort でこのようなことは可能なのでしょうか。
110 :
デフォルトの名無しさん :04/12/12 15:39:36
>>109 手っ取りばやくやるならふたつの配列じゃなくて構造体にまとめてひとつの配列にする。
かぶった orz
方法1) 先に order[] を array[] の順に並べ替えろ 次に array[] だ 方法2) 別の配列を用意して array[] の順に並べ替えろ、そいつで array[],order[] を入れ替えろ そいつには元々の array[] の添え字を入れておけ
スマソ、ウソツイタ 方法1) ではできなかったorz
116 :
デフォルトの名無しさん :04/12/12 16:05:57
>>115 return (*a-*b); はやめな。
117 :
デフォルトの名無しさん :04/12/12 16:30:06
現在、VBでEXEを作成し、VC++でVBEXE用のDLLを作成。 そのDLLの中で画面の物理的なサイズを取得しようとしたのですが画面の解像度を変更するたびに物理サイズもそれに伴い色々変わってしまいます。 私が考えていた結果では解像度に関係なく物理サイズは同じ結果となるはず・・・。 私の使い方が悪いのでしょうか? どなたか教えていただけないでしょうか? <コーディング> w_hdc = CreateIC("DISPLAY", NULL, NULL, NULL); w_ret = GetDeviceCaps(w_hdc, HORZSIZE);
GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
板を違えたようです・・・。 すみませんでした。
ありがとうございました。 これまで、変数型をいちいち変えていました。 for文のときにループが100回以下ならcharを使うなんてことをしていたのは、 3バイトケチって、手間と速度を犠牲にしていたわけですね。
>>123 いや、ループ変数にcharを使っても大抵のCPUでは32ビットレジスタか32ビット幅の
スタック領域を消費するから全く節約にならない。
#言い方悪いが、全くの無駄。
125 :
デフォルトの名無しさん :04/12/12 18:43:00
>>125 8ビット(つーか1バイト)のレジスタや8ビット幅のスタックを扱えるCPUなら話は別だ。
仮令インテルチップであっても32ビットレジスタをchar変数4つには割り当てられないからな。
そこでSIMDですよ。
128 :
デフォルトの名無しさん :04/12/12 23:45:41
【イメージ】 ○○○( str, "現在%2d時%2d分%2d秒です" ,st.wHour ,st.wMinute ,st.wSecond ) ; 現在の時刻を %d とかの形に変換した後、strに文字列として一気に 流し込むような処理がしたいんですけど、そんな事ができる便利な 関数ありませんか? ちょっとわかりにくかったらすみません。
(☉◇☉)Σ
>>128 sprintf()或いは日付けに特化したstrftime()
131 :
デフォルトの名無しさん :04/12/13 00:02:45
ただ今、きょん時ねこ分きつね秒です
>>130 ありがとうございます。
お陰で出来ました。
133 :
デフォルトの名無しさん :04/12/13 00:18:06
<ご質問> キャラクタ'AA'(0x4141)を0xAA に変換したいのですが、 スマートなロジックの書き方があればご教授ください。 お願いいたします。
byte0 + (byte1<<4)
ちがっとーよ
a = 0xaa; でいいんじゃない?
137 :
デフォルトの名無しさん :04/12/13 00:31:02
>>137 つか、あの質問から何がやりたいのかを理解できたとしたら凄いよ。
139 :
デフォルトの名無しさん :04/12/13 00:33:55
strtol 日本語はマジ直とけ 技術屋としてシャレにならんぞ
141 :
デフォルトの名無しさん :04/12/13 00:43:44
138へのアンチテーゼ
if(strcmp(str,"AA")==0) ans=0xAA;
uchar hex1asc(uchar c) { if(c >= 'a') c -= 'a' - 10; else if(c >= 'A') c -= 'A' - 10; else c -= '0'; return c & 0x0F; } uchar hex2asc(uchar *s) { return (hex1asc(s[0]) << 4) | hex1asc(s[1]); }
strtolでいいやん
146 :
デフォルトの名無しさん :04/12/13 01:07:03
char line[ ] = "AA"; sscanf(line, "%x",&ans); とか
>>145 'AA'だけを変換してくれるような機能は無かった気がするけど。。
とりあえず 142 がスマートっぽい。
uchar hex1asc(uchar c) { if(c >= 'a') c -= 'a' - 10; else if(c >= 'A') c -= 'A' - 10; else c -= '0'; return c & 0x0F; } uchar hex2asc(ushort s) { return (hex1asc((uchar)(s >> 8)) << 4) | hex1asc((uchar)(s & 0x00FF)); }
>>148 そういう質問なのかw
if (str[0] == 'A' && str[1] == 'A')
ret = 0xaa;
文字列じゃなくて文字だと言うことに気付いてない香具師多過ぎ
155 :
デフォルトの名無しさん :04/12/13 14:36:10
Linuxで書かれたCのプログラムをWindowsでコンパイルする方法は無いですか? unistd.h等のインクルードファイルが無くてエラーが出ます。 あとコンパイルできたとしても動くんでしょうか?
>>155 標準ライブラリなどプラットフォーム非依存のライブラリだけを使っていれば、コンパイルできれば動くはず。
Cygwinというソフトを使うとWindows上に擬似Linux環境を作れるから そこのgcc使うとコンパイル・実行できる。 普通のWindows用コンパイラを使う場合はエラーが出た箇所を 片っ端から#ifdefで囲んでいってWindows用に書き換えていく必要がある。 人はこれを移植と呼ぶ。
擬似Linux環境??????
Unixだろ
#include <stdio.h> main() { char buf[80]; scanf("%s",buf); printf("%s %d \n",buf); return 0; } とやったら普通、Aを入力したらA 65と出力しますよね?Aはちゃんとでるんですが10進数のほうがおかしいです。
printf("%s %d \n",buf );
>>161 > scanf("%s",buf);
> printf("%s %d \n",buf);
(snip)
>とやったら普通、Aを入力したらA 65と出力しますよね?
普通はそんなバカなコード書きません。
>Aはちゃんとでるんですが10進数のほうがおかしいです。
おかしいのはあなたです。
#include <stdio.h> main() { char a[20]; scanf("%s",a); printf("%d",a); return 0; } 同じ人で恐縮なんですが、これでAAAと入力、そしたらprintf側はどうでますか? 656565って感じにはでないんですか?
>>159 Cygwin は RedHatLinux だよ
167 :
デフォルトの名無しさん :04/12/13 20:56:42
#include <stdio.h> main() { char buf[80]; scanf("%s",buf); printf("%s %d \n",buf, buf[0]); return 0; }
169 :
デフォルトの名無しさん :04/12/13 20:58:15
CygwinでCやってるんですけど、何回もプログラムを実行してると たまにバグるのは気のせいですか・・・orz
#include <stdio.h> main() { char a[20]; scanf("%s",a); printf("%03x",*(unsigned long *)a); return 0; }
172 :
デフォルトの名無しさん :04/12/13 21:03:01
バグってからGDBでrunすると1,2回は何も出ず終わるんですが・・・ これまたrunしすぎるとエラーでます。 そんなもんですか??
>>172 その情報で何か有効な意見が得られると思いますか?
どんなエラーかくらい書けよ
もういいです
バグって何?
>>168 サンクスです。馬鹿はだまってらんねーです
#include <stdio.h>
main()
{
char a[20];
scanf("%s",a);
printf("%s %d%d%d",a,a[0],a[1],a[2]);
return 0;
}
へいるまん「これでおーけーね?」
とりあえず馬鹿であることは認識したようだ
文字列の入ったテキストファイルを読み込んで、 あらかじめ作っておいた配列に格納する方法を教えてください C言語でお願いします
宿題は宿題スレへ
文字列の入ったテキストファイルを読み込んで、 あらかじめ作っておいた配列に格納する方法を教えてください C言語でお願いします
宿題は宿題スレへ
いつもお世話になっております先輩ども TrsFmtConv.c:1641: error: declaration for parameter `stOldSet' but no such parameter TrsFmtConv.c:1640: error: declaration for parameter `stSet' but no such parameter TrsFmtConv.c:1652: error: number of arguments doesn't match prototype cc1: error: prototype declaration みたいなエラーがイパーイ出るんですが、 原因は何だと推測されますか?
ヘッダ
>>185 ヘッダ・・・?
自分もそう思って定義してるつもりだったんじゃないかと
確認してみましたが、未定義じゃなかったようです
二重定義とかかな・・・
定義してる型がおかしいとか引数の数がおかしいとか、そんなとこじゃないのかな? 何せファイルがデカすぎるからどっかで起きたtypoが全体をブッ壊してるようにも思える。
うおおおおおおおおおおおおおおおおおおお
解けたあああああああああああああああああああああああ
原因は内部変数の定義でセミコロン付け忘れでした_| ̄|○
>>185 ,
>>187 、レスサンクスです!
もうCの開発嫌だ・・・
お疲れ!
number of arguments doesn't match prototype
くだらない質問で恐縮ですが、 C言語で配列の要素数を#defineやプログラム内で宣言せずに scanfなどでプログラム実行中に後から指定する方法は無いのでしょうか? やって見ると、「定数式が必要」とエラーになるのですが・・・
あーマルチしちゃってたのね
C99使えるコンパイラへ乗り換えろ
それは10種類あるのかよ?
ない。
2次元配列を用いて九九の結果を画面に出力するプログラムを作成せよ。 但し掛け算の計算はmulとして関数を作成すること。 おしえれ
198 :
デフォルトの名無しさん :04/12/14 22:04:26
>>197 void mul(int i, int j)
{
return i * j;
}
int main(void)
{
int data[9][9];
int i, j;
for (i = 0; i < 9; i++) {
for (j = 0; j < 9; j++) {
data[i][j] = mul(i + 1, j + 1);
}
}
for (i = 0; i < 9; i++) {
for (j = 0; j < 9; j++) {
printf("%d ", data[i][j]);
}
printf("\n");
}
return 0;
}
>>198 void mul(int i, int j)
~~~~
200 :
デフォルトの名無しさん :04/12/14 22:26:00
>>199 あうあう。一発書きだから許せ。
int mul(int i, int j)に訂正。
201 :
デフォルトの名無しさん :04/12/14 22:33:35
> mul(i + 1; j + 1) 間違っちゃいないんだけど、ばっきゃろーってとこだな あと九九は2の段からだろ 仮面ライダーが本郷猛だった頃はそうだった
202 :
デフォルトの名無しさん :04/12/14 22:34:08
> ; オレモナー
203 :
デフォルトの名無しさん :04/12/14 22:49:45
>>201 えー、俺、小学校のころ1の段から覚えさせられた覚えがあるべ。
>>203 for (i = 1; i <= 9; i++) {
for (j = 1; j <= 9; j++) {
data[i-1][j-1] = mul(i, j);
}
}
のがいいって言いたいんじゃね?
どっちも一緒や。そんな微細なこと、ドウでもいい
// ... int *pdata; // ... pdata = data[-1][-1]; // ... pdata[i][j] = mul(i, j); // ...
>>208 そこまでメンドい事やるくらいだったら、「data[0][0]は使いません」の方が全然わかりやすい。
NUMERICAL RECIPES in Cは
>>208 のスタイルをとってるな。
212 :
デフォルトの名無しさん :04/12/15 04:41:34
東京の時刻を元にして、各都市の時刻を求めるプログラムを書いているんですが、 年月日それぞれをまたぐ場合をif elseで求めているため条件式の嵐になっています・・・ 特に月をまたぐ場合、28日と30日と31日という3つの条件についてそれぞれ求めなければならず、 非常にわけがわからなくなっています。 これって明らかに効率の悪い手法ですよね?
unix time化して時差分を引いてフォーマッティングすりゃいいんでは
214 :
デフォルトの名無しさん :04/12/15 04:47:54
あるプログラムを書き換えるソフトを作ろうとしているのですが、コンパイルがうまく通ってくれません。 何度見返してみても自分ではおかしな点を発見できなかったので、見ていただけないでしょうか。 #include<stdio.h> int main(void) { FILE *fp; fp=fopen("KAZOKUK.EXE","wb"); fseek(fp,0x000140D9h,SEEK_SET); while(ftell(fp)<=0x000140EDh) fputc(fp,0x90h); fputc(fp,0xEBh); fclose(fp); return 0; } エラー E2121 a.c 9: 関数呼び出しに ) がない(関数 main ) エラー E2377 a.c 10: While文に ) がない(関数 main ) エラー E2121 a.c 11: 関数呼び出しに ) がない(関数 main )
エラー E2121 a.c 9: 関数呼び出しに ) がない(関数 main ) エラー E2377 a.c 10: While文に ) がない(関数 main ) エラー E2121 a.c 11: 関数呼び出しに ) がない(関数 main )
>>216 それでただの書き忘れかと思ったんですが、どこにもそんな個所が見つけられなくて困ってます。
どこがおかしいのでしょうか?
h
219 :
デフォルトの名無しさん :04/12/15 07:12:13
>>215 0x000140D9h
のhが意味不明。
>fputc( fp, 0x90 ); 逆だ、逆
223 :
デフォルトの名無しさん :04/12/15 07:32:26
家族計画ってそんなにおもしろいか?
fgets関数を使ってファイル内容を読み出したいんだけど、 ()って記号は読み出せないんですか?
あーなるほど、何かのプログラムにNopパッチを当てようとしているのか。
227 :
デフォルトの名無しさん :04/12/15 12:26:40
どこがおかしいですか? 問題 西暦2000年から10000年の間で,夏季オリンピックが開催されるにもかかわらず, 閏年でない年をすべて列挙するプログラムを作りなさい。 #include <stdio.h> main() { int y; for(y=2000; y<=10000; y++) if (y % 4 == 0) { if (y % 100 == 0 && y % 400 != 0); printf("%d"); } }
最近、printfにあからさまな誤りを入れた質問が乱発しているが scanfに続くネタとして、面白いんだろうか
>>228 標準関数の仕様を理解していないんでしょ。
ネットワーク関係のライブラリが欲しいんですけど、何処に行けばあるの でしょう、なんか見つかりません
君のHDの中にあるはず
文字列s1、s2を引数で受け取り、s1に文字列s2が含まれているかどうか調べる関数を作成しなさい 実行結果は、含まれているなら1を、含まれていないなら0をそれぞれ返すようにしなさい。 文字列検索関数strcmpなどは使用しないこと。 ・ ・ ・ これ誰かわかります?
233 :
デフォルトの名無しさん :04/12/15 13:41:10
>>218 ,219
ずっとhは必要だと勘違いしてましたorz
>>220 こんなとこにミスがあるとは…
原因は書き忘れのみだと思い込んでました
>>222 80KBになってしまいますた鬱
rb+が正しいみたいですね
>>224 感動ゲーの中では最高傑作と名高いのでやってみることにしました
>>226 いわゆるNoCDパッチってやつです
みなさんありがとうございました。おかげで完成しました。
では心おきなくプレイしてきまつ。
235 :
デフォルトの名無しさん :04/12/15 13:43:42
strstrはその「strcmpなど」に含まれるんだろうな。
236 :
デフォルトの名無しさん :04/12/15 13:46:27
237 :
との :04/12/15 14:02:00
マウスフックしてウィンドウのタイトルバーでホィールが動いたときに処理をするようなプログラムを作りたいのですがうまくいきません 右ボタンなどはWM_NCRBUTTON_CLICKでつかまえて、ヒットテストをみれば上手くいたのですがホィールはどうしたらできますか?ご存知のかたいたら教えてください
WM_MOUSEWHEEL を捕まえればいいんじゃない?
>>1 >ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
↑これが読めない脳足りんが増えて来ましたね。
>>231 いやHDの中も探したんですけど、ないです。
具体的にはsys/socket.hとその実行ファイルが欲しぃ。
>>227 >夏季オリンピックが開催されるにもかかわらず,
日本語の使い方がおかしいと思う
>printf("%d");
printf("%d",変数)
;付け忘れた
243 :
デフォルトの名無しさん :04/12/15 15:12:52
「あいうえお」みたいな文字列を一文字ずつ16進数にして配列に入れて行くにはどうしたらいいですか?
>>234 ICOのほうが感動するぞ。
イブバーストエラーもよかった。
弾幕ゲームも、すべての弾を避けれたときに感動するぞ。それ以外はマゾヒズム。
247 :
との :04/12/15 18:55:47
>>238 それだとうまくいかなかった
なんかヒットテストが常に0になる
やりかたがまずいのかなあ
夏季オリンピックは、いったい何年まで行われるのだろうか? 西暦10000年になる前に暦が変わったり、 人類そのものが絶滅するかもしれない事は考えないのだろうか?
>>249 物理の問題で糸にも少しくらい重さがあるじゃないかと思ったことあるだろ
戦争で中止したこともあった死ね
252 :
デフォルトの名無しさん :04/12/15 21:29:16
>>250 うん、ある。
コペンハーゲン解釈も試験のための答え方は憶えたけど本心では納得してなかったりする。
>>252 最近多世界解釈なら納得でき始めている。
納得しちまっていーものなのかなぁ、という不安はある。
すいません。質問です。コンパイル出来なくて困ってるんですが #include<stdio.h> int main(void){ int num[10],i,k,j; printf("10個の数字を入力して下さい:"); for(i=0; i < 10; i++)scanf("%d",& num[i]); for(j=num[0]; num[0] < num[10] ;num++) for(k=num[1]; num[1] < num[10]; num++){ if(j==k)printf("同じ数は%dです\n",j); } return 0; } 9行目と10行目でエラーが出てまして、皆さんだったらどう直されますでしょうか?
どうやって配列をインクリメントするんだい?
なんだこれ
うわっ、これはひどい
初心者の時は{}省略せずに毎回毎回きちんと書け。 for(j=num[0]; num[0] < num[10] ;j++){ for(k=num[1]; num[1] < num[10]; k++){ if(j==k)printf("同じ数は%dです\n",j); } }
なんで急にこんなエラーメッセージも読めない、 基本的なことを調べようともしない奴ばっか増えたの?
こっちだがな for(j=0; i<10;j++){ for(k=0; k<10; k++){ if(j==k)printf("同じ数は%dです\n",num[j]); } }
これだと例えばエラーを直しても、例えばnum[10]=0,1,2,3,4,5,6,7,1,5のときに 同じ数は1です 同じ数は5です 同じ数は1です 同じ数は5です とか表示されるぞ もうちょい改良しておけ
さらにいうとこうだがな for(j=0; i<10;j++){ for(k=0; k<10; k++){ if(num[j]==num[k])printf("同じ数は%dです\n",num[j]); } }
>>259 昔からだよ。そうだな、だいたい古代エジプトあたりからだ
>>262 >>260 をコピペしたら間違ってたし
× for(j=0; i<10;j++)
○ for(j=0; j<10;j++)
>>264 はっきりした区分はないが、ポリネシア人との邂逅があった時期とされている
>>255 〜
>>256 さん
レスありがとうございます。
>>255 num[0]++に、変更したところコンパイルできました。
私も皆さんのようなプログラムに近づけるよう精進致します。^^;
ありがとうございました。
> 皆さんのようなプログラム …俺たちはプログラムではないわけだが。
CとTURBO Cの違いってなんですか? 他にもPASCALとTURBO PASCALなどがあります。 根本的に違う言語なんでしょうか?
271 :
デフォルトの名無しさん :04/12/16 00:11:27
>>269 トロンのノリだな
不倫、なぜ忍び込んだ
>>269 君は自分がプログラムであるという事実に気づいていないようだな...
>>270 君に使いこなすのは無理って点は全部共通かな
>>259 人に訊くレベルにすら達していない莫迦も増えましたが、
得意げに教えたがる手合いも増えましたね。
>>270 "TURBO C"や"TURBO PASCAL"はソフトの名前。
"C"や"PASCAL"は言語の名前。
比較するものではない。
276 :
デフォルトの名無しさん :04/12/16 00:21:00
>>270 オートバイとCBRの違いはなんですか?
ってのと同じくらい プ な発言だぞ
>>276 井上君の家のカローラと武田君の家のカローラはどこが違うんですか?
と同じレベルじゃない?
託児所になっとる・・・
餓鬼末
>>277 「トヨタ」と「トヨタ・カローラ」ってどこが違うんですか? だ
282 :
デフォルトの名無しさん :04/12/16 19:42:20
「あいうえお」みたいな文字列を一文字ずつ16進数にして配列に入れて行くにはどうしたらいいですか?
>>282 一文字ずつ処理するのは必要条件なのか?
>>282 >「あいうえお」みたいな文字列を一文字ずつ16進数にして
それぞれどの様な 16 進数値になればよいのだ?
>>282 何がやりたいのか、いまいち分からんが「漢字コード」で検索してミソ。
すいません。getcharのしつもんです。 Cでアンケートを集計したくてプログラムを書いたんですけど うまくいきません。 一文字入力してエンターを押すと、処理が一つ跳んでしまうようです。 問題はgetchar の使い方でしょうか? またはgetcharは使うとまずいですか? 次にソースを載せておきます。誰か原因と代替案お願いします。
#include<stdio.h> int main () { int g, h, i = 0, j = 0, k = 0; for (h = 1; h <= 3; h++){ //簡単の為3人分だけ数える。 //アンケートのQ1.はYes または No で答えるもの。 //Yesを y 、Noを n 、無回答を 0 で入力する。 printf ("Q1. "); g = getchar (); if (g == 'y'){ i++; } if (g == 'n'){ j++; } if (g == '0'){ k++; } } //A1.回答表示 printf("A1.\n"); printf (" Yes = %d\n", i); printf (" No = %d\n", j); printf ("Mukaitou = %d\n", k); return 0; }
288 :
デフォルトの名無しさん :04/12/16 20:35:02
>>286 邪道かもしらんが、<conio.h>をインクルードして、getch()を使ったら?
Enter押す必要もないし。
>>286 なにが起こってるのかはgetcharから受け取った値をその都度表示してみれば分かるだろう。
290 :
デフォルトの名無しさん :04/12/16 20:42:57
>>282 char sz[] = "あいうえお";
292 :
デフォルトの名無しさん :04/12/16 20:45:32
>>286 関係ないが、switchにするか、せめてelse ifでつなげ。
295 :
デフォルトの名無しさん :04/12/16 20:58:21
>>294 何かしらんが、一回一回Enter押したいのか?
だったらscanfにすれば。
>>295 scanf("%c\n", &g);
みたいな感じですか?
入力ストリームを毎回フラッシュするという手もあるぞ。 冗長ですか・・・そうですか λ...
298 :
デフォルトの名無しさん :04/12/16 21:04:37
>>296 \n入れると動作がおかしくなる。%cのみで。
>>291 要件満たしてないじゃん…
wchar_t sz[] = L"あいうえお";
こうじゃないと。
301 :
デフォルトの名無しさん :04/12/16 21:05:44
>>297 入力ストリームのフラッシュって動作未定義じゃないか。
やば、余計恥ずかしい。
>>298 ,300
うむ。了解です。ありがとうございました。
303 :
デフォルトの名無しさん :04/12/16 21:26:25
C言語で3Dプログラムを勉強しているんですが、 サンプルのプログラム中に >//四角形座標の最大最小値の初期化 >max_x = max_z = -1e10f; >min_x = min_z = 1e10f; とある"1e10f"はどのような値なのでしょうか?
304 :
デフォルトの名無しさん :04/12/16 21:29:21
>>303 たしかに意味わからんな。
2進数にしたら、11110000100001111、と左右対称系になるから、
ここに何か意味があるのかも?3Dはわからんからこれ以上
何も言えないが。
307 :
304 :04/12/16 21:35:42
ああっ!恥かいた!0xついてないし、16進数じゃないやん! 最後のfは浮動小数点型のサフィックスだ。 1e10は、「1*10の10乗」って意味だ。 吊ってくるorz
まぁまぁ・・・はやまらないで
>307 えと 1e10 = 10^10 = 10M(100憶) Σ( ̄□ ̄ ありがとうございます。
今の流行は無線LANでの首吊りですよ。
あう、 MじゃなくてGか。。。
>>309 1e10 で
>Σ( ̄□ ̄
なら、1e300 だとどうなるんだろう…
314 :
デフォルトの名無しさん :04/12/16 23:48:52
315 :
デフォルトの名無しさん :04/12/17 00:34:02
すいません、ものすごく基本的なことかもしれないんですけど、 変数を宣言して初期化する際に int a = 5 * 3; のように演算を行って初期化することは正しい行為なんでしょうか。
リンクリストを作ろうと思うんですが、 typedef struct { void *data; list *next; } list; と書きたいんですが「構文エラー : 識別子 'list'」とかいうエラーになります。 このような書きかたは出来ないんでしょうか。
出来ない
>このような書きかたは出来ない こうすれ typedef struct list_{ void *data; struct list_ *next; } list;
できました!ありがとうございます!
323 :
デフォルトの名無しさん :04/12/17 16:26:31
C言語の課題おしえてください。 直線を指定した座標から座標まで引くプログラムなんですが ターミナルに出力するのではなくてファイルに出力するらしいです。 検索してもライン関数を使ってるのしかなくて、そのライン関数 自体の中身がわからりません。どうか教えてください。
325 :
323 :04/12/17 16:36:15
そうでしたか・・・みなさんすみませんでした!
326 :
デフォルトの名無しさん :04/12/17 16:44:26
現在学校でC言語のテスト中です; どなたか名前を入力させて その名前を10回表示するというプログラムを作成してください なにとぞお願いします
int i; char name[128]; scanf("%s", &name); for (i = 0; i < 10; i++) printf("%s", name);
330 :
デフォルトの名無しさん :04/12/17 20:13:08
大抵のところで、scanfはポインタを教える前に使わせるからなぁ とりあえず&をつけろと教えられている気がする
332 :
デフォルトの名無しさん :04/12/17 23:37:09
C++はなぜどこででも変数宣言できるようになったんだ?
>>332 使う直前で宣言する方がわかりやすいから
334 :
デフォルトの名無しさん :04/12/17 23:40:20
>>332 ちゃんとは知らんが、スコープの先頭で宣言しなきゃいけないってのが
コンパイラにとっては都合がいい(コンパイラの実装が楽)でも、
書く側にとっては辛いからじゃない?
335 :
デフォルトの名無しさん :04/12/17 23:41:22
>>332 コンストラクタの実行タイミングを制御するのにいちいちブレースつけにゃならんのがダサいからだろ
336 :
デフォルトの名無しさん :04/12/17 23:42:12
>>327 そんな使い方するから scanf 使いはアフォやと偏見もたれるんじゃい
337 :
デフォルトの名無しさん :04/12/17 23:43:44
>>336 ちょい待て。scanfなんか、まともに動くプログラム作ろうと思ったら使わんだろ。
だがそれがいい
340 :
デフォルトの名無しさん :04/12/17 23:46:10
無能scanf使いによる自己弁護が始まりました
341 :
デフォルトの名無しさん :04/12/17 23:46:59
じゃぁみんな scanf の代わりになに使ってんノ?
せめてfgetsとsscanfにしろ
343 :
337 :04/12/17 23:47:21
>>339 いや、めちゃくちゃちょこっとしたテストプログラム書くときだけだろ?
「まともに動くプログラム」ではない。
344 :
デフォルトの名無しさん :04/12/17 23:50:46
だから何つかうんだってば。 正規表現ライブラリとか標準であればそっち使いたいけど。
345 :
デフォルトの名無しさん :04/12/17 23:51:53
質問 エムアロック?マロック?
346 :
デフォルトの名無しさん :04/12/17 23:53:06
>>345 エムアロック
「マロック」って言う奴は例外なく馬鹿。
マロックにきまってるだろ。ちっとは考えろ。
348 :
デフォルトの名無しさん :04/12/17 23:53:18
キャプテンマーロック
エムアロックなんて読むやつはなぁ、 calloc をシーエーアロックなんて読むんだよ、バカ。 これはカロックだ。
351 :
デフォルトの名無しさん :04/12/17 23:54:39
>>345 いきがったやつは
memory allocation
で,エムアロックだよ,なんてぬかすが,
ネイティブは普通に
マォック
って発音する(のを聞いた).
マロックでいんでない?
オレ的にはcharはキャラと言いたいけど,あれもチャーだしね.
ギタリストかよ
352 :
デフォルトの名無しさん :04/12/17 23:55:05
>>349 は救いようのない馬鹿
シーエーアロック?なんでaを2回読んでんだw
シーアロックだよ
意見を総合すると
>>346 は例外なくBAKAってことでFA?
モーロン
355 :
デフォルトの名無しさん :04/12/17 23:57:18
>>353 単独の対象に対して「例外なく…」って言うお前は間違いなくバカ
>>352 馬鹿はお前。
malloc はもともと「エムアーアロック」って読むのが正式。
母音が2つ続くので連音して「マァロック」→「マロック」になった。
357 :
345 :04/12/17 23:58:30
358 :
デフォルトの名無しさん :04/12/17 23:58:59
> malloc はもともと「エムアーアロック」って読むのが正式。 ほぉぉお。何をもって「正式」なんだか根拠を示してもらおうか。
楽しそうだな。
>>358 Dinkin博士の「プログラマ発音史 - 技術用語の史学的考証 - 」知らんのか?
この分野の権威だぞ。
361 :
デフォルトの名無しさん :04/12/18 00:02:15
やはりこういう一種の宗教問題的な, 技術的でない曖昧な話題は盛り上がるね. 人間の本質だよ,議論して答えを導き出すという. 言い争いにしかなってないかもしれねーけど, こういうのを授業でもやりたい.
362 :
デフォルトの名無しさん :04/12/18 00:03:44
>>360 権威主義馬鹿。
つーか、googleで一件もヒットしないのに、権威?
他の分野ならともかく、プログラムで?
ぷぷぷぷぷ。
>>361 >やはりこういう一種の宗教問題的な,
>技術的でない曖昧な話題は盛り上がるね.
大した知識もない馬鹿でも参加できるからね
364 :
356=360 :04/12/18 00:05:17
真っ赤なうそだぴょーん わーい、google で検索してやんの!
365 :
デフォルトの名無しさん :04/12/18 00:06:19
366 :
デフォルトの名無しさん :04/12/18 00:06:51
367 :
デフォルトの名無しさん :04/12/18 00:15:47
そして誰もいなくなった
ケロッグじゃ駄目なん?
pingはぺやんぐだよな
sin はシンだよな
で、80種類のコンパイラは?
質問です。 教えてください!
NullReferenceExceptionはぬるりだよな
>>370 sinはサインに決まってる。
そして、cosはコカインだ。
アークコカイン最強
378 :
デフォルトの名無しさん :04/12/18 01:40:16
ファイル内でstatic で定義した値を extern で外部からアドレス参照できるようにするのはC言語動作的に 大丈夫なのでしょうか? hoge.h -------------------------- extern const int* gp_hoge; -------------------------- hoge.cpp -------------------------- static const int moge = 1; int* gp_hoge = &moge; -------------------------- main.cpp -------------------------- #include "hoge.h" int main() { printf("%d\n" , *gp_hoge ); return 0; } --------------------------
>378 動作上はまったく問題ない が、なるべく使うのはやめたほうがいい
>>378 何のためにstaticをつけているのだろうか。
381 :
デフォルトの名無しさん :04/12/18 01:48:25
int i; char a[5][6]; ってカンジに宣言してて iはいろいろ変わっていってて、ある条件下で a[0][1]にiの値を入れたいんですが何か方法ありませんか?
a[0][1] = i;
>381 if ( i == "ある値" ) a[0][1] = i;
384 :
381 :04/12/18 01:56:32
>>382-383 そうやって代入して文字列a[0]を出力すると、
printf("%s",a[0]);では、
a[0][1]の部分がちゃんと出力できないですよね?
これを解決する方法ないですか?
printf("%c",a[0][1]); もしくは a[0][0] = " "; と適当に値を放り込んでから表示。
a[0][0] = ' '; だろう
a[0][1] = i +'0';
>386 _|\○ノ" あ・・・
>379 >が、なるべく使うのはやめたほうがいい なぜ? >380 >何のためにstaticをつけているのだろうか。 見られたくないことがあるから。 そんときgp_hogeは他を指してればいい。
390 :
デフォルトの名無しさん :04/12/18 05:32:23
下のように、forループの中である条件が成立したときに、 (breakのようにforループを抜けてしまうのではなくて) iを一つ進めてforループ中の処理の先頭に飛びたいのですが、 簡単に書く方法(命令)は無いのでしょうか。(break並に) 条件以下をswitchしてもいいのですがなんか書き方が面倒です。 for(i=0;i<1000;i++) { : : if(hoge==hoo){以降の処理をせずにiを一個進めてループ中の処理の先頭に戻る)} : : (色々な処理) : : }
>>390 なんかネタみたいな質問だなcontinue
>>391 あ、便利なのがあったんですね。知りませんでした。ありがとうございます。
Cの場合はループ中で制御変数を書き変えても大丈夫ですよね?
394 :
デフォルトの名無しさん :04/12/18 09:09:37
>>393 まぁな。ただしそんなコード書く奴は馬鹿だが。
ファイル内でstatic で定義した変数を extern で外部から参照できるようにするのはC言語動作的に 大丈夫なのでしょうか? hoge.h -------------------------- extern const int moge; -------------------------- hoge.cpp -------------------------- static const int moge = 1; -------------------------- main.cpp -------------------------- #include "hoge.h" int main() { printf("%d\n" , moge); return 0; } --------------------------
396 :
デフォルトの名無しさん :04/12/18 09:15:10
>>395 上で回答もらってんだろ。氏ね。
しかもcpp?馬鹿。
失礼しました ファイル内でstatic で定義した変数を extern で外部から参照できるようにするのはC言語動作的に 大丈夫なのでしょうか? hoge.h -------------------------- extern const int moge; -------------------------- hoge.cp -------------------------- static const int moge = 1; -------------------------- main.c -------------------------- #include "hoge.h" int main() { printf("%d\n" , moge); return 0; } --------------------------
398 :
デフォルトの名無しさん :04/12/18 09:31:16
>>397 hoge.h の中の extern は未解決参照としてリンカに渡されリンカが自動生成するオブジェクト
hoge.cp の中の static は内部ラベルがつくだけでリンカにはDATAセクションの一部として渡される
main.c が参照している moge は hoge.h で宣言された未解決参照で、hoge.cp で定義された moge とは別物
よって main.c の翻訳結果を実行したとき、規格合致処理系なら 0 と表示する
もし 1 と表示する処理系があったなら、その処理系は規格合致処理系ではない
>>394 普通だ。それより、
>>393 for の構文を検討するように。
制御変数などというものはない。
400 :
394 :04/12/18 11:10:31
>>399 あ〜、おれも言い方がまずかった。
for (i = 0; i < 10; i++)
みたいな文でiを中で変更するなってことね。
> 制御変数などというものはない。
まぁ、
>>393 が言わんとすることは大体わかるだろ。
そんなに肩肘張らなくても…。
>393の質問は、 >ループ中で制御変数を書き変えても だよな。 >for (i = 0; i < 10; i++) つーか、ループ中に変えてるじゃん。
>>400 いや、for が
for (変数=初期値; 変数を使った終了判定; 変数++)
という書式だとか思っているなら間違いだし、
変数を途中で増やそうが減らそうが何の問題もない。
404 :
394 :04/12/18 13:19:21
>403 いやいやいや。もちろん、あなたのおっしゃるとおりです。 が、まぁ、私の言いたいことは典型的なfor (i = 0; i < 10; i++)みたいな イディオムにおいて、ループ中でiをいじるのは「スタイルとして」ダメでしょうという、 ただその1点のみです。 なぜfor文がこういう構文になっているのか、という問題でもありますし。
>>404 あーやっと理解できた。スマソ
それなら同意。
自作した二分木をコンソールに出力したいんですが 難しくて悩んでいます。きれいに木のようにしてコンソールに 描画するいい方法はないでしょうか・・・。 8 +-+-+ 5 10 +-+-+ 2 6 たとえば↑こんなふうに・・・
末端から必要スペースの総量を計算していけばいけると思うよ。
るbyさいこう!
409 :
デフォルトの名無しさん :04/12/18 14:13:09
float 型って符号部1bit, 指数部8bit, 仮数部23bitなんですよね? float f = -1.5; などとしたときにビットがどうなっているか知りたいのですが, どのような方法がありますか?
・fのアドレスを取得してcharのポインタに放り込む でおk
(u)int32_tとかの方がいいんじゃないか?
あー、32bit決め打ちなら確かにそれでいいな
unsigned long fToUL(float src) { return *(unsigned long*)&src; } unsigned long x = fToUL(-1.5f); ↑x のビットを調べれば桶 キャストがいやなら union でやれば桶
unsigned int flg; float shousuu; for(flg=0x80000000;flg;flg>>=1){ if(flg&(unsigned int)shousuu){ putchar('1'); }else{ putchar('0'); } }
いろいろありがとうございます 今環境がないので, 夜にでもやってみます
416 :
476 ◆FIcNi4f8js :04/12/18 15:04:28
>>404 未だ判らないんだけどさ、>400はループ中でiを変えてるじゃん。
それとも、forの括弧の中はループ中じゃないと言う主張?
> 8 > +-+-+ > 5 10 > +-+-+ > 2 6 2+ + 5+ 6+ + + 8 + 10+ これでどうかね?
419 :
デフォルトの名無しさん :04/12/18 17:15:07
char a[]="aiueo"; printf ("%s\n",a[2]); エラーがでますがなぜですか? 予想ではuが表示されると思うのですが・・・
%c使え
>>419 printf("%c\n", a[2]);
×printf ("%s\n",a[2]); ○printf ("%c\n",a[2]); printf ("%s\n",&a[2]); printf ("%s\n",a); この二つも試して違いを調べてみてくれ。
ついでにprintf ("%s\n",a+2); もやった方がいいと思うぞ
425 :
デフォルトの名無しさん :04/12/18 17:39:53
おお!! 凄いレスが! 皆さんサンクスです。 %sは先頭からって感じですねありがトン
printf("%s\n",2[a]); >%sは先頭からって感じですねありがトン おまえはあふぉ
427 :
394 :04/12/18 18:38:57
>>417 それは単にあなたの揚げ足取りだと思います。
それがわかっているなら、あんな質問は出ないでしょう?
429 :
デフォルトの名無しさん :04/12/18 18:55:06
>>426 (;´Д`)?まともに動かないだろそれ。
sizeof(s[0]) == 1 ⇒ 2[s] == s[2]
アドレスと値をゴッチャにしてるうちは悩みつづけそう。
432 :
デフォルトの名無しさん :04/12/18 19:20:06
>>430 「sizeof(s[0]) == 1」という事実と「2[s] == s[2]」という事実が
どうつながるのか意味不明なんですけど。
>>432 「2[s] と書くと、s から 2バイト後ろを指す」
とでも思ってるんでしょう。
s がどの型を指していても (void * は除く)
a[b] と b[a] は等価ですから!
>>430
a[b]とb[a]が等価であると言い張るなら [a,b]と書けても何の不思議もないはずだ。違うか?
違う。
>>434 そこまで言うなら]a, b[でもいいじゃないか。違うか?
0[a+b]ならいけるか
struct DATA{ char *str int num }; この構造体について説明するときどう言えばいい? 「文字型ポインタ変数と整数型変数をメンバに持つ構造体DATA」ってのはおかしい?
構成要素の説明としては普通に通じるとは思うけど 説明って何の為のものかを言うべきなんじゃないのか。
>>438 charポインタとint型変数をメンバに持つ…でいいじゃん。
変に日本語にするとあいまいにならないか?
「整数型」はshort・longも含むし。
>>419 printf("%c\n", 2["aiueo"]);
> 2["aiueo"] この書き方って相手をビビらす以外にまともな使い道ってあるの?
>>427 Cでは、ループ制御は自分でしなければなりません。
whileではなくforを使うなら、ある程度判りやすく書くことが出来ます。
と言う説明でいいのでは?
>>443 こっちならデバッグ用に使うんだけどね。
printf("%c\n", "abcdef"[val]);
#include <stdio.h> int main(){ int a[] = {1,100,10000},*b = a; //アドレスの中身を++してからその値をアドレスとして参照した先の値を表示 printf("1: *b == %d\n",*b++); //上に同じ printf("2: *b == %d\n",++*b); //参照先のアドレスの中身を--してから表示 printf("3: *b == %d\n",--(*b)); //アドレスの中身を--++++した値をアドレスとしてその値を表示した後その値を++ printf("4: *b == %d\n",++*(--b)++); //*bの中身を表示 printf("5: *b == %d",*b); 優先順位だけで見るとコメント文のように実行されると思うのですが、 実際は後置インクリメントは優先順位が高いにも関わらず処理の順番 は遅くなります。 演算子の優先順位と処理の順番は別物なのでしょうか。 return 0; }
訂正します。 >>//アドレスの中身を--++++した値をアドレスとしてその値を表示した後その値を++ //アドレスの中身を--++++した値をアドレスとして参照先の中身を表示
アドレスの中身ってなんだろう・・
>>448 わかりにくい表現ですみません。
アドレスの中身 == メモリのアドレス先に格納されている値
という意味で使用しました。
「b++」という式のを評価した場合、増加前の値だと決まっている。 *b++のような場合は先にbが増えていることもありうるが、 それとこれとは別問題。 C++で自分で++のオーバーロードやってみると、なんとなくわかるよ。
451 :
デフォルトの名無しさん :04/12/18 22:02:05
評価の順番でいえば ++*(--b)++ は ++(*((--b)++))
>>446 インクリメント演算子などは関数に見たてて考えたらいい。
前置の場合はインクリメントさせた自分自身が返されて
後置の場合はインクリメントするが返されるのは元の値、てなふうに
453 :
デフォルトの名無しさん :04/12/18 22:39:30
open()システムコールをコールする関数があります。 その関数は諸事情によりclose()しないまま処理を終了します。 が、条件によってたまにクローズする時もあります。 再びその関数が呼ばれた時 対象ファイルがオープン状態かクローズ状態かを判定する方法ってありますか
>>453 常にcloseしない(orする)ようにしろ。
静的変数に記録するなり、引数と戻り値を使うなりしろ
456 :
453 :04/12/18 22:53:17
closeすると @「ここまでreadした」カーソルが最初に戻ってしまうので カーソルを記録するための処理がかなり増える A何万回とファイルアクセスを繰り返すのでopen close openは負荷になる 上記理由から オープン判定が可能であればopenしっぱなしが良いんだけど 判定は不可能ってことでFAですか?
ありがとうございました。評価順位についてもう一度よく考えてみます
459 :
デフォルトの名無しさん :04/12/18 23:00:27
>>458 ありがとうございます。ヘヴィメタでいいですか?
>>456 =453
完全な解答聞きたかったら環境ごとのスレ行け。
環境に依存するのにFAは無理だろ。
標準では無理だけど
openとcloseのラッパ作るとか。
462 :
453 :04/12/18 23:15:04
あっさりできる方法ってありそうで意外とないもんなんですね 制御の方を見直すことにします。 回答してくれた方々、どうもありがとうございました。
>>457 演算子の優先順位と結合規則でぐぐれ、考える必要も無いぞw
464 :
デフォルトの名無しさん :04/12/18 23:18:44
#define porta (*(int *)0x05) ポインタの基本はある程度理解しましたが、上の意味というか書式の組み合わせがよくわからないっす。 PIC16F84マイコン用のプログラムで、I/Oポートaのレジスタ(アドレス0x05)にアクセスするのですが・・・。 なんでこれでアクセスできるようになるのかよくわからないです。 (*(int *)0x05) ↑ここに"(int *)"があるのがよくわかんないです。で、入れたことにより"* 0x05"がどういう役割を持つのかと。 とりあえず、すでに質問している自分が何言ってるのかすらよくわかりません _| ̄|○ サルな私にも理解できるように、優しく、かつ美しく、そして華やかに教えてください。 お願いしますm(__)m
465 :
デフォルトの名無しさん :04/12/18 23:20:30
>>464 > ここに"(int *)"があるのがよくわかんないです。
整数をポインタにキャスト
>>463 早速ぐぐりました。
演算子の優先順位と結合規則によって処理の順番が決定されるのですね。
ありがとうございます。
VC++の質問ここでしてオッケですか?
468 :
デフォルトの名無しさん :04/12/18 23:38:45
>>465 キャストでしたか・・・。始めたばかりでキャストに頭が回りませんでした。
数学的にカッコを展開してました。 _| ̄|○
もう一度基礎からやり直します。
どうもでしたm(__)m。
わざとらしいので絶 対 にダメだ
おk(ry
>>462 状態を記録した構造体なり何なりをやり取りするようにするくらいしかないんじゃない?
staticな変数に記録って手もあるだろうけどリエントラントにならないし、
色々神経つかわんとならんし。
ファイルハンドル用のint変数を初期値-1にしておく。 open()したら0以上になる。close()したらまた-1を格納しとけ。
473 :
デフォルトの名無しさん :04/12/19 02:51:30
>>403 for?(前処理; まじ?; 再処理)
ですか?
union { T1 t1; T2 t2; } u; で、u.t1 に値をセットしたあとに u.t2 にアクセスするとどうなるんですか? 未定義の動作ですか?
>>474 それを未定義にしたらunionの存在意義がなくなるぞ。
どうして未定義と思ったのか興味ある。解説してよ
すみません、教えてください。 floatの変数を小数点以下n桁で切り捨てるにはどうすればいいのでしょうか? 今はn桁繰り上げてintにキャストしてまたfloatに戻してn桁繰り下げ、という ことをしてるんですが、もっと効率がいい方法ってないでしょうか? float round(float value, int digit) { int temp; temp = (int)(value * pow(10, digit)); return ((float)temp) / pow(10, digit); }
>>478 sprintf()してatof()とか?
&0x0000ffff
>>478 精々、pow(10, digit) を中間変数に保存するとか。
(コンパイラによっては最適化でやってくれるかも知らんが)
あとは…digit の値の範囲限定できるなら
static const double pow10[] = {1e0, 1e1, 1e2, 1e3, ...};
みたいに、表引きするとか。
483 :
デフォルトの名無しさん :04/12/19 13:40:58
> それを未定義にしたらunionの存在意義がなくなるぞ。 こいつunionの存在意義を勘違いしているぼけ。
484 :
デフォルトの名無しさん :04/12/19 13:42:14
> > それを未定義にしたらunionの存在意義がなくなるぞ。 > こいつunionの存在意義を勘違いしているぼけ。 たしかに typedef union { short word; char byte[2]; } foo; とかやってそうだ。で、unionを「そういうふうに使うためのもの」だと思い込んでいさそうな厨だな。
485 :
デフォルトの名無しさん :04/12/19 13:43:33
> close()したらまた-1を格納しとけ。 こいつは、openとcloseの対応関係がすでに把握できないような「おわってる」ソースを 平気でかくぼけだからこういうことを言うわけだ。 もしくは、そういう「おわってる」ソースを書くぼけな会社の先輩に「そういうものだ」と おしえられてそのまま信じ込んでいるぼけ
486 :
デフォルトの名無しさん :04/12/19 13:45:47
> closeすると「ここまでreadした」カーソルが最初に戻ってしまうので > カーソルを記録するための処理がかなり増える っていうか、そんな不安定な状態でオープンしっぱなしってのが ぼけ readするたびに書け!
487 :
デフォルトの名無しさん :04/12/19 13:47:10
> 「b++」という式のを評価した場合、増加前の値だと決まっている。 > *b++のような場合は先にbが増えていることもありうるが、 ねーよ > ありうる ぼけ。 Cの基本中の基本だろうが ぼけ
489 :
デフォルトの名無しさん :04/12/19 13:51:39
2つぐらい別にかいてもいいだろ? ぼけ それにもともと別のに関することだから2つわけて書くのが当然だ! ぼけ
>>487 お前はその基本すら不完全にしか知らないからそういう馬鹿回答が出るわけで。
退散する前に、10種類のコンパイラ、いい加減に言えよ?
センセー ファイル内でしか使わない関数は全部static付けてるんですけど、 コレって何かデメリットあります?
>>493 外部から無茶な使われ方せずにすむ。
名前が衝突しなくなる。
あ、デメリットか。 「後で使いたくなったとき外部から呼び出せなくなる」とか馬鹿が言いそうだが無視しろ。
>「後で使いたくなったとき外部から呼び出せなくなる」とか馬鹿が言いそうだが そんな馬鹿見たことねーよ お前がそう最初勘違いしてただけだろ
>>497 上でとんだ恥かいてる罵倒厨か。おつかれ。
なんか知人のプログラム見たりしたらあまり使われてなかったから何かあるんじゃないかと気になってたんだ。 うん、ありがとうオマイラ ヾ(・ω・*)
500 :
デフォルトの名無しさん :04/12/19 14:42:18
> ファイル内でしか使わない関数は全部static付けてるんですけど、 > コレって何かデメリットあります? ない。積極的につけろ。 せいぜい、処理系によっては、リンク後のmapファイルに関数名がでてこないただの uniqueな番号になってしまうものもある。程度。(たがいはファイル名と関数名をつないで 数字をつけたもの程度になるだけだけど)
501 :
デフォルトの名無しさん :04/12/19 14:44:24
> ここでも読んでなぼくちゃん
>
http://www.st.rim.or.jp/ 〜phinloda/cqa/cqa7.html
とりあえずそのURLだしておけばにげられると思ったぼけか ;-)
だが
> *b++のような場合は先にbが増えていることもありうるが、
が明らかなぼけなのは、そのペイジ見ても同様。
>>501 またえらく遅いレスだな。必死になって調べてましたか?
では、説明してもらおうかね。
503 :
デフォルトの名無しさん :04/12/19 14:49:27
> またえらく遅いレスだな。 まってたのかー えらく必死だね ;-)
また伝説を作るのかい。
>>503 いや、そんな返しいらんからさ、早く説明してごらん、ぼくちゃん。
506 :
デフォルトの名無しさん :04/12/19 14:50:56
あ、わかった! きっと 502 は > *b++のような場合は先にbが増えていることもありうるが、 なんていう知ったかぶりをしてしまった張本人で、それをごまかそうと必死なのか! なるほど。
while(1) printf("ぬるぽ");
>>504 なに?こいつ、前もこんなことしてんのか?
かまうだけ無意味?
>>506 お前からはまともなレスは一切来ないな。
それで会社では「こんな終わってるコード書くなよな〜」なんて後輩いびってるわけ。
屑ですね。ぷ。
509 :
デフォルトの名無しさん :04/12/19 14:52:48
じゃあ、答えかかないほうが、長くひっぱれておもしろそうだな ;-) というわけで、ほかのひとも答え(彼のボケを確実に指摘してしまうような)を かかないでください。 ご協力おねがいします。
ということにしたいのデスウォンドンペリンカーン
511 :
デフォルトの名無しさん :04/12/19 14:53:30
>>507 lintでエラーでるよ。
for (;;) にしろ。
いくらごまかしても、君の特徴はくっきりはっきりぴっかぴか。
513 :
デフォルトの名無しさん :04/12/19 14:54:45
日下部圭子のマンコに挿入
なんでwhile(1)だめなん? 定数使ってるから?
>>513 いや、日下部ならもうちょっとマシなこと言うぞ。
516 :
デフォルトの名無しさん :04/12/19 14:56:27
ふふ。 > *b++のような場合は先にbが増えていることもありうるが、 これで何時間ひっぱれるかな ;-) がんばれば20時間ぐらいひきずりまわしてあそべるかな ;) 1週間は無理か。 しったかぶりをしてしまって、必死になってしまっている厨が、 ひーひーいって、脈拍があがっている状態を長く保たせたほうがおもしろいよね。 で、 かれが「ふう、これでごまかしきれた」と思ったころに、また 「 *b++のような場合は先にbが増えていることもありうるが、」と ひとこと書くだけでいいのです。 ごきょうりょくおねがいします ;-) (そうすれば、また必死になってあばれるでしょうから^^)
517 :
デフォルトの名無しさん :04/12/19 14:57:08
なるほど今週のお題か > 『 *b++のような場合は先にbが増えていることもありうるが』
518 :
デフォルトの名無しさん :04/12/19 14:57:27
こわがりスキー
519 :
デフォルトの名無しさん :04/12/19 14:57:33
さすがに1週間はむりだろ? 「本日の」ぐらいでは?
ものすごくわかりやすい自作自演だなw
521 :
デフォルトの名無しさん :04/12/19 14:59:07
彼専用のIDが表示されているかのような自作自演
522 :
デフォルトの名無しさん :04/12/19 14:59:14
ふえているコンパイラーを10個あげろ? もしくはその挙動が不定や未定義であるという記述を規格にみつけろ? いまごろひっしこいて規格をしらべてるのかな。 あ、標準規格とか読むぐらいのまともなやつならそんなまぬけなこと言わないか。 せいぜいgoogleしまくってる程度だろうなあ。(でもぜったいにみつからないだろうが。 増えているような場合は)
で、10種類は?
524 :
デフォルトの名無しさん :04/12/19 15:00:07
> いや、日下部ならもうちょっとマシなこと言うぞ。 かれはいまヨーロッパ旅行中のはず。 fjに書いてあった。
525 :
デフォルトの名無しさん :04/12/19 15:00:27
「おいすー^^」 「あ、キチたん インしたお!」 「よーし、今週も1スレ潰すぞー^^」 「おー^^」
527 :
デフォルトの名無しさん :04/12/19 15:01:06
その前は何だったっけ・・・・・・多すぎて思いだせん
528 :
デフォルトの名無しさん :04/12/19 15:03:04
まあ、あばれている彼の目的は、 自分が 「 *b++のような場合は先にbが増えていることもありうるが、」 などとまぬけなしったかぶりをしてしまったことを 葬り去るためなんだろうけど。 どうせ匿名なのになんで、そんなに必死になるのだろうか?
*b++のような場合は先にbが増えている、ということはありませんでした。 手元のgcc、bccで試しましたがいずれも結果は私の考えが間違っていた ことを示しておりました。もう二度とあのようないい加減なことは書きませんので ご勘弁ください。
>>528 こいつは先に増えていることは在りえないとさっさと証明すれば終わることなのに、
何をこんなに粘着しつづけているのか。
終わっちゃった
数学ができないプログラマは何を証明すればいいかわからない
>>530 ついに証言を偽造する始末。
厨必死すぎw
>>535 はいはい、もう終わったからねー、粘着しないで下さいゴン中山きんにくんせいや
537 :
デフォルトの名無しさん :04/12/19 15:20:32
>>530 さっさとそう認めてあやまればいいのにね。
なんであんなに暴れるんだろう。
538 :
デフォルトの名無しさん :04/12/19 15:21:16
え、今日のおやつ、こんだけ?
539 :
デフォルトの名無しさん :04/12/19 15:21:25
> こいつは先に増えていることは在りえないとさっさと証明すれば終わる あのー...証明もなにもCの基礎の基礎だとおもうぞ。 i = 1 + 2; で i に3が入っていることを証明するよりむずかしい。
540 :
デフォルトの名無しさん :04/12/19 15:24:37
え? クサカベせんせいの真似をしているつもりだったわけ? わたしは直接習ったことあるけど。 そんなに ぼけ ぼけ 言っているのはきいたことないぞ。 それとも、たまたまわたしのクラスが優秀だっただけ?
>>539 ANSI-C規格が証明であり基礎だろう
542 :
デフォルトの名無しさん :04/12/19 15:27:18
いまどきANSI-Cなんていういいかたするやつがぼけ
543 :
デフォルトの名無しさん :04/12/19 15:27:53
ANSIみればbが先に増えるわけねーことは一目瞭然。 っていうかANSI以前からそうだし。
544 :
デフォルトの名無しさん :04/12/19 15:28:35
っていうか、そんな「基礎中の基礎」をANSI規格がうんぬんいわなきゃいけないから 厨っていわれるんだろうに。
日曜だねぇ。 中高生はもう冬休みなのか?
546 :
デフォルトの名無しさん :04/12/19 15:31:22
中高生以下ののうみそしかないやつがなんかいってるー
547 :
デフォルトの名無しさん :04/12/19 15:33:56
自作自演て難しいんだな。
548 :
デフォルトの名無しさん :04/12/19 15:34:12
*b++ 程度の基本中の基本でまちがえたのが、よほどくやしかったんだね。
549 :
デフォルトの名無しさん :04/12/19 15:34:49
っていうか、そこわかってないで「C使ってる」とはいえないもんな。
550 :
デフォルトの名無しさん :04/12/19 15:35:43
きょうは「*b++のような場合は先にbが増えている」をつまみに 酒が1升ぐらい飲めそうだな。
厠必死スキー
おお、絵に描いたような自作自演。
553 :
デフォルトの名無しさん :04/12/19 15:39:12
どれとどれがおなじ? > 552
554 :
デフォルトの名無しさん :04/12/19 15:39:57
それにしてもここレベル低いなあ。
555 :
デフォルトの名無しさん :04/12/19 15:40:20
見るまでもわかるだろw
556 :
デフォルトの名無しさん :04/12/19 15:40:24
printfの戻り値は見たほうがいいのでしょうか?
559 :
デフォルトの名無しさん :04/12/19 15:45:17
561 :
デフォルトの名無しさん :04/12/19 16:02:56
で、今日あおっていたのは、void氏の弟子なんですか?
日曜日だってのに、えらいスレ進行速いなぁおい。 引きこもってないで遊びに行きなさい。 …ん?おぢさんは仕事中だ。orz
563 :
デフォルトの名無しさん :04/12/19 16:16:41
562もかなりのこわがりすぎーだな。
>>479 >>482 レスありがとうございます。
乏しい知恵を絞ってやっと思いついた方法なんですが、ひょっとして
もっといい方法があって、自分だけ回りくどいことをしてるのかな、と
思ってました。
方法自体はそれほどとんでもなくおバカなわけではないんですね、
安心しました。
>>564 浮動小数点数に対して、切り上げとか切り捨てとかを
真剣に考えようとする事そのものが、かなりおバカだとは思うけどな。
いや、なんでもない。 忘れてくれ。
「b++」という式のを評価した場合、増加前の値だと決まっている。 *b++のような場合は先にbが増えていることもありうるが プ
入力バッファをクリアする際にfflush(stdin)を使うのは間違っていると、 ある本に書いてありましたが、入力バッファを消すにはどのようにしたら 良いのでしょうか。
読み捨て
clrstdin();
>>571 >>572 \nになるまで読み捨てるか、clrstdin();を使用するのですね。
これからはそのようにします。ありがとうございます。
>>572 今試してみたのですがclrstdin();がコンパイルできませんでした。
stdio.hにないのかと思い辞書で調べましたが、clrstdin()はありませんでした。
そこでgoogleで「clrstdin」で検索をかけたのですが1件もヒットしません。
どのような関数なのか教えてくださいませんか?お願いします。
>>574 clrstdinは標準ライブラリ関数には含まれていないから諦めろ。
>>575 はい、諦めます。教えて下さりありがとうございました。
578 :
デフォルトの名無しさん :04/12/20 06:57:39
> 「*b++のような場合は先にbが増えていることもありうるが」 ふふ
570じゃないけど、rewind(stdin)はどないな感じなんですか?
>579 >571-576みたいな感じ。
581 :
デフォルトの名無しさん :04/12/20 14:26:06
582 :
385 :04/12/21 00:17:56
質問です 関数の外に書いた変数宣言は、どのタイミングで領域を確保するのでしょうか?
名前消すの忘れてた ○| ̄|_
584 :
デフォルトの名無しさん :04/12/21 00:22:33
というと、exeを実行した時点ででしょうか?
簡単なソースでアセンブリソース見て見れ。
ごめんなさい、アセンブラわかんないです デバッガなどで調べてみます ありがとうございました
「b++」という式のを評価した場合、増加前の値だと決まっている。 *b++のような場合は先にbが増えていることもありうるが
590 :
デフォルトの名無しさん :04/12/21 04:51:25
で、10種類は?
すみませんが教えて下さい。 下の様なプログラムを組んだところ、「関数は値を返すべき」という忠告が出ました。 どこか間違ってますでしょうか?分かる方、ご教授の程お願いします。 #include <stdio.h> int beki(int a,int b); main(){ int x,y,z; x=2; y=3; z=beki(x,y); printf("%dの%d乗は%dです。",x,y,z); } int beki(int a,int b){ int zz,i; zz=1; for(i=0;i<b;i++){ zz=zz*a; } return zz; }
main
>>591 >どこか間違ってますでしょうか?
あんたがプログラミングをしようと思うこと。
594 :
デフォルトの名無しさん :04/12/21 06:48:11
生き方
分かりました。ありがとうございました。
>>591 マジレスすると、main()の戻り値が省略されているので、intを返すとみなされている。
main()の最後に return 0; でも付ければ警告は消えるだろ。
時間を使わないで乱数を使いたい場合はどうしたらよいでしょうか?
rand()の種のことだろうか・・・
>>598 そうです
種をまきたいんですが
time.hが使えないんですよ
>>599 何らかの方法で毎回変わる値を作ればいい。
起動回数でも何でもいい。
起動回数なんてどうやって汁ですか? ぐぐってもわかりません
>>601 ファイルに作るなりフラッシュに書き込むなりすればいい。
詳細は環境依存。
他にも、状況によって変化していく様な、
どこかのメモリ領域の内容を種にするという方法もある。
とにかく、藻前自身が何らかの方法で毎回変化する値を実装すればよいのだ。
マイクから周囲の雑音を取り込んでSeedにする!(・∀・)
srand((unsigned)argv[0]);とかいいんじゃない? 他にも適当なローカル変数のアドレスを種にするのもまたよろし。
void initialize_random_number() { int seed; printf("乱数の系列を初期化します。\n"); printf("乱数のシード(任意の正の整数):"); scanf("%d",&seed); if(seed<1)seed=1; srand(seed); } の中で乱数のシードという意味がわかりません。
うっ! Delphi
608 :
デフォルトの名無しさん :04/12/21 17:20:02
ふつうプロセスIDだろ > たね
いやらしい
610 :
デフォルトの名無しさん :04/12/21 19:14:39
> return 0; でも付ければ ふつうEXIT_SUCCESS
>>610 >ふつうEXIT_SUCCESS
それ、素人。
612 :
デフォルトの名無しさん :04/12/21 19:31:30
いいえ。プロはみんなそれ
613 :
デフォルトの名無しさん :04/12/21 19:31:53
(しかも、うちのOSは正常終了が0じゃない)
> (しかも、うちのOSは正常終了が0じゃない) 誰も聞いてないです :-)
>>599 大抵、/dev/randomみたいな乱数作ってくれる仕掛けがあるから、それで初期化しろ。
>>612 nmitaみたいに害毒を垂れ流すのはそろそろよしてくれんか。
617 :
デフォルトの名無しさん :04/12/21 20:28:52
618 :
デフォルトの名無しさん :04/12/21 22:11:20
データをy=exp(bx)で近似するときのa,bを求めるプログラムです。 x[i],y[i]にはデータが入っています。 bの値がかなり大きく出てきてしまいます。 x1 = x2 = y1 = xy = 0; for(i=0;i<n;i++) { x1 += x[i]; x2 += x[i]*x[i]; y1 += log(y[i]); xy += x*log(y[i]); } b = (n*xy-x1*y1)/(n*x2-x1*x1); a = exp((y1-b*x1)/n);
xy += x*log(y[i]); このへん?
620 :
618 :04/12/21 22:22:43
>>619 すいません、どういうふうに変えればよいのでしょうか?
正直、どこが間違っているのかわからないんですが。
どうでもいいけどaってなんや
>>621 すいません。
「y=a*exp(bx)で近似する。」の間違いでした。
623 :
デフォルトの名無しさん :04/12/22 00:59:28
回答期待age
データの指数関数への当てはめを直線への当てはめに還元するやり方ね、 俺もやったことあるんだけど、かなりデータ数が多いか、最初からまとまった データが得られていないとうまくいかない。そのときは仕方がないから MathematicaのFindfit使っちゃった。
xy += x[i]*log(y[i]); こうかな?
おっぱいが大きい人が好みなのですが、どうすればよいでしょうか?
char buffer[32]; strncpy(buffer, "AAA", 3); strncat(buffer, " ", 25); strncpy(buffer, "BBB", 3); スペースを25個追加する時に、いちいち" "と 記述しないといけないんでしょうか? うまい方法があったら教えて下さい。
>>627 char buffer[32];
char *p = buffer;
int i;
for(i=0;i<3;i++) *p++='A';
for(i=0;i<25;i++) *p++=' ';
for(i=0;i<3;i++) *p++='B';
*p = '\0';
char buffer[32]="AAA BBB";
>>627 よくみたら最後がstrncpyじゃん
ひっかけ?
char buffer[32]="BBB";
strncat(buffer, "BBB", 3);
が正しかったです。ひっかけじゃないです。
>>629 さんを参考にコードを作ってみました。
ありがとうございました。
char buffer[32];
getSpace(31, (char *)buffer);
void getSpace(int icount, char *p)
{
for(int i=0;i<icount;i++)*p++=' ';
*p++= 0;
return;
}
>>627 char buffer[32], *p = buffer;
strncpy(p, "AAA", 3);
memset(p += 3, ' ', 25);
strncpy(p += 25, "BBB", 3);
*(p += 3) = '\0';
sprintf(p, "AAA%25sBBB", "");
636 :
デフォルトの名無しさん :04/12/22 16:50:41
C言語のacceptのエラー処理で、 while (1){ struct sockaddr_in client_sin; memset((void *)&client_sin, 0, sizeof(client_sin)); len = sizeof(client_sin); accepted_socket = accept(listening_socket, (struct sockaddr *)&client_sin, &len); if (accepted_socket == -1) { if (errno != EINTR && errno != ECONNABORTED) { perror("accept"); exit(1); } continue; } break; } と、書いてみたのですが、 acceptの正しいエラー処理がわかりません。 どのような処理を施せばよいでしょうか。
>>636 acceptはC標準にはありません。以上。
すいません InvalidateRectで全画面描画すると 凄いチカチカするんですが これはもうどうしようもないんでしょうか?
>>639 InvalidateRectってそういうことするためのものだ。
範囲が狭ければクリップ範囲を指定すれば?
643 :
デフォルトの名無しさん :04/12/22 21:08:54
#include <stdio.h> char my_tbl[10] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, } ; int main( void ) { char* data ; data = my_tbl ; printf( "%d\n" ,sizeof(data) ); //★ return 0 ; } ★の所で、10というサイズを得たいのですが、なにか良い方法は無いでしょうか? ポインタが指し示す先のmy_tblのサイズを得たいのです・・・ 無理でしょうか?
644 :
デフォルトの名無しさん :04/12/22 21:12:03
無理
マジっすか
うん
領域越えてるよ 文字列は最後に\0が入るから それだと11バイトを入れてる
aからbまでの最短距離を求めるプログラムを作ろうとしています。 ●→●→● b ↑/↑/↑ ●→●→● ↑/↑/↑ a ●→●→● 条件が @図で見ると●が等間隔に見えるが、実際は等間隔ではない。 A/は斜め上のみ移動可能とする。 B進める方向は、右、上、斜め上の3方向のみ。 です。参考になるプログラムを探しているのですが、巡回セールスマン問題 というプログラムを見つけたのですが、やりたい事と少し違う?感じがします。 このプログラムを解くのに参考になるWebページを知っている方、 又は、良い検索キーワードを知っている方が居ましたら教えてください。 よろしくお願いします。
>>650 ・ダイクストラのアルゴリズム
・隣接リスト表現(adjacency matrix)
>>650 ちなみに、「巡回セールスマン問題」とは、すべての点を周り尽くす最短距離とその経路を
求める問題で、NP問題、すなわち、全数検査をしないと求まらない問題に分類されている。
あ、ごめん、adjacency matrixは正しい日本語訳は「隣接行列」だったわ。 どちらにしろ、それで解けるから。
655 :
デフォルトの名無しさん :04/12/22 22:16:40
>>650 ●での最短距離と直前の●を求めて行けば解決
わたしは女です。o(`ω´*)o 勝手に変な私を想像しないでください。
あーそうだ。ついでに 「有向グラフ」もぐぐっとけ。要するに、あれだ、aからbとbからaの「重み」が違うって事。 一方通行を隣接表現してしまうと一方通行の表現が面倒になるので、通常は 逆方向を、最長経路よりも長いであろう値(99999999とか)にする。
659 :
デフォルトの名無しさん :04/12/22 22:20:04
キモ
>>657 おっと失礼、女性でしたか。
では改めて変な想像させてもらうよ。
おお、もうレスが。
>>651 さん
>>653 さん
>>655 さん
ありがとうございます。さっそく調べます。
>>657 さん。想像に釘さして申し訳ありませんけど、自分九州男児ですから。(つД`)スマソ
662 :
◆bGJcuGhzXI :04/12/22 22:41:51
cvd
663 :
デフォルトの名無しさん :04/12/22 23:29:26
>>650 最短距離が見付からなくとも死にはしない。
今ふと思ったんですが、 #include "hoge1.h" #include "hoge2.h" とかってなってたら、必ず hoge2.h が hoge1.h の後に取り込まれるんですか? なんか優先順位的なものがあるような気がしました。
ありません
>>665 includeというものは
その位置に、そのファイルの内容を入れるという意味だ
優先もクソも無い
hoge1.h の内容が #define foo 1 int fuga; だとして int func(void) { #include "hoge1.h" fuga = foo; return fuga; } は int func(void) { #define foo 1 int fuga; fuga = foo; return fuga; } と同じです
頼むからincludeする順番を指定されるようなヘッダファイルを書かないでくれよ。
インクルードガード
671 :
デフォルトの名無しさん :04/12/23 00:06:48
double pow(double,double)べき乗関数を使おうと考えているのですが、
調べると
>数学関数によって定義域エラーが検出されると、
>errnoにEDOMの値が設定される。
>値域エラーが検出された場合は、
>errnoにERANGEの値が設定される。
>このとき数学関数はHUGE_VALの値を返す。(errno.h参照)
http://www.geocities.co.jp/SiliconValley-Bay/5543/mahou/c/math.html がありました。
質問;
定義域エラーは関数に入る前に制限をすればいいと思いますが、
範囲エラー(値域エラー)について判断するプログラムをどうかけばいいのか
をご教授ください。よろしくお願いします。
672 :
デフォルトの名無しさん :04/12/23 00:09:23
>>652 惜しい!「全数検査をしないと求まらない(と思われている)問題」だ
そんなこと、どうでもいいんですけどね
>>671 関数にエラーかどうか判断してもらえばいいじゃん。
それが嫌なら、適当な値で線引きしとけ。
もし、書いちゃったとしたら、優先順位を変更するような 命令はあるんですか?
ない。
何をそんなに気にしているのか分からん。
インクルードの話が出たので・・・ 例えば hoge.h で宣言される関数が stdio.h を使用する場合、 hoge.hの中でstdio.hをインクルードするべきですか? それともhoge.c、およびhoge.hで宣言される関数を使うソースで インクルードファイルを羅列するべきですか? (すべてのヘッダに多重インクルードガードがされてる前提。)
>>678 FILEとかを引数に持つのなら stdio.hをincludeするしかないだろ。
>>678 ん?たとえばhoge.hにvoid func(void);ってプロトタイプが宣言されていて、
そのfunc()(定義はfunc.cにあるとする)内部でprintfやら何やら使って
いたとしても、
> hoge.hの中でstdio.hをインクルードするべきですか?
> それともhoge.c、およびhoge.hで宣言される関数を使うソースで
> インクルードファイルを羅列するべきですか?
↑どちらも必要ないぞ。そのへんはわかってる?
ヘッダは全てそれ単体でincludeできるようにするのがアタリマエだろ。 「先にxxx.hをincludeしておいてください」とかやられたらかなわん。
訂正 ×:定義はfunc.cにあるとする 〇:定義はhoge.cにあるとする
別に設計思想て言うか好きで良いんじゃね? 個人的には単体includeで作るが 会社のは単体ヘッダだよ。 つまり、ヘッダにヘッダをincludeするなって意味だね。 必要な定義等がある場合、まさしく先にincludeが必要ってなる。 理由は他環境に移植や、ライブラリの保守や可読性とか… 例えば 多重インクルードガードがされていて、 目的のヘッダが何処で実際に展開されているのか分り難いとかを防ぐとか… include先のヘッダに、更にincludeがしてあって、 そヘッダもincludeがしてあって…と延々となっていて それが、多重インクルードガードで実際にどうなってるか分らないとかね。
プリプロセッサで処理すればいいだけでは?
685 :
デフォルトの名無しさん :04/12/23 08:41:55
>>678 ヘッダ内で、#ifdef使って、再定義を回避する。
686 :
デフォルトの名無しさん :04/12/23 08:45:18
#pragma once
>>688 C99以降はよく知らんが、そんなの仕様にあったっけ?
690 :
デフォルトの名無しさん :04/12/23 10:32:01
>>683 // hoge.h
struct hoge { };
// hage.h
struct hoge* hage();
// hige.h
void hige(struct hoge*);
// hogo.h
#define hogo() hige(hage())
// main.c
#include "hogo.h"
main()
{
hogo(); // pass, but undefined behavior
}
よくあるケースだが、hogo マクロを使うだけな場面で
hogo マクロの実装詳細にいちいち立ち入らないと
必要なヘッダや引用すべき順序がわからないのは
巨大で複雑なソースとの付き合い方として苦しくねいか?
別にマクロを使ってるからどうのってわけじゃなく、
#include "hige.h"
main()
{
hige(); // error
}
でも同じことだよな
691 :
デフォルトの名無しさん :04/12/23 15:12:23
> FILEとかを引数に持つのなら stdio.hをincludeするしかないだろ。 こいつぼけすぎ。 べつに先にstdio.hをインクルードしtればいいじゃん。
692 :
デフォルトの名無しさん :04/12/23 15:14:07
> ヘッダ内で、#ifdef使って、再定義を回避する。 こいつもおおぼけ、それが678の行っている「多重インクルードガード」のことだろうが ぼけ
FILEを引数に持つのなら止むを得んが、 普通FILE*なので何もインクルードする必要なし。
694 :
デフォルトの名無しさん :04/12/23 15:15:37
> hogo マクロを使うだけな場面で > hogo マクロの実装詳細にいちいち立ち入らないと > 必要なヘッダや引用すべき順序がわからないのは いや、そんな実装がそもそもまぬけ
695 :
デフォルトの名無しさん :04/12/23 15:16:46
> 普通FILE*なので何もインクルードする必要なし。 こいつぼけ。たとえポインターでもincludeしてないときはエラーだ。
696 :
デフォルトの名無しさん :04/12/23 15:20:13
>>696 向こうのスレにレスがついているようだが
698 :
デフォルトの名無しさん :04/12/23 15:43:06
C言で、ある文字列を同じ座標に繰り返し出力させたいのですが どうしたらいいでしょうか?教えてください エスケープシーケンスはOSの関係上使えませんでした
699 :
デフォルトの名無しさん :04/12/23 15:44:05
>>694 それはあんたの実装とやらを聞いてからでないと
同意も反駁もしようがないな
700 :
デフォルトの名無しさん :04/12/23 15:44:55
うちはまともな実装なので、必要なヘッダーふぁいるは1つかせいぜい2つだな
701 :
デフォルトの名無しさん :04/12/23 16:04:18
|
|
|
|
/V\ ,J
>>700 /◎;;;,;,,,,ヽ
_ ム::::(;;゚Д゚)::| ジー
ヽツ.(ノ::::::::::.:::::.:..|)
ヾソ:::::::::::::::::.:ノ
` ー U'"U'
703 :
デフォルトの名無しさん :04/12/23 16:26:37
環境を言われても誘導しかできないな、このスレでは
>>699 三田典玄みたいな害毒を垂れ流す奴に餌をやるのはよしてくれ。
すいません、教えてください。 ファイルから16bitのPCMデータをfreadで2byteずつ読んできて、 上位ビットを bit-high(char), 下位ビットを bit-low (char)に 入れました。これを10進の -32768 〜 32767 に戻して、 すこしこねまわして、最後に再び byteに戻してファイルに 書きたいんですけどうまくいきません。 実はFortranでの数値計算が専門で、Cの知識は厨房レベル です。ですが・・・ とうしてもなんとかしたいので教えてください。 よろしくお願いします。
>>705 どううまくいかないのか分からないと(ry
>>705 です。
long high-10d, low-10d, signal;
char bit-high, bit-low;
...
high-10d = (long)bit-high;
low-10d = (long)bit-low;
signal = high-10d * 256 + low-10d;
...
とかやって10進にしようかとやってみましたがダメダメでした。
FFTとか、GAとかは得意なんですが、Cはこんなあほレベルなんです。
ほんとすいません。
> 上位ビットを bit-high(char), 下位ビットを bit-low (char)に 上位バイト・下位バイトっていいたいのか?
> long high-10d, low-10d, signal; > char bit-high, bit-low; 変数名がムチャ。
そもそもCって変数名に「-」使えたっけ? 規格では[a-zA-Z_]だけだった気がするんだが
>>707 なにがダメだったのかよくわからんが、
それだと文法エラーにならんか?
かぶった orz ついでに数字を入れ忘れた(´・ω・`) [a-zA-Z_][a-zA-Z1-9_]か
>>708 あ、そうです。間違えました。すみません。上位8bit, 下位8bitと考えても
いいですね。ちなみに、エンディアンとか、昨日覚えたぐらいのレベルです。
ポインタとか、構造体は知ってます。
あー ほんとにダメダメですね。
文法エラーの件は。。。 実際には違う変数名を使っています。
>実はFortranでの数値計算が専門 これも怪しいもんだな…
とりあえず、charじゃなくて、unsigned charにしてみれ。
>実はFortranでの数値計算が専門 一応、学位持ちです。論文も多数あります。
> -32768 〜 32767 に戻して あと、↑がしたんだったら、signalはshortの方がいいんじゃないの? それ以外に、エンディアンだの符号拡張だのいろいろ問題がありそうだが、 何がしたいのかはっきりせんから、レスも適当だが。
Cでは変数の中に入ってる数字が10進か16進かでの区別はないよ
ファイルのフォーマットは?
>>718 符号付きの整数を上下8bitずつに分解して処理するということが
そもそも何の意味があるのかさっぱり見当つかんのよな。
>>705 です。ご迷惑をおかけします。
したいことは、WAVファイルの音楽データに、自作の演算(FFTなど)をかけて
エフェクト処理したいだけです。正直、10進数をプログラム上で演算する知識
しか持ち合わせていないので、2byteでファイルから読んできたデータを、
どうやって10進数にするか? それをどうやって2byteにもどしてファイルに
書き込む処理をするか? が知りたいのです。
fread, fwrite を使ってステレオ → モノラル変換するようなサンプルプログラム
を入手したので、データを読んで書く、というような操作は一応できています。
波形を弄くろうとしたら・・・ ダメダメというわけです。
複素数や特殊関数の演算はしょっちゅうでも、longだintだcharだのは、
Fortranの数値計算にはほとんど使わないので、専門以外のことは
このぐらいの知識しかないんですよ・・・ すいません。
>>720 ファイルのフォーマットは。。。 バイナリだろう、としかわかりません。
8ビット2チャンネルじゃないのか?
>>722 読み込めばそのまま10進で扱えますYO
int a = 0xff; // 16進で入れる
a += 10; // 10進で演算
エンディアンが違うなら上位下位の入れ替えが必要だけど
そもそも16bitでfreadせずに、char単位で読み書きすればいいだけの話じゃないの?
>>702 環境は、VC++6.0で
OSはXPです
おねがいします
>>724 すいません、C言語のエンディアンコードって何処に載っているのでしょうか?
ちなみにWavに関する質問者とは別人です
>>725 >そもそも16bitでfreadせずに、char単位で読み書きすればいいだけの話じゃないの?
いいえ、逆なんです。入手したサンプルソースが、1byte(char)単位で読むプログラム
だったんですよ。fread 使って 16bit (2byte)単位でで直接ファイルから読めるんですか?
※わたしはそれぐらいCは無知なんです・・・
だったら話は簡単なんですけど。
こんな感じ?ファイルのフォーマットがわからんから、lowとhighの 読み込み順序を逆にしなければいかんかもしらんけど。 unsigned char low; unsigned char high; short signal; fread(&low, 1, 1, fp); fread(&high, 1, 1, fp); signal = (short)(high << 8 | low);
730 :
デフォルトの名無しさん :04/12/23 17:19:47
> fread 使って 16bit (2byte)単位でで直接ファイルから読めるんですか? 読めます
>>729 ご丁寧にありがとうございます。今日は自宅で、Linuxがないので
明日に職場で試してみます。
>>730 私もそこは見てみました。ですが・・・ 素人には難しいですね。
>>731 Thanks !!!
>>728 >※わたしはそれぐらいCは無知なんです・・・
「Cは」?「プログラミング基礎は」じゃないか?
734 :
698=726 :04/12/23 18:17:12
分からないのでおねがいします。
735 :
デフォルトの名無しさん :04/12/23 18:19:28
737 :
デフォルトの名無しさん :04/12/23 18:54:40
>>736 そうですか・・・失意体前屈
回答ありがとうございます
どんな下手なCGでもかまいません。 オーロラの3DCGをVC++6.0で描いてください。 誰か私を助けてください(つ_T) それとプロジェクトの設定のとこのMidlって何か教えてください・・・orz
>>729 でお教え頂いたのですが、
high の8bit (char) と low の8bit (char)を10進に変換する方法は、
highをビットシフトして、lowとの論理和をとる・・・
signal = (short)(high << 8 | low);
はお教え頂いてわかりました。演算した結果(signal)を
再び上下8bitにわけるには
high = ((unsigned char)signal) >> 8 ;
low = ( high << 8 ) & (unsigned char)signal ;
でいいですか? いろいろすみませんです。
>>740 high = (unsigned char)(((unsigned)(signal & 0xff00)) >> 8);
low = (unsigned char)(signal & 0x00ff);
high = (unsigned char)(signal >> 8); low = (unsigned char)signal;
ぇsignedだったのか・・・反射的にレスしちまって前見てなかった・・・orz
>high = (unsigned char)(((unsigned)(signal & 0xff00)) >> 8);
>low = (unsigned char)(signal & 0x00ff);
high は、signal を 255.0 とで&とって.。。。右シフト、了解です。わかりました。
low は0.255と&ですね。相変わらずわたしは論理積と論理和がわかってなかった・・・
でも、変数の範囲を考えると、
>>742 さんのやり方でも切れるんですね。
勉強になりました。
なお、ちなみに私、low high がそれぞれ "unsigned char" でいいのか悪いのか、
わかってません。high のほうは signed でないといけないような・・・
そこだけ注意してやってみます。
>>745 >high のほうは signed でないといけないような・・・
馬鹿タレ。
lowとhighはsignalを作るための部品でしかないから
unsignedで何の問題も無い。合成した結果がsignedならいいんだろ。
>>746 すいません。ありがとうございました。
しかし、この板すごいっすね〜 感心しました。
748 :
デフォルトの名無しさん :04/12/23 20:54:51
scanf関数を使って、入力待ちの時に、エンターキーだけで 入力終了させるようにするにはどうしたらいいですか 教えてください
>>742 のはsignalがunsignedという条件ではうまくいくけど
signalがsignedだとうまくいかない。あしからず
>>749 うまくいかないっていうか、「うまくいく保証がない」だよね
>>748 …無理だと思うが…。方法があったら俺も知りたい。
環境が許すなら、getch()を使えばいいだけだが。
今、特定のメモリ領域からビット数を指定してデータを 取得するコードを書いてます。 メモリからリードする際に4バイト固定かつ4バイトアラインが存在する という条件があり、ビット指定は 「オフセットxxBit目からyyBit分」 という指定をされます。オフセットは0から始まります。 例えば、21bit目から95bitリードしろという指定が来ると int a[4]を用意してa[0]の21ビット目からa31ビット目,a[1],a[2], a[3]の0ビット目から19ビット目にデータがリードされます。 これを、int b[4]を用意し、b[0],b[1],b[2]の0ビット目から30ビット目に 詰めるように格納したいのですが、楽にやる方法が考え付きません。 どなたかご教授お願いします。
>>753 効率無視していいのなら、1bitずつコピーするのが楽。
755 :
デフォルトの名無しさん :04/12/23 21:34:33
>>753 logical_shift_left(array, size, count); みたいな関数作っといて
とりあえずシステムテスト
後でアセンブラでその関数をチューニング
あ? 「楽に」だっけ
シラネーヨ
>>754 書いているものの特性上、ある程度処理効率を考える必要があるため
1bitコピーはなるべく避けたいと思っています。
言葉が足りなくて申し訳ありません。
>>755 シフトでやろうと考えたのですが、いい考えが浮かびませんでした。
おっしゃっている関数が具体的にどういう感じのコードを記述すればいいか、
教えていただけませんか?
「楽に」というのは言葉のあやです。かれこれ2時間ぐらい悩んでいるので・・・
> b[0],b[1],b[2]の0ビット目から30ビット目に なんで31ビット目だけ使わないの?
>>757 例では、要求が95ビットだけのため、
31ビット目はどのような値でも変わらないからです。
自分の書き方がマズかったでしょうか?
b[0],b[1]は32ビット全部使うんです。
でb[2]は31ビット目は上記の理由で必要ないということです、
759 :
デフォルトの名無しさん :04/12/23 22:03:31
>>756 どういう感じって、ごくオーソドックスに
a[i]=a[i]>>n|a[i+1]<<(31-n);
とか書いときゃええやん、どーせ C だし
C で書いている以上は実行時のサイクル数は保証外
サイクル数を保証させたければアセンブラかハード
>>759 なるほど、そのコードなら確かにできますね。
普通に思いつかなかった。。。疲れてるのかなw
処理効率については、サイクル数を厳格に保証しなくてはならない
ほどハードなシステムではないので、そこまで気にはしてないのですが、
ハードとの絡みがあり、ある程度は高速に処理させたいという要求がありまして。
かといってハード側でアライン関係の処理をするとセレクタが増大するため
おいしくないとのことでソフト側でやってたりするんですが・・・
#include <stdio.h> int main( void ) { typedef struct { int data1 ; struct hoge { int data2 ; }a[30]; }HOGE ; HOGE test[2] ; printf( "%d\n", sizeof(test[0].a[0].data2) ) ; } こんなことしようとしてるんですが、見辛いですかね? 実際現場でこんな感じのやり方してる人いますか?
少し寝ようと思いますので、即レスはできませんが、 なにかアドバイスがあればよろしくお願いします。
763 :
デフォルトの名無しさん :04/12/24 03:24:10
> 規格では[a-zA-Z_]だけだった気がするんだが 「気がする」とかいってるあたりがだめすぎ
764 :
デフォルトの名無しさん :04/12/24 03:26:16
> Cだけでは不可能 なわけねーだろ。十分可能だ。
765 :
デフォルトの名無しさん :04/12/24 08:10:41
実行ファイルのpathを特定したいのですが何かいい方法あれば教えてください。 同じディレクトリの設定ファイルを読みたいのですが。 環境依存だったらDOSでお願いします。 コンパイラはLSIC試食版で。
766 :
デフォルトの名無しさん :04/12/24 08:13:41
argv[0]
767 :
デフォルトの名無しさん :04/12/24 08:13:44
argv[0]
768 :
765 :04/12/24 08:15:15
ちょっと試してみます。
769 :
765 :04/12/24 08:19:22
できました。 環境依存しないのは難しいですか?
>>748 >>751 #include <stdio.h>
int main(void)
{
int ch;
char ss[10];
puts("入力");
printf("->");scanf("%c", ss);
/*[enter]のみ入力*/
printf("d=%d, x=%x\n", ss[0], ss[0]);
return 0;
}
772 :
デフォルトの名無しさん :04/12/24 09:35:43
> 環境依存しないのは難しいですか? sprintf(buf, "which %s", argv[0]); system(buf);
773 :
デフォルトの名無しさん :04/12/24 09:38:10
> printf(�"%d\n",�sizeof(test[0].a[0].data2)�) ; なんのためにタグつけてんだ ぼけ sizeof(hoge.data2) でいいだろ
はい、そうします。
776 :
デフォルトの名無しさん :04/12/24 14:30:35
#include<stdio.h> int hoge(int *); int main(void){ int i; int *pi; pi = &i; i = 5; printf("%d %d\n", i, hoge(pi)); return 0; } int hoge(int *pi){ return *pi * 2; } 結果として 10 10 が欲しいのですが、5 10 と表示されます。 ご教示ください。
i=hoge(pi) か hoge(*i)
>>776 何をしたいのかが解らん…
hoge() の中で i を書き換えたいなら
return *pi *= 2;
だが、そうしたからって
>printf("%d %d\n", i, hoge(pi));
ここの評価順によっては 5 10 だ。
779 :
デフォルトの名無しさん :04/12/24 14:53:37
#include<stdio.h>
int hoge(int *);
int main(void){
int i = 5
int *pi = &i
printf("%d %d\n", hoge(pi), i);
return 0;
}
int hoge(int *pi){
*pi *= 2;
return *pi;
}
>>777 どうもです。
ちょっと変更してみました。
int *papa;
int mama;
papa = &mama;
*papa = 5;
でmamaの内容も変わるようにiの内容も変わると思ったのですが…
780 :
デフォルトの名無しさん :04/12/24 14:56:24
>>778 おっしゃるとおりです。
>>779 で評価順を変えました。
それでもiは期待値10にならないです。
>>779 関数の引数の評価順は決まっていないので、それに依存するプログラムを
書くと結果は不定のふるまいとなる。
>>779 ↓のを試してみ
int main(void){
int i;
int *pi;
pi = &i;
i = 5;
hoge(pi);
printf("%d\n", i);
return 0;
}
void hoge(int *pi){
*pi *=2;
}
783 :
デフォルトの名無しさん :04/12/24 15:04:36
>>782 おお、ありがとうございます。10になりました。どうしてだーー!!!!??
784 :
デフォルトの名無しさん :04/12/24 15:25:22
お世話になっております VC++でMFCのプロジェクトを作っているんですが、 CSVファイルを読み込んで、1カラムずつ 取得してファイルの最後まで読み込むというロジックをつくりたいんです @ Readfile で、 file のEOF 検出ってできますでしょうか? A 1カラムずつの取得ってどうやるんでしょうか? readfile だと、バイト取得しかできないのでしょうか? 2点お願いします
786 :
デフォルトの名無しさん :04/12/24 15:32:31
ごめんなさい スレ違いでした
>>783 もうちょっと調べるなり考えるなりしような
*pi *=2 これはpiの中身の"値を2倍している"
return *pi *=2 これはpiの中身の" 値を2倍にした「数値を返している」 "
788 :
デフォルトの名無しさん :04/12/24 16:26:52
>>787 これで期待値を得ることができました。
調べたところ引数の評価順は右からのようです。
もうちょっと調べるなり考えるなりしような
#include<stdio.h>
int hoge(int *);
int main(void){
int i = 5
int *pi = &i
printf("%d %d\n", i, hoge(pi));
return 0;
}
int hoge(int *pi){
return *pi *= 2;
}
>>787 なんかおかしいぞ。日本語がおかしいだけだと思いたいけど……
*pi *=2 piの中身の"値を2倍している
return *pi *=2 上に加えて、その値を返している
>>788 知らんけどその評価順は、printfの仕様なの?仕様でない場合、そういうのを実装依存といって
ほかの環境でエラーを起こす危険が高いから、書いてはいけないものとされてる。
まあ学校の宿題とかだったらわざわざ細かいこと気にしないでいいよ
ファイル名を、元のファイル名+拡張子のように変えるにはどうすればいいんでしょうか? 例えば、temp.exeをtemp.exe.bakのように変えるような場合です。 ファイル名は引数から取得させているので、rename関数ではできませんでした。 rename(argv[1],argv[1]".bak")でできると思ったのですが…
791 :
デフォルトの名無しさん :04/12/24 17:24:23
>>789 >仕様でない場合、そういうのを実装依存といって
ほかの環境でエラーを起こす危険が高いから、書いてはいけないものとされてる。
家の環境での評価順です。ひとつ勉強になりました。
ちなみに、これは会社の宿題なんですorz
>>790 そういう連結の仕方はできない。
C++ではrename(argv[1], (std::string(argv[1]) + ".bak").c_str());とすればいいのだがここはCスレ、
Cならこうすればいい。
char *buf = malloc(strlen(argv[1]) + 1 + 4); //1は'\0'、4は".bak"の文字数
if (buf)
{
strcat(strcpy(buf, argv[1]), ".bak");
rename(argv[1], buf);
free(buf);
}
>>791 会社の宿題なら、なおさらの事、実行結果が実装依存になるようなプログラムは
書かない方がいい。減点の対象になるはず。
i = i++; のようなのは、実装依存では済まず、「未定義」とされている。unspecifiedより
なお一層厳しいundefinedだ。
enumの中の名前が激しくグローバルなのはKの責任ですか?Rの責任ですか?
どっかのコンパイラメーカー
>>794 俺の入った会社にはCの仕様をまともに理解してるやつが一人もいないんですが・・・。
798 :
デフォルトの名無しさん :04/12/24 21:02:39
>>797 ・さっさと見切りつける
・それこそが自分の存在価値と心得る
究極の選択
799 :
デフォルトの名無しさん :04/12/24 21:10:14
800 :
デフォルトの名無しさん :04/12/24 21:10:50
ここはそんな会社にしか使ってもらえないクズどもの巣窟ですか?
クレタ族はうそつきだ
ゲーデルの不完全性定理
>>802 違う。
クレタ族が言った。「クレタ族はうそつきだ。」
クレタ族にはうそつきも正直者もいる
クレタ人は嘘つきだとクレタ人が言った。
おれおれ、クレタ人なんだけどさ、ちょっと嘘ついてくんない?
808 :
デフォルトの名無しさん :04/12/25 00:06:23
やっぱり、向こうが本スレなのか
>770 >772 >774 遅くなりました。レス有難うございます。 依存するらしい,という話はFAQで見たようです。すっかり忘れていました。 whichを自分で書くぐらいの労力を払うしかないようですね。。。
810 :
デフォルトの名無しさん :04/12/25 04:14:38
エクセルとかワードってC言語で作られているの? それとも、ちがう言語?
811 :
デフォルトの名無しさん :04/12/25 04:37:10
enumはある意味defineよりまし、ぐらいにしか使えないのよねえ。
812 :
デフォルトの名無しさん :04/12/25 04:38:35
> = i++; のようなのは、実装依存では済まず、「未定義」とされている。unspecifiedより > なお一層厳しいundefinedだ。 ほほう。そういうしったかぶりくんは「unspecified」はどう訳すの? ;-)
ミニ三田はいらんから
テキストファイルを1行ずつ読み込むときは fopen、fgets を使えば簡単ですが、一番後ろの 行からさかのぼって1行ずつ読み込むにはどのように すればよいでしょうか。 ちなみにテキストの行数は50000行程度、サイズにして8MB程度 のもので、使えるメモリはそう多くはない(2〜3MB程度)という 条件があります。
>>810 MFCとは別のMSのクラスライブラリを使っているらしいからC++だろう。
fin = fopen("text.txt", "r"); for(i=0;fgets(ss, 256, fin) != NULL;i++){ } fclose(fin); for(k=i;k>=0;k--){ fin = fopen("text.txt", "r"); for(j=i;j>=0;j--){ fgets(ss, 256, fin); } puts(ss); }
fcloseが抜けてた 付け足しといて
816は見ない方が良い
cに限らず、現行のファイルシステムは「一文字読んだらポジションが一つ進む」仕組みだから 「最後から読む」「最後の行から読む」のは難しい。 まあ、メモリも多くないみたいだし、 fgetsで行頭を記録しながら空読みして seekしながらfgetsで一行読み込んで表示するってのが無難かな。
820 :
デフォルトの名無しさん :04/12/25 09:27:15
>>814 ランダムアクセスっぽいことが必要になるなら
適さないファイル編成を何とかすることから始める
テキスト→バイナリ変換したりインデックスファイル作ったり
みなさんのおっしゃっておられる事がよく理解できませんが、 816のを利用したら目的とするものが一応できましたので、 今回はそれで満足します。 スレ汚し失礼しました。
スゲー
823 :
デフォルトの名無しさん :04/12/25 11:45:30
813は答えられなくて、ごまかしたつもり ;-)
824 :
デフォルトの名無しさん :04/12/25 11:47:23
fgetsしたのをputsしてるので行がつながる
825 :
デフォルトの名無しさん :04/12/25 11:49:02
後ろの行から読むときは、常識的にpopen("rev")だろ!
mmapして逆から改行検索すりゃいいだけ
827 :
デフォルトの名無しさん :04/12/25 11:53:02
> mmapして メモリー足りないので無理です。
SEEK_ENDから ftell()しながらgetchar()して いっこ(ふたつ?)ずつさかのぼっていって \nがきたら そのポジションのつぎから fgets() ?だめかな?
#include <stdio.h> #include <stdlib.h> main(int argc, char *argv[]) { char buf[BUFSIZ]; FILE *fp; long ofs, curpos; if (argc != 2) { printf("usage %s [file to open]\n", argv[0]); exit(0); } if ((fp = fopen(argv[1], "r")) == NULL) { perror("fopen()"); exit(0); } fseek(fp, -2, SEEK_END); for (ofs = ftell(fp); ofs > 0; fseek(fp, ofs, SEEK_SET)) { int c; if ((c = fgetc(fp) == '\n')) { curpos = ftell(fp); fgets(buf, BUFSIZ, fp); fputs(buf, stdout); ofs = curpos -1; } ofs -= 2; } fgets(buf, BUFSIZ, fp); fputs(buf, stdout); fclose(fp); }
830 :
デフォルトの名無しさん :04/12/25 12:46:28
#include <stdio.h> int main(int argc, char **argv) { FILE *fp; char buf[256]; char cmd[256]; sprintf(cmd, "rev %s", argv[1]); if ((fp = popen(cmd, "r")) == NULL) { fprintf(stderr, "error\n"); exit(1); } while (fgets(buf, 256, fp) != NULL) fputs(buf, stderr); pclose(fp); }
831 :
デフォルトの名無しさん :04/12/25 12:47:48
> そのポジションのつぎから > fgets() > ?だめかな? おい、ぼけ。fgetsしたらまたその末尾の改行までいってしまうだろ
え?誰に聞けって?おい誰?うわぁ〜〜
quoted-printableエンコード&デコードしたいのですが アレってテキストファイル用なんですか? つうか、今のとこんな感じです char[] moji="=80=CC=82=3D"; ~s/=(..)/sprintf("%08b",$1)/eg
834 :
デフォルトの名無しさん :04/12/25 14:08:59
> quoted-printableエンコード&デコードしたいのですが しちゃだめ
835 :
デフォルトの名無しさん :04/12/25 14:16:14
ふつうuuencodeかxxencodeのどちらか。base64も禁止
>815 なんでそうなるの? >816 死んだ方がいいですよ。 >819 死んだ方がいいですよ。 >820 死んだ方がいいですよ。 >821 814は私です。偽者はやめてください。
>836 >814は私です。偽者はやめてください。 そういうことか。てことは、821=816なわけね。
>826 それでいいや。さんきゅー
まぁ、マジレスするとtailのソースでも見とけと。
>840 アホ
>840 どこで見れるの?
>842 アホ
>843 えー、だってC言語なら俺に聞けって言うからさー
なぁ、お前らちょっとテストしていい?
いいよ
strcpyとmemcpyってどう違うの?
>846 popenとnotepad.exeの関係は?
>846 ファイルとメモリマッピングという用語を使って小論文を書け。
俺の名前を言ってみろ
>851 他には?
メモリに'\0'があった際に停止するか否か
memcpyにはNULLチェックがない
>855 ウソつきはっけーん!!
>853-854 他には?
関数名が違う( ´,_ゝ`)
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
>840 そんなクソ遅いコマンドのソースを参照しろというのは 一体どういった意図によるものなのでしょうか。
>859 誰に言ってるの?答えられないのなら素直にそう書けばいいのに。
>861 アホ。頭悪すぎてそれすら気付かない奴なんだから相手するなって。
>>861 答えてる馬鹿たちに向かってですが、気に障りました?
で模範解答は?
つか、雑談も煽りも他所でやれや餓鬼共
>864 バーカ。簡単にあきらめてんじゃねーよ。
なんかさー、俺が書き込むといつも荒れるよなー、このスレ。
うわ、自意識過剰な馬鹿がいる
>868 え?俺のせいじゃなかったってこと?ならよかった。
>>868 いいや、俺が全部悪いんだ。
みんな!スレが荒れたのは俺のせいだ!
責めるなら、この俺を責めてくれ!
872 :
デフォルトの名無しさん :04/12/26 01:10:50
読み込んだファイルのバイト数を知りたいんですが while(!feof(fp)){ file_length++; } のようにfeof関数を使うと正しくバイト数が 分かりません。 どのように書けばいいですか?
>>872 そりゃ読まなきゃいつまで経っても EOF にゃならんわ。
874 :
デフォルトの名無しさん :04/12/26 01:17:33
>>873 省略しましたが、ファイルの内容は読んでます。
バイトが0x1Aの地点でfeofによりwhile文を抜ける
んですけど、どう書けば正しいですか?
宜しくお願いします。
feof()は最後を読み終わった直後にもう一度読もうとするとオhルが返る fseek()とftel()使え
お前らマルチに親切ですね。
878 :
デフォルトの名無しさん :04/12/26 01:36:50
879 :
デフォルトの名無しさん :04/12/26 01:40:43
ありがとうございます。
>>874 >バイトが0x1Aの地点でfeofによりwhile文を抜ける
根本的に町ガッ取る。
つか、この20年以上前の仕様が
なんで未だに引き継がれているのか…
881 :
デフォルトの名無しさん :04/12/26 04:01:55
ファイルの終わりにそんなもんはついてません。
882 :
デフォルトの名無しさん :04/12/26 04:03:10
ぼけ ファイルの終わりにそんなものはついてない。
883 :
デフォルトの名無しさん :04/12/26 04:05:42
> > メモリに'\0'があった際に停止するか否か > バイナリモードだったら同じだけどな。 こいつおおぼけ。 strcpyやmemcpyにバイナリーモードなどない ぼけ
>>881-882 何も言い直さなくとも…
今やファイルサイズはバイト単位で持ってる環境が殆どだけど
CP/M 時代は、ファイルサイズはセクタ単位でしか持ってなくて
テキストファイルの最後に 0x1A を付加する習慣があったのよ。
で、当時を知らないハズの連中が今でも「0x1A が付いてくる」と
思ってるってーのは、何処かで嘘をばら撒いてる莫迦がいるんじゃ
ないかと思ってな。
デジャヴを感じる… つい1スレ前に似たような事なかったか?<EOFについて
>877 マルチの何が悪いのかも分かっていないくせによく言うよなー、お前も
888 :
デフォルトの名無しさん :04/12/26 06:36:10
WinXP上でプログラミングしているんですが 実行すると必ず表示されるコマンドプロンプト画面を非表示にする事って出来るのでしょうか? 要するに実行しても何も表示されない様にしたいんです。
>>887 それはフォントがそのコードの字体を持っていない文字で、
四角になるか・になるかはフォントが決められる。
(フォント自体が通常の文字と同じように字体を用意しているので
バツや星印でもいいはず、見たことないけど)
つまり正確にやりたいんだったら今使っているフォントが
そのコードの文字をもっているか調べることになるんだが、
普通はisprint() || is漢字の1バイト目かを調べれば大体いいんじゃないか?
>>889 ありがとうございます。フォント変えたら表示できました
>888 me だけど prompt $で消えたよ。カーソルは残ってるけど。 てかCで?
え?