C言語なら俺に聞け(入門篇) Part 23
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2007/12/22(土) 12:49:22・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
前スレ
C言語なら俺に聞け(入門篇) Part 22
http://pc11.2ch.net/test/read.cgi/tech/1196489491/
教えて欲しいのではなく丸投げしたいならこちらへ
C/C++の宿題を片付けます 101
http://pc11.2ch.net/test/read.cgi/tech/1197132472/
0002デフォルトの名無しさん
2007/12/22(土) 12:49:52Part 2 ttp://pc8.2ch.net/test/read.cgi/tech/1153818463/
Part 3 ttp://pc8.2ch.net/test/read.cgi/tech/1160682950/
Part 4 ttp://pc8.2ch.net/test/read.cgi/tech/1162999861/
Part 5 ttp://pc8.2ch.net/test/read.cgi/tech/1165022193/
Part 6 ttp://pc10.2ch.net/test/read.cgi/tech/1167325490/
Part 7 ttp://pc10.2ch.net/test/read.cgi/tech/1170064980/
Part 8 ttp://pc11.2ch.net/test/read.cgi/tech/1171946674/
Part 9 ttp://pc11.2ch.net/test/read.cgi/tech/1173284217/
Part 10 ttp://pc11.2ch.net/test/read.cgi/tech/1174290325/
Part 11 ttp://pc11.2ch.net/test/read.cgi/tech/1176800483/
Part 12 ttp://pc11.2ch.net/test/read.cgi/tech/1178620766/
Part 13 ttp://pc11.2ch.net/test/read.cgi/tech/1179301993/
Part 14 ttp://pc11.2ch.net/test/read.cgi/tech/1181735298/
Part 15 ttp://pc11.2ch.net/test/read.cgi/tech/1182719692/
Part 16 ttp://pc11.2ch.net/test/read.cgi/tech/1184003625/
Part 17 ttp://pc11.2ch.net/test/read.cgi/tech/1185286631/
Part 18 ttp://pc11.2ch.net/test/read.cgi/tech/1187213990/
Part 19 ttp://pc11.2ch.net/test/read.cgi/tech/1190342593/
Part 20 ttp://pc11.2ch.net/test/read.cgi/tech/1192455273/
Part 21 ttp://pc11.2ch.net/test/read.cgi/tech/1194384258/
0003デフォルトの名無しさん
2007/12/22(土) 13:52:230.1
0.2
・
・
・
9.9
10.0
10.1
10.2
みたいに右ぞろえで出力するにはどうすればいいですか?
0004デフォルトの名無しさん
2007/12/22(土) 13:58:080005デフォルトの名無しさん
2007/12/22(土) 14:00:400.1
0.2
・
・
・
9.9
10.0
10.1
10.2
0006デフォルトの名無しさん
2007/12/22(土) 14:04:400007デフォルトの名無しさん
2007/12/22(土) 14:04:43ググったらこんなページあったけど。
http://wisdom.sakura.ne.jp/programming/c/c57.html
0008デフォルトの名無しさん
2007/12/22(土) 14:05:330009デフォルトの名無しさん
2007/12/22(土) 14:09:05うまくいかないです
*0.1
*0.2
・
・
・
*9.9
10.0
10.1
10.2
こうしたいんです。*は空白とかんがえてください
0010デフォルトの名無しさん
2007/12/22(土) 14:12:45右左のそろえを変えたいならマイナスつければいいし
0011デフォルトの名無しさん
2007/12/22(土) 14:18:20どうやったんだよ
何で自分がやったやりかたを隠すんだ?
0012デフォルトの名無しさん
2007/12/22(土) 14:24:09%2.2fです
0013デフォルトの名無しさん
2007/12/22(土) 14:25:06%ドットを含めた全体の桁数.小数点以下の桁数f
0014デフォルトの名無しさん
2007/12/22(土) 14:30:44できました。どうもすいません
0015デフォルトの名無しさん
2007/12/22(土) 14:59:48整数部分の桁数がわからない場合はどうすればいいですか?
*******1.12100912
******11.21890212
******12.12109121
*****212.21029211
***26575.12121111
みたいにしたいんですが
0016デフォルトの名無しさん
2007/12/22(土) 15:03:330017デフォルトの名無しさん
2007/12/22(土) 16:55:14* を使えば実行時に決定できる
数値はそのままで、空白を自分で追加してもいいし、どうにでなるでしょ。
0018デフォルトの名無しさん
2007/12/22(土) 18:55:29無理。
typedef は前処理(#ifdef とか #define とかの処理)が終了した後の
コンパイル時に解析されるものであって、前処理ではその情報は使用できない。
bool を typedef するのと同時にマクロを別に定義するようにしておいて、
そのマクロが定義されているかどうかを #ifdef で判定するしかない。
0019デフォルトの名無しさん
2007/12/22(土) 22:14:31苦しんでのHPで書いてあったことなんですが・・・
変数のところを勉強してるのですが
そこに
[ コンパイラの機能 ]
実は、このプログラムは多くのコンパイラでは動いてしまいます。
それは、C言語の拡張版である、C++(シープラプラ)では使えるからです。
また、近年決められたC言語の新規格であるC99でも使えます。
しかし、元々のC言語では使えないと覚えて下さい。
と書いてありましたが
C言語のコンパイラでは変数は使えないと考えていいのでしょうか?
0020デフォルトの名無しさん
2007/12/22(土) 22:21:22貴様は何を言っているのだ?
0021デフォルトの名無しさん
2007/12/22(土) 22:22:52その一段前を読み直すんだ。
--
変数の宣言は、基本的に、関数の先頭でしか行うことが出来ません。
例えば、次のように変数を宣言することは出来ません。
--
0022デフォルトの名無しさん
2007/12/22(土) 22:24:47ありがとうございます
ということはCでは変数の宣言を関数の先頭でしか行えない
しかしほかのは先頭じゃなくても行えるということでしょうか?
0023デフォルトの名無しさん
2007/12/22(土) 22:24:57bccで.cをコンパイルすると通らないぜそれ
0024デフォルトの名無しさん
2007/12/22(土) 22:28:31概ねその通り。厳密にはブロックの先頭だが。
従って、
--
int main(void)
{
printf("Hello\n");
int value; /* 変数宣言の部分 */
return 0;
}
--
の変数宣言をどうしてもprintf()の後で行ないたいならこうすればいい。
--
int main(void)
{
printf("Hello\n");
{
int value; /* 変数宣言の部分 */
}
return 0;
}
--
>>23
bccは、その筆者にとっては「多くのコンパイラ」に含まれないのだろ。
つーか、そのサイトは結構難有りだと思うがな。
0025デフォルトの名無しさん
2007/12/22(土) 22:31:49--
fpos_t fsize = 0;
fpos_t fsizeb = fseek(fp,0,SEEK_END);
fgetpos(fp,&fsize);
fseek(fp,fsizeb,SEEK_SET);
--
この突っ込みだらけのコードは一体なんなんだか。
0026デフォルトの名無しさん
2007/12/22(土) 22:39:080027デフォルトの名無しさん
2007/12/22(土) 22:39:08そうゆう書き方もありなのか・・・
もう2週間経つがまだ変数の宣言までしか覚えてない
いつになればCが覚えられるのかな
0028デフォルトの名無しさん
2007/12/22(土) 22:42:28日本語を覚えるのにどれだけ掛かったか、英語を覚えるのにどれだけ掛かったかを考えれば、
Cを覚えられるようになるのにどれだけ掛かるか判ろうものだ。
>>26
勿論int valueの宣言の後、そのブロックが閉じる前に使いたいだけ使えばいい。
0029デフォルトの名無しさん
2007/12/22(土) 22:48:00自然言語と一緒で意味を考えながら書写すればいいよ。
音読するとご近所さんから奇人扱いされそうだけど
0030デフォルトの名無しさん
2007/12/22(土) 22:50:15一応書きながらやっているから今までのことは覚えられているのだけれども・・・
文字列リテラルとか必要な言葉かどうか疑問に思ってくる
Cは覚えておいて損はないだろうから一応忘れないように
がんばっているんだがこれは無駄ではないよね?
0031デフォルトの名無しさん
2007/12/22(土) 23:03:24まあ、人間の脳なんて限界があるから、細かいことまで一生覚えてる必要はないよ。
それがどこに書いてあったかを覚えといて、必要なときにすぐに参照できるようにしておけばいい。
リテラルってのがソースコードに直に書いてある値のことだと知れば、
文字列リテラルだろうが整数リテラルだろうが、別に怖いことはないでしょ。
物の名前は他人に説明するときに絶対に必要だから、嫌でも覚えてしまうよ。
0032デフォルトの名無しさん
2007/12/22(土) 23:04:31ありがとう
やる気が出てきたよ
0033デフォルトの名無しさん
2007/12/22(土) 23:07:15標準ライブラリの細かい使い方まで行くとまた別だが、
C自体の構文なんかは数日で覚えられるだろ
0034デフォルトの名無しさん
2007/12/22(土) 23:10:24でもほら短時間で覚えると忘れちゃうじゃん
だからゆっくり覚えてるのSA!!
まだ変数のところだけどノートに26ページ書いてあるんだよ・・・
0035デフォルトの名無しさん
2007/12/22(土) 23:17:57そりゃ、C++はCに++したものだからあたりまえ
0036デフォルトの名無しさん
2007/12/23(日) 00:33:27C+=2くらいじゃないのか
0037デフォルトの名無しさん
2007/12/23(日) 00:38:470038デフォルトの名無しさん
2007/12/23(日) 00:46:38CのDOS窓でprintfするときに、画面で
ファイル ○を読み込みました
進行度 ○%
見たいのを表示してるのですが、1個ずつ改行されるので
それを改行しないように画面更新するにはどうやればいいのですか?
まったくやったこと無くて
0039デフォルトの名無しさん
2007/12/23(日) 00:47:54\r
0040デフォルトの名無しさん
2007/12/23(日) 01:00:40良く知らないけど、これを使えば何でもできるんじゃね?
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpfileio/html/Toppage_Console.asp
0041デフォルトの名無しさん
2007/12/23(日) 01:10:54だめでした
>>40
ナニが描いてるのかチンプンカンプンです
0042デフォルトの名無しさん
2007/12/23(日) 01:37:42C++から始めると、Cは速攻覚えられるな。
つまりそういうことだ
0043デフォルトの名無しさん
2007/12/23(日) 02:12:48これでだめ?
#include<stdio.h>
int main(void){
int i;
for(i = 0; i < 10; i++){
printf("%d", i);
fflush(stdout);
sleep(1);
printf("\r");
}
putchar('\n');
return 0;
}
0044デフォルトの名無しさん
2007/12/23(日) 05:09:19どう書いたらどうだめだったのか書けよ
0045デフォルトの名無しさん
2007/12/23(日) 17:03:45#define STRICT
#include <windows.h>
#include <stdio.h>
#define BUFFER_SIZE 64
int main(int argc, char *argv[]) {
DWORD written = 0;
BOOL alloced = AllocConsole();
HANDLE stdOut = GetStdHandle(STD_OUTPUT_HANDLE);
char buffer[BUFFER_SIZE] = {0};
CONSOLE_SCREEN_BUFFER_INFO csbInfo = {0};
for (int i = 0; i <= 10; i++) {
GetConsoleScreenBufferInfo(stdOut, &csbInfo);
csbInfo.dwCursorPosition.X = 0;
SetConsoleCursorPosition(stdOut, csbInfo.dwCursorPosition);
int len = snprintf(buffer, BUFFER_SIZE - 1, "今 %d%% ですよ", i * 10);
WriteConsole(stdOut, buffer, len, &written, NULL);
Sleep(500);
}
if (alloced) FreeConsole();
}
0046デフォルトの名無しさん
2007/12/23(日) 17:45:52FORMATコマンドでFDフォーマットするときに出てくるようなやつ。もっと他の方法があるの?
0047デフォルトの名無しさん
2007/12/23(日) 17:48:170048デフォルトの名無しさん
2007/12/23(日) 23:12:48データフローグラフにはどのようなデータ構造が適していますか?
また、リストスケジューリングの優先度リストに適したデータ構造についても
教えていただけないでしょうか?
0049デフォルトの名無しさん
2007/12/24(月) 01:21:13本読んだんだがいまいちピンとこない・・・
0050デフォルトの名無しさん
2007/12/24(月) 02:10:54自分でコード書いてコンパイル・実行するほうが理解できると思うよ。
そのコードはとりあえず本・Webのコピペでいいから。
0051デフォルトの名無しさん
2007/12/24(月) 02:18:59レスサンクス
やってみるは
0052デフォルトの名無しさん
2007/12/24(月) 02:41:12はるかな高みからの質問かもシレンが。
0053デフォルトの名無しさん
2007/12/24(月) 05:14:58お勧めの参考書教えてください
0054デフォルトの名無しさん
2007/12/24(月) 08:04:34値を2倍する関数twiceがあったとする
例えば、printf("%d\n", twice(10)); のように使えば、20と表示されるとする
この、twice(10)の計算結果である20を、twice(10)の戻り値という
twice(15)の戻り値は30であるし、twice(-3)の戻り値は-6であろう
0055デフォルトの名無しさん
2007/12/24(月) 08:35:54関数をジュースの自動販売機に例えると
お金が引数(実引数)でジュースが戻値(返値)
0056デフォルトの名無しさん
2007/12/24(月) 08:50:10お釣りが出てきません!
0057デフォルトの名無しさん
2007/12/24(月) 08:54:33手数料としてイタダキマス
0058デフォルトの名無しさん
2007/12/24(月) 09:36:28推薦図書/必読書のためのスレッド 38
http://pc11.2ch.net/test/read.cgi/tech/1198173179/
0059デフォルトの名無しさん
2007/12/24(月) 09:47:32int f(int x) {
return 2 * x + 1;
}
int main() {
printf("%d\n", f(3) + 4);
return 0;
}
とした場合、
int main() {
int f3;
f3 = 2 * 3 + 1;
printf("%d\n", f3 + 4);
return 0;
}
みたいな感じで処理される。
実際には、関数を呼ぶとその関数の中に処理が移動して、
関数の中の処理が終了すると関数を呼んだ位置に戻ってくるんだけどね。
0060デフォルトの名無しさん
2007/12/24(月) 16:52:50私も初心者ですが、、
自動販売機にお金とジュースの種類の情報を与えたら、
ジュースの実体が戻ってくる。
それが戻り値
で、
ジュールの種類やらお金が引数
と考えると分かり易い。
0061デフォルトの名無しさん
2007/12/24(月) 16:53:220062デフォルトの名無しさん
2007/12/24(月) 17:01:48S1 = /* プロセス管理テーブルOPEN */
(struct S1 *)Open_Kansumei(...
,...
,...
,...) ;
こんな感じのCソースがあったんですが、
(struct S1 *)Open_Kansumei();
の部分の文法がよく分かりません。プロセス管理テーブルをオープンした結果を、
S1 構造体のアドレスの先頭に入れてるのは分かるんですが・・・。
関数名の前に (struct S1 *) が付いてる・・・?
0063デフォルトの名無しさん
2007/12/24(月) 17:02:11数学でいう y=f(x)が関数
0064デフォルトの名無しさん
2007/12/24(月) 17:02:570065デフォルトの名無しさん
2007/12/24(月) 17:14:29構造体へのポインタを返す関数なんじゃないの?
0066デフォルトの名無しさん
2007/12/24(月) 17:15:100067デフォルトの名無しさん
2007/12/24(月) 17:24:06関数 Open_Kansumei の戻り値を struct S1 * 型にキャストしている
0068デフォルトの名無しさん
2007/12/24(月) 18:02:13関数の戻り値をキャストするなら、
(struct S1 *)S1 = Open_Kansumei();
では駄目なんでしょうか?
それとも関数自体をキャスト・・・? S1 自体がアドレスだから、(struct S1 *)関数名
とすると、(struct *S1)関数名
と同じ意味になるのかな・・・よく分からなくなってきました・・・
0069デフォルトの名無しさん
2007/12/24(月) 18:11:29型キャストの構文をもっぺん見直してみろ。
int x;
float y;
という2つの変数 x と y があるとき、y を int 型にキャストして x に代入するには
(int) x = y;
ではなく
x = (int) y;
と書くのが正しい。おk?
0070デフォルトの名無しさん
2007/12/24(月) 18:31:18型の名前と変数名が一緒だからごっちゃになってないか?
struct S1 *p;
p = (struct S1 *)Open_Kansumei(...);
0071デフォルトの名無しさん
2007/12/24(月) 18:37:52あ〜そうか〜そういえば!
関数の戻り値ってのは、=で受け取らないと扱えないと思ってたけど、
関数の中に関数を使ったりできますもんね。おk、おk!
ということは、「関数の戻り値をキャストして、さらに S1 に代入している」
ということなんですね。
この場合、 S1 にはアドレスが入るから、
(struct S1 *)関数名
にキャストした結果は、アドレスになる(struct S1 * 型というのはアドレス)
と考えていいんでしょうか?
0072デフォルトの名無しさん
2007/12/24(月) 19:02:48あ・・!そういう意味なんですか?
と、、すると、
(struct S1 *)
struct S1 *
は同じ意味だから、
p = (struct S1 *)Open_Kansumei(...);
の右辺と左辺は同じ型が入るということになるんですね!
よく分かりますね!
0073デフォルトの名無しさん
2007/12/24(月) 19:14:34int Open_Kansumei( ...
, ...
, ...
, ...
)
{
char *adataadd; /* データアドレス */
...処理...
return( (int)adataadd );
}
アドレス値を int型にして引渡し、もらい先で *型に変換する、なんてこともできるんですね。
0074デフォルトの名無しさん
2007/12/24(月) 20:36:26できるかもしれんが、行儀の良くない例だ
真似しないように
0075デフォルトの名無しさん
2007/12/24(月) 20:48:00そうなんですね。読むだけにして、使わないようにします。
この場合、
return( adataadd );
...
p = Open_Kansumei(...);
とするのが普通なんでしょうか?これでも同じ意味になります?
0076デフォルトの名無しさん
2007/12/24(月) 20:50:06何と区別がつかないのだ?
0077デフォルトの名無しさん
2007/12/24(月) 20:50:280078デフォルトの名無しさん
2007/12/24(月) 20:54:32なんで ? を、エスケープシーケンスにしなければいけないの?
0079デフォルトの名無しさん
2007/12/24(月) 20:57:48三項演算子とエスパーしてみる
0080デフォルトの名無しさん
2007/12/24(月) 21:08:23「シェルが展開しようとするから」って回答がお望み?
0081デフォルトの名無しさん
2007/12/24(月) 21:16:043文字表記(トライグラフ)のため。
3文字表記は、Cが多用する記号を使えない文字コードのための代替表記を与えるもの。
まあ過去の遺物と言っていい。
??=include <stdio.h>
int main(int argc, char *argv??(??))
??<
printf("%d??/n", argc);
??>
0082デフォルトの名無しさん
2007/12/24(月) 21:43:36int Open_Kansumei( ... , ... , ... , ... )
{
struct S1 *adataadd; /* データアドレス */
...処理...
return( adataadd );
}
p = Open_Kansumei( ... , ... , ... , ... );
てな感じでしょうか。
この場合、
struct S1 *p;
をグローバルで宣言しないといけない訳ですね。
0083デフォルトの名無しさん
2007/12/24(月) 22:01:29struct S1 * Open_Kansumei( ... , ... , ... , ... )
{
struct S1 *adataadd; /* データアドレス */
...処理...
return adataadd;
}
とするのがベター.
0084デフォルトの名無しさん
2007/12/24(月) 22:12:04ああ、なるほど〜
関数の戻り値の型を変えるってのは、struct S1 * Open_Kansumei() の部分を
変えないと駄目ですよね。
あとは、Open_Kansumei()関数の定義側と、呼び出し側で、
struct S1 の中身が書いてある .h ファイルを include しとけばいいってことですね。
include が嫌だったから、 return( (int)adataadd ); ってしたのかもしれないな・・・
0085デフォルトの名無しさん
2007/12/24(月) 22:17:26スタックオーバーフローになってしまうのですが
11*20程度のフィールドでありえるんでしょうか
僕のプログラムがおかしいだけなんでしょうか
0086デフォルトの名無しさん
2007/12/24(月) 22:20:31MSDOSでやってるならわからんでもないけど、Winでそれが出るならプログラムがおかしいかと
0087デフォルトの名無しさん
2007/12/24(月) 22:31:35こことほとんど同じやり方してるんですけど駄目みたいです
ttp://www13.plala.or.jp/kymats/study/game_other/TOKOPUYO/tokopuyo.html
0088デフォルトの名無しさん
2007/12/24(月) 22:34:46メモリのオーバーフローかもしれないと思うなら、
試しにチェックする数を3とか2とか、もっと少ない再帰で終わるものにしてみるといい
それでもプログラムが落ちるなら、無限再帰とかに陥っている可能性が高い
008987
2007/12/24(月) 22:35:48用語分かんね
0090デフォルトの名無しさん
2007/12/24(月) 22:37:15再帰だとありうるかも知れんが、まずは処理を見直したほうが良い。
再帰のネストが深すぎるかもしれない。
おかしくなさそうだったらmallocで。
>>86
スタックサイズはリンク時に決まる。
実メモリのサイズとは関係ない。
VisualC++の場合、デフォルトは1MBらしい。
0091デフォルトの名無しさん
2007/12/24(月) 22:42:14内容が移動してしまったり、、、って事態は起こるんでしょうか?
他に、デフラグをするとおかしくなっちゃうような組み方ってどんなのがあります?
0092デフォルトの名無しさん
2007/12/24(月) 22:46:21カウントが3900とかになってるので無限ループっぽいですw
ちなみに右方向限定とかならエラーは出ないです
ありがとうございました
0093デフォルトの名無しさん
2007/12/24(月) 23:06:38デフラグ、ってHDDのデフラグだよね?
いくらなんでもそんなへぼいメモリ管理をしてない。
0094デフォルトの名無しさん
2007/12/24(月) 23:08:30ですよね・・・。
デフラグでどうにかなっちゃうような実装があるとしたらC言語以外の何かなのか・・・。
とりあえず、C言語ではそういう実装はありえない、ってことでいいんですよね?
0095デフォルトの名無しさん
2007/12/24(月) 23:11:56どんな役割を持つ変数なんでしょうか?一般的に・・・。たいていコメントがないので・・。
0096デフォルトの名無しさん
2007/12/24(月) 23:14:36コマンドライン引数が格納される
0097デフォルトの名無しさん
2007/12/24(月) 23:17:25なるほど。ありがとうございました。
0098デフォルトの名無しさん
2007/12/24(月) 23:21:07C言語は関係なく、OSの実装次第。
デフラグでおかしくなるとしたら、
デフラグツールがおかしいか、OSがおかしいかのどっちか。
0099デフォルトの名無しさん
2007/12/24(月) 23:34:17datファイルなんかを動的に持つってことは可能でしょうか?
で、また読み込みに行ったときに、デフラグされてると、どこにあるか分からなくなる、、とか。。
基本的にファイルはHDDに保存するもので、「動的」って概念すらないんですよね・・・?
あるいはファイル名を動的メモリに持つ・・・とか?う〜ん・・・
どう頑張っても、Cの実装次第で、デフラグされるとおかしくなるようなプログラムは作れない・・・ですよね?
0100デフォルトの名無しさん
2007/12/24(月) 23:46:02デフラグでおかしくなるようなことはあるだろう。
0101デフォルトの名無しさん
2007/12/24(月) 23:51:23なるほど。。それかもしれないです。
OSのファイルシステムドライバを通さないと、実装がカンタンとか、
そういうメリットがあるんでしょうか?
0102デフォルトの名無しさん
2007/12/24(月) 23:54:14ファイルを動的に持つ、ってどういう意味?
>で、また読み込みに行ったときに、デフラグされてると、どこにあるか分からなくなる、、とか。。
そうはならない。そのあたりはファイルシステムがどうにかする。
>どう頑張っても、Cの実装次第で、デフラグされるとおかしくなるようなプログラムは作れない・・・ですよね?
CじゃなくてOSの実装だってば。
C言語的には、HDDのセクタを直接読み書きするような物だったら、
デフラグでおかしくなる可能性はある。
が、まともなOSならドライバじゃない限り
HDDのセクタを読み書きできないようになってる。
HDDのセクタを直接読み書きせず、ファイルシステムを経由してアクセスするなら、
おかしくなることはない。
0103デフォルトの名無しさん
2007/12/24(月) 23:55:28逆に実装が難しくなるので、特殊な用途にしか使わない。
データ復旧ツールとか。
0104デフォルトの名無しさん
2007/12/25(火) 00:08:09う〜ん・・・そうですか。ありがとうございます。
ドライバやデータ復旧ツールを開発する訳でもないので、
私の聞き間違いか、言った人の勘違いかなんかでしょう・・・。
ありがとうございました。
0105デフォルトの名無しさん
2007/12/25(火) 00:15:19それこそ自分でデフラグするソフトを作るのでもない限り不要だね
0106デフォルトの名無しさん
2007/12/25(火) 00:42:37getch関数の質問なんですが
文字入出力関数を作成したのですが2バイトキーを無視する処理で
iKey = getch();
if ((0x00 == iKey) && (0xe0 == iKey)) {
getch();
}
というソースを書いたのですが、iKeyの型をintからcharにするとなぜかifの条件に引っかからなくなってしまうんですが、なぜなのでしょう???
知恵をお貸しください。
0107デフォルトの名無しさん
2007/12/25(火) 00:55:10○ unsigned char
char が符号無しな環境なら char でも動くが。
0xe0 の型は int 型で、これは 224 という値に相当するけど、
char が符号つきだと、iKey = 0xe0 として iKey に入っている値はまあ大抵は -32 になる。
0108デフォルトの名無しさん
2007/12/25(火) 00:58:11int a;
struct S1 {
struct {
int i;
HANDLE h;
}S2[100];
} ;
...
S1->S2[a].i = 001519 ; /* 001519は時分秒 */
S2[100]とされているものに対して、S2[a] を入れることによってどうなるのかが
よく分かりません。これは、構造体の配列・・・?
0109デフォルトの名無しさん
2007/12/25(火) 01:04:32このことをC言語の初心者にも分かり易く説明してくださいと言われたらどう答えますか?
0110デフォルトの名無しさん
2007/12/25(火) 01:05:38そのまま教えればいいだろ。
わからなかったら分かるまで考えてもらえばいい。
0111デフォルトの名無しさん
2007/12/25(火) 01:13:13まあ簡単に言うなら char が符号つきだと
0xe0 は値の範囲から外れちゃうから等しくなんないよ、と。
0112デフォルトの名無しさん
2007/12/25(火) 01:13:52構造体の配列。
0113デフォルトの名無しさん
2007/12/25(火) 01:14:03おしえてもらった通りに説明したいと思います。
ありがとうございました。
0114デフォルトの名無しさん
2007/12/25(火) 01:19:48どっちを行うかは、規格できっちり決まっているものですか?
0115デフォルトの名無しさん
2007/12/25(火) 01:22:24signed なら算術
unsigned なら論理
0116デフォルトの名無しさん
2007/12/25(火) 01:23:18unsigned なら論理シフトだが、
signed の場合にどうするかは規格で決められていない。処理系定義。
0118デフォルトの名無しさん
2007/12/25(火) 01:27:04なるほど・・・。
int a = 5;
だとしたら、S2構造体の 5番目の変数 i にアクセスしてるってことなんですね。
S1->
となってるのは、なんでなんでしょうか?
0119デフォルトの名無しさん
2007/12/25(火) 01:29:090120デフォルトの名無しさん
2007/12/25(火) 01:31:30○ S1 のメンバである、無名の構造体の配列 S2 の 5 番目の要素の、メンバ i
0121デフォルトの名無しさん
2007/12/25(火) 01:32:23そうなんですか?
至るところで、
S1->
をやってます。。そもそもなんで入れ子なんだろう・・・構造体要素1個なのに
至るところで入れ子やってます・・。
0122デフォルトの名無しさん
2007/12/25(火) 01:33:46struct {
int i;
HANDLE h;
} S2[100];
} S1[1];
となってないか?
0123デフォルトの名無しさん
2007/12/25(火) 01:36:54「S2」は「構造体の配列名」であって、「構造体名」ではないんですね。
構造体名は無名なんですね。
メンバ i
は、構造体配列 S2 の5番目の要素の無名構造体のメンバ i
って感じでしょうか。
0124デフォルトの名無しさん
2007/12/25(火) 01:41:05こいつのことだ
↓
S2[100] [i | h] [i | h] [i | h] [i | h] [i | h] [i | h] [i | h] ... [i | h]
S2[0] S2[1] S2[2] S2[3] S2[4] S2[5] S2[6] ... S2[99]
0125デフォルトの名無しさん
2007/12/25(火) 01:41:56あ、すみません!
S1->S2[a].i = 001519 ;
をやる前に、
struct S1 *S1 ;
となってました。
この場合、また型名と変数名が同じなので、
S1->
がどっちを指してるか分からないのですが・・・(n
0126デフォルトの名無しさん
2007/12/25(火) 01:42:53単に構造体タグ名と変数名が同じというだけだな。
S1-> の S1 は変数名。
0127デフォルトの名無しさん
2007/12/25(火) 01:45:39こう書くと 8 進数になるけど 9 ってのが入ってて、
エラーになるはずだが。
0128デフォルトの名無しさん
2007/12/25(火) 01:49:53どうもご丁寧にありがとうございます。
なるほど。分かり易いです。
>>126
struct S1 *p ;
p->
ってことですね。なんで分かるんですかぁぁ・・??
p->
だとすると、なんでわざわざポインタ型にして、入れ子の中の構造体に
アクセス??あああ訳が分からない・・・・結局 i には何が入っているの・・・
0129デフォルトの名無しさん
2007/12/25(火) 01:56:13構造体タグ名を使って S1-> という風にはできないから
S1 は何らかのポインタであるはずだ、ということになる。
C だと構造体タグ名と同名の変数を作る事はできるけど、普通は紛らわしいのでやらない。
>結局〜
例えば
struct S1 hoge;
struct S1 *S1 = &hoge;
とした場合、S1->S2[a].i は hoge.S2[a].i と同じことになる。
0130デフォルトの名無しさん
2007/12/25(火) 01:59:49すみません。001519 に入ってる値は、ビット演算子で時分秒をいろいろ
ゴチャゴチャやっていた値が入っていて、ビット演算子がよく分からなかったので、
>>105 の書き込み時間を適当に入れてみただけなんです。
晒してしまうと、
struct tm tagTime;
pstm = &tagTime;
nRunTime = /* 時分秒設定 */
(((((((pstm->tm_hour / 10) << 4) | (pstm->tm_hour % 10)) << 8) |
((pstm->tm_min / 10) << 4) | (pstm->tm_min % 10)) << 8) |
((pstm->tm_sec / 10) << 4) | (pstm->tm_sec)) << 8 ;
S1->S2[a].i = nRunTime ;
ってなことをやってます。
0131デフォルトの名無しさん
2007/12/25(火) 02:01:030132デフォルトの名無しさん
2007/12/25(火) 02:03:20int gcm(int a,int b);
int gcm(int a,int b){
int amari;
if( a < b ){
while(1){
amari = b % a;
if( amari == 0 ){
return amari;
break;
}else{
a = b;
b = amari;
}
}
}else{
while(1){
amari = a % b;
if( amari == 0 ){
return amari;
break;
}else{
b = a;
a = amari;
}
}
}
}
0133デフォルトの名無しさん
2007/12/25(火) 02:04:01int main(void){
int x,y;
int ans;
printf("*********最大公約数の計算をします********\n\n\n");
printf("1つ目の整数値を入力してください:");
scanf("%d",&x);
printf("\n2つ目の整数値を入力してください:");
scanf("%d",&y);
ans = gcm(x,y);
printf( "\n\n\nGCM(%d %d) = %d", x, y, ans);
return 0;
}
0134デフォルトの名無しさん
2007/12/25(火) 02:06:00>>133
ユークリッドの互助法のプログラムを書いてみたんですが、
二つの数値入力してエンターキー押したらコマンドプロンプトの画面がすぐ消えてしまいます。
自分ではこれであってると思うのですがどこがおかしいか見てもらえますか。
お願いします。
0135デフォルトの名無しさん
2007/12/25(火) 02:07:28>S1->S2[a].i は hoge.S2[a].i と同じ
が難解すぎる・・・orz
>>129を考えながら寝ることにします。
夜分遅くまでお付き合いいただき、大変ありがとうございました!
おやすみなさい。
0136デフォルトの名無しさん
2007/12/25(火) 02:08:21Ctrl+F5 で実行すると消えない。
あるいは、最後にもう1つ入力をいれておくか。
まあ、まだバグがあるようだが、それは考えてくれ。
0137デフォルトの名無しさん
2007/12/25(火) 02:09:10図を書くといいよ。
0138デフォルトの名無しさん
2007/12/25(火) 02:10:18一瞬で終わる計算なんだからそれで正しいだろう
0139デフォルトの名無しさん
2007/12/25(火) 02:15:39>>138
Ctrl+F5なら消えないんですかほむほむ。
return amariを return bに直したら正常に計算する事ができました。
ありがとうございます。
0140デフォルトの名無しさん
2007/12/25(火) 02:20:07(*S1).S2[a].i と同じではどうだ。
0141デフォルトの名無しさん
2007/12/25(火) 09:48:22現在、MSNメッセンジャーで受信したメッセージから特定のコマンドを抜き出して
別のアプリケーションへ送るというソフトを作ろうとしています。
そこで、まず、あらかじめアクティブにしておいたメッセンジャーで受信した文字列を
1秒間隔でCTRL+A CTRL+Cを利用して取り込む・・・という方法を調べているのですが分かりません。
どなたか答えていただける方がいればよろしくお願いいたします。
0142デフォルトの名無しさん
2007/12/25(火) 09:57:58メッセンジャーでやったことはないけど
直接ウインドウテキスト取れないか?
0143デフォルトの名無しさん
2007/12/25(火) 09:58:48スレ違い。
VisualC++スレへ。
http://pc11.2ch.net/test/read.cgi/tech/1196430042/
0145デフォルトの名無しさん
2007/12/25(火) 10:14:18スレタイ読める?
0146デフォルトの名無しさん
2007/12/25(火) 10:17:47いや、C言語・・・。
0147デフォルトの名無しさん
2007/12/25(火) 10:18:40Win32API質問箱 Build60
http://pc11.2ch.net/test/read.cgi/tech/1196874830/
0148デフォルトの名無しさん
2007/12/25(火) 10:42:280149デフォルトの名無しさん
2007/12/25(火) 11:57:03データ型って意味あんすか?・・・
signed long intとか long intと同じじゃないすか?
undigned型とかって使ったりすんでしょうかね?
0150デフォルトの名無しさん
2007/12/25(火) 12:05:08long intはsigned long int の省略みたいな物だからまあ同じだろうね
unsignedは使うだろ
signedで桁数が足りなくて、負数を扱わない時とか
0151デフォルトの名無しさん
2007/12/25(火) 13:05:17・-(マイナス)の値がありえない変数のバグ防止
・char型については、signedを指定しないときの符号の有無は処理系依存
意味無いものなんて無い。必要に応じて使い分けるべし。
0152デフォルトの名無しさん
2007/12/25(火) 14:01:54eを使って表示させると6.111e-20とか、計算誤差の分が表示されてしまいます。
解決する方法はありますか?
0153デフォルトの名無しさん
2007/12/25(火) 14:17:04どう表示させたいのかわからない。
%3.1e とか?
0154デフォルトの名無しさん
2007/12/25(火) 14:26:40eを用いて表示させたいんですが、精度は小数点以下5桁ぐらいで、それいじょうはeの表示に反映させないようにしたいです
0155デフォルトの名無しさん
2007/12/25(火) 14:33:16if (fabs(x) < 0.00001) {
x = 0;
}
printf("%e", x);
0156デフォルトの名無しさん
2007/12/25(火) 14:36:210のときだけじゃなく、どんな数字にたいしても精度を切り捨てたいんです
0157デフォルトの名無しさん
2007/12/25(火) 15:50:41あんたら何作ってる?
俺はアドレス帳など作ってみたんだが他にやりがいのある物はないか?
0158デフォルトの名無しさん
2007/12/25(火) 15:58:250159デフォルトの名無しさん
2007/12/25(火) 16:06:06物体が動くようにしたり
0160デフォルトの名無しさん
2007/12/25(火) 16:17:08つ[%.5g]
0161デフォルトの名無しさん
2007/12/25(火) 17:05:39四捨五入で求めたいのですが、
どういう風に書けばいいでしょうか。
今は下記のようにしています。
int n,m,d
n = m / d;
if( (m % d) > (d >> 1) ) n ++;
0162デフォルトの名無しさん
2007/12/25(火) 17:20:570163デフォルトの名無しさん
2007/12/25(火) 17:26:470164デフォルトの名無しさん
2007/12/25(火) 17:30:17うまくいきません。6.111e-20とかでてきます。
0165デフォルトの名無しさん
2007/12/25(火) 17:30:43どう表示させたいのかわかんあいんだよ
0166デフォルトの名無しさん
2007/12/25(火) 17:36:17double型の変数の
小数点以下、例えば5桁だけを利用して表示したいんです。
0.000000002121なら0を表示したいです。
数がでかくなったらeを使ってすっきり表示したいです
0167デフォルトの名無しさん
2007/12/25(火) 17:42:13char pai[3][9] = { {'1','2','3','4','5','6','7','8','9'},
{'�@','�A','�B','�C','�D','�E','�F','�G','�H'},
{'一','二','三','四','伍','六','七','八','九'},
};
int main (void){
printf("%c",pai[0][2]);
return 0;
}
これで3という文字が表示されるはずなんですがうまくいきません。
どうなおせばいいのでしょうか。
0168デフォルトの名無しさん
2007/12/25(火) 17:43:44こうか?
if(fabs(x)>=1000){
printf("%e", x);
}else{
printf("%f", x);
}
0169デフォルトの名無しさん
2007/12/25(火) 17:46:20Warningいっぱい出なかった?
3はマルチバイト文字だから、'3' とやったら半分しか入らんぞ
0170デフォルトの名無しさん
2007/12/25(火) 17:48:37二度手間だけど、丸めと表示の二段階で行なう。
void print(double foo)
{
char buf[20];
sprintf(buf, "%.5g", 1 + foo);
printf("%.5g", atof(buf) - 1);
}
0171デフォルトの名無しさん
2007/12/25(火) 17:50:40自分の好きにフォーマットをコントロールしたいなら、
もうprintfのフォーマット機能に頼らず、
自分でフォーマットするプログラムを書いた方が早くないか?
いや、そんな気がする。どうだろう?
0172デフォルトの名無しさん
2007/12/25(火) 18:18:210173デフォルトの名無しさん
2007/12/25(火) 18:27:503をいれるのにはどうやればいいんですか?
0174デフォルトの名無しさん
2007/12/25(火) 18:35:19そりゃキミがどうしたいのかによって変わってくるが・・・
char pai2[3][9*2+1] = {
{"123456789"},
{"�@�A�B�C�D�E�F�G�H"},
{"一二三四伍六七八九"},
};
printf("%c%c",pai2[0][2*2],pai2[0][2*2+1]);
これでも一応出るんで、あとは考えて。
0175デフォルトの名無しさん
2007/12/25(火) 18:36:41●文字列にする方法
char pai ⇒ const char *pai
'3'など ⇒ "3"
printf() ⇒ printf("%s", ...
●ワイド文字にする方法
char pai ⇒ wchar_t pai
'3'など ⇒ L'3'
printf() ⇒ wprintf(L"%lc", ...
かなあ? いまいち自信なし。
0176デフォルトの名無しさん
2007/12/25(火) 19:18:52char pai[3][9] = { {'1','2','3','4','5','6','7','8','9'},
{'�@','�A','�B','�C','�D','�E','�F','�G','�H'},
{'一','二','三','四','伍','六','七','八','九'},
};
↑この時点でスタック壊してるな。
何が起こっても不思議ではない。
ワイド文字にしたほうがよい。
>●ワイド文字にする方法
>char pai ⇒ wchar_t pai
>'3'など ⇒ L'3'
>printf() ⇒ wprintf(L"%lc", ...
処理系がわからんが、VCなら L'3' じゃなくて_T('3')のほうがいい。
0177デフォルトの名無しさん
2007/12/25(火) 19:38:19n = (m+0.5)/d;
0178デフォルトの名無しさん
2007/12/25(火) 19:53:57ワイドじゃないとダメだから _T にしたらあかんがな。
0179デフォルトの名無しさん
2007/12/25(火) 23:07:29【問題】
文字列Aのm番目からn個分の文字列を配列Bにコピーする
サブルーチンを作れ。
ただし、m,nの値が文字列Aの範囲を超えるような値が入力
されたら1を返し、正常にコピーできたら0を返す。
こんなプログラム組みました。
問題中のm,n,文字列A,Bの各オブジェクト名,サブルーチンの返値は
勝手に解釈して組んでます。(正常時TRUE(1),異常時FALSE(0))
0180デフォルトの名無しさん
2007/12/25(火) 23:08:45#include <string.h>
#define STR_MAX 10
#define TRUE 1
#define FALSE 0
typedef unsigned short BOOL;
BOOL BlockCopy( unsigned char*, unsigned char*, short, short );
// メイン関数
int main( void )
{
unsigned char szSrcName[STR_MAX+1];
unsigned char szDstName[STR_MAX+1];
short nStartPos = 0;
short nCopyLen = 0;
printf( "Input Str : " ); scanf( "%10s", szSrcName );
printf( "Input StartPosition : " ); scanf( "%d", &nStartPos );
printf( "Input CopyLength : " ); scanf( "%d", &nCopyLen );
if( BlockCopy( szDstName, szSrcName, nStartPos, nCopyLen ) == FALSE )
{
puts( "Error!!" );
return 1;
}
printf( "入力文字列 : %s\n", szSrcName );
printf( "コピー文字列 : %s\n", szDstName );
return 0;
}
0181179,180
2007/12/25(火) 23:09:25BOOL BlockCopy( unsigned char* s1, unsigned char* s2, short m, short n )
{
int i;
short nLen = strlen( s2 );
if( nLen < m || nLen < (m+n) || nLen < n )
return FALSE;
memcpy( s1, s2+m, sizeof(char)*n );
return TRUE;
}
動作的には問題ないと思ってますがアドバイスお願いします。
また、この組み方はセンスないぞと思われる方は、よりよい
プログラムの組み方を教授して頂ければ幸甚です。
0182デフォルトの名無しさん
2007/12/25(火) 23:20:56その上でlibjpeg.soを使ったjpeg圧縮ライブラリを作りましたが、
jpeg_create_compress()を実行した時点で以下のメッセージが出て先に進みません。
JPEG parameter struct mismatch: library thinks size is 372, caller expects 376
構造体のサイズが合っていないと言ってるのはわかるのですが、
libjpeg.soとjpeglib.hのVerは合わせてありますし、
同じ名前のファイルが複数存在しない事も確認済みです。
どなたか解決方法を知らないでしょうか?
0183デフォルトの名無しさん
2007/12/25(火) 23:40:13・無闇とshortを使うのはよくない。
・sizeof(char)が1であることを前提としている関数を使うのにsizeof(char)を掛けるのはおかしい。
・「文字列をコピーする」関数なのだから、ナルターミネートは保証するべき。
ってことで、判定部を除くとこれでいい。
sprintf(s1, "%.*s", n, s2 + m);
0184デフォルトの名無しさん
2007/12/25(火) 23:55:05相手とファイルをやり取りするってプログラムを作りたいんだが。
どんな関数とか使うんだ?接続など
0185デフォルトの名無しさん
2007/12/25(火) 23:57:46環境と使うライブラリによって違う。
0186デフォルトの名無しさん
2007/12/26(水) 00:05:040187デフォルトの名無しさん
2007/12/26(水) 01:13:18その手の文字列処理関数は、コード見ないとどの引数が入力でどれが出力か分からないから、
プロトタイプ宣言だけで分かるようにconst付けたり仮引数名を工夫したりするといい
BOOL BlockCopy(unsigned char* dst, const unsigned char* src, short, short );
0188デフォルトの名無しさん
2007/12/26(水) 01:24:37.so と .h の不整合ではなくて、.so を作ったときのコンパイラ(構造体
のパディング)とそれを利用するプログラムのコンパイラ(構造体のパディ
ング)が違うんだろう。
0189デフォルトの名無しさん
2007/12/26(水) 08:30:05#pragma pack(push,4)
#include"jpeglib.h"
#pragma pack(pop)
もしくはコンパイルオプションで指定
0190182
2007/12/26(水) 10:42:05#pragma指定を追加する事で無事にプログラムが流れました。
gdbで構造体を確認しましたが壊れている様子もありませんでした。
どうもありがとうございました。
0191デフォルトの名無しさん
2007/12/26(水) 14:01:12の%.4sってどういう意味でしょうか?
0192デフォルトの名無しさん
2007/12/26(水) 14:08:20最小幅と最大幅の指定のうち、最小幅を省略したもの
0193デフォルトの名無しさん
2007/12/26(水) 14:45:17ありがとございました。
0194デフォルトの名無しさん
2007/12/26(水) 21:07:06#include <stdio.h>
int main(void)
{
printf("%d\n",10*2);
return 0;
}
この場合関数の型名ってあんまり意味ってないんですよね?
変数宣言などするときに意味があったりするんですか?
0195デフォルトの名無しさん
2007/12/26(水) 21:16:37関数ってどっちの関数?main?printf?
型名って何の型名?引数?戻り値?
0196デフォルトの名無しさん
2007/12/26(水) 21:21:20質問の意味がよくわかんね
printfは可変長引数
floatとか使いたいとき明示的に
接尾子のfを付けたりする
0197デフォルトの名無しさん
2007/12/26(水) 21:24:32それとも printf の戻り値を使ってないという事に関する疑問か。
0198デフォルトの名無しさん
2007/12/26(水) 21:43:080199デフォルトの名無しさん
2007/12/26(水) 21:48:270200デフォルトの名無しさん
2007/12/26(水) 21:51:30だって苦しむなんちゃらには
型名 関数名(引数){なんちゃら}
で関数って書いてあったんだもの><
>>199
そのとおりでございます
0201デフォルトの名無しさん
2007/12/26(水) 22:04:26やっぱりわかんね。
int temp = 10 * 2;
printf("%d\n",temp);
と
printf("%d\n",10*2);
は、最適化されて同じバイナリが吐かれるよね?、ということを聞いてる?
0202デフォルトの名無しさん
2007/12/26(水) 22:08:03そういうことじゃ?
0203デフォルトの名無しさん
2007/12/26(水) 22:09:55#include <stdio.h>
int main(void)
{
printf("%d\n",10*2);
return 0;
}
の場合intは文的には必要だが機能としてはまったく意味はない??が
#include <stdio.h>
int main(void)
{
printf("%d\n",(int)(1.05 * 360));
return 0;
}
のようにキャスト変換などするとintが使用されるっていうか
意味があるっていうか・・・・
そんな感じです
0204デフォルトの名無しさん
2007/12/26(水) 22:11:45そもそも関数の型の意味を理解していないな。
int mainのintは戻り値(OSに正常終了か否か)をreturn 0 か1かで必要だからint mainなんだよ。
0205デフォルトの名無しさん
2007/12/26(水) 22:13:56まだそこまでたどりついてません・・・
今苦しんでのキャスト変換のところなんで
もっと勉強すればわかることなんですね
0206デフォルトの名無しさん
2007/12/26(水) 22:17:41関数の戻り値が分かってない?
これは何をしているかわかる?
int unko(int x) {
int z = x*2;
return z;
}
int main()
{
int temp = unko(100);
return 0;
}
0207デフォルトの名無しさん
2007/12/26(水) 22:18:11int main(void)
{
〜〜〜
return 0;
}
は、関数の章で学ぶと思うから、
今は明示的に書かなければならないと思っておけばOK。
あまり先飛びすぎても混乱するだけだしね。
0208デフォルトの名無しさん
2007/12/26(水) 22:46:21整数リテラル 10 はそれ自体としてintという型を持っている。
整数リテラル 2 もintで、int*intの結果はint型になることになっている。
0209デフォルトの名無しさん
2007/12/26(水) 22:52:300210デフォルトの名無しさん
2007/12/26(水) 23:03:58とりあえず総じて何が聞きたいのか理解できん。
まずはここあたりを順に読んで、基本を覚えよ。
ttp://homepage1.nifty.com/toshio-k/prog/c/
0211デフォルトの名無しさん
2007/12/26(水) 23:29:52そのサイトは地雷原だから、他で勉強することを強くお勧めする。
0212デフォルトの名無しさん
2007/12/26(水) 23:31:17ここオヌヌメ
友達から教わったけど、ここだけでCの基礎はバッチリ・・・?覚えたよ
ていうかC言語でググると一番上に出てくる
0213デフォルトの名無しさん
2007/12/26(水) 23:43:51あー、間違いをそれと知らずに教わるにはいいかも。
0214デフォルトの名無しさん
2007/12/26(水) 23:44:320215デフォルトの名無しさん
2007/12/26(水) 23:46:46C++ の本でも最初のうちは C と似たようなもんだし、
その延長で C++ まで覚えてしまった方が絶対得だよ。
0216デフォルトの名無しさん
2007/12/26(水) 23:47:18C++はしょっぱなからクラス教えないっけ?
0217デフォルトの名無しさん
2007/12/26(水) 23:57:32まずCをやるんだけど、mallocとかFILE*とか、C++ではとって変わった部分を捨てて、
そのままC++のクラスなりnewなりをやれ、みたいなぁぁぁ
0218デフォルトの名無しさん
2007/12/26(水) 23:58:16間違いがあるってことだろ。間違いかどうかは微妙だけど、こういう書き方されるともにょる。
>つまり、書き換える必要のある文字列は、一旦文字型配列に格納してから処理をするのが無難だと言えます。
# 無難も何も、文字列リテラルを書き換えるのは論外なわけで……
0219デフォルトの名無しさん
2007/12/27(木) 00:08:39格納=コピーならいいけど、ポインタだけ格納してもね
0220デフォルトの名無しさん
2007/12/27(木) 03:29:34int main(void)
{
int i,d=97,c=65;
char ca;
scanf("%c",&ca);
for(i=65;i=<90;i++){
if(ca=c){
ca=d;
breke;
}
else{
i++,d++,c++;
}
}
printf("ca = %c ",ca);
return 0;
}
なんでこれがコンパイルできひんのじゃ!C言語死ねッ!!!!!
0221デフォルトの名無しさん
2007/12/27(木) 03:47:14比較じゃなく代入してる
0222デフォルトの名無しさん
2007/12/27(木) 03:49:14すまんかった・・・・・
0223デフォルトの名無しさん
2007/12/27(木) 03:49:59ついでにbreak。brekeなんてない。
0224デフォルトの名無しさん
2007/12/27(木) 03:50:300225デフォルトの名無しさん
2007/12/27(木) 03:51:48プロンプト読めない
0226デフォルトの名無しさん
2007/12/27(木) 03:53:10オヌヌメ
0227デフォルトの名無しさん
2007/12/27(木) 03:56:51お気に入り追加した
この恩は忘れるまで忘れない!
0228デフォルトの名無しさん
2007/12/27(木) 04:03:27コンパイラタン(AA略)「なんでよ私一生懸命やってるじゃん!なんでそんなこと言うの!・・・ヒドイヨ・・・・・」
0229デフォルトの名無しさん
2007/12/27(木) 04:09:300230デフォルトの名無しさん
2007/12/27(木) 04:37:370231デフォルトの名無しさん
2007/12/27(木) 04:43:190232デフォルトの名無しさん
2007/12/27(木) 07:24:49下記のソースでコンパイルは通るのですがIF文で条件外でも処理を実行してしまうようなのです。
どこが間違っているのか教えてください。お願いします。
#include <stdio.h>
#include <ctype.h>
main() {
int i;
int date[10];
for(i=0 ; i<10 ; i++) {
scan:
printf("%d個目のデータ:", i+1);
fflush(stdin);
scanf("%d", &date[i]);
if(isdigit(date[i]) == 0) {
printf("数値を入力してください。\n");
date[i] = 0;
goto scan;
}
}
printf("前から6個目のデータ:%d", date[5]);
return 0;
}
0233デフォルトの名無しさん
2007/12/27(木) 08:13:57既にここで入力を数値として変換してしてるので scanfの戻り値を調べるといいよ。
isdigitは文字が('0'〜'9')かどうか判定する関数。
それとこの状況でわざわざコードを読みにくくするgotoを使用する意味はない。
whileとbreakで代用したほうがいい。
0234232
2007/12/27(木) 08:27:31ああ、そっか。%dだから受け取った時にすでに数値になってるんだ。なるほど。
じゃあこの場合文字を入れさせないようにするにはどういう風にしたら良いのでしょうか?
>whileとbreakで代用したほうがいい。
たしかにその通りです。気をつけます。
0235デフォルトの名無しさん
2007/12/27(木) 08:27:50> main() {
> int i;
> int date[10];
>
> for(i=0 ; i<10 ; i++) {
> scan:
> printf("%d個目のデータ:", i+1);
> fflush(stdin);
入力ストリーム(stdin)のフラッシュは未定義
したこと無いけどたぶんフラッシュされない。
> scanf("%d", &date[i]);
> if(isdigit(date[i]) == 0) {
isdigitの引数は文字。'1'は文字。1は数値。ってな感じ。
> printf("数値を入力してください。\n");
> date[i] = 0;
> goto scan;
> }
> }
> printf("前から6個目のデータ:%d", date[5]);
> return 0;
> }
>
0236デフォルトの名無しさん
2007/12/27(木) 08:28:52まず、直接関係ないが、
goto scan;
↑これは止めれ。こういうときはwhile文を使うのがセオリーだ。
isdigit()は「文字が数字かどうか」を判定する関数だよ。
scanf()で変換すると「数値」(int型)になるので、
scanf("%d", &date[i]);
if(isdigit(date[i]) == 0) {
これだとisdigit()は常に0を返すはず。
それに、scanf("%d", &date[i]); の場合、数字の入力を期待しているので、
それ以外の文字は入力されてもdate[i]に入らない。
0237デフォルトの名無しさん
2007/12/27(木) 08:38:22main()
これでCマガジンに連載できるなんて…。・゚・(ノД`)・゚・。
休刊もやんぬるかな。
0238デフォルトの名無しさん
2007/12/27(木) 09:29:02省略した場合はintって決まりなかった?
だから一応正しいんじゃない?
0239デフォルトの名無しさん
2007/12/27(木) 09:31:09scanfの戻り値を利用する
scanfはスキャンに成功した数を返すから、
今回のケースで文字を入力されたら0が返る
0240デフォルトの名無しさん
2007/12/27(木) 09:35:56>scanf("%d", &date[i]);
0241デフォルトの名無しさん
2007/12/27(木) 09:43:47>>232
>scanf("%d", &date[i]);
こういう取り方は文字/数字チェックそのものに意味が無いのでやめ
普通はバッファの文字列変数を用意させて、そこに入力させる。
それをisdigit()に通してクリアしたら、その時点でdate[i]に代入するようにすればいい。
0242デフォルトの名無しさん
2007/12/27(木) 11:13:33結果がへんになる!!!
#include<stdio.h>
int main (void)
{
int a,c;
float b,d;
b=1,d=1;
scanf("%d",c);
for(a=1;a<=1000;a++){
b=b+d;
if(b*b==c){
break;
}
if(b*b<=c)
d=d*0.1;
}
printf(" %d の平方根は= %f ",c,b);
return 0;
}
0243デフォルトの名無しさん
2007/12/27(木) 11:21:530244デフォルトの名無しさん
2007/12/27(木) 11:27:040245デフォルトの名無しさん
2007/12/27(木) 11:30:23すいませんすいませんすいません!
もうしませんもうしませんもうしません!
0246デフォルトの名無しさん
2007/12/27(木) 14:22:54????のところ(該当しなかった場合)が思いつきません。
助けてくださいです…
char a[20];
char b[20];
int hi,lo,i;
略
hi=i;
i=i/2;
lo=0;
while(1){
if(strcmp(b,a) < 0){
hi=i;
i=i-(hi-lo)/2;
}else if(strcmp(b,a) > 0){
lo=i;
i=i+(hi-lo)/2;
}else if(strcmp(b,a) == 0){
printf("あった");
break;
}else if( ???? ){
printf("そんなものなかった");
break;
}
}
0247デフォルトの名無しさん
2007/12/27(木) 14:30:21そこは if (lo > hi) を入れたいんだと思うが、
突っ込みどころが多すぎるからもうちょっと練り直して来い。
0248デフォルトの名無しさん
2007/12/27(木) 14:34:430249デフォルトの名無しさん
2007/12/27(木) 14:45:05絶対通過しない、まあelse外せばいいけど。
で、1ループでstrcmpは1回呼べばいいべ。
あと文字列が終わったのをチェックしないとね。
略の部分を略さないでテスト用に値設定したやつさらしてみてね。
0250246と248
2007/12/27(木) 14:55:46ちょとまってください。
0251デフォルトの名無しさん
2007/12/27(木) 15:10:06int main(){
int i,j;
for(i=1;i<=9;++i)
printf("%2d ",i);
printf("\n--------------------------\n");
for(i=1;i<=9;++i){
for(j=1;j<=9;++j)
printf("%2d ",i*j);
printf("\n");
}
return 0;
for文の練習で書いた上の九九を表示するプログラムをwhile文だけで書けないかなぁと思って
0252デフォルトの名無しさん
2007/12/27(木) 15:10:38#include <stdio.h>
int main(){
int i=1;
while(i<=9){
printf("%2d ",i);
i++;
}
printf("\n--------------------------\n");
i=1;
int j=1;
while(i<=9){
while(j<=9){
printf("%2d ",i*j);
j++;
}
printf("\n");
i++;
}
return 0;
}
このように書いてみたのですが1の段以降改行だけでプログラムが終了してしまいます
どうやったら上手く動かせるでしょうか
0253デフォルトの名無しさん
2007/12/27(木) 15:13:52jの値がどういう風に変化するか追ってみよう。
0254デフォルトの名無しさん
2007/12/27(木) 15:13:58while (j<=9) のループ抜けたらj を1に戻さないと。
0255デフォルトの名無しさん
2007/12/27(木) 15:20:50ヒントありがとうございました
0256246他
2007/12/27(木) 15:54:11またあとで伺いにきます。
かしこ
0257デフォルトの名無しさん
2007/12/27(木) 16:38:48苦しんで覚えるC言語
ttp://homepage3.nifty.com/mmgames/c_guide/
というサイトを見つけたのですがこのサイトはどうでしょうか?
初心者にいいサイトや本を教えてください
0258デフォルトの名無しさん
2007/12/27(木) 16:56:000259デフォルトの名無しさん
2007/12/27(木) 17:31:45おk
0260デフォルトの名無しさん
2007/12/27(木) 17:37:170261デフォルトの名無しさん
2007/12/27(木) 18:13:44そのサイトはダメ出しされているよ。
0262デフォルトの名無しさん
2007/12/27(木) 18:33:230263デフォルトの名無しさん
2007/12/27(木) 18:40:270264デフォルトの名無しさん
2007/12/27(木) 18:54:030265デフォルトの名無しさん
2007/12/27(木) 18:57:48そのサイトで勉強すると、>19や>205みたいなことを書くようなお馬鹿になっちゃうよ。
0266デフォルトの名無しさん
2007/12/27(木) 19:03:50参考になるけど、やっぱり本がいいよ。
独習Cとか、やさしいCね。
0267デフォルトの名無しさん
2007/12/27(木) 19:04:050268デフォルトの名無しさん
2007/12/27(木) 19:05:44そこに留まらずいくつかのサイトを回った方がいいよ
そして宿題スレで宿題を解く
ついでに簡単なデータ構造、アルゴリズムも学ぶ
こんな感じで基礎はおk
0269デフォルトの名無しさん
2007/12/27(木) 19:09:25ってなって悲しくなるぞ。
0270デフォルトの名無しさん
2007/12/27(木) 19:37:32ってなって嬉しくなるぞ.
0271デフォルトの名無しさん
2007/12/27(木) 19:50:21適当に検索して、
その日見つけたサイトをぱらぱらと読む
サイト規模にもよるけど1日ありゃ十二分に読み終われるとこばっかだし
0272デフォルトの名無しさん
2007/12/27(木) 20:08:52http://mikata.curiocube.com/index.php
0273デフォルトの名無しさん
2007/12/27(木) 20:10:38(例文の内容にアニメ好きがかもしだされているが)
Programing Placeでデータ構造とかその他の
知識を学ぶ。
で理解できない所(ポインタとかかな)を重点的に
載せてる本でさらに学ぶ。
あとは、経験値をつけていくだけだ。
0274273
2007/12/27(木) 20:11:470275デフォルトの名無しさん
2007/12/27(木) 21:02:210276デフォルトの名無しさん
2007/12/27(木) 21:05:44いいえ、それは初期化です
0277デフォルトの名無しさん
2007/12/27(木) 21:10:49違うサイトで勉強するわ
お勧め教えてくだしあ
0278デフォルトの名無しさん
2007/12/27(木) 21:17:21猫でも解るって、ぶっちゃけどう?
携帯からサーセソw
0279デフォルトの名無しさん
2007/12/27(木) 21:21:20int i;
i = 0;
を指してるなら可能だし
int i=0;
なら>>276の言うとおり「初期化」という。
0280デフォルトの名無しさん
2007/12/27(木) 21:33:140281デフォルトの名無しさん
2007/12/27(木) 21:36:05初期化と代入ではできることが違う場合がある。
配列は一気に全要素を初期化できるけど、
一気に全要素に代入することはできず、
1要素ずつしか代入できない、とか。
0282デフォルトの名無しさん
2007/12/27(木) 21:36:06x = 1; //Error
//代入できNEeeee!!!
const int x = 1; //OK
//Yeah! 初期化最高!!
0283デフォルトの名無しさん
2007/12/27(木) 21:36:51ぜんぜん違う。初期化される前の値が何であるかは神のみぞ知る。
0284デフォルトの名無しさん
2007/12/27(木) 21:39:47仮に最適化されないとするなら、
生成される機械語コードは同じですか?
それとも違う?
(1)
int array[2] = {1,2};
(2)
int array[2];
array[0] = 1;
array[1] = 2;
0285デフォルトの名無しさん
2007/12/27(木) 21:40:470286284
2007/12/27(木) 21:41:47初期化と代入は内部的に全く異なる処理をやっているんですか?
それともただ確保後に代入してるだけですか?内部的に。
0287デフォルトの名無しさん
2007/12/27(木) 21:43:530288デフォルトの名無しさん
2007/12/27(木) 21:44:590289デフォルトの名無しさん
2007/12/27(木) 21:48:46mov で初期化してるかもしれないし。
そのあたりはコンパイラ次第としか言いようが無い。
0290デフォルトの名無しさん
2007/12/27(木) 22:22:17多分,全然違うコードになってる。
0291デフォルトの名無しさん
2007/12/27(木) 22:42:54>仮に最適化されないとするなら、
これが殆ど意味がないのでなんとも言えない。
0292デフォルトの名無しさん
2007/12/27(木) 23:45:59空行(セミコロンのみの行)に対してNOPを吐くか消されるかだってコンパイラしだい。
予想でいいのならいくらでも応えられるけどな。
>>284のコードなら最適化関係なく同じコードが吐かれるかもね。
0293デフォルトの名無しさん
2007/12/27(木) 23:55:280294デフォルトの名無しさん
2007/12/27(木) 23:58:41びっくりするほどなくなる
0295デフォルトの名無しさん
2007/12/28(金) 00:17:480296デフォルトの名無しさん
2007/12/28(金) 01:40:46配列の初期化はOKだけど配列全体の代入はNG
なんでえ〜?ってのはポインタやると判る
0297デフォルトの名無しさん
2007/12/28(金) 02:13:30プロトタイプ宣言ってなんですか?
C言語ってなんで関数を使う前に宣言しとく必要があるんですか?
昔ながらの慣習みたいなものですか?
宣言無くてもコンパイル通るなら、
コンパイラの手抜きと違うんですか?
関数宣言がないときと宣言も定義もないときと
ちゃんとコンパイラは違うエラー出しますよね?
0298デフォルトの名無しさん
2007/12/28(金) 02:26:150299デフォルトの名無しさん
2007/12/28(金) 02:41:530300デフォルトの名無しさん
2007/12/28(金) 02:49:42fopenとfcloseの使い方がようやく分かって、ポインタについては良くわかりません(変数の代わりなのかな?くらい
そこであるテキストファイルを開いて、その中にある文字列(英数字)からある文字列(setofなど)を探したいです
最終的にはある文字列が見つかる→その後ろ〜〜バイト(もしくは〜〜行)をコピーして、別のファイルにペースト というところまでやりたいのですが
検索しようとしている時点で詰まっています。ソースコードは以下です
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define BUFFER_SIZE 200
main(){
char buffer[BUFFER_SIZE],name[BUFFER_SIZE];
FILE *fp;
printf_s("test.txtを開こうとしました\n\n\n\n");
fp = fopen("test.txt", "r");
printf_s("検索文字列を代入してください\n");
scanf_s("%s",&name);
printf_s("%sを検索しています\n",name);
if ( !fp ){
printf("ファイルオープンエラー\n");
return 0;
}
while( fgets(buffer, BUFFER_SIZE, fp) ){
if(!strcmp(name,buffer)){
printf_s("%sが見つかりました!\n",name);
break;
}
}
fclose(fp);
}
0301デフォルトの名無しさん
2007/12/28(金) 02:54:03『aaxaa ←改行
bbxb ←改行
cxc【EOF】』
すると、cxcを入力しても反応してくれず、strcmpのところでcxc\nに変更すると、ifの見つかりました文が出ます
コレに対する問題点としては
1.改行まできっちり一致しなければ見つからないことになる
2.bbxbで完全一致であるが、bxbでも部分一致で見つかったことにしたい
しかし、今では1行読み込みのために不可能(BUFFER_SIZEを実数にしても無理)
というところです
〜〜の関数使ったほうがいいよ、とか、こういうルーチンで考えるとできるよ、っていうのがあればお願いします
わかりにくい質問で申し訳ありませんが、宜しくお願いします
0302デフォルトの名無しさん
2007/12/28(金) 02:55:05strstr()
0303デフォルトの名無しさん
2007/12/28(金) 03:02:33ありがとうございます。今色々なページを見てきたのですが…
返り値としてポインタとして返すんですね。ポインタと見た瞬間に顔が引きつったのですが…
void TestStrStr(void)
{
char *s1 = "abcdef";
char *s2 = "de";
char *cp;
cp = StrStr(s1, s2);
printf("'%s'の中に現れる'%s'という文字列は%d文字目にある.\n", s1, s2, cp - s1 + 1);
}
このようなソースを見つけました。printfの一番後ろにあるcp-s1+1はおそらく何文字目にあるか指定してくれてるようなのですが
ポインタ同士を引き算しているこのような場合、実数として計算をしているのでしょうか?
0304デフォルトの名無しさん
2007/12/28(金) 03:13:28メモリアドレスを計算している。s1が100番地に格納されているとすると、メモリ上は
100 101 102 103 104 105 106 (メモリアドレス)
a b c d e f \0
のようなイメージ。
strstr()は、見つかった部分のポインタを返すから、"de"を見つけたならアドレス103を返し、それをcpに代入している。
printf()の最後の引数はcp - s1 + 1、つまり103 - 100 + 1で4を返す。
0305デフォルトの名無しさん
2007/12/28(金) 03:23:02なるほど。だからポインタは便利だって言われてるんですね…メモリ上の一番基礎になる数字を返すから…
ありがとうございます
もうちょっとポインタのこと勉強してからやってみます。とりあえず今日は寝ます
ありがとうございました
0306デフォルトの名無しさん
2007/12/28(金) 03:26:31すまん、ちゃんと質問読んでなかったw
ポインタは「アドレスという数字」を格納する変数。
アドレスと聞くと拒否反応が出るかもしれないが、メモリ上の位置を表す何の変哲も無いただの数字。
ただし、四則演算のうち可能なのは加算減算だけで乗除は出来ない。やっても意味のある数字が得られないから。
正しくはインクリメント、デクリメントだけど、これについての詳細はググってくれ。
0307デフォルトの名無しさん
2007/12/28(金) 04:18:50スタック、データ、コードのそれぞれのセグメントがどんな配置か判っているとポインタの理解が早くなる
0308デフォルトの名無しさん
2007/12/28(金) 07:55:49ちょっとだけ語弊がありそうなので補足。
・ポインタ+整数 → n 要素だけすすめたポインタを算出
・ポインタ−整数 → n 要素前のポインタを算出
これは可能。ただし配列とか malloc で用意してある範囲を逸脱しないように注意。
・ポインタ−ポインタ → 2つの要素の差を整数で算出
なんだけど、この場合2つのポインタは同じ範囲を指すもの
(304みたいに同じ文字列内の違う位置を指すように)
でないといけないから注意。
0309デフォルトの名無しさん
2007/12/28(金) 08:31:18整数なら四則演算が定義できるが、アドレスの場合は>>308の言う通り。
そしてインクレメント/デクレメントなんかは「アドレスと整数の混合演算」だと思えばいい。
C言語ではデータの種類によって専用の型を用意するから、整数はintやlong、アドレスは
ポインタを使うと思っておけばいい。
0310Google先生
2007/12/28(金) 10:17:12もしかして: インクリメント
0311デフォルトの名無しさん
2007/12/28(金) 11:01:26http://www.google.co.jp/search?hl=ja&q=%E3%82%A4%E3%83%B3%E3%82%AF%E3%83%AA%E3%83%A1%E3%83%B3%E3%83%88%E3%80%80%E3%83%87%E3%82%AF%E3%83%AA%E3%83%A1%E3%83%B3%E3%83%88
インクレメント デクレメント の検索結果 約 544 件中 1 - 10 件目 (0.34 秒)
http://www.google.co.jp/search?hl=ja&q=%E3%82%A4%E3%83%B3%E3%82%AF%E3%83%AC%E3%83%A1%E3%83%B3%E3%83%88%E3%80%80%E3%83%87%E3%82%AF%E3%83%AC%E3%83%A1%E3%83%B3%E3%83%88
検索結果を見ると、インクレメント/デクレメントと読む人もいるようだ。
0312デフォルトの名無しさん
2007/12/28(金) 12:52:57K&Rに何と書いてあるか読んでから出直して来い。
0313デフォルトの名無しさん
2007/12/28(金) 14:10:560314デフォルトの名無しさん
2007/12/28(金) 20:14:54ただ、そのあたりを議論したくてしょうがない馬鹿よけ対策として、
市民権のある表現を使うに越したことはない。
0315デフォルトの名無しさん
2007/12/28(金) 20:26:25T→テー
と発音するベテラン技術者に食って掛かる新米社員を思い出したw
0316デフォルトの名無しさん
2007/12/28(金) 22:39:56相互再帰する必要がある時はないと困る。
0317デフォルトの名無しさん
2007/12/28(金) 22:42:441972当時のマシンでJava並みのコンパイラやアプリなんて起動すらしねぇw
0318デフォルトの名無しさん
2007/12/28(金) 22:48:550319デフォルトの名無しさん
2007/12/29(土) 16:41:33どこのファイルに保存すればいいのか、全く分かりません
どなたか宜しくお願いします
0320デフォルトの名無しさん
2007/12/29(土) 16:43:140321デフォルトの名無しさん
2007/12/29(土) 16:44:42.|
∩___∩ |
| ノ\ ,_ ヽ .|
/ ●゛ ● | .J
| ∪ ( _●_) ミ
彡、 |∪| |
/ ∩ノ ⊃ ヽ
( \ / _ノ | |
\ " / | |
\ / ̄ ̄ ̄ /
 ̄ ̄ ̄ ̄
0322デフォルトの名無しさん
2007/12/29(土) 16:44:53c:\homeとかc:\srcとかってディレクトリを作ってそこに置け。
コマンドプロンプトを起動したら
cd /d c:\home
と打ってそこに移動してコンパイルしろ。
0323デフォルトの名無しさん
2007/12/29(土) 16:58:31と出てしまいます・・・
どういうことなのでしょうか・・
0324デフォルトの名無しさん
2007/12/29(土) 17:00:48Windows のことをもうちょっと勉強しる。
0325デフォルトの名無しさん
2007/12/29(土) 17:01:43>>322のはディレクトリ(フォルダ)名
0326デフォルトの名無しさん
2007/12/29(土) 17:08:10以下を入力
mkdir c:\home
cd /d c:\home
explorer /n,/e,c:\home
notepad hello.c
gcc hello.c && a.exe
0327デフォルトの名無しさん
2007/12/29(土) 17:11:14教えて下さい。
0328デフォルトの名無しさん
2007/12/29(土) 17:12:12http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/vclib/html/_crt__beginthread.2c_._beginthreadex.asp
0329デフォルトの名無しさん
2007/12/29(土) 17:41:230330デフォルトの名無しさん
2007/12/29(土) 17:44:59何を?C?
あんたの今のCの習熟度、他言語について、PCに関する一般知識がどの程度のものか
0331デフォルトの名無しさん
2007/12/29(土) 17:48:06Cですね
今日はじめた。他言語まったくしらない。PC知識まぁまぁ。
0332デフォルトの名無しさん
2007/12/29(土) 17:49:420333デフォルトの名無しさん
2007/12/29(土) 17:50:13一通りどんな感じなのか知るのに2ヶ月、
それなりに使えだすのに半年、
十分使えるまでには1〜2年くらいじゃね。
0334デフォルトの名無しさん
2007/12/29(土) 17:52:240335デフォルトの名無しさん
2007/12/29(土) 17:59:35・ANSI前(K&R?)の仕様とC89、C99の規格に精通している
・代表的なコンパイラのオプションと処理系定義の仕様が概ね分かる
・上記コンパイラの最適化の仕様がある程度分かる(要アセンブラ?)
代表的なコンパイラ:gcc、VC、BCCぐらい?組込みだとその他もか
辺りだと思うんだがどーか。
0336デフォルトの名無しさん
2007/12/29(土) 18:00:370337デフォルトの名無しさん
2007/12/29(土) 18:04:53実務的な知識がなさすぎるだろう
0338デフォルトの名無しさん
2007/12/29(土) 18:05:490339デフォルトの名無しさん
2007/12/29(土) 18:17:550340デフォルトの名無しさん
2007/12/29(土) 18:25:23・Cコンパイラ書いた事がある。
0341323
2007/12/29(土) 18:55:56#include <stodio.h>
int main()
{
printf("Hello World!\n");
return 0;
}
のようなソースファイルを実行したらエラーがでました・・・
どこがまずいのでしょうか
0342デフォルトの名無しさん
2007/12/29(土) 18:58:03エラーメッセージ嫁
0343デフォルトの名無しさん
2007/12/29(土) 19:01:510345デフォルトの名無しさん
2007/12/29(土) 19:26:080346デフォルトの名無しさん
2007/12/29(土) 19:30:49ごめん、僕も極最近始めたものだけど、stodioには吹いたw
一緒に頑張ろう!
0347デフォルトの名無しさん
2007/12/29(土) 19:37:510348デフォルトの名無しさん
2007/12/29(土) 19:56:490349デフォルトの名無しさん
2007/12/29(土) 20:04:240350デフォルトの名無しさん
2007/12/29(土) 20:58:54お茶吹いたw
0351デフォルトの名無しさん
2007/12/29(土) 22:25:47もしかして今の商業高校とかでは教えられているのか?
0352デフォルトの名無しさん
2007/12/29(土) 22:40:37商業の基本は情報処理だが、
俺のとこじゃ国家試験の勉強が中心
だが、商業でVBをやるところもあったし、JAVAをやるところもある。
0353デフォルトの名無しさん
2007/12/29(土) 23:19:04この中の
lpPARAM lpParam = (lpPARAM)lpx;
はどのような意味を持っているのですか?
0354デフォルトの名無しさん
2007/12/29(土) 23:26:40元の関数仕様が void* だから
渡す側が lpPARAM をvoid*にいれて
とりだす側がキャストで戻してる
0355デフォルトの名無しさん
2007/12/30(日) 00:05:56難しいから使わなくても大丈夫かな?
0356デフォルトの名無しさん
2007/12/30(日) 00:08:16その内必要になる時がくる
0357デフォルトの名無しさん
2007/12/30(日) 00:15:13ポインタのメリットをすぐに理解する必要はないが,必要になったときにすぐに(少し調べて)使える程度に覚えとけ
0358デフォルトの名無しさん
2007/12/30(日) 00:17:59いま独習Cでポインタやってるんだが、まぁある程度理解してるんだが
少し、上に行くと難しいんだよな。
char *bokki ="ちんこが立つ";
printf(bokki);
って場所やってるぜ、こういうのってプロでも使うのか?
0359デフォルトの名無しさん
2007/12/30(日) 00:19:36使うメリットが無い内は使わなくていいと思うよ
便利だから使うのであって、かつC言語をやっていればそのうち「これはポインタを使った方が楽だ」って状況が出てくる
その時に使えばいいだけの話
まあC++ならまだしも、C言語だと関数との配列の受け渡しとかで
すぐにポインタが必要な状況になるよ
0360デフォルトの名無しさん
2007/12/30(日) 00:20:34同じアドレスを共有したいときがあるのさ
夫婦だって別々のベッドじゃいやだろ?
0361デフォルトの名無しさん
2007/12/30(日) 00:22:17まぁリテラル文字列はstaticでconstで領域もconstしちゃうけど
0362デフォルトの名無しさん
2007/12/30(日) 00:22:19もしかして359と360はバリバリ使えるんすか?
0363デフォルトの名無しさん
2007/12/30(日) 00:23:39const char * str = "俺童貞";
printf("%s", str);
まあdefineの代わりにconstポインタを使うことはあるかもね
defineの代わりとしては
const char* const str = "ヤリてー";
の方がいいかね
0364デフォルトの名無しさん
2007/12/30(日) 00:25:40この頭の良さを駆使して、みなさんが作ったプログラムはどんなのありますか?
実用的で使えそうなやつっすよタブを消したり入力した文字をソートしてなんたらしたり
0365デフォルトの名無しさん
2007/12/30(日) 00:26:20表示したい文字列に%があると見落とすかもよw
0366デフォルトの名無しさん
2007/12/30(日) 00:28:410367デフォルトの名無しさん
2007/12/30(日) 00:29:311,暗号化 2,解読 3,Quit
というやつでシーザー暗号に似た奴ですね。
まだまだへたれですよ
0368デフォルトの名無しさん
2007/12/30(日) 00:29:590369デフォルトの名無しさん
2007/12/30(日) 00:30:44本気で言ってるんすか?
知人の凄い人でもATMなのに人工衛星とかの制御プログラムとか次元が違いすぎる
0370デフォルトの名無しさん
2007/12/30(日) 00:32:40ポインタのポインタらしい使いかたはしないって流れになってきてるな。
じゃPascalでも使ってればいいのにって気がするけど。
0371デフォルトの名無しさん
2007/12/30(日) 00:32:54早くファイル操作などの場所をやりたいんですが、ページを飛ばすと複雑な気持ちになるので
ポインタのページと関数のページを仕方なくやりますか
0372デフォルトの名無しさん
2007/12/30(日) 00:33:22よく嫁
支援ツールだ
つまりだたの社内ツール
0373デフォルトの名無しさん
2007/12/30(日) 00:34:430374デフォルトの名無しさん
2007/12/30(日) 00:35:230375デフォルトの名無しさん
2007/12/30(日) 00:35:35自分の腕を仕事に活かしたいと思ったら、それはそれで地獄をみることになるし
0376デフォルトの名無しさん
2007/12/30(日) 00:35:54でもすごいっすよ
C言語を始める時期が悪かったですかね
ガキの頃に手をつけとけば良かったと後悔しますよ
Cをマスターしたら次はperlかjavaやろうかと思ってるんすよ
0377374
2007/12/30(日) 00:36:390378デフォルトの名無しさん
2007/12/30(日) 00:40:35低かったから、そのシステムを導入してる病院には行かないことにしてる。怖い。
0379デフォルトの名無しさん
2007/12/30(日) 00:40:58始めるのに早いも遅いもない
逆にガキのころはガキのころにすべき勉強なり体験なりをしなくちゃいけない
Cなんてただの道具にすぎんのですよ、偉い人にはそれがわからんのです
0380デフォルトの名無しさん
2007/12/30(日) 00:41:44まじすか?
凄過ぎますよ、是非そういう人に基礎から教えてもらいたいんですが
まぁ無理なんでしょう、自力でやらないと意味がないし
そういうコードを書くにはCを学んでいたときに1日どのくらい書いてましたか?
あとは1日3個適当にプログラムを作るとかそういう目標とかってありましたか?
>>2373
私もそんな感じっすよ
暗号化できたーやーいって(自己満)すよね
>>375
プログラマーになったら大変そうすよね
それで食ってくのは難しいすよね
0381デフォルトの名無しさん
2007/12/30(日) 00:44:56自動生成の流れが盛んになってきているから、
プログラミングの仕事はどんどん減っていくだろうね
現に、カードにパンチしていた時代はコーディングが開発工程の8割を占めていたのに、今では2割程度
0382374
2007/12/30(日) 00:46:50某社の検査装置に使われているのは……basicか。
てな具合にいろんな時期にいろんなことをやっていたから「Cを学んでいた(だけの)とき」なんてないよ。
0383デフォルトの名無しさん
2007/12/30(日) 00:47:000384デフォルトの名無しさん
2007/12/30(日) 00:48:11今の日本は開発よりかも指示とかプロジェクトの提案とかそんな感じすかね?
たしかにインドとか中国はすごいっすよね。
ロシアは凄いらしいですがどうなんでしょう。
生まれる場所を間違えたな・・・
0385374
2007/12/30(日) 00:48:52あー確かに、カードパンチの時代は「完全なる机上コーディング」をしたものを「パンチするだけ」だったな。
# 流石に学校で体験しただけだが
0386デフォルトの名無しさん
2007/12/30(日) 00:50:47アメリカで銀行のシステムをやって年収1000万のIT技術者が、インドに仕事とられてファーストフードの店でアルバイト。
0387デフォルトの名無しさん
2007/12/30(日) 00:53:08難しい仕事は単価の高い日本で集中的にやる
0388デフォルトの名無しさん
2007/12/30(日) 00:53:59日曜プログラマが良いかな、本職は他ので。
パソコン詳しいねすごいねおっちゃんって言われればそれでいいかな
0389デフォルトの名無しさん
2007/12/30(日) 00:57:27これからはインド人や中国人の10倍の価値のある技術がないときびしいだろうね。
0390デフォルトの名無しさん
2007/12/30(日) 01:01:40日本を舐めすぎw
おまい、マスコミに変に影響されてるな
プログラミング力のあるなし以前に、視野の狭さが心配だよ
コーディングっていうのは単純作業なんだよ、単純作業
町工場で働く工員と同じ
指示されたものを淡々と作るだけ
じゃあ、それ以前に何をどう作るか、ってのを考えなきゃいけないよね
それを考えるのが日本の仕事
もちろん、今後すぐにプログラミングの仕事が無くなるわけじゃない
やっぱり言語や文化の壁があって、オフショア開発の管理って難しいくて、
リスクを極力避けるために、
現状は、仕様変更の激しい部分とか、重要な部分ってのは日本でコーディングしてる
0391デフォルトの名無しさん
2007/12/30(日) 01:03:10>>380
1日3個も作れるならそいつは天才か、作ったものがゴミ箱行きのカスか
0392デフォルトの名無しさん
2007/12/30(日) 01:06:130393デフォルトの名無しさん
2007/12/30(日) 01:08:050394デフォルトの名無しさん
2007/12/30(日) 01:10:120395デフォルトの名無しさん
2007/12/30(日) 01:14:42収録してある関数名を取り出すことって可能ですかね?
あったら教えてください
0396デフォルトの名無しさん
2007/12/30(日) 01:22:21nmコマンドでぐぐれ
0397デフォルトの名無しさん
2007/12/30(日) 02:32:38C++ならiteratorは別とすればポインタつかわないこと多くね?
0398デフォルトの名無しさん
2007/12/30(日) 04:17:57Include文とかヘッダファイルの自動生成って出来ないもの?
0399デフォルトの名無しさん
2007/12/30(日) 05:06:09頑張って作ってみれば?
0400デフォルトの名無しさん
2007/12/30(日) 07:46:20どうもありがとうございました。
0401デフォルトの名無しさん
2007/12/30(日) 08:24:40と、例えば定義してexeを作ったときバイナリエディタでみても"data"を文字列として見つけられません
これはどういう形で格納されていのでしようか?
0402デフォルトの名無しさん
2007/12/30(日) 08:26:04#define SRAM_A (volatile unsigned char *)0x200000
こんなのもポインタを使っているといっていいですか?
SRAM.Hの中身は、こんなのだらけなんですけど。
0403デフォルトの名無しさん
2007/12/30(日) 08:33:50DATAを作っていなければコンパイラはobjに"data"を出力しない。
当然、出力されるEXEにも存在しない。
0404デフォルトの名無しさん
2007/12/30(日) 08:54:40それだと「アドレス」と言いたくなるけど、まぁポインタだね。
0405デフォルトの名無しさん
2007/12/30(日) 08:58:09組み込みなら普通は #pragma で section 名指定して、
リンカーで配置する。処理系によって違うけど
似たようなコードがあるはず。
絶対アドレスにポインタ使う必要なし。
0406デフォルトの名無しさん
2007/12/30(日) 13:24:240407デフォルトの名無しさん
2007/12/30(日) 14:42:25#define Acc08(Adr) (*(volatile unsigned char *)Adr)
#define Acc16(Adr) (*(volatile unsigned short *)Adr)
#define Acc32(Adr) (*(volatile unsigned int *)Adr)
0408デフォルトの名無しさん
2007/12/30(日) 14:50:020409デフォルトの名無しさん
2007/12/30(日) 17:04:38そもそも使ってなければプリプロセッサはコンパイラに"data"を出力しない
0410デフォルトの名無しさん
2007/12/30(日) 21:17:27{
void *p;
p = malloc(sizeof(double) * size);
if (p == NULL) ...エラー処理;
return p;
}
と言うような関数を作ったのですが、
これに、double **a の奴と、 double *b に
a = (double **)myMalloc(size);
b = (double *)myMalloc(size);
と、つなぎ合わせる事をするのですが、
特にこれで問題は起こらないものでしょうか?
0411デフォルトの名無しさん
2007/12/30(日) 21:32:56何かメモリがもったいないな
0412デフォルトの名無しさん
2007/12/30(日) 21:48:21のあとは、for文回して
a[i] = (double *)myMalloc(size);
と言うふうに、2次元配列を作る予定なんですが・・・
0413デフォルトの名無しさん
2007/12/30(日) 21:51:23テキストファイルを作ると同時にそのファイルから文字を読み込んで出力する・・というのをやりたいのですが、なぜか開こうとしてもすぐ画面が消えます。なにがいけないんでしょうか?
別に読み込むだけでもいいのでアドバイスお願いします。コンパイラは「Bloodshed Deb-C++」です。
0414デフォルトの名無しさん
2007/12/30(日) 21:52:39#include <stdio.h>
#include <stdlib.h>
void kaku(int,int*,char*);
int main(int argc, char *argv[])
{
int ten=0;
char kekka[]="NG";
kaku(1,NULL,NULL);
kaku(2,&ten,kekka);
kaku(3,NULL,NULL);
0415デフォルトの名無しさん
2007/12/30(日) 21:53:27FILE *fp;
char data[256];
fp=fopen("test,txt","r");
fscanf(fp,"%s",data);
fclose(fp);
printf("%s\n",data);
system("PAUSE");
return 0;
}
void kaku(int fg,int *ten,char *kekka)
{
static FILE*f;
switch(fg){
case 1:
f=fopen("test.txt","w");
break;
case 2:
fprintf(f,"%d点,",*ten);
fprintf(f,"%s\n",kekka);
break;
case 3:
fclose(f);
break;
}
}
です。長々とすみません
0416デフォルトの名無しさん
2007/12/30(日) 21:59:38pointer to pointerを作るなら
a = (double**)malloc(size*sizeof(double*));
じゃないの?
まあ、メモリは余分に確保されてるからコーディング間違えなければちゃんと動くだろうけど。
>>413
意味が分からない
0418デフォルトの名無しさん
2007/12/30(日) 22:06:43printf("%d\n", sizeof(double));
printf("%d\n", sizeof(double *));
で確認した所、 double型が8で、double *型が4でした。
ポインタだと値が違うんですね。 始めて知りましたorz
通りで動かなかったのかと・・・
ありがとうございました。 頑張ってみます
0419デフォルトの名無しさん
2007/12/30(日) 22:16:2313行目はtest,txtじゃなくてtest.txtだろう。
fopenしたならfpがNULLかどうか必ず確認すべきだ。
system("PAUSE")というのは俺の環境にはなかったから外したら多分期待通り動いた。
0420デフォルトの名無しさん
2007/12/30(日) 22:37:38できました!ありがとうございます!!
0421デフォルトの名無しさん
2007/12/31(月) 01:54:34ついでにcharとchar *、shortとshort *とかもsizeofして見比べて見ると良いよ
ポインタがちょっと見えて来る
0422デフォルトの名無しさん
2007/12/31(月) 01:55:08例えば
X= 630.20 Y= 220.20
Z= 33.25 A= 30.25
のような感じです。このうちプログラム内で定数として用いたいのが630.20や220.20、33.25に30.25です
まず1行目をfgets()でポインタ*fpに読み込んで、"X="をstrstr()で探します
その辺りまでしかぱっと思いつきません
ここから630.20を読み込もうと思うと、どのような方法があるでしょうか
宜しくお願いします
0423デフォルトの名無しさん
2007/12/31(月) 01:56:180424デフォルトの名無しさん
2007/12/31(月) 02:01:46ありがとうございます
ですが、scanfはキーボードから入力したデータを読み込む奴ですよね?
テキストファイルに書いてあるものを読み込みたいのですが…
0425デフォルトの名無しさん
2007/12/31(月) 02:15:45トークンがスペースなら、そこまで読み込むようにして、 atof() とか
トークンをもう少し考えなおすのがいいかも、セミコロン、カンマとかにする。
strtokn()とかあった気がするが、それは調べてくれ。
0426デフォルトの名無しさん
2007/12/31(月) 02:22:41fscanf
0427デフォルトの名無しさん
2007/12/31(月) 02:24:37変なこと教えるなよ。
atofは数字以外に当たったら解析を終了するから、
> 一文字ずつで調べて
とかは不必要だろ。
0428デフォルトの名無しさん
2007/12/31(月) 02:29:10ありがとうございます。isdigitでチェックして配列に格納が簡単そうですね
strtokn()もありますけど、元ファイルを変換する(というより、別ファイルを作ってそこに数値同士をカンマ等で区切るようにする?)ので、あまり使いたくないところです
最悪、strtokn()で別ファイルを一時ファイルとして作成してやるという方法がありますが…
ちょっと考えてみます。ありがとうございました
>>426
fscanfにそんな機能があったのですか、もう一回調べてきます
ありがとうございました
0429デフォルトの名無しさん
2007/12/31(月) 02:54:39scanfはfscanfのラッパー関数みたいなもん。
scanf内でfscanfをstdinに対して処理している。
scanfでもstdinをfreopenすればファイルからの入力にできる。
0430デフォルトの名無しさん
2007/12/31(月) 09:13:360431デフォルトの名無しさん
2007/12/31(月) 09:43:21int main ()
{
int a,b,c,i,f,d[50];
scanf("%d %d",&a,b);
switch(a*b){
case 0:
return 0;
defalt:
c=a/b;
printf("%d",c); /*19*/
break;
}
i=1;
while(i<=50){
c=a%b;
d[i]=c/b;
c=c%b;
printf("%d",d[i]);
if(d[i]==0)
f++;
else
f=0;
if(f>=2)
break;
i++;
}
return 0;
}
スミマセン!なんでコレダメなのデスカ?オシエテクダサイ!!!
0432デフォルトの名無しさん
2007/12/31(月) 09:45:12scanf("%d %d",&a,&b);
反射神経が書いてるので違うかもシレン。
0433デフォルトの名無しさん
2007/12/31(月) 10:26:48defalt:
↑これがだめだ。
ラベルとして認識しているはず。
default: な。
0434デフォルトの名無しさん
2007/12/31(月) 10:28:32ちょっとずれるが、
switch(a*b){
case 0:
↑0かどうか判断したいだけなら、if文を使うべきだ。
switchにする必要なし。
0435デフォルトの名無しさん
2007/12/31(月) 12:42:18修正しまシタがダメデス。
書き方ノドンクササとかよりそっち教えてホシイデス。
0436デフォルトの名無しさん
2007/12/31(月) 13:03:010437デフォルトの名無しさん
2007/12/31(月) 13:18:59もう一回、ifの入ってるバージョンのソース見せてくれたらなにかコメントできるかも
0438デフォルトの名無しさん
2007/12/31(月) 13:22:45>d[50];
>i=1;
>while(i<=50){
これも駄目だな
0439デフォルトの名無しさん
2007/12/31(月) 14:25:34このトウリデス
ナオラネエ!ウガァァァァァ
0440デフォルトの名無しさん
2007/12/31(月) 17:09:50void test(int i);
itn main(void)
{
test(0);
return 0;
}
void test(int i)
{
if(i<10){
test(i+1);
printf("%d",i);
}
}
再帰なんですが
これ難しくて理解できないんすよ。
みなさん詳しく説明してくださいお願いします。
0441デフォルトの名無しさん
2007/12/31(月) 17:41:00出力は「9876543210」ってなるだけかな?
10を3とかにして流れをゆっくり追って行けばわかるよ。
0442デフォルトの名無しさん
2007/12/31(月) 17:42:04test(0)は0+1でtest(1)を呼ぶ
test(1)は1+1でtest(2)を呼ぶ
最終的にtest(9)が9+1でtest(10)を呼ぶが、i<10じゃなくなるので何もしない
その後printfで9が印字され、8が印字され・・・最初の0が印字されて終了と
処理が戻っていく感じだな
0444デフォルトの名無しさん
2007/12/31(月) 18:04:520445440
2007/12/31(月) 18:11:48逆になるのかが、難しい
0446デフォルトの名無しさん
2007/12/31(月) 18:13:21感覚的に理解できないだけだと思うけど、
デバッガでステップ実行して追っていけばわかると思うよ。
ちなみに、再帰はめったに使わない。
11年ぐらい仕事でCプログラミングやってるが、
再帰を使ったのは1,2回。
0447デフォルトの名無しさん
2007/12/31(月) 18:23:52printfを実行するのはtestを実行した後だから
ディレクトリの走査とかそれに類似したものは再帰使うなぁ
定番というか
0448デフォルトの名無しさん
2007/12/31(月) 18:30:320449440
2007/12/31(月) 18:56:37適当にながしちまえば?
0450デフォルトの名無しさん
2007/12/31(月) 19:01:59int sum(int n)
{
int ret;
printf("enter sum(%d)\n", n);
if(n == 1)
ret = 1;
else
ret = n + sum(n - 1);
printf("leave sum(%d)=%d\n", n, ret);
return ret;
}
int main()
{
printf("sum(5)=%d\n", sum(5)); // print 1+2+3+4+5
return 0;
}
enter sum(5)
enter sum(4)
enter sum(3)
enter sum(2)
enter sum(1)
leave sum(1)=1
leave sum(2)=3
leave sum(3)=6
leave sum(4)=10
leave sum(5)=15
sum(5)=15
0451デフォルトの名無しさん
2007/12/31(月) 19:04:18何を目的で勉強してるかによるんじゃないかな
単位のためとかであれば流しちゃっていいと思う
0452デフォルトの名無しさん
2007/12/31(月) 19:05:08この程度の基本テクニックにねを上げてるようじゃ、先は暗いよ。
諦めずに理解するべし。
0453440
2007/12/31(月) 19:11:11理解してみます
再帰はソートっぽいんすね
>>451 >>452とか
他の人たちは
socketとかネットワークプログラムとかもへっちゃらすか?
0454デフォルトの名無しさん
2007/12/31(月) 19:18:10ネットワーク関連のバグの修正とかは泣きそうになる
0455デフォルトの名無しさん
2007/12/31(月) 22:23:410456440
2007/12/31(月) 22:31:02printf("%d",i);
tesxt(i+1);
の逆の再帰だと理解できます
先にprintfで0を表示してそのあとにtest0+1をして
1になってprintfで1を表示して
それを10まで繰り返すんですが
上の440のやり方だと
なぜtest(i+1);したあとprintfをやっているのに 9が最初にくるかがさっぱりなんですが
より詳しく教えてくれる人はいませんすか?
0457デフォルトの名無しさん
2007/12/31(月) 22:42:02再帰呼び出しが終わったらどこに戻るか考えてみそ。
0458デフォルトの名無しさん
2007/12/31(月) 22:44:11test(0)→test(1)→test(2)→2は何もしないのでそのまま終了
test(1)に戻る、printf("%d",1)、test(0)に戻る→printf("%d",0)
return 0;に戻る
0459デフォルトの名無しさん
2007/12/31(月) 22:45:23test(i+1)の所に順次、関数の中身を展開していくと、
if(0<2){
if(1<2){
if(2<2){
test(2+1); // ここは実行されない。
printf("%d",2); // ここは実行されない。
}
printf("%d",1);
}
printf("%d",0);
}
になる。で、10が表示される。これ見たら分かる?
0460デフォルトの名無しさん
2007/12/31(月) 22:45:46たぶん他の人と被ると思うけどw
test(0) が呼ばれるじゃん?
→ i<10 なので、test(1) が呼ばれるじゃん?
→ i<10 なので、test(2) が呼ばれるじゃん?
: 中略するじゃん?
→ i<10 なので、test(9) が呼ばれるじゃん?
→ i<10 なので、test(10) が呼ばれるじゃん?
→ i<10 が成立しないので、何もせずに test(10)を抜けるじゃん?
→ printf("%d", 9) で 9 が出力されるじゃん? そんでtest(9)を抜けるじゃん?
:
→ printf("%d", 2) で 2 が出力されるじゃん? そんでtest(2)を抜けるじゃん?
→ printf("%d", 1) で 1 が出力されるじゃん? そんでtest(1)を抜けるじゃん?
printf("%d", 0) で 0 が出力されるじゃん? そんでtest(0)を抜けるじゃん?
main() 終了じゃん?
さあ、何が出力されたかな?っと。
0461デフォルトの名無しさん
2007/12/31(月) 22:46:560462460
2007/12/31(月) 22:47:320463デフォルトの名無しさん
2007/12/31(月) 22:50:36いや大晦日だから暇なのか
0464デフォルトの名無しさん
2007/12/31(月) 22:52:110465デフォルトの名無しさん
2007/12/31(月) 22:53:140466440
2007/12/31(月) 22:57:43ですが何故、繰り上がってる時にprintfが有効にならないのかが不思議です
i<10 test(0);
test(1)に繰り上がる時は test(i+1)とprintf("%d",i);をやるはずなんですが
何故printfが飛ばされてるんですか?
0467デフォルトの名無しさん
2007/12/31(月) 22:59:420468デフォルトの名無しさん
2007/12/31(月) 22:59:50飛ばされてるんじゃなくて、test(i+1)で止まってると思えばいい
で、test(i+1)の処理が終わったら戻ってくる。
0469440
2007/12/31(月) 23:02:55それで10になったら 987654321と戻ると?
0470デフォルトの名無しさん
2007/12/31(月) 23:03:02test は、9 から i までを出力する関数。
引数が 10 未満の時は、まず test(i + 1); とすることで 9 から i + 1 までを出力してから、その次に i を出力してるっしょ?
そういうわけで、9 から i までが出力される。
んで、10 以上の数を渡すと、if に引っかかって何も出力されない。
だまされた気分になっても気にしない。
0471デフォルトの名無しさん
2007/12/31(月) 23:07:15test(9)はtest(9+1)を実行してから9を表示する。つまり、9を表示する。
test(8)はtest(8+1)を実行してから8を表示する。つまり、98を表示する。
test(7)はtest(7+1)を実行してから7を表示する。つまり、987を表示する。
…中略…
test(1)はtest(1+1)を実行してから1を表示する。つまり、987654321を表示する。
test(0)はtest(0+1)を実行してから0を表示する。つまり、9876543210を表示する。
0472デフォルトの名無しさん
2007/12/31(月) 23:13:23例えば 9 から i までを出力する関数 hoge があるとするだろ?
それを使って test を実装しようとすると、一番簡単なのは hoge をそのまま呼ぶだけだけど、
それじゃ面白くないので 9 から i + 1 までを hoge に出力させて、
それから i だけを test 内で出力するという風にしてみよう。
そうすると
void test(int i) {
if(i < 10) {
hoge(i + 1);
printf("%d", i);
}
}
となるわけよ。これは分かるっしょ?
んで、この test っつー関数は 9 から i までを出力する関数になったわけだから、
hoge としてこの test が使えることになる。
というわけで、
void test(int i) {
if(i < 10) {
test(i + 1);
printf("%d", i);
}
}
としても同じ結果が得られるって寸法だ。
0473デフォルトの名無しさん
2007/12/31(月) 23:14:17int main(void)
{
/* test(0)開始 */
if(0<2){
/* test(1)開始 */
if(1<2){
/* test(2)開始 */
if(2<2){
/* ここは実行されない */
}
/* test(2)終了*/
printf("%d",1);
}
/* test(1)終了*/
printf("%d",0);
}
/* test(0)終了*/
return 0;
}
0474デフォルトの名無しさん
2007/12/31(月) 23:18:46どうすればいいですかね?
0475デフォルトの名無しさん
2007/12/31(月) 23:19:250476デフォルトの名無しさん
2007/12/31(月) 23:19:570477440
2007/12/31(月) 23:21:05>>460さんのが分かりやすかったです
まだ完全理解したという訳ではないので勉強してみます
回答してくれた皆様ありがとうございました。
0478デフォルトの名無しさん
2007/12/31(月) 23:23:03iがスタック上に積まれる他に関数呼び出しによる復帰情報(ここだとtest()関数な)がスタック上に積まれるんよ
復帰情報は関数が何処に戻れば良いかを示すリターンアドレスが格納されている
ここではまだ実行されていないprintf()の直前
つまりイメージとしては
復帰←0←復帰←1←復帰←3←復帰…8→復帰←9←復帰
と積まれる(push)
でループから抜けると
今度は
復帰情報→0→復帰→1→復帰→3→復帰…8→復帰→9→復帰
と逆に飛び出してくる(pop)
つまりLIFO(Last In First Out)な訳
良くコインの入れ物として説明されている有名アレ
0479デフォルトの名無しさん
2007/12/31(月) 23:46:46正しくは
push時
main復帰←0←復帰←1←復帰←2←復帰…8←復帰←9←復帰
pop時
main復帰→0→復帰→1→復帰→2→復帰…8→復帰→9→復帰
0480デフォルトの名無しさん
2007/12/31(月) 23:55:51再帰ぐらいで悩まないと思う…。
0481デフォルトの名無しさん
2008/01/01(火) 00:16:15えーっとスタックはローカル変数を格納する為のメモリ領域で・・・
ってスレ違いだなこりゃ
スマン調べてくれとしか言いようが無い
頑張ってくれ
0482デフォルトの名無しさん
2008/01/01(火) 00:18:39引数が関数名だと思ってたどってみ
test(1)は test1(1)だと
0483デフォルトの名無しさん
2008/01/01(火) 00:23:130484デフォルトの名無しさん
2008/01/01(火) 01:18:130485デフォルトの名無しさん
2008/01/01(火) 01:18:530486デフォルトの名無しさん
2008/01/01(火) 01:35:470487デフォルトの名無しさん
2008/01/01(火) 01:39:340488デフォルトの名無しさん
2008/01/01(火) 01:42:40int mein()
{
fprint("間違えを見つけた数×100000円お都市玉をもらえます");
}
return 0;
あけましておめでとうございます
0490デフォルトの名無しさん
2008/01/01(火) 01:52:21ダンヒルの最高値福袋2個分かよw
0491デフォルトの名無しさん
2008/01/01(火) 06:18:410492デフォルトの名無しさん
2008/01/01(火) 06:19:180493デフォルトの名無しさん
2008/01/01(火) 13:25:280494デフォルトの名無しさん
2008/01/01(火) 13:42:074番目のvoid *arglistを使って渡すべし。
0495デフォルトの名無しさん
2008/01/01(火) 15:06:420496デフォルトの名無しさん
2008/01/01(火) 15:11:54もうちょっと人に伝わる言葉で表現しろよ。
0497デフォルトの名無しさん
2008/01/01(火) 15:13:29「mein()」の()の事
0498デフォルトの名無しさん
2008/01/01(火) 15:14:360499デフォルトの名無しさん
2008/01/01(火) 15:15:150500デフォルトの名無しさん
2008/01/01(火) 15:17:140501デフォルトの名無しさん
2008/01/01(火) 15:17:39それだけじゃ、宣言か定義か呼び出しかすら分からないわけだが・
0502デフォルトの名無しさん
2008/01/01(火) 15:19:240503デフォルトの名無しさん
2008/01/01(火) 15:21:260504デフォルトの名無しさん
2008/01/01(火) 15:22:46○ プロトタイプ宣言
引数がどうなっているか不明であることを表す。
その後具体的な引数を指定した宣言や定義が現れない限り、
この関数を呼び出す時、実引数は可変長引数の時と同じように扱われる。
○ 関数定義
規格上は void であると見なされることになっている。
ただし、上記に書いた通りの動作を起こすコンパイラもある。
○ 関数呼び出し
そもそも ( ) 内に void と書いて呼んではならない。
0505440
2008/01/01(火) 16:48:42#include <stdio.h>
#include <string.h>
int ko(char *p);
int main(void)
{
char str[80];
gets(str);
printf("%d\n",ko(str));
return 0;
}
int ko(char *p)
{
int a;
a=0;
while(*p){
a++;
p++;
}
return a;
}
なんですが
while(*p)なんですが
str[80]に入力した文字をどのように繰り返してるんでしょうか?
while(*p)だと全然理解ができません
入力した文字列の\0(ヌル文字まで繰り返すんでしょうか?)
0506デフォルトの名無しさん
2008/01/01(火) 16:57:160507440
2008/01/01(火) 17:00:23*pとかよくわかりずらくて参考書にそんなようなこと書いてなくて
次はforでやってみようかと思います
0508デフォルトの名無しさん
2008/01/01(火) 17:00:32・C言語では偽が0、真が0以外
・whileは条件が真(つまり0以外)の間、ループを続ける
・C言語の文字列(char配列)はヌルターミネートといって最後にヌル文字('\0')が入っている
・ヌル文字の文字コードは0
・*は間接参照演算子
つまり
>入力した文字列の\0(ヌル文字)まで繰り返す
で正しい。
ヌル文字ではなかったらaをインクリメントし、ついでにpを進める、ということを繰り返す
まあ(半角)文字数を調べる関数だね
0509440
2008/01/01(火) 17:06:50あ!だからヌル文字で終わるんですね
ヌル文字=0って事を・・・
文字列とかが入るとややこしくなるんで
これを使えば特定の文字の数を数える関数とかへっちゃらっすね
0510デフォルトの名無しさん
2008/01/01(火) 17:25:470511デフォルトの名無しさん
2008/01/01(火) 17:35:04こんな読みにくいコード書いても、読みやすいコードに比べて実行速度が速くなる訳じゃないもんね。
0512440
2008/01/01(火) 17:42:21僕が作るプログラムではそこまでイライラするほどかからないんすが
0513デフォルトの名無しさん
2008/01/01(火) 17:54:410514デフォルトの名無しさん
2008/01/01(火) 19:16:56int main(void)
{
while(1)
{
printf("おまいら\n");
printf("あけましておめでとう!\n");
}
return 0;
}
0515440
2008/01/01(火) 19:18:16どんな過程でネットワーク系に入りますか?
まずC言語の文法など覚えてたらすぐネットワーク系のプログラムとかやりますかね?
0516デフォルトの名無しさん
2008/01/01(火) 19:27:54でも、目的を持って難題に立ち向かうのが上達の秘訣だとおもう。
コードを書いていれば、何が必要かだんだんとわかってくる。
すぐに作れなくてもあきらめないことが重要だよ。
0517デフォルトの名無しさん
2008/01/01(火) 19:47:55#else if
#end if
の使い方がわかりません!
どういうときに使うんですか!
0518デフォルトの名無しさん
2008/01/01(火) 19:51:35有識者の方ご教授をお願いします。
#include<stdio.h>
void * func(void *p){
printf("□■□func開始□■□\n");
printf("pのアドレス = %p\n",p);
printf("p = %d\n",(int)p);
(int)p += 100;
printf("p = %d\n",(int)p);
printf("□■□func開始□■□\n");
return NULL;
}
int main(void){
int number = 30;
printf("numberのアドレス = %p\n",&number);
func((void *)number);★1
return 0;
}
0519デフォルトの名無しさん
2008/01/01(火) 19:52:05void * func(int *p){
printf("□■□func開始□■□\n");
printf("pのアドレス = %p\n",p);
printf("p = %d\n",*p);
*p += 100;
printf("p = %d\n",*p);
printf("□■□func開始□■□\n");
return NULL;
}
int main(void){
int number = 30;
printf("numberのアドレス = %p\n",&number);
func(&number);★2
return 0;
}
0520デフォルトの名無しさん
2008/01/01(火) 19:58:22#define VER 2
#if VER < 2
//古いコード
#else
//新しいコード
#endif
みたいにソースを丸ごと切り替えるときに使ったりする
慣れると便利。
0521440
2008/01/01(火) 19:59:01それは、おまいら あけましておめでとうを無限ループですね?
while(1)なので
0522デフォルトの名無しさん
2008/01/01(火) 19:59:451はちゃんと動くのか?
0523デフォルトの名無しさん
2008/01/01(火) 20:03:15*(int*)p += 100;
とすると、同じ結果が出るね。
0524デフォルトの名無しさん
2008/01/01(火) 20:05:54デバッグ時にコードを一時的に無効化したり有効化するのに便利だね。
/* */とは違って、入れ子にできるから楽
#if 0
hoge();
hoge2();
#endif
0525デフォルトの名無しさん
2008/01/01(火) 20:07:40ほんとに
func((void *)number);★1
こうなのか?
0526デフォルトの名無しさん
2008/01/01(火) 20:11:00たしかに。&がないと通らないね。
0527デフォルトの名無しさん
2008/01/01(火) 20:12:32怒られるんだけどw
0528デフォルトの名無しさん
2008/01/01(火) 20:25:21ありがとうございます!
ということは int VER みたいなフラグを作っておいて使うんですね!
#if 0
とか参考にしてたソースに出てきてわからなかったです
ありがとうございました!
0529デフォルトの名無しさん
2008/01/01(火) 20:42:21>int VER みたいなフラグ
駄目です、それじゃ使えません
0530デフォルトの名無しさん
2008/01/01(火) 20:46:59*(int*)p
それは参照先がアレじゃないか?
0531デフォルトの名無しさん
2008/01/01(火) 20:52:07そのこぴぺされたコードで、コンパイルして実行できるか、もう一度確認してみてくれないか?
ちなみにWindows?もしかしてDOS?
0532デフォルトの名無しさん
2008/01/01(火) 20:53:06orz
使い方おしえてくだしあ
0533デフォルトの名無しさん
2008/01/01(火) 20:55:26>>520
ただの置換だと思えばいい
0534440
2008/01/01(火) 21:01:521人じゃ無理すかね?
0535デフォルトの名無しさん
2008/01/01(火) 21:03:12プリプロセッサと呼ばれる機能なのだ。
#defineはマクロで、文字列の置き換え
#define VAR 2
と書くと、今後ソースのVARは2という文字に置き換えられる。
#ifは条件付コンパイル。式が0でなければ有効となる。
#if VAR>1
と書くと、以下と同意になる。
#if 2>1
となって、式の結果は、1なので、有効となる。
0536デフォルトの名無しさん
2008/01/01(火) 21:03:210537440
2008/01/01(火) 21:05:24viで色とかが使えるすがスキームなど色文字を表示することは可?
0538デフォルトの名無しさん
2008/01/01(火) 21:06:45DOSなら、エスケープシーケンスじゃないか?
0539デフォルトの名無しさん
2008/01/01(火) 21:14:130540440
2008/01/01(火) 21:15:29たしかにwindowsだと猫でもわかるC言語に書いてありましたが
0541デフォルトの名無しさん
2008/01/01(火) 21:18:550542デフォルトの名無しさん
2008/01/01(火) 21:21:45linux
エスケープシーケンス使えるよ
printf("\033[31mhogehoge\n");
って感じで
0543デフォルトの名無しさん
2008/01/01(火) 21:25:500544デフォルトの名無しさん
2008/01/01(火) 21:25:59ちょっとは自分の頭を使って集中して物を考えたり調べも伸したりする習慣をつけろよ
0546デフォルトの名無しさん
2008/01/02(水) 00:02:28左辺値にキャストはできないだろ?
0547デフォルトの名無しさん
2008/01/02(水) 09:04:56これを実行してみてほしい
#include<stdio.h>
int main(void){
long num=1234;
*((char*)&num)+=65536+256;
printf("%ld\n", num);
*((short*)&num)+=65536+256;
printf("%ld\n", num);
return 0;
}
0548デフォルトの名無しさん
2008/01/02(水) 09:59:340549デフォルトの名無しさん
2008/01/03(木) 22:28:47#include <malloc.h>
main(togo,toog)
int togo;
char *toog[];
{char *ogto, tgoo[80];FILE *ogot; int oogt=0, ootg, otog=79,
ottg=1;if ( togo== ottg) goto gogo; goto goog; ggot:
if ( fgets( tgoo, otog, ogot)) goto gtgo; goto gott;
gtot: exit(); ogtg: ++oogt; goto ogoo; togg: if ( ootg > 0)
goto oggt; goto ggot; ogog: if ( !ogot) goto gogo;
goto ggto; gtto: printf( "%d goto \'s\n", oogt); goto
gtot; oggt: if ( !memcmp( ogto, "goto", 4)) goto otgg;
goto gooo; gogo: exit( ottg); tggo: ootg= strlen(tgoo);
goto tgog; oogo: --ootg; goto togg; gooo: ++ogto; goto
oogo; gott: fclose( ogot); goto gtto; otgg: ogto= ogto +3;
goto ogtg; tgog: ootg-=4;goto togg; gtgo: ogto= tgoo;
goto tggo; ogoo: ootg-=3;goto gooo; goog: ogot= fopen(
toog[ ottg], "r"); goto ogog; ggto: ogto= tgoo; goto
ggot;}
これは何ですか?
0550デフォルトの名無しさん
2008/01/03(木) 23:13:440551デフォルトの名無しさん
2008/01/04(金) 00:00:330552デフォルトの名無しさん
2008/01/04(金) 00:24:50#include <string.h>
int main(int argc, char *argv[])
{
char *position, line[80];
FILE *fp;
int counter=0, num, maxbuf=79;
if ( argc == 1) {return 1;}
fp= fopen(argv[ 1], "r");
if ( !fp) {return 1;}
position= line;
while ( fgets( line, maxbuf, fp)) {
position= line;
num= strlen(line);
num-=4;
while (( num > 0) && ( !memcmp( position, "goto", 4))) {
position= position +3;
++counter;
num-=3;
++position;
--num;
}
}
fclose( fp);
printf( "%d goto \'s\n", counter);
return 0;
}
たぶんこういうこと
0553デフォルトの名無しさん
2008/01/04(金) 00:40:090554デフォルトの名無しさん
2008/01/05(土) 01:12:12同じソースファイル内でも関数の定義位置が違うだけで、
コンパイラが、関数宣言ないよー。という警告をするのが、
いまいち慣れないのですが。
static宣言な、ファイル内スコープの関数なんかでも、
プロトタイプ宣言ってきちんとしたほうが良いのでしょうか。
手元にあるC言語入門だと、main関数を最後のほうに、
定型的な計算用の関数等を、頭のほうにもってきて、
プロトタイプ宣言を書かないようしているのですが、
皆様はどういった書き方をしておられるのでしょうか・・・。
0555デフォルトの名無しさん
2008/01/05(土) 01:14:41基本的に、ソースファイルの書き方は一貫性が大事だと思っている。
だから、一貫性を持って読みやすければそれでOKだ。
0556デフォルトの名無しさん
2008/01/05(土) 01:29:27おぃ… どのportでaccessしろと云うのだ?
0557デフォルトの名無しさん
2008/01/05(土) 01:51:07から.msiインスコしたまではいいですが、ここからどうすればアプリとして起動できますか?
よく分からないままMS Visual C#2008入れました。
最終的にやりたいのは、nCrで任意のnとrを最初に指定して、.txtファイルで1行毎に記述した多数の序数x(1≦x≦nCr)を組み合わせ化して別の.txtファイルにsaveすることです。
0558デフォルトの名無しさん
2008/01/05(土) 02:09:33因みに… '/usr/share/doc/man1/或.zg
個人の計算では恐らく'/usr/share/doc*
全てを読み込む様に為っていた筈…
0559デフォルトの名無しさん
2008/01/05(土) 02:20:371・再起動がBIOSに到達せず再起動…
2・停止がBIOSに到達せず停止の筈が再起動…
3・RANを切らないと停止せず…
0560デフォルトの名無しさん
2008/01/05(土) 02:25:06此の顛末…
0561デフォルトの名無しさん
2008/01/05(土) 02:31:080562557
2008/01/05(土) 02:42:490563デフォルトの名無しさん
2008/01/05(土) 02:55:06ここはC#のスレではありませんよ
0564557
2008/01/05(土) 03:49:11Spcially sorry, sir.
0565デフォルトの名無しさん
2008/01/05(土) 07:32:27> 手元にあるC言語入門だと、main関数を最後のほうに、
> 定型的な計算用の関数等を、頭のほうにもってきて、
> プロトタイプ宣言を書かないようしているのですが、
> 皆様はどういった書き方をしておられるのでしょうか・・・。
基本的に読むときのことを考えて書く。
文章は上から下へ向かって読む。
だからプロトタイプ宣言も書いてmainの下に呼び出す関数を書く。
よく見るif (0 == a) みたいなやり方(=を書き間違えるミスを防ぐやつね)
もバッドノウハウだと思う。
0566デフォルトの名無しさん
2008/01/05(土) 09:07:16最後の2行は同意するが、関数をボトムアップで書くのは臨機応変でありだと思う。
0567デフォルトの名無しさん
2008/01/05(土) 10:07:08> よく見るif (0 == a) みたいなやり方(=を書き間違えるミスを防ぐやつね)
> もバッドノウハウだと思う。
なんで?
他にいい方法ある?
0568デフォルトの名無しさん
2008/01/05(土) 10:07:350569デフォルトの名無しさん
2008/01/05(土) 10:14:55>基本的に読むときのことを考えて書く。
>文章は上から下へ向かって読む。
>だからプロトタイプ宣言も書いてmainの下に呼び出す関数を書く。
うーん・・・微妙。
結局main関数がファイルの一番上に来るわけでもないし、
mainを最初に持ってきたからって可読性は上がらないと思う。
コード全体で一貫性があればケースバイケースどころか
趣味の範疇じゃない?
0570デフォルトの名無しさん
2008/01/05(土) 10:18:41最近のコンパイラなら警告を出すはずだし、lintもある。
それに、
if (a = b)
は防げない。
-Wall で出る警告をすべて潰すか、lintを使う習慣をつけたほうが良い。
0571デフォルトの名無しさん
2008/01/05(土) 10:19:250572デフォルトの名無しさん
2008/01/05(土) 10:32:240573デフォルトの名無しさん
2008/01/05(土) 10:32:49おれは >>565に同意。
main関数を一番下に持ってくるのは、プロトタイプ宣言がなかった頃の
古い習慣を引きずってるだけだったはず。
>結局main関数がファイルの一番上に来るわけでもないし、
これはその通りだけど、プロトタイプ宣言を長々と書くことは少ないし、
たとえ長くなっても関数ブロックがどこから始まるかはすぐわかるので、
main関数が上にあるはうが見つけやすい。
あと、呼び出す関数の引数などを見たいとき、
プロトタイプ宣言が一箇所にまとまっているほうが見やすいと思う。
まあ、これはコーディングスタイルだから、強くは主張しないけど。
0574デフォルトの名無しさん
2008/01/05(土) 11:27:15プロトタイプ宣言のなかった頃という実例を提示してくれ。
宣言がなかったら外部の関数は一切まともに呼べないと思うのだが。
0575デフォルトの名無しさん
2008/01/05(土) 11:28:40最近はフリーのでもエディタが強いからなぁ。
気にならなくなったし気にしなくなった。
0576デフォルトの名無しさん
2008/01/05(土) 13:31:36全て異なるってどういう風に書けばいいんでしょうか?
0577デフォルトの名無しさん
2008/01/05(土) 13:37:21for (int ic = 0; ic < sizeof(array) / sizeof(* array); ++ic) array[ic] = ic;
0578576
2008/01/05(土) 13:45:3910個の配列には既に数字が入っていて
条件式でかくならどうすればいいですかね?
0579デフォルトの名無しさん
2008/01/05(土) 13:58:180580デフォルトの名無しさん
2008/01/05(土) 14:23:57int unique(int array, int n){
int i;
if(n <= 1)return 1;
for(i=1; i<n; ++i)
if(array[0] == array[i])
return 0;
return unique(array+1, n-1);
}
0581デフォルトの名無しさん
2008/01/05(土) 14:29:420582デフォルトの名無しさん
2008/01/05(土) 14:34:420583デフォルトの名無しさん
2008/01/05(土) 14:35:36そこで最近覚えた末尾再帰の最適化ですよ。
0584デフォルトの名無しさん
2008/01/05(土) 15:10:46配列(例なら10000要素)を用意して重複チェックするという手もある
10回ループすればわかる
0585デフォルトの名無しさん
2008/01/05(土) 15:56:010587584
2008/01/05(土) 17:50:36見落としていたよorz
0588デフォルトの名無しさん
2008/01/05(土) 17:59:250589デフォルトの名無しさん
2008/01/06(日) 00:48:37コメント豊富ならいいが、
そうでなければ順を追わないと分かりづらい……
0590デフォルトの名無しさん
2008/01/06(日) 00:56:000591554
2008/01/06(日) 01:04:01結論としては>>555なのでしょうが。
自分はIDE使っていて、
>>573さんの様なスタイルがやりやすそうです。
コンソールでUnixプログラムとかを書ける様な方だと
また意見も変わってくるんでしょうかね…。
>>571とかも参考になります。
皆様ご意見有難う御座いました。
0592デフォルトの名無しさん
2008/01/06(日) 04:10:09今アクセスカウンタを作ろうと思って、まずは簡単に動く物をテストで作ってみ
ようかと思ってるのですが、思った動作をしてくれません・・
ipアドレスをゲットして、そのipアドレスから連続でアクセスがあった場合カウンタ
が回らないようにしたいです。超初心者の自分なりに書いてみたのですが、同じipから
のアクセスでもカウンタが回ってしまいます。ソースは
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
main()
{
long i;
FILE * fp;
char *test,*ip,*count="count.dat",*addr="addr.dat";
test = getenv("REMOTE_ADDR");
fp = fopen(addr,"r+");
fgets(ip,30,fp);
if(ip==test){
printf("test");
fclose(fp);
}
0593592
2008/01/06(日) 04:11:42{
fprintf(fp,test);
fclose(fp);
fp=fopen(count,"r+");
rewind(fp);
fscanf(fp,"%6ld",&i);
i++;
rewind(fp);
printf("Content-type: text/plain\n\n\0");
fprintf(fp,"%06ld",i);
printf("%06ld",i);
fclose(fp);
}
}
こんな感じです。多分どっか物凄く適当な事をしてる部分があると思うのですが
自分ではぜんぜんそれがどこか判りません・・・
誰か教えてください・・・
0594592
2008/01/06(日) 04:13:28printf("test");
はif文に入ったかどうかチェックする為に書いた物で意味はありません。
0595デフォルトの名無しさん
2008/01/06(日) 04:19:46・ipは只の未初期化のポインタ
・文字列の比較は==ではしない
0596デフォルトの名無しさん
2008/01/06(日) 04:19:57char* ip; で
fgets(ip,30,fp); は臭う
if(ip==test) ポインタ比較してどうする
文字列比較は strcmp (string.h)
全部読んでないが、ここら辺。
0598デフォルトの名無しさん
2008/01/06(日) 04:42:360599592
2008/01/06(日) 04:56:42眠いせいか全く頭まわらず、未だ解決の糸口が掴めません・・今日はもう寝ます。
もしよかったら592の鳥頭でも判るcの初心者向け解説サイトなんかあったら教えていただけますか?orz
よく寝て頭冴えてる時にもう1度チャレンジします。
0600デフォルトの名無しさん
2008/01/06(日) 05:09:17ttp://www9.plala.or.jp/sgwr-t/
0601デフォルトの名無しさん
2008/01/06(日) 05:09:35char *test,ip[128],*count="count.dat",*addr="addr.dat"; にして
if(ip==test){ は
#include <string.h> を追加して if(strcmp(ip, test) == 0)だな
あと、printf("Content-type: text/plain\n\n\0"); の最後の\0は要らない
サイトより、しっかりした一冊を読んだほうが為になると思う
0602592
2008/01/06(日) 05:55:21600さん601さんありがとうです。ほぼ601さんの書き込み通りで出来ました。
else
の後に
rewind(fp);
が無かったのでaddr.datが追加書き込みで上手く働かなかったのだけ
なんとか自力で見つけて修正しました。ホント有難うです!
0603デフォルトの名無しさん
2008/01/06(日) 10:25:50つ http://homepage3.nifty.com/ryuz/c/about_ansi.html
>宣言がなかったら外部の関数は一切まともに呼べないと思うのだが。
外部の関数はextern宣言で呼ぶ。
古いソースを見ると、こんなのを見かける。
#ifdef __STDC__
int func(int arg1, char *arg2);
#else
int func() /* これが古いスタイル */
#endif
今はもう過去の遺物だが。
0604デフォルトの名無しさん
2008/01/06(日) 10:36:540605デフォルトの名無しさん
2008/01/06(日) 12:26:34まさか、その「古いスタイル」という奴は宣言ではないとでも?
0606デフォルトの名無しさん
2008/01/06(日) 12:42:43そのためmath.hをインクルードしてないと引数がintになったりしてたような
0607デフォルトの名無しさん
2008/01/06(日) 12:45:030608603
2008/01/06(日) 12:59:23ごめん、間違えた。
#ifdef __STDC__
extern int func(int arg1, char *arg2);
#else
extern int func() /* これが古いスタイル */
#endif
こうだった。
0609デフォルトの名無しさん
2008/01/06(日) 14:23:04セミコロン要らないの?
0611デフォルトの名無しさん
2008/01/06(日) 16:17:55>>605
とりあえず「プロトタイプ宣言」では無いと思う。
>>606-607
>引数がintになったりしてたような
戻り値とちゃうか?
んで、暗黙の戻り値の型はC99でダメにならなかったっけ?
0612デフォルトの名無しさん
2008/01/06(日) 17:17:39古い仕様やANSI非準拠の環境ならプロトタイプ宣言なくても関数呼び出しが可能。
戻り値は省略された場合intとみなす(これは確か規格)
引数はそこに関数呼び出しがあるならプロトタイプ宣言がなくとも予測できる。
int func();// ←プロトタイプ宣言
int a = func( 5, "hoge" );
と書かれていればfuncの引数が予測できる。
0613デフォルトの名無しさん
2008/01/06(日) 17:22:03あってる限り問題は出ない
0614デフォルトの名無しさん
2008/01/06(日) 17:32:580615デフォルトの名無しさん
2008/01/06(日) 17:47:370616デフォルトの名無しさん
2008/01/06(日) 19:08:31なんか色々とウサンクサイな・・・
0617デフォルトの名無しさん
2008/01/06(日) 20:50:500618デフォルトの名無しさん
2008/01/06(日) 21:04:470619デフォルトの名無しさん
2008/01/06(日) 21:07:500620デフォルトの名無しさん
2008/01/06(日) 21:08:200621デフォルトの名無しさん
2008/01/06(日) 21:09:060622デフォルトの名無しさん
2008/01/06(日) 21:21:220623デフォルトの名無しさん
2008/01/06(日) 22:21:17200〜300行程度のプログラムならなんとでもなるね。
問題は複数の Cファイルに分割しなければいけない時。
ファイル数が多くなり、extern 関数呼び出しが多くなった時
プロトタイプ宣言が有る場合と無い場合とではバグ出現回数が
大幅に違ってくる。
プロトタイプ宣言する事を癖にした方が良いよ。
0624デフォルトの名無しさん
2008/01/06(日) 22:22:410625デフォルトの名無しさん
2008/01/06(日) 22:26:46>プロトタイプ宣言が有る場合と無い場合とではバグ出現回数が
>大幅に違ってくる。
ソースキボン
0626デフォルトの名無しさん
2008/01/06(日) 22:42:32プロトタイプ宣言がない場合、関数の引数の数と型を合わせるのはプログラマの責任になる。コンパイラはチェックしない。
ファイル間の膨大な数の関数と呼び出しで、それを完璧にやれる人はまずいない。
0628デフォルトの名無しさん
2008/01/07(月) 00:42:390629デフォルトの名無しさん
2008/01/07(月) 01:02:06俺も一瞬思ったw
>>627
昔はソース書いてからコンパイラに吐かせてプロトタイプ作ったりもしたが
今はIDEもあるし、ほぼ同時に作るべ、
複数人でやるならソースとヘッダの提供は不可欠だしな
0630デフォルトの名無しさん
2008/01/07(月) 01:04:460631デフォルトの名無しさん
2008/01/07(月) 01:06:020632デフォルトの名無しさん
2008/01/07(月) 03:51:400633U
2008/01/07(月) 17:58:56if (a < (int)(a * 10) % 10){
a = (int)a+1;
}
(注:aはdouble型です)
上記のような文がプログラム中にあったとき、aを7.1なら8のように小数の切り上げをしたいんですがこれでなっていることになるのでしょうか?
小数の切り上げの方法を知っていたら教えてほしいです(標準関数を用いない方法で)。
0634デフォルトの名無しさん
2008/01/07(月) 18:08:150635デフォルトの名無しさん
2008/01/07(月) 18:15:090636633
2008/01/07(月) 18:22:42学校の課題なので使ってはいけないという制限があるんです。
>>635
回答ありがとうございます。
ですがすみません7.1の他にも小数があるのでそれ以外にも対応出来るようにしたいんです。
0637633
2008/01/07(月) 19:05:00とても答えづらい質問ですみませんでした。
0638デフォルトの名無しさん
2008/01/07(月) 19:10:030639デフォルトの名無しさん
2008/01/07(月) 19:11:03詮索することはあるまい。
0640デフォルトの名無しさん
2008/01/07(月) 19:32:250641デフォルトの名無しさん
2008/01/07(月) 19:35:310642デフォルトの名無しさん
2008/01/07(月) 19:44:31だめ?
0643デフォルトの名無しさん
2008/01/07(月) 19:47:150644デフォルトの名無しさん
2008/01/07(月) 19:52:15#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[]){
double value=100.001;
long result;
if(argc>=2) value=atof(argv[1]);
result=value; /* この行と */
if(value>result) result++; /* この行 */
printf("%ld\n", result);
return 0;
}
0645デフォルトの名無しさん
2008/01/08(火) 00:57:40371 388 39 388
88 404 150 428 404 387 145 299 404 197
320 397 141 342 428 429 206
36 214 412 88 176 214 346 210 406 308
250 26 112 370 328 328 284
こんな感じのデータファイル(data.txtの一部です)を2次元配列にいれるにはどうプログラミングすればいいですか?
改行とかスペースをどう考慮していけばいいかさっぱりです
0646デフォルトの名無しさん
2008/01/08(火) 01:07:31つ[fscanf()]
0647デフォルトの名無しさん
2008/01/08(火) 01:10:12fscanfでも使ったら?
0648デフォルトの名無しさん
2008/01/08(火) 01:13:50for(i = 0; !feof(fp); i++){
do{
fscanf(fp,"%d",&date[i][j++]);
}while(fgetc(fp) != '\n');
}
0649デフォルトの名無しさん
2008/01/08(火) 01:28:520650デフォルトの名無しさん
2008/01/08(火) 02:15:50!feof(fp); って何ですか?
0651デフォルトの名無しさん
2008/01/08(火) 02:24:07つ http://www9.plala.or.jp/sgwr-t/lib/feof.html
ファイルの終端でない間ループする
0 != feof(fp)
0652デフォルトの名無しさん
2008/01/08(火) 03:13:530653デフォルトの名無しさん
2008/01/08(火) 03:36:400654デフォルトの名無しさん
2008/01/08(火) 03:46:36面白くなってきたのか!!
良いことだ!!
ただ油断するなよ。
scanfの仕様をもう一度確かめるんだ!!
不具合が多くて嫌になるぜ!!
0655デフォルトの名無しさん
2008/01/08(火) 05:02:29ほとんど使わないのかよ!
>>653
printfとかだとなんか字がでてくるだけでつまらなかったけど
scanfだとキーボード側から入力できて面白くなってきたぜ
しかし練習問題やったら、doubleなのに変換仕様を%fにしてたり
変数の前に&入れてなかったりとミス多発\(^o^)/
質問スレなのにすいません
0656デフォルトの名無しさん
2008/01/08(火) 05:50:55scanfは正しい入力をしているならまだいいが、ひとたび間違った入力が来ると簡単にバグの原因になる。
整数(%d)を欲しいところで文字列なんて打っちゃった日にはもう・・・
まぁ外に出すようなものじゃなければ気にしなくてもいいけどね。
慣れてきたらそこらへんも勉強してみるといいと思うよ。
0657デフォルトの名無しさん
2008/01/08(火) 08:03:250 == feof(fp)
0658デフォルトの名無しさん
2008/01/08(火) 10:07:45だろ。それじゃ4バイトも無駄になる。
0659デフォルトの名無しさん
2008/01/08(火) 10:15:14scanfから入るのもいいんじゃない?そのうち使わなくなるだけで
0660デフォルトの名無しさん
2008/01/08(火) 13:18:16どこでどんな4バイトが無駄になるんですか?
0661デフォルトの名無しさん
2008/01/08(火) 13:40:14それは返り値でなんとかなるだろ
いやscanfで値取得がだめなのはもちろんなんだがな、オーバーフローは検知不可能できないし
そもそも>>658は誰宛なんだよwww
0662デフォルトの名無しさん
2008/01/08(火) 13:48:35>オーバーフローは検知不可能できないし
検知できるんですか? できないんですか?
そもそも、その「オーバーフロー」とはなんのことですか?
0663デフォルトの名無しさん
2008/01/08(火) 13:49:560664デフォルトの名無しさん
2008/01/08(火) 14:04:00オーバーフローとは
風呂にお湯を張るとき、止めるのを忘れたときに起こる奴
0665デフォルトの名無しさん
2008/01/08(火) 14:07:580667デフォルトの名無しさん
2008/01/08(火) 15:07:06longもunsignd intもcharもそれぞれに最大・最小値があるから、それを超える値を入力されると困る。
0668デフォルトの名無しさん
2008/01/08(火) 15:38:01のような文字列の配列があった場合に、この配列の長さ(上の例では3)を
取得するにはどのようにすればできるでしょうか?
length のような関数があるのではないかと思うのですが、、、
0669デフォルトの名無しさん
2008/01/08(火) 15:39:060670662
2008/01/08(火) 15:49:00なるほど。で、それは検知不可能なんですね?
では検知できる入力関数はあるのでしょうか。
或いは、桁数制限してしまえばオーバフローは回避できますよね。
0671デフォルトの名無しさん
2008/01/08(火) 15:55:39文字列としてならいくらでも大きい数値を入れられるし、atoiはオーバーフローを検知してくれる。
0672デフォルトの名無しさん
2008/01/08(火) 16:12:320673デフォルトの名無しさん
2008/01/08(火) 16:16:36getsはない。
0674デフォルトの名無しさん
2008/01/08(火) 16:19:020675デフォルトの名無しさん
2008/01/08(火) 16:20:310676デフォルトの名無しさん
2008/01/08(火) 16:24:41if(!num) はif(num == 0)と
if(num) はif(num != 0)と同じ意味
while(!feof(fp))はfeofの返り値が0になるまでって意味
0677デフォルトの名無しさん
2008/01/08(火) 16:32:53feofの返り値が0の間
0678デフォルトの名無しさん
2008/01/08(火) 16:38:00果てしなく無意味なオーバーフロー対策だなwwwwwwwww
0679デフォルトの名無しさん
2008/01/08(火) 16:39:34リダイレクト前提のやつはこの限りでもないが。
0680デフォルトの名無しさん
2008/01/08(火) 16:56:16printf("%d %d\n",x++,x);
}
だと表示される値は2つとも一緒なのに
printf("%d %d\n",x,x++);
に変えるとなぜ左側のほうが大きくなるのでしょうか?
後ろに++を付けているのだから右側が大きくなるべきだと思うのですが
0681デフォルトの名無しさん
2008/01/08(火) 16:57:050682デフォルトの名無しさん
2008/01/08(火) 16:58:08それ未定義動作
まあ理由としては、引数は後ろからスタックに積むから後ろの式を先に評価するケースが多いからだろうな。
0683デフォルトの名無しさん
2008/01/08(火) 17:03:12「べき」って使いませんか?
「大きくならなければならないと思うのですが」というニュアンスです。
>>682
素早い回答有り難うございます。
0684デフォルトの名無しさん
2008/01/08(火) 17:10:170685デフォルトの名無しさん
2008/01/08(火) 17:49:24途中で挫折する人がいて退職する人も多々いると聞きます。
そう言われてる箇所は、だいたいどういう箇所なのか
具体的に教えてくれませんか?
0686デフォルトの名無しさん
2008/01/08(火) 17:50:060687デフォルトの名無しさん
2008/01/08(火) 18:03:14http://pc11.2ch.net/prog/
0688デフォルトの名無しさん
2008/01/08(火) 20:04:43外部の環境変数が設定してあるファイルを
makefileの中から読み込むことって出来ますか?
出来るなら方法を教えてください。
0689デフォルトの名無しさん
2008/01/08(火) 20:17:370690デフォルトの名無しさん
2008/01/08(火) 20:29:21ありがとうです
makeスレがないですね
シェルはあまり関係なさそうだし・・
うーん。どこがいいんだろ・・
0691688
2008/01/08(火) 20:38:44そちらで聞いてみます。どうもありがとうでした。
0692デフォルトの名無しさん
2008/01/08(火) 21:03:00エラーは出なかったのでおかしいと思って、読み込みモードで同じフォルダを指定すると読み込むことができました。
あれ?と思いそのフォルダを開いてみたのですが、ファイルは見当たりませんでした。
これはどういうことなんでしょうか?
0693デフォルトの名無しさん
2008/01/08(火) 21:04:03C:\\save.txt
0694デフォルトの名無しさん
2008/01/08(火) 21:05:430695デフォルトの名無しさん
2008/01/08(火) 21:08:09ありがとうございます!
ファイルを保存できました。
>>694
そうなんです
これはなぜだったんでしょうか?
0696デフォルトの名無しさん
2008/01/08(火) 21:35:54書き込みモードで起動したときにファイルを作成したと思う。
0697デフォルトの名無しさん
2008/01/08(火) 21:51:47別のフォルダでsave.txtというファイルをまず作ってくれ
それをお前さんが指定したフォルダにコピーできるか試してみてくれ
あと使っているOS教えてくれ
見えないというのはGUIを使っているということでいいのか?
0698デフォルトの名無しさん
2008/01/08(火) 22:13:51コピーできました。
OSはWindowsXPです。
GUIです。
D:\save.txtで書き込むとちゃんとファイルが出来ました。
指定したフォルダはCの中にあり、その奥に既にsave.txtがあったのが問題だったのでしょうか?
勝手に探してくれたということだと思うのですが。
fscanf()がEOFを返したときに終了するのが普通。
0700デフォルトの名無しさん
2008/01/08(火) 23:08:51何も解決にならないでこんなこというのもなんだが
画面に絵とかファイル名とかが表示されてないだけで実際はファイルが生成される現象かな
Windows使ってる友人から以前聞いたことある
ブラウザからテキストの内容を見ることできると言っていたかな
力になれなくてすまん
0701デフォルトの名無しさん
2008/01/08(火) 23:16:15なら>>645のためにも
>>648よりスマートに書いてみろよw
なんでこんな使いどころのない関数があるんだよって感じ。
0703デフォルトの名無しさん
2008/01/08(火) 23:39:32エラーが発生したのかチェックするために使うんじゃね。
0704デフォルトの名無しさん
2008/01/09(水) 00:05:440705デフォルトの名無しさん
2008/01/09(水) 00:07:24それを言ってた奴は馬鹿。
0706デフォルトの名無しさん
2008/01/09(水) 00:10:05永遠にファイル終端に達しないから、エラーチェックしないと feof は危険。
しかし、そのエラーチェックでファイル終端も分かるから・・・。
0707デフォルトの名無しさん
2008/01/09(水) 10:00:41読んでるのなら使うことはないな。
0708デフォルトの名無しさん
2008/01/09(水) 16:03:330709デフォルトの名無しさん
2008/01/09(水) 22:44:540710デフォルトの名無しさん
2008/01/09(水) 22:46:430711デフォルトの名無しさん
2008/01/10(木) 00:44:180712デフォルトの名無しさん
2008/01/10(木) 02:27:56>2次元配列にいれる
っていうルールはどんなんだ?
0713デフォルトの名無しさん
2008/01/10(木) 02:41:23聞きたい事いいいいっぱいあるです・・・。
0714デフォルトの名無しさん
2008/01/10(木) 02:49:360715713
2008/01/10(木) 02:57:50ソケット通信用のIOを得たときや、
open などのシステムコールを使って
ファイルディスクリプタを得た時など、
これらのリソースが正数型で返されますが、
この返り値は単なる確保したIOリソース用の
管理用番号みたいなモノと考えて良いのでしょうか?
また、もしそうならば、同一の正数値を指定さえすれば、
同じリソースに対して操作が可能なのでしょうか?
0716デフォルトの名無しさん
2008/01/10(木) 03:02:50open()の度に更新されるから、無理。勿論、close()しない限りは変わらないが。
# 例外は、stdin, stdout, stderr, stdaux相当のディスクリプタ。
0717デフォルトの名無しさん
2008/01/10(木) 03:17:54レスありがとうございます!
>open()の度に更新されるから、無理。
これに関してはもちろんわかっています。
ただ、返り値自体がどの範囲でどういった形で、
有効なのかが解らなかったもので…。
(IOを得るのにポインタとかで操作しないのかなー?と思ったのです。)
同じプロセス上から同じ値で参照した場合。
という意味で書きました。解りにくくてすみません…。
でも
>勿論、close()しない限りは変わらないが。
ということは715は合ってると考えていいですよね?
># 例外は、stdin, stdout, stderr, stdaux相当のディスクリプタ。
参考になります!
0718デフォルトの名無しさん
2008/01/10(木) 03:19:37誤:ということは715は合ってると考えていいですよね?
正:ということはclose()しない限りは715は合ってると考えていいですよね?
結果的に連投になってしまいましたすみません><
0719デフォルトの名無しさん
2008/01/10(木) 03:30:02同じプロセス上でopenしたままの記述子なら同じ。
というかそうじゃないと全てのIOが出来ない。
0720デフォルトの名無しさん
2008/01/10(木) 04:17:52と宣言したら
sizeof(array);
で256が返ると思います。でも、
void print_arraysize(char *array) {
printf("%d",sizeof(array));
}
というようにするとポインタのサイズが返ります。
呼び出される関数側から配列のサイズを知る方法はありますか?
0721デフォルトの名無しさん
2008/01/10(木) 04:22:46Cでは無理です。諦めて、その関数にサイズも渡すしかありません。
0722デフォルトの名無しさん
2008/01/10(木) 12:21:11構造体の中に配列入れて構造体を引数にすれば、関数に配列を渡せる。
ただ、関数を呼ぶときに構造体の中身の全コピーが作られるので、激しく無駄。
配列の要素数を1つ多めに作っておいて、そこに目印となる値を入れておいて、
関数側で数えるという手もある。
けど結局はfunction( array , sizeof(array) )のようにして呼び出す
関数を作るのが一番かと。
0723デフォルトの名無しさん
2008/01/10(木) 13:52:060724デフォルトの名無しさん
2008/01/10(木) 13:55:15C/C++の宿題を片付けます 102代目
http://pc11.2ch.net/test/read.cgi/tech/1199515728/
0725デフォルトの名無しさん
2008/01/10(木) 20:23:44Cで
static int hoge;
int static hoge;
の違いって、前者が大域変数になって
後者が関数内で静的な、値を保持しつづける関数になるってことですか?
0726デフォルトの名無しさん
2008/01/10(木) 20:26:52staticのような修飾子と型名は順不同というだけ。
0727デフォルトの名無しさん
2008/01/10(木) 20:28:17>int static hoge;
その2つは一緒
>前者が大域変数になって
>後者が関数内で静的な
それは宣言する場所で変わる
関数の外で宣言すれば大域
関数の中で宣言すれば関数内のみ
0728デフォルトの名無しさん
2008/01/10(木) 20:39:050729デフォルトの名無しさん
2008/01/10(木) 20:44:340730デフォルトの名無しさん
2008/01/10(木) 20:49:33ファイルローカルはexternに対してinternalとかにすりゃよかったのに。
0731デフォルトの名無しさん
2008/01/10(木) 20:56:390732デフォルトの名無しさん
2008/01/10(木) 21:05:53ちょいとまだ把握できてないです
void main(){
int hoge[400000];だとアウトで
static int hoge[400000]; だと領域が確保できて
…
}
教えてくれた人が「static使うと、たくさん取れるよ」と言ってくれたので調べたのですが
どうもそういうことが見当たらなくて「静的な」とか。
上のような使い方は間違ってますか
0733デフォルトの名無しさん
2008/01/10(木) 21:11:25スタック領域は他と比べるとかなり小さいから。
まあ恒久的なプログラムじゃなくて、一時的な使い捨てプログラムのときはそうやることもある。
0734デフォルトの名無しさん
2008/01/10(木) 21:32:40大域変数と同じところのメモリ領域を使うということですか。
0735デフォルトの名無しさん
2008/01/10(木) 22:02:250736デフォルトの名無しさん
2008/01/10(木) 22:08:020737デフォルトの名無しさん
2008/01/11(金) 02:32:24メモリ制限厳しい組込みとかだと普通にやるよ。
まぁでもソコまでだと、外部変数のバッファを使いまわしてチューニングする方が多いかも。
そんなんやりたく無いんだけどね・・・ハードコスト削減には勝てんわ。
0738デフォルトの名無しさん
2008/01/12(土) 13:09:17以下のソースで、ファイルは出力されるのですが、音声が出てきません。
どこを修正すればよいか教えていただけませんか?
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define SIZE 22050*5
#define OFFSET 23
int main(int argc,char *argv[])
{
FILE *fp;
short int inbuf[SIZE];
short int outbuf[SIZE];
int i,f,f0,amp,PI;
f = 440;
f0 = 11050;
amp = 5000;
if((fp = fopen("test-sound-16-22.wav", "rb")) == NULL ) {
printf("ファイルオープンエラー\n");
exit(EXIT_FAILURE);
}
0739デフォルトの名無しさん
2008/01/12(土) 13:10:09fread(inbuf, sizeof(short int), SIZE, fp);
fclose(fp);
for (i=OFFSET; i<200; i++)
printf("%d, ",inbuf[i]);
printf("\n");
for (i=0; i<OFFSET; i++)
outbuf[i]=inbuf[i];
for (i=0; i<(SIZE-OFFSET); i++){
outbuf[i+OFFSET] = amp * sin(2*PI*i*(f/f0));
}
for (i=(SIZE-OFFSET); i<SIZE; i++)
outbuf[i]=0;
if((fp = fopen("testfile2.wav", "wb")) == NULL ) {
printf("ファイルオープンエラー\n");
exit(EXIT_FAILURE);
}
fwrite(outbuf, sizeof(short int), SIZE, fp);
fclose(fp);
return 0;
}
0740デフォルトの名無しさん
2008/01/12(土) 13:15:12音声を出力するところがどこにもないじゃん。
0741デフォルトの名無しさん
2008/01/12(土) 13:15:13あとsin()の中intになってないか?
0742デフォルトの名無しさん
2008/01/12(土) 13:15:430743デフォルトの名無しさん
2008/01/12(土) 13:25:55PIの初期化してないじゃん。ちゃんとデバッグしてんの?
0744デフォルトの名無しさん
2008/01/12(土) 13:29:160745738
2008/01/12(土) 13:29:36きちんと出力されて、音声も出ています。
正弦波の合成はなぜか出来ない・・・
>> 740
音声ファイルを出力するところがないとは?音声ファイルは出力されていますが・・・
>> 741
出力された音声ファイルは何も発音がありません。
ファイルのサイズはきちんとあるので、データは自体は出力されていると思うのですが・・・
for (i=0; i<(SIZE-OFFSET)/2; i++) {
outbuf[i+OFFSET]=inbuf[i*2+OFFSET];
}
for (i=(SIZE-OFFSET)/2; i<SIZE; i++)
outbuf[i]=0;
0746デフォルトの名無しさん
2008/01/12(土) 13:29:480747デフォルトの名無しさん
2008/01/12(土) 13:30:480748デフォルトの名無しさん
2008/01/12(土) 13:38:510749デフォルトの名無しさん
2008/01/12(土) 13:53:05デバッガで変数の値見ながら実行すればすぐに分かりそうなもんだけど。
0750738
2008/01/12(土) 14:09:290751デフォルトの名無しさん
2008/01/13(日) 06:12:14氏名
年齢
住所
が入る変数を宣言しその構造体の配列を10人分用意しループで順番に入力してもらい氏名、住所、年齢に
空ENTERが入るとループを終了するということをしたいのですが。
全ての項目に空ENTERが入力されるとループを終了するという所をどのように書けばいいのかわかりません。
教えて下さい。
0752デフォルトの名無しさん
2008/01/13(日) 06:37:02空ENTERが入力されたかどうか判別するプログラムは作れるのか?
0753デフォルトの名無しさん
2008/01/13(日) 10:41:06氏名をfgets関数で入力し、strlen関数で氏名の文字数を求め、それがゼロだったら終了
0754デフォルトの名無しさん
2008/01/13(日) 12:34:26文字入力として使えるの?
0755デフォルトの名無しさん
2008/01/13(日) 12:37:190756デフォルトの名無しさん
2008/01/13(日) 12:43:11っ stdin
0757デフォルトの名無しさん
2008/01/13(日) 13:34:55ストリームの概念が理解しやすくなる。
0758デフォルトの名無しさん
2008/01/13(日) 13:48:56ディスクリプタの概念が理解しやすくなる。
0759デフォルトの名無しさん
2008/01/13(日) 13:54:480760デフォルトの名無しさん
2008/01/13(日) 13:56:070761デフォルトの名無しさん
2008/01/13(日) 14:14:31(defun 開く (file-name mode &optional perm) ...)
(defun 閉じる (file-desc) ...)
(defun 書く (file-desc buff buff-size) ...)
(defun 読む (file-desc buff buff-size) ...)
まぁ, スレ違いだわな
0762デフォルトの名無しさん
2008/01/13(日) 17:50:328マスから4マスに変えたいです
0763デフォルトの名無しさん
2008/01/13(日) 17:51:57環境による。また、アプリケーションの設定にもよる。
0764デフォルトの名無しさん
2008/01/13(日) 17:52:18エディタによる、いやそもそもエディタの話なのかも知らんが
0765デフォルトの名無しさん
2008/01/13(日) 17:52:22使ってるOSと端末くらい書け。
0766デフォルトの名無しさん
2008/01/14(月) 00:21:01int main(void)
{
char *c1;
{
char *c2;
c1 = StoA(1000);
c2 = StoA(2000);
printf("c1 : %d\n", c1);
printf("c2 : %d\n", c2);
}
return 0;
}
このプログラムを実行すると、 なぜかc1の値がc2の値と同じになってしまします。
なぜなのか教えてください。
0767デフォルトの名無しさん
2008/01/14(月) 00:22:24ちなみにStoA関数は数値を文字列に変換する関数です。
0768デフォルトの名無しさん
2008/01/14(月) 00:22:350769デフォルトの名無しさん
2008/01/14(月) 00:23:330770デフォルトの名無しさん
2008/01/14(月) 00:24:040771デフォルトの名無しさん
2008/01/14(月) 00:35:00あと
>printf("c1 : %d\n", c1);
>printf("c2 : %d\n", c2);
%sちゃうのか?
で、同じ数値になるってところからサイコメトリーすると、
グローバル変数かローカル変数辺りの配列のポインタを返してると見た。
コール時にバッファ渡すか、StoAでmallocしてmainでfreeするかしたまい。
StoAを作るのが目的でないならsprintfかitoaでも使え。(個人的にはsprintf)
最後に、C言語で数値を文字列に変換する関数は「ItoA」か「ItoS」な。
StoAだと何してんだか訳分からん。
0772デフォルトの名無しさん
2008/01/14(月) 00:42:07StoAはshort型からアスキーコードに変換する関数です。
int main(void)
{
char *c;
c = StoA(123);
printf("%s\n", c);
return 0;
}
だと正常に動きます。
0773デフォルトの名無しさん
2008/01/14(月) 00:44:08作るのが目的ではなくてなぜこうなるのか説明するのが目的なのでよろしくおねがいします。
0774デフォルトの名無しさん
2008/01/14(月) 00:45:060775デフォルトの名無しさん
2008/01/14(月) 00:46:24んなこた良いからさっさとStoAのソースを貼れwww
0776デフォルトの名無しさん
2008/01/14(月) 00:48:09無茶な要求をしないでください。もう少し常識をわきまえて。
0777デフォルトの名無しさん
2008/01/14(月) 00:48:590778デフォルトの名無しさん
2008/01/14(月) 00:49:160779デフォルトの名無しさん
2008/01/14(月) 00:51:35その通りです。
ありがとうございます。
>>778
説明するのが目的なので分かりやすく説明してもらえると光栄です。
0780デフォルトの名無しさん
2008/01/14(月) 00:55:230781デフォルトの名無しさん
2008/01/14(月) 00:56:15c1 = StoA(1000);
c2 = StoA(2000);
printf("c1 : %s\n", c1);
printf("c2 : %s\n", c2);
↑で同じ値が出るんだろ?多分両方2000か?
c1 = StoA(1000);
printf("c1 : %s\n", c1);
c2 = StoA(2000);
printf("c2 : %s\n", c2);
これで同じになるか試してみ。
違う値になるようなら、多分StoAがstatic変数かグローバル変数のバッファ使ってる。
printf("%p, %p\n", c1, c2);
で同じ値が出てくるはず。
そうじゃなきゃ、自分でデバッグしてくれ。
ソース無しじゃお手上げ。
0782デフォルトの名無しさん
2008/01/14(月) 01:14:31処理�@
引数の桁数を調べる
(引数が12345ならiDigに10000を入れておく)
処理�A
pStrにcStrのアドレスを入れて
数値を文字コードに変換して*pStrに格納。
処理�B結果をかえす。
ちなみにcStrはstatic変数です。
わかりにくくてすいません"汗
0783デフォルトの名無しさん
2008/01/14(月) 01:16:480784デフォルトの名無しさん
2008/01/14(月) 01:18:02同じのが表示されるの当たり前でんがな。
バッファをローカルで持って、引数で渡すといいよ。
0785デフォルトの名無しさん
2008/01/14(月) 01:36:21ひとつの方法としてtimeを使って,現在の時間を取得し続け時間になれば動作する方法
これだとずっと時間を取得し続けるので,良くないような気がするので・・・
ちなみに環境はFedora,gccです.
0786デフォルトの名無しさん
2008/01/14(月) 01:39:220787デフォルトの名無しさん
2008/01/14(月) 01:43:59すりゃいいだろ。
ま、ふつーにcron使えと。
0788デフォルトの名無しさん
2008/01/14(月) 01:47:340789デフォルトの名無しさん
2008/01/14(月) 01:48:44ありがとうございます.ちょっと調べましたがcronは使えそうです.
あとは,外部から動作する時間の変更が行われるので,それが出来るか調べて見ます.
自分のプログラムだけで実現できると一番良いですが・・・
0790デフォルトの名無しさん
2008/01/14(月) 01:51:44やはりcronを使わないとしたらこの2つですかね
0791デフォルトの名無しさん
2008/01/14(月) 02:02:11戻したいんですが方法を教えてください。
0792785
2008/01/14(月) 02:04:17ありがとうございました
0793デフォルトの名無しさん
2008/01/14(月) 02:04:310794デフォルトの名無しさん
2008/01/14(月) 02:36:42winだったら、system("CLS");
0795デフォルトの名無しさん
2008/01/14(月) 02:38:30win以外ではエスケープシーケンスとか
0796デフォルトの名無しさん
2008/01/14(月) 04:25:030797デフォルトの名無しさん
2008/01/14(月) 10:50:14ちらつかないようにって可能なんでしょうか。
もし可能であるならばどうやればいいのでしょうか。
0798デフォルトの名無しさん
2008/01/14(月) 10:53:06コンソールでゲームでもつくってんのか?
0799デフォルトの名無しさん
2008/01/14(月) 10:55:58細かい制御が必要なら環境かけっつうの
0800デフォルトの名無しさん
2008/01/14(月) 10:56:23全画面を一度に書き換えるか。
どちらにしろ標準関数だけじゃ辛いので、
こういった関数を使うしかない。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpfileio/html/Toppage_Console.asp
0801デフォルトの名無しさん
2008/01/14(月) 11:26:59環境はWinです。
同じ文字列が右から左に移動していき左端にきた文字は消えていくというのをしてるのですが
おもったようにちらつきを消すことができまちぇん。。
0802デフォルトの名無しさん
2008/01/14(月) 11:40:12消さずに上書き。
変化の無い部分は書き換えない。
0803デフォルトの名無しさん
2008/01/14(月) 11:48:49上書きってどう書けばいいのかわかりません。。。。
ちょっとした例示してもらえませんか?
0804デフォルトの名無しさん
2008/01/14(月) 11:49:560805デフォルトの名無しさん
2008/01/14(月) 11:58:06#include <stdio.h>
#include <string.h>
void func(int width, const char * str)
{
int len = strlen(str);
for (int ic = 0; ic <= len; ++ic) {
printf("\r%*.*s", width, ic, str);
fflush(stdout);
sleep(1);
}
for (int ic = 0; ic < width; ++ic) {
printf("\r%*s%*s", width - 1 - ic,
ic < width - len ? str : str + ic + 1 - width + len,
ic + 1, "");
fflush(stdout);
sleep(1);
}
}
int main()
{
func(20, "abcde");
return 0;
}
0806デフォルトの名無しさん
2008/01/14(月) 12:41:05FILE *fp;
int i, j, a, b;
short int image[HEIFGT][WIDTH];
上のプログラムを一行ずつ何をしてるんですか?
a = atoi(*argv[1]);
b = atoi(*argv[2]);
0807806
2008/01/14(月) 12:42:21a = atoi(*argv[1]);
b = atoi(*argv[2]);
も教えてください
0808デフォルトの名無しさん
2008/01/14(月) 12:49:270809デフォルトの名無しさん
2008/01/14(月) 12:54:39移植はされてると思う。
0810デフォルトの名無しさん
2008/01/14(月) 12:56:27プログラムの起動時に渡されたコマンドラインの引数を、数値に変換してるんだけど、それだとバグっていて動かないね。
0811デフォルトの名無しさん
2008/01/14(月) 14:19:430812デフォルトの名無しさん
2008/01/14(月) 16:12:11変換後:hisTay
変換前:is
変換後:siay
以下のコードで上のように出力して欲しいのですが上手くいきません
何故でしょうか?
int main() {
int i;
char s[256] = "This is a pen", *word;
word = strtok(s, " ");
printLatinWord(word);
word = strtok(NULL, " ");
// wordに"ay"が入る。何で?
printLatinWord(word);
return 0;
}
void printLatinWord(char *word) {
char *alp;
/*
通俗ラテン語風に変換して出力
※先頭の文字を末尾に移し、その後ろにayを付加する。
*/
printf("変換前 : %s\n", word);
strncpy(alp, word, 1);
alp[1] = '\0';
strcat(word, alp);
strcat(word, "ay");
printf("変換後 : %s\n", &word[1]);\
}
0813デフォルトの名無しさん
2008/01/14(月) 16:29:28char *alp;
ポインタにぶちこむな
char alp[1000];
的な感じにしないと
0814デフォルトの名無しさん
2008/01/14(月) 16:32:59strtokは、与えた文字列(この場合s)の中を書き換えながら、そこを指すポインタを直接返す。
たとえば、"This is a pen" を与えると、strtokは最初
"This\0is a pen"
↑
ここを返す。文字列は\0で終わる決まりなので、"This"が得られる。2回目は
"This\0is\0a pen"
↑
ここを返す。"is"が得られる。3回目は
"This\0is\0a\0pen"
↑
ここを返す。"a"が得られる。
こういう動作なので、帰ってきた文字列に直接strcatで追加すると、
後ろの文字列(=次に返される文字列)が書き換わってしまう。
つまり、そのprintLatinWordを実行すると、sの中は
"ThisTay\0a pen"
のように書き換わり、次にstrtokが返すはずだった "is" は "ay" になってしまう。
0815812
2008/01/14(月) 16:42:27なんとなく*alpになってしまいました
まだ違いが良く分かってないので頑張って勉強します
>>814
wordを書き換えるとsも変わってしまうんですね。なるほど
丁寧にどうもです
*wordをword[256]に、word = strtok(s, " ");をstrcpy(word, strtok(s, " "))に直して上手くいきました
0816デフォルトの名無しさん
2008/01/14(月) 16:55:04#include<stdio.h>
#define MAX 10
int inputnum(int num[]){
int i;
for(i=0;i<MAX;i++){
scanf("%d",num[i]);
}
return num[];
}
int main (void){・・・・・・と続くのですが、
上記のサブ?ルーチンに表記の間違いがある場合、修正せよという問題です。
ですが配列の返し方など全て自習ということでここで止まってます…。
構文にエラーがあるというところまで分かっているのですが、
どうすえればいいか分かりません。ご教授願います。 orz
0817816
2008/01/14(月) 16:56:30よろしくお願いします。
0818デフォルトの名無しさん
2008/01/14(月) 16:59:05int i;
for(i=0; i<MAX; i++) scanf("%d", num + i);
}
0819デフォルトの名無しさん
2008/01/14(月) 17:00:36return 0;とでもしておけ
返さなくても渡された中身は書き換わってる
なんでかはポインタについて勉強せんと・・
0820デフォルトの名無しさん
2008/01/14(月) 17:06:48もでした
0821816
2008/01/14(月) 17:17:55丁寧にありがとうございます。
>>819
ということは>>818の通りvoid宣言でいいのですね…。
後でじっくり調べてみます。ありがとうございます。
0822デフォルトの名無しさん
2008/01/14(月) 17:21:48{
int i;
for(i=0; i<num_size; i++)
if(scanf("%d", &num[i]) != 1)
return 0;
return 1;
}
0823816
2008/01/14(月) 17:58:20すみません、「size_t num_size」とは何でしょうか?
また戻り値がどこの変数へ戻るのか分かりません…。
また1つ分からない事があるのでどなたかご教授お願いします orz
サイズを指定せずに配列を作る事は可能でしょうか?
int num[];
//これでは要素が無いためサイズが0であるのでできないということまで
分かりましたがそれ以上で詰まっています。
よろしくお願いします。
0824デフォルトの名無しさん
2008/01/14(月) 18:04:39size_tは型。たぶんunsigned intと同じである環境が多いのかな?
要は自然数用型とか思っとけばとりあえずOK。(サイズにマイナスはないからね)
戻り値がどこに入るかは呼び出し側次第。
int func( void )という関数があったとして
main内で「int a = func( );」 としてればfunc内の戻り値がa内に入る。
0825デフォルトの名無しさん
2008/01/14(月) 18:06:53サイズを指定しない配列は無理
malloc系を使えば好きな大きさで確保したり、大きさ変えたりはできるけど
0826デフォルトの名無しさん
2008/01/14(月) 18:08:05とかはできるけどそれは宣言のときだけね
0827816
2008/01/14(月) 18:32:46詳しくありがとうございます。
int inputnum(int num[], size_t num_size)
メインルーチンの方で上の2つの変数の値を指定すればいいということですね。
>>825-826
明確にありがとうございます。
入力する回数を予め決めるか、
要素次第ということですね。大変参考になりました。
皆さんありがとうございました。
0828デフォルトの名無しさん
2008/01/14(月) 18:59:16return !(num%2);
}
上記の関数でnumが奇数の場合と偶数の場合の戻り値はそれぞれどうなりますか?
有識者の方宜しくお願いします。
0829デフォルトの名無しさん
2008/01/14(月) 18:59:550830デフォルトの名無しさん
2008/01/14(月) 19:06:490831デフォルトの名無しさん
2008/01/14(月) 19:07:11何がわからんのだ?%演算子か?!演算子か?
関数や戻り値がわかってるのならどっちかだろうな。
num = 2;
num % 2 == 0;
!0 == 1
num = 1;
num % 2 == 1;
!1 == 0;
こんなもんでわかるだろ。
ってか>>829で良かったかな。
0832デフォルトの名無しさん
2008/01/14(月) 19:08:070833816
2008/01/14(月) 21:14:46配列inputのサイズ変数MAXをサブルーチンで決定したいのですが、
int MAX;
void sub(int MAX){
scanf("%d",&MAX);
}
int main(void){
input[MAX];
・
・
・
}
とした時に、「sub(MAX);」をどこで定義すればいいのでしょうか?
それともルーチンではできないでしょうか?
よろしくお願いします orz
0834デフォルトの名無しさん
2008/01/14(月) 21:18:070835デフォルトの名無しさん
2008/01/14(月) 21:18:290836デフォルトの名無しさん
2008/01/14(月) 21:19:26MAXの値はどこでも変えられるけど?
MAX = 4;とか好きにすれば?
それとも配列のサイズ変えたいの?
0837816
2008/01/14(月) 21:19:52void sub(int MAX){
scanf("%d",&MAX);
}
int main(void){
int MAX, input[MAX];
・
・
・
}
0838816
2008/01/14(月) 21:22:24すみません、定義ではなく呼び出しでした。ご指摘ありがとうございます。
>>836
サイズを入力で指定したいのですが、そのプログラムはサブルーチンで記すことが条件です。
0839デフォルトの名無しさん
2008/01/14(月) 21:25:06若干エスパー。
丸写しはどーかと思うけど、こういうことか?
void sub(int *MAX){
scanf("%d",&MAX);
}
int main(void){
int MAX;
int *input;
sub(&MAX);
/* int input_NG[MAX] <- これはムリ。配列の宣言では定数しか使えない */
input = malloc(MAX * sizeof(int));
・
・
・
free(input);
}
0840816
2008/01/14(月) 21:37:44ご回答ありがとうございます。
分かりづらくなってしまい申し訳ございません。
int MAX = 10;
int main(void){
int main[MAX];
・
・
・
このように、最初から数値を指定するのではなく、
MAXの値をscanf等の入力で毎回変更することはできませんか?
またできる場合、それをサブルーチンでまとめられますか?
イメージはこんな感じになります。
scanf("%d",&MAX);
int input[MAX];
何度もすみませんがよろしくお願いします。
0841デフォルトの名無しさん
2008/01/14(月) 21:53:30一応そのイメージで839を書いたんだけど・・・。
要はmallocを使いたくない(or知らないので分からない)ってこと?
どうしても配列ってことであれば、おそらく分からないだろうけど
C89ならムリ。C99なら出来る。
つまりコンパイラによる。
例えば俺が知ってるうちではVCでは出来ない。gccは最近のであれば出来る。
0842816
2008/01/14(月) 21:53:33/* int input_NG[MAX] <- これはムリ。配列の宣言では定数しか使えない */
すみませんようやく意味が分かりました。
本当に詳しくありがとうございました。
0843816
2008/01/14(月) 22:01:13#include <stdlib.h>とセットでちらっとだけ見た事があるので
調べて分かれば使えると思いますが、分からないということでお願いします。
別のプログラムで指定した値をファイルに出力し、当プログラムで読み込むというような方法はあるのでしょうか?
0844デフォルトの名無しさん
2008/01/14(月) 22:08:52とりあえずfopen辺りでファイルの入出力ができるよ(他にもあるけど)
それも分からないの?
0846デフォルトの名無しさん
2008/01/14(月) 22:18:52>調べて分かれば使えると思いますが、分からないということでお願いします。
お願いされてもwww
とりあえず十分に大きい固定サイズの配列を用意するか、
mallocを調べるのが良いと思うよ。
0847816
2008/01/14(月) 22:34:59>お願いw
すみません余計でした^^;
>固定サイズ
とても参考になりました。
0〜固定サイズまでで値を指定することならできそうです。
ありがとうございました。
時間があればmallocを扱えるようにしたいと思います。
0848デフォルトの名無しさん
2008/01/15(火) 16:44:03ハッシュ法について勉強してるんだけど、格納されたデータ(学籍番号と氏名)を読み取る際に、学籍番号の数(生徒数)を読み取る部分的なプログラムが分かりません。
どういう構文使えばいいでしょうか?
読み込みはこんな感じです↓
/* データファイルの読み込み */
if ((fp=fopen("DATA","r"))==NULL){
printf("File \'DATA\' is not found !\n");
}
while ( fscanf(fp, "%d %s", &data_zipcode, data_address) > 0 ) {
printf("%d : %s\n", data_zipcode, data_address);
/* データの格納 */
if ( StoreData(data_zipcode, data_address) == 0 ) {
printf("Hash Table is full !\n");
}
}
fclose(fp);
0849デフォルトの名無しさん
2008/01/15(火) 17:05:19ファイル内のデータの総数を知りたいなら、一回空読みすればよかろ。
つーか、それってハッシュ法と関連するのか?
0850デフォルトの名無しさん
2008/01/15(火) 17:50:05ハッシュするための下準備。んで、出来ました。ありがとうございました。
0851デフォルトの名無しさん
2008/01/15(火) 20:06:23printf("File \'DATA\' is not found !\n");
}
いっつも思うんだけどさ、これって何したいの?
ファイルオープン失敗したまま処理続けるなよ
0852N
2008/01/15(火) 20:07:270853デフォルトの名無しさん
2008/01/15(火) 20:17:11その箇所だけならなんとも言えんだろーがw
0854デフォルトの名無しさん
2008/01/15(火) 21:25:42#include <stdlib.h>
#define MAX_LINE 128
int main(void);
int main(void)
{
char buf[MAX_LINE];
int n;
printf("降水確率を入力してください。\n");
gets(buf);
n = atoi(buf);
ptintf("降水確率は %d %% です。\n", n);
if (n >= 50){
printf("傘を忘れずにね。\n");
}
else {
printf("傘はいりません。\n");
}
printf("いってらっしゃい。\n");
return(0);
}
/*これ↑のどこが悪いのか教えてください*/
0855デフォルトの名無しさん
2008/01/15(火) 21:31:570856デフォルトの名無しさん
2008/01/15(火) 21:47:310857デフォルトの名無しさん
2008/01/15(火) 22:01:51ググった方が早いと思うよ。
検索ワードはナップザック・ナップサック・動的計画法とかで
アプレット使った図解解説ページがあったと思う。
C言語の質問というよりアルゴリズム全般、数学の方が分野としては近いと思う。
0858デフォルトの名無しさん
2008/01/15(火) 22:39:470859デフォルトの名無しさん
2008/01/16(水) 01:21:59>/*これ↑のどこが悪いのか教えてください*/
降水確率が40%でも傘を持たせない根性。
0860デフォルトの名無しさん
2008/01/16(水) 07:03:520861デフォルトの名無しさん
2008/01/16(水) 07:28:06つ[time.h]
0862デフォルトの名無しさん
2008/01/16(水) 07:31:21ツェラーの公式
0863デフォルトの名無しさん
2008/01/16(水) 08:29:24適当な起算日からの日数を計算して7で割ったあまりを得よ。
0864デフォルトの名無しさん
2008/01/16(水) 16:44:51int data[100];
} test;
int func(const test *x);
int main{
test data;
... //省略
for(i=0; i<10000; ++i){
int temp;
temp = ...; //省略。dataの要素を使ったなんかやたら複雑な計算
func(&data);
printf("%d", temp);
}
return 0;
}
ちゃんとしたコンパイラなら、
funcの引数がconstポインタだからループ中でdataの値は変更されない、と解釈して
毎回やたら複雑な計算をするようなことはしないように最適化してくれますよね?
0865デフォルトの名無しさん
2008/01/16(水) 16:48:200866デフォルトの名無しさん
2008/01/16(水) 16:57:04たとえばVCとかgccではどうですか。
0867デフォルトの名無しさん
2008/01/16(水) 17:03:130868デフォルトの名無しさん
2008/01/16(水) 17:18:47アセンブラも読めないし
0869デフォルトの名無しさん
2008/01/16(水) 17:21:570870デフォルトの名無しさん
2008/01/16(水) 17:22:360871デフォルトの名無しさん
2008/01/16(水) 17:42:48そんな保証はどこにも無いから素直にループの外に出しておけ。
自分の為だけなら好きにすりゃいいけど、他人が読むなら言いようの無い不安感
(このコードを書いた奴はまともな人間知性を持っているのか・・・他にも問題ありそうだな・・・)
を煽るだけだからやめておけ。
0872デフォルトの名無しさん
2008/01/16(水) 17:47:400873デフォルトの名無しさん
2008/01/16(水) 17:59:29あるあるw
0874864
2008/01/16(水) 20:11:05それと、「const*って最適化に使われているのかな」という疑問が唐突に湧いてきたので質問したものでして、
別にこのコードを実際に使うわけでもないのでいろいろとご安心ください。
0875デフォルトの名無しさん
2008/01/16(水) 20:16:37Cは最悪裏でサブスレッドがなんかやってるかもしれないし最適化には限界がある。
0876デフォルトの名無しさん
2008/01/16(水) 20:25:22const*自体は最適化のヒントに使われているよ。
ただ、>864のケースでは使ってないと思うけど。
0877デフォルトの名無しさん
2008/01/16(水) 20:43:46その最適化はまともなのか?
0878デフォルトの名無しさん
2008/01/16(水) 20:48:22100を見つけるたびに一つカウントしていくプログラムを組む場合どのような事をすればいいのでしょうか
0879デフォルトの名無しさん
2008/01/16(水) 20:50:14それを一行に複数あっても見つかるように拡張しろ
それを複数行に対応させろ
いじょ
0880デフォルトの名無しさん
2008/01/16(水) 23:57:56txtファイルを読み込む
strstrでNULLがでるまで検索
検索した回数を数えればおk
0881デフォルトの名無しさん
2008/01/17(木) 02:20:28やってみます
0882デフォルトの名無しさん
2008/01/17(木) 04:31:11char buf[4] = {0};
int ch, cnt = 0;
while((ch=fgetc(fp)) {
buf[0] = buf[1];
buf[1] = buf[2];
buf[2] = ch;
if(atoi(buf)==100) cnt++;
}
0883デフォルトの名無しさん
2008/01/17(木) 04:31:540884デフォルトの名無しさん
2008/01/17(木) 06:32:40っ 1000
0885デフォルトの名無しさん
2008/01/17(木) 06:52:16ばーかwww
0886デフォルトの名無しさん
2008/01/17(木) 07:47:18具体的に説明していただけませんか?
0887デフォルトの名無しさん
2008/01/17(木) 08:15:05僕には「100」が含まれているように見えますが・・・?
0888デフォルトの名無しさん
2008/01/17(木) 08:38:060889デフォルトの名無しさん
2008/01/17(木) 14:27:15scanf("%d",&filename);
fopen("filename.txt","w");
キーボードから任意のファイル名でファイル作りたいんだけど
うまくいかないです。お願いします。
0890デフォルトの名無しさん
2008/01/17(木) 14:28:41scanf("%s", filename);
fopen(filename, "w");
0891デフォルトの名無しさん
2008/01/17(木) 14:31:00どうもです
intじゃダメか…
0892デフォルトの名無しさん
2008/01/17(木) 16:44:020893デフォルトの名無しさん
2008/01/17(木) 16:45:39scanf("%d", & fileNo);
char fileName[100];
sprintf(fileName, "file-%d.txt", fileNo);
0894884
2008/01/17(木) 18:43:09エスパー解釈して数値が並んでいるテキストから
特定の数値の個数をカウントするんだと思ったんだが違うのか?
>>878
テキストに含まれる "100" という文字列の数を数えたかったの?
0895デフォルトの名無しさん
2008/01/17(木) 18:46:50>>878だけしか書かれていない以上、>>882は十分な答えになってるだろ。
0896デフォルトの名無しさん
2008/01/17(木) 18:48:420897デフォルトの名無しさん
2008/01/17(木) 22:06:17一文字読み込むごとに割って余りを出してその余りを足していけばいいのかな?
で最後まで読み込み終わったらまた割って余りを出すという感じか?
全く見当違いのことを書いていたらすまん。
0898デフォルトの名無しさん
2008/01/17(木) 22:12:51ん?
ハッシング(Hashing)↓
http://www.u-gakugei.ac.jp/~miyadera/LECTURE/algo2/5-3.html
0899デフォルトの名無しさん
2008/01/17(木) 22:20:25それだ。
文章を読み込ませてハッシュ値を出したいんだが、>>897のような感じでいいのかな?
0900デフォルトの名無しさん
2008/01/17(木) 22:29:460901デフォルトの名無しさん
2008/01/17(木) 22:35:26一応考え方は間違っていないようで安心した。
0902デフォルトの名無しさん
2008/01/17(木) 23:26:26ありがとうございます
とりあえず前年度までの総日数と現在の総日数を出せたたのですが
そこからどうしたらいいのでしょうか?
for文とか使うんですか?
0903デフォルトの名無しさん
2008/01/17(木) 23:42:19ツェラーの公式
0904デフォルトの名無しさん
2008/01/17(木) 23:50:470905デフォルトの名無しさん
2008/01/18(金) 10:43:470906デフォルトの名無しさん
2008/01/18(金) 10:50:230907デフォルトの名無しさん
2008/01/18(金) 11:18:520908デフォルトの名無しさん
2008/01/18(金) 11:38:561582年10月15日が金曜日だから、そこからの日数を7で割れば何曜日かわかるでしょ。
0909デフォルトの名無しさん
2008/01/18(金) 11:46:01Cの標準関数がグレゴリウス暦の定義を利用していないとでも?
0910デフォルトの名無しさん
2008/01/18(金) 11:52:28たとえそうでも、元の質問者の意図通りじゃないだろう
0911デフォルトの名無しさん
2008/01/18(金) 11:53:53グレゴリウス暦の定義を利用しているともしていないともいえない。
0912902
2008/01/18(金) 20:21:50西暦1年1月は月曜日
1年は通常365日、閏年は366日
4で割り切れる年は閏年
400で割り切れる年は閏年
100で割り切れる年は閏年ではない
変数名関数名を作成
goto文は使用しない
関数途中でのreturnプログラム途中のexitはしない
外部関数は使用しない
0913デフォルトの名無しさん
2008/01/18(金) 20:29:48意味不明。
0914デフォルトの名無しさん
2008/01/18(金) 20:29:51丸投げするならこちらへどうぞ
C/C++の宿題を片付けます 101
http://pc11.2ch.net/test/read.cgi/tech/1197132472/
これは現行スレじゃないがな
0915デフォルトの名無しさん
2008/01/19(土) 00:09:54途中暦を正すために何日かすっとばしたのも考慮に入れるのけ?
0916デフォルトの名無しさん
2008/01/19(土) 01:14:29そうなんですか?
問題にはそう書いてあるのですが・・・
>>914
ありがとうございます
そっちでやってみます
0917デフォルトの名無しさん
2008/01/19(土) 17:16:00ttp://www.geekpage.jp/programming/linux-network/multicast-2.php
このページで紹介されている様なUDP受信プログラムから、
受信したパケットの送信元IPアドレス(192…)を調べるにはどうすればよいでしょうか?
0918デフォルトの名無しさん
2008/01/19(土) 17:21:22recvfrom
http://pc11.2ch.net/test/read.cgi/tech/1186418855/
0919デフォルトの名無しさん
2008/01/19(土) 18:11:04おかげさまで解決できました。どうもありがとうございました。
0920デフォルトの名無しさん
2008/01/20(日) 18:03:14#define A 1
#define B 2
int main(){
int i = A + B;
int j = A + B;
int hoge[i][j];
}
で
新規テキスト ドキュメント.c
新規テキスト ドキュメント.c(7) : error C2057: 定数式が必要です。
新規テキスト ドキュメント.c(7) : error C2466: サイズが 0 の配列を割り当てまたは
宣言しようとしました。
新規テキスト ドキュメント.c(7) : error C2057: 定数式が必要です。
新規テキスト ドキュメント.c(7) : error C2466: サイズが 0 の配列を割り当てまたは
宣言しようとしました。
新規テキスト ドキュメント.c(7) : error C2087: 'hoge' : 添字がありません。
新規テキスト ドキュメント.c(7) : error C2133: 'hoge' : サイズが不明です。
です。どうしたらいいでしょうか?
0921デフォルトの名無しさん
2008/01/20(日) 18:11:440922デフォルトの名無しさん
2008/01/20(日) 18:17:43拡張子cppにして、こういう風に書く
const int i = A + B;
const int j = A + B;
int hoge[i][j];
2. プリプロセッサの力を借りる。
#define i (A + B)
#define j (A + B)
本当に実行時まで変数の値がわからない時の話はまた今度。
お前の見ている本やWebサイトを読み進めていれば、その内出てくるだろうし。
0923デフォルトの名無しさん
2008/01/20(日) 18:17:55なぬぅ!なんて使えない糞言語!
ユーザーの入力.etcによって必要なだけ配列を確保するにはどしたらいいん?
ポインタはいいとして(C#にもあるし)、プロトタイプ宣言とか、変数の宣言はブロックの先頭とか、
面倒な決まりが多いぜ…orz
0924デフォルトの名無しさん
2008/01/20(日) 18:19:04#define A 1
#define B 2
#define i (A+B)
#define j (A+B)
int main(){
int hoge[i][j];
}
0925デフォルトの名無しさん
2008/01/20(日) 18:19:11mallocとか使え
0926デフォルトの名無しさん
2008/01/20(日) 18:19:520927デフォルトの名無しさん
2008/01/20(日) 18:20:230928デフォルトの名無しさん
2008/01/20(日) 18:20:45つ[スレタイ]
0929デフォルトの名無しさん
2008/01/20(日) 18:22:06いあ、C#で書いた迷路の生成プログラムを移植してて、
コマンドライン引数で指定した迷路のサイズによって
2次元配列のサイズを変えたいのね。
コンパイラはVC++EEのコマンドライン使ってるのでC++のコードもおkだけど
出来ればCの範囲でやりたいでふ。
0930デフォルトの名無しさん
2008/01/20(日) 18:23:10麻呂?首ググって来る
0931デフォルトの名無しさん
2008/01/20(日) 18:23:12演算子のオーバーロードとかないから、
何かアクセス関数作っとけ。
0932925
2008/01/20(日) 18:23:140933デフォルトの名無しさん
2008/01/20(日) 18:25:02エレガントではないが。
0934デフォルトの名無しさん
2008/01/20(日) 18:27:32後の規格改定で、変数宣言の位置の縛りもなくなったし、
配列の要素数に変数が使えるようにもなった。
が、しかし、需要がなくてVisual C++は対応していない。
0935920
2008/01/20(日) 18:33:38この麻呂でいけそう。超thx!
これってフリー忘れるとプログラム終わってもメモリ使えないままなの?
だとしたら怖い。
C#は案セーフじゃなければ何やってもプログラムが落ちるだけだから何でも試せたのに。
>>934
それって、今のANSI?の規格なら出来るけどVCは遅れてる子だから駄目ってこと?
ならVC2階の窓から捨てる。
0936デフォルトの名無しさん
2008/01/20(日) 18:36:31フリーを忘れないようには
どうするといいかってのを
考えながらくむのも
おもしろいもんだよ
0937デフォルトの名無しさん
2008/01/20(日) 18:37:57プログラムが終了すればおk
C#のunsafeとほぼ一緒だと思うけど
0938920
2008/01/20(日) 19:09:27{書いたら直ぐに
}書いて、その間にコードを書くみたいに
麻呂したら直ぐにフリーして間にコード書いちゃ駄目?
>>937
よかた。ちゃっちゃいプログラムなら大事にはならなさそうね。
0939デフォルトの名無しさん
2008/01/20(日) 19:10:38終了すれば大丈夫だからって
放置する癖は付けない方がいいぞ
0940920
2008/01/20(日) 19:22:43それはだいぢょぶ。
ただ、びくびくしながら書いてたら上達しにくい気がするから心配だっただけ。
もひとつ質問していいかな。
int main(){
int hoge[10][10];
hoge[10][10] = 100;
poke(hoge);
return 0;
}
int poke(int *moge){
return *moge[10][10];
}
って平気?一次元だと出来たんだけど。
試してもいいかなぁ?
0941デフォルトの名無しさん
2008/01/20(日) 20:06:480942デフォルトの名無しさん
2008/01/20(日) 20:17:08大丈夫。VC++みたいなのが世の中の多数派。使う人間、誰もいないし。
たとえ解放し忘れても、プログラムが終了すればWindowsが丸ごと解放する。
あと、マネージドなプログラムで何やってもプログラムが落ちるだけというなら、
アンマネージドなCのプログラムだって、
何やってもプログラムが落っこちるだけで済むと言える。
9xのWindowsでもない限り。
0943デフォルトの名無しさん
2008/01/20(日) 21:26:32そもそもhoge[10][10]の参照はまずくないか
0944デフォルトの名無しさん
2008/01/20(日) 21:29:30えむあろっく かと思ってるんだけど
0945デフォルトの名無しさん
2008/01/20(日) 21:31:57宗教論争みたいになっちゃうけど人間関係に問題が起きない範囲で好きに読めばいいと思う。
俺は普段はまろっくって読んでる
0946デフォルトの名無しさん
2008/01/20(日) 21:40:08ソースは俺
0947デフォルトの名無しさん
2008/01/20(日) 21:40:51プログラマだと口に出して言うことあるのか?
0948デフォルトの名無しさん
2008/01/20(日) 21:43:230949デフォルトの名無しさん
2008/01/20(日) 21:43:260950デフォルトの名無しさん
2008/01/20(日) 21:46:54http://pc11.2ch.net/test/read.cgi/prog/1177251487/
マジレスするとカタカナ表記でGoogle検索して多い方を使っておけばノープロブレム。
0951デフォルトの名無しさん
2008/01/20(日) 21:48:410952デフォルトの名無しさん
2008/01/20(日) 22:45:34平気じゃない。
2次元配列を1次元配列にマップしたときのインデックスを計算汁。
0953デフォルトの名無しさん
2008/01/20(日) 22:50:46配列の最後は
hoge[9][9];
よってオタワ
0954デフォルトの名無しさん
2008/01/20(日) 22:53:56return moge[9][9];
}
こういうのならいいんでしょうか・・?
0955デフォルトの名無しさん
2008/01/20(日) 23:08:57}
って感じにできなかったっけか?
0956デフォルトの名無しさん
2008/01/20(日) 23:10:32それはない
0957920
2008/01/20(日) 23:16:34でけた。THX
でも、こんなの読めないよ…。
hoge[2番目の長さ * 1番目の添え字 + 2番目の添え字]
が
hoge[1番目の添え字][2番目の添え字]
と同じだなんて気付きようがないぬ
もっと可読性が高い書き方はないかにょ…。
0958デフォルトの名無しさん
2008/01/20(日) 23:24:05最低でも int poke(int moge[][N]) の N が必要
0959デフォルトの名無しさん
2008/01/20(日) 23:36:12関数にすればいいじゃん
0960デフォルトの名無しさん
2008/01/20(日) 23:41:59>>954
の方法は?
0961デフォルトの名無しさん
2008/01/20(日) 23:45:252番目の長さが固定になるだろ・・・
0962デフォルトの名無しさん
2008/01/21(月) 00:49:55http://mori.eco.to/
0963デフォルトの名無しさん
2008/01/21(月) 01:21:370964デフォルトの名無しさん
2008/01/21(月) 01:23:42しかもテキストごときに8000円とか誰もひっかからんだろwww
0965デフォルトの名無しさん
2008/01/21(月) 01:40:05極普通じゃねーかwwwww
0966デフォルトの名無しさん
2008/01/21(月) 01:45:218800円あったら専門書買うわーバーカ
0967デフォルトの名無しさん
2008/01/21(月) 02:05:24(1)
struct Type x = {.var = NULL};
(2)
struct Type *x;
x = (struct Type *) malloc(sizeof(struct Type));
x->var = NULL;
(3)
struct Type *x;
x->var = NULL;
とあって、(1), (2) だと問題ないのですが、
(3) だと segmentation fault になってしまいます。
どういう理屈からでしょうか?
また、構造体を 「*変数名」で宣言したときは、最初に値を設定するときに、
必ず malloc をしてからでないといけないのでしょうか?
よろしくお願いします。
0968デフォルトの名無しさん
2008/01/21(月) 02:07:490969デフォルトの名無しさん
2008/01/21(月) 02:08:120970デフォルトの名無しさん
2008/01/21(月) 02:10:05ポインタがなんなのかまったく理解できてない
struct Type *x;
で用意されるのは構造体struct Type がどこにあるかを表す変数だけ
構造体の本体はない
mallocでそれを用意してやってる
0971デフォルトの名無しさん
2008/01/21(月) 02:26:020972デフォルトの名無しさん
2008/01/21(月) 02:33:250973デフォルトの名無しさん
2008/01/21(月) 02:33:430974デフォルトの名無しさん
2008/01/21(月) 10:20:070975デフォルトの名無しさん
2008/01/21(月) 10:20:440976デフォルトの名無しさん
2008/01/21(月) 10:31:16音声を出力するプログラムを作るにはどうすればいいですか?
0977デフォルトの名無しさん
2008/01/21(月) 10:34:520978デフォルトの名無しさん
2008/01/21(月) 10:36:40どうすればどのようなプログラミングを作ればいいですか?
0979デフォルトの名無しさん
2008/01/21(月) 10:40:220980デフォルトの名無しさん
2008/01/21(月) 14:33:40putchar('\a');
0981デフォルトの名無しさん
2008/01/21(月) 14:44:54「プログラミング」は作れません。
0982デフォルトの名無しさん
2008/01/21(月) 14:54:47音声合成とか勉強すれば...
0983デフォルトの名無しさん
2008/01/21(月) 14:56:35それなら、周辺回路によるけどどこかのポートをパタパタ。
0984デフォルトの名無しさん
2008/01/21(月) 19:47:42window.hをインクルードしてBeep関数使えば鳴らせるよ
0985デフォルトの名無しさん
2008/01/23(水) 01:32:38fgetc(fp)とすると、その次のfgetc(fp)では次の1バイトが取得されます。
これを、何度取得しても同じバイトが取得されるようにできないでしょうか?
具体的には、
char c1;
char c2;
FILE *fp;
...ファイルオープン...
c1 = fgetc(fp);
fseek(fp, -1, SEEK_CUR);
c2 = fgetc(fp);
とすると、c1とc2に同じ文字が代入されると思うのですが、fseekを使わなくても、
c1 = fgetc_noFoward(fp);
c2 = fgetc_noFoward(fp);
として、c1とc2に同じ文字が代入されるようにしたいです。
fseekを使うか、
c1 = fgetc(fp);
ungetc(c1, fp);
c2 = fgetc(fp);
とungetcを使うしかないでしょうか??
ファイルの中の位置を変えない文字取得関数ってないのかな。。。
0986デフォルトの名無しさん
2008/01/23(水) 01:38:37c1 = fgetc(fp);
c2 = c1;
0987デフォルトの名無しさん
2008/01/23(水) 01:44:31fseek()やungetc()を入れたって、ソースが1行増えるだけで何の不都合
もないと思うんだが。行が増えるのが嫌だったら関数化すればいいのだし。
あらかじめファイルの中身をメモリに置いておけば、いくらでも読み直
せるよ。
0988デフォルトの名無しさん
2008/01/23(水) 01:48:22意図が読めない。
int fgetc_noFoward(FILE *fp)
{
int i;
i = fgetc(fp);
fseek(fp, -1, SEEK_CUR);
return i;
}
0989985
2008/01/23(水) 02:48:00というのは、まず
---
int result = 0;
while((c = fgetc(fp)) != EOF) {
if (c == 'h') {
result = 1;
break;
}
return result;
---
とすると、ファイルに'h'が含まれるかどうか前向きに1文字づつ判定していけます。しかしここで、
'h'が見付かったあと、逆の方向へ後向きに1文字づつ、別の文字'H'が含まれるかも判定したいのです。
---
int result2 = 0;
fseek(fp, -1, SEEK_CUR); //nakusitai
if (result) {
for (i=0; i<100; i++) { //'h'の前100文字に限り後向きに検索
fseek(fp, -1, SEEK_CUR); //nakusitai
c = fgetc(fp); //1文字分進んでしまう
if (c == 'H') {
result2 = 1;
break;
}
fseek(fp, -1, SEEK_CUR); //nakusitai
}
}
---
単純にファイルに'H'が含まれてるだけでなく、'h'の何文字の前に'H'が含まれているかを判定しようとしています。
とここまで書いてなんですが、
>あらかじめファイルの中身をメモリに置いておけば、いくらでも読み直せる
ですよね。大きめの配列容易して、まずファイル内容読み込んで、処理すれば解決しそう。ありがとう
0990デフォルトの名無しさん
2008/01/23(水) 03:37:09なるほど。
それはストリームに対して行う処理じゃないね。
ファイルを全部読み込みたくないのなら、
例えば、こういう風にも出来る。
#define N 100
char buf[N+1], *p;
---
int result2 = 0;
fseek(fp, -(1+N), SEEK_CUR); //nakusitai
if (result) {
fgets(buf, N, fp);
if (p = strrchr(buf, 'H')) {
// (N - (p - buf)) == 'h'からの文字数
result2 = 1;
break;
}
}
---
0991デフォルトの名無しさん
2008/01/23(水) 13:16:03__1__1__2__3__4__5__6__7__8__9
__2__2__4__6__8_10_12_14_16_18
__3__3__6__9_12_15_18_21_24_27
__4__4__8_12_16_20_24_28_32_36
__5__5_10_15_20_25_30_35_40_45
__6__6_12_18_24_30_36_42_48_54
__7__7_14_21_28_35_42_49_56_63
__8__8_16_24_32_40_48_56_64_72
__9__9_18_27_36_45_54_63_72_81
(_は空白です)
#include<stdio.h>
int main()
{
int i,j;
for(i=1;i<=9;i++){
for(j=0;j<=9;j++){
printf("%3d",i*j);
}
printf("\n");
}
return 0;
}
としたのですが、できませんでした。
どこを直したらいいですか?教えてください。(for文で)
0992デフォルトの名無しさん
2008/01/23(水) 13:22:57そりゃ横着しすぎだろ。
ラベル部分と中身を単純に一緒に出力することは無理だがね。
まぁ、こんなもんかな。
--
#include<stdio.h>
int main()
{
int i,j;
printf(" 0 1 2 3 4 5 6 7 8 9\n");
for(i=1;i<=9;i++){
printf("%3d", i);
for(j=1;j<=9;j++){
printf("%3d",i*j);
}
printf("\n");
}
return 0;
}
--
最初のラベルをループにするのは課題にしておこうw
0993デフォルトの名無しさん
2008/01/23(水) 13:25:34"%3d" じゃなくて " %2d" の方がイイ!
0994デフォルトの名無しさん
2008/01/23(水) 13:28:36#include<stdio.h>
int main()
{
int i,j;
for(i=0;i<=9;i++){
for(j=0;j<=9;j++){
int num;
if (i == 0) {
num = j;
} else if (j == 0) {
num = i;
} else {
num = i * j;
}
printf("%3d", num);
}
printf("\n");
}
return 0;
}
0995994
2008/01/23(水) 13:31:07×二重ループ一つだけ
○ラベルと中身を分けずに
# よく見たら、>992もループ構造は二重ループ一つだけだったのね……_/ ̄|○
0996デフォルトの名無しさん
2008/01/23(水) 14:06:39ありがとうございました。解決できました。
0997デフォルトの名無しさん
2008/01/23(水) 19:08:24じつはC++ 6.0のプロダクトIDを忘れてしまったのですが、どうすればよいでしょうか?
0998デフォルトの名無しさん
2008/01/23(水) 19:10:240999デフォルトの名無しさん
2008/01/23(水) 19:11:54むしろ忘れる前は暗記してたよかよw
1000デフォルトの名無しさん
2008/01/23(水) 19:16:52/.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:ヽ
/.:.:.∧\ヽ.:.:)__、.:.:.'、
/.:.:.:ム__ゝ、\チt‐ij.:.:.:.:.ゝ、
ノ.:.:.:.j,ィ fハ ,`´ゞ-' レ-.:.:.:.辷__
∠ィ'j .:人 `¨ r‐、 ムソ__ニ=-
/ハ.:.f ゙ゝ t-ヲ ,イ.:.:_≧
', `ミ`ーr-y '// `,
ゝミ/7/,ィ'´/ |
,仆、//」/ ヽ j
/`ー'.. `ヽ.| ヽ{
/().. /.. .. /|| 〉 あなたに次スレが訪れますように!
|.. .. i.. .. i´.:.:.:j.| !
|.. .. l.. .. l.:.:.:.:i.:| |
j.. .. i.. .. |.:.:.:.:|/| |
ノ.. .. .. rニロニ〈 | |
,ゝr_ニ'イ ハ 〉::ハ| |
〈/|」 i| ∨i .. ..j:: '| |
// .. |::.. .. |:.. .. |::.:| |
/ f .. .|:: .. . |::.. .. .|::| ム
C言語なら俺に聞け(入門篇) Part 24
http://pc11.2ch.net/test/read.cgi/tech/1201083176/
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。