C言語なら、オレに聞け! 47

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しろ。
むしろ質問する前にWEBで検索するのが常識だ。

GUIなどの標準Cではできない事の質問は使用している開発環境のスレへ行け。
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへ行け。

コンパイラを探しているなら >>2 を見よ。

上記を逸した場合の結果は激しく未定義とする。ウヒ

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

前スレ
http://pc3.2ch.net/test/read.cgi/tech/1039328710/
2デフォルトの名無しさん:02/12/16 23:17
【コンパイラ】
gcc
http://gcc.gnu.org/

【Win32用の開発環境のみ。】
gcc-cygwin
http://www.redhat.com/software/tools/cygwin/
gcc-mingw
http://www.mingw.org
Digital Mars C++
http://www.digitalmars.com/
Open Watcom
http://www.openwatcom.com/
Borland C++ Compiler 5.5.1
http://www.borland.co.jp/cppbuilder/freecompiler/

【ライセンスや機能などに問題あり】
Microsot C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html
このスレは冗談で作られたニセスレです。ageないようにお願いします。

本物は↓こちら
C言語のことは俺に聞け<46>
http://pc3.2ch.net/test/read.cgi/tech/1038324550/l50
4過去スレ:02/12/16 23:18
46 http://pc3.2ch.net/test/read.cgi/tech/1039328710/
45 http://pc3.2ch.net/test/read.cgi/tech/1038405432/ (待機中)
44 http://pc3.2ch.net/test/read.cgi/tech/1037796472/ (待機中)
43 http://pc3.2ch.net/test/read.cgi/tech/1037281411/ (待機中)
43 http://pc3.2ch.net/test/read.cgi/tech/1037134356/ (待機中)
42 http://pc3.2ch.net/test/read.cgi/tech/1037101156/ (待機中)
41 http://pc3.2ch.net/test/read.cgi/tech/1036876790/ (待機中)
40 http://pc3.2ch.net/test/read.cgi/tech/1036673739/ (待機中)
39 http://pc3.2ch.net/test/read.cgi/tech/1036409391/ (待機中)
38 http://pc3.2ch.net/test/read.cgi/tech/1035729526/ (待機中)
37 http://pc3.2ch.net/test/read.cgi/tech/1035623265/ (待機中)
36 http://pc3.2ch.net/test/read.cgi/tech/1035211039/ (待機中)
35 http://pc3.2ch.net/test/read.cgi/tech/1034337064/ (待機中)
34 http://pc3.2ch.net/test/read.cgi/tech/1033240509/ (待機中)
33 http://pc3.2ch.net/test/read.cgi/tech/1032606064/ (待機中)
32 http://pc3.2ch.net/test/read.cgi/tech/1031905402/ (待機中)
31 http://pc3.2ch.net/test/read.cgi/tech/1031340950/ (待機中)
30 http://pc3.2ch.net/test/read.cgi/tech/1030786546/ (待機中)
29 http://pc3.2ch.net/test/read.cgi/tech/1029605182/ (待機中)
28 http://pc3.2ch.net/test/read.cgi/tech/1028495798/ (待機中)
27 http://pc3.2ch.net/test/read.cgi/tech/1027160374/ (待機中)
26 http://pc.2ch.net/tech/kako/1026/10260/1026048820.html
25 http://pc.2ch.net/tech/kako/1024/10249/1024918442.html
24 http://pc.2ch.net/tech/kako/1024/10240/1024033400.html
5過去スレ:02/12/16 23:18
6デフォルトの名無しさん:02/12/16 23:24
からageすんな
81:02/12/16 23:26
重複スレすまそ。

削除依頼すんのでこちらには書かないように。
9デフォルトの名無しさん:02/12/16 23:26
から
10デフォルトの名無しさん:02/12/16 23:30
#include <stdio.h>
main()
{
float a,b,c;
printf("a=");scanf("%2.1f",&a);
printf("b=");scanf("%2.1f",&b);
c=a+b;
printf("a+b=%3.1f",c);
return 0;
}

このようなプログラムを書いてみたんですが
実行すると
"a=b=a+b=0.00"
と表示されてしまいます。
どこが間違ってるんでしょうか?
>>10
こちらは削除依頼済みなので
C言語なら私に聞けでお願いします。
>>11
嘘つくな。出てねーぞ。
こっちの方が早いんだからこっちが本スレだろ。
>>12
早ければ本スレというわけでもない。歴史が証明している。
>>12 = 1
本当だ。このスレはもうすぐ消える。あきらめろ。
このスレは終わっているな。
しねしね団がくる日も近い。
16デフォルトの名無しさん:02/12/16 23:55
>>11
>>14

tech:プログラム技術[スレッド削除]
http://qb.2ch.net/test/read.cgi/saku/1027372992/

これ見ろバカども
>>17 = 1
なんか必死だね
19デフォルトの名無しさん:02/12/17 00:06
.jpgのファイルを読み込んで画像サイズと大きさを表示するには
どんな感じでやればいいですか?
あぽーなかんじーでおねがーい。
ウェブ上で得ろ写真とそれ以外を判定する方法はないでしょうか?
得ろ写真収集ソフトを作りたいのですが。
>>21
〜KB以下の小さい画像は無視するとか。
あと、スレ違い。他逝け。
#include <stdio.h>

int main(void)
{
char c[] = "*";

switch(*c){
case '*':
printf("*だな\n");
case '"':
printf("*でないわ\n");
case '\\':
printf("\\だわ\n");
}
return 0;
}

をbccまたはlsiでコンパイルして実行すると

*だな
*でないわ
\だわ

と出ます。
漏れの予想では

*だな

と表示されるはずなのですが、何がおかしいのでしょうか?
>>21
肌色が多い奴だけ DL するとか ?
2523:02/12/17 00:22
あ、ごめんなさい。何かがおかしいのは漏れですた。
スレ汚してごめんよ。
>>23
一応書いて置く罠。breakが・・・・
27905:02/12/17 19:18
全くわからないんで教えて下さい。お願いします。
問題は
正の整数の掛け算を行う関数kakezan1とkakezan2がある。(ただし、結果が16ビット以下の数値を取り扱う)また
kakeza1とkakeza2の違いは赤字で書いた一行のみである。

1.片方の関数の結果は間違っている。両者を比較して、その理由を説明しなさい。
2.1の説明を踏まえて間違っている結果を示した関数を修正しなさい。修正できるのはそれぞれの関数で一行のみとし、

字のところは変えてはならない。また、1での解答に沿ったものでなければならない。
です。kakezan1が間違っているようですが何故が違うのか解りません。お願いします。
2827:02/12/17 19:18
include <stdio.h>

long kakezan1(long x, long y, int n)
{
long a,b,c,d,e,e1,e2;
int n2;

if( (x>>n)!=0 || (y>>n)!=0) {
n<<=1;
}

if(n==2) {
e=x & y;
} else {
n2=n>>1;
a=x >> n2;
b=x- (a<<n2);
c=y >> n2;
d=y- (c<<n2);
e1=kakezan1(a,c,n2);
e2=kakezan1(b,d,n2);
e=(e1<< n)+( ( kakezan1(a+b , c+d,n2) - e1-e2 ) << n2)+ e2;
}
return e;
}
2927:02/12/17 19:18
ong kakezan2(long x, long y, int n)
{
long a,b,c,d,e,e1,e2;
int n2;

if(n==2) {
e=x * y;
} else {
n2=n>>1;
a=x >> n2;
b=x- (a<<n2);
c=y >> n2;
d=y- (c<<n2);
e1=kakezan2(a,c,n2);
e2=kakezan2(b,d,n2);
e=(e1<< n)+( ( kakezan2(a+b , c+d,n2) - e1-e2 ) << n2)+ e2;
}
return e;
}
3027:02/12/17 19:19
main() {
int i;
long a,b,c;


scanf("%d %d",&a,&b);
c=kakezan1(a,b,16);
printf("==1== %ld %ld %ld \n",a,b,c);
c=kakezan2(a,b,16);
printf("==2== %ld %ld %ld \n",a,b,c);


}
新手の荒らしだね。
3227:02/12/17 19:20
荒らしじゃないんです。ほんとお願いします。
3327:02/12/17 19:47
宿題、書籍 は専門の別スレがあるのでそこへ行け。 とありまりた。
ほんとすいませんでした。
34デフォルトの名無しさん:02/12/17 20:36
mktimeはlocaltimeの逆みたいですが
gmtimeの逆ってないんでしょうか?
>>34
時刻に関する関数はその3つしかないと思うけど。
>>34
time_t t;
struct tm *tp;
t=time(NULL);
tp=gmtime(&t);
t-=mktime(tp);
これで残ったtの値を適当に使うがよろしい
37デフォルトの名無しさん:02/12/18 02:08
以下3つのプログラムはWinのものですが、適当な例が思い付かなかっただけ
なのでスレ違いとか言わないで下さい。
で、どのプログラムが行儀が良いですか?
どれが一般的ですか?

パターンA
void getpath_a(char * path){
char p[MAX_PATH];
GetPrivateProfileString("section","key","",p,sizeof(p),INIPATH);
lstrcpy(path,p);
}

パターンB
void getpath_b(char * path,size_t size){
GetPrivateProfileString("section","key","",path,size,INIPATH);
}

パターンC
void getpath_c(char * path){
GetPrivateProfileString("section","key","",path,MAX_PATH,INIPATH);
}

私的にはAパターンを今まで採用してきましたが。
>>37
Aだとpathのサイズがpのサイズに満たない時危なくない?
Cも同様。MAX_PATH分用意してるとは限らない。
やっぱBじゃないかな。
プログラムの行儀の良さを語らせたら世界一だよ、このスレは。(字余り)
つーか、Aは最後にlstrcpyするのに一時バッファを用意するのは
無意味というか、無駄なだけだと思うのだが。
4137:02/12/18 04:10
>>38-40
やっぱりそうですよね。
元々の発想としては、呼び出し時にいちいち変数のサイズ指定するのをやめて
短く済ませようというのがありました。
もちろん、渡されるpathのサイズはMAX_PATHあるという前提での話です。

この前提条件を守ってやるならば、パターンC’で許されますか?
それとも他の方法? ハナっから許されない?

パターンC’
void getpath_c(char * path){
GetPrivateProfileString("section","key","",path,sizeof(path)*MAX_PATH,INIPATH);
}
4237:02/12/18 04:13
>41 なぜC’としたかというと、単にsizeof(path)*MAX_PATHの方が
多少行儀が良いかと思いまして。
>>42
sizseof(path)の値ってどういう値になるか分かってる?
>>42
pathはポインタなので、sizeof(path)はポインタのサイズ
そのコードでやりたい事は、おそらくsizeof(*path)
更に言うと、Cではchar型のサイズは必ず1
と言っても、こっちの方は書き方のスタイルによる問題なので
あまり気にする必要はありませんが…
それならいっそのことマクロにするとか
4637:02/12/18 05:33
>>43-44
あ、間違いですね。
sizeof(*path)とすべきでしたね。前のままではアドレスサイズでした。

C’で許されるなら、これで行こうと思います。
レスありがとうございました。
つーか、漏れは C で GetPrivateProfileString() をわざわざラップした事は無い。
C++ なら、std::string を返させる為にそうする事はある。
つーか、ちょっと待った。

> sizeof(*path)

おいおいおいおい。
それって sizeof(char) と同義だぞ。
そりゃそーだが.....
おいおいおいおいおい。
引数の型がたとえunicodeであろうとsizeof(*path)という記述で済むだろって話だろ?
違うのか?ちょっと出てこい粉等>>48,37
> sizeof(*path)という記述

for(; ; ); に陥りますた
> 引数の型がたとえunicode

