C言語なら俺に聞け! Part 99
レス数が1000を超えています。これ以上書き込みはできません。
0001v(^o^i)d
NGNG質問する前には最低限検索を。
GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
各種リンク、関連スレは>>2-13あたり
C言語なら俺に聞け! Part 98
http://pc5.2ch.net/test/read.cgi/tech/1104114259/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
0002デフォルトの名無しさん
NGNGgcc
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/
Visual C++ Developer Center: Microsoft Visual C++ Toolkit 2003
http://msdn.microsoft.com/visualc/vctoolkit2003/
【ライセンスや機能などに問題あり】
Microsoft C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/〜lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html
Intel C++ Compiler for Linux
http://developer.intel.com/software/products/compilers/clin/noncom.htm
0003デフォルトの名無しさん
NGNGC言語なら俺俺に聞け! Part 87
http://pc5.2ch.net/test/read.cgi/tech/1090652323/
0004デフォルトの名無しさん
NGNG0005デフォルトの名無しさん
NGNG0006デフォルトの名無しさん
NGNGlong long と記述してコンパイルできる方法はありますの?
0007デフォルトの名無しさん
NGNGないんですの。
0008デフォルトの名無しさん
NGNG0009デフォルトの名無しさん
NGNG別のではできていたようなので理由がわかりません、教えてください。
[C++ エラー] File1.cpp(5): E2209 インクルードファイル 'ERR.H' をオープンできない
[C++ エラー] File1.cpp(14): E2221 マクロ引数の構文エラー
[C++ エラー] File1.cpp(115): E2268 未定義の関数 'warn' を呼び出した
[C++ エラー] File1.cpp(161): E2268 未定義の関数 'strcasecmp' を呼び出した
[C++ エラー] File1.cpp(166): E2268 未定義の関数 'dprintf' を呼び出した
[C++ エラー] File1.cpp(210): E2268 未定義の関数 'dprintf' を呼び出した
[C++ エラー] File1.cpp(219): E2268 未定義の関数 'strcasecmp' を呼び出した
[C++ エラー] File1.cpp(223): E2268 未定義の関数 'dprintf' を呼び出した
[C++ エラー] File1.cpp(263): E2451 未定義のシンボル __func__
[C++ エラー] File1.cpp(263): E2268 未定義の関数 'dprintf' を呼び出した
[C++ エラー] File1.cpp(410): E2268 未定義の関数 'warnx' を呼び出した
[C++ 警告] File1.cpp(463): W8066 実行されないコード
[C++ 警告] File1.cpp(492): W8066 実行されないコード
0010デフォルトの名無しさん
NGNGそのまんまだる?
00119
NGNGすいませんがよろしくおねがいします。
0012デフォルトの名無しさん
NGNG00139
NGNG0014デフォルトの名無しさん
NGNGerr.hというファイルを手に入れろ
0015デフォルトの名無しさん
NGNGほかに代用できそうなものがないかあたれ
0016デフォルトの名無しさん
NGNGならその本の名前書いてみろよ! かけないだろ? 本当は読んでないくせに。
0017デフォルトの名無しさん
NGNGunix系のソースを無理矢理コンパイルしている予感
0018デフォルトの名無しさん
NGNG0019デフォルトの名無しさん
NGNGDOS/Windows系ではstricmpもしくはstrcmpiしか用意されていませんが。
0020デフォルトの名無しさん
NGNGこいつぼけ
0021デフォルトの名無しさん
NGNGnに0渡したときは何返すべきだと思う?
0022デフォルトの名無しさん
NGNGPOSIX等は、標準Cとは関係ないので却下です。
0023デフォルトの名無しさん
NGNG0024デフォルトの名無しさん
NGNG0025デフォルトの名無しさん
NGNGどの規格ですか?
早く提示してください。
0026デフォルトの名無しさん
NGNGgoogleしてもいいぞ ;-)
0027デフォルトの名無しさん
NGNG0028デフォルトの名無しさん
NGNG0029デフォルトの名無しさん
NGNGはやくだしてよ。ぼけちゃん。
0030デフォルトの名無しさん
NGNG#define cast(TYPE) (TYPE)
として使ってるのですが、これって一般的ですか?
0031デフォルトの名無しさん
NGNG#define begin {
#define end }
と同じくらい一般的。
003230
NGNGありがとうございました。
0033デフォルトの名無しさん
NGNG#define begin {
#define end ;}
だろぼけ > 31
0034デフォルトの名無しさん
NGNGUNIX互換端末で
man strcasecmp
を読め!
0035デフォルトの名無しさん
NGNGふざけるな。
この無知。
知ったかぶり。
寝ぼけてるんじゃないのか?
0036デフォルトの名無しさん
NGNG知らないことがあったら、http://www.google.co.jp/に単語を入れて調べてみるといいよ。
もしかしたら、教えてもらえるかもしれないよ。
どう?
勉強になったでしょ?
それから、strdupも標準じゃないんだよ。
知らなかったでしょ?
勉強になったでしょ?
それじゃあね。
もう少し勉強してから、偉そうなこと書こうね。
0037デフォルトの名無しさん
NGNG「UNIX互換端末」という名前の規格もね。
ボク無知だから、C89とかC99とかANSI-CとかISO-Cとか言ってもらわないと分からないの。
もう少し詳しく教えてよ。
0038デフォルトの名無しさん
NGNG0039デフォルトの名無しさん
NGNG0040デフォルトの名無しさん
NGNGわー、すごーいー。
さすがー。
こんなすごいこと知ってる人が世の中にいたなんて。
感動しちゃった。
で、
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/strncasecmp.3.html
どこに「標準C」と書いてあるのかな?
俺には読めないので教えてくれ。
0041デフォルトの名無しさん
NGNGhttp://tsukuba.m17n.org/mule-ja-archive/1994-9/msg00029.html
「名前」という日本語がの意味が分からない人には理解できないだろうが。
0042デフォルトの名無しさん
NGNG0043デフォルトの名無しさん
NGNG型の宣言は何にすればいいのでしょうか?
あと %dとか%sのようなフォーマットを何にすればいいのかも教えてください。
0044デフォルトの名無しさん
NGNG0045デフォルトの名無しさん
NGNG%p
99ページを読め!
0046デフォルトの名無しさん
NGNG懐かしいひとたちが...
0047デフォルトの名無しさん
NGNGprintf("%02d:%02d:%02d:%02d:%02d:%02d", a[5], a[4], a[3], a[2], a[1], a[0]);
0048デフォルトの名無しさん
NGNG004943
NGNGa[i]はint,long,charなどのどれにすればいいのですか?
0050デフォルトの名無しさん
NGNGcharでぴったりサイズ
0051デフォルトの名無しさん
NGNGこれが灯台レベルとしたら、大学の信頼ガタ落ちだな(k
0052v(^o^i)d
NGNG0053デフォルトの名無しさん
NGNG大学の授業なんか誰も当てにしてない。
0054デフォルトの名無しさん
NGNGFILE *fp;
char keyword[80];
char line[256];
char* sp;
int size = 0;
if( argc<3 || (fp=fopen(argv[1],"r") ) == NULL){
printf("can not open file");
exit(1);
}
strcpy(keyword,argv[2]);
size = strlen(keyword);
while(fgets(line,256,fp) !=NULL){
sp = strncmp(line,keyword,size);
if(sp==0){
printf("%s",line);
}
}
fclose(fp);
return 0;
}
----------------------------------------------------------------------
文字列処理のプログラムなんですが、keywordが1文字だった場合、
keywordに空白を追加して文字列比較(strncmp)の処理を行いたいのです。
どのようにすればよいでしょうか?
0055デフォルトの名無しさん
NGNGstrcat()
0056デフォルトの名無しさん
NGNGmemset(keyword+1, ' ', 追加する文字数)[追加する文字数] = '\0';
0057デフォルトの名無しさん
NGNGif ( Joy.Px > +65536/3 ) {trig=1;}else{trig=0;}
こいつをもう少し短くできないでしょうか?
0059デフォルトの名無しさん
NGNG//if (trig==0)if ( Joy.Px > +65536/3 ) myx++;trig=1;
//if ( Joy.Px > +65536/3 ) {trig=1;}else{trig=0;}
でいかがか?
0060デフォルトの名無しさん
NGNGc=65536/3;
if(!trig&&Joy.Px>c)myx++;
trig=(Joy.Px>c);
0062デフォルトの名無しさん
NGNG006362
NGNG二次元配列を宣言時に全て1で初期化するにはどうすればいいですか?
0064デフォルトの名無しさん
NGNG0065デフォルトの名無しさん
NGNGstatic宣言し0を1とみなす。
0067デフォルトの名無しさん
NGNG馬鹿ですね。
0068デフォルトの名無しさん
NGNG64の方法以外では無理。
0069デフォルトの名無しさん
NGNG0071デフォルトの名無しさん
NGNG0072デフォルトの名無しさん
NGNG0073デフォルトの名無しさん
NGNGstatic宣言のところは満年齢を採用し他のところは数え年を使用していると考える。
0074デフォルトの名無しさん
NGNGchar [] にしか通じない罠。
0075デフォルトの名無しさん
NGNG0076デフォルトの名無しさん
NGNGfloat や double は型を宣言するだけで速度が遅くなるんですか?
計算しないでも、型キャストなんてしてしまうと、それだけで極わずかの
遅延が発生するって事ですか?
教えて欲しいです。
0077デフォルトの名無しさん
NGNG変数を宣言するだけなら普通何もしないのと同じだから遅くはならないと思うが。
0078デフォルトの名無しさん
NGNG0079デフォルトの名無しさん
NGNGそれでも型キャストぐらいなら問題ないですか?
0080デフォルトの名無しさん
NGNGけど同じ4バイトだとしても、どうしてなのか不思議です。
計算して遅れが発生するのは納得がいくんですが。
0081デフォルトの名無しさん
NGNGスーパープログラマじゃあるまいし、そんなにミリ秒の遅延が気になるのか?
0082デフォルトの名無しさん
NGNGナノ秒ならともかく、
ミリ秒ならば、気にするべきかと・・・
0083デフォルトの名無しさん
NGNGb/=a ;
とかの演算だったら int型に変換してくれるっていう最適化は
コンパイラに標準でありますか?
0084デフォルトの名無しさん
NGNG0085デフォルトの名無しさん
NGNGそんなことしたら大変でしょ。
float型をfloat型で割ったものをint型に代入する、なんていう式が真っ当な物とは思えない。
0086デフォルトの名無しさん
NGNGなんでだよ。
耐荷重M kgのエレベーターに、平均体重m kgの人が何人乗れるか、どうやって計算する?
0087デフォルトの名無しさん
NGNG0088デフォルトの名無しさん
NGNGよく考えたらおかしいとわかりました。
0089デフォルトの名無しさん
NGNGやっぱ、単にシフトしてるだけなんでしょうか?
0090デフォルトの名無しさん
NGNGあの、えと、floatって浮動小数点数なんですが…
って、釣りですか。
0091デフォルトの名無しさん
NGNGC++でfloatの前にconst付けると最適化されうる
0092デフォルトの名無しさん
NGNGなるほど!
0093デフォルトの名無しさん
NGNGつまり単なるシフトじゃないって事ですね。
じゃどうやってるんですか? マスキングかなんかですか?
0094デフォルトの名無しさん
NGNGよく考えたらおかしいとわかりました。
0095デフォルトの名無しさん
NGNG0096デフォルトの名無しさん
NGNG出来るだろ。
009795
NGNG差し支えなければサンプル見せて下さい。簡単で良いです。
俺にはできんかったとです。
0098デフォルトの名無しさん
NGNGマクロはただの文字列置換。
マクロ内にループ処理を入れれば、
そのループ処理に勝手に置換される。
> 俺にはできんかったとです。
マクロの基本から勉強し直せ。
0099デフォルトの名無しさん
NGNG#define REPEAT(stmt,n) REPEAT##n(stmt)
#define REPEAT0(stmt) #define REPEAT1(stmt) stmt
#define REPEAT2(stmt) \
do{stmt;stmt;}while(0)
#define REPEAT3(stmt) \
do{stmt;stmt;stmt;}while(0)
0100デフォルトの名無しさん
NGNG#define ENDLESS_LOOP while(1)
int main( void )
{
ENDLESS_LOOP;
return 0;
}
0101デフォルトの名無しさん
NGNGtemplate<int n>
inline void loop(){
justDoIt();
loop(n-1);
}
inline void loop<0>(){}
0102デフォルトの名無しさん
NGNGそれ書くなら
template <int N>
inline void loop() {
justDoIt();
loop<N-1>();
}
template <>
inline void loop<0>() {}
スレ違いだし。
0103デフォルトの名無しさん
NGNG#define frand() ((double)rand()/(RAND_MAX+1))
をつかってますが、gccでコンパイルするとオーバーフローみたいな
エラーがでます。
どうすればよいのでしょう?
お願いします。
0104デフォルトの名無しさん
NGNGなんか間違ってる
0105デフォルトの名無しさん
NGNGRAND_MAXもdaubleにキャストすりゃいい
0106デフォルトの名無しさん
NGNG0107デフォルトの名無しさん
NGNG0108デフォルトの名無しさん
NGNGRAND_MAX+1.0
0109デフォルトの名無しさん
NGNGじゃあ
#define frand() ((double)rand() / ((double)RAND_MAX + 1) )
にすればいいのでは?
0110デフォルトの名無しさん
NGNG0111デフォルトの名無しさん
NGNGスト破り
0112デフォルトの名無しさん
NGNG配列で、[i]番目のmemberって感じで参照できないんでしょうか?
0113デフォルトの名無しさん
NGNGCではミリ
C++ならboost::tupleで代用できなくもないけど
0114デフォルトの名無しさん
NGNGありがとうございます。
なんか効率的じゃない気がしたもので・・
ということはwrite()/read()で構造体に入れてあるデータをファイルに
書き込み/読み込みする際も、その都度複数のmemberごとにbufferを./->で
指定しなきゃいけないってことですよね?
0115デフォルトの名無しさん
NGNGそんなことはない
ただ構造体メンバにポインタが含まれている場合は
ポインタの参照先までちゃんと書き出す処理を自前で書かないといけない
0116デフォルトの名無しさん
NGNGありがとうございます。
そうすると、pointerがmemberに含まれていない構造体を一気に
write/readする時はどのようにすれば良いのでしょうか?
0117デフォルトの名無しさん
NGNG0118デフォルトの名無しさん
NGNGbufferの部分はなんと書けばよいのでしょう?
0119デフォルトの名無しさん
NGNG0120デフォルトの名無しさん
NGNGint a;
char b;
double c;
};
struct hoge buf;
// 書き込み
fwrite(&buf, sizeof(buf), 1, fp);
// 読み込み
fread(&buf, sizeof(buf), 1, fp);
0121デフォルトの名無しさん
NGNGありがとうございます。
ということは、↓ということでいいでしょうか。
一応エラーはないようでしたが、ファイルを直接見てみると
文字化けしてましたので・・。
struct Hoge hoge;
write(fd, &hoge, sizeof(hoge));
0122デフォルトの名無しさん
NGNG文字列でも書き出そうとしてるんですかい?
struct Hoge hoge, hoge2;
として
hogeをwriteで書き出した後、hoge2にreadして値がちゃんと入ってるか調べてみては?
0123デフォルトの名無しさん
NGNGfd = open("C:\\hogelist.text", O_RDWR | O_CREAT, S_IWRITE | S_IREAD);
としています。
0124デフォルトの名無しさん
NGNGwriteで書き出されるのはバイナリデータだから、エディタで開いても見えないよ
0125デフォルトの名無しさん
NGNGとんでもない勘違いをしていました。
ご指摘ありがとうございました。
ところでアクセスモードだと思うのですが、
O_ROWとはなにを指しているのでしょうか?
Microsoft C の純正リファレンスのソースに載っていたのですが
説明がないのです・・。
0126デフォルトの名無しさん
NGNG0127デフォルトの名無しさん
NGNGありがとうございます、試してみたところ問題ないようでした^^
0128デフォルトの名無しさん
NGNGRAWデータ(つまりバイナリデータ)モードでは?
#if C_MSC & MSDOS2
#include <fcntl.h>
#define O_RAW O_BINARY
#endif
↑こんな風になってるから、O_BINARYと等価かと
0129デフォルトの名無しさん
NGNGははぁ・・なるほど、そうでしたか。
大変助かりました、皆さんありがとうございました。
0130デフォルトの名無しさん
NGNG2 なら 1
4 なら 2
8 なら 3
16 なら 4
32 なら 5
:
という風に'x なら y'
というビットシフト値(y)を得たいのですが、
簡単な変換方法はないでしょうか?
0131デフォルトの名無しさん
NGNG簡単じゃない方法って、
一体どういう奴の事?
0132デフォルトの名無しさん
NGNGf(x) {
int i=1,y=0;
for (;i != 0x80000000;i*=2,y++) {
if (i==x)
return y;
}
return -1; // 一致しない
}
という関数でやってます。
これより良い方法があればご教授下さい。
0133デフォルトの名無しさん
NGNG0134デフォルトの名無しさん
NGNGy = log((double)x) / log(2.0);
0135デフォルトの名無しさん
NGNGなんでxを直接シフトしないのん?
0136デフォルトの名無しさん
NGNGつまんね
0137デフォルトの名無しさん
NGNGxが2のn乗とは限らない場合があるので。
>>134
y = (int)(log((double)x) / log(2.0));
としたあと
if (x == 1<<y)
で比較すれば正しいかわかりそうですね。
これでやってみます。
ありがとうございました。
>>135
xに何が入ってくるのかわからないからです。
0138デフォルトの名無しさん
NGNGx==8のときyが2でした。
以下テストコード
int x,y;
x = 1;
y = (int)(log((double)x) / log(2.0));
printf("x=%d y=%d %s\n",x,y,(x==1<<y)?"ok":"ng");
x = 2;
y = (int)(log((double)x) / log(2.0));
printf("x=%d y=%d %s\n",x,y,(x==1<<y)?"ok":"ng");
x = 3;
y = (int)(log((double)x) / log(2.0));
printf("x=%d y=%d %s\n",x,y,(x==1<<y)?"ok":"ng");
x = 4;
y = (int)(log((double)x) / log(2.0));
printf("x=%d y=%d %s\n",x,y,(x==1<<y)?"ok":"ng");
x = 5;
y = (int)(log((double)x) / log(2.0));
printf("x=%d y=%d %s\n",x,y,(x==1<<y)?"ok":"ng");
x = 8;
y = (int)(log((double)x) / log(2.0));
printf("x=%d y=%d %s\n",x,y,(x==1<<y)?"ok":"ng");
x = 16;
y = (int)(log((double)x) / log(2.0));
printf("x=%d y=%d %s\n",x,y,(x==1<<y)?"ok":"ng");
x = 32;
y = (int)(log((double)x) / log(2.0));
printf("x=%d y=%d %s\n",x,y,(x==1<<y)?"ok":"ng");
0139デフォルトの名無しさん
NGNGx=1 y=0 ok
x=2 y=1 ok
x=3 y=1 ng
x=4 y=2 ok
x=5 y=2 ng
x=8 y=2 ng
x=16 y=4 ok
0140デフォルトの名無しさん
NGNGceilをはさんだらうまくいきましいた。
test(x) {
int y = (int)(ceil(log((double)x) / log(2.0)));
printf("x=%d y=%d %s\n",x,y,(x==1<<y)?"ok":"ng");
}
main() {
int i;
for (i=0; i<=64; i++) test(i);
}
x=0 y=0 ng
x=1 y=0 ok
x=2 y=1 ok
x=3 y=2 ng
x=4 y=2 ok
x=5 y=3 ng
x=6 y=3 ng
x=7 y=3 ng
x=8 y=3 ok
x=9 y=4 ng
:
x=15 y=4 ng
x=16 y=4 ok
x=17 y=5 ng
:
x=31 y=5 ng
x=32 y=5 ok
x=33 y=6 ng
0141デフォルトの名無しさん
NGNGlog(x)/log(2.0) <- 両辺とも整数になりようがない
0142デフォルトの名無しさん
NGNG0143デフォルトの名無しさん
NGNG0144デフォルトの名無しさん
NGNGint numofbits5(long bits) {
bits = (bits & 0x55555555) + (bits >> 1 & 0x55555555);
bits = (bits & 0x33333333) + (bits >> 2 & 0x33333333);
bits = (bits & 0x0f0f0f0f) + (bits >> 4 & 0x0f0f0f0f);
bits = (bits & 0x00ff00ff) + (bits >> 8 & 0x00ff00ff);
return (bits & 0x0000ffff) + (bits >>16 & 0x0000ffff);
}
0145デフォルトの名無しさん
NGNG0146デフォルトの名無しさん
NGNGそれはビット数数えるだけでそ。
シフト数を調べたければ、(例外を弾いてあるとして)
int n=32, nb;
nb = numofbits5(~((unsigned long)0) + n;);
だろ
0147デフォルトの名無しさん
NGNG0148デフォルトの名無しさん
NGNGいつ使えるかわかんねけど。
つーかどっかで見たな。
Cマガだったかな。
たしか何かの特集で得意げに紹介されてたよ。
小手先馬鹿だね。
0149デフォルトの名無しさん
NGNG0150デフォルトの名無しさん
NGNG0151デフォルトの名無しさん
NGNGスレ違い
ここのExcelスレで聞け
http://pc5.2ch.net/win/
0152デフォルトの名無しさん
NGNG0153デフォルトの名無しさん
NGNG記念カキコ
0154デフォルトの名無しさん
NGNGバグの温床になるから気をつけとけよ。
0155デフォルトの名無しさん
NGNGコンパイルエラーが出てしまいました
#include <stdio.h>
#include <math.h>
double*
get_func(void)
{
double (*fp)(double);
fp = sin;
return (double*)fp;
}
int
main(void)
{
double (*fp)(double);
fp = get_func();
// fp = sin; // これなら問題ない
printf("%g", fp(1));
return 0;
}
~ % gcc -g test.c
test.c: In function `main':
test.c:16: warning: assignment from incompatible pointer type
~ %
型が違っているようには思えないのですが
何かアドバイスいただけますか
0156デフォルトの名無しさん
NGNGfpはdouble (*)(double)
0157デフォルトの名無しさん
NGNG0158デフォルトの名無しさん
NGNGvoid*返すようにしとけ。
0159デフォルトの名無しさん
NGNG関数ポインタをそのままけ返せばいい
double (*get_func(void))(double)
{
〜
return fp;
}
0160デフォルトの名無しさん
NGNG汝、エラーと警告を混同するなかれ
0161デフォルトの名無しさん
NGNGOSはWinXPだ
0162デフォルトの名無しさん
NGNGhttp://cygwin.com
0163デフォルトの名無しさん
NGNGありがとうございます
以下のどちらでも期待した結果になりました
void* get_func(void)
{
double (*fp)(double);
fp = sin;
return fp;
}
double (*get_func(void))(double)
{
double (*fp)(double);
fp = sin;
return fp;
}
int main(void)
{
double (*fp)(double);
fp = get_func();
printf("%g\n", fp(1));
return 0;
}
修行してきます…
0164デフォルトの名無しさん
NGNGa.exe できてたよ…
そして期待した結果になってたよ…
もっと落ち着くことを覚えたいと思います
陳謝
0165デフォルトの名無しさん
NGNG0166デフォルトの名無しさん
NGNGdllにコンパイルしたのですが何故か動かせず・・・
上のソースはネットから拾ってきたもので環境はvc++toolkit2003とSDKでやっております
コマンドプロンプトからtoolkit起動して
cl /c /O1 main.cpp
link /dll main.obj kernel.lib use32.lib /def;main.def
ちなみに上のソースはあるプログラムの拡張dllです
どなたかご教授願いします
0167166
NGNG○ link /dll main.obj kernel.lib use32.lib /def:main.def
です
0168デフォルトの名無しさん
NGNG・・・・俺もヤキ回ったな・・・・ 何見てんだよまったく
0169デフォルトの名無しさん
NGNG0170デフォルトの名無しさん
NGNGk=char(*s);
k=k&0x000000ff;
h0+=k;
cout<<h0<<endl;
*s++;
}
このループってどうなるとループから出るんですか?
0171デフォルトの名無しさん
NGNG0172デフォルトの名無しさん
NGNGつまり文字列の終端で終了
printf("%s", s);
と同じ
0173デフォルトの名無しさん
NGNG0174デフォルトの名無しさん
NGNG#define DebugPrint(message, s...) printf(message, ##s)
#else
#define DebugPrint(message, s... )
#endif
このマクロの移植性はどんな感じでしょうか。
参考web
http://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.6.3.html
http://docs.hp.com/ja/5969-4432/ch01s01.html
0175174
NGNG#ifdef DEBUG
#define DebugPrint(message, ...) printf(message, ## __VA_ARGS__)
#else
#define DebugPrint(message, ... )
#endif
と、したほうが良いみたいですね。
http://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Variadic-Macros.html#Variadic-Macros
0176デフォルトの名無しさん
NGNG__VA_ARGS__はつい最近のコンパイラでしか使えないんだよなあ。
まあ正式な規格のものだから古いコンパイラに移植なんてことが
なかったらそれでいいけど。
古い奴も頭に入れる場合は、
#ifdef DEBUG
#define DebugPrint printf
#else
#define DebugPrint 0 && printf
#endif
とかやって最適化でprintf〜が消えることを期待する方法がある。
0177デフォルトの名無しさん
NGNG何かいい方法ないですか?
シフト演算とかビット演算みたいに簡単に変換したいくて、
割り算は使いたくないんです。
0178デフォルトの名無しさん
NGNG0179デフォルトの名無しさん
NGNG0180デフォルトの名無しさん
NGNG*10 でいいんでねーの?
本意じゃないだろうけど、その文じゃ意味不明。
0181デフォルトの名無しさん
NGNG19 →10 188→180
0182デフォルトの名無しさん
NGNGint floor10(int val)
{
char buf[12];
sprintf(buf, "%d", val);
buf[strlen(buf) - 1] = '0';
return atoi(buf);
}
0183デフォルトの名無しさん
NGNG/10*10ということでいいのか?
0184デフォルトの名無しさん
NGNG>>182 も sprintf 内部じゃ10で割りまくりだから、だめだろ
0185デフォルトの名無しさん
NGNG181はエスパーか?
0186デフォルトの名無しさん
NGNGint floor10(int x){
int y = 10;
for (;y <= x; y+=10)
if (x - y < 10)
return y;
return -1; // 解なし
}
割り算を使ってないというだけだが
0187デフォルトの名無しさん
NGNG乗除算を使用するのが最も簡単。
何故、除算禁止にこだわるのか、理解に苦しむ。
0188デフォルトの名無しさん
NGNG>>177=>>181
0189186
NGNGint floor10(int x){
int y = 10;
for (;y <= x;) {
int w = x - y;
if (w < 10)
return y;
if (w > 1000000000) y+=1000000000;
else if (w > 100000000) y+=100000000;
else if (w > 10000000) y+=10000000;
else if (w > 1000000) y+=1000000;
else if (w > 100000) y+=100000;
else if (w > 10000) y+=10000;
else if (w > 1000) y+=1000;
else if (w > 100) y+=100;
else y+=10;
}
return -1; // 解なし
}
くだらなかったね
ニュートン法かなんかでもうちっと効率良いのってできなかったっけ
0190デフォルトの名無しさん
NGNG0191デフォルトの名無しさん
NGNG0192デフォルトの名無しさん
NGNG0193デフォルトの名無しさん
NGNG0194デフォルトの名無しさん
NGNG普通に考えれば入るだろう。
0195デフォルトの名無しさん
NGNG動くよ
0196デフォルトの名無しさん
NGNG0197デフォルトの名無しさん
NGNG0198デフォルトの名無しさん
NGNGエンコードミスによる文字化けなのかバイナリなのか結構わかるもんだけど
あれはどういう基準なんだろう
0199デフォルトの名無しさん
NGNG詳しくは認知心理学でもやってくれ
0200デフォルトの名無しさん
NGNG0201デフォルトの名無しさん
NGNG読めない文字の並び方に連続性がないか適度に再現性があれば文字化け。
0202デフォルトの名無しさん
NGNGlong floor10(long d)
{
static const int dtbl[] = {0, 6, 2, 8, 4, 0, 6, 2, 8, 4, 0, 6, 2, 8, 4, 0};
int lastd = (d & 0xF);
long val;
if (lastd >= 10)
lastd -= 10;
for (val=(d>>4); val; val>>=4) {
if ((lastd += dtbl[val & 0xF]) >= 10)
lastd -= 10;
}
return d - lastd;
}
0203デフォルトの名無しさん
NGNGstruct s{
char *name;
struct s *prev;
struct s *next;
}aiu;
・・・
aiu data;
char buf[100]
scanf("%s", buf);
data.name = buf;
addtail(data);
・・・
addtailはリストを作る関数です。
でこの三つの文をぐるぐる回していれていったんですが、表示するときに
最後に入れた文字列ばっかりが表示されます。文字列ではなくて一文字
だけとか、入力させずに、data.name="abc"というようにプログラム中でそ
のまま指定した場合は、そのとおりに表示されました。なので上のプログ
ラムがおかしいと思うのですが。
0204デフォルトの名無しさん
NGNGdata.name が指す領域は誰が確保して誰が解放するのか考えてみましょ
う。
0205デフォルトの名無しさん
NGNGよく読んでないが、加減算とシフトを使って割り算を書いてるようにしか見えん。
0206デフォルトの名無しさん
NGNG割り算使うな=割り算えみゅれ
0207デフォルトの名無しさん
NGNGやべーボクすごいとか思ってるんだからほっといてやれよ
0208デフォルトの名無しさん
NGNGint waru10(int x)
{
return (x>>3)<<3+(x>>1)<<1;
}
たぶんね
0209デフォルトの名無しさん
NGNGえーっと、4ビットずつBCD変換して、(最下桁の総和 mod 10) を
元の数から引いてます。ループは最大でも (sizeof long * 2) 回。
>>208
waru10() という関数名と処理が乖離しまくってますが。
0210デフォルトの名無しさん
NGNG最近のプロセッサは整数の割り算なんか、全然重い処理じゃないしなあ。
0211デフォルトの名無しさん
NGNG何サイクルくらい? 面積は??
0212デフォルトの名無しさん
NGNGむしろ、最近のコンパイラは最適化があるから、
この程度のことでわざわざループやら加算の繰り返しやらを
行ったらどんなプロセッサでもまず間違いなくパフォーマンスが下がると思ふ。
よって、そのことについて言及するだけ無駄でしょう
しかし質問の意図が見えないよ・・・
>>211
前にPen4なら1サイクルと聞いたが・・・調べてないので保障しない
0213デフォルトの名無しさん
NGNG今回聞きたいのは「void*」って戻り値についてです
アレですよ 何だよコレ戻ってんのかYO! voidって何も戻らないんじゃないのかYO!
って話です ご教授宜しく哀愁
0214デフォルトの名無しさん
NGNGもう一度聞く、何サイクル? 面積は??
0215デフォルトの名無しさん
NGNG0216デフォルトの名無しさん
NGNGvoid*はなにを指してるのかわかんないけどとにかく何かを指してる(かもしれない)ポインタの型です。
なにを指してるのか不明なのでこの型のポインタはポインタ演算のほとんどができません。
プログラマはこの型のポインタがなにを指しているのか知ってることが期待され、
その型にキャストして使います。
0217デフォルトの名無しさん
NGNG2次元配列型のデータを扱うことはできるのでしょうか。
0218デフォルトの名無しさん
NGNGもちろんだ
0219186
NGNG特に、>>202さんの解答には驚きました。
x=floor10(99988883) ;
とか送った場合、わずか6回のループで済んじゃったわけですが、
これが、>>189さんのおっしゃるニュートン法ってやつなんですか?
検索してみたところで、数学が苦手でさっぱり訳がわかりませんでした。
どういう考えの元で、このようなやり方を思いついたのですか?
半分不可能と思っていただけに、ホント驚きました。
ありがとうです。
0220デフォルトの名無しさん
NGNGすいません、少し焦っちゃいました。
0221デフォルトの名無しさん
NGNGこの時点で、実行速度的に(もちろんサイズ的にも)かなり不利になるけどね
0222217
NGNG変数宣言とshmgetとshmatの記述はどのようにすればいいのでしょうか。
0223デフォルトの名無しさん
NGNG>>1のリンクを読む
0224デフォルトの名無しさん
NGNG>shmgetとshmatの記述は
この部分はスレ違い。
a[3][3]を指すポインタは(仮にcharだとして)
char (*p)[3];
になる。
0225217
NGNG大変参考になりました。
0226デフォルトの名無しさん
NGNG0227デフォルトの名無しさん
NGNGいいえ。
0228デフォルトの名無しさん
NGNGハー・・・・・・・
0229226
NGNGintの要素数を100000位使いたいのですが、出来ますか?
0230デフォルトの名無しさん
NGNGスタックサイズによります。
大体1MBほど使えるかもしれませんが、実装やいろいろな設定で変わってくるでしょう。
もし、多くの領域を使いたいのであれば、ヒープ領域から確保するべきです。
そうすれば、安心できるでしょう?
0231デフォルトの名無しさん
NGNGそれより、除算禁止の理由は?
0233デフォルトの名無しさん
NGNG具体的に言えば、例えば、
int a[10000];
int i;
for(i = 0; i < 10000; i++)a[i]=0;
とするところを、
int* a;
int i;
a = (int*)malloc(sizeof(int)*10000);//ヒープ領域に使用領域を確保。その先頭番地のポインタ。
for(i = 0; i < 10000; i++)a[i]=0;
free(a);//確保したら開放しないとダメ。メモリは再利用…
0234デフォルトの名無しさん
NGNG90000/10 だとコンピュータ内部だと、9000回10を引いているのだと
思っているからです
0235デフォルトの名無しさん
NGNG0236デフォルトの名無しさん
NGNGハー・・・・・・・
0237デフォルトの名無しさん
NGNG0238デフォルトの名無しさん
NGNGBCDコードに変換してる訳じゃないんですね。
0239デフォルトの名無しさん
NGNG0240デフォルトの名無しさん
NGNGもし本人なら、真面目に考えた人が浮かばれん。
俺はパズル以外に意義を見いだせなかったから、全然考えてないけどな。
0242デフォルトの名無しさん
NGNGでは問いますが、除算はどのように実現されているので?
除算回路なんて一般のCPUに組み込まれているんですか?
その辺はよくわからんですが、普通加算回路しか入ってないと思ってるんですけど。
いや、ほんとよくわからないんですけど。
あまりにも・・・過ぎて申し訳ありませんねぇ
0243デフォルトの名無しさん
NGNG引き戻し法とか
0244デフォルトの名無しさん
NGNGコードが美しいわけでもない、速度は遅い、無駄に変数使う。。。
そのアルゴリズムの優れている点はどこなの?
勉強したての人がそういうの見てお手本にしたら可哀想だろうに……
0245デフォルトの名無しさん
NGNG0246デフォルトの名無しさん
NGNG0247デフォルトの名無しさん
NGNG>コード読んでないけど
同一人物でつか?
0248デフォルトの名無しさん
NGNG0249デフォルトの名無しさん
NGNG0250デフォルトの名無しさん
NGNG自分は結構美しいコードだと感じたけど。
0251デフォルトの名無しさん
NGNG同一っつーか、俺はこの話題については>>210>>221>>240位しか書き込んでないよ。
で、プロセッサの除算は、いわゆる筆算のアルゴリズムを使うが、
最近のプロセッサは、テーブルを使って一発で結果を出す方法も併用していると思う。
少し前にPentiumのバグで回収騒ぎがあっただろ?
あれは浮動小数の方だけど。
0252デフォルトの名無しさん
NGNGいくらなんでもそれはないだろう
0253デフォルトの名無しさん
NGNG少し前にPentiumのバグで回収騒ぎなんて話題も知りませんでした。
じゃあ、普通に割り算してたほうが早かった、って事か・・・
けど、ホント勉強になったんです。問題考えてくださった方はありがとございました。
あとついでと言っちゃあ何ですけど、static const int の static がもしなかったら、
関数が呼ばれるたびに初期値が代入されて無駄が発生するって見解は正しいですか?
0254デフォルトの名無しさん
NGNG0255デフォルトの名無しさん
NGNG0256デフォルトの名無しさん
NGNG0257デフォルトの名無しさん
NGNG0258デフォルトの名無しさん
NGNG0259デフォルトの名無しさん
NGNG0260デフォルトの名無しさん
NGNG標準ライブラリにldivというのもある。
0261デフォルトの名無しさん
NGNGゲーム作っててデバッグ用にどこの場所を通ってるか調べるのにLOGを
とりたいんだけどゲームみたいに中で一定の速さが必要なものを作る時
ファイルの書き込みを使ってもスピードに支障はでないレベルでしょうか?
ファイル操作+速度に関して知っておられる方おりましたら助言よろしくです。
0262デフォルトの名無しさん
NGNGOSやファイルシステムにも依るが、書き込みはこれを数回繰り返す。が、
・全部同期で書き込む
・ジャーナリング等の情報だけを同期で、データ本体は非同期で書き込む
・全部非同期で書き込む
等々があって、実際のwriteでどの程度かかるかは環境依存。
その上、Cライブラリのレベルでバッファリングしているから
fwriteやfprintfで実際にシステムコールが呼び出されるかはわからない。
ログの量がある程度以下と想定できるなら、
setvbufによって、事実上ディスクアクセスをfclose時だけにすることも可能。
0263デフォルトの名無しさん
NGNG速度を保証する必要があるならファイル操作ではなく物理ディスク
0264デフォルトの名無しさん
NGNG0265デフォルトの名無しさん
NGNGfp = fopen( argv[1], "r" ) ;
fscanf( fp, "%s" ,buf ) ;
_write( h, buf, 10 ) ;
ちょっと省略しますが、こんな感じで新規のファイルを作ろうと思いました。
しかし、出来上がる場所が実行ファイルと同じ場所と思ってたんですが、そうでも
ないみたい。なぜ??
どうにかして、場所を指定できないですか?
0266デフォルトの名無しさん
NGNG普通ファイル名だけを指定するとカレントディレクトリを指定したものと見なされる。
どこかから実行ファイルの場所を得て、そこへファイル名をくっつけて使え。
0267デフォルトの名無しさん
NGNGけど、
> 普通ファイル名だけを指定するとカレントディレクトリを指定したものと見なされる。
自分も、そう思ったんですけど、出来上がる場所はなぜか
C:\Program Files\Common Files\System\Mapi\1041
これは _write とかの仕様なんですかね。
0269デフォルトの名無しさん
NGNG詳細は環境スレでどうぞ。_open()でさえスレ違いですから。
http://pc5.2ch.net/test/read.cgi/tech/1104843249/
http://pc5.2ch.net/test/read.cgi/tech/1104109858/
http://pc5.2ch.net/test/read.cgi/tech/1090652323/
http://pc5.2ch.net/test/read.cgi/tech/1101931660/
0270デフォルトの名無しさん
NGNGたぶんおまえのプログラムの他の処理でカレントディレクトリを
移動しっぱなしの処理があるんだろ
0271デフォルトの名無しさん
NGNGするなよぼけ > 開放
するなら「解放」だぼけ。
0272デフォルトの名無しさん
NGNGふつうに int array[100000]; で確保すればいい
どっかのぼけが「多くの領域」を定義せずにヒープがどうのと言っているが
そういう井の中の蛙は free についても人のコードを自分の環境に合わさせようと画策するから
言うこと1つずつうざいくら疑ってかかれ
決してああなるな
0273デフォルトの名無しさん
NGNG・・・すげーネタレスだな、おい。
最低限、 size_t 型で表現できる分の配列しか
宣言できないぐらいの事は書けよ。
>>226
言うこと1つずつうざいくら疑ってかかれ
決して >>272 の様になるな
0274デフォルトの名無しさん
NGNGアホ
0275デフォルトの名無しさん
NGNG0276デフォルトの名無しさん
NGNG0277デフォルトの名無しさん
NGNG0278デフォルトの名無しさん
NGNG0279デフォルトの名無しさん
NGNG二進数にするとは、どのような意味だ?
0280デフォルトの名無しさん
NGNG0282デフォルトの名無しさん
NGNGx86汗ではAAD命令。
0283デフォルトの名無しさん
NGNGint st[(x*y)];
こんな風にしたいんですけど、エラーでちゃいますよね。
どうしたらいいんですか?
0284デフォルトの名無しさん
NGNGmalloc
0285デフォルトの名無しさん
NGNGC止めろ。
0286デフォルトの名無しさん
NGNG0287デフォルトの名無しさん
NGNGC99ならできるよ。
おたくのコンパイラが古いだけ。
0288283
NGNG0289デフォルトの名無しさん
NGNG仮想の代物であるC99完全対応のコンパイラなんて、現時点に於いて期待する方がおかしい。
0290デフォルトの名無しさん
NGNG0291290
NGNG0292デフォルトの名無しさん
NGNGa[i][j]のようにアクセスできる領域は作れる
0293デフォルトの名無しさん
NGNGそうでない場合は>>292の言ってるように少しややこしい
0294デフォルトの名無しさん
NGNG解決したって書いてあるだろうがボケ
0295デフォルトの名無しさん
NGNGおまいがボケ
0296デフォルトの名無しさん
NGNGなんだと、このやろ
0297デフォルトの名無しさん
NGNG素敵
0298ミスターポポ
NGNG0299デフォルトの名無しさん
NGNG0300デフォルトの名無しさん
NGNGあ、またVC厨がわいてでた ;-)
0301デフォルトの名無しさん
NGNG0302デフォルトの名無しさん
NGNGなんでそんなにひっぱるんだろ。
0303デフォルトの名無しさん
NGNGは仮想とするのは、このスレ的に真
0304デフォルトの名無しさん
NGNG0305デフォルトの名無しさん
NGNGこのお題目をとなえれば、VCの存在が正当化されるとでもおもってるんだろうなあ。
毎回これしかいわないんだもの ;-)
0306デフォルトの名無しさん
NGNG0307デフォルトの名無しさん
NGNGつぎは「少ないから」とかいいそう。
最初は「long longなんて使えるコンパイラーはないから」だったのが
↓
「…少ないから」 にかわって、大概のコンパイラーで使えるようになった数年前からは
↓
「それはつかえるかもしれんが、C99の機能全部をサポートしたコンパイラーはないから」(理由になってない)
になってきたわけだが、それが
↓
「C99の機能を全部サポートしたコンパイラーは数少ないから」
になってしまって、
その「から」のあとに何が続くのか...
「だからVCつかってるのは正しいんだ!」って、かなり無理があるなあ。
まあ無理があるからあえて後半を書かないわけだが。
0308デフォルトの名無しさん
NGNG302の人は
> unsigned long long intの使えるコンパイラー10種類なんて、すぐに
と言ってるのに、
303のやつは
> いまんところ1種類も出てないわけだから、C99完全対応のコンパイラは
と、
「unsigned long long intが使えるコンパイラー」と言ってるのを
あえて「きこえないふり」をして「C99完全対応しているコンパイラーは」とすりかえた
つもりになって、それでごまかせてるつもりになってるのがいかにもVC厨だなあ。
0309デフォルトの名無しさん
NGNG実際私は使っているのですが、
その、あなたのいう「VC厨」っていう人たちは何をこわがってるんでしょうか?
0310デフォルトの名無しさん
NGNGおまえみたいに正規版を買ってるやつはいいが、
ここにいるVC厨は、イリーガルコピー品なので、まだ古いVCつかってるんだよ!
0311デフォルトの名無しさん
NGNGそんなわけないじゃん。妄想癖?
0312デフォルトの名無しさん
NGNGこいつのどこが「C99に対応していない」かを知っているVC厨はほとんどいない。
「どうやらC99完全対応じゃないらしい」とだけ聞きかじって、実際にどこがどうかとか
までは知らないので、いわれてもでてこないんだよな。だめすぎ。
完全対応しているコンパイラーは私の知る限りでは2種類だけだ(2004年夏の時点で)
0313デフォルトの名無しさん
NGNGひっしだな!
0314デフォルトの名無しさん
NGNG0315デフォルトの名無しさん
NGNG0316デフォルトの名無しさん
NGNG0317デフォルトの名無しさん
NGNG0318デフォルトの名無しさん
NGNGで、10種類は?
0319デフォルトの名無しさん
NGNGおれの知ってるかぎりのC99の機能は使っているが。
0320デフォルトの名無しさん
NGNG0321デフォルトの名無しさん
NGNGboolもtrueもfalseも使えるぞ。
おまえ使ったこともないのか? > 320
やーい。ぼけすぎ
0322デフォルトの名無しさん
NGNG0323デフォルトの名無しさん
NGNG昔のCから一番かわってない部分。
0324デフォルトの名無しさん
NGNGa-ha、so 10 of compilers, you know?
0325デフォルトの名無しさん
NGNG0326デフォルトの名無しさん
NGNG0327デフォルトの名無しさん
NGNG0328デフォルトの名無しさん
NGNG0329デフォルトの名無しさん
NGNGおまえ英語の成績悪いだろ?
0330デフォルトの名無しさん
NGNG0331デフォルトの名無しさん
NGNG0332デフォルトの名無しさん
NGNG0333デフォルトの名無しさん
NGNGいや、多分一人しかいない
0334デフォルトの名無しさん
NGNGさえしらないわけ > お題目をとなえれば受難が通りすぎるとおもっているVC厨
0335デフォルトの名無しさん
NGNG0336デフォルトの名無しさん
NGNG私はCプログラマというよりも数学方面の人間だから。。
0337デフォルトの名無しさん
NGNGじゃあ、その1人が毎回「C99に完全対応しているコンパイラーなんてほとんどないのだから」
と書いてるのかー。
0338デフォルトの名無しさん
NGNGでも、その「C99に完全対応しているやつはあまりない」がいいわけになると
思っているんだからすごいよね。
0339デフォルトの名無しさん
NGNG消防署のほうからきました。
0340デフォルトの名無しさん
NGNGこれを
> GUIなどの標準C99ではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
にしちゃえばいいね
0341デフォルトの名無しさん
NGNGだね。
よろしく! > 次スレたてるひと
0342デフォルトの名無しさん
NGNG本にはHelloworldの後はもう簡単な説明してくれないから、
前に進めないよ orz...
0343デフォルトの名無しさん
NGNG0344デフォルトの名無しさん
NGNGここで聞くと頭悪くなるよ
0345デフォルトの名無しさん
NGNGここはC言語のスレじゃないの?
なんかよくわからんが俺も頭悪いので、
素直に言うこと聴いて、探してみます。
手取り足取りとは言わないまでも、
あまりにも基本的なことを質問できるスレってどこかあります?
0346デフォルトの名無しさん
NGNG0347デフォルトの名無しさん
NGNGhello kittyです。それができないようでは先にすすめない。
0348デフォルトの名無しさん
NGNGこれウソ。まるで読んでいる本が悪いかのように言っているが、こいつはどの本も読んでない。
読んでたら本の名前書けるはずだもんなあ。
0349デフォルトの名無しさん
NGNGpublic:
TestA() {
a = new int;
}
~TestA() {
delete a;
}
int *a;
};
class TestB : public TestA{
public:
TestB() {
b = new int;
}
TestB(const TestB& B) {
b = new int;
*b = *B.b;
}
~TestB() {
delete b;
}
int *b;
};
main() {
TestB a;
TestB b = a;
}
というプログラムで何故コピーコンストラクタでTestAクラスのメンバのaに別のアドレスを割り当てなくても大丈夫なのでしょうか?
0350デフォルトの名無しさん
NGNG0351デフォルトの名無しさん
NGNG時間割やアスキーコード表など何でもいいから、テキストかHTMLの表を出力するプログラムを書け。
0352デフォルトの名無しさん
NGNGの値によって処理を分岐させたいのですが、
ifとelse ifでネストさせて分岐させるのと
switch(hoge)で分岐させるのでは、
処理速度に差が出ますでしょうか?
将来的に分岐が増えそうなので
switchを利用したいと思っているのですが、
両者に大きな処理速度の違いがあるのか疑問に思いました。
0353デフォルトの名無しさん
NGNG実際にコード書いて試してみようとはしないのか。
0354デフォルトの名無しさん
NGNG確率に大きな偏りがなければ、迷わずswitchを使え。
0355デフォルトの名無しさん
NGNG0356デフォルトの名無しさん
NGNG関数ポインタは頭にないか?
0357352
NGNGなるほどー
関数ポインタという手もあったんですね。
勉強になりました。
>>354
switchが可読性が良いので、そっちを利用する
という意見があるようですね。
ありがとうございました。
あと、Part98にも同じ質問がありましたね…
すみませんでした(´・ω・`)
0358デフォルトの名無しさん
NGNG0359デフォルトの名無しさん
NGNGそれうそ
0360デフォルトの名無しさん
NGNG0361デフォルトの名無しさん
NGNGと言う書き方で文字列を一つずつ画面に表示する関数は作れますか?
0362デフォルトの名無しさん
NGNGたぶん作れる。
0363デフォルトの名無しさん
NGNGf(char*p){int i=0;
while(p[i]){
putchar(p[i++]); putchar('\a');
sleep(100);
}}
0364デフォルトの名無しさん
NGNG0365デフォルトの名無しさん
NGNGfor(i=0;i<15;i++){if(n&&n%3&&n%9){putchar('\a');}sleep(1000);
}
0366デフォルトの名無しさん
NGNGできました!ありがとうございます!
書き方自体は物凄く簡単なんですね。
次からは聞かなくても作れるように頑張ります!
0367デフォルトの名無しさん
05/01/17 00:41:13例えばこういうプログラムをつくりました。
#include <stdio.h>
int main(void){
printf("Hello");
return 0;
}
この時、gcc uuuu.cでコンパイルできても、
./a.outとしても、何も表示されずに終了します。
プログラムが変なんでしょうか?設定がおかしいのでしょうか?
良く分かりません。gccを入れ直してもダメでした。。
0368デフォルトの名無しさん
05/01/17 00:43:03#詳細は該当スレにて。
0369デフォルトの名無しさん
05/01/17 00:52:330370デフォルトの名無しさん
05/01/17 00:55:19改行したら、確かにできました。
そうなんですね。。
ありがとうございました。
0371デフォルトの名無しさん
05/01/17 01:17:30以下のような擬似コードをデッドロックさせないで動作完了を保障する送信命令はないのでしょうか。
----------------------------
if( proc1 ){
x = 1;
send(x) [ => proc2 ]
recv(y) [ <= proc2 ]
print(x+y);
}
if( proc2 ){
y=2;
send(y) [ => proc1 ]
recv(x) [ <= proc1 ]
print(x+y);
}
----------------------------
特に上記の擬似コードのSendにMP_Send命令を用いても環境によっては動作するのですが、
これはMPIの規定を無視したコーディングになっています。確実な動作を保障できるSend命令はないでしょうか
よろしくお願いします。
0372デフォルトの名無しさん
05/01/17 01:46:45>>1
0373デフォルトの名無しさん
05/01/17 01:48:57今度は文字を一つ違う文字に変えるプログラムを(AがB、4が5)作りました。
#include <stdio.h>
int main(void)
{ char t[44];
char *s;
s = t;
int j = 0;
int o = 0;
scanf("%s", t);
while('\0'!= *s){
j++;
}
s =s - j;
while(j != o){
*s++;
s++;
o++;
}
printf("%s \n", *s);
return 0;
}
それが、どうやらscanfで止まってしまうようで、
文字をいれてリターンをいれても、また入力待ち状態になってしまいます。
なぜなんでしょうか。。。
0374デフォルトの名無しさん
05/01/17 01:50:09fgets+sscanf推薦
0375デフォルトの名無しさん
05/01/17 01:51:390376デフォルトの名無しさん
05/01/17 01:54:33while('\0'!= *s){
j++;
s++;
}
0377デフォルトの名無しさん
05/01/17 01:55:330378デフォルトの名無しさん
05/01/17 01:56:10>>375
よんでみます。。。
0379デフォルトの名無しさん
05/01/17 02:10:55(*s)++;
s++;
}
s =s - j;
printf("%s \n", s);
0380デフォルトの名無しさん
05/01/17 02:11:23やりたいのはこんなの?
#include <stdio.h>
int main(void)
{
char t[256];
int i;
fgets(t, 256, stdin);
for(i=0; t[i] != '\n'; i++)
t[i] += 1;
printf("%s", t);
return 0;
}
0381デフォルトの名無しさん
05/01/17 02:55:34(問)ガウス法のプログラムを作成し、次の方程式を解け。
3X1 + 2X2 + X3 = 10
2X1 + 5X2 + 2X3 = 18
X1 + 4X2 + X3 = 12
#include <stdio.h>
#define n 3
main()
{
int i,j,k;
double a[n][n+1]={{3,2,1,10},{2,5,2,18},{1,4,1,12}};
double d;
この続きをお願いします。言語はCです。
0382デフォルトの名無しさん
05/01/17 03:05:520383デフォルトの名無しさん
05/01/17 03:19:23http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/80.txt
ピボット選択無しの最も単純なバージョン。
0384デフォルトの名無しさん
05/01/17 03:29:54http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/80.txt
これ見れませんよ。
0385デフォルトの名無しさん
05/01/17 03:31:00みれますよ
0386デフォルトの名無しさん
05/01/17 03:41:09見れました。ありがとうございました。
0387デフォルトの名無しさん
05/01/17 06:42:40だから使うなっていっただろ ぼけ
0388デフォルトの名無しさん
05/01/17 11:21:500389デフォルトの名無しさん
05/01/17 11:42:49それを言うなら
触らぬ神に祟りなし
だろ
0390デフォルトの名無しさん
05/01/17 12:07:12回してみようとしたところ、スタックのオーバーフローが起こってしまいました。
ちなみに、エラーメッセージは以下の通りでした。
Pid 6548 received a SIGSEGV for stack growth failure.
Possible causes: insuficient memory or swap space,
or stack size exceeded maxssiz.
0391デフォルトの名無しさん
05/01/17 12:28:001.スタックサイズを大きくする
2.配列をスタックに取らない。
お好きな方法をどうぞ。
0392デフォルトの名無しさん
05/01/17 12:57:06返ってきます。どこが間違っているのでしょうか?
#include <stdio.h>
#include <io.h>
#include <fcntl.h>
#include <sys\types.h>
#include <sys\stat.h>
#define STUDENTS 2
typedef struct {
int sub1;
int sub2;
} Scorelist;
void ip_scorelist(FILE *fp, Scorelist *scorelist)
{
char buf[256];
int i;
for (i = 0; i < STUDENTS; i++) {
/* sub1のスコアを入力 */
printf("sub1(student #%d?)\n", i + 1);
fgets(buf, sizeof(buf), fp);
sscanf(buf, "%d", &scorelist[i].sub1);
/* sub2のスコアを入力 */
printf("sub2(student #%d?)\n", i + 1);
fgets(buf, sizeof(buf), fp);
sscanf(buf, "%d", &scorelist[i].sub2);
}
}
0393デフォルトの名無しさん
05/01/17 12:58:12{
int i;
for (i = 0; i < STUDENTS; i++) {
printf("sub1(student #%d): %d\n", i + 1, scorelist[i].sub1);
printf("sub2(student #%d): %d\n", i + 1, scorelist[i].sub2);
}
}
int main(void)
{
int fd;
Scorelist scorelist[STUDENTS];
fd = open("C:\\fooscore",
O_RDWR | O_CREAT | O_RAW, S_IWRITE | S_IREAD);
if (fd = -1)
fprintf(stderr, "The file couldn't be opened.\n");
else
printf("The file was opened.\n");
/* 構造体へ入力 */
ip_scorelist(stdin, &scorelist[0]);
/* 構造体の出力 */
op_scorelist(stdout, &scorelist[0]);
/* ファイルへの書き込み */
if (write(fd, &scorelist[0], sizeof(scorelist)) < 0)
fprintf(stderr, "couldn't be written.\n");
0394デフォルトの名無しさん
05/01/17 12:58:54fd = open("C:\\fooscore", O_RDONLY);
if (fd = -1)
fprintf(stderr, "The file couldn't be opened.\n");
else
printf("The file was opened.\n");
/* ファイルから読み込み */
if (read(fd, &scorelist, sizeof(scorelist)) < 0)
fprintf(stderr, "couldn't be read.\n");
/* 構造体の出力 */
op_scorelist(stdout, &scorelist[0]);
close(fd);
return 0;
}
0395デフォルトの名無しさん
05/01/17 13:00:580396デフォルトの名無しさん
05/01/17 13:03:42#define XXX 0x0036
とか、全部16進表記してあるんです。
これってなんかメリットあるんですか?
コンパイル時間が短くなるとか。自分的にはただ見づらいだけだと思うんですが。
0397デフォルトの名無しさん
05/01/17 13:22:11hex1桁=4bits.
fh=1111(2).
ちなみに俺様の場合、8進数の方が見やすい。
0398デフォルトの名無しさん
05/01/17 13:23:54書いたヤシに聞け。
おそらく、16進数の方がわかりやすいからだと思うが。
0399デフォルトの名無しさん
05/01/17 13:32:01何のエラーだよ。
>>396
bit毎に変化がある値が読みやすくなる。
コンピュータ相手の場合は2^n進表現にすると色々と都合が良い。
コンパイル時間はあまり関係ない。
ただし16進文字列だとn<<=4で桁の繰り上げができるので、
10進の掛け算(n *= 10)よりは効率が良い。
8進はn<<=3、2進はn<<=1。
0400デフォルトの名無しさん
05/01/17 13:33:28それはあなたの思考パターンに人間らしさが残っているから
0401デフォルトの名無しさん
05/01/17 13:37:16> ちなみに俺様の場合、8進数の方が見やすい。
PDP世代の生き残りですか?
0402390
05/01/17 13:47:31スタックサイズを大きくする、との助言を頂きました。
UNIXを使用して、メモリを限界まで上げて演算を行っているのですが、
(最初に記述すべきでした。すいません。)
それ以上に引き上げる方法はあるのでしょうか。
調べてはみたのですが情報が見つからなくて・・。
0403デフォルトの名無しさん
05/01/17 13:48:49if (write(fd, &scorelist[0], sizeof(scorelist)) < 0)
fprintf(stderr, "couldn't be written.\n");
ここで < 0 が成り立ってしまうんです。
0404デフォルトの名無しさん
05/01/17 13:55:12迷わず perror しろ。
if (... < 0) perror("write");
0405デフォルトの名無しさん
05/01/17 13:59:27スタックじゃなくて、ヒープから(mallocで)切り出すか、システムコールで仮想メモリを得るか、ファイルで仮想メモリをバリバリ実装するか、使わないブロックを圧縮する方法がある。コンパイラのオプションは何だ?
0406392
05/01/17 14:03:30perror("write")だと実行時にfile descripterがだめだと出てしまいます。
引数に"write"と書くだけではないのでしょうか?
0407デフォルトの名無しさん
05/01/17 14:09:10なんかわかりにくいから
単純なテストコード書いて試してみれば?
openしてwriteしてcloseするだけのやつ
0408デフォルトの名無しさん
05/01/17 14:09:24だったらfdを疑え。本当に開かれてるのか?
0409392
05/01/17 14:09:36つまりfd自体に問題があるってことなんですよね・・。
0410392
05/01/17 14:12:59すいません、アホでした。
しっかりファイルが開けないと出てました。
fd = open("C:\\fooscore",
O_RDWR | O_CREAT | O_RAW, S_IWRITE | S_IREAD);
↑どこが間違っているのでしょうか?
0411392
05/01/17 14:16:38if (fd = -1) → fd == -1
ここを直したら開けていると出ました。
ということはfdの何に問題があるのでしょうか?^^;
0412デフォルトの名無しさん
05/01/17 14:18:32代入じゃダメだろ
0413デフォルトの名無しさん
05/01/17 15:26:150414デフォルトの名無しさん
05/01/17 15:56:09http://www.kouno.jp/home/c_faq/c17.html#4
それにどうせ変数同士の比較の時には意味無い。
0415396
05/01/17 18:04:260416デフォルトの名無しさん
05/01/17 18:18:48p=(char *)malloc(1);
とかするんですけど、(void*)型で、しかも同じ8バイトなのに、
大体こうやるのはなぜですか?
ただ見やすいからなのでしょうか?
0417デフォルトの名無しさん
05/01/17 18:25:20voidは文法チェックのため、後から導入された型。char*をvoid*と同じ意味で使うのは時代遅れか、やっつけ仕事の時のみ。
0418デフォルトの名無しさん
05/01/17 18:27:31char*型というのは(大抵)1byteごとに1増えるの。
int*型というのは(大抵)4byteごとに1増えるの。
void*型はchar*型とは違う型なの。
0419デフォルトの名無しさん
05/01/17 18:30:34という事でしょうか?
アドレスとは単なる数値の羅列とはちがうのですか?
0420デフォルトの名無しさん
05/01/17 18:36:56試してみろ
cout << &(((char*)0)[1]) << endl << &(((short*)0)[1]) << endl << &(((long*)0)[1]) << endl;
0421デフォルトの名無しさん
05/01/17 18:39:18>しかも同じ8バイトなのに
何が 8 バイトだと言うのかね?
0422デフォルトの名無しさん
05/01/17 18:46:34>>420
試したとして、なにがわかるのでしょうか??
おそらくC++なのでしょうか? よくわかりません。
0423デフォルトの名無しさん
05/01/17 18:48:44C++で失礼。
printf("%p\n", ...);
で調べてみ
0424デフォルトの名無しさん
05/01/17 18:53:49>4バイトでしたか
何が 4 バイトよ?
0425デフォルトの名無しさん
05/01/17 18:56:23gccといっしょに使えるやつがあったら教えてください。
0426デフォルトの名無しさん
05/01/17 18:57:38>>423
すみません。訂正していただき嬉しいです。
printf("%p\n",&(((char*)0)[1]));
で、いいですか?
見る限りではアドレスの移動量が違うって感じですか。
いま試せる環境がないので、あとで試そうと思います。
0427デフォルトの名無しさん
05/01/17 18:58:5532bitでは4.
void*pv;と宣言するとpv[1]は文法的にダメ。
0428デフォルトの名無しさん
05/01/17 18:59:51>環境によるのでしたか
「何が」環境によるのよ?
0429デフォルトの名無しさん
05/01/17 19:01:11Windowsでは32ビット・・・
0430デフォルトの名無しさん
05/01/17 19:01:30そう。答えは1,2,4だろう。
0431デフォルトの名無しさん
05/01/17 19:08:58なぜ駄目なのでしょう?
やはり文法チェックのためだけに作られた型だからですか?
pv[1]は容量が確保できないって良いのでしょうか?
0432デフォルトの名無しさん
05/01/17 19:18:420433デフォルトの名無しさん
05/01/17 19:19:05void*はあらゆるポインタ型を抽象化した型で、あらゆるポインタをキャストせずに代入できる。
f(void*p);という関数はf(char*)と互換だが、逆は不可。
sizeof(pv[1])==sizeof(void)==???
0434デフォルトの名無しさん
05/01/17 19:22:430435デフォルトの名無しさん
05/01/17 19:40:15,0436デフォルトの名無しさん
05/01/17 20:24:15エラーと警告を混同してる香具師ハケーン
0437デフォルトの名無しさん
05/01/17 20:45:21どこに派遣するの?
0438デフォルトの名無しさん
05/01/17 20:51:130439デフォルトの名無しさん
05/01/17 20:57:54勝利宣言をする
http://bio-diversity.hp.infoseek.co.jp/kiben.html
0440デフォルトの名無しさん
05/01/17 21:02:400441デフォルトの名無しさん
05/01/17 21:11:140442デフォルトの名無しさん
05/01/17 21:12:360443デフォルトの名無しさん
05/01/17 21:15:21どこにエラーとか警告とかについて言及しているの?
0444デフォルトの名無しさん
05/01/17 21:24:04うん、してる
ああ、おまえもわかんねえのかw
0445デフォルトの名無しさん
05/01/17 21:27:21何も言わないで理解してもらおうなんて、考えが甘いんじゃない?
0446デフォルトの名無しさん
05/01/17 21:28:20その調子で、誰も理解してくれないからって、引き篭ってきたんとちゃうの?
0447デフォルトの名無しさん
05/01/17 21:32:14別に俺が言う必要ねえんだよ
ISO が言ってくれてるから
0448デフォルトの名無しさん
05/01/17 21:32:380449デフォルトの名無しさん
05/01/17 21:34:47って起せるものなのか?
0450デフォルトの名無しさん
05/01/17 21:36:47わりと簡単。
0451デフォルトの名無しさん
05/01/17 21:37:53君の頭、外科手術したげるね
0452デフォルトの名無しさん
05/01/17 21:40:030453デフォルトの名無しさん
05/01/17 21:42:41BSDライセンスでよければ、FreeBSDとかにでも入ってるでしょ
0454デフォルトの名無しさん
05/01/17 23:09:210455デフォルトの名無しさん
05/01/17 23:19:51>>454ガッ
}
0456デフォルトの名無しさん
05/01/17 23:23:21syntax error
ここはCスレですよ
0457デフォルトの名無しさん
05/01/17 23:31:40error: unexpected character { near finally
0458デフォルトの名無しさん
05/01/18 00:39:05一行がすごく長くてところどころに↑矢印みたいなやつが入ってるんですけど、
この矢印ごとに簡単に改行する方法はありますか?
それとも今はテキストでしか見てないのですが、
他のエディタであれば正常通り見られますかね?
0459デフォルトの名無しさん
05/01/18 00:40:47スレ違い
0460デフォルトの名無しさん
05/01/18 00:44:18具体的に開いたエディタを上げてみそ。
ちなみに俺の勘によれば、たぶん改行コードがLFだけになっているのでしょう。
であるので、見るだけならWebブラウザでも見れますし、
ちょっと気の利いたエディタならたいがいちゃんと編集もできるでしょう。
0461デフォルトの名無しさん
05/01/18 03:18:030462458
05/01/18 09:26:30スレ違い申し訳ないです。ありがとうございました。
0463デフォルトの名無しさん
05/01/18 10:47:19取得したいのですがいい方法はありませんでしょうか?
ソースは以下のようになっています。
// 200バイトを10列分確保 (buffer[10][200])
char** buffer;
buffer = (char**)malloc(sizeof(char*)*10);
for(int i=0;i<10;i++)
{
buffer[i] = (char*)malloc(200 * sizeof(char));
memset(buffer[i], 0, 200);
}
// freeや必要な処理はこのあとで
0464デフォルトの名無しさん
05/01/18 10:54:02ありません
0465デフォルトの名無しさん
05/01/18 11:01:35と書いてもカーソルが移動しないで"2A"と表示されてしまう
んですけどなんか間違ってます?
0466デフォルトの名無しさん
05/01/18 11:02:22小学生に掛け算教えてもらえ。
callocや#define talloc(n,type)
使えば簡単なのに
0467デフォルトの名無しさん
05/01/18 11:06:37質問するスレから間違ってます。
OSやコンパイラくらい書いてくれ。
0468デフォルトの名無しさん
05/01/18 11:14:57NT系か9x系か知らないが、コンソール端末で
C:\> adddrv ansi.sys
を実行した後、その端末でプログラムを実行してみろ。
0469465
05/01/18 11:17:07OS:WINDOWS 2000
コンパイラ:visual C++ 6.0
です。
これってC言語だけのエスケープシーケンスじゃないんですか?
0470デフォルトの名無しさん
05/01/18 11:19:52C言語とは関係ありません。
2000でソレをやりたかったら
CONFIG.NTにANSI.SYSを追加して16bitコードを吐くコンパイラを
使用しないとダメ。VC6.0ではprintfではできません。
0471465
05/01/18 11:21:05コマンドプロンプトでC:\>adddrv ansi.sysを実行するという意味でしょうか?
試してみましたが、その後プログラムを実行してもやはり同じでした・・。
0472デフォルトの名無しさん
05/01/18 11:23:410473465
05/01/18 11:26:34え・・そうなんですか。
なんで課題で出たんだろう・・・、学校もVC6.0なのに。
では現在の環境で、カーソルを移動させる手段が他にあるのでしょうか?
現在時刻を同じ場所で上書きして表示させるプログラムを書きたいのですが・・
0474デフォルトの名無しさん
05/01/18 11:28:49'\r'出力か、<conio.h>使えば〜?
0475465
05/01/18 11:43:41"表示するフォーマット\r"でできました、ありがとうございました。
0476デフォルトの名無しさん
05/01/18 11:48:54dosx使えば32bitの混合コードも受け付けるんじゃなかった?
0477どうしても判らないんです。助けてください・・・
05/01/18 11:51:31なりふり構ってられなくて、、><;
問題
与えられたグラフGに対しKruskalの算法をもちい最小木を求めるプログラムを作る。
条件1・採用した辺からできる部分グラフの連結成分を保持するデータ構造において、
linkを行う際にunion by rank だけ取り入れたものとunion by rank と path compression を
併用したものの両方を作成。
条件2・四則演算、比較、代入の総数を計測し、最小木とともにその総数を出力すること
0478デフォルトの名無しさん
05/01/18 11:53:08>>1を読んで下さい
0479デフォルトの名無しさん
05/01/18 12:02:40落ち着いてテキスト読め。グラフ理論の用語が分からないなら数学板に行け。グラフを表すデータ構造が分からないなら聞くがよい。
0480デフォルトの名無しさん
05/01/18 12:12:040481デフォルトの名無しさん
05/01/18 12:17:08「ダブルポインタ」とかいう一般的でない言葉を使うのはやめれ。
で、「200」とか「10」とかいう数字をキミのプログラムは知っている
ではないか。それをどこかに保存すればいいんですよ。
0482デフォルトの名無しさん
05/01/18 12:40:55ついでに言うと、それは正確には多重配列とは言わない。
0483デフォルトの名無しさん
05/01/18 13:55:030484デフォルトの名無しさん
05/01/18 14:08:27いやまて、最初のぬるぽは
次のぬるぽを指してはいないぞ。
0485デフォルトの名無しさん
05/01/18 14:15:21| |
| | ガガッ
( ・∀・) .人
と ) < >_∧∩
Y /ノ .人`Д´)/ ←>>483
/ ) < >_∧∩
_/し' //. V`Д´)/ ←>>484
(_フ彡 /
0486463
05/01/18 15:37:41配列全体のサイズではなく要素数を取得したかったです。
質問が間違っていました。
>>481
一般的いでない言葉は使わないようにしておきます。
200、10(要素数)を静的に保存するのはヘボくないですか?
スマートに任意のタイミングで計測できないかが知りたいです。
>>482
はい分かっています。
0487デフォルトの名無しさん
05/01/18 16:04:50×ダブルポインタ
○ポポインタ
0488デフォルトの名無しさん
05/01/18 16:09:03どういうわけか、malloc() した領域のサイズを取る手段って標準では
ないんですよね。ライブラリ内でサイズを保持してない訳ないのに。
なので、ヘボくても仕方ないので自分で記録するしかないです。
typedef struct {
int num;
char elem[];
} foo_t;
typedef struct {
int num;
foo_t *foo[];
} buffer_t;
buffer_t *buffer;
buffer = malloc(sizeof(buffer_t) + sizeof(foo_t *) * N1);
buffer->num = N1;
for (int i = 0; i < N1; i++) {
buffer->foo[i] = malloc(sizeof(foo_t) + sizeof(char) * N2);
buffer->foo[i]->num = N2;
memset(&buffer->foo[i]->elem, 0, sizeof(char) * N2);
}
みたいなー。
0489デフォルトの名無しさん
05/01/18 17:02:20吐きそう。ゲー。その上、こんな低次元の処理で構造体使うか? calloc,_msize…、やめた、どうせ人の忠告聞かないんだから。
0490デフォルトの名無しさん
05/01/18 17:08:59VCしか知らない奴は黙ってろ
0491デフォルトの名無しさん
05/01/18 17:12:09_msizeのポートもできないくせに生
0492デフォルトの名無しさん
05/01/18 17:14:11こいつはxmallocもVCも知らないぼけ
0493デフォルトの名無しさん
05/01/18 17:19:37なめんなよ
0494デフォルトの名無しさん
05/01/18 17:31:33おまいは簡単な変数の加算もできないのか
0495デフォルトの名無しさん
05/01/18 17:44:52それが標準Cクオリティ
http://pc5.2ch.net/test/read.cgi/tech/1105454700/l50
0496デフォルトの名無しさん
05/01/18 18:55:120497デフォルトの名無しさん
05/01/18 19:40:00ヒマ人に合わせてらんねーの
おぢさんたちわ
0498デフォルトの名無しさん
05/01/18 20:01:30やめとけ。
0499デフォルトの名無しさん
05/01/18 20:08:19する必要はない。
0500デフォルトの名無しさん
05/01/18 20:17:31mallocで領域確保する時の要素数は変数の値が多いから無問題
0501デフォルトの名無しさん
05/01/18 20:24:520502デフォルトの名無しさん
05/01/18 20:33:130503デフォルトの名無しさん
05/01/18 20:34:430504デフォルトの名無しさん
05/01/18 20:41:090505デフォルトの名無しさん
05/01/18 22:03:15row_t *buf1;
char (*buf2)[200];
buf1 = (row_t *)malloc(10*sizeof(row_t));
buf2 = (char(*)[200])malloc(10*200*sizeof(char));
0506デフォルトの名無しさん
05/01/18 22:08:01「これは左辺値ですか?」
「違います」
って感じのやりとりがあったと思うんです。あそこらのキャッシュ持ってないでしょうか?
持ってたらぜひにでも、あっぷお願いします。
0508デフォルトの名無しさん
05/01/18 22:58:10ご親切にありがとうございます!
無事ダウンロードさせて頂きました。
本当にありがとう!
0509デフォルトの名無しさん
05/01/19 03:06:17a[30]="\0"
とやっても改行が入らないのですがどうすればいいんでしょうか?
0510デフォルトの名無しさん
05/01/19 03:09:370511デフォルトの名無しさん
05/01/19 03:10:06a[30] = '\n'; a[31] = '\0';
つーか、それエラーだろ。
0512デフォルトの名無しさん
05/01/19 03:11:18\0 は NUL
0513デフォルトの名無しさん
05/01/19 04:21:430514デフォルトの名無しさん
05/01/19 04:41:370x00 NUL 0x10 DLE 0x20 SP
0x01 SOH 0x11 DC1
0x02 STX 0x12 DC2
0x03 ETX 0x13 DC3
0x04 EOT 0x14 DC4
0x05 ENQ 0x15 NAK
0x06 ACK 0x16 SYN
0x07 BEL 0x17 ETB
0x08 BS 0x18 CAN
0x09 HT 0x19 EM
0x0a LF 0x1a SUB
0x0b VT 0x1b ESC
0x0c FF 0x1c FS
0x0d CR 0x1d GS
0x0e SO 0x1e RS
0x0f SI 0x1f US 0x7f DEL
これぐらいは基本だ。おぼえとけ ぼけ
0515デフォルトの名無しさん
05/01/19 04:42:180516デフォルトの名無しさん
05/01/19 04:47:490517デフォルトの名無しさん
05/01/19 04:54:09自分のぼけをごまかせるとでも思っているようだ ;-)
0518デフォルトの名無しさん
05/01/19 04:59:560519デフォルトの名無しさん
05/01/19 05:13:480520デフォルトの名無しさん
05/01/19 06:50:590521デフォルトの名無しさん
05/01/19 09:17:58どんなの知ってます?
0522デフォルトの名無しさん
05/01/19 09:22:54何の?
0523デフォルトの名無しさん
05/01/19 09:23:33Cの場合はvoid*はあらゆるポインタ型にキャスト無しで代入できるのですが.
0524デフォルトの名無しさん
05/01/19 09:25:24誤爆。
>521
何の?
0525デフォルトの名無しさん
05/01/19 09:33:14例えば公開ヘッダーの関数宣言を意図的に削ったり、関数定義にstaticを付ければ非公開だろ
0526デフォルトの名無しさん
05/01/19 09:47:53宣言を削っても非公開にはできないわけだが。
0527デフォルトの名無しさん
05/01/19 11:08:55けどキャストはした方がいくない?
0528デフォルトの名無しさん
05/01/19 11:11:52_lock とか _unlock はマイクロソフトの非公開関数だよ ;-)
0529デフォルトの名無しさん
05/01/19 11:23:09入門書にて勉強中、やはりポインタで唸ってますが、
基本的な部分で疑問が生まれ、どこ読んでも書いてないもので…。
変数の宣言と代入なのですが、
int a=5;
int b=6;
または、
int a;
int b;
a=5;
b=5;
という記述はOKで、
int a;
a=5;
int b;
b=6;
という記述はなぜNGなんでしょうか?
諸先輩方、教えてくださいませ。お願いいたします。
0530デフォルトの名無しさん
05/01/19 11:26:05間違っているのは君の入門書だ。
0531デフォルトの名無しさん
05/01/19 11:26:42int a=1;
は初期化を伴う宣言だ。代入文ではない。なお、C++では可
0532デフォルトの名無しさん
05/01/19 11:28:00こいつの頭はC++
0533デフォルトの名無しさん
05/01/19 11:28:52Cでは
ローカル変数はスコープ(関数)の入り口の最初にしか
書けないことになっているから
C++だとどちらのやり方も書ける。
0534デフォルトの名無しさん
05/01/19 11:29:310535デフォルトの名無しさん
05/01/19 11:35:36NGのやり方で記述すると、コンパイルエラーが起きるのです。
●コード
1 #include<stdio.h>
2 int main(void)
3 {
4int a;
5a=3;
6int b;
7b=5;
8
9printf("%dと%d\n",a,b);
10
11return 0;
12 }
●コンパイルエラー
6:parse error before 'int'
7:'b' undeclared (first use in this function)
7:(each undeclared identifier is reported only once
7:for each function it appears in.)
こんな感じです…。
0536529
05/01/19 11:39:13初期化と代入を理解してませんでした。
ありがとうございます。
>>533
「最初に書け!」
というルールなのですね。
ありがとうございます。
今のところ「こういうルールだから」
というものには丸暗記で対応していこうと思っています。
みなさま、ありがとうございます。
0537デフォルトの名無しさん
05/01/19 11:41:00Cでは
ローカル変数はスコープ(関数(main))の入り口の最初にしか
書けないことになっているから
C++だとどちらのやり方も書ける。
0538デフォルトの名無しさん
05/01/19 11:44:10すまん
0539デフォルトの名無しさん
05/01/19 12:25:44は初期化を伴う宣言だ。代入文ではない。なお、C++では可
激しく嘘 Cでも可 ;-)
0540デフォルトの名無しさん
05/01/19 12:39:38>int a=1;
>は初期化を伴う宣言だ。代入文ではない。なお、C++では可
>激しく嘘 Cでも可 ;-)
どこに嘘が?
Cで不可とはどこにも書いてないと思うのだが。
0541デフォルトの名無しさん
05/01/19 12:43:10Cでは不可ととれる
0542デフォルトの名無しさん
05/01/19 12:55:260543デフォルトの名無しさん
05/01/19 12:59:21なにこの人
0544527
05/01/19 13:01:240545デフォルトの名無しさん
05/01/19 13:05:31本当ですよ。
malloc() の返り値とかキャストするのは大マヌケ。
0546デフォルトの名無しさん
05/01/19 13:08:10というか最近のコンパイラ(MSCだけど)はキャストしないと
えらーにならなかったっけ。
0547デフォルトの名無しさん
05/01/19 13:09:500548デフォルトの名無しさん
05/01/19 13:11:48malloc()はvoid*を返すからvoid*で受け取ればキャストしないのは
あたりまえ。
でも、例えばそのメモリを構造体のタグを使って参照するんだったら
その構造体のポインタに直接ぶち込めば言い訳で、
そのときにキャストするのはあたりまえ。
0549デフォルトの名無しさん
05/01/19 13:19:290550デフォルトの名無しさん
05/01/19 13:19:58CASTを使えばvoid*うんぬん関係なく
あらゆるポインタ型に代入できる。
極端な話、
char a = 'C';
float *p = (float*)a;
なんかも可能なわけだ。
0551デフォルトの名無しさん
05/01/19 13:24:050552デフォルトの名無しさん
05/01/19 13:24:36input_data()で、表示はdisplay_data()と処理を関数で分けて行ないなさい」
という問題があるのですが、「一件分の入力処理はinput_data()で、表示はすべてdisplay_data()で
処理しなさい」ということですか??
0553デフォルトの名無しさん
05/01/19 13:27:38void * の値を void * 以外のポインタにキャストなしで代入しようと
すると、
C では問題なし
C++ ではエラー
だよもん。
0554デフォルトの名無しさん
05/01/19 13:28:57display_data()という関数に表示処理のコードを書け!!
と その問題作成者の先生はおっしゃっているのじゃ。
0555デフォルトの名無しさん
05/01/19 13:31:560556デフォルトの名無しさん
05/01/19 13:36:47そもそも2chに信頼を求めるのはあかんでぇ〜
参考程度にしときやぁ〜
0557551
05/01/19 14:39:180558デフォルトの名無しさん
05/01/19 18:27:05(a[x][y]=1(1なら赤)みたいな感じで…)
なんか方法ないですか?;;
0559デフォルトの名無しさん
05/01/19 18:59:58可視化とはプログラムが見えないとな!?
冗談はさておき、環境を書かないことにはどうにもならない
WinかUn*xかエディタ上なのかHTMLに吐き出すのか
数字の中で1を赤くするのはあんまり意義が感じられないけど・・・
とりあえず定数化するべきなんじゃ
0560デフォルトの名無しさん
05/01/19 19:02:29http://www.google.co.jp/search?hl=ja&q=C%2B%2B+source+code+format+color+download&btnG=Google+%E6%A4%9C%E7%B4%A2
0561デフォルトの名無しさん
05/01/19 19:07:19何がしたいのか、さっぱり理解出来ない... orz
0562デフォルトの名無しさん
05/01/19 19:08:590563デフォルトの名無しさん
05/01/19 19:12:13レスどもです
え〜と、プログラム走らせてるのはLinux上です
セルオートマトンのプログラムなんですが
#define M 50
#define N 50
main(){
・・・
for(i=0;i<M;i++){
for(j=0;<j<N;j++){
printf("a[i][[j]=%d\n",a[i][j])
今はこんな感じで結果を出しているのですが
画像でだしたいなぁと思ってるのです;;
すごく見難いので
0564デフォルトの名無しさん
05/01/19 19:14:15スレ違い
0565デフォルトの名無しさん
05/01/19 19:42:23doxygen使え
http://kamakura.cool.ne.jp/oppama/misc/doxygen.html
0566デフォルトの名無しさん
05/01/19 20:01:19ソースを色分けするんじゃなかったのかよorz
0567デフォルトの名無しさん
05/01/19 20:01:26メンバが数値型変数のみで構成される構造体を初期化する場合、
memset で char 配列を初期化する方法を流用して、
memset( &abc, '\0', sizeof(abc));
こんな感じにするのは、どうなんでしょうか?
領域が 0 埋めになるわけだから、一応初期化にはなるのですが。
0568デフォルトの名無しさん
05/01/19 20:11:39かなり一般的。
確か厳密には仕様違反のはずだけど、移植性はかなり高い
0569デフォルトの名無しさん
05/01/19 20:19:160で埋めていいのならそれで構わないが、
memset(&abc, 0, sizeof(abc));
にしとけ。
0570デフォルトの名無しさん
05/01/19 20:22:23エラーが出るという「普通の」コンパイラを教えてください
0571デフォルトの名無しさん
05/01/19 20:23:22宣言とともに初期化するなら
struct A a = { 0 };
もあり。
0572デフォルトの名無しさん
05/01/19 20:56:41ポインタ型以外はオールゼロビット=0だしC++
みたいに仮想関数とかもないPODだから別に
仕様的にも問題ないと思ってたけど
0573567
05/01/19 20:59:42ありがとうございます。
char と long が混在している構造体を今まで特に気にせず
memset の初期化してましたが、気になったので。
>571 の方法は恥ずかしながら知りませんでした。
memset とか memcpy って、柔軟に使っちゃっていいんですかね?
0574デフォルトの名無しさん
05/01/19 21:01:05変換したいのですが、どのような方法がよいでしょうか?
0576デフォルトの名無しさん
05/01/19 21:05:320577デフォルトの名無しさん
05/01/19 21:06:24なんで「との事」で終わっちゃうの?
0578デフォルトの名無しさん
05/01/19 21:07:34p = &abc;
for(i=0;i<sizeof(abc);i++){
*(p + i) = 0;
}
0579デフォルトの名無しさん
05/01/19 22:00:23そういうときに>>567では a[3] へアクセスすることとなり、違反になる可能性もあるかもしれない。
0580デフォルトの名無しさん
05/01/19 22:10:27詰物にアクセスするのは違反なの?
0581デフォルトの名無しさん
05/01/19 22:37:13大丈夫じゃなかったっけ?
0582デフォルトの名無しさん
05/01/19 22:39:230583デフォルトの名無しさん
05/01/19 22:39:460584デフォルトの名無しさん
05/01/19 22:41:58w = a++;
って言ったら3じゃないんでしょうか?教えてください
0585デフォルトの名無しさん
05/01/19 22:42:48bは3かもしれないな
0586デフォルトの名無しさん
05/01/19 22:46:54a は 3 だな(w
0587デフォルトの名無しさん
05/01/19 22:47:050588デフォルトの名無しさん
05/01/19 22:48:53やればわかる。拘置所++
0589デフォルトの名無しさん
05/01/19 22:51:08プ
0590デフォルトの名無しさん
05/01/19 22:51:360591デフォルトの名無しさん
05/01/19 22:54:360592デフォルトの名無しさん
05/01/19 22:56:540593デフォルトの名無しさん
05/01/19 22:58:250594デフォルトの名無しさん
05/01/19 22:59:53世間知らず
0595デフォルトの名無しさん
05/01/19 23:02:42あとW = a>b;だとなぜ0になるんでしょうか?
0596デフォルトの名無しさん
05/01/19 23:03:26入門書に書いてる
0597ほ、ほーっ、ホアアーッ!! ホアーッ!!
05/01/19 23:04:05後置き ++ は、インクリメント前の値を返す。
w = ++a; の場合は w は 3 になる。
0598デフォルトの名無しさん
05/01/19 23:04:30お前が知的障害者だと言うことがわかった。
0599ほ、ほーっ、ホアアーッ!! ホアーッ!!
05/01/19 23:05:37a > b は、a が b より大きければ 1 を、そうでなければ 0 を返す。
w にはその結果が代入される。
0600デフォルトの名無しさん
05/01/19 23:09:220601デフォルトの名無しさん
05/01/19 23:09:35優先順位は=より高いのに?
0602デフォルトの名無しさん
05/01/19 23:15:37変数に対して+1加算は行われるが、式の値は加算される前の値。
mov eax [ebp+i] ; 式の値を作成
inc [EBP+i] ; 変数を加算
というだけ。
0603デフォルトの名無しさん
05/01/19 23:17:12やだ。
0604デフォルトの名無しさん
05/01/19 23:23:31なるほど、そーゆー世代ですか
0605デフォルトの名無しさん
05/01/19 23:38:261行増えるだけで、迷わなくて済む
0606デフォルトの名無しさん
05/01/19 23:54:27後で評価されるという言い方はおかしいね。
先に評価され、そのままの値が返る。
0607デフォルトの名無しさん
05/01/20 00:01:27アクセスはだめです。一個超えたところのポインタ値を生成するのは合法です。
char a[8];
char *p = a;
p += 8; /* 末尾より一個超えてるけど合法 */
*p; /* 参照はダメ */
0608デフォルトの名無しさん
05/01/20 00:01:30日本語やや不自由さんですか?
0609デフォルトの名無しさん
05/01/20 00:03:57read 要求も write 要求もしてないのに
どんなアクセスが生じるんだ?
0610デフォルトの名無しさん
05/01/20 00:07:530611デフォルトの名無しさん
05/01/20 00:09:38Cの文法において*pは、pが指しているところをcharとして評価するってことですから、
最適化などによって実際に読み出さないとか、そういうのには関係なく違法ですよ。
0612デフォルトの名無しさん
05/01/20 00:15:22while(*p++)なんてやってもいいようにそうなっているんだよな
0613デフォルトの名無しさん
05/01/20 00:19:00[first, last)
にすると便利なことが多いしな
0614デフォルトの名無しさん
05/01/20 00:19:38ん?何がおかしい?
0615デフォルトの名無しさん
05/01/20 00:29:52歴史的にはそういうコードがたくさんあるから合法にした、ということのようです。
これが合法になったためにコンパイラ作ってる人が
「じゃあ配列の末尾が生成できるアドレスMAXだったらどうすんじゃいわれ!!」
と憤ってるところを見たことがありますw
0616デフォルトの名無しさん
05/01/20 00:36:31本当?
どっかに書いてるなら教えて。
0617デフォルトの名無しさん
05/01/20 00:46:18その辺データにアクセスして危険って事あるの?
環境依存で運が悪ければ、なのかな…
0618デフォルトの名無しさん
05/01/20 00:47:38そんなところまで配列はつくれないようにする!
簡単だね。
0619デフォルトの名無しさん
05/01/20 00:48:19だから、その「評価」とは具体的に何だと聞いている
アドレスバスに出力するときの R/nW はどっちだ
0620デフォルトの名無しさん
05/01/20 00:56:58アドレスバスというのはこのスレでは扱いません
0621デフォルトの名無しさん
05/01/20 01:02:05こいつぼけ。知らないからってごまかそうとしても無駄ですよ ;-)
0622デフォルトの名無しさん
05/01/20 01:02:31危険な場合はあるよ。
もっとも、ちゃんとした環境で運がよければプログラム落ちたりするけどね。
いいかげんな環境だったり、運が悪かったりすれば何も起こらない。
0623デフォルトの名無しさん
05/01/20 01:10:15p=(int *)malloc(sizeof(int)*3);
*(p+0) = 10
*(P+1) = 11
printf(%d %d\n",*(p+0),*(p+0));
みたいにしたとき、freeはfree(p)だけでいいの?
0624デフォルトの名無しさん
05/01/20 01:12:330625デフォルトの名無しさん
05/01/20 01:12:380626デフォルトの名無しさん
05/01/20 01:15:13int *p;
p=(int *)malloc(sizeof(int)*3);
*(p+0) = 10
*(p+1) = 11
printf(%d %d\n",*(p+0),*(p+1));
>>624
ありがとう
0627デフォルトの名無しさん
05/01/20 01:31:28>>624じゃないが、; は抜けてるし、
*(p+1) じゃなくて p[1] って書かんか?
0628デフォルトの名無しさん
05/01/20 01:51:53実装上の仕組みと、文法上の問題は切り離して考えろ。
実際にメモリ上の値から読み込んできたり、書き込んだりすることはC言語とは関係ない領域。
*p; というコードがあった場合、コンパイラが完全に無視して、アクセスは起こらない。これが実装上。
だけど文法的には、 *p というのは評価され、値「*p」をとる。だから、この時点でpが領域外を指す事は
許されない。これが文法上。
0629デフォルトの名無しさん
05/01/20 02:02:18コトはそう簡単じゃありません。配列の配置を決めるのはリンカの仕事である場合もあるわけでして。
0630デフォルトの名無しさん
05/01/20 02:31:11Win32 console apprication のコーディングで、
以下のような初歩のループプログラムを記述したんですが、
while( ( c = getchar() ) != EOF ){
// 任意の処理
}
WindowsのEOFコマンドである ctrl+Z を入力しても
エンドオブファイルと認識されず、ループを抜けられません。
もちろん、UNIXの ctrl+D でもダメでした。^Zとは表示されるんですが・・・。
何か根本的に知識がないような予感がしますが、
どうにかしてEOFを返せる方法がありましたら、どうかご教示ください。
0631デフォルトの名無しさん
05/01/20 02:35:45Ctrl+Zでエンター押してるんだろうね
cはint型になってるかい?
0632630
05/01/20 02:51:21一行目のご解答を見て思うところがあり、
^Z単独でエンターを押してみたところ、スルッと抜けました。
getchar関数はエンターを押すまでEOFと見なされないんだ・・・
ctrl+Zを押した直後に抜けるものかと勘違いしていました。これは恥ずかしい。
おかげさまで、問題は解決しました。どうもありがとうございました。
0633デフォルトの名無しさん
05/01/20 03:00:03んじゃあint*型のアドレスを格納できるint**型ってのは存在するのか?
0634デフォルトの名無しさん
05/01/20 03:08:420635デフォルトの名無しさん
05/01/20 03:36:20ポインタポインタどこまでも
0636デフォルトの名無しさん
05/01/20 04:21:340637デフォルトの名無しさん
05/01/20 04:25:52お前はいつまでうだうだ言ってるんだよ
0638デフォルトの名無しさん
05/01/20 04:26:470639デフォルトの名無しさん
05/01/20 04:31:060640デフォルトの名無しさん
05/01/20 04:32:370641デフォルトの名無しさん
05/01/20 04:38:350642デフォルトの名無しさん
05/01/20 04:42:470643デフォルトの名無しさん
05/01/20 04:46:18慰安婦問題を追及したいのか
NHKを攻撃したいのか
政府に反抗したいだけなのかよくわからん
ポイントは絞った方がいい
0644デフォルトの名無しさん
05/01/20 04:58:16中途半端な人がぐだぐだ言い出す -> 詳しい人登場
↑ここの部分いらないです。
0645デフォルトの名無しさん
05/01/20 05:36:57仕様です
0646デフォルトの名無しさん
05/01/20 07:27:110647デフォルトの名無しさん
05/01/20 07:47:44int a;
};
struct B{
struct A *AAA;
int b;
};
int WinMain(~~~){
struct B *BBB = ( struct B * )malloc( sizeof( struct B ));
B->AAA = ( struct A * )malloc( sizeof( struct A ));
free( B );
return 0;
}
のようなプログラムがあった場合、AAAの確保した領域というのは解放されますか?
0648デフォルトの名無しさん
05/01/20 07:49:13free( B ) → free( BBB )
0649デフォルトの名無しさん
05/01/20 08:59:07mallocが2回でfreeが1回
つまりどこかが解放されてない
0650デフォルトの名無しさん
05/01/20 10:08:59される訳がない。
malloc()やcalloc()などで確保した領域は、
必ず明示的に解放しなければ、プロセス終了まで生き残る。
0651デフォルトの名無しさん
05/01/20 10:30:32ID見ろぼけ
0652デフォルトの名無しさん
05/01/20 10:48:41C言語のみで以下のことは可能でしょうか?
(Windows 環境下です。すなわち DOS 窓から起動します)
1.起動されたプログラムのフルパスを取得する
2.あるフォルダ内の全ファイル名を取得する
3.あるファイルのコピーを作成する
1.については、argv[0] にフルパスが渡される処理系なら、それを使えばいいような気がしますが、
もしファイル名のみの処理系の場合、どのようにしたらいいのですか?
そもそも、argv[0] を使うのはマズイですか?
2.ですが、これは system 関数で DOS の dir コマンドを実行し、それをファイルに取り、
そこから引っぱり出す、というくらいしか思いつきません。
3.は、Cにはファイル削除とリネームの関数はあるのに、なぜファイルコピーが
無いのだろう、と疑問でした。fopen と while と fget などで自力コピーするしか
方法はないのかな?
長文すみません。よろしくお願いします。
0653デフォルトの名無しさん
05/01/20 11:05:530654デフォルトの名無しさん
05/01/20 11:26:31ファイルそのものが存在しない環境もあるので、
C のみで完全に行う事は不可能。
0655デフォルトの名無しさん
05/01/20 11:37:050656デフォルトの名無しさん
05/01/20 11:55:46C のみって書いてあるだろ。
Windows API や Windows のコマンド等は、
当然のごとく C じゃないぞ。
0657デフォルトの名無しさん
05/01/20 13:08:29{
while(1)
{
printf("input number%d: ",in_cnt);
scanf("%d",&num[in_cnt]);
if(in_cnt == 1)
{
if(num[in_cnt] != num[in_cnt-1])
{
break;
}
}
else if(in_cnt == 2)
{
if(num[in_cnt] != num[in_cnt-1] && num[in_cnt] !=num[in_cnt-2])
{
break;
}
}
else if(in_cnt == 0)
{
break;
}
printf("\nSorry. This is already existent number\n\n");
}
}
return 0;
}
このプログラムをもう少しコンパクとに記述するにはどうすればよいのでしょうか??
0658デフォルトの名無しさん
05/01/20 13:59:310659デフォルトの名無しさん
05/01/20 14:04:050660デフォルトの名無しさん
05/01/20 14:04:52while (1) {
printf("input number%d: ",in_cnt);
scanf("%d",&num[in_cnt]);
if(in_cnt == 1) {
if(num[in_cnt] != num[in_cnt-1]) {
break;
}
} else if (in_cnt == 2) {
if(num[in_cnt] != num[in_cnt-1] && num[in_cnt] !=num[in_cnt-2]) {
break;
}
} else if (in_cnt == 0) {
break;
}
printf("\nわるいけどもうこの数字使っちゃってるから。\n");
}
}
return 0;
}
0661デフォルトの名無しさん
05/01/20 14:08:50while (1) {
printf("input number%d: ",in_cnt);
scanf("%d",&num[in_cnt]);
if(in_cnt == 1) {
if(num[in_cnt] != num[in_cnt-1])
break;
} else if (in_cnt == 2) {
if(num[in_cnt] != num[in_cnt-1] && num[in_cnt] !=num[in_cnt-2])
break;
} else if (in_cnt == 0)
break;
printf("\n既存数字不可使用\n");
}
}
return 0;
}
0662デフォルトの名無しさん
05/01/20 14:10:18in_cnt→i.
num→an.
0663デフォルトの名無しさん
05/01/20 14:12:37変なこと教えるなよ
0664デフォルトの名無しさん
05/01/20 14:13:500665デフォルトの名無しさん
05/01/20 14:14:15「Cなら俺に訊け」
に戻した方がいいよ。
あれの方が善かった。
0666デフォルトの名無しさん
05/01/20 14:18:470667デフォルトの名無しさん
05/01/20 14:23:41for(in_cnt = 0 ; in_cnt <3 ; in_cnt++) {
while(1) {
printf("input number%d: ",in_cnt);
scanf("%d",&num[in_cnt]);
switch (in_cnt) {
case 2:
if (num[in_cnt] == num[in_cnt - 2]) {
continue;
}
case 1:
if (num[in_cnt] == num[in_cnt - 1]) {
continue;
}
case 0:
goto OutOfWhile;
}
printf("\nSorry. This is already existent number\n\n");
}
OutOfWhile:
}
0668デフォルトの名無しさん
05/01/20 14:28:241.
C:\>debug \winnt\system32\winver.exe
-d80,9f
2CE3:0080 00 0D 5C 77 69 6E 6E 74-5C 73 79 73 74 65 6D 33 ..\winnt\system3
2CE3:0090 32 5C 77 69 6E 76 65 72-2E 65 78 65 0D 20 6F 66 2\winver.exe. of
-q
2.と3.は
DOSのシステムコール使えばよい
(system()じゃなくてINT21の方ね)
0669デフォルトの名無しさん
05/01/20 14:32:10for( in_cnt = 0; in_cnt < 3; )
{
printf("input number%d: ",in_cnt);
scanf("%d",&num[in_cnt]);
if( in_cnt == 2 && num[in_cnt] != num[in_cnt-1] && num[in_cnt] != num[in_cnt-2])
in_cnt++;
else if( in_cnt == 1 && num[in_cnt] != num[in_cnt-1])
in_cnt++;
else if( in_cnt == 0)
in_cnt++;
else
printf("\nSorry. This is already existent number\n\n");
}
return 0;
0670デフォルトの名無しさん
05/01/20 15:01:34C のみじゃないじゃん。
0671デフォルトの名無しさん
05/01/20 15:03:04#define b(j,k) p[k]==p[j]||(puts("err"),goto
int*p=num;a
e:a b(0,1) e);
f:a b(0,2) f);b(1,2) f);
return 0;
0672デフォルトの名無しさん
05/01/20 15:03:140673652
05/01/20 15:05:06ありがとうございます。
1はつまりバイナリでオープンして、パスがあるところを読み出せ、ということですね。
2と3はやはり INT21 ですか、うーむ。共用体 AX とか AL に設定してコール、っていう
あれですね。
ファイルコピーは自力でもいいとして、フォルダ内ファイル一覧取得については、
C++ の勉強を兼ねてクラスとして作ってみようと思います(>652 に書いたやり方で)
0674デフォルトの名無しさん
05/01/20 15:05:31++を忘れてたorz
0675657
05/01/20 15:13:59感謝します。
0676デフォルトの名無しさん
05/01/20 15:14:00超大人気だな!!!
0677デフォルトの名無しさん
05/01/20 19:24:18printf("input number%d: ",in_cnt);
scanf("%d",&num[in_cnt]);
for(i = 0 :i <=int_cnt;i++){
if(num[in_cnt] == num[i]){
printf("\nSorry. This is already existent number\n\n");
continue;
}
}
int_cnt++;
}
あかん?
0678デフォルトの名無しさん
05/01/20 19:32:400679デフォルトの名無しさん
05/01/20 19:56:580680デフォルトの名無しさん
05/01/20 20:17:10俺べつに実装上の仕組みの話なんかしてないぜ
アドレスバスという用語に気を取られてしどろもどろな発言すると恥の上塗りだぞ
読めとも書けとも言ってないのに何をどう「コンパイラが完全に無視」するって言うんだよ
ちょっとヒントやるからよく考えて答えろな
0;
0681デフォルトの名無しさん
05/01/20 20:32:580682デフォルトの名無しさん
05/01/20 20:41:01{と}の数合ってますか?
0683デフォルトの名無しさん
05/01/20 21:05:18え?
違うの?
0684デフォルトの名無しさん
05/01/20 21:08:00おまえバカか?無視って言葉の意味わからないの? *p; ってのがまったく相手にされないってことだよ?
そのヒントとやらも言語上は評価されるんだよ?わかる?
0685デフォルトの名無しさん
05/01/20 21:12:370686デフォルトの名無しさん
05/01/20 21:13:41>>680によると 評価する==読み書きする って言ってるわけですよね。
結局どっちが正しいんですか?
0687デフォルトの名無しさん
05/01/20 21:16:42マニュアル見て自分で判断
0688デフォルトの名無しさん
05/01/20 21:20:49りんご
0689デフォルトの名無しさん
05/01/20 21:23:16わからないんで教えてください
0690デフォルトの名無しさん
05/01/20 21:25:430691デフォルトの名無しさん
05/01/20 21:26:20NULL ってコンパイラの中では *(void 0)で定義されてるんだっけ?
0692デフォルトの名無しさん
05/01/20 21:27:17http://www1.cts.ne.jp/~clab/hsample/File/File01/File01.html
0693628
05/01/20 21:31:34そういうこと言い出した時点で実装の話になっちゃうんだっての。
0694デフォルトの名無しさん
05/01/20 21:33:32>>680
0696デフォルトの名無しさん
05/01/20 21:37:32文法の評価と式の評価の混同。最適化されると無視されるかも知れない。完全にコンパイラとプリプロセサの状態に依存する。
「遊んでないで仕事しろ!」
0698デフォルトの名無しさん
05/01/20 21:40:230699デフォルトの名無しさん
05/01/20 21:45:31なんかよくわからないです。コンパイラとプリプロセッサってことは実装に依存するってことですか?
0700デフォルトの名無しさん
05/01/20 21:49:08何が?
0701デフォルトの名無しさん
05/01/20 21:50:510702デフォルトの名無しさん
05/01/20 21:53:45よくわからないんでやっぱり取り消してください。わからないなりに考えると
>>607は、アクセスが起こるかどうかはやってみないとわからないけど、評価はされるってことですか?
0703デフォルトの名無しさん
05/01/20 21:55:32何が評価?
0704デフォルトの名無しさん
05/01/20 21:56:340705デフォルトの名無しさん
05/01/20 22:00:19その部分の値か?それとも式か?
0706デフォルトの名無しさん
05/01/20 22:03:43ひょっとして勘違いしてますかね?
0707デフォルトの名無しさん
05/01/20 22:07:21その式に副作用はあるのか
0708デフォルトの名無しさん
05/01/20 22:10:190709デフォルトの名無しさん
05/01/20 22:16:27ということは、1は式としてみなされてるってことですよね。
ということは、 1; ってのは、 a=1; とかと同じように式とされるってことですか?
0710デフォルトの名無しさん
05/01/20 22:19:59いまどきC言語なんかできても自慢になりません。
プログラマ?(ププ…って時代だしw
俺はSE。おまいらから見れば超上級職だろうなw
0711デフォルトの名無しさん
05/01/20 22:42:56式ってとこはあってるが、動詞の有無は違う
0712デフォルトの名無しさん
05/01/20 22:44:16あなたは、その実態が「単価が高くて使いにくいプログラマ」だったりするSEなんですね?(Y/y)
0713デフォルトの名無しさん
05/01/20 22:46:00× 使いにくい
○ 機能しない
0714デフォルトの名無しさん
05/01/20 22:47:48お前が超上級職であるSEだという証拠を見せろ。
0715デフォルトの名無しさん
05/01/20 22:48:360716デフォルトの名無しさん
05/01/20 22:50:440717デフォルトの名無しさん
05/01/20 22:52:430718デフォルトの名無しさん
05/01/20 22:53:01void* p;
} NullPointerException;
C99でもこんな構造体ないの?
0719デフォルトの名無しさん
05/01/20 22:58:15ないガッ?
0720デフォルトの名無しさん
05/01/20 22:59:16while (1,0); ならOK。
0721デフォルトの名無しさん
05/01/20 23:03:03雑用係はマ板へ。
0722デフォルトの名無しさん
05/01/20 23:10:460723デフォルトの名無しさん
05/01/20 23:19:070724デフォルトの名無しさん
05/01/20 23:21:48勝ち組のつもりでこの世界に入るアフォは痛杉
しょせんベンチャー
鉄くず泥棒どもは開き直ってなんぼだよ
0725デフォルトの名無しさん
05/01/20 23:23:07>>607はまず実行結果をここに貼り付けてみろ
オマエの画面はどうなってる?
0726デフォルトの名無しさん
05/01/20 23:25:42実力のある奴はみんな米国だよ
0727デフォルトの名無しさん
05/01/20 23:29:030728デフォルトの名無しさん
05/01/20 23:30:240729デフォルトの名無しさん
05/01/20 23:38:31ママのおっぱいでもしゃぶってろ
0730デフォルトの名無しさん
05/01/20 23:40:21ママのおっぱいしゃぶりながら言わないでくれ
0731デフォルトの名無しさん
05/01/20 23:41:430732デフォルトの名無しさん
05/01/20 23:50:22if (strlen(cycleno) > sizeof(cycleno)) {
printf("strlen(cycleno) %d\n",strlen(cycleno));
printf("sizeof(cycleno) %d\n",sizeof(cycleno));
printf("cycleno %s\n",cycleno);
}
/********* 出力 *********/
strlen(cycleno) 16
sizeof(cycleno) 10
cycleno 1234567890慎
質問です。
上記の様に、strlen()で末尾にNULL文字の無い文字列を調べた時
訳分からん値が返ってくる件についてなんすが
これってNULL文字が検出されるまで
メモリ内の無関係な隣りの領域まで読み込んでるって解釈でよいのですか
また、%s出力に関しても同義ですか
あと、上記の解釈で正しいとすれば、仮にNULL文字がたまたまずっと
検出されなかったとすると、永久に読み込みが走るのですか
0733デフォルトの名無しさん
05/01/20 23:51:41その前にアクセス違反で落ちる
0734デフォルトの名無しさん
05/01/20 23:54:23会社のHP-UXと自宅のRedHatは落ちなかったとですよ
0735デフォルトの名無しさん
05/01/20 23:55:18...
0736デフォルトの名無しさん
05/01/20 23:57:37そんなに疑問なら、
cycleno[0]
cycleno[1]
cycleno[2]
...
cycleno[9]
cycleno[10]
...
cycleno[14]
cycleno[15]
cycleno[16]
を出力してみればいいだろうに。
頭悪いなあ。
0737デフォルトの名無しさん
05/01/21 00:03:43どうなった?
0738732
05/01/21 00:08:11printf(" %c, ",cycleno[i]);
}
/******* 実行結果 **********/
1, 2, 3, 4, 5, 6, 7, 8, 9, 0, , B, F, , , ,
>>736-737
やってみた。
ら、なおさらわかんなくなりました。
間にちらほらNULL文字っぽいの入っとる。
0739デフォルトの名無しさん
05/01/21 00:12:08%2x にしてみれ
0740デフォルトの名無しさん
05/01/21 00:21:02どうなった?
0741732
05/01/21 00:22:50printf("%2x, ",cycleno[i]);
}
31, 32, 33, 34, 35, 36, 37, 38, 39, 30, 1, 42, 46, ffffff83, 4, 8, 0,
>>739-740
NULL文字かと思ったら別の制御文字だったです。
やっぱ隣りの無関係領域の'\0'出るまで読み込みでビンゴだったようです。
どうもありがとうです。
つまり
終端がNULL文字でない文字列にstrlenや%sをかけるのは不正アクセスを
引き起こすので普通やっちゃいけない、
・・・って結論でよいですかね ´∀`
0742デフォルトの名無しさん
05/01/21 00:25:180743デフォルトの名無しさん
05/01/21 00:25:34OK
0744デフォルトの名無しさん
05/01/21 00:26:39時間かかってんだよ
0745デフォルトの名無しさん
05/01/21 00:29:210746デフォルトの名無しさん
05/01/21 00:36:52ぼけ %c でやって見えるわけねーだろ! ぼけ
%02 が常識 > ぼけ
さっさと> printf("%02x,",cycleno[i] & 0xff); しろ
0747デフォルトの名無しさん
05/01/21 00:37:36> 終端がNULL文字でない文字列にstrlenや%sをかけるのは不正アクセスを
> 引き起こすので普通やっちゃいけない、
strlenして、何を得たいわけ?
0748デフォルトの名無しさん
05/01/21 00:45:59今まで気づかなかったおまえが一番ボケ
0749デフォルトの名無しさん
05/01/21 00:52:27http://pc5.2ch.net/test/read.cgi/tech/1090227743/550
http://pc5.2ch.net/test/read.cgi/tech/1090227743/558
よろしくです。
0750デフォルトの名無しさん
05/01/21 02:01:05{
日下部先生
}
0751デフォルトの名無しさん
05/01/21 08:07:430752デフォルトの名無しさん
05/01/21 08:40:21何とか表示する方法はないでしょうか?
0753デフォルトの名無しさん
05/01/21 08:54:32sscanf(buf,"%%%02x",&c)
0754デフォルトの名無しさん
05/01/21 08:56:450755デフォルトの名無しさん
05/01/21 08:57:550756デフォルトの名無しさん
05/01/21 09:13:51int main(){
char string[] = "日本語?";
int i = 0;
while (string[i]!='\0') printf("%%%02X", 0xff & string[i++]);
return 0;
}
0757デフォルトの名無しさん
05/01/21 15:21:31どうやるんですか?教えてください
0758デフォルトの名無しさん
05/01/21 15:23:530759デフォルトの名無しさん
05/01/21 15:42:580760デフォルトの名無しさん
05/01/21 15:47:32環境依存。標準関数ではない。
0761759
05/01/21 15:53:52そうですか・・・・。
例えばWindowsならどんな関数がありますか?
0762デフォルトの名無しさん
05/01/21 15:55:16Windowsは知らん。ググれば解かると思うが。
0763759
05/01/21 15:55:44分かりました。
0764デフォルトの名無しさん
05/01/21 15:58:50タイピングもどきを作ってるんですけど、ファイルから
ランダムに一行ぬいて、キーボードでうちこんで、strcmpで正誤判定
ってのを作ってて、ファイルを上から読んでいく事はできたんですけど
rand()って0〜指定した数字までをランダムに指定するってものですよね?
これをどう用いればファイルからの抜き出しができるんですか?
初心者なものでお願いします
0765デフォルトの名無しさん
05/01/21 16:02:38一般的に、stat()は割りと環境を問わずあると思う。
また、読めることを以って存在すると仮定していいのなら、fopen()してみればいい。
0766デフォルトの名無しさん
05/01/21 16:05:18一旦、メモリに読み込むのが常套手段かと。
0768デフォルトの名無しさん
05/01/21 16:08:00char** str;
str=(char**)malloc(〜…
行番号=(int)((double)行数*((double)rand()/RAND_MAX));
printf("%s",str[行番号]);//なんなりと
0769デフォルトの名無しさん
05/01/21 16:17:280770デフォルトの名無しさん
05/01/21 16:25:22の括弧の中へvoidをなぜ書かなきゃならんとでつか?
0771デフォルトの名無しさん
05/01/21 16:28:25main(void)は引数がないことを意味し、
main()だと引数は不定だということを意味する。
ちなみにC++だと共に前者の意味になる。
0772デフォルトの名無しさん
05/01/21 16:29:120773デフォルトの名無しさん
05/01/21 16:32:49サンクスコ。
voidを明記しないと不貞の浮気者になるんでつね。
0774デフォルトの名無しさん
05/01/21 16:57:29プロトタイプ宣言で
void function(void)
と宣言していても、下のほうでvoidを記述しなくてもいいんでつか?
void funtion()
{
printf("ほにゃらら");
}
こんな感じで。
0775デフォルトの名無しさん
05/01/21 17:17:28OK。2つは合成される。
ところでmain関数の戻り値はintが正しい。
0776デフォルトの名無しさん
05/01/21 17:32:38そうでなくてはいけないわけでもないけれど、その方がいろんな面で有益。
0777デフォルトの名無しさん
05/01/21 17:39:18後はmainメソッドに書いてるように
method1.setMessage("ええんか");のように
括弧の中に具体的な値を好きなようにかけるんですよね?
0778デフォルトの名無しさん
05/01/21 17:39:48ありがとさん。
プロトタイプ宣言でvoidを書いておけば
下のほうで書かなくてもいいんでつね。
で775のmainの戻り値をintでってのはなぜでつか?
0779デフォルトの名無しさん
05/01/21 17:52:460780デフォルトの名無しさん
05/01/21 18:51:190781デフォルトの名無しさん
05/01/21 20:00:11それはシェル使わんし、Mainを終わることは電源切るときだけだから。
0782デフォルトの名無しさん
05/01/21 20:02:38馬鹿はすっこんでろ
0783デフォルトの名無しさん
05/01/21 20:09:20>>781
馬鹿はすっこんでろ
0784デフォルトの名無しさん
05/01/21 20:13:110785デフォルトの名無しさん
05/01/21 20:14:37リンクぐらい張っとけ。
0786デフォルトの名無しさん
05/01/21 20:16:250787デフォルトの名無しさん
05/01/21 20:23:530788デフォルトの名無しさん
05/01/21 20:44:372つ以上のソースファイルからなるプログラムで、異なるソースファイルで同じ関数名や変数名を使っても
大丈夫な方法ってありますか?
どうしてもエラーになってしまうのですが・・・。
0789デフォルトの名無しさん
05/01/21 20:45:110790デフォルトの名無しさん
05/01/21 20:45:38>>780
それはシェル使わんし、Mainを終わることは電源切るときだけだから。
0791デフォルトの名無しさん
05/01/21 20:46:570792デフォルトの名無しさん
05/01/21 20:47:47全部大文字にするとか?
0793デフォルトの名無しさん
05/01/21 20:48:110794デフォルトの名無しさん
05/01/21 20:48:42static
0795デフォルトの名無しさん
05/01/21 20:49:08#include<stdio.h>
int main()
{
printf("Content-type:text/html\n\n");
printf("<HTML>\n");
printf("<HEAD>\n");
printf("<TITLE>cgi01</TITLE>\n");
printf("</HEAD>\n");
printf("<BODY>\n");
printf("TEST\n");
printf("</BODY>\n");
printf("</HTML>\n");
return 0;
}
このソースをVisualC++でコンパイルし、拡張子を.cgiに変えてUP、パーミッションを変更しました。
そしてアクセスすると何故かCGIWrap Error: Script Execution Failedと表示され実行できません。
なぜですか?
0796デフォルトの名無しさん
05/01/21 20:49:55オブジェクトのシンボルテーブル弄ればいけるんじゃない?
0797デフォルトの名無しさん
05/01/21 20:50:58exeに変えとけ。
0798デフォルトの名無しさん
05/01/21 20:51:15関数名衝突させるなよ
0799デフォルトの名無しさん
05/01/21 20:53:19リンカーのため、つい、mainはデバッグ用、Mainは商用と分けてる
0800788
05/01/21 21:01:46有難う御座いました、解決しました!
本当に助かりました。
0802デフォルトの名無しさん
05/01/21 23:00:22名前と入力番号の降順を自作関数で処理するプログラムを作ったのですが、
名前の降順がうまくいきません。
void sort_data(struct person *pdata,int i_cnt)
{
int cnt1;
int cnt2;
int temp;
char temp2[STRING_SIZE];
for(cnt1 = 0 ; cnt1 < i_cnt ; cnt1++)
{
for(cnt2 = cnt1+1 ; cnt2 < i_cnt+1 ; cnt2++)
{
if((pdata+cnt1)->point < (pdata+cnt2)->point)
{
temp =(pdata+cnt1)->point;
temp2[0] =(pdata+cnt1)->name[STRING_SIZE];
(pdata+cnt1)->point = (pdata+cnt2)->point;
(pdata+cnt1)->name[0] = (pdata+cnt2)->name[STRING_SIZE];
(pdata+cnt2)->point = temp;
(pdata+cnt2)->name[0] = temp2[STRING_SIZE];
}
}
}
}
どこを修正すればうまく処理されるのでしょうか??
0803デフォルトの名無しさん
05/01/21 23:38:06{
struct person temp;
temp = pdata[cnt1];
pdata[cnt1] = pdata[cnt2];
pdata[cnt2] = temp;
}
ソートキーは番号ですか名前ですか。
文字列の比較には strcmp() を使います。
文字列のコピーには strcpy() を使います。
0804デフォルトの名無しさん
05/01/22 00:34:44そんなCがだぁいすきv(^-^=)
0805710
05/01/22 00:42:23まあ、確かに俺は単価の高いSEだな。
毎日9時-17時で退社。月給手取りで約60万。
「単価が安くて使えるプログラマ」なおまいらは毎日深夜まで残業…。
でも手取りで30も貰えてないだろ(プ…かわいそうにwww
0806デフォルトの名無しさん
05/01/22 00:50:38大学の講義ページでも堂々と使ってるの見たよ。
0807デフォルトの名無しさん
05/01/22 00:51:080808デフォルトの名無しさん
05/01/22 00:56:50よくない、ほんとよくない、講義ですね。
0809デフォルトの名無しさん
05/01/22 00:57:34よくない本と、よくない講義ですね。
0810デフォルトの名無しさん
05/01/22 03:57:550811デフォルトの名無しさん
05/01/22 04:42:33ニュートン法でいいじゃん
0812デフォルトの名無しさん
05/01/22 04:51:25適当な事言ってんじゃねーよバカ。
0814デフォルトの名無しさん
05/01/22 05:32:320815デフォルトの名無しさん
05/01/22 08:32:300816デフォルトの名無しさん
05/01/22 11:29:23耳従ってない青二才の典型
1つ気になることがあると
そこに気を取られるばかりで話に入れない
結果として自分と大差ない人からだけ聞いた
偏った知識のまま大成することなく歳を取る
筋の悪い「素材」だ
0818デフォルトの名無しさん
05/01/22 11:51:48君の言っている事は全く理にかなっていないよ。
単なる経験則でしょ。
無意味な自己満足のレス付けて楽しい??
>>806はただ参考書や講義で使われているのを良くみると書いているだけで、
そう書くことの利点については全く言及していない。
0820デフォルトの名無しさん
05/01/22 12:25:28よくみたらJavaの講義だった...っていうオチでは?
0821デフォルトの名無しさん
05/01/22 12:26:58アンカーもロクに読めてないようだな
0822デフォルトの名無しさん
05/01/22 12:29:59やす,,,。ってそれ自慢できる収入かぁ?
0823デフォルトの名無しさん
05/01/22 12:37:500824デフォルトの名無しさん
05/01/22 12:40:250825デフォルトの名無しさん
05/01/22 12:41:51まず、根本的に、君は文を読んでいないし、議論にもなっていない。
# どうせ釣りだのなんだのと言いたいのだろうが、こっちは釣られても全然恥だとは
# 思っていないし、必死だといわれても恥とは思わない。
0826デフォルトの名無しさん
05/01/22 12:42:19田舎で60なら自慢できるだろwww
0827デフォルトの名無しさん
05/01/22 12:43:140828デフォルトの名無しさん
05/01/22 12:46:020829デフォルトの名無しさん
05/01/22 12:49:53では聞くが void main() という断片から、大学や講義の何がわかるんだ?
君ならちゃんと「理にかなった」説明ができるなら拝聴しようか。
0830デフォルトの名無しさん
05/01/22 12:59:59決まっているだろ。
void main()という書き方をしたという事実だよ。
サンプルでそう書いたのだから、推奨したということだろう。
ところで、>>809は私ではない。
0831デフォルトの名無しさん
05/01/22 13:00:12int main だったりして
0832デフォルトの名無しさん
05/01/22 13:01:18その講義が「だめだめ」だということだな。
hello, worldを出力して改行するサンプルで、バックスラッシュじゃなくて、円記号で
ホワイトボードに書くような講義もだめだめ
0833デフォルトの名無しさん
05/01/22 13:06:550834デフォルトの名無しさん
05/01/22 13:07:26うまく逃げたな
こっちも深追いする理由は特にない
>>832
説得力ゼロだな
観測事実と結論が何ら関連づけられていないばかりか
結論に使っている独自の用語を定義していない
0835デフォルトの名無しさん
05/01/22 13:08:14あはは あほだー
0836デフォルトの名無しさん
05/01/22 13:09:300837デフォルトの名無しさん
05/01/22 13:11:34だよねえ。ふつう (まっとうな大学なら)
なのに使って、さらにその表記にnをつづけたもの(ようするに改行)を「えんえぬ」とか
口頭で読んでる講師って、どうだ? (実在する)
0838デフォルトの名無しさん
05/01/22 13:12:56若くて美人できょにゅうならゆるす!
0839デフォルトの名無しさん
05/01/22 13:13:590840デフォルトの名無しさん
05/01/22 13:14:25虚乳でむさいおやじです。どうする?
0841デフォルトの名無しさん
05/01/22 13:14:370842デフォルトの名無しさん
05/01/22 13:16:230843デフォルトの名無しさん
05/01/22 13:17:19でも、以前話題にでてた「えんえぬ」先生は、
専門学校で若くて美人だったはず
0844デフォルトの名無しさん
05/01/22 13:19:07たしか日下部が教えた専門学校の学生が書いてたんじゃなかったっけ
で、CじゃなくてJavaの講師だったはず > えんえぬと読むけど美人
0845デフォルトの名無しさん
05/01/22 13:20:36大学の講師とかではいないだそうが(みたことない!)、
現場ではけっこうみかける(ときどき)。
少なくともここ九州北部のH系の会社では
1人は (っていうか、この1人で10人分ぐらい美人なのだが!) いる
0846デフォルトの名無しさん
05/01/22 13:21:11VBだったら最高だったのにな(えんえぬはないけど)
0847デフォルトの名無しさん
05/01/22 13:21:59そんなだめ本はむしろ少ない (って、まあ全体の1/3以下だっていうだけのことで、1/100以下だって
いうわけではない)
まともな本使えばいいだけでは?
0848デフォルトの名無しさん
05/01/22 13:22:44たとえばどんな本だ?
0849デフォルトの名無しさん
05/01/22 13:23:210850デフォルトの名無しさん
05/01/22 13:30:32著者を、少なくとも1人は知ってるな ;-)
0851デフォルトの名無しさん
05/01/22 13:31:04誰だよ?
0852デフォルトの名無しさん
05/01/22 13:31:340853デフォルトの名無しさん
05/01/22 13:31:41VBなど今どき専門学校でおしえるかよ ぼけ
あったらよほどだめな学校だ。
0854デフォルトの名無しさん
05/01/22 13:34:24voidさん
0855デフォルトの名無しさん
05/01/22 13:34:32>口頭で読んでる講師って、どうだ? (実在する)
実際に会って確認するしかねえだろ
そんなこともわからん奴らしいぼけ発言だな
0856デフォルトの名無しさん
05/01/22 13:35:290857デフォルトの名無しさん
05/01/22 13:36:02意味不明。なにを確認するんだか
0858デフォルトの名無しさん
05/01/22 13:36:44顔に決まっているだろ。
0859デフォルトの名無しさん
05/01/22 13:38:33それは 837 に聞いてくれ
0860デフォルトの名無しさん
05/01/22 13:46:020861デフォルトの名無しさん
05/01/22 13:47:220862デフォルトの名無しさん
05/01/22 13:51:010863デフォルトの名無しさん
05/01/22 14:29:170864デフォルトの名無しさん
05/01/22 14:55:110865デフォルトの名無しさん
05/01/22 15:40:41技術系で若くて美人がいたが糞に蠅がたかる状態だった。
おぼっちゃんがゲットしました。
0866デフォルトの名無しさん
05/01/22 15:42:16糞=若くて美人
蠅=そこらの男
ってことか?
0867デフォルトの名無しさん
05/01/22 15:46:31はよなくなれ
0868デフォルトの名無しさん
05/01/22 16:19:24プロトコルは元来人間同士の儀礼
マシン間の通信規約を指さなくとも何ら問題はない
0869デフォルトの名無しさん
05/01/22 16:43:28#include<stdio.h>
int main(void)
{
int num;
printf("input : ");
scanf("\n%d",&num);
printf("\n%d",num);
return 0; /*正常終了 */
}
このプログラムでは実数値を入力しても、整数値が出力されます。
実数値を出力するにはどこを修正すればいいのでしょうか。
0870デフォルトの名無しさん
05/01/22 16:53:29printfとscanfをヘルプで見ろ
0871デフォルトの名無しさん
05/01/22 17:01:44>>871をヘルプで見ろ
#include<stdio.h>
int main(void)
{
double num;
printf("input : ");
scanf("%lf", &num);
printf("%d\n", num);
return 0;
}
0872デフォルトの名無しさん
05/01/22 17:04:10質問です。
void main()
{
char* aaa;
scanf("%d",&aaa);
if (aaa == "abc")
printf("OK\n");
else
printf("NO\n");
return;
}
このプログラムで入力文字が"abc"だったらOKと表示させたいんですが、
abcと入力してもONを表示されてしまいます。
どうしたらいいでしょうか?
それともif文は文字列判定はできないのでしょうか?
どうかよろしくお願いいたします
0873デフォルトの名無しさん
05/01/22 17:09:19そのコードはポインタを比較しています。
ポインタが指している文字列を比較しているのではありません。
0874デフォルトの名無しさん
05/01/22 17:09:27#include <stdio.h>
#include <string.h>
int main(void) {
char buf[256];
if (scanf("%256s", buf) != 1) return 1;
if (strcmp(buf, "abc") == 0) puts("OK");
else puts("NO");
return 0;
}
0875デフォルトの名無しさん
05/01/22 17:10:21void mainじゃなくてint mainな.
if文は文字列判定できないっていうより,Cの==演算子は文字列には適用できない.
JavaとかC++ならクラスを使ってできるんだけどね.
だからstring.hにあるstrcmpってやつを使う.
ぐぐったら出てくるから調べてみ.
0876デフォルトの名無しさん
05/01/22 17:16:23>>874
>>875
ご教授ありがとうございます。
ちょっとした謎が解けました。
ありがとうございました。
0877デフォルトの名無しさん
05/01/22 17:22:33それより今きづいたが,
scanf("%d",&aaa); はまずい気がする.
scanf("%s",aaa);にしとけ.
上のままだと,たぶんヌル文字が入らないと思うけど.
教えてエロい人!
0878デフォルトの名無しさん
05/01/22 17:33:14len = strlen(fname);
if((fname[len - 1] == ".") && (fname[len] == "c")) //ここでwarning
fnameの最後に".c"がついてるかどうかを知りたいのですが
if((fname[len - 1] == ".") && (fname[len] == "c"))のところで
ポインタに関してのwarningがでます。何が間違っているのでしょうか。
0879デフォルトの名無しさん
05/01/22 17:34:150880デフォルトの名無しさん
05/01/22 17:37:49ダブル区ぉーとじゃなくてシングル区ぉーとを使え.
fname[len]はまずいと思うが.
0881デフォルトの名無しさん
05/01/22 17:38:56いわゆる負の添字参照バグ。もはやa[-1]のような式は使うべきでない。環境(32or64-bit)が変わる度にバグとなる。また、len==0の場合は?
0882デフォルトの名無しさん
05/01/22 17:40:47ctype.h のよくある実装も否定されます?
0883デフォルトの名無しさん
05/01/22 17:43:27環境ごとに最適化すればいい
0884878
05/01/22 17:44:13レスありがとうございます。
>>fname[len]はまずいと思うが
lenは\0を入れない文字列の長さだから
fname[len-2]=='.'、fname[len-1]=='c'ということですよね??(;;
0885デフォルトの名無しさん
05/01/22 17:45:480886デフォルトの名無しさん
05/01/22 17:49:120889デフォルトの名無しさん
05/01/22 18:29:25本当にそのソースで「ON」と表示されたのか?
0890デフォルトの名無しさん
05/01/22 18:35:45どんな天才が作ってもONとは表示されないだろ
0891デフォルトの名無しさん
05/01/22 18:40:06天才を侮辱するな
-Delse=puts("ON");
#define else puts("ON");
0892デフォルトの名無しさん
05/01/22 18:41:41void main なので、原理的にはありうる。
0893デフォルトの名無しさん
05/01/22 18:41:460894デフォルトの名無しさん
05/01/22 18:42:19int bar[] = { 0, 1 } ;
: //略
printf( "%3d\n" ,foo[ bar[ 0 ] ] ) ;
自分たまにこんなの使ったりしてますが、これって実際どうなんですか?
環境依存とか、そういういけないやり方ですか?
教えてください。
0895デフォルトの名無しさん
05/01/22 18:42:530896デフォルトの名無しさん
05/01/22 18:46:230897デフォルトの名無しさん
05/01/22 18:47:55何の問題もない。もっとひどくしてbar[0][foo]と書く事もできる。
0898デフォルトの名無しさん
05/01/22 18:48:59配列[int型]に問題ない
0899デフォルトの名無しさん
05/01/22 19:02:17>>898
レスありがとうございます。
bar[0][foo]とした場合の解釈の仕方としてはどういう感じなんでしょうか?
0900デフォルトの名無しさん
05/01/22 19:06:56//まず、処理をするかしないかユーザーに問う。
//しないなら終了、するなら処理へ。一つの処理が終わったら、再びユーザに問う
もちろん、処理の内容はとりあえず何でも良いです。
コードを短くするためには、ループだろうと考え、こんな感じで作ってみましたが、うまくいきません。
#include<stdio.h>
int main(void)
{
char handan;
int a;
for(;;)
{
printf("実行はyを 、終了するならそれ以外のキー\n");
handan=getchar();
if(handan!='y') break;
printf("数字を入力してください\n");
scanf("%d",&a);
printf("入力された数字は%dです\n",a);
}
return 0;}
1回目のy入力→処理、までは問題ないのですが、
なぜか2回目に入ると、「実行はyを、〜〜」を表示して、終了してしまうのです…。
どこがおかしいか、先輩諸氏、ご教唆をお願いします。
また、我が儘を申し上げれば、今回のような設問時には、みなさんはどのような手法を取るか、
教えていただければ幸いです。
0901900
05/01/22 19:08:34「改行が多い!」が出たんで、減らしたた見にくくなっちゃいました。
インデントもなくなってるし…。
0902デフォルトの名無しさん
05/01/22 19:16:190903デフォルトの名無しさん
05/01/22 19:19:07scanfはstdinを汚す。
直後にrewindを呼べ。
0904デフォルトの名無しさん
05/01/22 19:21:59>>900
>今回のような設問時には、みなさんはどのような手法を取るか、
>教えていただければ幸いです。
scanf を使わない。
0905デフォルトの名無しさん
05/01/22 19:22:26fgetsあたりで一行読み込んだ後、その行を処理するのが定石。
0906デフォルトの名無しさん
05/01/22 19:23:200907デフォルトの名無しさん
05/01/22 19:28:05gets(tmp);
a=atoi(tmp);
rewind(stdin);
で書いてるけど。
0908デフォルトの名無しさん
05/01/22 19:28:39一番のアホはお前
0909デフォルトの名無しさん
05/01/22 19:31:50昔、いろいろ実験した挙句、
何となく rewind を入れてみたら
なぜか上手くいった。
俺はその時の感動が
今でも忘れられないんだよ、
とかいう人?
0910デフォルトの名無しさん
05/01/22 19:32:410911デフォルトの名無しさん
05/01/22 19:32:45そうだ、お前がアホだ。
0912デフォルトの名無しさん
05/01/22 19:34:550913900
05/01/22 19:35:17rewind、fgets・・・、まだ知らない単語でした。
勉強を進めて参ります。
現状では、
>902さん
のやり方でうまくいきました。ありがとうございます。
0914デフォルトの名無しさん
05/01/22 19:36:15たかが scanf 程度のものでさえ仕様をちゃんと理解して使えない
適性の最も低い層から今日も漏れ聞こえる慟哭かw
そんなのとは比較にもならない複雑怪奇なものを次から次へと理解せにゃならんのがPGだというのに
0915デフォルトの名無しさん
05/01/22 19:36:48正当な解法だと考えるセンスは
いかがなものかと。
0916デフォルトの名無しさん
05/01/22 19:38:05int main()
{
char* a="a%" ;
printf(a) ;
return 0 ;
}
とすると % が出力されないのに、printf("%s",a) ;とすると%が出力されるの
はなぜでつか?
0917デフォルトの名無しさん
05/01/22 19:38:50確かにセンスねえな
知ってればいいってものでもない
0918デフォルトの名無しさん
05/01/22 19:39:23ないわけだが。逆に言うと、覚えていなくても別に大して恥ずかしいことでもない。
基礎を知っているなら、別に大きな問題ではないね。
0919デフォルトの名無しさん
05/01/22 19:40:310920デフォルトの名無しさん
05/01/22 19:42:50ファイルリダイレクトして渡したりしたらえらいことになりそうな気がする。
0921デフォルトの名無しさん
05/01/22 19:44:25と、学生が吠えておりますが
0922デフォルトの名無しさん
05/01/22 19:44:59元メインフレーム屋ですが何か?
0923デフォルトの名無しさん
05/01/22 19:45:000924デフォルトの名無しさん
05/01/22 19:45:22%おいちいからprintfにたべらりちゃふの。でも%%は%になるの。putsはたべないけれどね
0925デフォルトの名無しさん
05/01/22 19:46:12実行してみたの?していないの?していないなら実行してから質問ね。
0926デフォルトの名無しさん
05/01/22 19:46:24Cは向いていない気が。
0927デフォルトの名無しさん
05/01/22 19:48:15>>768
rand==RAND_MAXの場合困らない?
>>806
うちの大学の教授もvoid mainの人が居た
int mainなのは、C言語の仕様決めた人が、main関数は下の2つのどっちか。って決めたから、どちらにせよintだと聞いた
「int main(void)」
「int main(int c,char *argv[])」
argvの後に引数付けてもOKだけど、これは環境依存でOKだっただけなんだろうな。
>>901
2ch書く時に、先頭のインデントは半角スペースだと消える。
全角に直して(置換)書き込みすれば良いよ
(どうせエディタで書いたのをコピペだろうから、エディタで置換させれば楽)
0928デフォルトの名無しさん
05/01/22 19:48:25ああ、自分は適性が高いとはこれっぽっちも感じないね
コード書けば金もらえる
それだけだ
0929デフォルトの名無しさん
05/01/22 19:48:31釣りならもう一回ネタを練り直して来い
釣りじゃないならprintfが何をする関数なのか調べて来い
0930デフォルトの名無しさん
05/01/22 19:48:550931デフォルトの名無しさん
05/01/22 19:49:05>920の指摘などの問題。
・scanf()
使いこなせていないとバッファオーバランの危険。
・gets()
常にバッファオーバランの危険。使用禁止。
>>916
printf()の第一パラメータは常にフォーマット文字列として解釈されるので、
%を出力するには%%と書く必要がある。
例えば、char *a = "%s" だったりすると大変危険。
0932デフォルトの名無しさん
05/01/22 19:50:21>元メインフレーム屋ですが何か?
いや、なるほど。納得した。
さすがは・・・(ry
0933デフォルトの名無しさん
05/01/22 19:50:43そんなんだから複雑怪奇だと思っちゃうんだよ。
rewindに限らず「よくわかんないけど動けばいいや」って感じなんでしょ。
0934デフォルトの名無しさん
05/01/22 19:53:28すいません、それなら数字や文字列を入力する時はどの関数を使えば良いんでしょうか。
fgetsだと改行も入ってしまうんですが…
0935デフォルトの名無しさん
05/01/22 19:53:52Cというか、最近はソフトとはそもそも何かというところで悩んでる
それこそ学生時代にしっかり押さえたはずのことが今になってアバランシェ
・・・大パニックがかえって楽しいけどね
0936デフォルトの名無しさん
05/01/22 19:55:24→atoiなど
0937デフォルトの名無しさん
05/01/22 19:55:24私は美しい・・・・・・・・・
0938デフォルトの名無しさん
05/01/22 20:00:140939デフォルトの名無しさん
05/01/22 20:00:23つまり、fgetsでchar変数に値を与えてからsscanfやatoiで直せば良いんですね。
教えていただいて有難うございます。m(_ _)m
fgetsならstdinは汚れませんよね?
0940デフォルトの名無しさん
05/01/22 20:02:01短くすればバグも減る。
0941デフォルトの名無しさん
05/01/22 20:03:02しゅくふくのつえを持っているのにベホイミを唱えるようなもの
0942デフォルトの名無しさん
05/01/22 20:05:10stdinに変なデータを書き込まれたりということはない。
0943デフォルトの名無しさん
05/01/22 20:06:04>Cというか、最近はソフトとはそもそも何かというところで悩んでる
>それこそ学生時代にしっかり押さえたはずのことが今になってアバランシェ
もしかして学校ではバッチ処理の事しか教えてもらえなかったのでは?
まともな学校ならば、SICP のようにしっかりした教科書を使うから、
そんなことにはならないと思う。
0944デフォルトの名無しさん
05/01/22 20:08:270945デフォルトの名無しさん
05/01/22 20:09:03話したければどうぞ
0946デフォルトの名無しさん
05/01/22 20:09:51ホレリスカードね
0950デフォルトの名無しさん
05/01/22 20:14:43str[0,2]='d';
みたいに、カンマで区切ってもエラーにならないんですけど、なぜでしょうか?
(2行目は、0,2です)
何か使い所があるから、OKって事になってるかと思ったんですが…
0951デフォルトの名無しさん
05/01/22 20:17:01そこでD言語ですよ
0952デフォルトの名無しさん
05/01/22 20:23:110, 2が式として評価されるから。
カンマで区切った式は左から順番に評価され、
最後に評価された値が帰ることになる。
0953デフォルトの名無しさん
05/01/22 20:23:12「式 + 式」が「式」なのと同じように、
「式, 式」は「式」だから。
0954デフォルトの名無しさん
05/01/22 20:23:40(0,1,7)==7.
(0,2,4,8)==8.
0955デフォルトの名無しさん
05/01/22 20:24:250956デフォルトの名無しさん
05/01/22 20:25:00for(n = 0, m = 0; m < max; m++)
のように使うときのカンマと同じ。
0957デフォルトの名無しさん
05/01/22 20:25:36釣られても気にするな。君は思った意見を言っただけだ。
正しいものは正しいと胸を張って生きよう。
0958デフォルトの名無しさん
05/01/22 20:49:05改行は、消すか無視すれば問題ないだろ。
なんで、その程度で悩む?
0959デフォルトの名無しさん
05/01/22 21:18:59行列Aに対して
Axベクトル = λxベクトル
を満たす
ベクトルx(固有ベクトル)と
値λ (固有値)と
組を求める。
のプログラムを作ってください。
0960デフォルトの名無しさん
05/01/22 21:25:39____
. \ _, ,_ /∩ ソニック!ソニック!
( `Д´)彡 ∽
( ⊂彡 ∽
| |
し ⌒J
0961デフォルトの名無しさん
05/01/22 21:27:250962デフォルトの名無しさん
05/01/22 21:30:22数学板に戻りなさい
0963デフォルトの名無しさん
05/01/22 21:33:19ここから、ヤコビ法のコードを拾え。
http://oku.edu.mie-u.ac.jp/~okumura/algo/archive/
そして今度からは、
わざわざ他人に作ってもらおうとする前には必ず、
ここにそのコードがない事を確認してから依頼しれ。
0964デフォルトの名無しさん
05/01/22 22:40:26a[b]とb[a]は同じ。
aにfoo、bにbar[0]を当てはめてみるとfoo[bar[0]]とbar[0][foo]になり、問題ないということになる。
0965デフォルトの名無しさん
05/01/22 22:49:23便乗質問です。
型Tの配列aがあったとして、
a[b] の解釈は
*(a + sizeof(T) * b) になると思います。
とすると、同様にb[a]は
*(b + sizeof(T) * b)
と解釈されると考えました。
この条件でa[b] == b[a]となるのは、
sizeof(T) == 1 つまりTがcharだけの場合に限る
と考えたのですが、間違いでしょうか?
0966デフォルトの名無しさん
05/01/22 22:50:16でした… orz
0967 ◆DRAGONS/66
05/01/22 22:52:25ならない。
*(a+b)
0968デフォルトの名無しさん
05/01/22 22:54:22おまいの発想だと後者は
*(b + sizeof(b) * a)
になるんじゃねーのか?アァ?
0969デフォルトの名無しさん
05/01/22 22:54:30即レスありがとうございます。
ポインタ演算の基礎を忘れて混同してました…
スレ汚し失礼しました^^;
0970デフォルトの名無しさん
05/01/22 23:00:34と書いている参考書を買ってしまったのですが
まずいですか?
0971デフォルトの名無しさん
05/01/22 23:01:39その辺がどっちが良いかは完全に宗教論争だから、どっちでもいいんじゃね?
0972デフォルトの名無しさん
05/01/22 23:02:16ちと古い。
0973デフォルトの名無しさん
05/01/22 23:03:49別にあってもなくてもいいという感じで
とらえておけばいいでしょうか?
まだ初学者なのに
いきなり駄目な参考書に当たっちゃったかなあと思いましたが
他の部分は読みやすそうなので気にするのをやめます
ありがとうございました
0974デフォルトの名無しさん
05/01/22 23:05:1499年12月30日発行でした
0975デフォルトの名無しさん
05/01/22 23:05:51ミレニアムまで待てなかったのか
0976デフォルトの名無しさん
05/01/22 23:07:58ギリギリC99が載ってなさそうな日付じゃん…
0977デフォルトの名無しさん
05/01/22 23:08:500978デフォルトの名無しさん
05/01/22 23:10:180979デフォルトの名無しさん
05/01/22 23:10:380980デフォルトの名無しさん
05/01/22 23:10:470981デフォルトの名無しさん
05/01/22 23:12:21この業界にいて知らないのはヤバい
0982無理だったので誰か次スレ立てて☆
05/01/22 23:12:35【板のURL】 http://pc5.2ch.net/tech/
【タイトル】↓
C言語なら俺に聞け! Part 100
【名前】 v(^o^i)d
【メール欄(省略可)】
【本文】↓
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。
GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
各種リンク、関連スレは>>2-13あたり
C言語なら俺に聞け! Part 99
http://pc5.2ch.net/test/read.cgi/tech/1105454700/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
0983デフォルトの名無しさん
05/01/22 23:12:580984デフォルトの名無しさん
05/01/22 23:13:41このタイミングでそのコピペが出る意味がわからない
0985デフォルトの名無しさん
05/01/22 23:14:02すいません、業界の者ではないです
ヴァージョンみたいな認識でOK?
0986デフォルトの名無しさん
05/01/22 23:15:35プログラミング言語Cの「現在の」標準規格
正式にはISO/IEC 9899:1999-Programming Language C
0987デフォルトの名無しさん
05/01/22 23:16:400988デフォルトの名無しさん
05/01/22 23:16:41タダでさえこのスレまで99なのに知らないってのは釣りか…
http://seclan.dll.jp/c99d/c99d01.htm#dt19990319
0989デフォルトの名無しさん
05/01/22 23:17:13理解しました
0990デフォルトの名無しさん
05/01/22 23:18:430991デフォルトの名無しさん
05/01/22 23:20:02#include <stdio.h>
#include <string.h>
void main()
{
char data[65535];
int i, len;
scanf("%s", data);
len = strlen(data);
i = len - 1;
while(i >= 0)
{
printf("%c", data[i]);
i = i - 1;
}
}
これで文字列を反転できたんですが、その反転したやつをもとの文字列の
後ろにくっつけるにはどうしたらいいでしょうか。
strcatを使おうとしたんですがいまいちうまくいかなくて…
よろしくお願いします。
0992デフォルトの名無しさん
05/01/22 23:20:26仕事が出来るくらい。ここ数年C++ばっかだけど。
0993デフォルトの名無しさん
05/01/22 23:21:06http://pc5.2ch.net/test/read.cgi/tech/1106403600/
0994デフォルトの名無しさん
05/01/22 23:21:49世のニーズがずれていたような・・・
0995デフォルトの名無しさん
05/01/22 23:22:09というかC89だ。
0996デフォルトの名無しさん
05/01/22 23:23:00おっと失敬
0997デフォルトの名無しさん
05/01/22 23:24:030998デフォルトの名無しさん
05/01/22 23:25:34フライング。
0999デフォルトの名無しさん
05/01/22 23:26:471000デフォルトの名無しさん
05/01/22 23:27:1610011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。