C言語なら俺に聞け! Part 108
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2005/06/02(木) 14:37:56質問する前には最低限検索を。
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 107
http://pc8.2ch.net/test/read.cgi/tech/1116340323/
C言語なら俺に聞け! Part 106
http://pc8.2ch.net/test/read.cgi/tech/1113102515/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
0002デフォルトの名無しさん
2005/06/02(木) 14:38:35gcc
http://gcc.gnu.org/
【Win32用の開発環境のみ。】
gcc-cygwin
http://www.cygwin.com/
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前スレ996
2005/06/02(木) 19:41:2500044様
2005/06/02(木) 19:42:430005デフォルトの名無しさん
2005/06/02(木) 19:45:15よくよく考えればK&Rの第二版がだいたいC89だったなぁ、と思い起こした
あたりで、時間切れですた。
0006デフォルトの名無しさん
2005/06/02(木) 20:06:11どなたか解説サイト、ヒント、又は書籍でもいいので教えて下さいm(__)m
0007デフォルトの名無しさん
2005/06/02(木) 20:15:02Cコンパイラに掛ける前に、なんらかの処理系を通すんだろうねぇ。
取り敢えず聞いたことがあるのはSQLとかGUI処理系だけど違いそうだね。
0008デフォルトの名無しさん
2005/06/02(木) 20:22:09これ?
0009デフォルトの名無しさん
2005/06/02(木) 20:27:280010デフォルトの名無しさん
2005/06/02(木) 21:30:19char str[10];
strcpy(str, "あいう");
と書いてますが、
char* str;
str = "あいう";
こっちでもできるし、strcpy関数使わなくてすむんじゃないんでしょうか?
後者じゃだめな理由ってなんですか?
0011デフォルトの名無しさん
2005/06/02(木) 21:34:53全く問題ない。
ただし後者の場合、文字列は書き換えしてはいけないから変数の型をconst char *にするのが望ましい。
0012デフォルトの名無しさん
2005/06/02(木) 21:38:12やっている事は全く違うという事は理解できてる?
0013デフォルトの名無しさん
2005/06/02(木) 21:38:50char* str;
str = "あいう";
strcpy(str, "えお");
ってする?
001410
2005/06/02(木) 21:39:39char* str;
こっちだと、ただのポインタで領域を確保はしてないから他のプログラム等で上書きされる恐れがあるのかな、とか思ってたんですが・・・
0015デフォルトの名無しさん
2005/06/02(木) 21:41:53"あいう"って文字列はそれ用の領域が用意される。
だからconst char *の変数へ入れても全く問題ない。
0017デフォルトの名無しさん
2005/06/02(木) 21:46:27思ってたって、昔は思ってたが今は思わなくなっちまったってことか?
誰だ?ちゃんと責任取れよ。
0018デフォルトの名無しさん
2005/06/02(木) 21:49:48メモリ上の位置が変わるからじゃないですか?
001913
2005/06/02(木) 22:05:260021デフォルトの名無しさん
2005/06/02(木) 22:11:32http://www.kouno.jp/home/c_faq/
0022デフォルトの名無しさん
2005/06/02(木) 22:24:01str系、is系を使わずに、
文字列比較をしたいのですが、
どのようにやるのでしょうか?
0023デフォルトの名無しさん
2005/06/02(木) 22:32:23char同士なら、<,>,==等使える
0024デフォルトの名無しさん
2005/06/02(木) 22:36:17ひょっとしてそれは宿題で言っているのか?(AA略)
0025デフォルトの名無しさん
2005/06/03(金) 02:00:54メインスレッド
-----------
1-1. socket要求待ち受け
1-2. accept()、recv()
1-3. pthread_attr_init()
1-4. pthread_attr_setdetachstate()でPTHREAD_CREATE_DETACHEDを設定
1-5. pthread_create()
1-6. pthread_attr_destroy()
1-7. pthread_cancel()
子スレッド
-----------
2-1. 1-2の残りをrecv()、send()
2-2. select()で1秒ほど待機
2-3 socket解放
2-4. return 0
こんな感じのコードを書いて動かしたところ、クライアントからの一発目の要求は2-2で
pthread_cancel()が走り、正常に取り消されまた1-1に戻ったんですが、直後に二発目
の要求を出すと、pthread_create()の戻り値は正常なのに2-1の処理が走りません。
スレッドはデタッチ状態で起動するため、pthread_cancel()の後スタックが解放されるから
二発目以降の要求も問題ないと思ったんですが、何が問題なんでしょうか。
ソケットのclose、shutdownをしていないのが問題?
OSはHP-UX11.0、コンパイラはgcc2.95です。
0026デフォルトの名無しさん
2005/06/03(金) 02:06:37スレ違い。
0027デフォルトの名無しさん
2005/06/03(金) 02:07:35検索しても、いまいち分からないもので…
0028デフォルトの名無しさん
2005/06/03(金) 02:15:01リストや配列の終端を表す特殊値のこと
乱暴な話、Cの文字列終端の'\0'も番兵の一種
0029デフォルトの名無しさん
2005/06/03(金) 02:21:42センティナェォって言えば意味が判りやすいんじゃないかな。
003027
2005/06/03(金) 02:24:42ありがとうございます!
なるほど…\0もセンティナェォの一種なのか…
0031データボックス
2005/06/03(金) 06:16:11do および while(0) は不要でブロックで囲むだけでいいんじゃないか。
0032デフォルトの名無しさん
2005/06/03(金) 06:38:04ソース内で、コンソール画面の大きさを変更って出来ますか?
標準のヘッダーでインクルードできる範囲内で教えて欲しい。
昨日から考えてるんだけど全然わかんなくて・・・それともスレ違い?
0033デフォルトの名無しさん
2005/06/03(金) 06:54:56スレ違いとわかってんなら書き込むな
0034デフォルトの名無しさん
2005/06/03(金) 07:08:51終端の;を強制できるし、if(a) swapf(b,c); else swapf(d,e);みたいな
コードでエラーを出さずにすむ。はっきり言うなら、マクロの定石。
0035デフォルトの名無しさん
2005/06/03(金) 07:22:090036デフォルトの名無しさん
2005/06/03(金) 07:32:53そうか?ループ中など、関数によるオーバーヘッドが大きい時はこういう事もありと思うがな
一個や二個だったら手書きで書くけど。
0037デフォルトの名無しさん
2005/06/03(金) 09:46:100038デフォルトの名無しさん
2005/06/03(金) 09:52:030039デフォルトの名無しさん
2005/06/03(金) 10:37:25ってどういう意味ですか?
0040デフォルトの名無しさん
2005/06/03(金) 10:40:25004139
2005/06/03(金) 13:26:150042デフォルトの名無しさん
2005/06/03(金) 14:10:20null以外で指定した場合はそこに時間を格納してくれる
%は除余演算子
つまり、時間を100で割ったあまりをsrandの引数(乱数種)としているわけです
0043デフォルトの名無しさん
2005/06/03(金) 14:40:39それにしても、種の種類が100しかないのか。
0044デフォルトの名無しさん
2005/06/03(金) 14:42:40馬鹿はカエレ(・∀・)
0045デフォルトの名無しさん
2005/06/03(金) 15:05:43いちご
0046デフォルトの名無しさん
2005/06/03(金) 15:06:48できるけど多分オマエには無理。
0047デフォルトの名無しさん
2005/06/03(金) 15:45:37tes[0] = 0x0A;
tes[1] = 0xBC;
上のtes[0]とtes[1]をくっつけて0x0ABCという風にしたいんですが
やり方がわかりません。。。
0048デフォルトの名無しさん
2005/06/03(金) 15:54:39(tes[0] << 8) | tes[1]
とか。符号が気になるけど
005047
2005/06/03(金) 16:31:520051デフォルトの名無しさん
2005/06/03(金) 18:49:45宜しくお願いします。
0052デフォルトの名無しさん
2005/06/03(金) 18:56:54スレ遣い。
0053デフォルトの名無しさん
2005/06/03(金) 18:57:01標準Cでは、malloc()で確保した領域のサイズは自分で管理しなければならない。
0054デフォルトの名無しさん
2005/06/03(金) 19:43:20スレ違いになるんですね(汗
すみません。
>>53
そうなんですか!(汗
C++のstringのような動的配列もどきを作ろうかと思ったのですが、
mallocやreallocの返すポインタからサイズが取得できないとなると、
返り値のポインタと一緒に確保したサイズを保存しておくリスト構造の
ような領域が別途必要になるってことですね…。
ありがとうございました。
0055デフォルトの名無しさん
2005/06/03(金) 21:11:42???
0056デフォルトの名無しさん
2005/06/03(金) 21:51:270057デフォルトの名無しさん
2005/06/03(金) 21:53:45たのむからやめてくれ
0058デフォルトの名無しさん
2005/06/03(金) 23:12:310059デフォルトの名無しさん
2005/06/03(金) 23:19:17こんなんじゃだめ? (offsetofは標準じゃなかったはずだが、同等のマクロがどっかにあるはず)
typedef struct {
size_t size;
char buffer[1];
} string_t;
string_t *string_new(size_t size) {
string_t *s;
if ((s = malloc(offsetof(string_t, buffer) + size)) == NULL) {
return NULL;
}
s->size = size;
return s;
}
0060デフォルトの名無しさん
2005/06/03(金) 23:23:16006159
2005/06/03(金) 23:29:38>>59だけだったら結果的には問題はでないだろうけど、bufferの手前にいろいろメタデータ持たせたらハマる要因にならん?
あと、string的なものを実装するなら、sizeに1足して、最後に\0入れといた方がいいね。
0062デフォルトの名無しさん
2005/06/03(金) 23:30:48じゃないか
\0の分の領域は必要だしな。sizeof(string_t) + sizeで、
ちょうどsize分の長さの文字列を格納するのに具合のいいサイズになる。
でも俺なら
struct vec {
T *data;
size_t length; // データ長
size_t capacity; // 確保済みの領域長
};
みたいにするけどな。
0063デフォルトの名無しさん
2005/06/03(金) 23:31:280064デフォルトの名無しさん
2005/06/03(金) 23:35:18offsetofは標準。<stddef.h>
あと俺ならこうする、どうでもいいけど。
string_t *s = malloc(offsetof(string_t, buffer) + size);
if (s == NULL)
006559
2005/06/03(金) 23:35:440066デフォルトの名無しさん
2005/06/03(金) 23:38:320067デフォルトの名無しさん
2005/06/04(土) 02:49:29int型の変数を3つ用意して数値を
それぞれの変数に格納するんだけど
※(enter)はエンターキーを打つ。
A
----------------------------
数値を入力して下さい。
10(enter) ←コマンドプロンプト画面
11(enter)
12(enter)
----------------------------
B
----------------------------
数値を入力して下さい。
10(enter) 11(enter) 12(enter)
----------------------------
AじゃなくてBみたいな感じにしたいけど分かりません(><)
どーしたらいいか教えて下さいm(_ _)m
0068デフォルトの名無しさん
2005/06/04(土) 02:56:10端末の通常の動作では、ユーザのキー入力はそのまま端末にエコーバックされる
(表示される)から、それを変えないとダメだ。で、そのやり方は
完全に処理系依存だ。
0069デフォルトの名無しさん
2005/06/04(土) 03:13:00早い返答ありがとうございますm(_ _)m
環境はwinXP,でコンパイラはBorland C++ Compiler 5.5なんですが・・・
あとは自分で調べます。ありがとうございました。
0070デフォルトの名無しさん
2005/06/04(土) 03:35:31>それぞれの変数に格納するんだけど
scanf("%d,%d,%d",&a,&b,&c);
10,20,30(enter)
ではいかんのか?
0071デフォルトの名無しさん
2005/06/04(土) 03:49:570072デフォルトの名無しさん
2005/06/04(土) 04:28:30UNIX/Mac OS X/Cygwinなら端末制御だ。
どっちにしろ、素人にはお勧めしかねるが。
0073デフォルトの名無しさん
2005/06/04(土) 04:43:26スレ違いなのに親切にありがとうです。
0074デフォルトの名無しさん
2005/06/04(土) 04:59:29ビットシフトはなんの役に立つのでしょうか?
0075デフォルトの名無しさん
2005/06/04(土) 05:22:04お前のせいで
0076デフォルトの名無しさん
2005/06/04(土) 05:36:110077デフォルトの名無しさん
2005/06/04(土) 08:22:36ステッピングモータを駆動するために存在します
0078デフォルトの名無しさん
2005/06/04(土) 09:10:57ビットシフトしたい時に使う。
パリティビットの計算とか、ビット単位で処理を行いたい時とかあるだろ。
0079デフォルトの名無しさん
2005/06/04(土) 09:14:370080デフォルトの名無しさん
2005/06/04(土) 09:42:10なんてことを まるで 自分は知識人? 常識人である風に 言うヤツには
正面から 向かって 目を見て 言ってやれ
俺が使うんだ 私がビットシフトするんだ
みんなビットシフト使おうよ
でかい、でかいビットシフターになれ!
0081デフォルトの名無しさん
2005/06/04(土) 10:46:580082デフォルトの名無しさん
2005/06/04(土) 11:13:350083デフォルトの名無しさん
2005/06/04(土) 14:34:02ビットシフトにする利点は、処理が早い事とコード量が少なくて済む事。
人間の側から機械に歩み寄ってやれば、機械は楽になるって事だ。
最近の流行とは逆方向だけどな。
0084デフォルトの名無しさん
2005/06/04(土) 15:19:52氏ねばいいのに
0085デフォルトの名無しさん
2005/06/04(土) 15:32:59マジレスする親切な人も
ネタレスする寒い人も
似たり寄ったり目糞鼻糞。
0086デフォルトの名無しさん
2005/06/04(土) 15:51:23すべてを使って自分でプログラムを作成しろって課題がでてるのですが
何にするかマッタク思いつかない…。何かいいのありませんでしょうか?
よろしくお願いします。
0087デフォルトの名無しさん
2005/06/04(土) 15:56:19for(;;)
printf("sanf\n");
0088デフォルトの名無しさん
2005/06/04(土) 16:00:29char typo[]="scanf";
if(strcmp(typo,"sanf"))
exit(0);
0089デフォルトの名無しさん
2005/06/04(土) 20:29:12宿題スレへどうぞ。
0090デフォルトの名無しさん
2005/06/04(土) 20:31:14無限ループ使って、二つの数字を入力したら
その積を出力せよ。
なお、0が入力されたらループ終了。
0091デフォルトの名無しさん
2005/06/04(土) 23:36:37与えられた文字列に対し、
**************
* こんな感じで *
**************
飾りをつけて出力するプログラム(某書籍のサンプルのパクリ)。
0092デフォルトの名無しさん
2005/06/05(日) 00:24:49あと、せめて乱数が使えれば...
0093デフォルトの名無しさん
2005/06/05(日) 00:53:570094デフォルトの名無しさん
2005/06/05(日) 01:21:270095デフォルトの名無しさん
2005/06/05(日) 01:55:130096デフォルトの名無しさん
2005/06/05(日) 01:57:570097デフォルトの名無しさん
2005/06/05(日) 02:23:23p = (double)600 / SIZE;
の部分が何を表しているのか解りません。
解る方がいましたら、解説お願いします。
ソース
ttp://www.uplo.net/www/vip13050.txt
音声データ
ttp://www.uplo.net/www/vip13051.txt
0098デフォルトの名無しさん
2005/06/05(日) 02:29:58p = 0.059405940594059405940594059405941
0099デフォルトの名無しさん
2005/06/05(日) 02:30:08初期化してない自動変数の値読んだら駄目?>乱数
0100デフォルトの名無しさん
2005/06/05(日) 02:32:22結構同じ値っぽい希ガス...試してみる価値はあるかな?
010298
2005/06/05(日) 02:36:41010397
2005/06/05(日) 02:37:28そのプログラムで、どういう役割を果たしてるのか?です。
010498
2005/06/05(日) 02:40:08gw_line関数の仕様か、もしくは関数の中を読まな。
0105デフォルトの名無しさん
2005/06/05(日) 02:44:20試したがいつも同じ
0106デフォルトの名無しさん
2005/06/05(日) 03:44:45p = (double) 300 / SIZE;
とかに変えて、表示がどう変わるか試してみそ。
たぶん役割が判ると思うよ。
0107デフォルトの名無しさん
2005/06/05(日) 04:00:06曰 \ もう、わかんないんです…. /
| | \ ∧_∧ ∧_∧ ./
ノ__丶 ∧_∧\ ハァ...( ><) ≡3 (>< )うう… /__|
||鬼||( ><) \ | ⊃ヽC C/⊂ |. /|||||
_ ||殺||./ [¢、) \ 、_( )) ( ( )_ノ.. / | ̄| ∧ ウウ・・・
\ ||し||∪ ̄ ̄. ̄ ̄\ \ ∧∧∧∧∧. ... ./ | |<)
||\.`~~´ ((二゚。◎彡) \ \ < の わ > /. | |⊂ | わかんないんです…
||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄ \ < か > ...../ | | ∪
. || ̄ ̄ ̄ ̄ ̄ ̄ ̄|| \< 予 ん > /
わかんないんです… < な > /
―――――――――――――――< 感 い >―――――――――――――――――
∧ ∧ < ん >
/ ;わかんないんです / <. !!! で >
/ '; / .< す > ∧_∧∩ / ̄ ̄
/ ;______/ ;/∨∨∨∨∨\ ( >< ノ<わかんないんです
/ / .\ __/ノ / \__
/ ┯━┯ ┯━┯ ./ \\  ̄ ̄ ̄ ̄ ̄ ̄\
.| ..) ) _____ ) )/ / ヽ .\||\ \
| ...( ( ;, / ( (/. / ヽ ..\ || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
0108デフォルトの名無しさん
2005/06/05(日) 05:03:480109デフォルトの名無しさん
2005/06/05(日) 09:58:16描画される幅が全部で600ピクセルってことでしょ。
pは1データあたりの描画幅の増加量。
ただ、gw_line()にdouble型を使ったり、
SIZEは定義しているのに600は定義してなかったり、
あまりいいプログラムではないと思うね。
0110デフォルトの名無しさん
2005/06/05(日) 10:00:48します。
#include <stdio.h>
#include <string.h>
main()
{
char A[500];
printf("INPUT>>>");
gets(A);
strlen(A);
printf("%d\n",A);
}
文字列を入力してその長さを出力するプログラムです。これではダメでした。
0111デフォルトの名無しさん
2005/06/05(日) 10:02:37#include <string.h>
main()
{
char A[500];
int B;
printf("INPUT>>>");
gets(A);
B = strlen(A);
printf("%d\n",B);
}
0112デフォルトの名無しさん
2005/06/05(日) 10:09:10visual C++の環境で普通のC言語を用いてプログラムを書くことは可能なのでしょうか?
スレ違いな質問でしたら、大変申し訳ございません・・。
0113110
2005/06/05(日) 10:12:52>111
0114デフォルトの名無しさん
2005/06/05(日) 10:16:01余裕でできる。
完璧にできるかは知らないけど。
0115112
2005/06/05(日) 10:19:05分かりました!!
早速のご回答、ありがとうございます!!
0116110
2005/06/05(日) 10:27:19visual C++ 6.0 を使って、C言語で以下のようなプログラムを書いたのですが↓
#include <stdio.h>
#include <math.h>
main(){
double pi;
pi=3.1415;
printf("%d",pi);
}
ビルドして実行しますと何故か↓
-1065151889Press any key continue
って出力されます。
どうしてなのでしょうか?
どうか、よろしくお願いします。
0117デフォルトの名無しさん
2005/06/05(日) 10:29:20かな?
0118110
2005/06/05(日) 10:37:53ほ、ほ、ほホントだ!!
printf("%f",pi);
に変えただけで、出力が3.141500になりました!!
ありがとうございます★
0119デフォルトの名無しさん
2005/06/05(日) 11:21:24012097
2005/06/05(日) 11:28:59何となく解ってきました。
0121デフォルトの名無しさん
2005/06/05(日) 11:33:35<time.h>
の中に、clock()って関数があるようですが、
それでいいん?
0122デフォルトの名無しさん
2005/06/05(日) 12:25:45いるかを返し、もしptnがstrの一部分として現れなければ0を返す
関数を作成せよ。ただしptnがstrの二ヵ所以上に現れていれば、最後に現れるものの
先頭の位置を返すことにする。
例、str=abdacabcd ptn=abcならばptnは先頭から六文字目と十文字目に現れているが
後に現れる10を返す
#include <stdio.h>
#define N 80
int match(char str[],char ptn[]);
int main(void)
{ char string[N],pattern[N];
gets(string);
gets(pattern);
if(match(string,pattern)!=0)
printf("先頭から%d番目です\n",match(string,pattern));
else
printf("%dです。ありません\n",match(string,pattern));
return 0;}
int match(char str[],char ptn[])
{ int k,m;
for(k=0;str[k]!='\0';k++){
for(m=0;str[k+m]==ptn[m]&&ptn[m]!='\0';m++){;}
if(ptn[m]=='\0')
return k+1;}
return 0;}
と書いたのですが、先頭の値を返してしまいます。
どなたかヒントをください。(*/□\*)うわぁ〜ん
0123デフォルトの名無しさん
2005/06/05(日) 12:27:29>>1
>ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
0124デフォルトの名無しさん
2005/06/05(日) 12:35:25(゜дÅ)ホロリ
0125デフォルトの名無しさん
2005/06/05(日) 14:06:59十数年前ですら「getsなんざ一律使用禁止」とゆー意見に特に異論は出てなかったと思うんだが。
0126デフォルトの名無しさん
2005/06/05(日) 14:49:29if(key ==4 && )
とありますが、==と&& がどうしてでてくるかわかりません。意味もわかりません。
0127デフォルトの名無しさん
2005/06/05(日) 15:00:30&&で終わってないよな?
0128デフォルトの名無しさん
2005/06/05(日) 15:08:38ぢゃヒントだけでも
if(match(string,pattern)!=0)
printf("先頭から%d番目です\n",match(string,pattern));
else
printf("%dです。ありません\n",match(string,pattern));
ここをループして
0129デフォルトの名無しさん
2005/06/05(日) 15:49:09int num1 = 0,
num2;
int rtn = 0;
for(num2 = 0; str[num2] != '\0'; num2++){
if(ptn[num1] == str[num2]){
num1++;
if(ptn[num1] == '\0'){
rtn = num2 - num1 + 2;
num1 = 0;
}
} else {
num1 = 0;
}
}
return rtn;
}
0130デフォルトの名無しさん
2005/06/05(日) 17:53:03strlen
strncmp
の把握に役立てよう
/* 最後に現れるものの 先頭の位置を返す */
int match(char str[],char ptn[])
{
int i,k,m;
for(k=0; str[k]; ++k); /* k=strlen(str); */
for(m=0; ptn[m]; ++m); /* m=strlen(ptn); */
for(k-=m; k>=0; --k){
/* if(strncmp(&str[k],ptn,m)==0) return k+1; */
for(i=0; i<m && str[k+i]==ptn[i]; ++i);
if(i==m) return k+1;
}
return 0;
}
0131デフォルトの名無しさん
2005/06/05(日) 18:16:42w
0132デフォルトの名無しさん
2005/06/05(日) 18:17:12FストリームはUNIXでも使えるインクルードですか?
さらにstat関数でファイル情報を取得するプログラムを
作りたいのですがWinAPI関数となるFindFirst FindNextに変わる
UNIXで使用できるステートメントがあれば御教授いただきたい
0133デフォルトの名無しさん
2005/06/05(日) 18:22:440134デフォルトの名無しさん
2005/06/05(日) 18:23:450135132
2005/06/05(日) 18:38:14どこか伝わらなかった点がございますでしょうか?
0136デフォルトの名無しさん
2005/06/05(日) 18:42:15http://pc8.2ch.net/test/read.cgi/tech/1115386557/
0137デフォルトの名無しさん
2005/06/05(日) 18:43:420138デフォルトの名無しさん
2005/06/05(日) 19:13:57Pro*Cを実行させる環境にランタイムは必要になるでしょうか?
つまり、開発環境でプリコンパイル、コンパイルした実行物を
別の実行環境(ただのCの実行環境)で使用することは可能でしょうか?
どこか参考になるサイト込みで教えていただけると幸いです。
よろしくお願いいたします。
0139デフォルトの名無しさん
2005/06/05(日) 19:31:22「C言語のスレ」で質問するんだろう。
0140デフォルトの名無しさん
2005/06/05(日) 19:32:350141デフォルトの名無しさん
2005/06/05(日) 20:11:31本気? 「Fストリーム」って何? 「インクルード」って何? 「ステートメント」って何? 専門用語使うなら正しく使いましょう。理解が怪しいなら無理に使わない。
0142デフォルトの名無しさん
2005/06/05(日) 20:13:42変数として宣言されたものかを判断する方法は無いでしょうか?
0143デフォルトの名無しさん
2005/06/05(日) 20:32:51環境依存なら、あるかもしれない。
解決策は、自分でalloc,freeを包む関数を作ること。
0144デフォルトの名無しさん
2005/06/05(日) 20:39:15そんなことを意識しなければならないこと自体があんまりないような…
0145デフォルトの名無しさん
2005/06/05(日) 20:39:41ソース見ればわかるよ。
>>143
環境依存の質問じゃないだろ。
0146デフォルトの名無しさん
2005/06/05(日) 20:40:51もしやFストリームとはC++のヘッダのfstreamのことか?
0147デフォルトの名無しさん
2005/06/05(日) 20:43:37ソースがないとか。
0148デフォルトの名無しさん
2005/06/05(日) 21:45:580149デフォルトの名無しさん
2005/06/05(日) 21:55:39起動したいと思っています。
execl()という関数で試してみたのですが、Bを起動する
とAのメモリ上に展開されるため、Bが処理を終了すると
必然的に、Aも終了してしまいます。
Aを生かしつつ、Bというプログラムを実行する
関数ってありますでしょうか?
(スレッドとかではなく、実行ファイルを実行する関数が
あれば、ご教授ください。)
0150デフォルトの名無しさん
2005/06/05(日) 22:00:58execlはfork前提だからなぁ。
0151デフォルトの名無しさん
2005/06/05(日) 22:15:59ファイルストリームご存知ないようですね
インクルードはヘッダで定義するファイルの事ですよ
ステートメントは知っての通り関数群です。
0152デフォルトの名無しさん
2005/06/05(日) 22:25:460153デフォルトの名無しさん
2005/06/05(日) 22:30:37おお!
ご教授ありがとう御座います。
実は、Cのソースコード中でBashファイルを
実行使用としていたのです。(Linux環境)
今からテストしてみます。
感謝!!
0154デフォルトの名無しさん
2005/06/05(日) 23:45:08関数を包むって、たとえば#define alloc myalloc とかいう類いのこと?
開放忘れ探しに(デバッガが貧弱なら)、、、assertを参考に作ったよ。
bccだと__FUNC__ __LINE__ __FILE__もつかった。
で、__FILE__使うと絶対パスが入るらしく、後方から数えてn個目の\以
降のみの文字列を取得、、で力尽きた。おやすみねむ
0155デフォルトの名無しさん
2005/06/06(月) 00:22:46そんなことをしちゃいかーん
常に標準関数を呼ぶだけのラッパー関数を用意して使うようにしなさい。
で、何かあったらラッパー関数で処理の付け足しをするようにしなさい。
0156デフォルトの名無しさん
2005/06/06(月) 01:54:55gets()はなんの役に立つのでしょうか?
0157デフォルトの名無しさん
2005/06/06(月) 01:58:11過去との互換性のため「だけ」に残されてる
つかっちゃいけない関数の筆頭
0158デフォルトの名無しさん
2005/06/06(月) 01:58:29オ○ニーには使えるが
実践では役に立たない。
0159デフォルトの名無しさん
2005/06/06(月) 03:53:570160デフォルトの名無しさん
2005/06/06(月) 09:41:500161デフォルトの名無しさん
2005/06/06(月) 10:37:42long a;
long b;
};
KOU *kou = new KOU [100];
こういう感じで構造体を宣言したものを
0埋めの初期化処理ってどうやったらいいんでしょうか?
delete[];で一旦消すしか無理ですか?
0162デフォルトの名無しさん
2005/06/06(月) 10:48:130163デフォルトの名無しさん
2005/06/06(月) 10:49:56実践て排尿の事だろ
十二分に使えているよ
0164デフォルトの名無しさん
2005/06/06(月) 11:47:13memset()でも、forループでも好きに使えばいいと思うよ
0165デフォルトの名無しさん
2005/06/06(月) 12:24:41memset(&kou,0,sizeof(kou));とやると落ちてしまいます。
どこかおかしいですか?
0166デフォルトの名無しさん
2005/06/06(月) 12:53:33それはポインタkouを0クリアしてるだけ。
memset(kou, 0, sizeof(KOU) * 100); じゃないかな。
あと、delete[]で消すことに何の意味が…
0167デフォルトの名無しさん
2005/06/06(月) 13:00:47なるほど!
ありがとうございます!
delte[]でどうこうしようと思ったのは、
一旦削除して生成し直したらいけるかなーと思ったので。
0168デフォルトの名無しさん
2005/06/06(月) 13:17:19コンパイラはborlandです。
0169デフォルトの名無しさん
2005/06/06(月) 13:18:10newの意味もdeleteの意味も勘違いしている。
そもそも、newの時点でスレ違い。
0170デフォルトの名無しさん
2005/06/06(月) 13:19:39設計して製造して試験すれば出来るよ。
0171デフォルトの名無しさん
2005/06/06(月) 13:43:00char s[16],p[63]="0123456789AB…YZab…yz";
for(i=0;i<15;i++)
s[i]=p[(rand()%62)];
s[15]=0;
printf("%s\n",s);
この程度でよければ
0172デフォルトの名無しさん
2005/06/06(月) 14:39:50宿題スレでも見たな。イパーイ解答もらえて幸せ者だな。
0173デフォルトの名無しさん
2005/06/06(月) 15:40:44表○ 裏● の2通りがあって例えば、
○○○○○ なら赤色
○○○○● なら青色
○○○●○ なら黄色
○○○●● なら緑色
○○●○○ なら紫色
○○●○● なら茶色
○○●●○ なら水色
・
・
・
と並べた時に、全パターンを調べるには
どのようにループ文を使えば効率的に分かるのでしょうか?
0174デフォルトの名無しさん
2005/06/06(月) 15:48:530175デフォルトの名無しさん
2005/06/06(月) 16:05:09「調べる」とは具体的に何をしたいの?
0176デフォルトの名無しさん
2005/06/06(月) 16:07:32じゃなきゃ>>174
0177デフォルトの名無しさん
2005/06/06(月) 16:11:432の5乗でいいじゃん
0178デフォルトの名無しさん
2005/06/06(月) 16:16:40int rand(void)
{
next=next *1130351524+12345;
return(unsigned int )(next \65536)%32768;
}
void srand (unsigned int seed)
{
next=seed;
}
これをつかって100個の疑似乱数を作成ってどうやるんですか>?
0179デフォルトの名無しさん
2005/06/06(月) 16:45:21randを100回呼び出す。
0180デフォルトの名無しさん
2005/06/06(月) 19:07:05参考にしている本の練習問題の一部ですが
while(!kbhit())rand();
i = rand()%2 ? printf("表"):printf("裏");
とは、どのような内容なのでしょうか?
何かキーを押すまで、プログラムは↑のrand()で乱数を作りどこにも代入していないので、
作った乱数を捨て、また作り捨て、作り捨て、をひたすら繰り返し
何かキーが押されると↓のrand()で今まで作った乱数とは全く関係ない乱数を作り
その乱数を2で割った余りが1なら表、0なら裏と表示する
っという内容で合ってますか?
0181180
2005/06/06(月) 19:10:10は書き間違いです、すいません
0182デフォルトの名無しさん
2005/06/06(月) 19:43:42ただ、乱数って、srand()しなきゃいつも同じ順番で回ってくると思うから、
何回も無駄に回す事によって、そのときでる順番も
変えてるのかな?
うーん。
たぶん次の章で、乱数の初期化のしかたでも出るんじゃない?
0183デフォルトの名無しさん
2005/06/06(月) 19:46:56この問題なんだけど、この答えあってる?
pの値は01だと思うんだけど・・・
0184デフォルトの名無しさん
2005/06/06(月) 19:49:27これ思いっきりビジーループだな。
kbhit()使ってるあたりから見ても、その教科書MS-DOS時代のやつ
じゃないのか?
もっとマシな本に変えたほうがいいぞ。
0185デフォルトの名無しさん
2005/06/06(月) 19:50:14たぶん。間違ってたらごめんね。
0186デフォルトの名無しさん
2005/06/06(月) 19:53:20p を直で表示しようとすると、メモリの番号が表示されるよん。
p の中身は、 *p ってやんなきゃ出ないよ。
0187183
2005/06/06(月) 19:55:49俺はp=01で*p=08かなーと思ってこの答えに納得いかなかったんだけど
これで合ってるのか
どもども
0188デフォルトの名無しさん
2005/06/06(月) 19:55:59pの型はデフォルトでcharでいいの?
sizeof(long)が、8である処理系の存在を、規格は妨げていなかったはずだけど、どうなの?
アラインメントが揃わないとバスエラーが起こる処理系はどうするの?
0189デフォルトの名無しさん
2005/06/06(月) 19:57:50char *p = 3; と読むか、
extern char *p; (&p = 3)と読むかだな。
0191デフォルトの名無しさん
2005/06/06(月) 20:16:01同じビットの出現の度に置き換えようとしてる。
でも、効率よく同じビット列が探せない。
どうしたらいい?
0192デフォルトの名無しさん
2005/06/06(月) 21:09:22頻度テーブルでも作りたいんだろうか
固定(8とか)で探せば楽だろうけど
可変長だと難しそう
0193デフォルトの名無しさん
2005/06/06(月) 21:16:53可変長。
10000000000000011000000000000001
これで、1000000000000001が2回連続してるってことをヒットすれば
かなりの圧縮になると思うんだが。
0194デフォルトの名無しさん
2005/06/06(月) 21:49:150195デフォルトの名無しさん
2005/06/06(月) 21:52:50テーブルが必要。
0196デフォルトの名無しさん
2005/06/06(月) 21:56:55int* num と int *num
って違うの?
0197デフォルトの名無しさん
2005/06/06(月) 22:00:04同じっぱい
0198デフォルトの名無しさん
2005/06/06(月) 22:04:28iconv使え。あと、Windowsもからむなら、JIS標準UnicodeとMicrosoft Unicodeとの違いにも注意。
0199デフォルトの名無しさん
2005/06/06(月) 22:06:34ぐぐって、ここ見たけど、┐(´ー`)┌フッ
ttp://homepage1.nifty.com/nomenclator/unicode/ucs_utf.htm
まずは、Unicodeに変換する必要ありなのかな。。。
あ、Solarisで。
0200デフォルトの名無しさん
2005/06/06(月) 22:07:12int と * と num がそれぞれトークンだから
int*num でもおk
0201デフォルトの名無しさん
2005/06/06(月) 22:08:28試行錯誤するしかない気が
0202デフォルトの名無しさん
2005/06/06(月) 22:09:18>>200
感謝m(_ _)m
0203デフォルトの名無しさん
2005/06/06(月) 22:12:48すみません。
使い方がサッパリです。。
簡単なサンプルを。。。
0204デフォルトの名無しさん
2005/06/06(月) 22:28:07「JIS標準Unicode」ってなに?
0205デフォルトの名無しさん
2005/06/06(月) 22:52:27エスキュート?
0206デフォルトの名無しさん
2005/06/06(月) 23:04:10「〜」=「WAVE DASH」になるのがJIS標準。
「〜」=「FULLWIDTH TILDE」になるのがMicrosoft。
(他にもいくつかある)
困ったことに完全に100% Pure Unicode環境で固めてもこの問題からは逃れられない……。
0207デフォルトの名無しさん
2005/06/06(月) 23:07:12long型で読み込んだ値をchar型4個の構造体の方で
1バイトずつ参照してるプログラムがあったのだが、
これって、大丈夫なの?
構造体や共用体って、型を並べた順番にその型のサイズで隙間なく
埋まるようにメモリ上に確保されることが保障されるの?
0208デフォルトの名無しさん
2005/06/06(月) 23:09:02ビッグ・リトル問題に直面すると思われ。
0209その1
2005/06/06(月) 23:10:39ほれ。
#include <stdio.h>
#include <errno.h>
#include <iconv.h>
#define BUF_SIZE 1024
int
main(void)
{
iconv_t cd;
char ibuf[BUF_SIZE];
char obuf[BUF_SIZE * 2];
/* ASCII以外は1文字3バイトになるので適当に大きく */
if ((cd = iconv_open("UTF-8", "EUC-JP")) == NULL)
return 1;
while (fgets(ibuf, BUF_SIZE, stdin)) {
const char *ip;
char *op;
size_t ileft, oleft, result;
ip = ibuf;
op = obuf;
ileft = sizeof(ibuf);
oleft = sizeof(obuf);
0210その2
2005/06/06(月) 23:11:03switch (result = iconv(cd, &ip, &ileft, &op, &oleft)) {
case E2BIG:
/* 出力バッファが足りない */
break;
case EILSEQ:
/* 入力が正しくない */
break;
case EINVAL:
/* マルチバイト文字が途中で終わってる */
break;
default:
break;
}
fputs(obuf, stdout);
}
iconv_close(cd);
return 0;
}
必要に応じてlibiconvをリンクすれ。
あとエラーチェックとそのリカバリは全部さぼってるから気を付けろ。
0211デフォルトの名無しさん
2005/06/06(月) 23:20:26確かめる方法を知りたいのですが。
0212デフォルトの名無しさん
2005/06/06(月) 23:23:28FAQ>>1
0213デフォルトの名無しさん
2005/06/06(月) 23:29:11ありがとうございます。
ただ、iconv_open()でEINVALに。。orz
0214デフォルトの名無しさん
2005/06/06(月) 23:29:14ttp://www.kouno.jp/home/c_faq/c20.html#9
0215デフォルトの名無しさん
2005/06/06(月) 23:41:57Solarisだっけ?
http://docs.sun.com/app/docs/doc/816-5175/6mbba7f14?a=view
あー、EUC-JPじゃなくてeucJPかも。
(おれはcygwin(==GNU iconv?)で確認したからなぁ)
0216デフォルトの名無しさん
2005/06/06(月) 23:48:170217デフォルトの名無しさん
2005/06/06(月) 23:54:380218デフォルトの名無しさん
2005/06/07(火) 00:03:35重ね重ねありがとうございます。
iconv_open("UTF-8", "eucJP")
でokでした!
ですが、今度はiconvで-1っぽいです。。_| ̄|○
でも大体見えてきたので、こちらで頑張ってみます。
お手数かけました。
0219デフォルトの名無しさん
2005/06/07(火) 00:04:380220デフォルトの名無しさん
2005/06/07(火) 00:26:24がんがれ。ここも参照な。
http://docs.sun.com/app/docs/doc/819-1213/6n3ja05bb?q=iconv_open&a=view
下の方にサンプルコードもある。(最初気付かなかったけど)
0221デフォルトの名無しさん
2005/06/07(火) 01:00:30「スクウェアルート」と呼んでいる
反論されたことはない
0222デフォルトの名無しさん
2005/06/07(火) 13:33:16struct list_a {
void *data;
struct list_a *next;
struct list_a *prev;
};
struct list_b {
struct list_b *next;
struct list_b *prev;
void *data;
};
どっちが良いですか?
今までずっとlist_bだったんだけど、
list_aの方が一般的っぽい(glibとか)から
今回から変えようかと思うんだけど
0223デフォルトの名無しさん
2005/06/07(火) 13:36:020224デフォルトの名無しさん
2005/06/07(火) 15:06:26int a=20050607
2005だけを取り出す
0225デフォルトの名無しさん
2005/06/07(火) 15:12:26a / 10000
0226デフォルトの名無しさん
2005/06/07(火) 17:04:20struct list_b *prev;
void *data;
struct list_b *next;
};
0227デフォルトの名無しさん
2005/06/07(火) 17:23:55切捨てというのはどうやって行えば良いのでしょうか?
0228デフォルトの名無しさん
2005/06/07(火) 17:36:390229デフォルトの名無しさん
2005/06/07(火) 17:46:36また10かけたりすんですか?
0230デフォルトの名無しさん
2005/06/07(火) 17:47:35小数点以下も表示、計算させたいときは
xを10や100かけてから>>228して
また10や100でわったりしなければいけませんか?
0231デフォルトの名無しさん
2005/06/07(火) 18:14:02floor()
0232デフォルトの名無しさん
2005/06/07(火) 19:15:28なら割って切り捨ててかけて、で問題ない。
あと、>228の書き方を丸呑みにすると変な書き方しそうなので、キャストとか型変換でぐぐって調べれ。
floatやdoubleをintに型変換すると小数点以下は切り捨てられる。
>228は暗黙の型変換を行なってるわけだ。
蛇足だが、切捨ては表示する段階でだけ適用しないと誤差が膨れまくるぞ。
0233デフォルトの名無しさん
2005/06/07(火) 19:31:25ビットシフトはなんの役に立つのでしょうか?
0234デフォルトの名無しさん
2005/06/07(火) 19:36:560235デフォルトの名無しさん
2005/06/07(火) 19:59:26このキャストはいったい何の役に立つのでしょうか?
0236デフォルトの名無しさん
2005/06/07(火) 20:29:33C++ コンパイラでエラーにならないようにするため。
0237358
2005/06/07(火) 20:41:360238デフォルトの名無しさん
2005/06/07(火) 20:46:030239237
2005/06/07(火) 20:47:12Unixではシフト+Dでできたようなのですが・・。
0240237
2005/06/07(火) 20:49:32でもそれでもできませんでした。
他に方法があるのでしょうか・・
0241デフォルトの名無しさん
2005/06/07(火) 20:58:14「行頭で」 Ctrl+Z
0242デフォルトの名無しさん
2005/06/07(火) 20:58:16ttp://nssearch.hp.infoseek.co.jp/clang/1084138965.html#x121
0243デフォルトの名無しさん
2005/06/07(火) 21:22:052つ質問させてください
1・mallocで確保したメモリに変数や配列を入れ、freeでメモリを開放すると
その変数や配列は開放後には使えなくなるのでしょうか?
開放後同じ名前の変数・配列を宣言しても平気でしょうか?
2・WindowsAPIを直接用いないMFCではなく、SDKベースでプログラムを
組めるようになりたいのですが、お勧めの本等ありませんか?
また、現在は無料BORLANDコンパイラを使っているのですが、VC++を購入しようか
迷っております、SDKベースでプログラムしようとしてもVC++は便利でしょうか?
0244243
2005/06/07(火) 21:30:043・WINXPか2000等色々なOSでプログラムを作りたい場合等
テスト用に Virtual PC 2004 を購入しようか迷っております、使い勝手等はいいのでしょうか?
また、Virtual PC 2004 は色々なOSでの動作が試せるけど、各OSのライセンスが
ないとダメなのかも不安です
4・プログラムを作る環境(WINのOSバージョンやCPU)とプログラムを動作させる
環境は同じだったりしないと駄目なのでしょうか?
主に2000とXPを使っており、片方でしか使えないとなると厳しいのです・・
プログラミングやC勉強の際や関係ソフト購入の際等注意する点あったら
教えていただきたいです
長々となりましたが 宜しくお願いします
0245デフォルトの名無しさん
2005/06/07(火) 21:41:42int val[2];
while(1){
hoge(val[toggle]);
toggle=!toggle;
}
というコードを時々見かけるんですが
!0は1になる事は規格で保証されているんでしょうか
!0は非0かと思ってますた
0246デフォルトの名無しさん
2005/06/07(火) 21:45:51保証されてる
!0 → 1
!1 → 0
!-1 → 0
0247デフォルトの名無しさん
2005/06/07(火) 21:48:00>変数や配列は開放後には使えなくなるのでしょうか?
同一ブロックで
void* hoge = malloc(hogehoge);
free(hoge):
hoge = malloc(hogehoge2);
free(hoge):
できるかってこと? ならできる。
>開放後同じ名前の変数・配列を宣言しても平気?
俺なら異なる名前空間なら同名変数宣言してもOKという場合もある。
同じ関数内ではやらね。
同一ブロックじゃ無理っていうかそれくらいなら試したりテキスト読めばわかる。
>お勧めの本等ありませんか?
URLなら猫でもわかるプログラミングていうかググればいくらでも解説ページあると思う。
>SDKベースでプログラムしようとしてもVC++は便利でしょうか?
DirectX、デバッガ目的で買った。使いこなすにはそれなりの労力は必要だろう。
今は買って満足している。買うならpro以上。
0248デフォルトの名無しさん
2005/06/07(火) 21:53:051. 意味不明。例となるコードを見せろ。
2. 俺も最初BCCを使っていたがVCを手に入れてよかったと思っている。
3. VirtualPCの中で動かすOSにもそれぞれ当然ライセンスが必要。
4. そんなことはありえない。市販ソフト・フリーソフトやコンパイラ自体も動作条件Win XX以上って具合だろ。
0250デフォルトの名無しさん
2005/06/07(火) 22:29:161.解放後にも使えることは使えるけど、開放したらポインタが指すものが
無いわけだから不定値とか意味の無い値になる。変数が解放後も同じスコープに
あるなら同じ変数をそのまま使える。もし、同じ変数名で宣言したら
再宣言されているとかエラーになる。この辺は普通のローカル変数の宣言と同じだね。
2.SDKベースならペゾルド?の本かな。あとAdvanced Windows。コンパイラだけでなく、
エディタを含めた開発環境が一式手に入るからVC++は便利だよ。入力補完機能とか、
変数の引数の表示とか出来るしね。
0251デフォルトの名無しさん
2005/06/07(火) 22:35:44ライセンスを持っていないと駄目です。使い勝手は悪くないですが、出来るだけ
高速なCPUとハードディスクで運用して下さい。間違っても1GHz以下のCPUでは使用しないように。
4.同じの方が色々使っている時の不具合とか使用感とか分かるから望ましいですが、
駄目ならデュアルブート出来るようにしておいて、開発がある程度終わったら
切り替えて動作検証するとかですね。CPUはMMXとかの拡張命令に依存するのでなければ
あまり気にしなくても良いと思います。
まとめると、MSDN Pro以上に入会するとVirtual PCやVC++とかの開発環境も
格安で全部揃ってウマーです。
0252デフォルトの名無しさん
2005/06/08(水) 04:45:391.0e-6 といった数字も double から float に書けませんでしょうか?
1.0fe-6 とかはムリでしたし、(float)1.0e-6とキャストするのは汚くて面倒です…
0253デフォルトの名無しさん
2005/06/08(水) 09:13:49そもそも、わざわざfloatに直す意味が見いだせない。
0254デフォルトの名無しさん
2005/06/08(水) 09:16:42必要で無いから汚いんだ、このレスのように
0255デフォルトの名無しさん
2005/06/08(水) 10:28:46お前が見いだす必要なんかなかろうに
0256デフォルトの名無しさん
2005/06/08(水) 11:53:18使うのは、名前にだまされてる初心者だけ
0257デフォルトの名無しさん
2005/06/08(水) 12:14:14アホ?
0258デフォルトの名無しさん
2005/06/08(水) 12:20:180259デフォルトの名無しさん
2005/06/08(水) 12:33:491.0e-6f
接尾語なんだから最後に付けないと駄目だろ。
0260デフォルトの名無しさん
2005/06/08(水) 12:48:500261デフォルトの名無しさん
2005/06/08(水) 17:08:52聞きたい事はそれなんだな?
0262デフォルトの名無しさん
2005/06/08(水) 17:20:340263デフォルトの名無しさん
2005/06/08(水) 19:45:470264デフォルトの名無しさん
2005/06/08(水) 21:07:53piyo, 3, 8
fuga, 5, 16
...
みたいな入力に対して第三列目だけを取りたいんですが,どうするのがエレガントですか?
今は char dummy[1024] とか作っておいて sscanf(input, "%s, %s, %d", dummy, dummy, &data);
とやってるんですが,わざわざ dummy を作らないでやる方法があれば教えてください.
0265デフォルトの名無しさん
2005/06/08(水) 21:11:500266264
2005/06/08(水) 21:14:280267デフォルトの名無しさん
2005/06/08(水) 21:53:52デバッガではハンドルされてない例外は test.exeにあります。
と出て、非常に困っております。
どこが間違っているのか、教えていただけませんか。
0268デフォルトの名無しさん
2005/06/08(水) 21:54:25#include <stdlib.h>
#include <time.h>
int main(void)
{
int data[10],table[10];
int i,j,temp;
srand((unsigned int)time(NULL));
for (i = 0; i < 10; i++); {
table[i] = i;
data[i] = rand() % 100;
}
0269デフォルトの名無しさん
2005/06/08(水) 21:54:37for (i = 0; i < 10; i++); {
printf("data[%d]:%4d\t\ttable[%d]:%4d\n", i, data[i], i, table[i]);
}
for (i = 9; i > 0; i--); {
for (j = 0; j < i; j++) {
if (data[j] > data[j+1]) {
temp = data[j];
data[j] = data[j+1];
data[j+1] = temp;
}
}
}
for (i = 0; i< 10; i++); {
printf("data[table[%d]}:%4d", i, data[table[i]]);
}
return 0;
}
0270デフォルトの名無しさん
2005/06/08(水) 22:04:10デバッガがあるならステップ実行してみろよ……。
0271デフォルトの名無しさん
2005/06/08(水) 22:05:42そう書いたつもりですが、全然書いてませんでした。すいません。
0272デフォルトの名無しさん
2005/06/08(水) 22:11:52まずそこを直せ。
0273デフォルトの名無しさん
2005/06/08(水) 22:20:32VC++6.0は馬鹿だ!! 気づかなかった俺もっと馬鹿だ!!
直したら正常に動作しました、どうもお騒がせして申し訳ございません。
0274デフォルトの名無しさん
2005/06/08(水) 22:53:29さっきの↑のプログラムで、配列dataのところのバブルソートを
dataの順番は弄らずに配列tableだけをソートしたいのですが、dataの部分を
tableに変えても上手くいきません。
具体的には
data[0]:32 table[0]:0
data[1]:15 table[1]:1
data[2]:18 table[2]:2
data[3]:06 table[3]:3
を
data[0]:32 table[0]:3
data[1]:15 table[1]:1
data[2]:18 table[2]:2
data[3]:06 table[3]:0
のようにtable[x]の要素を順番に抜き出せばソート出来る。
という表示にしたいのですが、考え方が分からず煮詰まってます。
とっかかりでも教えていただけませんか?
0275デフォルトの名無しさん
2005/06/08(水) 23:49:25File出力に関する質問なんですが、演算結果を
いくつものファイルに出力しようと思ってます。
そこでfpirintで出力するファイル名をfor等でループさせて
出したいんですが、可能でしょうか?
fopen("---", "w")の---の部分を変数にして、ループ出力
させるイメージなんですが…。
ファイル名を変化させて自動で出力できればどんな方法でもいいんで
よろしくお願いします。
0276デフォルトの名無しさん
2005/06/08(水) 23:55:32struct F { char *name, FILE *fp };
main()
{
F[] = {{"a.txt",0},{"b.txt",0},{"c.txt",0},{0,0}};
int i;
for (i = 0; F[i].name; ++i)
F[i].fp = fopen(F[i].name, "w");
for (i = 0; F[i].name; ++i) {
fprintf(F[i].fp, "%s\n", F[i].name);
fprintf(F[i].fp, ...);
}
}
0277デフォルトの名無しさん
2005/06/08(水) 23:59:20みたいな3項演算子の使い方って
許される?
0278デフォルトの名無しさん
2005/06/08(水) 23:59:24void hoge(void){
int i;
char filename[32];
for(i=0;i<10;i++){
FILE *fp;
sprintf(filename,"%d.dat",i); /*ファイル名生成*/
fp= fopen(filename,"w");
fprintf(fp,"it's data #%d\n", i);
fclose(fp);
}
}
0279デフォルトの名無しさん
2005/06/09(木) 00:14:36: の両側の型が同じ(と見なせる)なら問題ない。
9899:1999 だと両方が void でも OK となっている。
0280デフォルトの名無しさん
2005/06/09(木) 00:16:28printf() 自体は戻り値の型が int なんで。void ですら OK という意味ね。一応補足。
0281デフォルトの名無しさん
2005/06/09(木) 00:33:55printf(rand() % 2 ? "表" : "裏");
とかでもいいよ
0282デフォルトの名無しさん
2005/06/09(木) 00:46:46求めて出力するプログラムなのですが、積と一致しても「一致しません」が最後にでてしまいます。
どうすれば、出ないようになるでしょうか?ご教授お願いします。
#include <stdio.h>
int main(void)
{
int data[20][20];
int a, i, j, k;
for(i = 0; i < 20; i++)
for(j = 0; j < 20; j++)
data[i][j] = i * j;
printf("1つの整数を入力してください(k)\n");
scanf("%d", &k);
for(i = 0; i < 20; i++)
for(j = 0; j < 20; j++)
if(k == data[i][j])
printf("(%d,%d)\n", i, j);
else if(k != data[i][j]);
printf("一致しません\n");
return 0;
}
0283デフォルトの名無しさん
2005/06/09(木) 00:52:280284デフォルトの名無しさん
2005/06/09(木) 00:58:060285デフォルトの名無しさん
2005/06/09(木) 00:58:33ありがとうございます
これはお礼です
http://www.happy-page.jp/omosiroflash/100.swf
0286デフォルトの名無しさん
2005/06/09(木) 01:21:06私へのレスかな…
確かにそこはおかしいですね。
そこを直したら、出力がさらにおかしくなってしまいましたorz
0287282
2005/06/09(木) 01:21:320288デフォルトの名無しさん
2005/06/09(木) 01:33:58CプログラミングFAQ―Cプログラミングのよく尋ねられる質問 新紀元社情報工学シリーズ
スティーブ サミット (著), Steve Summit (原著), 北野 欽一 (翻訳)
0289283
2005/06/09(木) 01:36:49どうおかしいのか教えて欲しい。
一応言っておくが、「一致しません」が300個以上表示されるのは正しい動作だ。
0290デフォルトの名無しさん
2005/06/09(木) 01:38:29int flag=0;
〜〜
for(i = 0; i < 20; i++)
for(j = 0; j < 20; j++)
if(k == data[i][j]){
flag=1;
printf("(%d,%d)\n", i, j);
}
if(flag==0)
printf("一致しません\n");
0291デフォルトの名無しさん
2005/06/09(木) 01:49:29それでうまく動作しました。
有難うございました。
0292デフォルトの名無しさん
2005/06/09(木) 01:59:14>>276
>>278 レスありがとうございます。
278を参考に作ってみようと思います。
初心者なので286は少々難しいです。イメージと
してはわかるのですがどうもエラーが出てしまいます。
あと試してみればわかるとは思うのですが、アドレスで
指定するとfopenのファイル名に""(ダブルクォート)はいらないの
でしょうか?
0293282
2005/06/09(木) 02:13:40度々すいません。
変数?flagについて調べようと思い手持ちの参考書を調べても載ってなくて、
検索してみたのですがいいページが見つかりませんでした。
もしよろしければ、簡単に説明をお願いします。
0294デフォルトの名無しさん
2005/06/09(木) 02:29:220295デフォルトの名無しさん
2005/06/09(木) 04:10:05int doraemon=0;
〜〜
for(i = 0; i < 20; i++)
for(j = 0; j < 20; j++)
if(k == data[i][j]){
doraemon=1;
printf("(%d,%d)\n", i, j);
}
if(doraemon==0)
printf("一致しません\n");
0296293
2005/06/09(木) 09:13:020297デフォルトの名無しさん
2005/06/09(木) 10:05:210298デフォルトの名無しさん
2005/06/09(木) 12:41:15誰か教えてください。
0299デフォルトの名無しさん
2005/06/09(木) 12:54:01a.c b.cなどと別々のファイルから1つの実行ファイルを作るのが分割コンパイル。
他のファイルに存在する関数を使いたいときには、ヘッダファイルを作ってその中にその関数の宣言を書いておき、
それを関数を使いたいファイルと、実際に関数の中身があるファイルの双方がincludeする。
グローバル変数も同様。
0300デフォルトの名無しさん
2005/06/09(木) 12:56:24概念がわかっててやり方がわからないなら、本をよむよりは実際に試し
てみて覚えたほうがいいよ。試しててわからないことがあれば、具体例
でここで聞くべし。
0301え
2005/06/09(木) 13:30:36http://www.at21.net/
0302288
2005/06/09(木) 13:31:130303デフォルトの名無しさん
2005/06/09(木) 16:27:05C言語の変数宣言をBNFで定義せよ。
ただし、下記はすでに定義されているものとする。
また、データ型に関するキーワードは以下のものだけとする。
int,double,struct,long,short,static
よろしくお願いします。
0304デフォルトの名無しさん
2005/06/09(木) 17:30:57printf("dx = ");scanf("%f", &dx);を書かずにdx = 0.0001;とするとうまくいくのですが。教えてください。レス違ったらすみません。
#include <stdio.h>
#include <math.h>
main(){
double dx, a, b = 0, k, pai;
printf("dx = ");
scanf("%f", &dx);
for(k = 0;k < 10;k += dx){
a = -1*k*k;
b += dx*exp(a);
}
pai = 4*b*b;
printf("pai = %f", pai);
return 0;
}
0305デフォルトの名無しさん
2005/06/09(木) 17:37:31scanf("%lf", &dx);
0306デフォルトの名無しさん
2005/06/09(木) 17:52:240307デフォルトの名無しさん
2005/06/09(木) 19:45:528
7 5
6 2 4 3
1 5
こんな感じだと思うのですが、これをそのままprintfで出力する方法はないでしょうか?
これをそのまま出力するのではなくて、たとえばこの図の値の数は9個で4段ですが、値の数によって段数も変わるようにしたいです。
宜しくお願いします。
0308デフォルトの名無しさん
2005/06/09(木) 20:29:01「ヒープソートの構造」ってなんだかしらんが、
>307のようなツリー構造はデータ構造を舐めながら地道に書いていけばよろしい。
0309デフォルトの名無しさん
2005/06/09(木) 20:32:58「ヒープの構造」な
0310デフォルトの名無しさん
2005/06/09(木) 20:34:350311デフォルトの名無しさん
2005/06/09(木) 20:39:01少し勘違いしてましたが、本当に何方かご教授お願いします。
0312デフォルトの名無しさん
2005/06/09(木) 20:49:50else if(k != data[i][j]); ←ここ注目
printf("一致しません\n");
return 0;
}
0313307
2005/06/09(木) 21:11:36ちなみに再帰は関係ないと思います。
0314デフォルトの名無しさん
2005/06/09(木) 21:20:16ツリーを書くプログラムを何回か書いたが
再帰が一番楽だった
0315307
2005/06/09(木) 21:34:470316デフォルトの名無しさん
2005/06/09(木) 21:42:020317デフォルトの名無しさん
2005/06/09(木) 21:44:54なんか大学や専門学校の宿題で出そうな問題だな
0318デフォルトの名無しさん
2005/06/09(木) 21:44:550319デフォルトの名無しさん
2005/06/09(木) 21:46:39いや、ただ単に自分で思っただけだよ。
バカなもんでわからない
0320デフォルトの名無しさん
2005/06/09(木) 22:01:22http://pc8.2ch.net/test/read.cgi/tech/1118165596/
>>315
http://pc8.2ch.net/test/read.cgi/tech/1118072681/
0321デフォルトの名無しさん
2005/06/09(木) 22:04:230322デフォルトの名無しさん
2005/06/09(木) 22:10:07そう怒るなw
難しい問題にでも答えてくれる人はそうそういないよ。
0323デフォルトの名無しさん
2005/06/09(木) 22:31:32こんなので良いか? 桁数とかハードコードだから適当に直してくれ。
void printheap(int *data, int size){
int i,j,k,spc;
for(i=1,j=0; j<size;i++) j+=i;
spc=(i-1)*2;
for(i=0,j=0,k=0; i<size; i++){
if(j++==0){
printf("%*c",spc,' ');
k++;
spc-=2;
}
printf("%4d",data[i]);
if(j==k || i==size-1){
printf("\n");
j=0;
}
}
}
0324デフォルトの名無しさん
2005/06/09(木) 22:48:32#include<stdio.h>
int main(void){int i,j,f;for(i=2;i<101;++i){for(j=f=2;j<i;j++)if(i/j*j==i){f=0;
break;}if(f)printf("%d\r",i);}return 1;}
0325デフォルトの名無しさん
2005/06/09(木) 23:02:55int main()
{
int x;
double y;
for(x = 0, y = 0.0; x < 10; x++, y += 0.1){
printf("%d %lf\n", x, y);
}
for(x = 0, y = 0.0; y < 1.0; x++, y += 0.1){
printf("%d %lf\n", x, y);
}
return 0;
}
二つ目のfor文のカウンタの更新のところで、
y += 0.1となっているんです。
これをコンパイルして、実行してみると、
一つ目のfor文の方は0〜9までしか表示されないのに対し、
二つ目は0〜10まで表示されてしまうんです。
繰り返しの条件かどこかに何かを付け加えれば良いと聞いたのですが、
教えてください。
0326デフォルトの名無しさん
2005/06/09(木) 23:06:45原因は浮動小数点数の誤差。
0327デフォルトの名無しさん
2005/06/09(木) 23:07:03ありがとうございます
0328311
2005/06/09(木) 23:07:39入力した値が積と一致した時はflagの値を1として
一致しなかった時はflagの値を0としている
という意味で合ってますでしょうか?
0329デフォルトの名無しさん
2005/06/09(木) 23:07:50やっぱり、yが小数のままではまずいですか?
0330デフォルトの名無しさん
2005/06/09(木) 23:11:24for (x = 0, y = 0.0; y < 1.0 - DBL_EPSILON; x++, y += 0.1)
ならいけるんじゃないかな。
DBL_EPSILONはfloat.hに定義されてる
くわしくはぐぐってみてね。
0331デフォルトの名無しさん
2005/06/09(木) 23:12:32↓を実行してみて。
#include<stdio.h>
int main(void){
printf("%.30f\n", 0.1);
return(0);
}
0332デフォルトの名無しさん
2005/06/09(木) 23:13:13分かりました。
ありがとうございました。
重ねて申し訳ないんですが、
「%○○」とかはやっぱり関係無いんでしょうか?
0333デフォルトの名無しさん
2005/06/09(木) 23:13:39一致しなかった時はflagは0のまま
~~~~
0334329
2005/06/09(木) 23:16:15ありがとうございます。
今は出来ないので、明日やってみます。
0335325
2005/06/09(木) 23:21:56やってみます。
ありがとうございました。
0337デフォルトの名無しさん
2005/06/09(木) 23:56:17関係ない。つーか>326の解答が必要かつ充分。
0.1+0.1は0.2ではなく、0.199999999999998とか2.000000000000001になるって話。(桁数は適当)
だから、floatやdoubleを==で比較してはいけない。まず一致することは無いからな。
比較したいときは誤差の存在を考慮に入れた比較をする必要がある。
%dとか%lfはprintfやscanfなどで使える書式指定用の文字。
ぐぐれば解説してるページがあるはず。
書式を指定するだけなので、変数はいじらない=動作には影響は無い。
0338デフォルトの名無しさん
2005/06/10(金) 01:22:290339337
2005/06/10(金) 01:31:54ちょっと誤解を招く表現だった。
他の部分に影響は無い、という事。
0340デフォルトの名無しさん
2005/06/10(金) 03:15:18それから atoi をアトイって発音してもいいですか?
0341デフォルトの名無しさん
2005/06/10(金) 03:19:100342デフォルトの名無しさん
2005/06/10(金) 03:33:58ASCII と見せかけて実は Adept
0343デフォルトの名無しさん
2005/06/10(金) 03:43:18宿題じゃないんだけど Cで
「配列の型にかかわらず、全要素の平均値をdouble型で返す関数」
って作ることできますか? void *とか使ったんだけどうまくいかなかった...。
できたとしても、一般的にそーいう作り方はしないの?
Cの基本は理解できた気がするけど
実際に作るとなるとどーしていいのか分らないこと多すぎ...。
116 :110:2005/06/09(木) 21:32:35
>>112
ありがとうございます!
で、実際にこのような関数が必要になった場合どうします?
関数をint用とdouble用に作ると、型が違うだけなのに同じ処理をする関数が
あって気持ち悪い。けど、他の人が使うときは分り易いと思う。
逆に1つにまとめるとコード的にはスマートだけど、他の人が使うときに
datatype があることが不親切な気がすると考えてしまうんですけど。
こーいうプログラミングの
「文法的な意味じゃない"書き方"」
っていうーのを解説してる本を見たことないので...。
0344デフォルトの名無しさん
2005/06/10(金) 04:20:35ATL Serverを調べたのですが受信のことばかりで
送信の仕方が外語文献を見てもなくて・・・
0345デフォルトの名無しさん
2005/06/10(金) 04:25:16void foo(void){
printf("foo\n");
}
int main(int argc, char **argv){
char *ptr;
ptr = argc > 1 ? "ok" : (foo(), NULL);
return 0;
}
このプログラム、GCCでコンパイルしたときに、32ビットの処理系だと何も
警告が出ないのに、64ビットの処理系だと。
warning: pointer/integer type mismatch in conditional expression
という警告がでてしまいます。C言語としては問題ないような気がするのですが、
なぜこのような警告が出るのでしょうか。
0346デフォルトの名無しさん
2005/06/10(金) 08:53:31スレ違い。寧ろ鼬害。
0347デフォルトの名無しさん
2005/06/10(金) 12:52:560348デフォルトの名無しさん
2005/06/10(金) 13:22:07webでいろいろ漁っていたら見かけた言葉なのですが,もし御存じの方いましたら
教えてください。
0349デフォルトの名無しさん
2005/06/10(金) 13:30:430350デフォルトの名無しさん
2005/06/10(金) 13:32:280351デフォルトの名無しさん
2005/06/10(金) 13:36:120352デフォルトの名無しさん
2005/06/10(金) 13:37:51>>1 読め
>>348
http://www.google.co.jp/
0353デフォルトの名無しさん
2005/06/10(金) 13:38:000354デフォルトの名無しさん
2005/06/10(金) 13:38:120355デフォルトの名無しさん
2005/06/10(金) 13:38:23「フルスクラッチ」ってのは「ぜんぶ自分で作る」という意味。
和製英語ではないらしいんだが、英語では普通 full scratch とは言わ
ないで from scratch と言う。
プログラミング的には、ライブラリなど既存のパーツを使わないで、ぜ
んぶ自分で書くという意味ではないだろーか。
0356デフォルトの名無しさん
2005/06/10(金) 13:40:030357デフォルトの名無しさん
2005/06/10(金) 15:14:430358デフォルトの名無しさん
2005/06/10(金) 15:15:550359デフォルトの名無しさん
2005/06/10(金) 18:01:57フルカスタムは言うことがある。
0360デフォルトの名無しさん
2005/06/10(金) 18:17:27フルカスタムだと、「全てがカスタマイズ可能」みたいに聞こえる(w
0361デフォルトの名無しさん
2005/06/10(金) 19:14:30やる人はいないと思うけど、可能ではある。
0362デフォルトの名無しさん
2005/06/10(金) 19:31:52gcc3.3.3(cygwin special)で199901になったけど
これ以外の値になることはないんですか?
0363デフォルトの名無しさん
2005/06/10(金) 19:32:220364デフォルトの名無しさん
2005/06/10(金) 20:33:220365デフォルトの名無しさん
2005/06/10(金) 20:44:28目的によって使い分けるもので「どっちがいいか?」というものではない。
0366デフォルトの名無しさん
2005/06/10(金) 21:56:15void main(void)
{
printf("\x1b[0;36m");
printf("うんこばすたー");
return ;
}
これをBCCでコンパイルしても「[0;36mうんこばすたー」と表示されて
うまく水色にならない・・。機種の問題ですか?
0367デフォルトの名無しさん
2005/06/10(金) 21:58:23どうしてもコーディング規約を守ってくれません。
俺の部下だけど先輩なんだよなぁ・・・。
どうしたらコーディング規約を守ってくれるようになりますか?
0368デフォルトの名無しさん
2005/06/10(金) 22:09:06そいつにどーしても守る気がないなら排除すれ。と、XPやアジャイルの本には書いてありますた。(まじ)
0369デフォルトの名無しさん
2005/06/10(金) 22:32:5032BitEXEの場合はWin9xでしかできない。
代わりにWin32APIの中にコンソールの色を変更する関数がある。(9xでも使える)
0370デフォルトの名無しさん
2005/06/10(金) 22:46:51ディスクに書き込みは完了したと思っていいんですか?
それとも関数から戻って来てもディスクに書き込みを続けている
可能性はありますか?
0371370
2005/06/10(金) 22:48:330372デフォルトの名無しさん
2005/06/10(金) 22:48:53ある。
0373デフォルトの名無しさん
2005/06/11(土) 00:54:01もはやCの範疇ではない
HDD が write back cache を持っている可能性をどうやって否定するんだ?
書き込み先がネット越しの仮想ドライブだったら??
0374デフォルトの名無しさん
2005/06/11(土) 01:11:430375デフォルトの名無しさん
2005/06/11(土) 01:22:15そもそもディスクとは限らない。
テープかも知れないし、USBメモリかも知れない。
0376デフォルトの名無しさん
2005/06/11(土) 01:49:460377デフォルトの名無しさん
2005/06/11(土) 01:53:50まさかりかついだきんたろう
0378デフォルトの名無しさん
2005/06/11(土) 01:54:470379デフォルトの名無しさん
2005/06/11(土) 02:03:38とかしないだろう
という前提でプログラム作ってます
0380デフォルトの名無しさん
2005/06/11(土) 02:07:35どっちもあまり多用すべきものではない。そうしたものの全部が
有害というわけでもないが。
名前空間を汚染しないという意味ではファイルスコープまたは関数スコープの
static変数のが害が少ないが、もともと有害なそうした変数の存在が
目立たなくなるという欠陥もある。
0381デフォルトの名無しさん
2005/06/11(土) 02:27:30あ、そのプログラム商用じゃなきゃ貰ってformatしてみたい♪
昔シェルスクリプトであっさりc:/を殺したうんこです
戯言スマンス
0382('A`)
2005/06/11(土) 02:33:020383デフォルトの名無しさん
2005/06/11(土) 02:36:12本当です
なまじプログラムができる為に…
他の就職先があるのに…
虚弱体質なのに…(以下略
ぼろぼろになって幻をみて入院して
退院直後に3日間完徹してまたぶっ倒れて点滴打ってまた徹夜できます
トリップできますから
0384デフォルトの名無しさん
2005/06/11(土) 02:37:31ものによっては不便とか面倒とか非現実的とかそういうことを度外視すればまぁ本当。
0385デフォルトの名無しさん
2005/06/11(土) 03:03:07なぜ冒頭でエスパー君は怒っているのですか?
0386デフォルトの名無しさん
2005/06/11(土) 03:05:05たばこだろう
0387デフォルトの名無しさん
2005/06/11(土) 03:14:45自分に自信が持てなかった僕もC言語を始めてからみるみる成績アップ。
身長も10cm伸び近視も解消、一日10分のプログラミングで見違えるようなたくましい体に。
阿修羅級の功徳兵器により豪運が唸り爆運が炸裂、万札風呂に女の子二人と共に入浴とかも出来ます。
0388デフォルトの名無しさん
2005/06/11(土) 03:17:10インラインアセンブラを使わなきゃレジスタとかはいじれないよ
0389デフォルトの名無しさん
2005/06/11(土) 03:17:48式を分解してみたら?
0390デフォルトの名無しさん
2005/06/11(土) 03:20:23シーとニーを間違えたのではないだろうか?
いやデズニ─ラソドの話だけど
0391('A`)
2005/06/11(土) 04:32:242chもC言語で出来てるって言うし
C言語をがんばってみます
0392デフォルトの名無しさん
2005/06/11(土) 05:51:251. まず、
int (* MyFunc)(int);
などと書いて関数アドレスを入れる変数を定義するようですが、この書き方がよくわからない。
(* MyFunc)の部分をどう考えたらいいのでしょうか?
int (__cdecl *) MyFunc(int);
とかだったら納得いくような気がするんですが・・・
2. そして、
int (* MyFunc)(int);
のMyFuncを使ってパラメータの数などを変更したいのですが、この場合のキャストがどのように書くのかわからない。
x = (int (* MyFunc))(int, double)(1, 2);
などとやってもダメ。どう書くといいのでしょうか?
0393デフォルトの名無しさん
2005/06/11(土) 06:21:451・scanf・getchar・getche・getch で入力を求めた時、ただENTERを押した場合
何が返るか、バッファに何が入るか 、が良く分かりません
scanfは何もなし、getcharは\n、getcheは\r で宜しいでしょうか?
2・型の拡張の関係ですが、 short型 * unsigned long型 はunsigned long型になると
本には書いてあるのですが、shortが負の数の場合でもunsigned long型なのでしょうか?
他の型になるのでしょうか?
3・以下のプログラムは1から10までの値を0.1づつ表示するプログラムです
コンパイルして実行すると、2.8と表示されるべき所が2.799だったり誤差が出ます
float f; ではなく double f; と宣言すると誤差が出ません。 なぜでしょうか?
#include <stdio.h>
int main(void){
float f;
for(f=1.0; (int) f<=9; f=f + 0.1)
printf("%f \n", f);
return 0;}
宜しくお願いします
0394デフォルトの名無しさん
2005/06/11(土) 06:27:431. ばらして考えれば分かりやすいかと。
1) 識別子 MyFunc を宣言する。 -> MyFunc
2) MyFunc はポインタだ。 -> *MyFunc
3) なんのポインタかというと、関数へのポインタだ。 -> *MyFunc()
4) その関数の引数はintだ。 -> *MyFunc(int)
5) その関数の戻り値はintだ。 -> int *MyFunc(int)
6) intへのポインタを返す関数の宣言のできあがり。あれ?
3')ポインタの'*'より、関数の'()'の方が優先順位が高いので、
()で括ってポインタの優先順位を上げてやる。 -> (*MyFunc)()
4')その関数の引数はintだ。 -> (*MyFunc)(int)
5')その関数の戻り値はintだ。 -> int (*MyFunc)(int)
6')intを返す関数のポインタのできあがり。
2.
x = ((int (*)(int, double))MyFunc)(1, 2);
0395デフォルトの名無しさん
2005/06/11(土) 07:17:24名前空間の汚染が理由なら関数化もできない
ちなみに俺は関数内 static に関しては先だって検討する手段が腐るほどある
例えば親側の auto にしてアドレス渡しなど
強いて言うなら定数の配列くらいか? これも extern が頭にちらつくけどね
0396デフォルトの名無しさん
2005/06/11(土) 08:00:271. scanfでも%cとかでは\nを受け取れる。
2. 負の場合でもunsigned longにされる。まずlongにしてからULONG_MAX + 1を加えた値になる。
3. そりゃfloatの方がdoubleより精度が悪いから。doubleもfloatも内部は2進法を使っていて、
0.1は2進法では無限小数になってしまう。だからdoubleでも誤差が出ることはある。
0397デフォルトの名無しさん
2005/06/11(土) 08:12:231. printf 等で確認すればいい、scanf は戻った後の値が有効性を返却値で示す
2. 変換後の型で元の値を表現できない場合、結果は未定義
3. 0.1 が出てきてる人に説明は不用と思量する
0398デフォルトの名無しさん
2005/06/11(土) 08:14:26s/値が/値の/
3. 0.1 が double 型であることはよろしいか?
0399デフォルトの名無しさん
2005/06/11(土) 08:45:38整数同士の変換に未定義の物は存在しない。
処理系依存の場合はあるが、signed→unsignedでは396のようになり処理系依存ではない。
0400デフォルトの名無しさん
2005/06/11(土) 11:21:03ビットシフトはなんの役に立つのでしょうか?
0401デフォルトの名無しさん
2005/06/11(土) 11:25:420402デフォルトの名無しさん
2005/06/11(土) 11:33:150403デフォルトの名無しさん
2005/06/11(土) 12:20:02あー、最初は不思議だよね。
用法は多岐にわたるが、
あんま気にしないで、次に進めばいいと思うよ。
色んなサンプルを見てるうちに、気づくことがあるだろうから。
0404デフォルトの名無しさん
2005/06/11(土) 12:37:45氏ねや
0405乙
2005/06/11(土) 12:41:100406デフォルトの名無しさん
2005/06/11(土) 12:42:37意味どおりにビットがずれると考えるか
2のn乗を手際よく計算する方法と考えるか
そんなところかね
後者は今のコンパイラなら使える場合はシフトを使うように勝手にオプティマイズしてくれるが、
シフトの知識があれば掛け算を使うにしても意識して組めるかもね
0407デフォルトの名無しさん
2005/06/11(土) 12:48:25// ̄~`i ゝ `l |
/ / ,______ ,_____ ________ | | ____ TM
| | ___ // ̄ヽヽ // ̄ヽヽ (( ̄)) | | // ̄_>>
\ヽ、 |l | | | | | | | | ``( (. .| | | | ~~
`、二===-' ` ===' ' ` ===' ' // ̄ヽヽ |__ゝ ヽ二=''
ヽヽ___// 日本
_____ _____ ______ _______
| ウェブ | | イメージ | | グループ | | ディレクトリ |
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
._________________
| │・検索オプション
└────────────────┘・表示設定
| Google検索 | I'm Feeling Lucky | ・言語ツール
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
○ウェブ全体から検索 ◎日本語のページを検索
0408デフォルトの名無しさん
2005/06/11(土) 12:48:30氏ねや
0409乙
2005/06/11(土) 12:54:090410デフォルトの名無しさん
2005/06/11(土) 16:12:100411デフォルトの名無しさん
2005/06/11(土) 17:09:47のですが、どうすればよいでしょうか?以下のようにstaticで
宣言しなおしているのですが出来ません。
#define A ---
#define B ---
main(){
for(;;){
static double X[A][B] = { 0 } ;
for(;;){ --- X[ ][ ] ---- };
}
}
0412デフォルトの名無しさん
2005/06/11(土) 17:14:27おまいら大丈夫か?特別な救急車呼ぼうか?
0413デフォルトの名無しさん
2005/06/11(土) 17:16:06>static double X[A][B] = { 0 } ;
プログラム開始時に 0 になるだけ。
>ループの頭ごとに2次元配列の全要素をを0で初期化したい
なら、その都度自分でクリアしないと。
0414デフォルトの名無しさん
2005/06/11(土) 17:23:39良く、点滴打って頑張ってると聞きますが、
何処行けば点滴打ってくれるの?
病院って待ち時間が長いイメージが有って、
0415デフォルトの名無しさん
2005/06/11(土) 17:29:12切実な人ですか?
0416デフォルトの名無しさん
2005/06/11(土) 17:33:21int a_nArray[5][10];
int i, j;
for (i = 0; i < 5; i++)
for (j = 0; j = 10; j++)
a_nArray[i][j] = 0;
もしや、こういうこと?違ったらすまん。
0417デフォルトの名無しさん
2005/06/11(土) 17:42:190418デフォルトの名無しさん
2005/06/11(土) 17:58:45doubleでmemset()は駄目だろ。
04191/3
2005/06/11(土) 18:29:36i386互換CPUにおいて、CL 6.0/7.0/7.1/8.0とgcc 3.3.3(cugwin)を用いての結果です
#include <stdio.h>
int main(void)
{
int j;
for( j = 0; j < 100; j++ )
{
printf( "%d\t%d\n", j, 1 >> j );
}
return 0;
}
以上のコードを実行すると、32の倍数で1、それ以外で0が表示されます。
ビット長以上のシフト命令はマスクがかけられたような結果になっています。
04202/3
2005/06/11(土) 18:29:59ISO/IEC 9899:1999 (E)の6.5.7 Bitwise shift operatorsの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 / 2^E2. If E1 has a signed type and a negative value, the
resulting value is implementation-defined.
となり、E2がE1のビット長より大きい場合の定義はどこにも見当たらないため、
E1 / 2^E2の解釈より、0が返されるものと推測できます。
04213/3
2005/06/11(土) 18:30:20mov eax,1
mov ecx,dword ptr [j]
sar eax,cl
push eax
mov ecx,dword ptr [j]
push ecx
push offset string "%d\t%d\n" (42401Ch)
call @ILT+1170(_printf) (411497h)
add esp,0Ch
ここの、「sar eax,cl」がShift Alothmeric Rightで右シフトをしている部分と思われます。
機械語には詳しくないので、このsar命令のclが32以上の時の挙動が詳しく分かりません。
また、この命令は16bitや64bitのCPUでは挙動が変化するのでしょうか?
長くなってしまったのでまとめます。
・i386互換プラットフォーム上のCLとgccにおいて、1>>32が1となってしまうのは定義されていない動作でよろしいでしょうか?
・すれ違いかもしれませんが、問題となっているsar命令の挙動を教えてくれますでしょうか?
0422デフォルトの名無しさん
2005/06/11(土) 18:36:02static付けずに宣言すれば良いんでない?
0423デフォルトの名無しさん
2005/06/11(土) 18:36:44i386系CPUのシフト命令は下位5ビットしか見ない仕様だったと思う。
0424デフォルトの名無しさん
2005/06/11(土) 18:38:14何をトンチキなことを言うておるのだ
このイカレポンチめ
0425デフォルトの名無しさん
2005/06/11(土) 18:43:15詳しく
0426デフォルトの名無しさん
2005/06/11(土) 18:45:470427デフォルトの名無しさん
2005/06/11(土) 18:52:070428デフォルトの名無しさん
2005/06/11(土) 18:59:59全ビットを0にしても値0になるとは限らない。
殆どの環境で大丈夫だけど。
0429411
2005/06/11(土) 19:05:39とりあえずメモリ開放でOKのようなのですが、
memset()ではやはり0で初期化できないのでしょうか?
出来ればExternで宣言してポインタなしで使用したいと
考えてるので。
0432デフォルトの名無しさん
2005/06/11(土) 19:19:05ビット幅以上のシフトは未定義だとその近所に書いて有ったと思うが。
記憶違いか?
0433428は427へのレス
2005/06/11(土) 19:21:18近似値になるとも限らないんだけど。
だからさ、
#define A ---
#define B ---
main(){
for(;;){
double X[A][B] = { 0 } ; // staticを外す
for(;;){ --- X[ ][ ] ---- };
}
}
じゃだめなの?
0434デフォルトの名無しさん
2005/06/11(土) 19:22:57X3010には確かにそう書いてある。
0435デフォルトの名無しさん
2005/06/11(土) 19:35:00どこにも見当たらないって言った>421は 6.5.7 #1〜4も嫁。
たぶん#3だろ。 #4は<<の説明だろうからな。
0436411
2005/06/11(土) 19:58:39まだ試してないんですが、それで0セット可能なんでしたら
無問題です。
出来れば初期化以外の方法での0セットも出来ると助かるのですが…。
0437デフォルトの名無しさん
2005/06/11(土) 20:05:10>>416
一気にやりたいならゼロで埋めた配列を用意しておいて memcpyを使ってコピーすればいい。
0438デフォルトの名無しさん
2005/06/11(土) 20:38:450439419
2005/06/11(土) 22:12:21あ…#3にしっかりと書いてありました。
The integer promotions are performed on each of the operands. The type of the result is
that of the promoted left operand. If the value of the right operand is negative or is
greater than or equal to the width of the promoted left operand, the behavior is undefined.
情報ありがとうございました。
しっかし、こうしてみるとビットシフトは未定義だらけですね。
0440デフォルトの名無しさん
2005/06/11(土) 22:25:530441デフォルトの名無しさん
2005/06/11(土) 22:28:190442デフォルトの名無しさん
2005/06/11(土) 23:02:340443カバクラ坊
2005/06/11(土) 23:24:22あるヘッダファイルSの中で、別のヘッダファイルMをインクルードすると、
そのヘッダSをインクルードしたファイルはMファイルのシンボルも見えてしまうじゃないですか。
これを防ぐことは出来ないのでしょうか?
ご教授お願いします。
0444デフォルトの名無しさん
2005/06/11(土) 23:26:030445デフォルトの名無しさん
2005/06/11(土) 23:26:45防げないしそれで困ることも大してない。
0446カバクラ坊
2005/06/11(土) 23:28:50どうも有り難うございました。C言語の素晴らしさを改めて実感させてもらいました。
0447デフォルトの名無しさん
2005/06/11(土) 23:34:21まあ、隠蔽したいならライブラリにしちまえってこった。
0448デフォルトの名無しさん
2005/06/12(日) 00:15:390449デフォルトの名無しさん
2005/06/12(日) 00:19:460450デフォルトの名無しさん
2005/06/12(日) 00:25:08モジュールAのヘッダでBのヘッダを#includeする必要があるってことは、
AのインタフェースにBのインタフェースが現れているってことだから、
ユーザに見えるのはしょーがない
BがAのインタフェースではなく実装(*.c)にしか現れていないのなら
AのヘッダでBのヘッダを#includeする必要はなく、実装でBのヘッダを
インクルードすればよい
この場合は、ユーザに隠すことが可能だな
0451デフォルトの名無しさん
2005/06/12(日) 00:56:47> Mファイルのシンボルも見えてしまうじゃないですか。
見るためにincludeするものだ。
見えては困るものはヘッダに書くな。
0452デフォルトの名無しさん
2005/06/12(日) 01:05:330453デフォルトの名無しさん
2005/06/12(日) 01:18:030454カバクラ坊
2005/06/12(日) 01:24:43状況が伝わらなかったみたいですね。すみません。
例えば、ヘッダQ内のシンボルの宣言が、
別のヘッダTに依存している場合はどうでしょう。
この場合はQでインクルードせざるを得ませんよね。
ヘッダQは折角Tをラップして使いやすくしたのに、Tのシンボルが
名前空間を汚してしまうのはなんとなく嫌だな、という話です。
上記の状況でも、殆どの場合はキャスト等で回避することが可能なのですが、
現在それが出来ない状況でありまして。(非常に特殊なケースなのですが)
0455デフォルトの名無しさん
2005/06/12(日) 01:41:53いやだから、徹底して隠したいんなら、Tのシンボルを隠さなきゃダメだろ
それが「出来ない状況」ならあきらめろってこった
0456デフォルトの名無しさん
2005/06/12(日) 01:43:42なんで? 隠蔽するならリンク時に衝突が起こらないことを保証する必要があるぞ
0457カバ
2005/06/12(日) 01:45:02ああ、あと >>446 で既に諦めておりますので。
これ以上はスレ汚ししてしまうのは悪いので、ここで立ち去らせて頂きます。
皆様どうも有難う御座いました。
0459デフォルトの名無しさん
2005/06/12(日) 03:16:08sourceforgeにたくさんあるだろ。
0460デフォルトの名無しさん
2005/06/12(日) 03:20:560461デフォルトの名無しさん
2005/06/12(日) 05:04:55こんな感じか?
--foo.c
static int foo;
--bar.c
static int bar;
--baz.c
#include "foo.c"
#include "bar.c"
int baz = foo+bar;
foo.c bar.c をコンパイルせずに、
$ cc baz.c
製品でやると顰蹙ものだけど、個人的なアプリならやっても良いんじゃねえか。
0462デフォルトの名無しさん
2005/06/12(日) 05:36:41既に foo.h bar.h baz.h を作っていて、
.c ファイルを #include するのが嫌なら、
foo.c bar.c baz.c を全部あわせた大きな hoge.c を作るのが良いんじゃないかな。
0463デフォルトの名無しさん
2005/06/12(日) 05:50:03i--でオーバーフローして無限ループ?
for(unsigned i=10;i>=0;i--)
printf("%u\n",i);
0464デフォルトの名無しさん
2005/06/12(日) 06:03:46素直にintにしろ。
0465デフォルトの名無しさん
2005/06/12(日) 06:16:52こういうのってオーバーフローって言う?
0466 ◆bk1IKp1NkI
NGNGC言語について、わかりやすく書かれたサイトはどこでしょう?
猫でもわかる の他にはありませんか?
僕は小学生なので、わかりやすく書かれたサイトがいいです。
0467デフォルトの名無しさん
2005/06/12(日) 11:22:39アンダーフローの間違いだろ
0468デフォルトの名無しさん
2005/06/12(日) 11:27:26藻前にとっての「わかりやすい」なんて、
誰にもわからねぇよ。
0469デフォルトの名無しさん
2005/06/12(日) 11:29:22具体的なソースを晒した方がいいジャマイカ?
0470 ◆bk1IKp1NkI
NGNG0471デフォルトの名無しさん
2005/06/12(日) 11:34:02> 初心者が最初に見る、Cの解説ページ
そんなものはない。
どこを見ようがその人の勝手だ。
好きなサイト見れや
0472デフォルトの名無しさん
2005/06/12(日) 11:34:53小学生って言っても1年生か6年生かでやりようが違いすぎるよね
それから個人差もすっごく出る
ちなみに俺は4年生の頃に高校の化学�Tを読んでたり同級生にアンプ作ってる子がいたよ
0473デフォルトの名無しさん
2005/06/12(日) 11:34:58ナメられたり、やっかみに会ったりするから。
0474 ◆bk1IKp1NkI
NGNG6年です 少し学校の勉強を予習している程度です。
初心者向けでC言語講座などがあるサイトを教えてください。
0475デフォルトの名無しさん
2005/06/12(日) 11:42:45いい加減、回線切って首吊れよ。
0476 ◆bk1IKp1NkI
NGNG0477デフォルトの名無しさん
2005/06/12(日) 11:45:12スレ違い
0478デフォルトの名無しさん
2005/06/12(日) 11:46:33しろ。そして気に入った所で学べ。自分で調べる
習慣が必要だぞ。
http://www.google.com/intl/ja/
0479 ◆bk1IKp1NkI
NGNGどのスレで質問すればいいんですか?
質問ばかりですみません・・・。
0480 ◆bk1IKp1NkI
NGNGありがとうございます。色々なサイトを見てみます。
0481デフォルトの名無しさん
2005/06/12(日) 11:48:23このへんはいかが?
http://www.bohyoh.com/CandCPP/C/index.html
0482 ◆bk1IKp1NkI
NGNGありがとうございます。わかりやすくて気に入りました。
0483デフォルトの名無しさん
2005/06/12(日) 12:38:35末恐ろしい小六生だな・・・。
0484デフォルトの名無しさん
2005/06/12(日) 13:11:260485デフォルトの名無しさん
2005/06/12(日) 13:16:590486デフォルトの名無しさん
2005/06/12(日) 16:34:12float balance[10][5] という配列の balance[3][1] にポインタでアクセスしたい場合
float *p;
p=(float*)balance;
printf("%d",*(p+(3*5)+1));
のように書きますが、何故p+(3*5)+1なのかいまいち理解できません。
*pがbalance[0][0]として、順番に並べると、
[0][0],[0][1],[0][2],[0][3],[0][4],[0][5],[1][0],[1][1],[1][2],[1][3],
[1][4],[1][5],[2][0],[2][1],[2][2],[2][3],[2][4],[2][5],[3][0],[3][1]
と、p+(3*6)+1 だと思うのですが・・
配列の際[〜][5]の5のような最後の場所は、
float balance[10][5]と宣言してもメモリ上にも作られないのでしょうか?
初歩的 かつ 分かりにくい質問ですいません。
どなたか教えて頂けると助かります、宜しくお願いします
0487キャバ坊
2005/06/12(日) 16:44:14setjmp.hなのですが。
setjmpは関数の実装で隠蔽出来ませんよね…
returnしたらそこで終わりになってしまいますから。
機能拡張するならどうしてもマクロを使うしかない。
あ、一つずつ#undefしてく…ってのは無しですよw
0488デフォルトの名無しさん
2005/06/12(日) 16:45:35違うぞ。
[0][0],[0][1],[0][2],[0][3],[0][4],
[1][0],[1][1],[1][2],[1][3],[1][4],
[2][0],[2][1],[2][2],[2][3],[2][4],
[3][0],[3][1]
だ。
宣言のところの角括弧の中身は個数を表し、
使用するときは角括弧の中身は0から始まるインデックスを表す。
だからbalance[0][5]はありえない。(同様にbalance[10][0]もない)
ガンガレ!
0489デフォルトの名無しさん
2005/06/12(日) 16:50:12実行に指定するのはインデクス(オフセット)。
そしてインデクスは0から始まる。
0490デフォルトの名無しさん
2005/06/12(日) 16:59:43printf("%f"
だべ
あと、Cでの二次元配列のレイアウトがそうなってるから
それでも動くけど、正しくはbalanceを指すポインタの型は
float (*)[5]
でしょ。
0491デフォルトの名無しさん
2005/06/12(日) 17:19:44シンボルひとつにつきインクルードファイルをひとつずつ
作っていけばいかがですか
0492486
2005/06/12(日) 17:47:20int i[2]と宣言しても int[0]〜[2]まで3つの要素が入る訳ではなかったんですね
大目に配列のサイズを指定しておく癖になってて今までさっぱり気付きませんでした;;
とても助かりました、ありがとうございます!
もう一つ質問なのですが
多重間接参照(ポインタのポインタ)についてです
#include <stdio.h>
int main(void){
char *p, **mp, str[80];
p = str;
mp = &p;
printf("名前を入力してください: ");
gets(*mp);
printf("今日は %s さん", *mp);
return 0;
}
のgets(*mp); と printf("今日は %s さん", *mp); の*mpがどうして*mpになるのか
どうしても分かりません・・・ **mpのように書いてある他の例題もあるし、
*でも**でもどっちでもいいんじゃと思って変えてみてコンパイルしてみてもエラーでますし
色々WEBサイトで検索してみたのですがさっぱりです><
私的には、ややこしくて、こんがらがってる文字列定数がらみかな?とも思うのですが
どなたか猿にでも分かるように解説していただけませんか?
宜しくお願いしますm(_ _)m
0493デフォルトの名無しさん
2005/06/12(日) 17:51:030494デフォルトの名無しさん
2005/06/12(日) 17:54:03pはpointer to strで、mpはpointer to pになる。
よってmpはpointer to pointer to strになる。
mpをdereferenceするとpointer to strとなる。
つまりtypeof(*mp) == char*となる。
0495494
2005/06/12(日) 17:59:04pはpointer to str[0]で、mpはpointer to pになる。
よってmpはpointer to pointer to str[0]になる。
mpをdereferenceするとpointer to str[0]となる。
つまりtypeof(*mp) == pointer to str[0]になる。
str[]に対してstrは&str[0](pointer to str[0])と同じなので、
*mpはstrと同じになる。
0496デフォルトの名無しさん
2005/06/12(日) 19:14:54それが今になってさらに無性に気になってきたので聞かせてください
1つ目は関数の前の int や void の意味
2つ目は return の意味
return を使う場合は int main() とか、関数の前に int をつけなければ
使えないみたいなんですが、よく例のソースコードについている return 0; を
つけなくてもエラーは出ませんし、ちゃんとプログラムは動きますし
大変初歩的なことは承知なのですが御教授お願いします
0497デフォルトの名無しさん
2005/06/12(日) 19:17:03関数がreturnする値の型。
> returnの意味
値を返す。
ちなみに、main()では何も値を返さずに末尾に達した場合には
return 0;したのと同義であることが規格で定められている。
0498デフォルトの名無しさん
2005/06/12(日) 19:21:03スピーディーな回答ありがとうございます
main 以外の関数では必ず return を記述する必要がある、ということでしょうか
return する値の型を色々変えてみて試してみようと思います
0499デフォルトの名無しさん
2005/06/12(日) 19:40:44俺が読んだ入門書には載ってなかった。
正直、printf系の関数以外で引数が可変の関数を知らない・・・
0500デフォルトの名無しさん
2005/06/12(日) 19:45:48#include <stdio.h>
#include <stdarg.h>
void func(int count, ...) {
int i, num;
va_list ap;
va_start(ap, args);
for (i=0; i<count; i++) {
num = va_arg(ap, int);
printf("%d\n", num);
}
va_end(ap);
}
0501デフォルトの名無しさん
2005/06/12(日) 19:47:16#include <stdio.h>
#include <stdarg.h>
void func(int count, ...) {
int i, num;
va_list ap;
va_start(ap, count);
for (i=0; i<count; i++) {
num = va_arg(ap, int);
printf("%d\n", num);
}
va_end(ap);
}
func(3, 1, 2, 3);
と呼ぶと
1
2
3
と出力する
0502デフォルトの名無しさん
2005/06/12(日) 21:18:29fopen("C:\Documents and Settings\Dai\My Documents\C\test\test.txt","w")
としてもfopenに失敗してしまいます
パスの指定方法がおかしいと思うのですが、正しいパスの書き方を教えてください
0503デフォルトの名無しさん
2005/06/12(日) 21:20:06\はエスケープ文字だから、\自体を表すには\\と書かなければならない。
0504デフォルトの名無しさん
2005/06/12(日) 21:27:25できました!
ありがとうございます
0505デフォルトの名無しさん
2005/06/12(日) 21:36:35学校の課題を2ちゃんで聞くのはやめましょう
0506デフォルトの名無しさん
2005/06/12(日) 21:38:470507デフォルトの名無しさん
2005/06/12(日) 21:41:22printf 可変 なんかでググればいくらでも出てくるのに・・・
0508デフォルトの名無しさん
2005/06/12(日) 21:51:12これだから最近の馬鹿学生は
0509デフォルトの名無しさん
2005/06/12(日) 21:53:320510デフォルトの名無しさん
2005/06/12(日) 22:03:47その後添え字をつけず、str と表記すると
str[0]のアドレスの事を意味するのか、str文字列の内容全てを意味するのか
混乱しております。 教えていただけませんか?
0511デフォルトの名無しさん
2005/06/12(日) 22:14:060512デフォルトの名無しさん
2005/06/12(日) 22:22:35原則前者だが例外的に配列全体(文字列全体ではない)を意味することがある。
まずsizeof strと書くと配列の要素数80を返す。
&strと書くとstrへのポインタ、つまり(char *)[80]型になる。
strと書いた場合はstr[0]のアドレスだからchar *型。Cでは文字列を(const )char *などで扱うからこれを文字列全体を表すと言えなくもない。
0513デフォルトの名無しさん
2005/06/12(日) 22:42:49選ぼうと思っていますがどれを使おうか迷ってます。
みなさんのおすすめを教えていただけませんか?
0514デフォルトの名無しさん
2005/06/12(日) 22:43:39税率が計算されずにそのまま出てきます。
nedanはグローバル変数にしているのですが…。
#include <stdio.h>
int keisan(int, int, int);
int nedan;
int main()
{
int kingaku, zeiritsu;
printf("金額を入力して下さい=");
scanf("%d", &kingaku);
printf("\n消費税率を入力して下さい(%%)= ");
scanf("%d", &zeiritsu);
keisan(kingaku, zeiritsu, nedan);
printf("%dに%d%の消費税を加えると%d円になる\n", kingaku, zeiritsu, nedan);
return 0;
}
int keisan(int kingaku, int zeiritsu, int)
{
nedan = kingaku * (1 + zeiritsu / 100);
return 0;
}
0515デフォルトの名無しさん
2005/06/12(日) 22:44:550516デフォルトの名無しさん
2005/06/12(日) 22:50:22学生ならVisual Studio the Spokeを買え。
0517デフォルトの名無しさん
2005/06/12(日) 22:53:59税率の出し方がおかしい。
return kingaku * (100 + zeiritsu) / 100;
あと、関数定義時に仮引数名を省略できるのはC++。
0518513
2005/06/12(日) 22:57:53WindowsXPです。
0519デフォルトの名無しさん
2005/06/12(日) 23:01:05なるほど、そういうことでしたか。ありがとうございます。
0520デフォルトの名無しさん
2005/06/12(日) 23:02:12voidkeisan(int kingaku, int zeiritsu)
{
nedan = kingaku * (1 + zeiritsu / 100.0);
}
zeiritsu / 100 だとint / int 答えもintになる
zeiritsuが5だとすると 5 / 100 で 0
0521デフォルトの名無しさん
2005/06/12(日) 23:03:29>main()では何も値を返さずに末尾に達した場合には
>return 0;したのと同義である
それC++じゃね?
手元の cygwin なら
#include <stdio.h>
int main(void)
{
printf("hello\n");
}
% ./a.exe
hello
% echo $?
6
0522デフォルトの名無しさん
2005/06/12(日) 23:22:28こちらへどうぞ
http://pc8.2ch.net/test/read.cgi/tech/1118072681/
0523デフォルトの名無しさん
2005/06/12(日) 23:27:42なぜgcc-cygwinがリストの一番上にあるのかを考えろ
0525デフォルトの名無しさん
2005/06/12(日) 23:41:45規格合致性なんて後から憶えればいいんだよ
どんな処理系でもそいつのフルパワーの出し方が肝心要だろうが
目的より手段の本末転倒には反吐が出るね
0526デフォルトの名無しさん
2005/06/12(日) 23:57:21int ary[3][3] = {
1 , 5 , 10 ,
50 , 100 , 500 ,
1000 , 5000 , 10000
};
「初期化の一部だけにカッコがついている」
とか警告が出るのですが問題なしですか?
0527デフォルトの名無しさん
2005/06/13(月) 00:02:17ISO/IEC 9899:1999 5.1.2.2.3 Program termination -1より
reaching the } that terminates the main function returns a value of 0.
0528デフォルトの名無しさん
2005/06/13(月) 00:14:09int ary[3][3] = {
{ 1 , 5 , 10 }
,{ 50 , 100 , 500 }
,{ 1000 , 5000 , 10000 }
};
0529デフォルトの名無しさん
2005/06/13(月) 00:15:15,. -‐ ''"  ̄ ̄ ``丶、
i:::::::::::::::::::::::::::::::::::::::::::i |
カ ヽ:::_; ‐--、、 、---、 ;;_:| |
チ `!;{ |トNヽ }.:.:.:| |ヽ' 要
カ lf へ、| 、,. へ、ヽ;| | チ
チ ,.-!. <(')' '(')> '=、 | ェ
カ .{{〉,| '" , , ` ム }〉 、 | ッ
チ /ヾ‐l ,.---、 u i、..イ ``'| ク
カ ,.ィ_" |`''i、 〈ヨ ̄´,〉 / / | や
チ/,ノr:} ヽ ヽ `'三'"/ / ム !!
/ /,.⊥L_ \l! ` -‐' / / /|
/ / ─‐〈 `ヽ、一r''" ! |/ ̄ !ヽ
r''" .ノ 'ー─〈 __ -─‐=ニ二二) l / |
/ ( 、 二.フ |-ニ ̄ -──- | | i
0530デフォルトの名無しさん
2005/06/13(月) 00:20:10そのカンマの打ち方…
SQLerか?
0531デフォルトの名無しさん
2005/06/13(月) 00:29:39の両辺に*をほどこすと、
*p = (*p)->right
になりますが、
この2つの違いを教えてくだちい
0532デフォルトの名無しさん
2005/06/13(月) 00:32:21char c_test1[9], c_test2[9];
scanf("%s/%s", &c_test1, &c_test2);
printf("test1:%s test2:%s\n", c_test1, c_test2);}
上のプログラムを実行してmo/naと入力すると、
test1:mo/na test2:
と出力されてしまいます。
test1:mo test2:na
と出力させたいのですが、どのへんがいけないのでしょうか?
0533デフォルトの名無しさん
2005/06/13(月) 00:38:55p = &(*p)->right
p.rightのアドレスをポインタpに代入
*p = (*p)->right
p.rightの中身をpが指すアドレスに代入
int *a, b;
a = &b; // bのアドレスをaに代入
*a = b; // bの中身を*aに代入
これととよく見比べて
0534デフォルトの名無しさん
2005/06/13(月) 01:17:48main()の戻り値とかも実装定義のようだ
でもOSの機能をつかうと反則らしい。
0535526
2005/06/13(月) 08:43:46�dクス
0536デフォルトの名無しさん
2005/06/13(月) 14:01:24行単位で管理したいんだけど
追加時は最終行に追加するとして
取り出し時は先頭行から取り出したい
でもこういう構成にすると、結局メモリ上に
ファイルの内容を全部持たなきゃならなくなるんだけど
ファイルはキューへの追加・削除時に毎回保存したい
なんか、効率悪くて遅い
0537デフォルトの名無しさん
2005/06/13(月) 14:34:08行長が固定できるならリングバッファにするとか。
0538536
2005/06/13(月) 14:45:07固定できればリングにしてランダムアクセスにしたいんですけど
可変長なので・・・
DBの利用も考えたのですがガンガン追加→ガンガン削除という
ログっぽいデータでDB使うと良くないので 見合わせています
0539デフォルトの名無しさん
2005/06/13(月) 15:05:19int main(void)
{
char ch;
do {
ch = getchar();
putchar('.');
} while(ch != 'l');
return 0;
}
例えば、このようなプログラムで aaalbbbと入力した場合、bbbがバッファに
残り、もしこれがもっと長いプログラムだった場合エラーの原因となりそうなので
while(getchar()!='\n'); と空のループを作り、getcharを一回使うたびに使おうかと
考えております、考えすぎ とか 他にもっといい方法があるとかありますか?
0540デフォルトの名無しさん
2005/06/13(月) 15:28:25scanf("%*[^\n]%*c");と書けば改行までの読み捨てができる。
0541デフォルトの名無しさん
2005/06/13(月) 15:39:32便利だな
0542デフォルトの名無しさん
2005/06/13(月) 15:42:10オレには何をやりたいのか?すらわからない… orz
0543デフォルトの名無しさん
2005/06/13(月) 15:46:03scanf系の書式は正規表現とは言えない。
0544デフォルトの名無しさん
2005/06/13(月) 16:05:15漏れも初めて知った。�dクス!
もしかして正規表現ってもともとscanf系の書式を誰かが拡張させたものなんじゃ、と想像してみる。
とりあえずscanfを少し見直した。
0545デフォルトの名無しさん
2005/06/13(月) 16:11:29便利だな
0546デフォルトの名無しさん
2005/06/13(月) 16:15:24言い直すなよw
0547デフォルトの名無しさん
2005/06/13(月) 16:22:470548デフォルトの名無しさん
2005/06/13(月) 16:27:360549デフォルトの名無しさん
2005/06/13(月) 16:33:090550デフォルトの名無しさん
2005/06/13(月) 16:44:11便利だな
0551デフォルトの名無しさん
2005/06/13(月) 16:50:280552539
2005/06/13(月) 16:51:54scanfでやればよかったんですね
もう一つ質問です
#include <stdio.h>
int main(void){
int i, j;
char op;
printf("演算を入力してください: ");
scanf("%d%c%d", &i, &op, &j);
switch(op) {
case '+': printf("%d", i+j);
break;
case '-': printf("%d", i-j);
break;
case '/': if(j) printf("%d", i/j);
break;
case '*': printf("%d", i*j);
}
return 0;
}
のプログラムで、演算ができますが 計算式を入力する際、「1+1」では成功でも
「1 +1」のようにスペースを入れると失敗します
"%d%c%d"を"%d %c%d"に書き直すと「1 +1」でも、「1+ 1」でも、「1 + 1」でも、
「1 + 1」でも成功します
ですが、何故成功するようになるのかが理解できません。
教えていただけませんか?
0553デフォルトの名無しさん
2005/06/13(月) 16:56:21scanf類の書式文字列で空白類文字を書くと0個以上の空白類文字を読み捨てるという意味になるから。
0554539
2005/06/13(月) 17:05:40書式文字列で空白を書く場所はどのように決まっているのでしょうか?
"%d %c%d"ではなく "%d%c %d" や " %d%c%d"や "%d%c%d "と書くと失敗するもので;;
0555デフォルトの名無しさん
2005/06/13(月) 17:09:56"%d %c%d"なら「1 +1」は成功する。
"%d%c %d"なら「1+ 1」は成功する。
0556539
2005/06/13(月) 17:18:04"%d %c%d"なら 「1 +1」でも「1+ 1」でも「1 + 1」でも、
計算式のどこにスペースを入れても成功し
"%d%c %d"では、「1+ 1」や「1+ 1」の時と「1+1」の時だけ成功です
実はPCやコンパイラによっても違いがあるのでしょうか?
セレロン600のWINXPの無料BCC++コンパイラを使用しております
0557554
2005/06/13(月) 17:20:59554は勘違いだ。スマソ
正しくはこうだったはず。
%cは空白文字も入力として受け付ける。
%dは空白文字を受け付けないから読み飛ばす。
0558 ◆bk1IKp1NkI
NGNGあるHPに
printf("\x1b[2J")
と書くと画面が消える、と書いていたのですが、実際には変な記号のようなものが表示されるだけで、消去できません。
どうすれば画面消去できるのでしょうか?
ちなみにXPを使っています。
0559デフォルトの名無しさん
2005/06/13(月) 17:30:43スレ違い。環境依存スレへどうぞ。
#つーか激しく既出だがね。
0560 ◆bk1IKp1NkI
NGNGすみませんが既出でも教えてください。過去ログ見れないので・・・。
0561デフォルトの名無しさん
2005/06/13(月) 17:38:27このスレにもある。
0562 ◆bk1IKp1NkI
NGNGありがとうございます。今から探してみます。
0563デフォルトの名無しさん
2005/06/13(月) 17:47:220564 ◆bk1IKp1NkI
NGNG僕の見落としだったらすみません。
過去ログも検索しましたが、XPでは使えないということだけで、方法がのっていませんでした。
すみませんが、消す方法を教えてくれませんか?
0565デフォルトの名無しさん
2005/06/13(月) 17:58:59Get out here!
http://pc8.2ch.net/test/read.cgi/tech/1117984322/
http://pc8.2ch.net/test/read.cgi/tech/1107946285/
http://pc8.2ch.net/test/read.cgi/tech/1118072681/
0566 ◆bk1IKp1NkI
NGNGありがとうございます。これからはそのスレで質問すればいいんですね。
0567デフォルトの名無しさん
2005/06/13(月) 18:00:48教えたいのは山々だが、ここのスレではスレ違いだから教えられない。
0568デフォルトの名無しさん
2005/06/13(月) 18:08:070569デフォルトの名無しさん
2005/06/13(月) 18:13:07YesかNoで答えられる質問を出して、
ユーザが入力するまでの時間を計りたいんだがどうするのが一番いいのかな。
コンマ秒単位で計りたいのでdifftimeでは荒すぎるし、
clockが計るのはシステム時間だから0になっちゃうしで困りますた。
0570デフォルトの名無しさん
2005/06/13(月) 18:20:050571 ◆bk1IKp1NkI
NGNG0572デフォルトの名無しさん
2005/06/13(月) 18:26:39スレタイになんと書いてある?
0573デフォルトの名無しさん
2005/06/13(月) 18:27:45環境非依存の内容を質問するなら構わない。
0574デフォルトの名無しさん
2005/06/13(月) 18:28:12環境依存
0575デフォルトの名無しさん
2005/06/13(月) 18:30:18なんでそんなにめくじら立てるの?
0576デフォルトの名無しさん
2005/06/13(月) 18:32:06・鬱陶しいから。
・他に適当なスレがあるから。
・環境を聞き出して回答するのが面倒だから。
0577デフォルトの名無しさん
2005/06/13(月) 18:32:31printfだってライブラリを使っているに過ぎないわけだし、内部ではシステムコールだって呼んでいるわけだし。
0578デフォルトの名無しさん
2005/06/13(月) 18:32:31>>1
> 標準Cではできない事の質問は使用している開発環境のスレへGo!
0579デフォルトの名無しさん
2005/06/13(月) 18:33:22・鬱陶しいから。
・他に適当なスレがあるから。
・環境を聞き出して回答するのが面倒だから。
それってお前の主観的な感想でしかないよな。
0580デフォルトの名無しさん
2005/06/13(月) 18:34:03ここはCのスレで、他のスレと連動しているわけではないんだから。
0581デフォルトの名無しさん
2005/06/13(月) 18:34:36そう思うなら、「環境依存上等!1が全部答えます」スレでも
建てれば?
0582デフォルトの名無しさん
2005/06/13(月) 18:35:27別に1が教えなくてもいいんじゃない?
お前が仕切るなよ。
0583デフォルトの名無しさん
2005/06/13(月) 18:36:010584デフォルトの名無しさん
2005/06/13(月) 18:36:35ファイルからデータを読み込んで出力する時に数字だけ読み込んで出力する、次に
アルファベットだけ読み込んで出力するにはどうしたら良いのでしょうか?
ファイルの形式
1 a
2 b
3 c
.
.
.
26 z
0585デフォルトの名無しさん
2005/06/13(月) 18:36:49それも主観的な感想に過ぎないね。
感想なんか聞きたくないよ。
0586デフォルトの名無しさん
2005/06/13(月) 18:38:19おまえはこのスレの1を知らないな。
>C言語なら、オレに聞け!
>1 名前:ビル・ジョブス 投稿日:2000/09/03(日) 21:43
> おれは25才、3年間プログラムを一生懸命作ってきた。
> C言語しか知らないがC言語なら誰にも負けない...
0587デフォルトの名無しさん
2005/06/13(月) 18:39:51放置した方がいいと思ったけど、丁寧に返答しとくね。
去ね
0588デフォルトの名無しさん
2005/06/13(月) 18:40:47どう出力したいのか詳しく。
>>585
>583は感想ではなく命令だろ。
0589584
2005/06/13(月) 18:44:16アルファベットだけ読み込んでそのままa b c ... zと表示させたいです。
0590デフォルトの名無しさん
2005/06/13(月) 18:46:27命令なんてありえない。
だとすれば、その意図は感想だよ。
0591デフォルトの名無しさん
2005/06/13(月) 18:48:29char buf[BUFFER_SIZE];
FILE * fp = fopen(dataFile, "r");
while (fgets(buf, sizeof(buf), fp)) {
printf("%d\n", atoi(buf));
}
rewind(fp);
while (fgets(buf, sizeof(buf), fp)) {
char alphabet[BUFFER_SIZE];
sscanf(buf, "%*d%s", alphabet);
printf("%s\n", alphabet);
}
fclose(fp);
これだけ部品を用意しておけば後は適当に加工できるっしょ。
0592デフォルトの名無しさん
2005/06/13(月) 18:49:42βもやはり主観的な感想なんじゃねーの。
0594デフォルトの名無しさん
2005/06/13(月) 19:12:41いいや、客観的な感想だ。
0595デフォルトの名無しさん
2005/06/13(月) 19:14:36客観的事実。
0596デフォルトの名無しさん
2005/06/13(月) 21:33:32適切なスレを選択できない
あなたの頭の悪さの言い訳にもなりませんね。
0597デフォルトの名無しさん
2005/06/13(月) 22:14:05答えのない問いをつきつけて困惑する様を楽しんでいる悪趣味が見え見え
0598デフォルトの名無しさん
2005/06/13(月) 22:22:35http://pc8.2ch.net/test/read.cgi/tech/1114329636/
があると思ってるんだ
0599デフォルトの名無しさん
2005/06/13(月) 22:56:000600デフォルトの名無しさん
2005/06/13(月) 23:08:07甘えすぎだっつの。ガキかお前。
0601デフォルトの名無しさん
2005/06/13(月) 23:26:35甘えてるのはそっち
自分の主張を定義しそびれた/持たずに発言した己の愚行を
人の落ち度に便乗して誤魔化そうとしているだけ
0602デフォルトの名無しさん
2005/06/13(月) 23:32:420603デフォルトの名無しさん
2005/06/13(月) 23:44:110604デフォルトの名無しさん
2005/06/14(火) 00:00:060605デフォルトの名無しさん
2005/06/14(火) 00:04:580606デフォルトの名無しさん
2005/06/14(火) 01:32:54何百年も続く伝統的な和菓子なんていうものもあるくらいだから
相当昔ではないかと思うんですが、砂糖なんてとれるのは沖縄あたり
でサトウキビくらいなもんですよね?中国ですか?
0607デフォルトの名無しさん
2005/06/14(火) 01:34:060608デフォルトの名無しさん
2005/06/14(火) 01:35:160609デフォルトの名無しさん
2005/06/14(火) 09:40:05適切なスレを選択するのは、
質問者・見る人の義務だろう。
このスレは、標準Cの範疇に関する質問スレだ、
と>>1に書いているのに、考えもなしに質問する方が怠慢だ。
0610デフォルトの名無しさん
2005/06/14(火) 09:47:288世紀に唐僧鑑真が来日した際に黒砂糖500斤をもたらしたという説があるから
そのときじゃね?
0611デフォルトの名無しさん
2005/06/14(火) 11:34:210612デフォルトの名無しさん
2005/06/14(火) 18:08:42syntax sugarの直訳だから、これが日本に入ってきてすぐじゃないか?
0613デフォルトの名無しさん
2005/06/14(火) 18:51:37超えている場合にif文で警告を出すには、どうすればいいのですか?
#include <stdio.h>
int main(void)
{
long n;
long *p;
scanf("%d", &n);
p = &n;
0614デフォルトの名無しさん
2005/06/14(火) 18:56:08「糖衣構文」のほうが意味もわかりやすいしー
0615デフォルトの名無しさん
2005/06/14(火) 19:06:14無理。
0616デフォルトの名無しさん
2005/06/14(火) 19:19:54そのプログラムでは、longの範囲を超える値は入りません。
0617デフォルトの名無しさん
2005/06/14(火) 19:38:31int main()
{
printf("\x1b[4;31m");
printf("色が変わってアンダーラインが付く\n");
printf("\x1b[7;32m");
printf("今度は反転です。 \n");
putchar(0x1b);
printf("[0;36m");
printf("今度は水色です\n");
printf("%c%s今度は緑\n", 0x1b, "[32m");
printf("%c%s%s\n", 0x1b, "[1;35m","こんな書き方もあります\n");
printf("\x1b[0m");
return 0;
}
WINDOWS XPではエスケープシーケンスは使えないのでしょうか?
猫でもわかるプログラミングというサイトを見ていてそれが出てきたのですが
実行しても色が変わりません。
ttp://www.kumei.ne.jp/c_lang/intro/no_26.htm
これなのですが…
0618デフォルトの名無しさん
2005/06/14(火) 19:44:21XPにエスケープシーケンス自体はある
つか、一通り目を通してから聞けよ
0619デフォルトの名無しさん
2005/06/14(火) 19:46:55無断で転載するなって書いてあるだろうがゴルァ!
スレ違いだし。
0620デフォルトの名無しさん
2005/06/14(火) 19:51:12NT系では16ビットプログラムでしかエスケープシーケンスは使えない。
58章からWindowsでの代替の方法が載っている。
>>619
これはただの引用だろ。
0621デフォルトの名無しさん
2005/06/14(火) 19:55:14主と従の構成になってないし。
0622デフォルトの名無しさん
2005/06/14(火) 19:56:14ひとつずつ理解しているので先読みしてないんですよ…。
とりあえず全部の章に目を通してみるべきですか?
>>619
URLだけ記述したほうがよかったですね、すみません。
>>620
わかりました、そちらの章を読み始めてみます。
0623デフォルトの名無しさん
2005/06/14(火) 19:56:22URL書けばいいだけの物を、転載する事も無いだろう。
禁じますとかかれてある物を何故わざわざ?
0624デフォルトの名無しさん
2005/06/14(火) 19:57:18こういううざい連中とおさらばできるかな?
0625デフォルトの名無しさん
2005/06/14(火) 20:06:51>>569 のような質問をする人が、それが標準の範疇かどうか知っていると思うか?
あなたが規格票を熟読精通してからこのスレに来ていて、それを他の人にも義務づけたいと言うなら
賛同はしないものの言っている意味はわかるが
0626デフォルトの名無しさん
2005/06/14(火) 21:19:140627デフォルトの名無しさん
2005/06/14(火) 21:22:08そう思うんなら、あんたはそういう姿勢で質問者に答えるんだね。
どうぞご勝手に。
でも、>>1を読めば分かるとおり、実装系依存の問題はスレの趣旨から外れる以上、
それを他の回答者に強要することはできんよ。
0628613
2005/06/14(火) 21:35:41それなら、long型で宣言した変数に、ユーザーが任意の数値を入力するとして
その数値がlong型の範囲内であるかどうかチェックする処理はどうすれば
出来ますか?
元々この問題で考えていたサンプルプログラムが上のだったもんで……
他にshort型で同じ問題があって、どちらも指定した型以外大きさで
宣言はしてはならないということなんですが。
0629デフォルトの名無しさん
2005/06/14(火) 21:47:21#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
main()
{
char buff[1024];
char *endp;
long value;
while (fgets(buff, sizeof buff, stdin)) {
if (endp = strchr(buff, '\n'))
*endp = '\0';
errno = 0;
value = strtol(buff, &endp, 10);
if (endp == buff)
puts("ぜんぜん変換できねーYO!!");
else if (errno == ERANGE)
puts("オーバーフローっす");
else if (*endp != '\0')
puts("なんかケツに数字じゃない文字があるよ");
else
printf("おめでとう!: %ld\n", value);
}
}
0630デフォルトの名無しさん
2005/06/14(火) 21:49:56fgetsはいい?
0631デフォルトの名無しさん
2005/06/14(火) 22:01:190632デフォルトの名無しさん
2005/06/14(火) 22:06:42標準の範疇かわからないなら、
まずは、自分の環境に合ったスレを探して、
そのスレに行くべきじゃないのか?
わざわざ「標準の範疇内のみ」と銘打っているスレに来る理由がわからない。
0633デフォルトの名無しさん
2005/06/14(火) 22:09:470634デフォルトの名無しさん
2005/06/14(火) 22:11:10つうかcygwinはコンパイラじゃないぞ
0635デフォルトの名無しさん
2005/06/14(火) 22:33:250636デフォルトの名無しさん
2005/06/14(火) 23:23:310637デフォルトの名無しさん
2005/06/14(火) 23:30:49http://etlab.mis.ous.ac.jp/knowledge_e/032/menu.html
0638デフォルトの名無しさん
2005/06/15(水) 00:28:05しかもアセンブラちょっちキモいぞ。
0639デフォルトの名無しさん
2005/06/15(水) 01:00:04http://www2.pos.to/~rero2/forum/lm_forum02.html
0640デフォルトの名無しさん
2005/06/15(水) 01:07:160641デフォルトの名無しさん
2005/06/15(水) 01:31:190642デフォルトの名無しさん
2005/06/15(水) 01:35:080643デフォルトの名無しさん
2005/06/15(水) 01:54:490644デフォルトの名無しさん
2005/06/15(水) 02:03:11バッテリーだか油だかしらんけど一回の充電(給油)でフツーの下町(江東区)でどのくらい走れる?
千代田区まで通勤できる?
0645デフォルトの名無しさん
2005/06/15(水) 02:21:05神戸在住
0646デフォルトの名無しさん
2005/06/15(水) 02:27:39あぁ、スマン
神戸って何かカコイイ
retern 0:
}
0647デフォルトの名無しさん
2005/06/15(水) 02:27:540648デフォルトの名無しさん
2005/06/15(水) 03:45:14>>643-646 みないたのはOKなんだなw
0649デフォルトの名無しさん
2005/06/15(水) 03:47:34ルールが変わったんだよ!
0650デフォルトの名無しさん
2005/06/15(水) 04:35:19その質問は環境依存。
江東区から千代田区までの距離を地図で測って「〜km走れる?」と聞け。
0651デフォルトの名無しさん
2005/06/15(水) 08:41:15信号〜信号までの距離でのエンジンのオンオフとか直線とカーブの割合とか
0652デフォルトの名無しさん
2005/06/15(水) 08:54:21スレ違いネタの方が未だましだと思うのだが。
0653デフォルトの名無しさん
2005/06/15(水) 10:37:560654デフォルトの名無しさん
2005/06/15(水) 10:57:16segwayとcygwinってあんま似て無いぞ('A`)
0655デフォルトの名無しさん
2005/06/15(水) 12:47:35-= ∧_∧
-=≡ ( ・∀・)
-=( つ┯つ
-=≡/ / //∧ ガッ
-=≡(__)/ )< >__∧∩
-= (◎) ̄)) ∨`Д´)/
/
0656デフォルトの名無しさん
2005/06/15(水) 12:51:21それはジンジャーだろ
0657デフォルトの名無しさん
2005/06/15(水) 12:55:17セグウェイ=ジンジャー
0658デフォルトの名無しさん
2005/06/15(水) 17:49:070659デフォルトの名無しさん
2005/06/15(水) 20:25:400660デフォルトの名無しさん
2005/06/15(水) 23:54:470661デフォルトの名無しさん
2005/06/16(木) 16:29:23で、 hogeの配列はいくつセットされたかはどうやって調べればいいのでしょうか?
0662デフォルトの名無しさん
2005/06/16(木) 16:32:44sizeof(hoge)/sizeof(hoge[0])
0663デフォルトの名無しさん
2005/06/16(木) 18:46:270664デフォルトの名無しさん
2005/06/16(木) 19:22:470665デフォルトの名無しさん
2005/06/16(木) 20:50:54いやまて順序ってつまり先に後使うとうんこ付いちゃうとかそうゆう(ry
0666デフォルトの名無しさん
2005/06/16(木) 21:27:20int型の数値から文字列に変換する関数で、戻り値に変換された文字列の先頭のポインタを返す場合
呼び出し先の関数ではstatic宣言をした配列にしないと戻り先の関数から参照できませんよね。
ですがその場合だと、呼び出し元の関数が二回連続して同じ関数を呼び出すと当然の事ながら結果は上書き
されてしまいます。
そこでこの状態に対する対処法はなにかありますか?
例
char *ItoA(int);
char *p1;
char *p2;
p1 = ItoA(1234);
p2 = ItoA(-1234);
printf("%d\n", p1);
printf("%d", p2);
の場合、呼び出し先の配列がstatic宣言されていると
-1234
-1234
と表示されてしまうのを回避したい。
お願いします。
0667デフォルトの名無しさん
2005/06/16(木) 21:30:33一つにしぼって
0668デフォルトの名無しさん
2005/06/16(木) 21:34:10C++
0669デフォルトの名無しさん
2005/06/16(木) 21:34:37staticなリングバッファで返すかしかないだろう。
0670デフォルトの名無しさん
2005/06/16(木) 21:37:021番よいのはchar *へのポインタを引数に取り、そこへ結果を書き出すようにすること。
あまりお勧めしないがItoA内部でmallocを読んでその目盛りへのポインタを返す方法もある。
ほかにもものすごく小さなプログラムなら戻り値をstrcpyでコピーするようにとコメントを書いておくという手もある。
0671デフォルトの名無しさん
2005/06/16(木) 22:48:17char p1[64] = { '\0' };
char p2[64] = { '\0' };
sprintf( p1, "%d", 1234 );
sprintf( p2, "%d", -1234 );
printf("%d\n", p1);
printf("%d", p2);
0672デフォルトの名無しさん
2005/06/16(木) 23:36:36ググって見ても、プログラムの一部だったりして使えません・・・。
アルゴリズムは何でもいいのですが・・・。
良ければ、引数が文字列(とその長さも?)とインデックスを格納する配列へのポインタなら
助かりますが、そうでなくても頑張ります。
0673デフォルトの名無しさん
2005/06/17(金) 00:36:31char p1[40];
strcpy(p1, ItoA(1234))
0674デフォルトの名無しさん
2005/06/17(金) 01:37:48vector<int> make_suffixarray(const string& str) {
vector< pair<string, int> > v;
for (int i = 0; i < str.size(); ++i)
v.push_back(pair<string, int>(str.substr(i), i));
sort(v.begin(), v.end()); // sort by first elements
vector<int> suffixarray;
for (int i = 0; i < v.size(); ++i)
suffixarray.push_back(v[i].second);
return suffixarray;
}
0675デフォルトの名無しさん
2005/06/17(金) 02:24:410676デフォルトの名無しさん
2005/06/17(金) 02:30:120677デフォルトの名無しさん
2005/06/17(金) 04:49:130678デフォルトの名無しさん
2005/06/17(金) 06:45:26質問の意味が判らん。
尻尾から頭に向かってコピーしていく変態な実装が許されてるかどうかってことか?
0679デフォルトの名無しさん
2005/06/17(金) 06:53:22質問が下手ですいません…
その通りの意味です
0680デフォルトの名無しさん
2005/06/17(金) 06:57:52格納されているともかぎらないし。
0681デフォルトの名無しさん
2005/06/17(金) 07:09:17うはw
0682デフォルトの名無しさん
2005/06/17(金) 08:35:07ま、これでも読んどけ
ttp://www.bohyoh.com/CandCPP/FAQ/FAQ00041.html
0683デフォルトの名無しさん
2005/06/17(金) 09:00:56わかってねーな
0684デフォルトの名無しさん
2005/06/17(金) 09:17:28SSE2を使った実装は(まだ)無いと思うが、使えば、
36バイトいっぺんにコピーされるので、順番と言う
概念が崩壊するね。
で、Cの規格では、それをやっても構わないことになってる。
0685デフォルトの名無しさん
2005/06/17(金) 11:05:43memcpy(str, 0x????????, n)
のようにアドレス指定ってできないのでしょうか?
VBだと
CopyMemory VarPtr(strBuf(0)), &H????????, cstrLen
とAPIでは指定できるのですが、Cだと他の方法があるのでしょうか?
ご教授願います。
0686デフォルトの名無しさん
2005/06/17(金) 11:44:29できると思うが、ここでは環境に依存した内容は扱えないので詳細はWindowsProgrammingに関したスレへ。
0687デフォルトの名無しさん
2005/06/17(金) 12:35:410688デフォルトの名無しさん
2005/06/17(金) 12:36:140689687
2005/06/17(金) 12:37:030690デフォルトの名無しさん
2005/06/17(金) 12:43:30int main(void)
{
char buf[80];
char SS[80]
printf("string=");
gets(buf);
while (strcmp(ss,"") != 0){
puts(buf);
printf("%s\n",buf);
printf("%s\n",buf);
}
return 0;
}
上記の例題で実行したら
string=
と表示されて、=の横にC languageと入力したら、
C language
C language
C language
C language
と表示されますが、C languageを10行以上表示させる方法ってありますか?
0691デフォルトの名無しさん
2005/06/17(金) 12:55:39有り難うございました。
0692デフォルトの名無しさん
2005/06/17(金) 12:57:52何をしたいのかよく判らんが、strcmp(ss, "")はssが初期化されていないので動作未定義になる。
で、一体何がしたいの?
0693デフォルトの名無しさん
2005/06/17(金) 13:01:23memset ((char *)&me),0,sizeof(me);
memset関数を利用する時に第一引数の意味がわからないんですけど。
よろしくお願いします。
0694デフォルトの名無しさん
2005/06/17(金) 13:13:53memset()の第一引き数がchar *だった頃の名残ジャマイカ。
void *memset( void *dest, int c, size_t count );
だから素直にmemset(& me, 0, sizeof(me));でいいはず。
尚、(char *) はchar * へのキャスト。
0695デフォルトの名無しさん
2005/06/17(金) 13:16:33わかりました。ありがとうございます!!
0696デフォルトの名無しさん
2005/06/17(金) 18:54:06初期化出来ていませんでしたか…どうやるのでしたっけ…?
どうしても4行しか表示されなくて…
10行以上表示できると聞いて試したいのですがやり方がわからないのです。
0697デフォルトの名無しさん
2005/06/17(金) 19:17:2010行以上出すだけなら
puts(buf);
を10回以上書けばいいだろ。
何がしたいんだ、何が。
0698デフォルトの名無しさん
2005/06/17(金) 20:47:16#include <stdlib.h>
memcpy(str, (void *)0x????????, n);
or
#include <windows.h>
CopyMemory(str, (void *)0x?????????, n);
0699696
2005/06/17(金) 21:28:590700デフォルトの名無しさん
2005/06/17(金) 21:32:330701デフォルトの名無しさん
2005/06/17(金) 21:32:44include<stdio.h>
int main(void)
{
&bnsp; char buf[80];
&bnsp; int i;
&bnsp; printf("string=");
&bnsp; fgets(buf, sizeof buf, stdin);
&bnsp; for (i = 0; i < 10; i++) {
&bnsp; &bnsp; printf("%s", buf);
&bnsp; }
&bnsp; return 0;
}
0702デフォルトの名無しさん
2005/06/17(金) 21:32:550703デフォルトの名無しさん
2005/06/17(金) 21:42:110704デフォルトの名無しさん
2005/06/17(金) 21:59:59出来ますよ。
0705699
2005/06/17(金) 22:24:340706699
2005/06/17(金) 22:25:050707デフォルトの名無しさん
2005/06/17(金) 22:34:01その調子
0708デフォルトの名無しさん
2005/06/17(金) 22:35:42#include <stdio.h>
#include <ctype.h>
int main(void)
{
char str[100],tmp[100];
int i,strl=0;
scanf("%s",str);
for(i=0;str[i]!='\0';i++){
while(isspace(str[i])!=0)
i++;
tmp[strl]=str[i];
strl++;
}
printf("%s",tmp);
}
こうやると、スペースの前で文字列が終了していることになっているようです。
0709デフォルトの名無しさん
2005/06/17(金) 22:39:43#include <stdio.h>
#include <ctype.h>
#include <string.h>
int main(void)
{
char str[100],tmp[100];
int i,strl=0;
scanf("%s",str);
for(i=0;str[i]!='\0';i++){
while(isspace(str[i])!=0)
i++;
tmp[strl]=str[i];
strl++;
}
printf("%s",tmp);
}
0710デフォルトの名無しさん
2005/06/17(金) 22:42:10もえ
0711デフォルトの名無しさん
2005/06/17(金) 22:45:50scanf("%s",str) → gets(str)
あとループ出たらtmp[strl] = '\0'
0712デフォルトの名無しさん
2005/06/17(金) 22:47:340713デフォルトの名無しさん
2005/06/17(金) 22:49:23ありがとうございました、助かりました
0714デフォルトの名無しさん
2005/06/17(金) 22:54:15#include <stdio.h>
#include <ctype.h>
int main(void) {
int c;
while ((c = getchar()) != EOF) if (!isspace(c)) putchar(c);
return 0;
}
これで十分ジャマイカ?
0715デフォルトの名無しさん
2005/06/17(金) 23:07:420716デフォルトの名無しさん
2005/06/17(金) 23:08:25仕様と違うし
0717デフォルトの名無しさん
2005/06/17(金) 23:21:53ドソマイ
0719デフォルトの名無しさん
2005/06/18(土) 00:40:12#include<stdio.h>
int main(void){int c;while((c=getchar())-EOF)if(!((c-' ')*(c-'\t')))putchar(c);
return 0;}
0720デフォルトの名無しさん
2005/06/18(土) 01:06:250721デフォルトの名無しさん
2005/06/18(土) 01:09:02isspaceは改行とかも非0を返すわけだが。
0722デフォルトの名無しさん
2005/06/18(土) 01:14:31仕様と違うし
0723デフォルトの名無しさん
2005/06/18(土) 02:06:010724デフォルトの名無しさん
2005/06/18(土) 02:15:24ファイルに出力したいのですが、そのまま出力するとマジックナンバーになってしまいます
defineで定義された名前(と値)を記録したいのですがなにか良いテクは無いでしょうか
今のところ
・define名と値をペアにした静的なテーブルを用意
・値をキーとして名前を取得
・名前をファイルに書く
としてるんですが、コンパイル時に決まっているものを
実行時にわざわざサーチして取得してるのは無駄な気がします
※defineの値に重複は無いです
0725デフォルトの名無しさん
2005/06/18(土) 02:44:55H8 gcc でググると
0726デフォルトの名無しさん
2005/06/18(土) 05:03:23構造体を定義している場所を探しているのですが、うまくみつけられません。
教えてエロい人!
0727デフォルトの名無しさん
2005/06/18(土) 05:30:48定義されてないよ。
0728デフォルトの名無しさん
2005/06/18(土) 05:46:13ありがとうございます。libspf2-1.2.5/src/libspf2/spf_config.c にある、
SPF_config_t は何なのでしょうか。てっきり、SPF_create_config が返す型で、
int とかではないから構造体かと思ったのですが…。
57 SPF_config_t SPF_create_config()
58 {
59 SPF_iconfig_t *spfic;
60
61 spfic = calloc( 1, sizeof(*spfic) );
62 if ( spfic )
63 SPF_reset_config( SPF_spfic2cid(spfic) );
64
65 return SPF_spfic2cid(spfic);
66 }
0729デフォルトの名無しさん
2005/06/18(土) 06:02:33過去使ってたけど、今のバージョンでは使われてないから定義されてないのでは?
SPF_config_tが登場するところは全部#if 0と#endifに囲まれてて、
コンパイルされないしね。
0730デフォルトの名無しさん
2005/06/18(土) 06:22:09わー、ありがとうございます。#if 0 をみのがしていました。どうもです。
0731デフォルトの名無しさん
2005/06/18(土) 14:34:38情報ありがとうございます
ググるとH8というマイコンを扱ったページがヒットします
H8用のgccで何かかっこいいテクを使ってるんでしょうか
とりあえずネットの海をクロールしてきます
0732デフォルトの名無しさん
2005/06/18(土) 15:09:36grepで探せよ
0733デフォルトの名無しさん
2005/06/18(土) 15:12:010734デフォルトの名無しさん
2005/06/18(土) 15:18:04ログ、って何で出力四天王?
文字列じゃねの?
0735デフォルトの名無しさん
2005/06/18(土) 15:34:48#define HOGE 1
str[1]="HOGE";
printf("%02X(%s)\n",HOGE,str[HOGE]);
こういうことをやってると思う。
で、いちいちstrに入れることなく
HOGEを"HOGE"として扱う方法を
彼は探している。
0736デフォルトの名無しさん
2005/06/18(土) 15:37:17コンパイラからは定数に見えているんだから、無茶
0737デフォルトの名無しさん
2005/06/18(土) 15:45:43こういうことがしたいのか?
#include <stdio.h>
#define EVAL(x) #x
#define LOG(x) printf("%s: %d: %s: %s\n", __FILE__, __LINE__, #x, EVAL(x))
#define FOO 1
#define BAR 2.0
int main() {
LOG(FOO);
LOG(BAR);
return 0;
}
0738デフォルトの名無しさん
2005/06/18(土) 15:49:15これ、どの版のCから使えるの?
0739デフォルトの名無しさん
2005/06/18(土) 15:50:38?単にそうすればええやん
printf("%s","HOGE");
0740デフォルトの名無しさん
2005/06/18(土) 15:55:19お前は本当にアホだな
0741デフォルトの名無しさん
2005/06/18(土) 16:00:56C89
0742デフォルトの名無しさん
2005/06/18(土) 16:30:10ほんとだ、thanks
0743デフォルトの名無しさん
2005/06/18(土) 17:40:060744デフォルトの名無しさん
2005/06/18(土) 17:49:31処理系依存
まあstat()が使えるんならstat()で。
0745デフォルトの名無しさん
2005/06/18(土) 17:52:51属性 : D ディレクトリ
0746デフォルトの名無しさん
2005/06/18(土) 17:58:37環境依存でしたか。 stat ありました。さっそくやってみます。
>>745
そちらのほうは何とかなっとりました。けれども、レスありがとうございまス!
0747デフォルトの名無しさん
2005/06/18(土) 21:13:58のは保障されていますよね??
0748デフォルトの名無しさん
2005/06/18(土) 21:19:47はい
0749デフォルトの名無しさん
2005/06/18(土) 21:19:55yes, sir
0750デフォルトの名無しさん
2005/06/18(土) 21:26:44サンクス
0751デフォルトの名無しさん
2005/06/18(土) 21:30:08実行されるのは aとb どっちが先だっけ
0752デフォルトの名無しさん
2005/06/18(土) 21:32:55処理系依存だったよーな。最適化の都合で、同一処理系内でも保証されてないかも。
0753デフォルトの名無しさん
2005/06/18(土) 21:33:08それは決まってない
0754デフォルトの名無しさん
2005/06/18(土) 21:36:06規格ではaが先
0755デフォルトの名無しさん
2005/06/18(土) 21:43:09うそつくなよw
0756デフォルトの名無しさん
2005/06/18(土) 21:49:07これって、「必ずどっちかが先に実行される」というのすら
規定はされてないよね?
最適化の都合なら、同時に動くこともあるよね?
0757デフォルトの名無しさん
2005/06/18(土) 22:00:54漏れはまだAもやってないけど。
0758デフォルトの名無しさん
2005/06/18(土) 22:02:58な、なんだって〜!
0759デフォルトの名無しさん
2005/06/18(土) 22:03:43しつこいが規格では未規定
0760デフォルトの名無しさん
2005/06/18(土) 22:13:17最近はCPUがたくさんあるのも珍しくないし
「同時」は普通のことだと思うので。
0761デフォルトの名無しさん
2005/06/18(土) 22:13:46未規定ってなに?不定のこと?未定義のこと?
0762デフォルトの名無しさん
2005/06/18(土) 22:27:31それはCの話ではないだろ?
ベーシックだろうが機械語だろうがコボルだろうが
0763懐かしの規格厨
2005/06/18(土) 22:28:053.4.4 未規定の動作(unspecified behavior)
この規格が,二つ以上の可能性を提供し,
個々の場合にどの可能性を選択するかに関して
何ら要求を課さない動作。
例 未規定の動作の例としては,関数の実引数の評価順序がある。
0764デフォルトの名無しさん
2005/06/18(土) 23:09:40その定義では処理系定義も含んでしまうな
0765デフォルトの名無しさん
2005/06/18(土) 23:11:15というか全般的にサッパリ・・・
0766デフォルトの名無しさん
2005/06/18(土) 23:13:120767デフォルトの名無しさん
2005/06/18(土) 23:13:23やめちまえって
そして頭の悪いロボットサラリーマンとして
搾取される側に周るがいいよ
0768デフォルトの名無しさん
2005/06/18(土) 23:14:250769デフォルトの名無しさん
2005/06/18(土) 23:19:00今後の身の振り方を考えるいい機会なんじゃないの?
0770デフォルトの名無しさん
2005/06/18(土) 23:21:440771デフォルトの名無しさん
2005/06/18(土) 23:23:38人間的にはバブルソートしないからな
0772デフォルトの名無しさん
2005/06/18(土) 23:25:15最近は公立中学の技術の教科書にもプログラミングについて載ってるからな。
やりたくもない事やらされたらなんも考えようとしないだろう。
彼はそんな中学生。
0773デフォルトの名無しさん
2005/06/18(土) 23:30:20受けてFM-TOWNSでプログラムを始めた頃がナツカス…
0774デフォルトの名無しさん
2005/06/18(土) 23:39:47C言語が出来た当初からあったんですか?それとも
適当な時期に導入されたものなんですか?
0775デフォルトの名無しさん
2005/06/18(土) 23:41:20漏れは親父が買った「マイコン」の説明書に載ってた
サンプルプログラムを打ち込んだのが最初だったな。
当時、まだ消防だった。
0776デフォルトの名無しさん
2005/06/18(土) 23:53:49つまりオタク出身プログラマ?もしくは現役オタク?
0777デフォルトの名無しさん
2005/06/18(土) 23:56:340778デフォルトの名無しさん
2005/06/18(土) 23:57:48何歳以上なら「オヤジ」に分類されるんだ?
0780デフォルトの名無しさん
2005/06/19(日) 00:15:350781デフォルトの名無しさん
2005/06/19(日) 00:27:420782デフォルトの名無しさん
2005/06/19(日) 00:34:19なんかマジレスっぽくてオモロイなw
0783デフォルトの名無しさん
2005/06/19(日) 01:06:530784775
2005/06/19(日) 01:20:250785デフォルトの名無しさん
2005/06/19(日) 01:32:18ハッピーバースデーの音楽でケーキに蝋燭が立ってて
スペースを押すと火が消える
そんな感じの漫画だったと思うんですけど、覚えてる人いますか?
0786デフォルトの名無しさん
2005/06/19(日) 01:55:34そうか、じゃあいいこと教えてやろう。
30前になるとチンゲの色がやや脱色ぎみになる。
30も半ばになるとチンゲに白髪が交じって来る
その後は白髪でいっぱいのチンコの完成だ。
チンコ見てるとどんどん年を食っていくのが良く分かるぞw
0787デフォルトの名無しさん
2005/06/19(日) 02:53:130788デフォルトの名無しさん
2005/06/19(日) 03:14:310789デフォルトの名無しさん
2005/06/19(日) 04:07:17脱毛クリームで全滅させても大丈夫かな?
毛で肛門切れたりして痛いときがあるのだが
0790デフォルトの名無しさん
2005/06/19(日) 05:43:500791デフォルトの名無しさん
2005/06/19(日) 06:16:430792デフォルトの名無しさん
2005/06/19(日) 06:18:270793デフォルトの名無しさん
2005/06/19(日) 11:33:273.4.1 処理系定義の動作(implementation-defined behavior)
未規定の動作のうち、各処理系が選択した動作を文書化するもの。
例 処理系定義の動作の例としては、符号付き整数を右シフトした場合の最上位ビットの伝播法がある。
0794ccc
2005/06/19(日) 21:10:360795デフォルトの名無しさん
2005/06/19(日) 21:12:38日本語が怪しい
0796デフォルトの名無しさん
2005/06/19(日) 21:18:24宿題なら専用スレがあるんで、そちらへどうぞ
http://pc8.2ch.net/test/read.cgi/tech/1118165596/
0797ccc
2005/06/19(日) 21:27:100798デフォルトの名無しさん
2005/06/19(日) 22:17:25ビットシフトはなんの役に立つのでしょうか?
0799デフォルトの名無しさん
2005/06/19(日) 22:19:440800デフォルトの名無しさん
2005/06/19(日) 22:20:16身も蓋もない答え方なのは仕方がない
本当にそういう場合がビシバシ出てくるから
0801デフォルトの名無しさん
2005/06/19(日) 22:23:0520年間間違って覚えてたらしいこの俺様
0802デフォルトの名無しさん
2005/06/19(日) 22:25:070803デフォルトの名無しさん
2005/06/19(日) 22:26:170804デフォルトの名無しさん
2005/06/19(日) 22:30:33unsigned char buf[4];
unsigned int n;
fread(buf, sizeof(char), sizeof(buf), FP);
n = (buf[3]<<24)^(buf[2]<<16)^(buf[1]<<8)^buf[0];
printf("n = %d\n", n);
n が符号付になってしまうんですがこういうものなんでしょうか?
符号なし整数になってほしいんですが、ドコがどういけないのかサッパリで・・
0805デフォルトの名無しさん
2005/06/19(日) 22:33:020806デフォルトの名無しさん
2005/06/19(日) 22:33:20%dは符号付整数の指定。符号なしにするには%u。
0807804
2005/06/19(日) 22:48:07ということは n は内部で符号付きとして扱われているってことでしょうか?
0808デフォルトの名無しさん
2005/06/19(日) 22:49:40いいえ、あなたの書いたとおりに解釈します。
0809デフォルトの名無しさん
2005/06/19(日) 22:54:01いいえ、printfの内部で無理矢理符号付きに解釈されているだけです
ためしにコンパイラに警告オプションをつけてコンパイルしてみなさい
警告されるから
0810804
2005/06/19(日) 22:56:16安心しました。
みなさんありがとでした。
0811デフォルトの名無しさん
2005/06/19(日) 22:56:220812804
2005/06/19(日) 22:58:15そういうことでしたか。ガッテンしました。
0813デフォルトの名無しさん
2005/06/19(日) 23:44:500814デフォルトの名無しさん
2005/06/19(日) 23:50:100815デフォルトの名無しさん
2005/06/19(日) 23:50:440816デフォルトの名無しさん
2005/06/19(日) 23:54:38m = n != 0 ? hoge - hoge / n * n : 0
とか?
0817デフォルトの名無しさん
2005/06/20(月) 00:08:28これは商用に適さないので、商用で適する関数を使え。
と言われたのですが、何を使えばいいですか?
初心者にはわからないです…
0818デフォルトの名無しさん
2005/06/20(月) 00:10:36・scanf()
戦術から練り直す必要があるが、一般的にはfgets()+sscanf()で代用できるだろう。
・gets()
無条件にfgets()に置き換え可能。
0819デフォルトの名無しさん
2005/06/20(月) 00:13:52s/使え/探せ/
もしくは
s/使え/作れ/
fgets を含むシーケンスをバラで書いているようなセンパイを見かけたら師匠は他を探せ
0820デフォルトの名無しさん
2005/06/20(月) 00:22:41適材適所
0821デフォルトの名無しさん
2005/06/20(月) 01:15:090822デフォルトの名無しさん
2005/06/20(月) 01:18:34ゲイツ板池
0823デフォルトの名無しさん
2005/06/20(月) 01:39:14> fgets を含むシーケンスをバラで書いている
これの意味がわからないのですが・・・
0824デフォルトの名無しさん
2005/06/20(月) 01:42:12failed unit は assy ごと交換
0825デフォルトの名無しさん
2005/06/20(月) 01:42:490826ビル・ジョブス
2005/06/20(月) 17:24:02例えば1BPPのビットマップをnドット右へずらしたい時どうしたらいーと思う?
0827デフォルトの名無しさん
2005/06/20(月) 17:29:27氏ねボケ
0828ビル・ジョブス
2005/06/20(月) 18:02:40さすが紳士は言う事が違うな。
0829デフォルトの名無しさん
2005/06/20(月) 18:17:120830デフォルトの名無しさん
2005/06/20(月) 18:20:24未だにいたのかと驚いた。
0831デフォルトの名無しさん
2005/06/20(月) 18:27:20どうしたもんでしょうか?
0832デフォルトの名無しさん
2005/06/20(月) 18:29:53どうしたもんでしょうか?
0833デフォルトの名無しさん
2005/06/20(月) 18:33:060834デフォルトの名無しさん
2005/06/20(月) 18:35:45彼は特別な病院から退院したばっかりなんで
最近の流行についていけてないんです。
0835デフォルトの名無しさん
2005/06/20(月) 18:44:000836デフォルトの名無しさん
2005/06/20(月) 18:44:490837デフォルトの名無しさん
2005/06/20(月) 18:47:400838デフォルトの名無しさん
2005/06/20(月) 18:51:280839デフォルトの名無しさん
2005/06/20(月) 18:53:260840デフォルトの名無しさん
2005/06/20(月) 19:06:110841デフォルトの名無しさん
2005/06/20(月) 20:04:260842デフォルトの名無しさん
2005/06/20(月) 20:15:03マクロの作り方?
定義済みマクロ?
0843デフォルトの名無しさん
2005/06/20(月) 20:29:060844デフォルトの名無しさん
2005/06/20(月) 20:46:41#ifdefみたいな
#**ってのがどんなのがあるかとか。
これでおれ様便利に暮らしてますとか。
0845デフォルトの名無しさん
2005/06/20(月) 20:57:29林なんたらとかいう【作家さん】がペタシーベルト級のトンデモ本書いてたが・・・・
0846デフォルトの名無しさん
2005/06/20(月) 20:58:48> #ifdefみたいな
#ifdef マクロじゃない。
0847デフォルトの名無しさん
2005/06/20(月) 21:13:140848デフォルトの名無しさん
2005/06/20(月) 21:14:32#idef
#ifndef
#if
#if defined
#elif
#undef
#include
#define
#error
#pragma
まとめてかいてあるところは知らないけど、検索すればいくらでも出てくるべ。
0849デフォルトの名無しさん
2005/06/20(月) 21:20:520850デフォルトの名無しさん
2005/06/20(月) 21:36:410851デフォルトの名無しさん
2005/06/20(月) 21:39:53printfとかmemcmpとかそういうやつです。。
0852デフォルトの名無しさん
2005/06/20(月) 21:43:27処理系に付属していることが多い。もちろんgccにも付属している。
尤もgccはコンパイラ自身さえ……。
0853851
2005/06/20(月) 22:00:02検索してみたんですけどどのファイルかわからないんですが…
Vine Linuxの3.1が入ってるんですけどどこかにあるんですか??
もしくはネット上にあるとか…>_<;
0854デフォルトの名無しさん
2005/06/20(月) 22:12:16解答ってどっかにないの?
0855デフォルトの名無しさん
2005/06/20(月) 22:13:040856デフォルトの名無しさん
2005/06/20(月) 22:19:430857デフォルトの名無しさん
2005/06/20(月) 22:32:08glibc のソースを落として来ればいい。
でも、自分が使っているライブラリのソースが見たいとかじゃないなら、
FreeBSD とか NetBSD のソース見るのがお勧め。GNU は読み辛い。
0858デフォルトの名無しさん
2005/06/20(月) 22:48:46基本的に綺麗なところではないからね。
0859デフォルトの名無しさん
2005/06/20(月) 23:47:07if(scanf("%s",a)==scanf("%s",b))
が常に真になるのですがなぜでしょうか?
0860デフォルトの名無しさん
2005/06/20(月) 23:49:53未定義動作。逝ってよし
ポインタの先に何があるんだよ?
0861デフォルトの名無しさん
2005/06/20(月) 23:59:55すいません。確かにそうですね。
ということで宣言を
char a[256],b[256],*pa,*pb;
とし、
・if(scanf("%s",a)==scanf("%s",b))
・if((pa=scanf("%s",a))==((pb=scanf("%s",b)))
・if((scanf("%s",a))==(scanf("%s",b)))
の三つの方法を試しても思ったような結果がえられませんでした。
どこが悪いのか教えてください
0862861
2005/06/21(火) 00:01:06二つ目の方法は
・if((pa=scanf("%s",a))==(pb=scanf("%s",b)))
です
0863デフォルトの名無しさん
2005/06/21(火) 00:02:200864デフォルトの名無しさん
2005/06/21(火) 00:05:40掛け算は足し算の前に起こるということはわかっているけれど、3つ の関数のうちどの関数が最初に呼ばれるかはわからない。
0865デフォルトの名無しさん
2005/06/21(火) 00:05:50思ったような結果って何?
0866デフォルトの名無しさん
2005/06/21(火) 00:08:150867デフォルトの名無しさん
2005/06/21(火) 00:09:35ありがとうございます。
いろいろ調べて見ます
>>865
if(〜〜〜)
printf("同じ\n");
else
printf("違う\n");
です
0868867
2005/06/21(火) 00:13:47ありがとうございました。
0869デフォルトの名無しさん
2005/06/21(火) 00:15:440870デフォルトの名無しさん
2005/06/21(火) 00:15:510871デフォルトの名無しさん
2005/06/21(火) 00:16:010873デフォルトの名無しさん
2005/06/21(火) 00:27:01結構やってしまいがちな誤りだが・・・
俺はずっと下のやり方が正しいやり方だと思っていたよ
char idt[101];
char *p=idt;
.......
*(p+99)='\n';
*(p+100)='\0';
fputs(p,fout);
0874デフォルトの名無しさん
2005/06/21(火) 00:31:490875デフォルトの名無しさん
2005/06/21(火) 00:39:020876デフォルトの名無しさん
2005/06/21(火) 01:09:01> 結構やってしまいがちな誤りだが・・・
と言ってしまう>>873ってどうよ?
0877デフォルトの名無しさん
2005/06/21(火) 01:13:15付き合うなよ
0878デフォルトの名無しさん
2005/06/21(火) 02:06:020879デフォルトの名無しさん
2005/06/21(火) 05:06:47PIE - St Petersburg/Clearwater : FL : USA St Petersburg/Clearwater Intl
最初のPIEをchar型配列keyに、St以降をdataに格納したいのだけど
下のじゃだめでした。どうすればいいですか?
while( fgets( string, STRING_SIZE, fp) )
{
sscanf( string, "%s %*s %s", key, data);
}
0880デフォルトの名無しさん
2005/06/21(火) 06:26:22sscanf(string, "%s - %[^\n]", key, data);
0881デフォルトの名無しさん
2005/06/21(火) 12:00:14ただし,底辺の長さ,高さ,面積の値を入れる変数名をそれぞれteihen, takasa,mensekiとし,いずれも実数型(double型)とする.
void main( void )
{
double teihen, takasa, menseki;
printf( "底辺は?\n" ); /* 入力を促すメッセージを表示 */
scanf( "%d", &teihen );
menseki = teihen * takasa / 2;
printf("%f\n",menseki);
}
これ誰か完成させてくれ
0882デフォルトの名無しさん
2005/06/21(火) 12:07:55コンパイラとライブラリの区別を付けようね。
gccはコンパイラで、printf()とかmemcmp()はライブラリ。
Linuxではglibcでこのへん
http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/?cvsroot=glibc
FreeBSDはこのへん
http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/
NetBSDはこのへん
http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/
0883デフォルトの名無しさん
2005/06/21(火) 12:08:09その調子で行けばいけるって
0884デフォルトの名無しさん
2005/06/21(火) 12:11:130885デフォルトの名無しさん
2005/06/21(火) 12:12:02Fuck you.
0886デフォルトの名無しさん
2005/06/21(火) 12:17:50だれか教えてあげなよ
0887デフォルトの名無しさん
2005/06/21(火) 12:19:30スレ違い
0888デフォルトの名無しさん
2005/06/21(火) 12:21:17こんな糞スレに書き込んだ俺が馬鹿でした
0889デフォルトの名無しさん
2005/06/21(火) 12:21:49質問する前には最低限検索を。
GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。
0890デフォルトの名無しさん
2005/06/21(火) 12:24:59そう書けば教えてもらえると見ての煽りですね。
薄っぺらい人だ。
0891881
2005/06/21(火) 12:26:070892デフォルトの名無しさん
2005/06/21(火) 12:27:450893デフォルトの名無しさん
2005/06/21(火) 12:31:170894デフォルトの名無しさん
2005/06/21(火) 12:32:08は?とっくにできたけど?馬鹿?
0895881
2005/06/21(火) 12:34:55とりあえず>893ありがとうございます
0896デフォルトの名無しさん
2005/06/21(火) 12:36:22なんだよ、このスレなりに超歓迎されてるし、すごく馴染んでるぞ
また来てね
0897デフォルトの名無しさん
2005/06/21(火) 12:36:41↑???
0898デフォルトの名無しさん
2005/06/21(火) 12:38:12おーい、向こうにもレス来てるぞ。ちゃんと謝ってこいや。
0899デフォルトの名無しさん
2005/06/21(火) 12:41:22ついだよ、わざとだよ、知ってるよ
0900デフォルトの名無しさん
2005/06/21(火) 13:35:34だまれ神楽
0901デフォルトの名無しさん
2005/06/21(火) 17:41:46このビット列(文字列型で出力)を6bitごとに(余ったものは切り捨て)区分けしたら
100001 101001 100100 011111 110110 000110 001110 001010 000101
って出力されたんだけど
なんで最下位ビットだけおかしいのがあるのかがわからん・・・
0902デフォルトの名無しさん
2005/06/21(火) 17:46:08独り言なら壁に向かってやってくれ
0903デフォルトの名無しさん
2005/06/21(火) 17:52:38つ |壁|
0904デフォルトの名無しさん
2005/06/21(火) 19:15:17int i;
・・・
for(i=0; str[i]!='\0'; i++){
printf("%c☆",str[i]);
}
で、printf("%c☆",str[i]);の部分をprintf("%s☆",str[i]);にするとエラーを吐いてしまいます。
なぜでしょうか?
0905デフォルトの名無しさん
2005/06/21(火) 19:18:210906デフォルトの名無しさん
2005/06/21(火) 19:27:27地震でもくるのかしら
0907デフォルトの名無しさん
2005/06/21(火) 20:31:23岡さん、よくって?
0908デフォルトの名無しさん
2005/06/21(火) 20:34:030909デフォルトの名無しさん
2005/06/21(火) 20:43:480910デフォルトの名無しさん
2005/06/21(火) 21:02:02gccなら、*printfのフィールドの不一致でエラー吐くな。
0911851
2005/06/21(火) 21:51:26ちゃんとブックマークしておきます☆
0912デフォルトの名無しさん
2005/06/21(火) 22:18:310913デフォルトの名無しさん
2005/06/21(火) 22:20:230914デフォルトの名無しさん
2005/06/21(火) 22:38:310915デフォルトの名無しさん
2005/06/21(火) 22:43:290916デフォルトの名無しさん
2005/06/21(火) 22:44:53コンパイラ
0917デフォルトの名無しさん
2005/06/21(火) 22:47:130918904
2005/06/21(火) 23:03:12わかりました。ありがとうございます
0919デフォルトの名無しさん
2005/06/21(火) 23:03:460920デフォルトの名無しさん
2005/06/21(火) 23:37:10strcatやsprintfでも試したんですけど、強制終了食らって出来ませんでした
0921デフォルトの名無しさん
2005/06/21(火) 23:40:220922デフォルトの名無しさん
2005/06/21(火) 23:41:36何をやりたいのかよーわからん
強制終了食らったソース晒すよろし
0923デフォルトの名無しさん
2005/06/21(火) 23:44:48char* p="Hello";
int i=100;
strcat(p,(char*)&i);
0924デフォルトの名無しさん
2005/06/22(水) 00:12:50はどういう結果を期待しているんだろうか?
>>923でいうと、
文字列が"Hello100"となってほしいのか、
それとも"Hello"の後ろに文字コード100番の文字を一文字足したいのか?
0926デフォルトの名無しさん
2005/06/22(水) 00:26:57char buf[100] = "Hello";
sprintf(strchr(buf, '\0'), "%d", 100);
0927デフォルトの名無しさん
2005/06/22(水) 00:41:00char buf[256];
sprintf( buf, "%s%d", "Hello", 100 );
0928デフォルトの名無しさん
2005/06/22(水) 00:58:44>>920 は 「くっつけていきたい」 っていってるぞ。
>>920 は文字列のメモリへの格納のされ方知らないみたいだし
char buf[100] や [256] で足りるのかw
0929デフォルトの名無しさん
2005/06/22(水) 01:26:44コードを実行するプログラムを書いています。
すると、関数が関数を呼び、再帰的に深い呼び出しになってしまうのですが
これは良くないでしょうか。
これが良くないとすればどのような方法で回避できるでしょうか。
教えてください。
main(){
test1();
}
test1(){
/*何か処理*/
test2(); /*飛ばす*/
}
test2(){
/*何か処理*/
test1(); /*戻る*/
}
0930デフォルトの名無しさん
2005/06/22(水) 01:28:040931デフォルトの名無しさん
2005/06/22(水) 01:34:08関数の呼び出しが入れ子になってしまうので、それがまず大丈夫なのか。
大丈夫でないならどのような回避方法があるか、という質問でした。
例えばtest1で画面を出してtest2で実際の処理を行う場合
画面を表示する、処理を行う、と言う組み合わせを交互に何度もやりますよね。
0932デフォルトの名無しさん
2005/06/22(水) 01:37:43直接的な再帰がちゃんと使えている人にとって
間接的な再帰には特に変わったことはないはず
どうしても悩むようなら直接的な再帰に戻って
ウイークポイントがないかチェックすべし
0933デフォルトの名無しさん
2005/06/22(水) 01:38:37ループしたけりゃループ{
test1()
test2()
}
だな、ふつうは
0934デフォルトの名無しさん
2005/06/22(水) 01:41:200935929
2005/06/22(水) 01:49:02void Test1(void){
printf("TEST1:%d", ++count);
Test2();
}
void Test2(void){
printf("TEST2:%d", ++count);
Test1();
}
このような形でTest1関数を呼ぶと、数万回でエラーがでますね。
やはり何らかの方法で回避しなければいけないのですが
アルゴリズムを書き換えるか、一定回数以上は終了するなどの例外処理を入れてやるしか無いのでしょうか。
0936デフォルトの名無しさん
2005/06/22(水) 01:51:27ただの馬鹿?
0937デフォルトの名無しさん
2005/06/22(水) 01:53:26void Test1(void){
printf("TEST1:%d", ++count);
}
void Test2(void){
printf("TEST2:%d", ++count);
}
ループ{
Test1();
Test2();
}
だってば
0938デフォルトの名無しさん
2005/06/22(水) 01:56:17933の方法と君が実現しようとしているやり方の
メリット、デメリットを箇条書きにしてみろ。
0939デフォルトの名無しさん
2005/06/22(水) 02:00:08この例だと当然ループに2つ関数を書けば良いですが。
実際には互いにもっと大きな機能を受け持っているので、呼ばれるタイミングなども一定ではありません。
ですのでそもそもそういう書き方は出来ないです。
0940デフォルトの名無しさん
2005/06/22(水) 02:00:57printf("TEST1:%d", ++count);
条件1
Test2();
条件2
}
void Test2(void){
printf("TEST2:%d", ++count);
条件1
Test2();
条件2
Test1();
}
0941デフォルトの名無しさん
2005/06/22(水) 02:01:28再帰の理解が出来てない。書きかえるのが既知。
0942941
2005/06/22(水) 02:01:420943デフォルトの名無しさん
2005/06/22(水) 02:04:13そもそもそういう書き方はしないです。
0944940
2005/06/22(水) 02:09:47void Test1(void){
printf("TEST1:%d", ++count);
if(hoge)
Test2();
}
void Test2(void){
printf("TEST2:%d", ++count);
if(hoge2)
Test1();
}
再帰的呼び出しが必ず
hoge == false || hoge1 == false
になるよう収束させれば
目指そうとしていることができるんじゃないの
0945944
2005/06/22(水) 02:10:300946デフォルトの名無しさん
2005/06/22(水) 02:16:56なぜループにしない?
0947デフォルトの名無しさん
2005/06/22(水) 02:20:18× test1(); /*戻る*/
○ return(); /*戻る*/
0949デフォルトの名無しさん
2005/06/22(水) 02:24:23state1()
state2()
:
stateN()
みたいな関数があって、それぞれを遷移していくんだが、
今は直接的に
state1()の中でstate2()とかを呼んでしまっていて、結果的に
無限再帰になっていると。
こういう場合は、たとえばstate1()...stateN()の関数型を
一緒にして、直接それらの中で次状態の関数を呼ぶのではなく、
呼び出し側に次ステートを示すもの(関数ポインタなど)を返し、
ドライバループの中で次の状態に遷移するように書き直せばよい。
こうすると、
StateFunc nextstate = state1;
while (nextstate) nextstate();
のように書ける。
0950デフォルトの名無しさん
2005/06/22(水) 02:24:330951デフォルトの名無しさん
2005/06/22(水) 05:33:43あのな、関数ってのは、通常は呼ばれたら必ずそこへ戻ってくるもんなんだ。
解りやすく言うと、
呼ぶときに、戻ってくるための情報を記憶してるわけよ。
呼びっぱなしで戻ってこないってことは、
戻るための情報がどんどんメモリに溜まっていって、
いずれはオーバーフローする。
関数の中で自分をさらに呼び出す(再帰)こと自体はOKだが、
関数内で再帰しない条件なんかをつけて、
最終的には戻さないとダメ。
>呼ばれるタイミングなども一定ではありません
関数のなかで関数よんだところで、一定にはならんよ。
>もっと大きな機能を受け持っているので・・・
こんな初歩的なところでつまずくようなヤツに、
そんな大きなプログラムを扱わせるのかw
0952デフォルトの名無しさん
2005/06/22(水) 08:36:10printf文を追加してみると、tが妙な数字になってました。なぜですか。
int hash(char *key, int sz)
{
unsigned char *t = key;
int h;
for(h = 0; *t; t++)
{
printf("%d ", t);
h = ( 128 * h + *t ) % sz;
}
return h;
}
0953デフォルトの名無しさん
2005/06/22(水) 08:42:51何がしたい?
0954デフォルトの名無しさん
2005/06/22(水) 08:44:540955デフォルトの名無しさん
2005/06/22(水) 09:04:17例えばkey = "abc"のとき
for文の中でtをインクリメントしたら
t = aの整数値 → bの整数値→ cの整数値
になるんかと。
0956デフォルトの名無しさん
2005/06/22(水) 09:04:46printf("%p : %c %d 0x%X", t, *t, *t, *t );
0957デフォルトの名無しさん
2005/06/22(水) 09:23:40サンクス!
・・・じゃなくて問題はfor文の中で一文字ずつ
その整数値を加えて行くことなんです。スマソorz
0959デフォルトの名無しさん
2005/06/22(水) 10:20:130x%X→%#x
0960デフォルトの名無しさん
2005/06/22(水) 10:23:12わかっているが、「0x」の「x」まで大文字になってしまうのが、
個人的に嫌なだけなんだ…。 orz
# まあ、趣味の問題な訳だが。
0961デフォルトの名無しさん
2005/06/22(水) 10:35:120962デフォルトの名無しさん
2005/06/22(水) 10:39:35条件判定
0963デフォルトの名無しさん
2005/06/22(水) 10:55:25ありがとうございます。
あと、この部分はなくても正しい答えがでるっぽいんですけど
なんでですか?
0964デフォルトの名無しさん
2005/06/22(水) 11:02:120965デフォルトの名無しさん
2005/06/22(水) 11:07:58/usr/lib/crt1.o(.text+0x78): undefined reference to `main'
コンパイルしたら↑のが出たんですけど、どこがおかしいのですか?
0966デフォルトの名無しさん
2005/06/22(水) 11:21:47× printf("%d ", t);
○ printf("%d ", *t);
だと思う。
0967デフォルトの名無しさん
2005/06/22(水) 12:03:17しらねーよ。
そもそも、どこの部分を言っているのかもわからないし、
Cの質問でもないだろ。
0968デフォルトの名無しさん
2005/06/22(水) 12:21:08それを気付かせるための>>956だと思われ
0969デフォルトの名無しさん
2005/06/22(水) 12:33:59#define NMAX 200
int main (void)
{
int i,n;
int tmax=-1;
int tmin=-1;
double data[NMAX];
for( i = 0 ; i < NMAX ; i++ ){
printf( "%d 番目の点数は?\n", i );
scanf( "%lf", &data[i] );
if(data[i]==-1){
break;}
if(tmax < data[i] ){
tmax=data[i];}
if(tmin > data[i]){
tmin=data[i]; }
}
printf("最高点: %d\n",tmax );
printf("最低点: %d\n",tmin );
return(0);
}
上記のプログラムは、テストの点数の最高点、最低点を表示するプログラムです。
最低点がきちんと表示されないのですが、どこをどう修正すればいいか教えてください
0970969
2005/06/22(水) 12:35:53int i; ○
0971デフォルトの名無しさん
2005/06/22(水) 12:37:240972デフォルトの名無しさん
2005/06/22(水) 12:41:35のように0と書いてあります。どちらが正しいのでしょうか。ここらへのことがよくわかりません。
0973969
2005/06/22(水) 12:45:43初期値をどう直せばいいですか?
0974969
2005/06/22(水) 12:51:06ありがとうございました。
0975デフォルトの名無しさん
2005/06/22(水) 12:51:12入力は浮動小数点数なのに、
最大・最小は汎用整数とはこれ如何に?
とりあえず、「-3」とか入力してみろ。(w
0976デフォルトの名無しさん
2005/06/22(水) 13:59:13まっとうな末尾再帰をサポートしている言語を使うことをおすすめします
0977デフォルトの名無しさん
2005/06/22(水) 15:11:29#include <stdio.h>
char *tp;
const char* CutItemName(const char* ItemName)
{
char Arg[64];
lstrcpy(Arg,ItemName);
tp = strtok(Arg,"#");
printf("tp = %s / pAddr = %d \n",tp,tp);
tp = strtok( NULL,"#" );
printf("tp = %s / pAddr = %d \n",tp,tp);
return tp;
}
void main() {
printf("CutItemName = %s / %s /\n pAddr = %d / %d \n",CutItemName("78#なは"),CutItemName("12#とぅえるぶ"),CutItemName("11#ワンワン"),CutItemName("37#サンナナ"));
printf("\t tpは = %s / Addr = %d \n",tp,tp);
}
#以降の文字を表示したいのですが、main内のprintfではアドレス値だけ表示されて、文字が表示されません
CutItemName()内では確認できるのですが、何がおかしいのでしょうか・・アドバイスお願いします
0978デフォルトの名無しさん
2005/06/22(水) 15:22:19関数を抜けた時点で
>char Arg[64];
こいつが破棄されるからじゃね?
0979デフォルトの名無しさん
2005/06/22(水) 15:25:28Arg[64]のメモリ領域は、ポインタ経由でもCutItemName()の外で参照してはいけない。
0980977
2005/06/22(水) 15:26:03アドレスだけ返すから文字列はどうでもいいと踏んでいたのが間違いだったようです。
978サンありがとうございましたー
0981デフォルトの名無しさん
2005/06/22(水) 15:33:05static char Arg[64];
にしたらええ
0982デフォルトの名無しさん
2005/06/22(水) 15:36:22978、979、981氏 ありがとう御座いましたー
0983デフォルトの名無しさん
2005/06/22(水) 15:39:400984972
2005/06/22(水) 16:15:510985デフォルトの名無しさん
2005/06/22(水) 16:21:50両方あってるのがわからないの?
とりあえず「1冊を」「理解するまで」
0986デフォルトの名無しさん
2005/06/22(水) 16:26:00main() の戻り値の型を int にして、
return 0; 等の様に int 型の値を返していれば間違いない。
とりあえず、そう書いておけ。
0987デフォルトの名無しさん
2005/06/22(水) 16:27:49お話をきちんと聞いてくれるかすらあやしいわ
0988972
2005/06/22(水) 16:48:200989デフォルトの名無しさん
2005/06/22(水) 16:51:26このスレの伝統を重んじるなら、環境依存の話として無視するんだろうなぁ。この手の話。
0990デフォルトの名無しさん
2005/06/22(水) 16:53:050991デフォルトの名無しさん
2005/06/22(水) 16:56:36そもそもmain関数をエントリポイントにするっていうのも環境依存。
0992デフォルトの名無しさん
2005/06/22(水) 16:57:56戻り先で、returnした値を何かに利用するのか?
バッチでERRORLEVEL判定とか、別のアプリからプロセスとして起動するとか。
これは完全に実行環境に依存。
0993デフォルトの名無しさん
2005/06/22(水) 18:04:50変数bun野中にある'o'と't'以外の文字を出力するプログラム。
#include <stdio.h>
main()
{
int i;
char bun[16] = {"ottoseitonatto"};
char j = 'o',k ='t';
for (i = 0;i < 14;i++)
if ( bun[i] < j && bun[1] > k )
printf ("%c",bun[i]);
printf("\n");
}
ifの中の条件式を文字コードの数で判定しようとしてるのですが、どうもうまくいきません。
0994デフォルトの名無しさん
2005/06/22(水) 18:12:21ifのなか添え字が数値の1になっている。
あとtとoは変数にする意味はない。
それだと'o'〜't'の文字は全て出力しないということになるのだがいいのか?
0995993
2005/06/22(水) 18:17:34ご指摘有難うございます。
何とか、自分で解決策をみつけました。
#include <stdio.h>
main()
{
int i;
char bun[16] = {"ottoseitonatto"};
char j = 'o',k ='t';
for (i = 0;i < 14;i++)
if ( bun[i] != j && bun[i] != k )
printf ("%c",bun[i]);
printf("\n");
}
これで何とか動きました。
0996デフォルトの名無しさん
2005/06/22(水) 18:25:180997デフォルトの名無しさん
2005/06/22(水) 18:32:400998デフォルトの名無しさん
2005/06/22(水) 18:34:520999デフォルトの名無しさん
2005/06/22(水) 19:03:23ビットシフトはなんの役に立つのでしょうか?
あと、次スレはどこですか?
1000デフォルトの名無しさん
2005/06/22(水) 19:10:48次スレってあったっけ
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。