(´-`) ??
むしろ
void f(void){ f();} に陥りますた、と言うべきだな
それはコンパイラに最適化されて結局 51 と一緒かも知れない
じゃこうか
int f(int n) { n + f(n-1); }
つかどうでもいいわな。スレ汚しスマソ
5650:02/12/18 09:59
>51,53-54の意味は分からんが、

LPSTR path;
sizeof(*path) == 1

LPWSTR path;
sizeof(*path) == 2

つーことで、引数の型が変わってもsizeofの中身は変えずに済むだろって話。
と、>37の言いたいことはそうなんじゃないのか?
> LPSTR
> LPWSTR

どうせならさあ、ほら、もっとこう・・・
58ビル・ジョブス:02/12/18 10:30
>>1
元祖のスレタイがいいね!エライ!
>>55
最後に自分を呼び出すタイプの再帰は、大体コンパイラにループに最適化されるよ。
60303:02/12/18 12:54
>>59
たぶん 55 の気持ちは、
int f(int n) { return n + f(n-1); }
だと思うが、これを幻視再帰とみなし、ループにするのは
よっぽど上等なオプティマイザです。

最後の演算は加算だから、ループにするのはちょっと厄介。
>>56
おいおい、W版ではバッファのバイト数でなく文字数を指定するのだが。
だからUnicodeであってもこの場合の sizeofは余計なんだよ。
62名無し@沢村:02/12/18 14:21
4バイトの整数値_int32から1バイトの配列BYTE[4]に値をコピーしたいんだが、
int32から1バイト目、2バイト目、3バイト目…と値を分けてきり出すにはどうしたらいいですか?
マルチですか?( ̄ー ̄)ニヤリッ
64名無し@沢村:02/12/18 14:25
>>63
いや、あちらに書いたらこちらに書けって書かれたもんだから…。
>>62
& と >>
コピーするだけなら
memcpy(BYTE, &int32, 4);
でいけるはずだけどねー
激しく処理系依存で
i = *(int *)b;
68xxx:02/12/18 14:31
-------変態・MTTどこでも-------

---●●●変態痴女を紹介致します。●●●---

例えば>欲求不満オマ●コヌレヌレ女・露出オナニー痴女・

フェラチオおしゃぶり女・ミニスカ・ノーパン娘・巨乳パイズリ娘・

アナルSEXおねだり娘・オマ〇コ弄られマン汁グチョグチョ女・

SM牝豚・緊縛・浣腸・スカトロ・等・・・刺激を求めています。

●●●学生・OL・主婦・モデル・牝豚・女王様・オカマ等・多数!●●●

 090-8002-8356番   
下のカタカナを小文字に変換してください。
  http://www.エムティーティー.jp/i

-



6967:02/12/18 14:31
あ、逆だった。
7067:02/12/18 14:32
激しく処理系依存で
*(int *)b = i;
71名無し@沢村:02/12/18 14:38
>>65
_int32 Buffer1;
BYTE Buffer2[4];
Buffer2[0]=(Buffer1 & 0xFF000000) >> 24 ;
Buffer2[1]=(Buffer1 & 0x00FF0000) >> 16 ;
Buffer2[2]=(Buffer1 & 0x0000FF00) >> 8 ;
Buffer2[3]=(Buffer1 & 0x000000FF) ;
でいいのですか?
72名無し@沢村:02/12/18 14:40
>>66
memcpyというのは初耳です。
第一引数がコピー先、第二引数がコピー元、第三引数がコピーするバイト数なのですか?
第一引数が配列であってもいいのですか?早速調べてみます♪

Buffer2[0] = (BYTE) (Buffer >> 24) & 0xff;
Buffer2[1] = (BYTE) (Buffer >> 16) & 0xff;
Buffer2[2] = (BYTE) (Buffer >> 8) & 0xff;
Buffer2[3] = (BYTE) (Buffer >> 0) & 0xff;
こうじゃないのかなぁ
74名無し@沢村:02/12/18 14:47
Buffer2[4]は1バイトだから、定数値が切り捨てられると思うが、右が切り捨てられるのかな?左が切り捨てられるのかな?
どっちだろう?
右が切り捨てられるなら、
Buffer2[0]=(Buffer1 & 0xFF000000) ;
Buffer2[1]=(Buffer1 & 0x00FF0000) << 8 ;
Buffer2[2]=(Buffer1 & 0x0000FF00) << 16 ;
Buffer2[3]=(Buffer1 & 0x000000FF) << 24;
と逆になるが…。
どっちですか?
>>71
> Buffer2[0]=(Buffer1 & 0xFF000000) >> 24 ;
はシフトの前にunsignedにキャストした方がいい。

>>72
インテル系のCPUではバイト並びが逆になる。

>>73
それもunsignedにキャストした方がいい。
76スティーブ:02/12/18 14:48
プログラムに興味を持ってる人はwww.ITmonitorClub.comに登録して下さい!
アンケトーにお答え頂いた方には2−5千円の謝礼進呈。
7775:02/12/18 14:49
ごめん。やっぱり 73はキャストしなくてもいい。
78名無し@沢村:02/12/18 14:53
>>73
わかりました。先にシフト演算してからビット演算するればいいのですね。
なにぶんプログラムはド素人なもので、細かいところまでは…てへへっ♪
それから右にシフトしたということは、1バイトに代入すると、やはり右が切り捨てられると考えていいのですね?
79名無し@沢村:02/12/18 14:54
あ…違った左が切り捨てられると考えていいのですね?
80名無し@沢村:02/12/18 14:59
>>75
unsigned intはバイト数が処理系依存と読んだことがあるので、わざわざ4バイト固定の_int32を使ったのですが…。
unsigned intを使っても問題ありませんか?
言ってる意味がよくわからんが、
 0x12345678
を 8ビットの unsigned charに代入すれば
 0x78
になる
82デフォルトの名無しさん:02/12/18 15:00
>>79
レジスタの仕組みも勉強したほうが良いかもしれません。
83名無し@沢村:02/12/18 15:01
>>77
なあんだ、キャストしなくてもいいんですか…。
union 使ったら?
85名無し@沢村:02/12/18 15:02
>>81
>0x12345678
>を 8ビットの unsigned charに代入すれば
> 0x78
>になる

あ、やっぱり左が切り捨てられるでいいんだ♪ありがとうございました♪
86デフォルトの名無しさん:02/12/18 15:03
>>83
ん?73はキャストをしてるような・・・
>>80
> unsigned intはバイト数が処理系依存と読んだことがあるので、
> わざわざ4バイト固定の_int32を使ったのですが…。

unsigned int と signed int のサイズは同じ。
singed int でもサイズは処理系依存。

負数の右シフトで、空きビットにゼロが入るかどうかが
処理系依存なのでキャストした方がいいと書いたのだが、
>>71でも(BYTEが8ビットなら)キャストしなくても
結局切り捨てられて同じになるね。ごめん、逝くわ。
>>86
ああ,確かにしてる
BYTE→int→BYTEのな


アフォキャストって言っていい?
ダレがアフォじゃコラ!
。。。でこの場合ってマスクいらないのかな?
Buffer2[0] = Buffer1 >> 24;
みたいな。
うちの環境だとどうやらいけてるみたいだけど、なんというか
規格上OKなのかどうか聞きたいんだけど。
90デフォルトの名無しさん:02/12/18 16:14
Buffer2[0] = BYTE(Buffer1 >> 24 & 0x000000ff);
91デフォルトの名無しさん:02/12/18 16:20
>>89
マスクはいらないかも・・・
Buffer2[0] = (BYTE)(Buffer1 >> 24);
92デフォルトの名無しさん:02/12/18 16:30
暇なやしの質問場所だな。
Buffer2[i] = ((BYTE*)&Buffer1)[i];
>>90
そのBYTEはマクロか?
C++ でしょ
ここはCスレだ
9790:02/12/18 17:46
悪かったよ・・・
イジメないでくれよ・・・
>>89
_int32とは何かが明らかにされていないので本当は何とも言えないが
おそらく__int32のミスプリであろうと仮定すると
BYTEはunsigned charのtypedefと推定できる
以後、この前提で議論する

BYTEにキャストした後で&0xffしてるんだから代入の右辺はint型で
代入式はBYTE←intの形になっている
ここで右辺がBYTE型に暗黙の型変換をされるわけだが
型変換した結果の値は型変換前のint値を
BYTE型で表現できる最大数+1で割った剰りとなる
つまり&0xffはしなくてもよいことになる
99名無し@沢村:02/12/18 18:06
>>94
マクロかどうかは知らんよ。
ただちらっと見たら、BYTE型というのがあってサイズは1バイトと書いてあっただけだよ。
>>98
charが9ビットなら &0xffの有無で結果が違ってくるな
101名無し@沢村:02/12/18 18:10
>>98
あらっ、ホントだ。
_int32ではなく、__int32だったよ。
エラーが出なかったので、ミスプリのまま使っていたよ。
10298:02/12/18 18:18
>>100
おいおい前提を見落とさないでくれよ
103デフォルトの名無しさん:02/12/18 18:58
構造体にデータを格納したいのですが、そのデータがいくつ必要になるか不明なのです。
10個の時もあれば、10000個の時もあるので

struct data {
 int xxx;
 char yyy[256];
};
struct data info[10000];

みたいなのは容量の無駄なのでやりたくありません。
そもそも10000個で収まるかどうかも不確定なので。
データによって、その必要な数だけ構造体を確保する方法ありませんか?
104デフォルトの名無しさん:02/12/18 19:01
>>103
malloc関数・・・
>>103
リストって知ってるかい。
>>103
C99限定ならば
int foo(int size)
{
  struct data info[size];
  // なんか処理をする
}
と言う方法はある。
普通は
int foo(int size)
{
  struct data *info;
  info = malloc(sizeof(*info) * size);
  // なんか処理をする
  free(info);
}
かな?
107100:02/12/18 19:13
>>102
前提にはcharが8ビットとは書かれてないが...それとも
__int32が32ビットであることが規格で決まってるのか?

でもまあ単なる揚げ足取りだから、どっちにしても気にしないでくれ。
10898:02/12/18 19:21
>>107
すまそ,漏れのミスだ
あの前提では__int32がある処理系がVCだけになっていた(鬱出汁脳
>>107
__int32なんてものは規格にはない罠。
110名無し@沢村:02/12/18 19:25
>>107
charは1バイトだから8ビットだよ。intやunsigned intはシステムに依存するよ。
__int32は4バイトだから32ビットだよ。これは規格で決まっているよ。ホントだよ。
>>110
何も知らん初心者はすっこんでろ
>>110
その規格ってのは MS-VC99 か?
113103:02/12/18 19:30
>>104
mallocで確保すると、それぞれの構造体に直接アクセスできますか?
その方法がわからないんですけど。

>>105
知ってます。
リスト構造でmallocで確保すると、最初からたどらないと目的の構造体に
アクセスできないのでちょっと。
info[no].xxxみたいにインデックスの数値で目的の構造体に直接アクセスしたいんです。

>>106
その普通の方法というのを最初に試したのですが、各構造体に直接アクセスする方法が
よく分からないんですけど、できますか?
  struct data *info;
  info = malloc(sizeof(*info) * size);
  info[0].xxx = 0;
  strcpy(info[0].yyy, "hoge");
>>110
ソースは?
「本に書いてあった」とか言うなよ。
>>110
1byte=9bitsのマシンが実在するのを知らないのは許してやろう
だが,規格で決まっているかどうか調べもせずに言うのはいかん
117名無し@沢村:02/12/18 19:35
>>103>>106
struct data {
 int xxx;
 char yyy[256];
};
struct data *info;
info=(struct data *)malloc(sizeof(struct data ));



free(info);

のほうが馬鹿でもわかりやすいよ。

118名無し@沢村:02/12/18 19:37
>>115
VC++のヘルプで検索してら書いてあったんだよ。4.0だけどね…。ビンボー素人なもんで…。
>>117
だから,調べもせずに言うなってば!
int 型と unsigned int 型のサイズは、システム ワードのサイズになります。
つまり、MS-DOS と 16 ビット バージョンの Windows では 2 バイト (short
型および unsigned short 型と同サイズ) になり、32 ビットのオペレーティ
ング システムでは 4 ビットになります。

MSDNって素敵…。
>>120
マジかよ
最新バージョンでか?
122名無し@沢村:02/12/18 19:45
>>113
>mallocで確保すると、それぞれの構造体に直接アクセスできますか?
>その方法がわからないんですけど。

普通にinfo->char[5]とか、info->xxx[73]とかすればいいが、何か…??
>>118
お前にとっての規格は「VC++のヘルプ」なのかと小
>>122
info->char[5]がコンパイルできるかどうか調べたかと3.6キロ秒ほど問いつめ...たくない
もういやだ,こいつ
>>124
ネタに付き合うお前すげぇよ
126名無し@沢村:02/12/18 19:50
>>124
すまん、プリミスだ。info->char[5]ではなく、info->yyy[5]だったな。
>>124
冬休みだからな...学生はいいよな
128名無し@沢村:02/12/18 19:52
>>113
>mallocで確保すると、それぞれの構造体に直接アクセスできますか?
>その方法がわからないんですけど。

ってお前まさかそれでプログラマーじゃないだろうな?
俺はド素人だぜ。プログラマーはド素人には教えてもらわないよな。普通…。
ド素人が偉そうにネタ回答すんな。
130103:02/12/18 20:01
>>114
その方法だと、結局その変数sizeでサイズが分かってないと駄目ですよね?
サイズが分からない段階で確保していく方法はないでしょうか?
131名無し@沢村:02/12/18 20:07
>>130
お前、俺のレスちゃんと読んだか?

struct data {
 int xxx;
 char yyy[256];
};
struct data *info;
info=(struct data *)malloc(sizeof(struct data ));



free(info);

で確保しろ。
でアクセスは普通にinfo->yyy[5]とか、info->xxx[73]な。
132デフォルトの名無しさん:02/12/18 20:09
>>131
お前って・・・
>>131
お前、・・・
なんで名無し@沢村がこのスレに馴染んでんの?別にイイケドサ…
>>131
ネタもいい加減にしろよ。
氏ね。
>>131
いいかげんにネタ回答はやめろ。天然か?
それにしても聞く時と答える時ですごい豹変ぶりだな。
Buffer1 は符号付き整数ですから、Buffer1 が負の値だったときに
Buffer1>>24 は処理系依存になります。だから、
(unsigned int)Buffer1>>24
とすべきです。

[#5] The result of E1 >> E2 is E1 right-shifted E2 bit
positions. If E1 has an unsigned type or if E1 has a signed
type and a nonnegative value, the value of the result is the
integral part of the quotient of E1 divided by the quantity,
2 raised to the power E2. If E1 has a signed type and a
negative value, the resulting value is implementation-
defined.
ややこしくなるからお前は黙ってろ > 名無し@沢村
139デフォルトの名無しさん:02/12/18 20:11
沢村くん・・・
103からレスを読み返してみたまえ。
>>130
リスト構造というものを勉強することを勧める。

沢村のネタ回答はほっとこう。無視無視。
↓沢村の「釣れた」の予感
>>130
いくつか分からんものを確保しようがないと思うが?
途中で追加されてサイズが変わるとかならrealloc()汁。
143142:02/12/18 20:16
>>141
正直、すまんかった
>>137
誤爆か?
>>87を読め
145103:02/12/18 20:21
>>140
リスト構造は一応知ってるつもりなんですけど、目的のデータに
到達するまでに最初から追っていかなくては駄目ですよね?
目的のデータに直接アクセスしたいんですよ。

>>142
やはり無理ですか。
10000個データがあったとしても、1個ずつ読み込んで処理できるんなら
その時にカウントしていけばいいんですけど、10000個分が全部まとまった
状態でしかそのデータを読み込めないんです。
だから、最初からその分の領域を確保しなければならないので困ってます。

うーん、もう少し頑張ってみます。
>>144
いや、ちがう。符号付き整数で値が負の時に、
右シフトすると、空きビットうんぬんではなく、
全部のビットが変になる可能性がある。
符号付き数の内部表現が1の補数である処理系を考えてみると
よい。
>>145
>目的のデータに直接アクセスしたいんですよ。
n番目のアイテムを返す関数一個作って直接アクセスっぽく…
ダメ?w
148名無し@沢村:02/12/18 20:32
(unsigned int)Buffer1 >> 24とするより、最初からBuffer1をunsigned intにしておいたほうが手っといばやいんでそうしました。
どうやらunsigned intはMS_DOSとwindous3.1以外は4バイトのようですね。安心しました♪
149142:02/12/18 20:33
>>145
「直接アクセス」っていうか「ランダムアクセス」したいってことだな。

後半はよく意味が分からんのだが、もうちっと説明してみ?
150デフォルトの名無しさん:02/12/18 20:33
>>145
142も言っているが、reallocじゃダメなの?
151名無し@沢村:02/12/18 20:35
>>145
>10000個分が全部まとまった
状態でしかそのデータを読み込めないんです

読み込んだ後、カウントできないの?
>>151
貴様に発言権はない
153デフォルトの名無しさん:02/12/18 20:38
>>145
ポインターのポインターを使用するしか・・・
>>146
なるほど。言ってる意味はわかったが、
果たしてその解釈で合ってるかな。

E1>>E2 は、E1 を E2 ビット分右にシフトし、それを結果とする。
E1 が符号無し整数型をもつ場合、又は E1 が符号付き整数で非負の値をもつ場合、
結果の値は、E1 を 2 の E2 乗で割った商の整数部分とする。
E1 が符号付き整数型で負の値をもつ場合、結果の値は、処理系定義とする。

ビット並びで見た場合、空きビット以外の部分は保証されていると思うが。
155154:02/12/18 20:45
>>154
JIS X3010 (ISO/IEC9899:1990) からの引用ね。
156デフォルトの名無しさん:02/12/18 20:51
>>152
みんな仲良くしようよ
>>145
>>10000個分が全部まとまった
>>状態でしかそのデータを読み込めないんです。

この辺が何を言いたいのか理解できないんだが。
malloc()、realloc()で確保した領域は構造体の配列と同じようにアクセスできるけど、それじゃだめか?


>>153
なぜ?
何にしろ、個数が分からん限りmallocで確保するのは絶対に不可能。
ループで回してる中で1個づつ追加していきたいならreallocでできるでそ?
100個でも10000000個でもreallocしていけば。

しかしreallocの時間的コストってどんなもんだろうな。
10000000回もreallocするのなんか抵抗あるが。
159名無し@沢村:02/12/18 21:00
>>152
刀あげるから…!!
>>154 たしかにそうだ。私が間違えていた。すまん。
bit ならびは新しく入る部分以外は保存される。

わたしが漠然と思っていたことがやっと分かった。
マスク (&0xff) せずに、
buffer2[0] = buffer >> 24;
とした場合ははダメで、
buffer2[0] = (buffer >> 24) & 0xff; /* CHAR_BITS==8 の場合 */
ならOK ってことだ。
つまり、&0xff なら、左のビットが捨てられるだけだが、
前者のようにマスクせず int を BYTE に代入したら、
(BYTE が 8 bit の符号無し整数だとして)
256を法としてbufferと合同な最小の整数が buffer2[0]に入るから、
負数の内部表現によって結果が異ってしまう。

このスレではみんな &0xff としてるので、問題ないわけだ。
私がわるかった。重ねがさね済まん。
162124:02/12/18 22:29
>>127
うるせーここんとこ仕事ヒマなんだよ
放っとけ
#include <limits.h>
&(unsiged(1<<CHAR_BIT)-1)
多分これで処理系に関係なく1バイトのみの値を取る事が出来る
と言っても、こんなガイキチみちたコードなんて書かずに
素直に、処理系依存のコードにした方が、かなりまし
>>163
そんなガイキチみちたコードなんて書かずに
素直に、UCHAR_MAXと書いたほうがまし
165さっぱり:02/12/18 23:41
すいません。C言語の初心者です。
課題で出されたCがわからなくてこまってます。
課題は2つの行列AとBを加算するプログラム(matadd.c 未完成)をディスクに保存する。

入力用データファイル matadd.dat をディスクに保存する。

ソースプログラムをコンパイルし,実行する。
実行時に次のように入力のリダイレクトを行い,データファイルからデータを読み込ませる。

matadd < matadd.dat


表示された結果とソースプログラム内容を観察し,どのような手順で2次元配列を入力・出力しているか,理解する。

次に,C=A+B を計算し,Cの各要素を行列らしく出力する部分を追加して完成させる。
上と同様に実行して動作確認ができたら,ソースプログラムを提出する。
166163:02/12/18 23:42
書くの忘れてた…
これ、>>89-100辺りに出てたマスクの話
(マスクが必要か必要無いかの話は別問題として)
>>165
>>1よめ厨房。

>ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへ行け。
>>164
UCHAR_MAXって(unsigned)0-1になる事が規格で保証されてたっけ?
>>103
struct data {
 int xxx;
 char yyy[256];
};
char dummy=0;
struct data *info;
info=(struct data *)malloc(sizeof(struct data )*kazu);

dummy = (info+index)->yyy[xxx];//info[index]->yyy[xxx]; と同じアクセス方法。indexはkazuを超えない事。

free(info);

ダイレクトにアクセスできますぜ。
ただ、確保された領域の外には手を出さない事。(事故でも)
ソースは、131から流用を改変。thx.
>>169 ここCのスレなんだから、せめてこれ位に…
typedef struct {
 int xxx;
 char yyy[256];
} data;
>>103
構造体のメンバを表す時の.や->の意味とポインタの概念を理解出来れば
>>169の(info+index)->yyy[xxx]をinfo[index].yyy[xxx]と
置き換えられるようになる事が理解出来るので、頑張っ勉強して下さい
172171:02/12/19 00:16
「頑張って」のが「て」が抜けた…
>>168
不安なら(unsigned)0-1って書けば?
>>163よりはマシだと思われ
>>168
保証もなにも、普通違う値だろ。

~(~0u<<CHAR_BITS)
>>173
(unsigned char)0-1の書き間違えだと思うが
それが8ビットの場合255になってくれる処理系を俺は見た事がない
176175:02/12/19 03:34
誰も書かないようなので自分で突っ込みを入れると
(unsigned char)(-1)
なら動くが、たまに動かない物もあるので注意
177175:02/12/19 03:37
さらに書くと、>>176で動く場合
ただ単にキャストすればマスクの必要はない
このスレ的に処理系の規格準拠は前提にしていいの?
処理系の規格準拠って何ぞや?
コンパイラが ANSI なり ISO なりの規格に準拠してるかって事だろ。
C 言語の前に日本語は大丈夫か?
> (info+index)->yyy[xxx];

イヤな書き方するな。
>>145
> 10000個データがあったとしても、1個ずつ読み込んで処理できるんなら
> その時にカウントしていけばいいんですけど、10000個分が全部まとまった
> 状態でしかそのデータを読み込めないんです。
> だから、最初からその分の領域を確保しなければならないので困ってます。
C++のVectorの実装を参考にしてみろ。
まず、適当な大きさでmallocし、追加するたびに上限値を超えていないかのチェックを行う。
上限値を超えていた場合、上限値を増やしてreallocする。
こんな感じの実装の仕方だったはず。
> C++のVectorの実装を参考にしてみろ。

この一行がものすごく余計な気がする
>>175
整数演算がオーバーフローした場合の結果は未定義だが
符号なし整数はオーバーフローしない
よって(unsigned char)0から1を減じた結果が
UCHAR_MAXとなることを処理系は保証すべき

符号付き整数-1を,より少ないビット数の符号なし整数unsigned charに変換する場合
変換後の値は,UCHAR_MAX+1で割った非負の剰りであると規定されているから
UCHAR_MAX==255の処理系では(unsigned char)-1==255となるべき

>>181
イヤじゃない書き方って
info[index].yyy[xxx]
のことか?
漏れ的にはポインタに[]はあんまり使いたくない
仮引数*hogeをhoge[]と書くのも気持ち悪い
> 符号なし整数はオーバーフローしない

そんな事が決まっていたっけ?

> UCHAR_MAX==255の処理系では(unsigned char)-1==255となるべき

unsigned char に変換する前の -1 の全ビットが立っている保証はあったっけ?

> info[index].yyy[xxx]
> のことか?

そう。

> 漏れ的にはポインタに[]はあんまり使いたくない

ならこう書け。
(info + index)->yyy + xxx

> 仮引数*hogeをhoge[]と書くのも気持ち悪い

int main(int argc, char **argv)
と書く人ですか?
まあいいけど。
> (info + index)->yyy + xxx

こうね。
*((info + index)->yyy + xxx)
>>185
> そんな事が決まっていたっけ?
少なくともJIS X 3010-1993では決まっていますが何か?
JIS X 3010-1993(ISO/IEC 9899:1990)
6.1.2.5 型 4段落目の中程から引用
  符号無しオペランドを含む計算は、決してオーバフローしない。
  すなわち、格納する符号無し整数型で表現できない結果が、その符号無し整数で
  表現しうる最大値より1だけ大きい数を法とする剰余とする。
>>185
> > 符号なし整数はオーバーフローしない
> そんな事が決まっていたっけ?
オーバーフローしたときの動作が決まってたはず。

> > UCHAR_MAX==255の処理系では(unsigned char)-1==255となるべき
> unsigned char に変換する前の -1 の全ビットが立っている保証はあったっけ?
ない。
>>187
ありがとう。
C99 では 6.2.5 Types の項 9 だね。
でも、訊いただけだから、何かと訊き返されても困るけど。
> > UCHAR_MAX==255の処理系では(unsigned char)-1==255となるべき
> unsigned char に変換する前の -1 の全ビットが立っている保証はあったっけ?

訊き方がまずかったかも。
符号付整数の負数を符号無し整数にキャストした時、どの負数がどの正数値に対応
すべきという規定はあったっけ?
>>185

-1のビットパターンには関係がない
-1を256で割った非負の剰りが255なだけ
192184:02/12/19 12:06
ん,(unsigned char)0から1を減ずることはできないな
(unsigned char)0-1と書いても格上げが入るから
((int)(unsigned char)0)-((int)1)になるだけだ
なるほど
>>192
inf i = 0;
i--;
と言いたいわけか?
195194:02/12/19 12:08
寝言言ってる。
unsigned char c = 0;
c--;
んー、あれ、ちょっと待てよ。
(unsigned char)0-(unsigned char)1
は、ずっと unsigned char のままで演算されないか?
C の事はここでは訊いてはいけないって本当ですか?
>>196
(unsigned char)((unsigned char)0-(unsigned char)1)
なら、そう実装しても構わない。
>>196
unsigned char c;
printf("%u\n", sizeof(c));
printf("%u\n", sizeof(c - c));
>>169
そもそも103はそのkazuってのがその時点で不明だから悩んでるんじゃないか?
話がループしてるぞ。
201デフォルトの名無しさん:02/12/19 15:45
ディレクトリに対して読み込みモードでfopenすると成功するんですけど、
それから読み込みを行うのは安全ですか?
>>200
それについてはrealloc()が5回くらい出てるんだが、読んでないのか?
>>201
読めることは読めるだろうけど、得られたデータには何の保証もない。
204デフォルトの名無しさん:02/12/19 15:48
>>203
安全ならそれでいいんです。
じゃあ大丈夫だってことですか?
>>204
何を安全とするか、何を大丈夫とするか、によって答えは変わる。
206デフォルトの名無しさん:02/12/19 15:50
>>205
プログラムが異常終了したりしないかとか。
>>201
普通opendirじゃないの。ディレクトリもファイルの一種。
>>206
システムや処理系次第だろうな。
真っ当なシステムなら、openできた以上以上終了ってことは多分ないと思うが、
もちろん保証の限りではない。

POSIXなシステムでは、ディレクトリに対するfopen()は書き込みじゃなけりゃ
成功するように見える。
ttp://www.opengroup.org/onlinepubs/007908799/xsh/fopen.html
[EISDIR]
  The named file is a directory and mode requires write access.

ちなみにLinuxでは即EOFになった。
MAC だとフォルダ開けてしまい、読もうとした瞬間あぼーんされたりすると聞いた事あるが。
210184:02/12/19 17:12
>>186
ワラタ
*((*(info + index)).yyy + xxx)

[]や->も使えば可読性が上がる場面では漏れも使ってるけどよ
たとえば冒頭の例のように*をちゃんと追うのは大事な基本だと思うから
ポインタで間接参照しているところはありのまま書いておきたいって
気持ちがあるわけよ

char s[2];
s[1] = '\0'; なんかだと
*(&s[0] + 1) = '\0'; がありのままだが
配列の実体に直接アクセスしているところはそう見せたい
extern char s[];
s[1] = '\0';
のような場面が脳裏をよぎるんだ

*argv[]も漏れの周りがそうしてるから合わせてるさ
あんまり使いたくないってのは
必ずしも本音と建て前が一致しないことがあるってことで
絶対使わないって意味じゃない
210 の言いたい事もわからないでもないけど、結局シンタックスシュガーを許容
できない頑固者としか思えないよ。
シンタックスシュガーが何の為にあるのか考えた方がいい。
もちろん、自分しか読まないようなソースであれば、その限りじゃないけど。
212184:02/12/19 17:27
シンタックスシュガーは逆効果に気をつけて使うべきだろ
マクロをあんまり使いたくないのと同じだよ
(゚Д゚)ハァ?
214184:02/12/19 17:50
[]や->は1重間接の*を隠すだけだろ
2重間接になってる所では却って邪魔になることがあると言いたい
何が邪魔になるのかよくわからないから例を挙げてはくれないか?
(*p)[n] = &(*q)->r;
*(*p + n) = &(**q).r;
まあ気分の問題ちゃそれまでなんだけどよ

>もちろん、自分しか読まないようなソースであれば、その限りじゃないけど。
こんなこと言われるのは心外だったりする
217216=184:02/12/19 18:18
失礼,名乗るのを忘れた
主観満載な事を“使うべき”なんて言われてもねぇ
>>216
後者の方がよっぽどワケワカランに見えるけど?
>>202
ハァ? 頭悪すぎ。
169の内容と何も関係ないだろ。
>>218
可読性を主観以外の何だと言う気だ?
よもや自分だけ違うなんて言い出すまいな
それから漏れは「べき」と言ったか?
>>221
あんたが 「べき」 と言ったかどうかは知らないが、212 にはそう書いてある。
>>222
ああ,そいつは悪かった
確かに漏れが言った
逆効果なんかありえないと言う訳にもいかんが

>>219
漏れが組んでいる相手がそう言ったら当然考えるさ
人に読ませることを考えてないような言われ方が心外だと言っている
224223=184:02/12/19 18:58
いかん,また名乗るのを忘れた
225デフォルトの名無しさん:02/12/19 18:59
ポインタ(dat = *pointer)と配列(dat = dim[0])ってどっちがアクセス高速ですか?
>>225
実測しる
それしかない
まあ、お前ら落ち着けよ。
とりあえず、他人が読んで分かりやすいのが良いに決まってるんだが
その他人が読みやすいってのが、個人個人で違うから主観だって話でそ?
チームで開発してれば、その大多数が読みやすい形で書くのがベストであって
つまり、一番使ってるやつが多い形に合わせるのが自然だな。
自分のスタイルと変えて書くほうは大変だが。
>>225
ちなみに、VC6 は最適化レベルに関わらず、どちらも同じコードを吐く。
229184:02/12/19 19:13
>>227
そうだな
人に例を要求しておいて自分は何も出さないまま煽るだけの
抽象論を相手に漏れも大人げなさすぎたよ
(*p)[n] = &(*q)->r;
*(*p + n) = &(**q).r;

この例を取って主観で言うけど、漏れは 1 つの塊に * が 2 つ以上あるのは
読みにくいと思う。
184 の主論は 「隠れた処理があるのはわかりづらい」 という事だと思うんだけど、
漏れは 「わかりきった処理は隠蔽された方が読みやすい」 と思う。
i < 0? -i: i と書くより abs(i) と書いた方が読みやすいのと同じ話じゃないかな。
231184:02/12/19 19:20
**くらいでピーピー泣くなって
232230:02/12/19 19:25
229 が、否定側も例を出してくれという話に読めたから書いたんだけど、
その反応がそれかい。
別に、読めないとは言ってないよ。
(*p)[n] で書けば済む話なのにわざわざ *(*p + n) とする理由が 231 なのかと
234184:02/12/19 19:29
>>230で使っているのは漏れが出した例だ
わかりきった処理というが**を使っている場面では
*と**を使い分けるから下手な隠し方はない方がマシだと思う
235184:02/12/19 19:31
>>233
逆だよ**に抵抗があるような足手まといに迎合して
わざわざ(*p)[n]と書きたくないと言っている
俺的には *(*p + n) つー表記の方が“態々”な感じだなぁ。
まぁ好きにしろや。
>>235
230 の最後の行もあんたが出した例か?

というか、184 が何故 [] や -> を 「わかりにくい」 としているの理由が分から
ないけど。
特に [] は、ポインタに対して配列的なアクセスをするという事を明示する。
*(p + n) も慣用句として覚えればそれほど見にくいわけではないけど、慣用句より
言語レベルの演算子である p[n] の方がずっと見やすいはずだという考えは間違いか?
> *と**を使い分けるから下手な隠し方はない方がマシだと思う

そんな事が必要な設計は間違っていると思う。
239184:02/12/19 19:38
>>236
結局,主観って所でしか反論できなかったな

「C使いは**くらい使えろ」
これも主観で逃げとけや
240236:02/12/19 19:41
>>239
反論してるように読めたか?
まぁ好きにしろや。
おまえらC#でもやっとけ
242184:02/12/19 19:44
>>237よ,それは>>214で既出だ
だからabsが浮いたまでのこと

>>238よ,それは>231で既出だ(藁
243184:02/12/19 19:46
>>236
すまん>>230と間違えたらしい,悪かった
>>242
> >>237よ,それは>>214で既出だ
[] や -> を使うとき、1重間接の * が隠れている事を意識する必要は無い。

> >>238よ,それは>231で既出だ(藁
238 が言いたい事が分かってないだろ。
と**を使い分ける、なんて事はすべきではない。
245244:02/12/19 19:50
訂正。

> と**を使い分ける、なんて事はすべきではない。
*と**を使い分ける、なんて事はすべきではない。
もちつけ
     /\⌒ヽペタン
   /  /⌒)ノ ペタン
  ∧_∧ \ (( ∧_∧
 (; ´Д`))' ))(・∀・ ;)
 /  ⌒ノ ( ⌒ヽ⊂⌒ヽ
.(O   ノ ) ̄ ̄ ̄()__   )
 )_)_) (;;;;;;;;;;;;;;;;;;;)(_(
  ___   ガスッ
 |___ミ      ギビシッ
   .||  ヾ ミ 、      グシャッ
   ∩_∧/ヾヽ
   | ,| ゚∀゚). .|  |;,      ゲシッ
  / ⌒二⊃=|  |∵.
 .O   ノ %`ー‐'⊂⌒ヽ  ゴショッ
   ) ) ) )~ ̄ ̄()__   )
  ヽ,lヽ) (;;;;;;;;;;;;;;;;;)(_(
248184:02/12/19 19:56
>>244
だからよ,配列とポインタは違うんだちゅーのに
なんでそんなに同じと思いたがるかよ
char(*p)[Q];とchar **p;が同じだと思いこむアフォを量産し
char s[1];にextern char *s;で参照に逝くアフォを量産する
ある意味必要悪を何でそんなに必死に擁護せにゃならんのだ
初心者時代から*をなるべく[]と書こうとしていたツケが
*は読みにくいって後遺症になって回ってきてるだけだろ
>>248
そんな事言われても、配列に対して *(p + n) というアクセスもできるんですが・・・。
250184:02/12/19 19:59
疲れた
そろそろ落ちたいので
反論したい者は手短に頼む
>>184 の可読性の基準は自分が読みやすいかどうかなんですか?
> char(*p)[Q];とchar **p;が同じだと思いこむアフォを量産し
> char s[1];にextern char *s;で参照に逝くアフォを量産する

関係無い話を持ってくるなよ。
メモリ領域がどう確保されているかと、*(p + n) と p[n] のどちらが見やすいかは
全く別の話。
[] は配列演算子ではなく添字演算子であり、立派なポインタ演算なんだが、
どうしてこれを使うだけで配列とポインタの混同という話になるんだ?
254184:02/12/19 20:08
>>252
いいや,関係ある
初心者時代から*をなるべく[]と書こうとしていたツケが
*は読みにくいって後遺症になって回ってきてるだけだろ

ループのようだな
で、なぜ * を [] と書いてはダメなの?
256184:02/12/19 20:13
>>255
goto 248;
単に、タイプ数が少ない方が嬉しい。
まあ、184 の世界では [] 禁止と言う事で終了しとこう。
「ポインタと配列は違う」という議論があるのは当然だけど、
184 は頭が硬すぎというか、一緒に仕事をしたくないと思う。
260184:02/12/19 20:15
>>258
あんたには言いたいことが伝わらなかったようだが
漏れももう繰り返すのはやめる
頭が硬いというかアフォだね
262236:02/12/19 20:18
うーん、俺今まで文字列へのポインタを char * と書いてた…
これ全部 char (*)[] に変更するのはホネだなぁ。
>>260
あんたがどうフォローしようが、248 を撤回しない限り 258 の結論は変わらないよ。
248 を、「[] を使ってはいけない」 以外にどう受け取れというんだ?
>>262
待て待て待て待て。
char ** ならともかく、あるいは文字列の先頭へのポインタならともかく、
文字列へのポインタが char * とはどういう事だ?
ああ、分かったぞ
>>184 は * と [] を使い分けることで
漏れは配列とポインタの違いがちゃんと分かってるぜ!がっはっは!
ということを誇示したい訳か

  真 性 D Q N で す な (ワラ
そこまでは言わないが、とりあえず 259 に一票入れとく。
267デフォルトの名無しさん:02/12/19 20:41
intの変数をcharって言うか文字列に変換したいんですけど
どうすれば良いですか?

int a=123;
として、これを”123”という文字列に変換したいのですが。
268名無し@沢村:02/12/19 20:44
>>267
↑ま、まさかプログラマーだったりして…
269 ◆F52DmOxJlc :02/12/19 20:48
>>267
itoa();




と、マジレスする前にボケてみる。
270名無し@沢村:02/12/19 20:55
>>265
ヌヒよ、おれは**となる理解できんが、*と[]くらいはわかるぞ。
つまりだな、
int Count[64];も、
int *Count;
もまったく同じく、Count=(int*)malloc(size);というふうに扱えるということだ。
だから配列とポインタは同じといわれていると思うのよ。
どうかな?俺は中級者といえるかい?
>>270
全然言えない。

272 :名無し@沢村 :02/12/19 20:59

釣れた(藁

273 :デフォルトの名無しさん :02/12/19 21:02

ぎゃー、釣られたー。
272デフォルトの名無しさん:02/12/19 21:00
うむ
273能無し@沢村:02/12/19 21:04
攣れた(藁
274名無し@沢村:02/12/19 21:05
>>271
ヌヒよ、ふふふ俺はもっと高度な2次元配列も扱えるぞ。
int Count[10][64];の場合は、
Count[10]=(int*)malloc(size);というふうにできるということだ。
これはかなり高度だぞ。
275名無し@沢村:02/12/19 21:07
↑これは、
int *Count[10];
Count[10]=(int*)malloc(size);というふうにもできるということだ。
先生!沢村に反応してもいいんですか?
無視するんですか?でも、反応してほしがってますよ。
いいんですね?後悔しても知りませんよ?
公開なんていってませんよ、だれがチャックを開けるって。
もう先生たらエッティ♥ セクハラで訴えちゃうぞ〜♪
でも先生ならいいかも(あはぁん
もう反応していいかなんて未定義です、NULLです
ヌルポ。
ゆっとくけど、レスするヤツが悪いよ。
レスしてー(;´Д`)ハァハァ[
でも、荒れるー。つー(以下略)
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/  
 (_フ彡        /  ←>>276

つまらんネタレスばかりしやがってウザイんだよ!!ええっ!?
      ∧_∧          _ _     .'  , .. .∧_∧
     ( ´_ゝ`)   _ .- ― .= ̄  ̄`:, .∴ '     (    ) ←>名無し@沢村
    /     '' ̄      __ ヽ´=', ・,‘ r⌒> _/ /
   / /\   / ̄\-―  ̄ ̄   ̄"'" .   ’ | y'⌒  ⌒\
 _| ̄ ̄ \ /  ヽ \_               |  /  ノ |
 \ ̄ ̄ ̄ ̄ ̄ ̄ \__)              , ー'  /´ヾ_ノ
  ||\            \          / ,  ノ
  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄          / / /
  ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||          / / ,'
  ||  ||           ||       /  /|  |
                       !、_/ /   〉
                           |_/
つーか 276、コピペったって貼るたびに殴られるのはやーよ。
せめて最後の一行はカットして。
ぶぁっはははははーーーっ!!
このスレにはまだ沢村の相手をする奴がいたのか!?
ぶぁっはははははーーーっ!!
ぶぁっはははははーーーっ!!
>>282==沢村
お前ら!!
もょもとって知ってるか?
何を嬉しそうに。
>>198
(unsigned char)((unsigned char)0-(unsigned char)1)
にしても、コンパイラは定数部分をint型にして演算する事が多いので
(規格でもint型だったような気もするけど、間違ってるかも…)
(unsigned char)(-1)
と同じ結果になる
C言語でテトリス作りたいんだけどlocateとかgraphic関数とか使えないから
面倒臭いんだよ。なんとかしてくれ
面倒臭いなら諦めれば?
289286:02/12/20 00:45
頼むよ
簡単なサンプルでいいからうpしてくれよ
ここはプログラム作ってスレではない。


ここはと言うより、そういうスレは無いんだよ厨房ちゃん
291286:02/12/20 01:02
いや、だから全部作れってわけじゃ無いんだよ
グラフィック関数使った奴はもう出来たんだけど
テキストオンリーのやつがどうしてもわからないんだ
スクロールとか辺り判定とか
とんでもねぇ奴もいたもんだなw
どう弁解しようと 287 + 289 は 「全部作れ」 以外の何物でもない
出された課題が自分の手に負えないから何とかしろと言うならまだ分かる (でもスレ違い
だけど) が、自分で作りたいというのに人に作ってもらってどうするつもりなんだ?
ちなみに、ぶっちゃけた話、C 標準ではテキストテトリスは作れない。
標準出力は 「ストリーム」 であり 「画面」 ではないからだ。
プリンターにプリントアウトしながら
テキストテトリスをやるのが本物の漢だ
297291:02/12/20 01:31
>>293
いや、あんたがどう誤解しようと全部作れとは言ってないわけで
その作り方が知りたいだけですよ。その辺の小学生じゃないんだから
ソース教えてもらったからって丸パクリするわけじゃないし
298291:02/12/20 01:32
>>295
あ、そうなの?じゃいいや
悪いね
299デフォルトの名無しさん:02/12/20 01:32
>>297
誰かこいつ頃せ
291より過剰に反応してるヤツの方がウザイ。教えるか無視するか
どっちかにしとけ。
>>300
ここは教えて君マンセーなスレだったのか?
虫四郎
303Sタソファソ:02/12/20 02:04
C言語じゃなくてJavaScriptならいいの知ってたのに・・・
ちぃ言語きぼんぬ
>>284
知ってる!!
何を嬉しそうに。
307236:02/12/20 10:41
>>264
文字列 ≡ char[] なんだが…
少しだけ >>184 の気持ちが判った気がする。
308デフォルトの名無しさん:02/12/20 12:09
教えてください
X2乗+y2乗+z2乗→最小

6x+3y+4z=61
をc言語でやるとどうなりますか??
>>308
…?
よく判らんけど、アルゴリズムを訊いてるの?
310デフォルトの名無しさん:02/12/20 12:15
>>269
結局誰もマジレスしなかったね。
>>308
マルチだし、意味もわからない。
312デフォルトの名無しさん:02/12/20 12:22
すみません
>308はちょっと頭がおかしいのです。
あの計算をするプログラムを聞いているのだと思います
313デフォルトの名無しさん:02/12/20 12:31
もしかして、
308==312では?
314デフォルトの名無しさん:02/12/20 12:39
モチロンソウヨ
>>313
まあ、どっちでもヨいんではないかと。
>>312もいみわかんないし。・・・ドノケイサンナンダロウ・・・
316デフォルトの名無しさん:02/12/20 13:13
オリジナルのMassageBoxの出し方を教えてください。
void MessageBox(const char* message)
{
 int c;
 printf("オリジナルのMessageBox: %s\nHit Enter", message);
 while ((c = getc()) != EOF && c != '\n');
}
318デフォルトの名無しさん:02/12/20 14:49
ソウアルカ・・・
ジツハ、ワタシモドレヲ
ケイサンシテイイカ
ワカラナイノヨ
319デフォルトの名無しさん:02/12/20 16:30
すみません、
#include <conio>の、conioってなんですか?
conio.hじゃなくて?

コンソール I/O のことだと思う。
321319:02/12/20 16:39
.hを付けると、エラーがでるのですが、
同じものなのでしょうか?
322319:02/12/20 16:43
↑ getch() 使っていました。すみません。わかりました。
アルゴマンコ参上!
2ちゃんねる VS TIME・・・
その戦いの歴史は、まさに近代兵器の見本市だった
田代砲にはじまる数々のスクリプト兵器を経て、到達した97式アラファトマシンガン
これはまさに最終兵器として、猛威を振るった
だがしかし、ついにTIMEはこれらの兵器全てを完膚無きまでに無効とする
パプリカの設置に成功した
武器を奪われた我々に残されたもの ・・・それはチョップ
手動で一撃一撃叩き込むチョップ。地味で威力も極限まで小さなチョップ
ただそれだけと、なってしまった
だがしかし、チョップといえども決してバカには出来ないということを!
そしてこのような手段にまで出たTIMEを今一度
我が2ちゃんねらーの総意を込めたチョップを以て、叩き壊したい!
有志たちの参戦を、ひとりでも多くの戦士の挑戦を待つ!!!

「TIME」誌2002年の顔にアラファト議長を! 5
http://live.2ch.net/test/read.cgi/festival/1040349157/
326デフォルトの名無しさん:02/12/20 17:13
K&Rサンプルソースを打ち込んでみたのですが、エラーの原因がわかりません。

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

#define MAXLINES 5000

char *lineptr[MAXLINES];

int readlines(char *lineptr[],int nlines);
void writelines(char *lineptr[],int nlines);
void qsort(void *lineptr[],int left,int right,int (*comp)(void *,void *));
int numcmp(char *,char *);

main(int argc,char *argv[]){
int nlines; /* 読み込まれた行の数 */
int numeric = 0; /* 数値ソートならが1 */

327326:02/12/20 17:13
続きです

if(argc > 1 && strcmp(argv[1],"-n") == 0)
numeric = 1;
if((nlines = readlines(lineptr,MAXLINES)) >= 0){
qsort((void **) lineptr , 0 , nlines-1 , (int (*)(void *,void *))(numeric ? numcmp:strcmp) );<<ここでエラーらしい
writelines(lineptr,nlines);
return 0;
}else{
printf("input too big to sort\n");
return 1;
}
}

エラーメッセージは↓
20: 2 つのオペランドは同じ型に評価されなければならない(関数 main )

328デフォルトの名無しさん:02/12/20 17:14
エラーメッセージを貼ってよ。
>>326
エラーメッセージがわからなければ原因がわかりません。
330328:02/12/20 17:15
おっと。

331デフォルトの名無しさん:02/12/20 17:16
ワラタ
続きがあるならあると言えw


333デフォルトの名無しさん:02/12/20 17:16
>>327
そのものズバリだと思うが。
334デフォルトの名無しさん:02/12/20 17:17
自分で解ってんじゃ
335328:02/12/20 17:17
三項演算子の二番目と三番目の型が違うってことか?
>>324
それは恐らく違う、思うに問は
6x+3y+4z-61=0の条件の下でのx^2+y^2+z^2の最小値
セミコロンが全角とか…
ブラックジャックのプログラムを組んだらエラーは出ないけど点数の集計がおかしい
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define CMAX 52
struct input {
int num[CMAX];
int n;
} ;
int comp(void);
int getcard(struct input *inp);
void print(struct input *inp);
int calc(struct input *inp);
#define randmize() srand(time(NULL))
char *card[]={"0", "A", "2", "3", "4", "5", "6",
"7", "8", "9","10", "J", "Q", "K"};
int ncard[]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10};
main()
{
int x, c, h;
char in[256];
struct input inp = {{0},0};
randmize();
printf("ブラックジャック\n");
c=comp();
x = getcard(&inp);
printf("'%s'を引きました。もう1枚引きますか?(y/n)\n", card[x]);

続くよ
while (inp.n < CMAX && scanf("%s", in) == 1) {
if (strcmp(in, "y") == 0) {
x = getcard(&inp);
printf("'%s'を引きました。もう1枚引きますか?(y/n)\n", card[x]);
print(&inp);
}
else if (strcmp(in, "n") == 0)
break;
else
printf("yかnのどちらかを入力してください\n");
}
h = calc(&inp);
printf("コンピュータは%d点です。あなたは%d点です。\n", c, h);
if ((c<=21 && h>21)|| (c<=21 && c>h) )
printf("コンピュータの勝ち!\n");
else if ((h<=21 && c>21) || (h<=21 && h>c))
printf("あなたの勝ち!\n");
else
printf("引き分け\n");

return 0;
}

int comp(void)
{
return rand()%8+16;
}

まだ
int numcmp(char *,char *);
これを
int numcmp(const char *, const char *);
にすればいいんんかな?
int getcard(struct input *inp)
{
int x;
x = rand() % 13 + 1;
inp->num[inp->n] = x;
(inp->n)++;
return x;
}
void print(struct input *inp)
{
int i;
printf("いままでに引いたカードは ");
for (i=0; i<inp->n; i++)
printf(" %s", card[inp->num[i]]);
printf(" です\n");
}
int calc(struct input *inp)
{
int i, n1=0, sum=0;
for (i=0; i<inp->n; i++) {
sum = sum + ncard[inp-<num[i]];
if (inp->num[i] == 1)
n1++;
}
while (n1-- > 0)
if (sum <= (21-10))
sum = sum + 10;
return sum;
} 終わり。なんで?
342デフォルトの名無しさん:02/12/20 17:28
普通に動かないか?
無駄は多いが
何がどうおかしいのか書けよ
>>341
なんでって言われても。計算方法が違うんだろ。
345デフォルトの名無しさん:02/12/20 17:30
sum = sum + ncard[inp-<num[i]];

[inp-<num[i]];
   ~~~~
これで集計が出たら神です
>sum = sum + ncard[inp-<num[i]];
ここを
sum=sum+ncard[inp->num[i]];
に書き直す

347341:02/12/20 17:32
うぉ、早いな
やってみよう
348デフォルトの名無しさん:02/12/20 17:33
スイマセン!!
C++Builderでホームページを作るにはどうしたらいいですか!?
349デフォルトの名無しさん:02/12/20 17:34
あっ間違えました!
ボーランドっていうやつです!
>>348
#include <stdio.h>
int main()
{
printf("Content-Type:text/html\n\n")
/* ここからprintfの嵐 */

return 0;
}
>>348
int main()
{
    printf("<html>\n");
    printf("<body>\n");
    printf("</body>\n");
    printf("</html>\n");
ネタにマジレスが美しい。
353デフォルトの名無しさん:02/12/20 17:37
使い古されたネタだな
「!」が多いと厨って感じ。
>>353
質問が?回答が?
356デフォルトの名無しさん:02/12/20 17:38
>>355
質問
回答もだろ…w
暴乱怒はしらないけど、VC++ならHTMLエディタとしての機能があったような。
359デフォルトの名無しさん:02/12/20 17:44
>>348いい加減ぼーらんど使うのやめればいいのに
>>350printf()関数セミコロンつけ忘れと思われ
361350:02/12/20 18:03
(;_;)(;_;)(;_;)(;_;)(;_;)
もう>>350さんったらおっちょこちょいね♪
>>358
キーワードハイライトだけはやってくれるね。

ちなみにテンプレート
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Developer Studio">
<META HTTP-EQUIV="Content-Type" content="text/html; charset=x-sjis">
<TITLE>ドキュメント タイトル</TITLE>
</HEAD>
<BODY>

<!-- ここに HTML を挿入してください -->

</BODY>
</HTML>
>>316
もしかしたら存在するかもしれない、と思ってググったら本当にあったよ!
http://members.jcom.home.ne.jp/warna-warni/AB-10.html
http://www.vector.co.jp/soft/data/writing/se001951.html

vectorってこんなものまで登録されるのね
366 ◆F52DmOxJlc :02/12/20 20:33
>>364
ワロタ
367名無し@沢村:02/12/20 20:37
>>348
C++Builder付属のテキストエディタでホームページのソースを書いて.html拡張子をつけて保存すればいいよ。
C++Builder付属のテキストエディタでなくてもテキストエディタなら何でもいいよ。メモ帳でもいいんだよ!ホントだよ!!
愚問ですがポインタに関することで
int a;
printf("%p",&a);
とするのと
int *a;
printf("%p",&a);
とするのでは違いはあるのでしょうか?できたら*や&の概念について
教えて欲しいです
厨房でスマソ
違いはないよ。どちらもaのポインタを見ている。

ただ、
int a;

int *a;
は全く型が違う!とだけ言っておこう。
ポインタは、初心者本にあるようなintに*や&をつけて試してるだけでは
おそらく理解できないよ。余計混乱するだけ。

構造体を動的に確保したり、リストを作ったりしてれば自然と分かる。
371368:02/12/20 21:15
う〜ん やっぱりポインタは難しい
プログラム本格的に勉強するんだったら学校通った方が
いいんでしょうかね〜?
372デフォルトの名無しさん:02/12/20 21:18
ランダムな数列
1,3,6,7,9....
を配列aに保存したいとして、
1. 配列を0で初期化して1,3,6,7,9番目の要素を1にセットする
2. 0番目の要素に1、1番目の要素に3、3番目の要素に6…と入れる

1.だとある数字が保存されているかどうかa[i]が1かどうかを調べれば分かるが、
 保存された数字をとりだしたいときは配列の先頭から調べなければならない
2.だと配列の先頭から保存された数字を簡単に取り出せるが、
 ある数字が保存されているかどうかは配列の先頭から調べなければならない

で、1.と2.の両方の配列を用意しようと思うのですが、もっと一般的な常套手段はありますか?

373デフォルトの名無しさん:02/12/20 21:19
>>371
独学で十分だと思うが・・・
ちなみに、
*の付いた変数は、変数のアドレスを格納する変数。
&の付いた変数は、&の付いている変数自身のアドレス。
>>371
それはない。
ポインタを宣言するときの
int *a;
とポインタの参照先を表す
*a = ....
は混乱するな。
するか!
377368:02/12/20 21:25
ん〜 やっぱりよくわからん
C言語勉強するんだったらどういう勉強方法が一番いいですか?
>>375
慣れてないとナ。
とにかく、くむ、くむ、くむ
ひたすら、くむ、くむ、くむ
はくまで、くむ、くむ、くむ
380デフォルトの名無しさん:02/12/20 21:28
ポインタで挫折する奴が多いかも・・・
ポインタ完全制覇とかは?
読んでないけど。

で、例題を応用してなんか作ってみる。

>>377
試行錯誤

ポインタが最初の壁だよね。
383368:02/12/20 21:31
なるほどw
んで
int a;
int *b;
を使ってaのアドレスをbに格納するには
どうしたらいいですか?
384デフォルトの名無しさん:02/12/20 21:33
>>377
俺は、柴田望洋著の「秘伝C言語問答 ポインタ編」を読んで、
ポインタを理解したが・・・
>>372
1. を少しいじくって、要素に1をセットするのではなく、次の数字を入れる
ってぇのはどう?
386デフォルトの名無しさん:02/12/20 21:37
>>383
bは変数のアドレスを格納する変数だから、
int *b = &a
&が付いている変数(a)は、その変数(a)のアドレスを意味する。
アセンブラからCに入ったから
ポインタでは挫折しなかった。

今考えたら幸せな人生だったな。
388デフォルトの名無しさん:02/12/20 21:39
>>387
そういえば、ポインタで挫折する奴が多いんだよな。
389368:02/12/20 21:40
ってことはbを宣言してからbにaを代入する式を書く場合は
int a;
int *b;
b=&a;
ってなカンジですか?
390デフォルトの名無しさん:02/12/20 21:41
>>389
その通り!!
つーか、モノつくってりゃ、ポインタがナンタルカはわからなくても、使い方
は理解できるようになる。理解はその後でいいと思うけど。
392368:02/12/20 21:44
このときに*b=&aにしちゃうとエラー出ますよね?
これってのはどういう事なんですか?
393デフォルトの名無しさん:02/12/20 21:44
>>391
理解してからモノ作り始めた方が、挫折する確立が
低くなるのでは?(そうとも限らないかな??)
ポインタのどこが難しいのかが分からん。
凡人の考えが理解できない天才の悩み。
ポインタ=変数をグローバル変数みたいに扱う機能
ってことでいいんですか?
>>392
変数名の前に&をつけるとその変数のアドレスになる。
また、ポインタの前に*をつけるとそのポインタが指し示す変数(とは限らんが)の値になる。
で、君はなにをやろうとしたのかな?
397デフォルトの名無しさん:02/12/20 21:50
>>395
違うかも・・・
>>395
ポインタ(pointer)は変数のアドレスを示す変数。
399368:02/12/20 21:53
>>396
int *b;
って宣言したらそのまま*b自体を変数として
使わなきゃいけないのかぁと思いまして
俺はCの演習書の例題みたいなのやってたら自然に見についたなぁ。
いま思うとなんでこんなややこしいことすんなり頭に入ったんだろ?って
すごい不思議だ。
>>399
int*型(intのポインタ型)の変数bを宣言したといえば分かる?
ココは「ポインタを自然に理解した」ことを自慢するスレじゃないぞ...
403デフォルトの名無しさん:02/12/20 21:59
>>392
初期化以外に*を変数に付けると、間接参照の意味になる。
例えば、
int a = 10 aに10を格納
int *b = &a bにaのアドレスを入れる
int c = *b bに格納されているアドレス(a)に間接的にアクセスし
       aに格納されている値をcに代入
したがって、cに格納される値は、aに格納されている値、10。
404368:02/12/20 22:00
なるほど!
int型で*bを宣言するんじゃなくて
int*型でbを宣言するって事か!!
405デフォルトの名無しさん:02/12/20 22:01
>>404
その通り!!
406368:02/12/20 22:03
勉強になりました!!
なんとなくポインタの概念が分かったような気がします
気のせい
408デフォルトの名無しさん:02/12/20 23:19
char* str;
char *str;
って何か違いあるのですか?

あと、ポインタってやっぱり必要なの?
char* str;
だろうと
char *str;
だろうと
char * str;
だろうと
char
*
str
;
だろうと同じこと。
あと、それなりのプログラム書こうと思ったらポインタは必須。
410デフォルトの名無しさん:02/12/20 23:41
>>409
ありがとうございます。
411名無し@沢村:02/12/20 23:42
>>404
>int型で*bを宣言するんじゃなくて
>int*型でbを宣言するって事か!!

それはいえる。*bをbのように扱うとintから(int *)への変換ができませんというエラーが出るのがその証拠だよ。
412名無し@沢村:02/12/20 23:56
>>404
ただ、int(*b)とした場合はbはint型になるよ。
>>371
お前さんみたいなのがいるからうちは儲かるんだよ。
414バカ:02/12/21 00:19
くだんないことですいません。
スタックと配列の違いってなんですかね〜?
>intから(int *)への変換ができませんというエラーが出る
それはC++だろう

>int(*b)とした場合はbはint型になる
そんなわけがない
>>414
小麦と麺のような違い
>>414
何のことかよく分からんが
スタックはFirst In Last Outなデータ構造で
配列はランダムアクセスな奴じゃないか

それとも記憶クラスとかの話か
それだと比較対象が変な気がするが
418デフォルトの名無しさん:02/12/21 00:32
>>417
普通、Last In First Outと言わないか?LIFO
>>418
俺もそのツッコミしようとしたが検索するとどっちも相当数引っかかるのでやめた。 
420バカ:02/12/21 00:38
どうもです。なんとなくわかりました
>>418
そうか ? FIFO と対比するために、おれも FILO と言うよ。
422417:02/12/21 00:44
うーむおかしいな、ずっとFILOだと思っていたんだが
ちょっと見た手持ちの本もLIFOになってる。
俺は異世界に紛れ込んで来てしまったのか?
普通はLIFOだろ。うちの英和辞典には簿記用語としてだがFIFO⇔LIFOと書いてある。
LIFOだろ…
数式文字列を解析するロジックを教えてください。

answer = expr("1 + ( 2 + 3 * 4 )");

trace(answer == 15);

こんなかんじで・・とりあえず変数とか関数は結構です。
漏れ、最近まで、

スタックは頭から入って頭から出ていくんだから、FIFO。
キューは尻から入って頭から出ていくんだから、LIFO。

だと勘違いしてた。
427417:02/12/21 01:11
うーむだめだ。ずいぶん前にPC98関係の何かで見たと思うのだが見つからない。
ハードウェアの本はFIFOがメインだし、
と思ったら80x86/80x87ファミリーテクニカルハンドブックという本に
「このようなスタック操作はLIFOまたはFILOと呼ばれています。」という記述を発見

終了
>>425
「四則演算 インタプリタ」で google すれ
セオリー通りに作るなら、
字句解析、再帰下降型構文解析、インタプリタ実行
の三段階。
お手軽なのは、逆ポーランド記法。
>>428
> 「四則演算 インタプリタ」で google すれ
>>429
> お手軽なのは、逆ポーランド記法。
おお そんなものがあるのですね
言葉すら知らなかった厨卒プログラマでした・・・
>>427
そこまで分かっていながら何を悩んでいるのだ。キミは間違ってないぞ。
終了してしまう前にこのへんでも眺めて整理すれ。

スタック == LIFO (FILO)
http://www.atmarkit.co.jp/icd/root/56/5783656.html

キュー == FIFO (LILO)
http://www.atmarkit.co.jp/icd/root/43/67542643.html
LInux LOader?
433JPL ◆M2sbYPnTcE :02/12/21 04:39
#if 0はコメントになりえるか。
int RingNum(int base,int off,int min,int max)
{return((base+off-(max<min ? min^=max^=min^=max:min)<0 ?
(max-min+1)-(min-base-off)%(max-min+1):base+off-min)%
(max-min+1)+min);}
リングナンバーを無理矢理1行にしてみたっす(既出っぽくてすいません)
base:開始点off:移動距離ね
minmaxは大きさ比較してスワップ、offにmax-min+1以上入れても
だいじょぶっす・・・たぶん
バグありますかね?
435434:02/12/21 05:26
return((base+off-((...?...)...?...:base+off-min)...;
を注目するとbase+offの所ら辺がもっと突っ込めるかな?
436434:02/12/21 05:32
いやおかしいぞbaseもoffも消えたら定数じゃんか!?
リングナンバーって何ぞや?
438434:02/12/21 05:38
return((base+off-(...)<0 ?
ああここで区切りだった
なんかもっと縮められないかな?

439434:02/12/21 05:45
>>437
正式名称知らないっすけどmin=2,max=5だったら
base+off=
0,1,2,3,4,5,6,7,8,9,10,11,12,13,...だと
4,5,2,3,4,5,2,3,4,5, 2, 3, 4, 5,...ってかんじ
循環数ってゆうのかな?プログラム的にはよく使うでしょ
>>434
base+offの2つに分ける意味は?
int RingNum(int base_off,int min,int max); /* これでも同じでは? */
441434:02/12/21 05:52
>>439
書き忘れたけど負の方もつながってるねんで

どうでもいいけど
マウスがいかれてキーボードだけで打つのってかなりしんどいんですが...
442434:02/12/21 05:56
>>440
同じだけどbaseは現在位置offは移動距離とゆうのを
はっきりさせたいんすよ、まあ呼び出し元で
n=RingNum(base+off,min,max);とやってもいいんですが、
443434:02/12/21 06:21
n=RingNum(base+off,min,max);の方が良く思えてきた...
じゃあこうです
int RingNum(int num,int min,int max)
{return((num-(max<min ? min^=max^=min^=max:min)<0 ?
(max-min+1)-(min-num)%(max-min+1):num-min)%
(max-min+1)+min);}
ああこの方が見通しいいですね
(num-MIN<0 ? VAL-(MIN-num)%VAL:num-MIN)%VAL+MIN;
//MAX,MIN:比較スワップ済み
//VAL=(MAX-MIN+1)
複数行で書いたのとほぼ同じになりますた
444434:02/12/21 06:27
負の入った剰余ってちゃんと定義されてるのかな?
気持ち悪くて使わないのですが・・・
使っても問題無さそうでも気持ち悪いんすよ
>>444
ごちゃごちゃ抜かさんとコード書いて検証すれば良かろう。
あのAAを呼び寄せるスレですか?
#include <stdio.h>
#define N 0
int RingNum(int num,int min,int max){
return((num-(max<min ? min^=max^=min^=max:min)<0 ?
(max-min+1)-(min-num)%(max-min+1):num-min)%
(max-min+1)+min);
}

main(){
for(int i=-5; i<5; i++)
printf("%d",RingNum(N+i,2,5));
return 0;
}


3452345234
でした。
448デフォルトの名無しさん:02/12/21 10:44
strstrの第二引数に空文字列を与えた場合に第一引数の値がそのまま返るというのは仕様で決められていますか?
はい
450デフォルトの名無しさん:02/12/21 10:53
>>448
私へのレスですよね??
サンクスです。
451デフォルトの名無しさん:02/12/21 11:31
>>60cm浮き上がるストレートサンクス
とりあえず。やってみます。
>>445
出来るに互換性のあると限るまいて

>>444
ISO9899に(a/b)*b+a%b==aとある
453デフォルトの名無しさん:02/12/21 15:30
>>336
そうです。
それで、やるとどうなりますか??
オネガイシマス
454デフォルトの名無しさん:02/12/21 16:09
C言語でwindowsで動くのGUIアプリを作りたいんですが
どのソフトを使えばいいんでしょうか?
>>453
他のスレで答え出てるぞ
数学板か・・・
>>454
Cのコンパイラ
>>454
実は無い。Windowsでは全ての言語はBASICにトランスレートしてからコンパイルされる。
459名無し@沢村:02/12/21 20:28
>>441
>マウスがいかれてキーボードだけで打つのってかなりしんどいんですが...

マウスくらい買え!!
それはあなたがGUIに魂を惹かれたからです

偉い人にはエディタにマウスなんて入らないことがわからんのですよ

正直俺はキーボードだけでほとんどの作業をやります
最近、キーボードで文字を打つのがおっくうになってきた。
過去の遺産をコピペして自作リファクターかけてお終い
ってパターンで仕事が済むようになってきたからかな。
最近、
マウスまで手をのばすのが面倒になってきた・・・

お  い  ら  だ  け  で  す  か  ?
名無し@沢村 の発言

> 基本的に本は読まないポリシーだが、
> ちなみにそれはどこの出版社から出ているのですか?著者は誰ですか?いくらですか?


プログラマに向いてない今すぐやめろ。
>>463
いや、「人間に向いてない今すぐやめろ」にすべきだ。
>>462
漏れは前からそうです。
マウス使うぐらいなら、ノートのタッチパッド使います。
普段は、IBMのスペースセーバーキーボード。
466 ◆F52DmOxJlc :02/12/21 23:21
>>462
>>465
同意。
最近はキーボードだけで操作ができないアプリは
(たとえそれがGUIでも)駄目なんじゃないかと思い始めました
じゃあWindowsなんかはエクスプローラからして
すでに駄目なソフトなわけだ。
>>468
具体的に、どの操作がキーボードでできないんだ ?
>>468
Win + e でエクスプローラを起動して
Tab , Shift + Tabで移動して
Shift + F10で右クリックできますが、何か?
>>470
俺はShift+F10じゃなくて変なボタン(jp106:Windowsボタンの横にある奴)使ってるよ。
ってかShift+F10なんて知らなかった。ありがd
Windowsはそのほとんどの基本操作がキーボードで出来るように設定されているよね。
一方、Xなどはwmによってはマウス無しでは何もできない・・・
473 ◆F52DmOxJlc :02/12/22 02:34
>>471
>変なボタン(jp106:Windowsボタンの横にある奴)
アプリケーションキー
>>473
ありがd!このキーを説明する機会があったら恥をかかずに済みそうです。
475デフォルトの名無しさん:02/12/22 03:07
>>470
マウスでCtrl押しながらクリックして
複数のファイルをちょんちょんと
飛び飛びに選択 ってのが
キーボードだとできない。
あとファイルの(見た目の)移動も。
>>475
できる。
>>475
移動する時にCtrl押しながら移動してごらん。
>>477
できないよ
>>478
んー。
1.Ctrl押しながら移動
2.Ctrl離してスペース
3.Ctrl押しながら移動

だよ。
winのキーボード操作がCと何の関係があるのか小…(略)
と言う訳で、これ以上は他の板でやって下さい
アハハw
ユーザー補助のマウス--テンキーを使うのはだめですか?
C言語でポリモーフィズムが出来ると聞いたのですが、
C++に移行せずにCに拘ってまで使う意味ってありますかね?
C++以上のポリモを実装するなら意味はある
>>434&&452
数学的に負の値が入った除算は
-5/2 = -3 余り1
が正しいらしいが(これを実装してる処理系がある)C99で
-5/2 = -2 余り-1
に統一されたようです

ちなみに
min^=max^=min^=max;
の結果は未定義なんじゃ…
>>485
それは結合規則が厳密に決まってるから
結果は常に一意だと何度も何度も何度も
何度も何度も何度も何度も何度も何度も
>>486
ではFAQの3.8は嘘だと
>直前の副作用完了点と次の副作用完了点までの間に、
>式の評価によってオブジェクトに格納された値を
>変更する回数は高々一度だけでなければならない。
>更に、変更前の値は、格納される値を決定するため
>だけにアクセスしなければならない。
>>483
Cでポリモというと
関数ポインタ,stdioあたりか
Win32のハンドルもかなり多相的

C++よりCがいいのは
ずばりプログラムが小さいときだ
言う人によって違うと思うが
漏れ的には1000行以下のとき
>>484>>488
ありがd
本格的に調べてみるっす
>>487
>>490
嘘って、これって規格の文章じゃないの?
Between the previous and next sequence point an object shall have
its stored value modified at most once by the evaluation of an expression.
Furthermore, the prior value shall be accessed only to determine the value to be stored.
492菊地桃子:02/12/22 10:43
ここって、厨房ばっかりでほんっと
つかえない
493デフォルトの名無しさん:02/12/22 11:01
>>492
意味のない書き込みをしているお前が一番使えない
ネタとして使ってやろうぜ〜〜〜〜〜
495デフォルトの名無しさん:02/12/22 12:39
((きすつならすまそ.>>1にかかれている「ソース丸投げ」スレもわからんかった.すまそ))

バブルソートのコードについて質問です.
『独習C』には下記のようにかかれていました.
・・・・・・・・・・・・・・・・・・・

printf("数をいくつ入力しますか?");
scanf("%d", &count);
for(a=0; a<count; a++) scanf("%d", &item[a]);
for(a=1; a<count; ++a)
for(b=count-1; b>=a; --b) {
if(item[b-1] > item[b]) {
t = item[b-1];
item[b-1] = item[b];
item[b] = t;
}}
for(t=0; t<count; t++) printf("%d ", item[t]);
・・・・・・・・・・・・・・・・・・
しかし,私が考えたソートと表示の部分は,
for(a=0;a<count;a++){
for(b=0;b<count-1;b++){
if(item[b]>item[b+1]){
t=item[b+1];
item[b+1]=item[b];
item[b]=t;
}}}
for(a=0;a<count;a++)printf("%d",item[a]);
っとなりました.
独習の方は,forループの初期化の部分がややこしく感じるのですが,
一般的には私のほうがわかりにくいんでしょうか.
独習みたいにするメリットとかがあれば教えてください.
>>495
分かりにくいというより間違ってる。
497デフォルトの名無しさん:02/12/22 13:35
え,どこがですか?

ちなみに,テキストファイルでうぷしますた.↑よりは見やすいです.
http://cgi.2chan.net/up/src/f8508.txt
http://cgi.2chan.net/up/src/f8509.txt
>>497
あなたの書いたコードは無駄な処理をしているので、お手本のものより2倍近く遅いです。
どこが無駄かはアルゴリズムをちゃんと理解してれば分かるので
自分で考えてね。
499デフォルトの名無しさん:02/12/22 14:23
ああ,速さか.
そう言われるとそうですね.
お手本のほうが直線的な感じがします.
まだ,プログラミングをはじめたところなのでパフォーマンスの面までは
なかなか気を配ることが出来ませんでした.
いいコードを吸収してスマートなコーディングができるようになりたいものです.
ども.
500
501デフォルトの名無しさん:02/12/22 14:26
static a;

static int a;
といっしょ?
>>501
ああ、いっしょさ。
503デフォルトの名無しさん:02/12/22 14:32
>>502
さんくちゅ
504デフォルトの名無しさん:02/12/22 14:33
N個の玉から成るネックレスが用意されている。
玉の色は赤、青、白のうちのどれかであって、ランドムにアレンジされている。
そのネックレスをある点で切って横に並べ、その点から右、左と2方向に渡って
違う色に出会うまで同じ色の玉を集めるものとする。
このときもっとも多くで何個の玉を集めることができるかを判断する
プログラムをお願いします。

例:brbrrrbbbrrrrrbrrbbrbbbbrrrrb(ただし、r:赤, b:青, w:白)と
構成されているネックレスならば、9番目の玉と10番目の玉の間、
24番目の玉と25番目の玉の間から切るとすれば、最大の8個の玉を
集められますね。
->brbrrr{bbb|rrrrr}brrbbr{bbbb|rrrr}b
ただし、白の玉に出会った場合、それは赤にも青にも
変われるものとします。
>>504
ランドム...。
まず、ランドムから検討していこう
俺を踏み台にしますか?
赤 マッシュ
青 オルテガ
白 ガイア
508504:02/12/22 14:41
おっと大事な情報を書くのを忘れました。
3<=N<=350
Nはネックレスの玉の数。
>>506
エラー:1体足りません
510504:02/12/22 14:43
>>505 randomをそのままローマ字読みしてしまった。
>>506 OK
511504:02/12/22 14:47
入力ファイル:
1:玉の数。例:29
2:ネックレスを切って横に並べたもの。例:brbrrrbbbrrrrrbrrbbrbbbbrrrrb

出力ファイル:
1:最大でいくつ集められるか。例:8
512504:02/12/22 14:52
問題文に間違いを発見したので訂正します。

そのネックレスをある点で切って横に並べ、その点から右、左と2方向に渡って
違う色に出会うまで同じ色の玉を集めるものとする。
↓↓↓↓
そのネックレスをある点で切って横に並べ、任意の点から右、左と2方向に渡って
違う色に出会うまで同じ色の玉を集めるものとする。
>>504
仕様が把握できない

白は特別なの?
何カ所で区切るの?
>>512
切る点と集め始める点は無関係なのか?
なんのために切るんだ?
宿題スレに逝けや
516504:02/12/22 15:05
>>513
入力ファイルから情報を読み取って、出力ファイルに答えを書くプログラムですが、
例えば入力ファイルが次の場合、

29
wwwbb}rwrbrbrrbrbrwrwwrb{wrwrr|b

|から左に赤玉が5個(wrwrr)、右に青玉が6(bwwwbb)個ありますね。
wはrにもbにも変われるものだから、左の場合rとして数えられて右の場合bとして
数えられていますよね。このとき集められる玉の最大値は5 + 6 = 11個。
よって、出力ファイルには、

11

となればいい。

>何カ所で区切るの?
1ヶ所から区切る。ただ、>>504の例では2ヶ所のどちらから区切っても、
答えは8で同じだっただけです。
517504:02/12/22 15:10
>>514
切る点はどこでもいいです。問題文が悪くてすみませんでした。
最大で何個集められるかの問題ですので、

wwwbb}rwrbrbrrbrbrwrwwrb{wrwrr|b

でも、

rwrbrbrrbrbrwrwwrb{wrwrr|bwwwbb}

のどちらの場合でも答えは11。
>>517
要するにリング状になったまま左右に数えるんだな。
それなら最初の文のほうがまだ分かりやすい。

「任意の点で切って、両端から連続する色を数える。ただし白を含んでも構わ
ない。」ってとこか?

bwwwbb}rwrbrbrrbrbrwrwwrb{wrwrr


519504:02/12/22 15:31
>>518
>要するにリング状になったまま左右に数えるんだな。
その言い方の方が分かりやすいですね。
ただ、stringとして与えられているのでどっかで切られているだと。

>両端から連続する色を数える。
どんな形でネックレスのstringが与えられているか分からないので、
両端から数えると必ずしも答えにはならない。
>>519
> どんな形でネックレスのstringが与えられているか分からないので、
> 両端から数えると必ずしも答えにはならない。
だからそれを切り直すんだろ。
>>520
いやまて、8の字型のネックレスとかいうんじゃあるまいな?
522504:02/12/22 15:37
>>520
そういう突込みをされるのではないかと思っていました。(笑
8の字型になることはないのでご心配なく。
>>522
じゃあはじめから厳密に定義しろよボケ。
というかはじめから宿題スレに逝けよボケ。
525デフォルトの名無しさん:02/12/22 15:41
ボケボケ言うなよボケ。
ボケボケボケ
ボケボケボケボケ
ボケボケボケ
527デフォルトの名無しさん:02/12/22 16:13
子供の喧嘩だな・・・
>>504
ほらよ、とりあえず版だ。

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

typedef struct {
 char Beads[351];
 int NumberOfBeads;
} Necklace;

static int NextPoint(const int NumberOfBeads, int Point, const int Step)
{
 Point += Step;
 if(Point < 0){
  return Point + NumberOfBeads;
 }
 if(NumberOfBeads <= Point){
  return Point - NumberOfBeads;
 }
 return Point;
}
>>528
続き...

static int GetContinuousBeads(const Necklace *Necklace, int Point, const int Step)
{
 int n;
 char OriginalColor;
 int OriginalPoint;

 OriginalPoint = NextPoint(Necklace->NumberOfBeads, Point, 0);
 OriginalColor = Necklace->Beads[OriginalPoint];
 for(Point = NextPoint(Necklace->NumberOfBeads, OriginalPoint, Step), n = 1;
  Point != OriginalPoint; Point = NextPoint(Necklace->NumberOfBeads, Point, Step), n++){
  char CurrentColor;

  CurrentColor = Necklace->Beads[Point];
  if(CurrentColor != 'w' && CurrentColor != OriginalColor){
   break;
  }
 }
 return n;
}
>>529
続き...

int main(void)
{
 Necklace Necklace;
 int i;
 int Maximum;
 int SplitPoint;

 if(fgets(Necklace.Beads, sizeof Necklace.Beads - 1, stdin) == NULL){
  fprintf(stderr, "入力できんかった、鬱だ...。\n");
  exit(1);
 }
 for(i = 0; Necklace.Beads[i] != '\n' && Necklace.Beads[i] != '\0'; i++){
  switch(Necklace.Beads[i]){
  case 'r':
  case 'b':
  case 'w':
   break;
  default:
   fprintf(stderr, "変な色 %c があるやん、ちゃんとせーや。\n", Necklace.Beads[i]);
   exit(1);
  }
 }
 Necklace.NumberOfBeads = i;
 if(Necklace.NumberOfBeads < 2){
  fprintf(stderr, "ビーズが少なすぎるぞ、なめとんかぁごらぁ。\n");
  exit(1);
 }
>>530
続き、これで終わり。

 Maximum = 0;
 for(i = 0; i < Necklace.NumberOfBeads; i++){
  int n;

  n = GetContinuousBeads(&Necklace, i, -1) + GetContinuousBeads(&Necklace, i + 1, 1);
  if(Maximum < n){
   Maximum = n;
   SplitPoint = i;
  }
 }
 for(i = 0; i < Necklace.NumberOfBeads; i++){
  printf("%c", Necklace.Beads[i]);
  if(i == SplitPoint){
   printf(" | ");
  }
 }
 printf(": %d個だ。\n", Maximum);
 _getch();
 return 0;
}

結果:
wwwbbrwrbrbrrbrbrwrwwrbwrwrrb
wwwbbrwrbrbrrbrbrwrwwrbwrwrr | b: 11個だ。
532504:02/12/22 16:45
>>528
ご丁寧にありがとうございました。
>>528-531
長い + 処理系依存 = カコワルイ
の典型みたいなコードだな。こりゃ。
>>533
評論するのは楽だよな。と。
>>534
つーか、長いって言うのは半分意識的に書いてるからいいんだけど、処理系依存ってどこよ ? >>533

もしかして消し忘れの #include <windows.h> と、デバッグ用の _getch() のこと言ってんのか ?
536504:02/12/22 17:08
>>528-531
俺はプログラムを書いて頂いただけで十分に感謝しています。
しかも動作のチェックまでしてくれているので、
なんの問題もなく享受することができて、満足です。
消し忘れか。
上手いいいわけだな。
#include <windows.h>
だってーギャハハ!!!!プーー!!!
ここ何のスレ?
C言語のスレ!
Windows のスレじゃないない!!
>>538
ワラタ。
540デフォルトの名無しさん:02/12/22 17:30
>>537
これっていいわけ?
あんたの前じゃ、ちょっとした間違いも正すことができないな。
>>537-538
悪いけど、マジ消し忘れだよ。
ソースのどっからも参照してないでしょ ?
それとも、ソースすら読めない厨房なのか。
>>536
一つの動作ができるからといって、正しいプログラムとは限らんよ。
wwbrww とか与えると多分あんたの予想と違う結果となるよ。
作成時点からわかってたけど、そこは >>504 の宿題だ。(つーか、結構面倒と思う。)
543デフォルトの名無しさん:02/12/22 17:54
人の書いたコードを理解もせず自分で書きもせず1行2行の
ロジックと関係ないミスをいちいち指摘してるやつってなんなの?
>>543
ただのガキだ。無視しとけ。
    ___
  _l≡_、_ |_
   (≡,_ノ` )y─┛~~  ガキか・・・負け犬に相応しいセリフだな…フッ
   <__ヽyゝ|  
   /_l:__|゚
   ´ lL lL
546デフォルトの名無しさん:02/12/22 18:23
getch関数って覚えておいた方がいいですか?
あと,kbhit関数も
>>546
DOSでゲームとか作りたい場合は必須だぞ。
スレ違いの質問にレスするヤシは氏んでほしいな。
550デフォルトの名無しさん:02/12/22 18:47
ヴィジュアルC++
#include <stdio.h>
int main(void)
{
int data1, data2;
char data;
scanf("%d", &data1);
scanf("%d", &data2);
scanf("%c", &data);

return 0;
}
これを行うと、scanf("%C"、&data);が実行されません。
・・・・・なんで?
>>549
C言語以外にgetchとかkbhitが存在するのならいざ知らず。
>>551
おまいは>>1も読めんのか。くたばれ
>>552
>>1にそってない質問の結果が未定義となっているので、
どんな解答もありでは?

例えそれが間違っていても質問した香具師が悪いんだし
>>548
ありがとう
555デフォルトの名無しさん:02/12/22 19:34
>>553
あなたの頭が悪い理由は?
556↑典型例( ´∀` ):02/12/22 20:11
 
冬休み突入で精鋭軍がやってきたな。
int main()
{
int c;
int flg=0;

while((c=getchar())!='n'){
if(c==' '){
if(flg<2) flg++;
}
else{
if(flg==2){
putchar(' ');
flg=0;
}
else{
flg=0;
putchar(c);
}
}
}
}

ふたつ以上の空白を1つにしようとしているんですが,変な動作をします
559デフォルトの名無しさん:02/12/22 21:22
char型のポインタに、2バイト文字をセットするにはどうすればいいんでしょうか?
なぁ、

int flag = 0;

while((c=getchar())!='n')
{
if(c == ' ')
flag++;

if(flag >= 2)
{
putchar(c);
flag = 0;
}
}
>>559

char c="あ";
char *p;

p=&c;
>>561
>char c="あ";

普通に怒られるだろ。
char c[]="あ?";
>>560
>>564

>>565

 
>>566

  
>>567

   
>>568

                    
570JPS ◆M0LaMzf5rY :02/12/22 21:51
>>558
#include <stdio.h>

int main(void)
{
int ch, space = 0;

while ((ch = getchar()) != EOF)
{
if (! space || ch != ' ')
putchar(ch);

space = (ch == ' ');
}
return 0;
}
>>570

             
>>571

                             
>>574
>>1
575デフォルトの名無しさん:02/12/22 22:54
オナラの回数を競い合うスレですか?
> char型のポインタに、2バイト文字をセットするには
char *p = (char *) 'プ';
>>576
がっかり・・・
578デフォルトの名無しさん:02/12/23 07:50
ヴィジュアルC++
#include <stdio.h>
int main(void)
{
int data1, data2;
char data;
scanf("%d", &data1);
scanf("%d", &data2);
scanf("%c", &data);

return 0;
}
これを行うと、scanf("%C"、&data);が実行されません。
これぐらい教えてくれよ!あんたら先輩なんだろ!
scanf()使ったらfflush(stdin)汁
>scanf("%C"、&data);
なんかどこにもねーだろが。
581578:02/12/23 08:14
すいません・・・
scanf("%c", &data);が実行されないんです。
自分はとりあえず共用体や構造体等独習Cって本は全部さらさらっと終了させました
が、知り合いにこれを質問されてさっぱりです。
scanf("%d", &data1);
scanf("%d", &data2);
scanf("%c", &data);
の部分を
scanf("%d", &data1);
scanf("%d", &data2);
data = getchar();
scanf("%c", &data);
に変更するとできるんですよ。はてはて?
なんでdata = getchar();したかってのは勘てか、なんとかなく書いたらできました
>>581
宿題で無いなら、scanf() は使うな。
char buff[512]; fgets(buff, sizeof buff, stdin); sscanf(buff, "...", ...); にしとけ。
583デフォルトの名無しさん:02/12/23 09:31
>>581
scanf"%c", &data)をscanf"%*c%c", &data);に変更
nannde '(' ga nuketeruno?
585583:02/12/23 09:35
>>584
あれ?ゴメン・・・
586名も無き英雄for北朝鮮:02/12/23 10:30
SharpDevelopの本とか出版してないの?
やさしく説明してるページあったら教えて
>>579
未規定動作。

>>581
何を期待してたのか知らんが、%cで改行を読んでるに300カノッサ。
scanf(" %c", &data);にしてみろ。
588デフォルトの名無しさん:02/12/23 11:49
>>587
実規定坊はしね
589名無しさん@3周年:02/12/23 11:58
char buf[1024];

fgets(buf, 1024, stdin);
sscanf(buf, "%d", &data);
590デフォルトの名無しさん:02/12/23 13:59
typedef struct Person Person;
struct Person {
char name[NAMELEN];
int total;
};


Person*
lookup(char *name)
{
int i;

/* look for name in people table */
for(i=0; i<npeople; i++)
if(strcmp(name, people[i].name) == 0)
return &people[i];

assert(0);/* should have found name */
}

上記のソースについてですが、Person*とはlookup函数はポインタを返すということ?
Personはstruct Personっていう型を意味するのは分かるんですが、
struct Person型のポインタって何??って感じです。
あとassert(0);にたどり着く場合ってなんでしょうか?
>>590
>struct Person型のポインタって何??って感じです。
は勉強不足なので勉強し直してください。
リストのここに該当する情報があるよと呼び出し元にポインタで教えてるわけですな。

assertが出るのはなぜかリストに発見したい名前が無かったときに発生するのかと。
コメントにもそう書いてあるし。
592デフォルトの名無しさん:02/12/23 15:05
mallocでメモリを確保したのですが、100000000サイズになると
NULLになります。これを直す方法をご存知の方はいますでしょうか?

n_array = (max-1) / 2;
array = (char *)malloc( n_array );

↑がソースの一部です。
>>592
>100000000サイズ

どうでもいいが妙な単位つくんな。
>>592
>↑がソースの一部です。
ふぅん。で?
>>592
メモリを増やす
スワップを増やす
ulimit -vを増やす
596デフォルトの名無しさん:02/12/23 15:52
nバイトだけメモリを確保されたブロックを指すポインタを表示するには
malloc以外でどんな方法があるのでしょうか?
597名無し@沢村:02/12/23 15:55
>>596
new

例:
char *Data;
Data=new char;

delete Data;
598デフォルトの名無しさん:02/12/23 16:00
>>597
>Data=new char;
のcharって何?メモリのサイズであるnはどこに書けばいい?
599名無し@沢村:02/12/23 16:02
>>598
ヌヒよ、サイズであるnは、
char *Data;
Data=new char[n];

delete Data[];

とそこに書けばいいぞ。
>>599
間違った答え晒してなにをえらそーに。
ついでにC言語、な。
>>599
ありがとうございました。
602デフォルトの名無しさん:02/12/23 16:11
>>599
Your program exited with signal #6 (abort())
ってでるんだけど・・・・・・
603名無し@沢村:02/12/23 16:12
>>600
ヌヒよ、callocというのもあるぞ。
callocはmalloc+zeromemoryをいっぺんにやってくれる関数だ。
char *Data;
Data=(char *)calloc(n,1);

free (Data);

ヌヒよ、俺はC言語の第一人者かもしれないぞ。
>>596
表示?
>>603
誰かこいつから座蒲団全部とっちゃってくれ。
606596:02/12/23 16:26
実のところ、俺が組んだプログラムは2つの数が与えられて、
その2つの数の間にある回文(逆さに読んでも同じ)の
素数を出力させるんだけど、与えられる2つの数の一方が100000000と
なると、
Your program exited with signal #11 (segmentation violation
[maybe caused by accessing memory out of bounds, array indexing
out of bounds, using a bad pointer (failed open(), failed malloc),
or going over the maximum specified memory limit])
あきらかにmallocが原因だと思うんですけど、
mallocを棄てるとプログラム全体を組みなおさなくちゃならない。
newに変えても同じようなことになる。
どうかアドバイスお願いします。
>>606
マルチ
>>606
だからお前のシステムだとメモリに100MBも空きがなかったんだよ。
char単位じゃなくてbit単位のフラグにすれば1/8で済む。
いずれにしても、とんでもなく時間がかかるのは明らかなんで、
まずはもっと小さい値で試してみるべし。
いっとくけど、所用時間はmaxの2乗に比例するからな。
>>608
スワップ含めて100MB確保できない環境ってのも今時珍しいな。
>>609
だからulimitも書いてる
611名無し@沢村:02/12/23 16:37
>>606
char *temp;
char Data[n];
temp=(char *)malloc(n/2);
strcpy(Data,temp)
free (temp);
temp=(char *)malloc(n/2);
strcat(Data,temp)
free (temp);
と2回にわけてDataにtempをコピーする。

612606:02/12/23 16:39
最近買ったパソコンなんだけど可笑しいな★
みちゃいや〜ん★
>>606
それって宿題スレでわしが書いてやったプログラムでは。。。
>>613
ひどいよな。書いてやった苦労とかその他諸々無視だよ。
単なる徘徊者かな?
>>603
ところでヌヒってなんだ。

塗り薬
あー、痒いときのね。
それはメンソレータム!
めんそーれ、沖縄
ぬひ【奴婢】
下男と下女。律令化の賤民。
622名無しさん@3周年:02/12/24 08:04
旭ヌヒ成
623デフォルトの名無しさん:02/12/24 13:44
void SampleFunction(char *name){
strcpy(SampleString, name);
}
ソースの一部ですが、*nameは文字列(name[])として関数SampleFunctionで
宣言されているということはnameは式の中ではポインタのはず。
では、なぜ関数strcpyでは第2引数にこのname(&name[0])が渡されているのでしょうか?
関数strcpyは文字列しか引数に取らないはず。
>>623
strcpyのプロトタイプ宣言はこんなふうです。(manより)
char *strcpy(char *dest, const char *src);
>>623
何が疑問なのかサパーリ。
626デフォルトの名無しさん:02/12/24 14:36
>>623
Cを理解できていませんね
> 関数strcpyは文字列しか引数に取らないはず。

間違い。
628623:02/12/24 14:46
>>624
>char *strcpy(char *dest, const char *src);
destとsrcはポインタなのか文字列なのかよく分からない。
ポインタだったらsrcを確保しているメモリの先端のアドレスを
destを確保しているメモリの先端のアドレスにコピーするってこと?
ポインタって難しい……
>>628
C に文字列はありません。文字配列があるだけです。
?ヌル終端された文字配列を文字列(string)と言うんだと思うけど.......
631623:02/12/24 15:04
strcpy(SampleString, name); って、
すでに文字列が代入されている配列を第2引数に書いてるってだけか、
ということを検索でわかりました。
632629:02/12/24 15:09
じゃ補足 型として
633623:02/12/24 15:21
ってことは、
char string[9999999999999];で宣言して、
scanf("%s", string);で文字列を読み込んで、
function(string);で関数function()を呼ぶと、このときの
引数stringは&string[0]じゃなくて、単に文字列(なんだかよく分からないが)を表すのですか?
ちったぁ勉強してから来いこのタコ
  ( ・∀・)   | |
 と    )    | | ガッ
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /
635デフォルトの名無しさん:02/12/24 15:30
ほかにも疑問に思う場合があります。例えば、
scanf("%s%s", str1, str2);
のとき、str1とは文字列の先頭アドレスなのに、
printf("%s %s\n", str1, str2);
では、そのアドレスを出力している。

簡単にstr1[∞]という文字配列があったとして、
str1だけで文字列を表すのだと覚えてよいのだろうか?
636知ったかぶりっこ:02/12/24 15:45
文字列なら最後に'\0'がつくはず!
配列変数は以下の点を除いて、その先頭の要素を指すポインタと全く等価。
・ ポインタの指す先の領域は児童確保され、スコープを出ると自動破棄される
・ 単項 & 演算子のオペランドにした場合、データ型は配列へのポインタになる。
・ sizeof 演算子のオペランドにした場合、配列全体のサイズを返す
・ 配列変数は代入できない左辺値
638デフォルトの名無しさん:02/12/24 15:48
みんなメリクリ
みんなカニミソワショーイ
めりくり〜!!
クリスマスは明日だろ
>>641
寒いです。
>>636
「ゼロ終端文字列」 ならそうだろうね。
644デフォルトの名無しさん:02/12/24 20:56
すいません。教えてください。
簡単なコンパイラを作成しているのですが、
8進数とか16進数とかを表現する時に
それぞれ頭に0か0xをつけて表記しますよね?

この表記では0は表現できないのですか?
00
0x0
というか、0 は8進表記なのだが。
>>00
プ
a=(int*)malloc(100*sizeof(int));
free(a)
とかしたときにaの指すアドレスからどこまでを開放するかってのは
どうやって分かるの?
(^00^)プ
>>648
なんかその手前のアドレスでそう言う情報管理してたりするらしいぞ。
>>648
mallocの実装によるが…教科書通りなら、aの手前にサイズを持ってる。

652644:02/12/24 21:17
>>646
すいません。よくわかりません。
どういうことでしょうか?
00 や 0x0 でいいのでしょうか。
>>650-651
マジッスカ?
カシコクナッタヨ
ありがとうゴザイマス。
ライブラリが管理してるんでしょ。
(^0x0^)プ
656デフォルトの名無しさん:02/12/24 21:32
ん?
8 進/16 進表記がまともにわからない香具師がコンパイラを書くのか?
(^00^)プ
659名無し@沢村:02/12/24 21:48
ときにヌヒ等よ。
「香具師」って何て読むの?
660644:02/12/24 21:52
>>657
はい。まともにわからないのです。
お手数ですが教えてください。
661デフォルトの名無しさん:02/12/24 21:53
>>642
0は8進数でも、16進数でも、10進数でも
同じ値を表すので問題ありません。
沢村警報がガンガンに鳴っています
663名無し@沢村:02/12/24 21:54
なあヌヒ等よ。
「香具師」って何て読むよ?
沢村には何も教えるな!!


    沢 村 に は 何 も 教 え る な ! !

665名無し@沢村:02/12/24 21:56
「香具師」って何て読むよ? 「香具師」って何て読むよ? 「香具師」って何て読むよ?
「香具師」って何て読むよ? 「香具師」って何て読むよ? 「香具師」って何て読むよ?
「香具師」って何て読むよ? 「香具師」って何て読むよ? 「香具師」って何て読むよ?
「香具師」って何て読むよ? 「香具師」って何て読むよ? 「香具師」って何て読むよ?
「香具師」って何て読むよ? 「香具師」って何て読むよ? 「香具師」って何て読むよ?
香具師」って何て読むよ? 「香具師」って何て読むよ? 「香具師」って何て読むよ?
「香具師」って何て読むよ? 「香具師」って何て読むよ? 「香具師」って何て読むよ?
「香具師」って何て読むよ? 「香具師」って何て読むよ? 「香具師」って何て読むよ?
「香具師」って何て読むよ? 「香具師」って何て読むよ? 「香具師」って何て読むよ?
「香具師」って何て読むよ? 「香具師」って何て読むよ? 「香具師」って何て読むよ?

              _
..            //.|
           //./.|.     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
          //./ | |     | すんません。すぐ処分しますんで・・・・・。
        //./|/:.| .|     \_ __________________
        □/ / //| |.        |/
        | |/.;;;;//. | ||.
        | | ;;;;;;//  | |||   l⌒)=|ニ二フ
        | |.;;;//   | |.||   ∧.|.∧
.    ∧ ∧ | |.//.   | | ||.  ( ・∀・)
   ( ・A・).| |/.    | |. ||  |   )               ワイワイ  ガヤガヤ
 __(    ).| |___. | | || __.| | |____
    | | | | |.   //.| ̄ (__(__).   /.|          ∧_∧ ∧_∧ ∧ ∧
   (__)__)| |.  //  |.         //|         (´-`;)(@・ )(;´∀)(
        | |.//∧井∧イヤァァァ--- // .|        ∧∧  ∧ ∧. ∧_∧ ∧∧
       (..| |/ (;´Д`)←沢村  //.   |       (∀・ )(ー゜* )(   )(´∀`
     (⌒ .| |    / ̄ ⊂.⊃.  .//   /      ∧_∧ ∧ ∧ ∧ ∧. ∧_∧
..∧ ∧    ̄| |  /    └─┘//   /       <_`  )(´・ω )(д ゜` )(   )(
( ・A・)   | |/         //   /       ∧_∧ ∧ ∧  ∧_∧  ∧_∧ ∧
(    ).   ~~        //   /        (   )( ゜∀゜)(`   )(   )(゜д
. | | |            //   /        ∧_∧. ∧_∧ ∧_∧  ∧_∧  ∧_∧
(__)__).         //   /         (д- )(   )(*゜ー゜)(T дT )(∀` )
667名無し@沢村:02/12/24 21:57
ヌヒ等よ、一生のお願い。
「香具師」って何て読むか教えて!!
ヤシですよo
>>668
スレ違い野郎の相手するなよ。
「香具師」 = 「かぐし」
こうぐしだろ
「香具師」は「せなか」と読みます。
673名無し@沢村:02/12/24 22:04
>>667
ヌヒよ、「ヤシ」でいいのか、ヌヒよ?
実は俺は大字林第二版で検索して「コウグシ」「ヤシ」のうちのどちらかに違いないと思ってたんだよ。
「コウグシ」は香具を作る人、「ヤシ」はテキ屋のことなので、香具を作る人の「コウグシ」のほうが何かプログラマーに近いような気がして「コウグシ」と読む可能性大だと思っていたんだがなあ…。
俺の読みははずれて、「ヤシ」が正しかったみたいだな…。
何故プログラマーをテキ屋というのか理由は知らんがな…。
やはり質問してみるもんだな…。
>>673
プ
675名無し@沢村:02/12/24 22:07
>>670>>672
嘘をつけ!!
大字林第二版には「コウグシ」「ヤシ」以外の意味は出てなかったぞ!!
>>671
ん?俺は最初そう思ったんだが、>>667が「ヤシ」って…
>>675
おい、そろそろプレゼント配りに出かけろや
ところで>>644は解決したのか?
678香具師:02/12/24 22:14
左の細いところの一番上の方にある
「2ch総合案内」をクリック
  応用&システム
掲示板やスレッドがおかしい。。。
削除依頼や要望をだしたい。。。
掲示板を追加or分割or閉鎖して欲しい。。。
特殊な用語などを知りたい。。。<<======ここから探したら?
もっと便利に使いたい。。。
へー、香具師ってテキ屋のことだったのか。知識増えた。
680デフォルトの名無しさん:02/12/24 22:20
奴→ヤツ→ヤシ→香具師
>>680
馬鹿かお前。
それがさ・・・
へー。そうなん?
2ch初心者ですか?
書き込む前にセキュリティガードを(以下略
うまいラーメン屋を探してきなさい。
>>685
地下鉄永田町ガード下にありまッさ。
ガード下って響きに酔ってるだけ。
ガード下
  響きに酔って
    もらいゲロ
コアダンプ ト イフ ナリ
690デフォルトの名無しさん:02/12/24 22:56
沢村の狙い通り荒れてしまったわけだが。
元凶は沢村だが、荷担したのは 668
ザンネン。668も沢村です。ヤツは一級の釣り師です。
そして自作自演
こ"めんネo
あなたがたの心には、もう沢村が住みついてしまわれたのですね。
ウッちゃん括弧(・∀・)イイ
棲みついたのですか?
旧世代言語のスレのクセに伸びがいいですね?
いいえ近未来言語沢村言語のスレです。
700デフォルトの名無しさん:02/12/25 10:08
ど素人が700

あのwatcomのコンパイラインストールして使おうとしてるんですが、
コンパイルすると

Error! E1055: Unable to open 'stdio.h'

って出てコンパイルできないんです。ぐぐってみたらinclude pathを変えないと
いけないみたいに書いてあったんですが、変え方がまったくわかりません。
分かる人いたら、教えてください。
-Ipath
>>700
ドキュメント読めば一瞬で分かるはずだがな。
scanf("%d%*c", &select);
の%*cってどういう意味があるんでつか?
改行をスキップするのでないかな
残しておくと、直後に文字or文字列を取り込もうとしたときに
期待通りの動作してくれなくなるから
行末までをスキップするならこのほうがよい。
scanf("%d%*[^\n]", &select); getchar();
> scanf("%d%*c", &select);

これ、%*c の格納先を指定してないのはヤヴァくないか?
>>706
え?
ヤヴァくはないとおもう
保守
>>706
man scanf 100回
腕立て伏せ 100 回
漢はスキャンティ100枚
713デフォルトの名無しさん:02/12/25 20:41
っていうかscanfなんか無理して使おうとするなよ
714名無し@沢村:02/12/25 21:02
>>713
scanfですでに無理?
1+1はできますか?
715デフォルトの名無しさん:02/12/25 21:13
>>714
田だがなにか?
サブ
>>714
scanf使うなっていうのは、漏れも常識だと思うが?
sscanf, fscanfは使うがな
使えないと使わないは違う。
>>713には同意だが、だからといって>>706が正しいわけではない。
ちなみに>>714は論外の更に外。
719デフォルトの名無しさん:02/12/25 23:00
scanf("%d%*[^\n]", &select); getchar();
""内は1+1で右側に1(select)しかないからだろ。
>>719
何がいいたいのかサパーリ分からん。
>>720
思考力なーし
私にもサパーリ分かりませんが何か?
俺も分からない。
>>722>>723
おやすみ〜

<             >>724ハァァァ???

  ∨∨∨∨∨∨∨∨∨∨∨\  /∨∨∨∨∨∨∨∨∨∨
          /:|.       | |     /:|
        /  .:::|       ∨    /  :::|
        |  ...:::::|           /   ::::|
       i       ̄ ̄⌒゙゙^――/    ::::::::|
      /_,,___       . _,,,,__,_     :::::::::::\
      /   ゙^\ヽ..  , /゙   ¨\,.-z   ::::::::::\
      「 ●    | 》  l|  ●    ゙》 ミ..   .::::::\
     /i,.      .,ノ .l|  《       ..|´_ilト    ::::::::::\
    / \___,,,,,_/ .'″  ^=u,,,,_ v/..       :::::::::::::l!
    |            ̄ ,,、         i し./::::::::.}
   |  /  ,,____ _,/ ̄ \ \      ノ (  ::::::::::|
    |  |.. | /└└└└\../\  \    '~ヽ ::::::::::::::}
    |   .∨.|llllllllllllllllllllllllllllll|          ::::::::::{
    |    |.|llllllllllll;/⌒/⌒  〕         :::::::::::}
     |   |.|lllllllll;   ./ .   . |          ::::::::::[
     .|   |.|llllll|′  /    . |    .|      :::::::::::|
     .|   |.|llll|    |     .∧〔   /    :::::::::::::/
    / }.∧lll    |    ../ /  /   :::::::::::::::::\
   /   /| \┌┌┌┌┌/./ /:::      :::::::::::::::::\
      ( ゙゙^^¨^¨゙゙¨  ̄ ̄ ̄ /:::::::::::         ::::::::::\
でかいのつれたな
じゃ、じゃあ俺も!
728703:02/12/26 01:51
703だけども。
なんかアステリスクだっけ?*←
これつけたらそのあとの変換指定子にあう型のがきたら無視するってこと?
空白とかを無視したいんならfgetsにsscanfの方が良いって友達は言ってるけど。
ちなみに703のは学校の教授が模範解答として配ったソースにあったやつです。
初心者でスマソ
>>728
例えば、scanf("%d %*d %d", &a, &b);とすると、
入力回数は3回になるが、2回目の入力は無視される。
1回目の入力値がaに格納され、3回目の入力値がbに格納される。

まあ、説明不足のような気がするが、だいたいこんなもんかな?
>>717
fscanfも使わない方がいいんじゃなかった?
731starman@LinuxのC言語:02/12/26 10:21
マルチユーザOSのLinuxでは仮想端末を切り替える際にALT+(F1〜F6)などを使用しますが、
キーボードを使用せずにC言語のプログラム(システムコール?)から仮想端末を切り替えることはできるのでしょうか?
もしできるのなら、その方法を教えて頂けないでしょうか?
732デフォルトの名無しさん:02/12/26 13:46
質問です。
ある変数aの平方根を求めるプログラムって
どうするんですか?例えばa=36なら6とか。
sqrt(a)
×733

int a = 36, b;
for (b = 1; b*b != a; b++);
735732:02/12/26 13:57
>>733,734
解答ありがとうございます。
sqrt(a)を使ったら無事できました。
プ>>734
737デフォルトの名無しさん:02/12/26 14:09
質問です。
ある変数aの自乗を求めるプログラムって
どうするんですか?例えばa=6なら36とか。
>>737
a*=a;
×738

int a = 6, b;
for (b = a; b != a*a; b++);
×738

int b[] = { 0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, };
int a = 6;
b[a];
741732:02/12/26 14:13
>>738,739,740
解答ありがとうございます。
a*=a;を使ったら無事できました。
742デフォルトの名無しさん:02/12/26 14:13
>>739
それだとaがintならともかくダブルだったりしたらどうするの?
743デフォルトの名無しさん:02/12/26 14:14
>>740
それだとaが0〜10ならともかくマイナスだったりしたらどうするの?
>>742-743
良い質問だね。
明日までの宿題だ。
>>744
先生!明日は冬休みじゃないんですか?
746デフォルトの名無しさん:02/12/26 14:31
>>744
それだと明日が登校日ならともかく冬休みだったりしたらどうするの?
処理を時間差で行うにはどうすればいいのでしょうか。
例えば文字を出力した0.2秒後に別の文字を出力するとか。
整数秒後に出力するのはtimeとかで出来そうなんですが。
よろしくお願いします。
>>747
ミリ秒がいるんなら
OSのシステムコールを使うか
ハードウェアでタイマ用意するだな
>>748
解答ありがとうございました。
早速がんばってきます。
732 から後はネタか何かかい?
   。 。
  / /
 ( ゚Д゚) ヘ?
 ヽ人ゝ
752デフォルトの名無しさん:02/12/26 18:43
>>731
chvt というコマンドがあるので system を使って切り替えましょう。
具体的な方法は chvt のソースを見れば分かると思いますが。
ヒマダ
おれも遂に脱初心者だな
>>753
ふーん。
試しに、char[5][10] へのポインタの変数 p を定義してみてくれるかい?
>>754
そんなもんは初級中の初級
>>755
書けないならそう言えば? と言われたい訳?
釣りですか?
(・∀・) バーカ!!
なんだとー
あのー、何かすごくお腹の調子が悪いんですが・・・。
今日でもう 10 リットルくらいは放屁した気がする・・・。
そのうちの8リットルは俺が吸い取った。
でかした
760 は漢
感動しますた
見事だ
残り2リットルは、今日バイトでカレーとして客に出しました!!
屁の河童でござんすよっ!
768753:02/12/26 23:11
>>754
そんなの簡単さ
char**pダヨ
>>768
釣り師沢村ハケーソ!!!
770753:02/12/26 23:12
>>769
JPSデスケド
>>768
あ〜あ、やっちゃた・・・
772753:02/12/26 23:14
わかった
char **p = a[5][10]だ!
>>772
脱!!初心者!!ヤホーイ♪
>>772
バカ。*は安全のため出来るだけ沢山付けとくもんだ。
char ****************************************************p=a[5][10];
くらいやってこそプロってもんよ。
775753:02/12/26 23:17
>>774
そうだね。
オレもまだまだだな!テヘ
初心者脱出おめでとう>>772
(^*^)プ
しつも〜ん
*はいくつまでつなげられますか?
初心者脱落おめでとう>>772
>>774
沢山・・・
沢村の間違いじゃ?
今日はお赤飯ね。
>>778
それはお前の努力次第だ!!がんばれよ!!
783753:02/12/26 23:19
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=52
これがどうして動作しないのかわからん
ダレカオシエテ
>>783
何のプログラムでつか?(読めば分かるって言うツッコミなしね)
a=(int*)malloc(100*sizeof(int));
free(a)
とかしたときにaの指すアドレスからどこまでを開放するかってのは
どうやって分かるの?
>>783
とりあえずどういうプログラムで、
動作しないとはどういうことか(コンパイルできない、実行時エラー、期待通りの動作をしない)
くらいは説明しろ。
787753:02/12/26 23:26
>>784
C
>>784
単純な単語登録リストでつ
構造体で線型リストやってんだけど
たぶんそこのつなぎ合わせたりするとこに問題が。

あとね、FILE*型を返す関数をつくってその中で
fp = fopenってやったfpを返して
mainのほうで別のfp_mainに戻りチとして代入できる?よね?
789784:02/12/26 23:28
>>787
なんでCって言うのでつか?
DでもEでも良いじゃん。(Bはあったみたいだけど・・・)
バカですみません・・・ウヒャ!!
>>786
ゴメソ
期待通りの動作をしない
っていうか。
mainの下のほうに
puts("\nPlease choose an output interface");
printf("file / 1 standard / 2 : ");
fgets(str_2,sizeof(str_2),stdin);
sscanf(str_2,"%d",&flag2);
ってとこがあるしょ?
ここのfgetsとsscanfが飛ばされるんだよ。
バッファに空白が残ってるのかな。
でもプログラム自体は正常終了してる。
mainのreturnまでいってる。
>>785
aの指しているアドレスの手間いにサイズの情報が入っているとかいないとか・・・
>>785
C言語ポインタ完全制覇読め
ISBN7741-1142-2
>>785
そういう情報はOSが管理してるんだよ。
>>793
そのネタおもろい!



....なわけねーだろヴォケ
#include<stdio.h>
main()
{
int a;
printf("数字を入力してください\n");
scanf("%d",&a);
if(a%2==0)
printf("偶数です\n");
else
printf("奇数です\n");
}
どうですか?
>>788
何言ってるのかよく分からない。

>>790
1つ目の質問で standard を選んじゃうととばされそうだね。
あと、いくらなんでも stdin に出力するのは無茶だよ。
>>796
fgets・・・出力?
>>797
プログラムを見ろ。
>>796
一応出力されたけど(stdoutにして。ばかですた)やっぱし790がとばされてる。
どうしてか分かる人いない?

あと788で言ってるのは
FILE *func(void)
{
  FILE *fp;
  fp = fopen("data.txt","r");
  return fp;
}

main()
{
  FILE *fp_main = func();
ってやってfp_mainは使えるよね?ってこと
>>799
一つ目の質問(input interface)を file にしてもとばされる?
後半の質問についてはできる。
>>800
とばされなかった。
やっぱバッファ?
>>801
get_word() のループの所で stdin を EOF まで読んじゃってるから
(それ以降はいくら読み込んでも EOF しか返ってこない)
と、fclose() で閉じちゃってる
という2重のミス。
>>802
なるほど。てことはどうすりゃいんだ
バッファをクリーンにすればいいな!
あとfcloseで閉じたら何がまずい?
>>803
バッファは関係ないってば......
output interface の質問を get_word() のループより前に持ってこい。
つまりデータ読み込む前に入力先、出力先の両方ともを尋ねておく。
>>804
ハイ。
でもまだわかんない。
EOFはget_wordのchに入るだけでそれ以外にはないよね?
出力先を選択するときはmainのほうの変数に入れてるから
もんだいないんでないの?
>>805
EOF は特別なデータなの。End Of File。ファイルはもうお終いですよ、って印ね。
それ以外の、通常のデータとは全く意味が異なるの。
それで、EOF を検出したら、それ以降は何度読み込んでも EOF しか返ってこないの。
だから、2度目の fgets() でも即座に EOF を検出して NULL を返してるはず
だから調べてみ。
>>795は完全無視かい・・・
>>807
ナルホド
if(fgets(str_2,sizeof(str_2),stdin) == NULL)
printf("30");
ってやったら30とでますた。

ってことはプログラム中ではEOFは一度しか使えないってこと?
>>808
return 0;
>>809
EOF は使う、とか言うもんじゃないと思うけど.....

ある一つのファイルについて言えば、一度 EOF を検出したら
それ以降は EOF しか出てこない。
開き直したり fseek() したりしない限り。
812デフォルトの名無しさん:02/12/27 00:39
文字列"abcabcabcabc"があって、これのbを0に置き換えて
"a0ca0ca0ca0c"とやるにはどうすればいいですか?
ようするに、文字の置き換えってどうやればいいのですか>
>>811
ファイルってのはstdinも含めてだよね?
したらさ、たとえばendで終了とかしないと、
このプログラムは動作しないってこと?
fseek使えば可能?
>>812
配列の要素1つずつ走査していってbなら0を代入する
>>813
fseek() は stdin には効かないんじゃないかな......
よく知らんわ。とりあえず、たとえ出来ても処理系依存になりそうだから
やめといたほうがいい気がする。自信ないが。
上で教えたように、最初に input、output 両方聞いとくか、
君の言うように end とかのデータ終了の印をつけるようにしとく方がいいかもね。
>>815
わかりました。あとは自分で調べて見ます。
みんなサンクス!!
>>816
もう寝るんでつか?
酒飲んだら眠くなってきたんで。
スマソ
819デフォルトの名無しさん:02/12/27 00:47
でつとか言ってる奴ってマジキモイと思ってるのは俺だけではないはず。
>>819
そうでつよね。マジキモイでつ。逝ってよしでつ。
>>819
そう思うならここには来ないほうがいい。
キモイと思ったやつは2chから去っていく
822デフォルトの名無しさん:02/12/27 00:51


http://berry6.hp.infoseek.co.jp/
パートナーのいない人は急げ!
まったり、しっとり過ごしましょ(o^.^o)

2匹ゲットでつ。
824デフォルトの名無しさん:02/12/27 00:53
>>821
2chだから言えるのですよ。現実では、
「漏れもそういうヤシ大好きなんでつ」
なんていってるやつに面と向かってキモイとか言えないし。
>>823
いたいたしいからやめれ
さらに2匹ゲットでつ。
>>817
あんた、結構鋭いね・・・
828754:02/12/27 00:59
・・・ネタだよな?
漏れは char[5][10] へのポインタの変数 p を定義して、と言ったんだけど・・・。

>>768
それは char へのポインタ へのポインタ変数 p。

>>772
それは char へのポインタ へのポインタ変数 p に未定義の変数 a[5][10] の値を
代入している。

>>774
それは char へのポインタへのポインタへのポインタへのポインタへのポインタへの
ポインタへのポインタへのポインタへのポインタへのポインタへのポインタへの
ポインタへのポインタへのポインタへのポインタへのポインタへのポインタへの
ポインタへのポインタへのポインタへのポインタへのポインタへのポインタへの
ポインタへのポインタへのポインタへのポインタへのポインタへのポインタへの
ポインタへのポインタへのポインタへのポインタへのポインタへのポインタへの
ポインタへのポインタへのポインタへのポインタへのポインタへのポインタへの
ポインタへのポインタへのポインタへのポインタへのポインタへのポインタへの
ポインタへのポインタへのポインタへのポインタへのポインタ変数 p に未定義の
変数 a[5][10] の値を代入している。
さて、ポインタと何回言ったでしょう?
>>829
ん?1〜829まで?
>>830
>>828だけでおながいしまつ......
>>829
829 においては 1 回。
833754:02/12/27 01:07
1 コ多かったかも知らん・・・鬱
ちなみに、1〜829 においては 113 回。
意外と少なかった。
>>834
いいかげんに、寝ろ!!
にごり酒が好きな香具師は心がにごっている!!
>>832>>834
ブーッ!! ブーッ!! ブリブリブリッ!! ブピャーーーーーーーーッッッ!!!!!
正解正解不正解ーーーーー!!!!

書き込みしただけで1回も「言って」ません。

すなわち答えは0回!!
アヒャヘ(゚∀゚ヘ)(ノ゚∀゚)ノアヒャヒャ
>>837
なるほど〜・・・
そう来るかね・・・
なんだとー
> アヒャヘ(゚∀゚ヘ)(ノ゚∀゚)ノアヒャヒャ

冬厨あほらしか
俺が言った
ついつい書き込みを口に出して・・・
>>841
そうだよな。
みんな書き込みをしながら、口に出して言っているかも・・・
独り言のように・・・
843デフォルトの名無しさん:02/12/27 01:19
ごめん、おれポインタって100回言っちゃった。
好きなもんで。。
>>843
タポイン・・・
負け惜しみ(・A・)イクナイ!!
素直に
「ごめんなさい。間違えました。これからは何でも言うこと聞きます。王様。
足なめさせてください。ペロペロ。美味です。王様。
私を弟子にしてください。王様。最高です。王様」
と言えばいいものを。
>>842
この真夜中に・・・
847デフォルトの名無しさん:02/12/27 01:22
>>845
ごめんなさい。間違えました。これからは何でも言うこと聞きます。王様。
足なめさせてください。ペロペロ。美味です。王様。
私を弟子にしてください。王様。最高です。王様。ウヒ
(・∀・) バーヤ
> 負け惜しみ(・A・)イクナイ!!
> 素直に
> 「ごめんなさい。間違えました。これからは何でも言うこと聞きます。王様。
> 足なめさせてください。ペロペロ。美味です。王様。
> 私を弟子にしてください。王様。最高です。王様」
> と言えばいいものを。

> 私を弟子にしてください。王様。最高です。王様。ウヒ

冬厨あほらしか
>>845
美味しゅうございます〜♪ウヒョ
851デフォルトの名無しさん:02/12/27 01:26
そろそろ、荒れ具合もやばくなってきたので、冬厨放置で。
char[5][10] へのポインタの変数 p を定義してみて。
char (*p)[5][10];
>>853
空気読めよ
________.  |  ・・・「からけ」?
|||          | \____ __
|||          |  )\       ∨
|||    空  気.   <⌒ヽ ヽ
|||         \ ( ´ー`)    ∧∧
|||_________V(   丿V^  ●Д゚,,)>>853
|,,|          |,,| ヽ (      と  ,)
              ノ )     |  |〜
                     し`J,,.
ツレタ!!ブヒャー(w
>>856
必死だな
>>857
必死だよ
>>856
リコーダーも満足に吹けないくせに粋がってんじゃねぞ
>>858
哀れだな
>>859
「ド」は調によって(ry
>>858
哀れだよって言ってやれ!!
冬厨の方のための専用スレです。
マターリしてきてください。

【冬厨】Cの文句は俺に言えぇ!part1【歓迎】
http://pc3.2ch.net/test/read.cgi/tech/1039768013/
>>862
哀れ.....ごめん.....読めね....「もれ」?
part1 かよ・・・
冬休みに入ったんだと実感しました
引数を取らず、char[5][10] へのポインタを返す関数 f のプロトタイプは。
感動しますた
char (*f(void))[5][10];
デルフィニア戦記を読んだ人いますか?
わかんないなら、素直に引数で渡せよ・・・
>>869
空気読めよ
________.  |  ・・・「からけ」?
|||          | \____ __
|||          |  )\       ∨
|||    空  気.   <⌒ヽ ヽ
|||         \ ( ´ー`)    ∧∧
|||_________V(   丿V^  ●Д゚,,)>>869
|,,|          |,,| ヽ (      と  ,)
              ノ )     |  |〜
                     し`J,,.
>>871
で・・・何の話?
ツレタ!!ブヒャー(w
引数を取らず、char [5][10] へのポインタを返す関数へのポインタを引数とし、char [5][10] へのポインタを返す関数へのポインタの配列を定義してください。
>>876
>char [5][10] へのポインタを返す
(゚Д゚)ハァ?
char (*(*p[ARRAY_SIZE])(char(*(*)(void))[5][10]))[5][10];
さて、寝ようかな・・・ん?ちょっとまって・・・今行くから・・・
>>877
ネタですか?
876

type_a = char [5][10] へのポインタ
type_b = 引数を取らず、type_a を返す関数へのポインタ
type_c = type_b を引数とし、type_a を返す関数へのポインタ
type_c の配列を定義してください。

#include <iostream>
typedef char (*type_a)[5][10];
typedef type_a ((*type_b)(void));
typedef type_a ((*type_c)(type_b));
const size_t array_size = 256;
int main()
{
 type_c func_table[array_size];
 std::cout << typeid(func_table).name() << std::endl;
}

これで調べるのは反則でつか?
冬厨の方々は寝静まりやがりましたか?
>>881
ここは
  C 言 語 の ス レ
ですよ?
884デフォルトの名無しさん:02/12/27 02:27
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
◆裏情報取引サイト→http://www.kawachi.zaq.ne.jp/dpdan803/
◆国際免許取得→→→http://www.kawachi.zaq.ne.jp/dpdan803/
◆悪徳業者情報→→→http://www.kawachi.zaq.ne.jp/dpdan803/
◆あらゆる調査→→→http://www.kawachi.zaq.ne.jp/dpdan803/
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
+
>>883
だから何?
フンベルト=ホーン=ギッキンゲン男爵
お前の行動は見切った!!
888デフォルトの名無しさん:02/12/27 09:02
888get
>>888
(・∀・) バーカ!!
>>870
読みましたが何か?
>>789
Bがあったからだろ。
>>891でもBはスカラがなかったんだよね
>>892
スカラって何?
食べられる?
食べられるとしたらおいしい?
どんな味?
コハダ?
臭い?
金玉の下の方を触った時の手の臭い?
どう?
どうなの?
>>893
スカラ=巣殻
鳥の巣の殻のことだよ
charとかint,double,列挙型,及びポインタのこと
簡単にいうとBは型がない(正確にはあるんだけど)言語だったってこと
防御力がアップしたよ
>>893
プログラム板なんだから、「スカラ」とは「スカラベ」のこと。
「べ」がどこから来たかというと、スカラの対義語の「ベクトル」から来た。
昔は「スカラベクトル」と呼んで区別されていたのが、
意味が曖昧になり「スカラ」の意味しか持たなくなった。
それくらい辞書引けよ
>>897
ほそく

古代エジプトではスカラベを創造とか生成の意味で呼んでいた。
現代プログラムでは、プログラミングの過程を意味する。
辞書に載ってないのでどれが正しいのか・・・
一番もっともらしい >>898 を信じることにします
900デフォルトの名無しさん:02/12/27 17:20
>899
898のほそく
いわゆるフンコロガシの仲間。
映画「ハムナプトラ」では肉食のスカラベが人を襲う話があります。
>>898
ワロタ
C言語にはスカラがあるんだね。
俺も今度スカラを使ったプログラムを作るよ!
ここにはネタが豊富ですね。
それを言うなら、

ここはネタが豊富なインターネットですね。
この橋渡るすからべ
そ、それは擦れ違…
906デフォルトの名無しさん:02/12/28 01:06
ビットフィールドって配列にできないんですか?
ループ文でまわしたいんですけど。
struct a{
  unsigned char n[8] :1
};
だとだめですし。
struct a{
  unsigned char n1 :1
  unsigned char n2 :1
ってやってくしかないですか?
>>906
どういう処理をしたいわけ?
>>906
全く別の方法だけど、
例えばunsigned charの変数を宣言して各ビットを使うんじゃダメ?
909デフォルトの名無しさん:02/12/28 01:14
for(i;i<8;i++){
if(a1.ni==1){
・・・
って感じです。シフト演算使えってのはなしで。
910デフォルトの名無しさん:02/12/28 01:16
>>908
unsigned char型の変数を評価したいので、そういうわけには。
911デフォルトの名無しさん:02/12/28 01:18
>>906
シフト演算で廻せばイイジャン

//int bitfield,BOOL[] hoge
int i,count;
for(i = 1,count = 0 ;i < 0xFF; i << 1,count++){
hoge[count] = (i & bitfield == 0);
}

こんなかんじで。最近C屋ってないから文法これでいいのかどう
かわからんけど(スマソ
912デフォルトの名無しさん:02/12/28 01:22
レスくれた方、ありがとうございました。
やはりシフト演算ですか。
>>912
STLportのstd::bit_vectorは?あ、C++は使わないのか。
C++だと[]演算子をオーバーロードして、ビットフィールドのようなマネを
させられるから、どう?だめ?
C++厨は(・∀・)キエロ!!
>>915
Java厨みたいなこというなよ
>>915
VB厨みたいなこというなよ
でもさあ、C++でビットフィールドをエミュレートするとしても、左辺値の[]演算子
の実装はとても面倒臭いよ。

1ビットを1バイトで表すんなら簡単なんだが。
どこが?
8 で割った商と余りを使えばいいだけの話だろ。
あー、もうすぐ次スレの季節だが、1 のテンプレにはぐれぐれも

    沢 村 立 入 禁 止

と書いておいてくれよ。
>>918
std::vector<bool> とか std::bitset とか既にあるんだから、
わざわざ車輪を再発明せんでも。
ビットフィールドはビット演算の一部を簡略化するもの。
対応できないなら自力でやればいい。

#include <limits.h>
int get_bit(char bits[], int n) {
 return (bits[n / CHAR_BIT] & (1 << n % CHAR_BIT)) != 0;
}
void set_bit(char bits[], int n) {
 bits[n / CHAR_BIT] |= 1 << n % CHAR_BIT;
}
void clr_bit(char bits[], int n) {
 bits[n / CHAR_BIT] &= ~(1 << n % CHAR_BIT);
}
void put_bit(char bits[], int n, int b) {
 (b ? set_bit : clr_bit)(bits, n);
}
923デフォルトの名無しさん:02/12/28 20:42
再帰処理の使い道がいまいちわかりません
そこらへんの本に書いてある再帰だったら
普通にループした方が簡単だと思うのですが
>>923
普通にループでいいよ。
>>923
ディレクトリを巡回してサブディレクトリを全て表示するプログラム書いてみな。
再帰と非再帰の二通りで。
926923:02/12/28 22:35
>>925
なるほどね それだと確かに再帰じゃないと無理かも
>>926
いや、無理というわけじゃないよ。再帰はループに落とせる。
ただ面倒なだけ。
928923:02/12/28 22:57
再帰で書かないとループの中に
更にループ書かなきゃいけなくなる?
ちゃう。
再帰で積まれるスタックを自前で管理する必要が出てくる。
930923:02/12/28 23:06
ループで書くとオーバー風呂しちゃうかもってこと?
>>923
とりあえず書いてみるとか・・
こんな感じか>非再帰版。
ちなみにstackをqueueに書き換えると深さ優先から幅優先探索になる。

void traverse(char *path)
{
 int i;
 stack_push(path);
 while(!stack_empty())
 {
  char *path = stack_pop(); // 巡回された
  printf("%s\n", path);
  for(i=0; i<sub_dir_count(path); i++) // サブディレクトリをスタックに追加
   stack_push(get_sub_dirs(path, i));
 }
}
>>930
気のせいか ループであふれるんだったら再帰でもあふれるような

934わたしは泣いたことがない:02/12/29 00:51
 入力書式についてお聞きしたいのです。

 入力バイト数変換%nが思った通りの値を返してくれません。
例えば以下のコードで、私は i=1が得られると思ったのですが、
私の環境では0になりました。
 私は何を間違っているでしょうか?


int myStr( const char *s )
{
char c;
int i;

ssccanf( s, "%1c%n", &c, &n );
return n;
}
935わたしは泣いたことがない:02/12/29 00:54
>934
 かきもれましたが、sには入力失敗しない文字列があります。
仮に"A000"のような。
愛がないよ?
937私はないたことがない:02/12/29 01:05
>934
>936
 すみませんかきまちがえました。

int myStr( const char *s )
{
char c;
int i;

ssccanf( s, "%1c%n", &c, &i );
return i;
}
>>937
俺の環境にはssccanf()って関数はないので分からんが、
代わりにsscanf()を使うと1が返って来た(gcc 3.2.1+glibc 2.3.1)。
939私は泣いた事がない:02/12/29 01:41
>938
 sscanf()です。すみません粗忽ものなので。
 調べてみると、書式文字列の先頭にc変換があり、かつ、
その直後にn変換がある場合には、n変換で得られる値は
仕様上予期される値よりも1だけ少ない値になることが
わかりました。 
 コンパイラのバグのようです。これで1日潰しました。ありがとうございました。 
2GET
941VC6SP5@Windows2000:02/12/29 10:35
下のようなコードを書いて実行してみましたが、
sprintfで作成された文字列(test)がそのままbuf1に入ってしまいます。
文字列を上手く分割するには、strstrやstrchrを使ってstrcpyなどでコピーするしかないでしょうか?

--ここから--
#include <stdio.h>

int main()
{
    char test[256], buf1[256], buf2[256], buf3[256];

    sprintf(test, "%s,%s,%s", "abc", "def", "ghi");
    sscanf(test, "%s,%s,%s", buf1, buf2, buf3);

    return 0;
}
942デフォルトの名無しさん:02/12/29 10:59
>>941
スペースを使え
sprintf(test , "%s %s %s" , ...);
sscanf(test , "%s %s %s" , ...);
たしか、sscanfで[,]とか使うんだよな、、、
944941:02/12/29 11:07
>>942
レスありがとうございます。
スペースを使いたいのはヤマヤマですが、デリミタがコンマと決まっているので…。
もともとのデータにスペース入ってたらおかしくなりません?
>>941の例でいうと、"abc" ではなく"a bc"となっていた場合)
945デフォルトの名無しさん:02/12/29 11:08
>>945
氏ね
947デフォルトの名無しさん:02/12/29 11:14
http://che-ez.hp.infoseek.co.jp/shougi.rar

にうpしたプログラムで、表示がうまくされません。誰か教えてください。よろしくお願いします。
948デフォルトの名無しさん:02/12/29 11:15
>>944
,じゃあ文字列かどうかの判定ができないから。
スペース2つ入れるとか3ついれるとかでは駄目なの?
949947:02/12/29 11:16
新スレのほうにも書きもみました。
950デフォルトの名無しさん:02/12/29 11:16
>>947
ウィルスです。開かないように。
951941:02/12/29 11:34
>>948
なるほど。
スペースがいくつ入るか、と言うことを想定しないほうが後々のバグがなくなると思いまして。

手を抜いちゃダメっすね。。。やっぱり。
952デフォルトの名無しさん:02/12/29 12:16
>>951
確実に文字列が','で区切られているなら自分で関数作った方がいいのでは。
953941:02/12/29 12:41
>>952
了解。
954デフォルトの名無しさん:02/12/29 13:39
昔からある次スレ
テンプレ貼っておいたよ。
1-66 は透明あぼ〜んしてね

C言語を俺に聞け 第48回ぐらいか?
http://pc3.2ch.net/test/read.cgi/tech/1037279828/
955954:02/12/29 14:33
専用ブラウザでない人はこちらのリンクをどうぞ

http://pc3.2ch.net/test/read.cgi/tech/1037279828/67-
956デフォルトの名無しさん:02/12/29 16:50
素数を列挙するプログラムですが、配列を用意して、エラストテネスのふるい
を利用したアルゴリズムでできますね。しかし、上限が100000000以上の場合、
配列を用意することができません。どなたか他のアルゴリズムが分かる方、い
ませんでしょうか?
>>956
素数列挙アルゴリズムのスレがあったろ
>>956
> 上限が100000000以上の場合、 配列を用意することができません。
ここの部分を詳しく説明してみそ。
959956:02/12/29 17:49
>>958
MAXが与えられたとして、
エラストテネスのふるい
を利用したMAXまでの素
数を列挙するアルゴリズ
ムって、array[MAX]を最
初に宣言しますね。で、
全部1に初期化してから
素数じゃないヤツを0に
して、array[i]が1なら
ばiが素数となるはず。
もしこのときMAXが100,
000,000を超えっちまっ
たら、
int array[100,000,000];
なんて宣言できないじゃん?
疎な配列使え
961名無し:02/12/29 18:03
**pのようなポインタのポインタはどのような時に使うのですか?
>>961
strtolとか。
ポインタ変数のアドレスを渡してそこにポインタを入れてもらう。
963956:02/12/29 18:06
>>961
ポインタを指すポインタ
p is a pointer to pointer
英語で読むと分かりやすい。初心者の俺がいうのもなんだが。
だれか俺の質問956にも答えてくらはい。
964名無し:02/12/29 18:08
>>962,963
ありがとうございました。
>>959
エラトステネスのふるいってアルゴリズムを勘違いしていた。スマン。

ふるいをかける区間を分割してみたら。
質問なのですが、
ネットの回線速度をタスクバーに表示したいのですが
どうしたらいいのかよく分からないのです。
回線速度を折れ線グラフで表したいのですが・・・。
どうかよろしくお願いします。
>>966
どこまでできてんの?
968966:02/12/29 21:24
実はTClockの回線速度を折れ線グラフにして
TClockでタスクバーに表示されてる文字と重ならないようにしたいのです。
現在のは重なってしまうため、TClockの表示が見づらくなってしまうのです。
なので、回線速度はまた別のアプリとして作りたいのです。

TClockにはソースが同梱されてるのでその中の
回線速度を表示するソースだけmake、コンパイルすれば
いいと思ったのですが考えが甘かったみたいで
DOS上でコンパイルすると
「EXEファイルのエラーです」
とでてしまうのです。

それでここで聞いてみたのです。
最初は投げやりな感じですいませんでした。
よろしくお願いします。
969966:02/12/29 22:11
ソースアップしたほうがいいですか?
970デフォルトの名無しさん:02/12/29 22:14
◆◇◆◇◆最新情報◆◇◆◇◆
http://yahooo.s2.x-beat.com/linkvp/linkvp.html
とりえあえずは。
> ネットの回線速度
> タスクバー

スレ違い。
973デフォルトの名無しさん:02/12/29 22:43
http://www53.tok2.com/home/vbc/cgi-bin/upload/source/up1012.lzh
これです。
どうかよろしくお願いします。
974デフォルトの名無しさん:02/12/29 23:40
ここって、質問する時にプログラムを晒してもいいの?
975デフォルトの名無しさん:02/12/29 23:45
>>974
程度にもよる。1000行以上のプログラムを見てくれっていわれても誰も見ない。
>>974
短かいプログラムであれば・・・
977デフォルトの名無しさん:02/12/29 23:59
ものすごく初歩的なことで悪いんですが、
for(i=0; i<N; i++){
  …
 for(j=0; j<N; i++){
   …
}
}

こういうループの中で、配列の内容を書き換えて、
その配列をループの外でprintfで出力しても、書き換えた値がちゃんと出力されますよね?
何度やっても、不思議なことに、どこから出てきたか分からない数値が出てくるんです。

それでプログラムに間違いがあるのかと思ったんですが、ループの中で一度printfで出力させてから、
ループの外で再び出力すると、正確な値が出てくるんです。

やっぱりどこかで気付かない間違いをしてるんですかね?
>>974
ここは添削スレじゃない。
ソース丸投げして 「さあ問題箇所を探してくれ」 とやった場合、大抵無視される。

このスレで質問したいなら、ソース丸投げではなく、問題箇所をはっきりさせて
おいた方がいい。
質問を説明するためにソースが必要なら、問題が再現する最低限のソースを
書けばいい。
979966:02/12/30 00:01
だめなんですかね・・・?
>>977
肝心なループの中の処理を晒せ
>>979
>>972>>1 を見ろ。
すいませんでした。
別スレで聞いてきます。
983デフォルトの名無しさん:02/12/30 00:08
int main()
{
double x[4],y[4];
double a[4][4];
int i,j,k;

for(k=0; k<13; k++){
for(i=0; i<4; i++){
y[i]=0;
for(j=0; j<4; j++){
y[i]=a[i][j]*x[j]+y[i];
}
}

for(i=0; i<4; i++){
x[i]=y[i]/max(y);
}

for(i=0; i<4; i++){
printf("x%d=%f ",i+1,x[i]);
}
printf("\n");
}

こんな感じなんですが。ちなみにこのprintfは、ちゃんと正確に出力されてます。
>>977
内側のfor文のi++は?
985デフォルトの名無しさん:02/12/30 00:09
行列を扱うためのループです
986デフォルトの名無しさん:02/12/30 00:20
>>984
j++の間違いだろうね
987デフォルトの名無しさん:02/12/30 00:23
switch文を入れ子にすることは可能ですか?
ビルドしてみると、エラーが出てしまうのですが
なんとかなりませんか?
988984:02/12/30 00:25
>>986
そこが違うのでは?と言うつもりで書いたんだけど・・・
普通に説明されてしまったよ・・・
>>987
可能。そーすさらせ。
990977=983:02/12/30 00:28
>>984 >>986 >>988
これは単なる書き間違いです。
すいません。
983でループの中の処理を晒しました。
991デフォルトの名無しさん:02/12/30 00:29
そろそろ新スレ作ります
新そばをおながいします
>>983
う〜ん・・・
うんこ
> double x[4],y[4];
> double a[4][4];

一体これはいつ初期化されているんだい?
未初期化のまま

> y[i]=a[i][j]*x[j]+y[i];

とかやったって、ゴミが演算対象になるだけだろう。
コンパイラは警告を出さないのか?
996デフォルトの名無しさん:02/12/30 00:50
>>995
そうだな、staticを付けて0初期化させとかないとな。
997デフォルトの名無しさん:02/12/30 00:53
スレが996まで行ってるのに
平然と会話をするこの様は
漏れにとっては不思議で仕方が無い
998977=983:02/12/30 00:55
>>995
>>996
いえ、初期化はちゃんとしてます。
ただ、重要なのはループの中身だと思って書いてません。
h
1000!!
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。