C言語なら俺に聞け(入門篇) Part 54
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2009/10/06(火) 20:41:54初心者、初級者の方は他の質問スレのほうが良いかもしれません。
教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 130代目
http://pc12.2ch.net/test/read.cgi/tech/1250204272/
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
# サイズが大きい場合は宿題スレのアップローダ等を利用してください
・開発環境や動作環境も晒すと答えが早いかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
前スレ
C言語なら俺に聞け(入門篇) Part 53
http://pc12.2ch.net/test/read.cgi/tech/1253110182/
過去スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
0002デフォルトの名無しさん
2009/10/06(火) 20:52:09変数とデータ型について勉強してるんですが
#include <stdio.h>
#include <float.h>
int main(void)
{
double pai=3.14159265358979;
printf("円周率は%fです\n",pai);
fflush(stdin);
getchar();
return 0;
}
とした場合、表示が3.141593になるのは何故でしょうか?
0003デフォルトの名無しさん
2009/10/06(火) 20:55:40%f は何も指定がなければ小数点以下6桁まで出力するようになっているから
小数点以下14桁まで出力したければ %.14f と書けばいいよ
0004デフォルトの名無しさん
2009/10/06(火) 21:06:040005デフォルトの名無しさん
2009/10/06(火) 21:24:06なるほど
ありがとうございます
それと、もう少し教えて欲しいのですが
float型は有効小数点桁数6桁、double型は有効小数点桁数8桁と本に書いてありました。
>>2の場合
double pai=3.14159265358979;
としているからdouble型だけど%fだから小数点以下6桁までの出力なのでしょうか?
float型とdouble型の違いは扱える実数の範囲が違うっていう認識しかないのですが…
よく解っていなくて質問がおかしいかもしれません、申し訳ないです
0007デフォルトの名無しさん
2009/10/06(火) 21:59:27有効桁数以上に出力することはできるけど
有効桁数以上の意味は無い
あと一般的な有効桁数は double が 15桁、 float が 7桁で
浮動小数点型には有効小数点桁数なんてものは存在しない
頭から15桁目まで(float なら 7桁目まで)が信頼できるだけ
0009デフォルトの名無しさん
2009/10/06(火) 22:14:29↑
何も出力されませn。どこが間違ってるのでしょうか?
0010デフォルトの名無しさん
2009/10/06(火) 22:22:294096*1024*1024 == 0 ???
0011デフォルトの名無しさん
2009/10/06(火) 22:25:484096*1024*1024 がオーバーフローしてるっぽい。
4096LL*1024*1024 にしたら表示された。
0012デフォルトの名無しさん
2009/10/06(火) 22:40:08オーバーフローだろそりゃさすがに。
int型じゃなくてlong longにしてごらん。
0013デフォルトの名無しさん
2009/10/07(水) 12:25:000014デフォルトの名無しさん
2009/10/07(水) 15:46:11pointer がどちらに渡って居るのかが いまいち理解できません
/*次の関数を改良せよ*/
int smaller(char *s, char *t) {
if (strcmp(s, t) < 1)
return 1;
else
return 0;
}
と 為っているのですが お願いします
0015デフォルトの名無しさん
2009/10/07(水) 15:59:06質問の意味が分からない
改良という意味では仮引数に const をつけるくらい
return (strcmp(s, t)<1); とするのはちょっと嫌
0016デフォルトの名無しさん
2009/10/07(水) 16:12:48確かに嫌です…
if (const(strcmp(s, t) < 1))
return 1;
...
と 云う事でしょうか?
0017デフォルトの名無しさん
2009/10/07(水) 16:15:430018デフォルトの名無しさん
2009/10/07(水) 16:21:13調べてみたか?
0019デフォルトの名無しさん
2009/10/07(水) 16:27:47> pointer がどちらに渡って居るのか
ここが理解できたおまえさんはすごいよ。
0020デフォルトの名無しさん
2009/10/07(水) 16:35:260021デフォルトの名無しさん
2009/10/07(水) 16:39:411未満、つまりゼロかマイナスということだ
0022デフォルトの名無しさん
2009/10/07(水) 16:41:05って意味のことを書きたい時まとめて書く方法はありませんか?
0023デフォルトの名無しさん
2009/10/07(水) 16:42:05strcmp(s,t) <= 0
こうするんじゃないの?
0024デフォルトの名無しさん
2009/10/07(水) 16:46:42ありません
>>23
同じだからどっちでもいいよ分かりやすい方を使えば
0025デフォルトの名無しさん
2009/10/07(水) 16:46:42> pointer がどちらに渡って居るのかが いまいち理解できません
分かる人はこれの意味を解説してくれよ
0026デフォルトの名無しさん
2009/10/07(水) 17:44:12もなかなか。
0027デフォルトの名無しさん
2009/10/07(水) 17:48:26でもまぁ、0と比較するほうがコストの低いコードになる可能性もあるし、
そもそも大小を変更するときに間違う恐れもあることだし、1との比較は避けるべきだな。
0028デフォルトの名無しさん
2009/10/07(水) 18:03:19日本人とは思えない日本語だな。
ここはC言語の入門スレではあるが
日本語の入門スレではないぞ?
0029デフォルトの名無しさん
2009/10/07(水) 18:04:40コンパイルできません。
どこが間違っているのでしょうか?
0030デフォルトの名無しさん
2009/10/07(水) 18:06:53jpg とか馬鹿じゃねーの?
エラーメッセージくらい嫁クズ
0032デフォルトの名無しさん
2009/10/07(水) 18:14:09が違っているのではないだろうか
0033デフォルトの名無しさん
2009/10/07(水) 18:15:28codepad
ttp://codepad.org/
ソースを貼るときはここへ!
だがそもそも、お前みたいな頭にバグのある輩は
C言語やるな。
エラーメッセージ嫁!!!!
0034デフォルトの名無しさん
2009/10/07(水) 18:22:37以下の式はなんで真にならないのでしょうか?
(sizeof(short) + 1) > -sizeof(short)
0035デフォルトの名無しさん
2009/10/07(水) 18:23:14unsigned だから
0036デフォルトの名無しさん
2009/10/07(水) 18:32:13× float tax calcTax(int i)
○ float calcTax(int i)
0037デフォルトの名無しさん
2009/10/07(水) 18:33:26たぶん3行目の//コメントと5行目のtaxの所為だな
3行目 s/\/\/\(.*\)/\/*\1 *\//
5行目 5s/tax //
0038デフォルトの名無しさん
2009/10/07(水) 18:38:34あー。なるほど。演算子の優先順位が原因と勘違いしてました
回答ありがとうございます
0039デフォルトの名無しさん
2009/10/07(水) 18:52:37ソフトバンクから出ているので柴田望洋シリーズと林晴彦シリーズっていうのがあるみたいなのですが
どちらがいいのでしょうか?
0040デフォルトの名無しさん
2009/10/07(水) 18:54:13回答ありがとうございます
次回から質問する際はかならずソースコードを貼るようにします
>>33さんのサイトを利用させていただくかもしれません
ちなみにエラーメッセージは
Declaration syntax errorで宣言構文エラーのようでした
それでコンパイルが通らなかった理由は
float tax calcTax(int i)
に余分に「tax」が入っていたせいでした
0041デフォルトの名無しさん
2009/10/07(水) 18:54:590042デフォルトの名無しさん
2009/10/07(水) 19:13:390043デフォルトの名無しさん
2009/10/07(水) 19:14:370044デフォルトの名無しさん
2009/10/07(水) 19:23:490045デフォルトの名無しさん
2009/10/07(水) 19:24:280046デフォルトの名無しさん
2009/10/07(水) 19:24:38自分が見たくないレスが見えないんだろうな
エラーメッセージも見たくないから見ないんだろうな
0048デフォルトの名無しさん
2009/10/07(水) 19:37:250049デフォルトの名無しさん
2009/10/07(水) 19:43:18そして、ここは入門篇と書いてある。
本があるのに、こういうところで聞くということは、
本が悪い、理解できる能力がない、2chが好き…、検索しない
などの理由だろうから、まともな人が来ないのは当然。
0050デフォルトの名無しさん
2009/10/07(水) 20:03:250051デフォルトの名無しさん
2009/10/07(水) 20:03:57以外に失礼ですね…
0052デフォルトの名無しさん
2009/10/07(水) 20:14:190053デフォルトの名無しさん
2009/10/07(水) 20:20:15ひとつだけ plus 思考な物が在りますが? 自分に嘘をつけない type ですかw
0054デフォルトの名無しさん
2009/10/07(水) 20:35:21因みに 私は違いますが…
0055デフォルトの名無しさん
2009/10/07(水) 20:36:180056デフォルトの名無しさん
2009/10/07(水) 21:06:17また お願いします
0057デフォルトの名無しさん
2009/10/08(木) 07:44:060058デフォルトの名無しさん
2009/10/08(木) 09:55:510059デフォルトの名無しさん
2009/10/08(木) 10:10:050060デフォルトの名無しさん
2009/10/08(木) 10:12:55・本を買えないほど貧乏
・プログラミング如きに1円たりとも使いたくない
・実はそれほどやる気がない
0061デフォルトの名無しさん
2009/10/08(木) 10:20:00サーバ構築して遊ぼうと思っているから、しばらくは我慢。
貧乏学生でしゅ^^;
0062デフォルトの名無しさん
2009/10/08(木) 10:22:400063デフォルトの名無しさん
2009/10/08(木) 10:26:05いや普通か。
0064デフォルトの名無しさん
2009/10/08(木) 10:26:43コンパイラの入手方法を知らない、辺り?
ソースコードを書いてコンパイルすれば実行できることは知っている、辺り?
0065デフォルトの名無しさん
2009/10/08(木) 10:29:230066デフォルトの名無しさん
2009/10/08(木) 10:34:150067デフォルトの名無しさん
2009/10/08(木) 10:42:29やっぱループ教えるには先にifとgoto教える方が理解しやすいんじゃねのかな?
0068デフォルトの名無しさん
2009/10/08(木) 10:59:18標準仕様のうち「簡単なもの」を一通り
使えるぐらいまでが入門じゃないかと。
0069デフォルトの名無しさん
2009/10/08(木) 11:00:04どうせgotoは使うなって教えるんだから
最初からif, for, whileでいいだろ。
その後do-whileとgotoを教えて、gotoは極力避けろと教えればいい。
0070デフォルトの名無しさん
2009/10/08(木) 11:35:50どうやったら手に入れることができるでしょうか?
0071デフォルトの名無しさん
2009/10/08(木) 11:37:210072デフォルトの名無しさん
2009/10/08(木) 12:32:21Windowsで実行するにはCygwinを使えばいいんじゃね?
0073デフォルトの名無しさん
2009/10/08(木) 12:38:28Linuxなりのソースから拾ってきてもいいし、Webで検索しても見つかると思う。
寧ろそんなことよりも、何故それが必要だと思ったのかを説明した方がゴールに辿り着けると思うぞ。
0074デフォルトの名無しさん
2009/10/08(木) 17:22:30char c='5';
printf("%x--%x",&c,*(int *)&c);
とすると、結果が
12ff8b--12ffb835
となりました。
アドレスはいいとして、2個目がどうして12ffb835になるのか分かりません
なんかアドレスの8bが逆になったのがくっついてるし・・・
やりたいのは、cの値をint*にキャストして表示したいということです
0075デフォルトの名無しさん
2009/10/08(木) 17:32:18(int *)c こういうこと?
*(int *)&c は
cのポインタを int のポインタとして、指している場所に書かれている int 値
0076デフォルトの名無しさん
2009/10/08(木) 17:34:18・cのポインタ、つまり&cをint *にキャストすることはできなくはないが、そのポイント先が安全と言う保証がないので未定義動作する。
・その結果、2個目の%xで出力された16進数の下位2桁はどうやらたまたま'5'のアスキーコードのようだ。
0077デフォルトの名無しさん
2009/10/08(木) 17:38:5512ffb8はスタックに残ったゴミで意味のあるのは35(='5')だけだ
0078デフォルトの名無しさん
2009/10/08(木) 17:41:05>そのポイント先が安全と言う保証がないので未定義動作する。
キャストしただけなら問題ないが、キャストした瞬間に未定義動作ということだな。
>74の場合は落ちないようだが、環境によってはセグメンテーションフォルトで落ちるだろうし。
0079デフォルトの名無しさん
2009/10/08(木) 17:43:54その後に、そのアドレスを基にして実際の値を取得したいということでした。
>>75-78
未定義動作なんですね
詳しい解説ありがとうございました。
0080デフォルトの名無しさん
2009/10/08(木) 18:10:35アホ
0081デフォルトの名無しさん
2009/10/08(木) 18:40:000082デフォルトの名無しさん
2009/10/08(木) 20:06:40お勧めのエディタってある?
スレ違いなら該当スレ頼む
0083デフォルトの名無しさん
2009/10/08(木) 20:18:08普通にgeditの設定で出来た
0084デフォルトの名無しさん
2009/10/08(木) 20:38:54秀丸エディタ。
初心者ならこれがぴったりだと思う。
0085デフォルトの名無しさん
2009/10/08(木) 20:40:41BorlandならCpadが簡単操作でいいんじゃね?
0086デフォルトの名無しさん
2009/10/08(木) 20:53:19とりあえずどちらもダウンロードしてきてしばらく使ってみる
0087デフォルトの名無しさん
2009/10/08(木) 21:09:16int func(int *pi) {
int size;
...
return size;
}
int main(void) {
int *buf = malloc(16);
func(buf);
return 0;
}
0088デフォルトの名無しさん
2009/10/08(木) 21:13:11普通は無理ですが
コンパイラによっては専用の命令を持っていることもあります
0089デフォルトの名無しさん
2009/10/08(木) 21:20:15int func(int *pi) {
size_t size;
size = *((size_t *)pi-1);
...
%nbsp;return size;
}
int main(void) {
int *buf = malloc(16+sizeof(size_t));
*(size_t *)buf = 16;
buf = (size_t *)buf + 1;
func(buf);
free((size_t *)buf - 1);
}
あくまで局所的にやらないこともなかったりする
構造体使う方が読みやすくなると思うけど
struct {
size_t size;
int *buf;
} foo;
まぁ、どう考えても自分でメモリ管理ライブラリ作って使ったほうがいいと思う、今後のためにも
0090デフォルトの名無しさん
2009/10/08(木) 21:23:34sakuraじゃなくてか
0091デフォルトの名無しさん
2009/10/08(木) 21:23:41秀丸は、金払ってまで使う意義はないだろ。
フリーのやつつかえ。
0092デフォルトの名無しさん
2009/10/08(木) 21:54:03きときとのcpad最強
バグあるけどな
0093デフォルトの名無しさん
2009/10/08(木) 22:24:10kwsk
よく使ってるんだが
0094デフォルトの名無しさん
2009/10/08(木) 23:00:230095デフォルトの名無しさん
2009/10/08(木) 23:03:460096デフォルトの名無しさん
2009/10/08(木) 23:07:560097デフォルトの名無しさん
2009/10/08(木) 23:29:580098デフォルトの名無しさん
2009/10/08(木) 23:31:220099デフォルトの名無しさん
2009/10/09(金) 00:13:57早く寝なさい。明日学校に遅刻するぞ
0100デフォルトの名無しさん
2009/10/09(金) 00:27:170101デフォルトの名無しさん
2009/10/09(金) 03:23:48万能ツールだよな。エクセル。
0102デフォルトの名無しさん
2009/10/09(金) 03:34:08エディタの話がしたいのなら別のところでやってくれ
0103デフォルトの名無しさん
2009/10/09(金) 05:47:11たまにメモリの開放を忘れる程度
特に支障はない
なんてったってうちの会社の標準環境だしなwww
0104デフォルトの名無しさん
2009/10/09(金) 06:10:42説明があるけど最悪何が起こるの?
パソコンがフリーズするくらいなら立ち上げなおせば元に戻るよね
0105デフォルトの名無しさん
2009/10/09(金) 06:21:030106デフォルトの名無しさん
2009/10/09(金) 06:23:07vista以降はOS側で最悪の動作(I/O操作、定義外のディスクリプタテーブルのメモリ操作)はブロックする。
0107デフォルトの名無しさん
2009/10/09(金) 08:42:470108デフォルトの名無しさん
2009/10/09(金) 09:04:36http://blog.halon.org.uk/2006/08/04#editor-learning-curves
0109デフォルトの名無しさん
2009/10/09(金) 09:35:10そんなあなたにxyzzyをお勧めしておきます。
が、エディタの話はエディタスレでどうぞ。
0110デフォルトの名無しさん
2009/10/09(金) 11:42:17何が最悪かなんて人による。
実行権限次第でファイルシステムの消去くらいできるが
せっかく集めたエロ動画が消えたら最悪だろう。
0111デフォルトの名無しさん
2009/10/09(金) 11:46:130112106
2009/10/09(金) 13:03:48エロ画像が消えたりする可能性があるの?だったら確かに非常に危険だな
0114デフォルトの名無しさん
2009/10/09(金) 13:46:27実際に目にしたことはない
もし乗っ取られたら、画像を消すくらいは簡単だろうと思う
0115デフォルトの名無しさん
2009/10/09(金) 14:02:140116デフォルトの名無しさん
2009/10/09(金) 16:14:181回しか表示されません何故でしょうか?
http://codepad.org/ZdKw0YmT
0117デフォルトの名無しさん
2009/10/09(金) 16:17:16ファイルを先頭から終端まで読んでしまっているので、そのままではそれ以上読むものがないという状態。
二回目以降の読み込みに先立って、ファイルの先頭から読めるようにファイルポインタを移動する必要がある。
その目的には、rewind()を使えばいい。
0118デフォルトの名無しさん
2009/10/09(金) 16:19:39すばやい回答ありがとうございます
0119デフォルトの名無しさん
2009/10/09(金) 16:22:38せめて、scanf("%63s", fname)としよう。
・if文中での代入は避けた方が読み易い(但し異論もあり)。
変数の寿命の点からも、file = fopen(); if (file == NULL) {}とした方がいいと思うが。
・エラーメッセージは標準エラー出力を使おう。
・Cのループは0オリジンがお約束。
間違いじゃないけれど、for (cnt = 0; cnt < no; ++cnt) {}とした方が多くの人が見慣れている。
・変数の局在化のためにも、変数宣言を関数の先頭に集中させるのはやめよう。
例えば、int chはforの内側で宣言すれば充分。
0120デフォルトの名無しさん
2009/10/09(金) 16:28:46詳しくありがとうございます。
サイトぐるぐる回るのと本屋立ち読みやってたので知識があいまいなんです
今度ちゃんと本買います
0121デフォルトの名無しさん
2009/10/09(金) 16:44:170122デフォルトの名無しさん
2009/10/09(金) 17:22:31for の内側で宣言するのはやめておいたほうがいいと思うよ
C言語だと
0123デフォルトの名無しさん
2009/10/09(金) 17:24:32なんで?
0124デフォルトの名無しさん
2009/10/09(金) 17:24:460125デフォルトの名無しさん
2009/10/09(金) 17:25:370126デフォルトの名無しさん
2009/10/09(金) 17:32:27実際にはどうなの?
0127デフォルトの名無しさん
2009/10/09(金) 17:35:30何もしない。
0128デフォルトの名無しさん
2009/10/09(金) 17:36:03確保したまま回る
0129デフォルトの名無しさん
2009/10/09(金) 17:41:31C++ならコンストラクタ・デストラクタが動くけど、Cなら何も起こらない。
0130デフォルトの名無しさん
2009/10/09(金) 17:56:47これからは躊躇無くループの中で宣言できる
0131122
2009/10/09(金) 18:06:44C言語ならこの書き方を勧めるなよ
って事なんだが…
C99 が一般的になったのか?
0132デフォルトの名無しさん
2009/10/09(金) 18:11:390133デフォルトの名無しさん
2009/10/09(金) 18:12:150134デフォルトの名無しさん
2009/10/09(金) 18:12:49どこをエスパーしたのか知らないが、そんなことは言ってない、と、思う
0135デフォルトの名無しさん
2009/10/09(金) 18:13:03まさかとは思うが、大昔からCでもこれができることは知らなかったとは言わないよな。
int main(int argc, char ** argv)
{
int i;
for (i = 0; i < argc; ++argc) {
int j = atoi(argv[i]);
printf("%d ", j);
}
return 0;
}
0136122
2009/10/09(金) 18:13:100137デフォルトの名無しさん
2009/10/09(金) 18:14:010138デフォルトの名無しさん
2009/10/09(金) 18:15:59じゃあ標準入出力はどんな関数を使ってるんでしょうか?
0139デフォルトの名無しさん
2009/10/09(金) 18:16:04すみません、入れても、、いいですか?
0140デフォルトの名無しさん
2009/10/09(金) 18:16:240141デフォルトの名無しさん
2009/10/09(金) 18:19:25いいえ、前者なら愛用しています。
入力には大抵fgets()、出力には大抵fprintf()を使っていますが、後者は前述の通りprintf()も使います。
また、バイナリデータを扱うケースではfgetc(), fputc()も使います。
0142デフォルトの名無しさん
2009/10/09(金) 18:21:280143デフォルトの名無しさん
2009/10/09(金) 18:23:32,. '" _,,. -…; ヽ |タ l l.|: : :::::::
(i'"((´ __ 〈 } | | j: :::/:
|__ r=_ニニ`ヽfハ } | | |: /: : :
ヾ|! ┴’ }|トi } | j | !: : :/
|! ,,_ {' } | l |:/ ::::
「´r__ァ ./ 彡ハ、 | !| : : : : :
ヽ ‐' / "'ヽ | |: : /::
ヽ__,.. ' / ヽ. | |/::::_;.
/⌒`  ̄ ` ヽ\_ | |:ー'´: :
/ i ヽ \ | |: : : : : :
0144デフォルトの名無しさん
2009/10/09(金) 18:31:272001年8月25日。2ちゃんが本格的に閉鎖になりかけた日だよ。
転送量が多すぎて、費用が月700万もかかってるって発表されて、「数日中に閉鎖」って予告されてさ、
その日のうちにあっちこっちの板が封鎖されてた日だよ。
あのときのUNIX板の住人、カッコよかったんだぜ。「総力を結集」ってのはまさにああいう状態だよ。
転送量を1/3に削減しないと閉鎖、ってもんだから、新しいプログラム組んでさ、
そしたらほんの何時間かで完成したんだよ。それが聞いてくれよ、目標は1/3だったのに
1/16まで圧縮に成功しやがったんだよ。職人技なんてもんじゃねえよ、神技だよ。
でもよ、そうやって頑張る人がいた一方で、「ボクの肛門も閉鎖されそうです」とか駄スレ立ててたバカも
いたわけだよ。ちょうど、今のお前みたいにな。
だからよ、俺たちは総力を結集して、お前のバカ度を1/16に圧縮しようと思うよ。
ま、圧縮後でもお前のバカ度はこの世に生かしておくことのできないレベルだけどな。
要するに俺らの力を結集してもお前を助けることができないってことだ。
わかったら、まわりに迷惑をかけないようにひっそりと死んでくれよな
0145デフォルトの名無しさん
2009/10/09(金) 18:32:410146デフォルトの名無しさん
2009/10/09(金) 18:37:150147デフォルトの名無しさん
2009/10/09(金) 18:45:560148デフォルトの名無しさん
2009/10/09(金) 18:46:25}
0149 ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄
2009/10/09(金) 18:51:41(⊃⌒*⌒⊂)
/__ノωヽ__)
r-''ニl::::/,ニ二 ーー-- __
肛門がしゃべった!! .,/: :// o l !/ /o l.}: : : : : : :`:ヽ 、
/:,.-ーl { ゙-"ノノl l. ゙ ‐゙ノノ,,,_: : : : : : : : : :ヽ、
ゝ、,,ヽ /;;;;;;;;;;リ゙‐'ー=" _゛ =、: : : : : : : :ヽ
/ _________`゙ `'-- ヾ_____--⌒ `-: : : : : : :
...-''"│ ∧ .ヽ. ________ / ____ ---‐‐‐ーー \: : : :
! / .ヽ ゙,ゝ、 / ________rー''" ̄''ー、 `、: :
.l./ V `'''ー-、__/__r-‐''"゛  ̄ ̄ \ ゙l: :
l .,.. -、、 _ ‐''''''''-、 l !:
0150デフォルトの名無しさん
2009/10/09(金) 18:52:43デフォルトの名無しさんをあぼんすれば解決
あらしは過疎スレでやってくれ
0151デフォルトの名無しさん
2009/10/09(金) 19:27:52int main(){
for(int i=0; i<4;i++){
int i=0;
printf ("%d", i);
i++;
}
printf ("%d\n", i);
return 0;
}
これの出力結果を答えられる?
0152デフォルトの名無しさん
2009/10/09(金) 19:31:390153デフォルトの名無しさん
2009/10/09(金) 19:33:540154デフォルトの名無しさん
2009/10/09(金) 19:34:170155デフォルトの名無しさん
2009/10/09(金) 19:37:38いったいどうやってそれを入力したのかということ
真性キチガイなら勝手に左手動いた・・・とかあるだろうけど
0156デフォルトの名無しさん
2009/10/09(金) 19:47:190157デフォルトの名無しさん
2009/10/09(金) 19:51:580158デフォルトの名無しさん
2009/10/09(金) 19:57:35int main(){
int i;
for(i=0; i<4;i++){
int i=2;
printf ("%d", i);
i++;
}
printf ("%d\n", i);
return 0;
}
こうだな。
0159デフォルトの名無しさん
2009/10/09(金) 20:07:06楽して使えるものは何でも使ったらいい
大昔は「実行ファイルが大きくなる」とか情けない理由もあったりした
0160デフォルトの名無しさん
2009/10/09(金) 20:10:26for(i=0; i<4;i++){
0161デフォルトの名無しさん
2009/10/09(金) 22:01:27っていうけど、gzip圧縮しただけだよな
尾ひれがついてとてもすごいことをやってるように思われてるのはちょっと。
0162デフォルトの名無しさん
2009/10/09(金) 22:03:520163デフォルトの名無しさん
2009/10/09(金) 22:05:390164デフォルトの名無しさん
2009/10/09(金) 22:07:39せめて3文字以上にしてくれよ。cntとかidxとかさ。
0165デフォルトの名無しさん
2009/10/09(金) 22:11:340166デフォルトの名無しさん
2009/10/09(金) 22:11:590167デフォルトの名無しさん
2009/10/09(金) 22:14:520168デフォルトの名無しさん
2009/10/09(金) 22:33:02思いつくまで大変だったのかもね。
mod_gzipをインストールする技術はなにか特別なわけではないし、
導入しているサーバは世にごまんとあった。
当時スレ見てた?それともその後のflashで知った世代か?
0169デフォルトの名無しさん
2009/10/09(金) 22:35:470170デフォルトの名無しさん
2009/10/09(金) 22:45:46見苦しいぞ古参
外野からいつもいつも「そんなこと余裕」ってうっせーんだよ
0171デフォルトの名無しさん
2009/10/09(金) 22:47:040172デフォルトの名無しさん
2009/10/09(金) 22:48:322ちゃんねる(笑)始めるのに年齢とか関係あるの?
0173デフォルトの名無しさん
2009/10/09(金) 22:49:09中にいたから状況を覚えてるわけで。
0174デフォルトの名無しさん
2009/10/09(金) 22:56:530175デフォルトの名無しさん
2009/10/09(金) 22:59:26こんな糞コミュニティの古参気取っても自慢にならないし。
0176デフォルトの名無しさん
2009/10/09(金) 23:07:010177デフォルトの名無しさん
2009/10/09(金) 23:12:02真相を伝えてるだけじゃないの?老いると教えたがるみたいだしなー
俺はそんなのどうでもいいし、2ch使えればそれでいいw
0178デフォルトの名無しさん
2009/10/09(金) 23:13:170179デフォルトの名無しさん
2009/10/10(土) 01:05:2265とか入力しても「×です。」って出るんですけどなぜでしょうか?
#include<stdio.h>
int main(void) {
int a ;
printf("数字を入力してください。 \n");
scanf("%d", &a);
if( 0 <= a <= 59 ){
printf(×です。\n");
}
return 0;
}
0180デフォルトの名無しさん
2009/10/10(土) 01:10:40if( 0 <= a && a <= 59 ){
0181デフォルトの名無しさん
2009/10/10(土) 01:13:210182デフォルトの名無しさん
2009/10/10(土) 01:17:57考えてみたらif(0<=a<=59)は
まず0<=aが評価されて、0<=65だからこの式が真(1)と評価されて
次に1<=59が評価されて真(1)になるから
if文の中のprintf文が実行されるってことか
0183デフォルトの名無しさん
2009/10/10(土) 16:40:33{
char buf[1024];
char *log[1000];
int line, printline;
FILE *fp = fopen("abc.txt", "r");
puts("これから読み込み\n");
for(line = 0; fgets(buf, sizeof buf, fp); line++){
log[line] = malloc(strlen(buf) + 1);
strcpy(log[line], buf);
}
puts("これから表示");
for(printline = 0; printline < line; printline++){
printf("%s", log[printline]);
free(log[printline]);
}
fclose(fp);
return 0;
}
for(line = 0; fgets(buf, sizeof buf, fp); line++) って部分のfgets(buf, sizeof buf, fp)は文字列を取り出してると思うんですが、
forの終わりの条件部分に当たる箇所になぜこれを指定してるんでしょうか?
0184デフォルトの名無しさん
2009/10/10(土) 16:44:230185デフォルトの名無しさん
2009/10/10(土) 16:49:25kwsk
0186デフォルトの名無しさん
2009/10/10(土) 17:03:44while(fgets(buf, sizeof buf, fp)
{
log[line] = malloc(strlen(buf) + 1);
strcpy(log[line], buf);
line++;
}
0187デフォルトの名無しさん
2009/10/10(土) 17:05:38>fgets
>戻り値
>ファイルの終わりかファイルエラーの場合は NULL を返します。
0188デフォルトの名無しさん
2009/10/10(土) 17:59:35ポインタは指し示すもの。値を参照したいときに利用するにとどめるべき。
unsgined char str[] = "123";
unsigned char *ptr;
ptr = str; //ここでptrはstrを指し示している。
*(++ptr) = 'A'; //*を使って値を書き換えようとする時点でポインタではない。
0189デフォルトの名無しさん
2009/10/10(土) 18:18:140190デフォルトの名無しさん
2009/10/10(土) 18:53:04英数字とアンダーバーで無いとだめだって。
コンパイルは通るのですが何がだめなのかわかりません。
0191デフォルトの名無しさん
2009/10/10(土) 19:08:14コンパイルできるなら別にダメじゃないよ。
・講師が間違っている
・講師の頭が硬い
・これまでのCプログラマが築いた習慣を尊重している(でもダメだと頭ごなしに怒るのは間違い)
のいずれかだろう。
0192デフォルトの名無しさん
2009/10/10(土) 19:08:28C99からはユニバーサルアルファや処理系定義な文字が識別子に使えるので、
C89縛りがないなら使ってかまわない。
0193デフォルトの名無しさん
2009/10/10(土) 19:22:260194デフォルトの名無しさん
2009/10/10(土) 19:33:43これのほうが理解しやすいね。サンクス
>>187
把握した。
0195デフォルトの名無しさん
2009/10/10(土) 19:37:16なんにせよその場で質問しなきゃいかんよ
0196デフォルトの名無しさん
2009/10/10(土) 19:52:19開発環境はVCです。
お願いします。
0197デフォルトの名無しさん
2009/10/10(土) 19:54:02頭の悪いやつに何を訊いても意味がない。
自分で調べた方がマシ
0198デフォルトの名無しさん
2009/10/10(土) 19:55:31コピペしる
0199デフォルトの名無しさん
2009/10/10(土) 19:56:12「¥」 = 「\」
Windowsの標準的なフォントではバックスラッシュと円記号が同じキャラクタコードに割り当てられていて
なおかつ、円記号しか表示されないようになっています。
エスケープシーケンス等を使用したければ、「¥」を使いましょう。
0200デフォルトの名無しさん
2009/10/10(土) 19:58:12ばか
0201デフォルトの名無しさん
2009/10/10(土) 20:12:44trigraph を使えばよい。
??/ ←このように3文字書けばバックスラッシュとして扱われる。
0202デフォルトの名無しさん
2009/10/10(土) 21:17:070203デフォルトの名無しさん
2009/10/10(土) 21:21:22本来はトライグラフを使わなければならないはずなんだよな。
0204デフォルトの名無しさん
2009/10/10(土) 21:28:51マイクロソフトの意思は理解できない。
0205デフォルトの名無しさん
2009/10/10(土) 21:32:190206デフォルトの名無しさん
2009/10/10(土) 21:35:57LinuxとかMacだとその仕様がもうとっくになくなってるんでしょう?
っていうか最初からなかったかもしれない
0207デフォルトの名無しさん
2009/10/10(土) 21:39:320208デフォルトの名無しさん
2009/10/10(土) 21:41:340209デフォルトの名無しさん
2009/10/10(土) 21:51:500210デフォルトの名無しさん
2009/10/10(土) 21:54:570211デフォルトの名無しさん
2009/10/10(土) 22:00:180212デフォルトの名無しさん
2009/10/10(土) 22:03:070213デフォルトの名無しさん
2009/10/10(土) 22:23:250214デフォルトの名無しさん
2009/10/10(土) 22:24:180215デフォルトの名無しさん
2009/10/11(日) 00:24:50まずグローバル変数を構造体に纏めて関数に構造体のポインタを渡して処理するよう改造したんですが
速度が約半分になってしまいました。
まだマルチスレッド化はしておらずシングルスレッドでの比較です。
何か改善する方法があれば教えてください。
0216デフォルトの名無しさん
2009/10/11(日) 00:47:410217デフォルトの名無しさん
2009/10/11(日) 00:49:110218デフォルトの名無しさん
2009/10/11(日) 09:56:42おそらく、どこかが期待通りのコードになってないんだろう。
ポインタ渡しのつもりが、全部コピーになってるとか
0219デフォルトの名無しさん
2009/10/11(日) 10:08:14逆に言えばCは言語仕様的に決して速度を最優先したものではない
こと示す例
0220デフォルトの名無しさん
2009/10/11(日) 10:20:21GCとBlockをC1Xに提案
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1370.pdf
米Apple、「Grand Central Dispatch」をオープンソースに
http://sourceforge.jp/magazine/09/09/14/0627259
マルチコア時代の新機軸! Snow LeopardのGCD
http://tech.ascii.jp/elem/000/000/455/455786/
0221デフォルトの名無しさん
2009/10/11(日) 11:33:25構造体にした途端にベース+ディスプレースメント計算がいちいち必要になったんだろ
それと別な話、マルチスレッド化ってことはコンテキストスイッチも入るから更に遅くなるはず
速度を気にするならシングルスレッドのまま二足のわらじを履いたほうがいい
0222デフォルトの名無しさん
2009/10/11(日) 11:45:340223デフォルトの名無しさん
2009/10/11(日) 11:57:15理論だけで語るなら、コンパイラの最適化とかCPUのパイプライン処理とかあるから、
アドレスの計算量が2倍になったくらいで、全体の処理速度が半分になるとは信じがたい。
0224デフォルトの名無しさん
2009/10/11(日) 12:01:480225デフォルトの名無しさん
2009/10/11(日) 12:18:28>>215 は「ポインタを渡して」と言っているわけで引数に関しては無から有への変更だ
関数がインラインでない場合は分岐がパイプラインに影響しかねんし、仮にリンクレジスタ使ってもネストすれば結局メモリアクセスになる
最適化による自動 register 指定が逆効果(同時使用レジスタ数とメモリアクセスのジレンマ)ということも考えられる
0226デフォルトの名無しさん
2009/10/11(日) 12:41:180227デフォルトの名無しさん
2009/10/11(日) 12:54:08一番肝心なことは言ってないし
0228デフォルトの名無しさん
2009/10/11(日) 12:55:01どうしてでしょうか。
簡単で手軽、誰にでも学習の機会があることでしょうね。
CやHSPだとこうはいきません。
CやHSPだとAPIのノウハウが必要になりますし、それは大きな障壁となります。
0229デフォルトの名無しさん
2009/10/11(日) 14:58:21何の話?
0230デフォルトの名無しさん
2009/10/11(日) 16:31:33void **list = malloc(sizeof(void) * 2);
list[0] = malloc(sizeof(char) * 10);
list[1] = malloc(sizeof(int) * 10);
とした場合、list[0]はcharポインタを指し、list[1]はintポインタを指してるという認識であってますでしょうか。
list[0]に10文字以上のcharを代入してもエラーが起きないのがよくわかりません。
0231デフォルトの名無しさん
2009/10/11(日) 16:31:430232デフォルトの名無しさん
2009/10/11(日) 16:39:45所詮メモリ上のバイト列だからどうとでも考えられる
>list[0]に10文字以上のcharを代入してもエラーが起きない
メモリチェックツール使えばエラーを捕えられるよ
あとsizeof(void)じゃなくてsizeof(void *)じゃないかな
0233デフォルトの名無しさん
2009/10/11(日) 16:43:06> list[0]はcharポインタを指し、list[1]はintポインタを指してるという認識であってますでしょうか。
あってません。
> list[0]に10文字以上のcharを代入してもエラーが起きないのがよくわかりません。
10文字以上のcharを代入したいプログラマがいるかもしれないから、エラーにはしない主義。
0234デフォルトの名無しさん
2009/10/11(日) 16:45:530235デフォルトの名無しさん
2009/10/11(日) 17:00:38>list[0]に10文字以上のcharを代入してもエラーが起きないのがよくわかりません。
Cの基本的考えは自己責任。
小さな政府&自己責任。
市場原理主義派のプログラミング言語です。
0236デフォルトの名無しさん
2009/10/11(日) 17:14:150237デフォルトの名無しさん
2009/10/11(日) 17:18:11オナニーは自分の部屋でやってください
0238デフォルトの名無しさん
2009/10/11(日) 17:19:030239デフォルトの名無しさん
2009/10/11(日) 17:38:510240デフォルトの名無しさん
2009/10/11(日) 21:08:200241デフォルトの名無しさん
2009/10/11(日) 22:49:12voidはサイズなどなかったような…
0242デフォルトの名無しさん
2009/10/11(日) 22:58:03シムラ〜後ろ後ろ
> list[1] = malloc(sizeof(int) * 10);
本当にヤバいのは、むしろこっち
0243デフォルトの名無しさん
2009/10/11(日) 23:15:44逆(void→int等)はキャストで可能だし普通に使うけど。
0244デフォルトの名無しさん
2009/10/11(日) 23:33:080245デフォルトの名無しさん
2009/10/11(日) 23:47:26list[x] がホーキング放射みたいに特徴がなくなるんだよ
0246デフォルトの名無しさん
2009/10/12(月) 00:18:450247デフォルトの名無しさん
2009/10/12(月) 00:19:270248デフォルトの名無しさん
2009/10/12(月) 00:25:220249230
2009/10/12(月) 00:52:19何故このようなことをしたいのかとうと、現在MySQL APIのラッパを作成しており、MySQLの仕様によると
select int_col1, int_col2, str_col3 from master;
のようなSQL結果を取得する場合、
int foo = int_col1;
int bar = int_col2;
char *baz = str_col3;
のようにテーブルの型に合ったCの型へ代入するべきとあるのです。
SQLはどのような型が渡されるか実行時でないと判別できないため、共用体ではなくmallocによる動的確保を考えました。
mallocの方法でもエラーは出ないのですが、より良い対応はありますでしょうか。
0250デフォルトの名無しさん
2009/10/12(月) 01:38:26普通SQLを実行する側がどのような型で取得すべきか知っているはず
なので取得したい型で準備するだけ
どんなラッパーを作ろうとしてるんだろ?
0251デフォルトの名無しさん
2009/10/12(月) 01:39:12発行するSQL文の種類だけ、ラッパーを個別に用意するのはダメなん?
>select int_col1, int_col2, str_col3 from master;
なら、MySQLにおけるテーブルの型が既知な訳で、SQL文も規定されている訳だから
代入すべき変数の型もプログラム作成時に決まるはずでない?
>SQLはどのような型が渡されるか実行時でないと判別できないため
というのがイマイチ理解不能。動的に変化する検索結果のレコード数を気にして
mallocするならともかく。変数の型を抽象化する必要があるってことは、つまり
動的なSQL文にも対応できる、汎用的なラッパーを作りたいってこと?
0252デフォルトの名無しさん
2009/10/12(月) 02:58:28説明不足ですいません、汎用的なフレームワークを作ろうとしてます。
そのため、どのようなクエリ(型)が送られてくるかは実行時まで不明です。
フレームワーク内で適切な型にオートマッピングさせておきたいのです。
0253デフォルトの名無しさん
2009/10/12(月) 03:06:33そこは C の問題じゃないだろ。
0254デフォルトの名無しさん
2009/10/12(月) 10:38:17int 型の a という変数があって
a はプログラムの色んな所(数百箇所)で参照されています。
この変数を「Debug時には使う、
Release時には使わない(変数自体無い)」という風にしたいんです。
一応、#ifdefで良さそうなんですが
結構、あちこちで参照されているので#ifdefで囲むと
手間がかかり、ソースも読みづらくなりそうです。
こんな時、あまりソースの変更をせずに変数を無効にすることって出来ますか?
(例えば、変数の宣言の所だけを変えるだけで
変数の参照の部分も無効(コンパイルしない)にするなど・・・)
#ifdefで一つ一つ書いてくしかないんでしょうか?
0255デフォルトの名無しさん
2009/10/12(月) 10:54:050256デフォルトの名無しさん
2009/10/12(月) 10:57:02int a;
もし仮にこれをRelease時だけ消えるようにしたとしたら
このaを使ってる部分がエラーになるんだが
0257デフォルトの名無しさん
2009/10/12(月) 10:59:43どういう状況か今ひとつ把握できないのだが
aを評価している式や式文も同じように(「Debug時には使う、Release時には使わない」)しないといけないと思うのですが
式や式文自体をマクロで囲っておいてコンパイルフラグ一発とかやったりはする
#ifdef NDEBUG
# define foo(expression) /* foo bar comment */
#else
# define foo(expression) expression
#endif /* NDEBUG */
int bar(int x) { x += 128; foo(fprintf(stderr, "x : %d\n", x)); return x; }
みたいなのか
0258デフォルトの名無しさん
2009/10/12(月) 11:49:43assert
0259デフォルトの名無しさん
2009/10/12(月) 12:05:45どういうフレームワークを作ろうとしているのかいまいちわからんが、
とりあえず全部文字列にして取得しとけばいいんじゃないの?
0260デフォルトの名無しさん
2009/10/12(月) 12:39:17p = &p;
*p = 3;
printf("%p = %d\n",p,*p);
ポインタ変数にもアドレスがあるのでそこを利用してpに&pを代入することで通常のローカル変数のように扱うことができる。
動かしてないのでわからんが、うちの脳内ではそれがうまくいくと信じてる。
0261デフォルトの名無しさん
2009/10/12(月) 12:44:06それはない
0262デフォルトの名無しさん
2009/10/12(月) 13:10:490263デフォルトの名無しさん
2009/10/12(月) 13:17:030264デフォルトの名無しさん
2009/10/12(月) 13:18:090265デフォルトの名無しさん
2009/10/12(月) 13:22:210266デフォルトの名無しさん
2009/10/12(月) 13:40:430267デフォルトの名無しさん
2009/10/12(月) 13:41:232ちゃんねるの有志の皆様へ
ただいまVIPで例のサイバーテロ集団の本拠地VANKに攻撃をしかける作戦を立てています
ただいま人数不足、不利な戦況となっております。
現在技術者部門の方も募集しています。よろしくお願いします。
下記日時に間に合うように準備し、作戦に参加してくれたら幸いです
作戦決行日時:10月12日 18時00分
現行スレ→【http://yutori7.2ch.net/test/read.cgi/news4vip/1255316576/】
まとめwiki(要編集)http://www20.atwiki.jp/vipvsvank/pages/1.html
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
0268デフォルトの名無しさん
2009/10/12(月) 13:46:490269デフォルトの名無しさん
2009/10/12(月) 13:49:50"必要なときだけ有効にしたい"と考えればいい。
0270デフォルトの名無しさん
2009/10/12(月) 14:48:37*p = 3 によって pがpのアドレスから3に書き換わるため、
*pでそこを参照しようとするのは危険。
0271デフォルトの名無しさん
2009/10/12(月) 14:59:140272デフォルトの名無しさん
2009/10/12(月) 15:02:150273デフォルトの名無しさん
2009/10/12(月) 15:16:10一般的なセマンティクスはそうだろうけど、>260ではint *にint **を代入している
暗黙の型変換でint **はint *に変換されて問題なく代入できる
しかし、実際にはint **であるので、int *を間接参照してもそれはintではなくint *である
正確に言えば、シンタックス上はintであるが、>260のセマンティクス上はint *であるのだ
よって、>270は正しいことを言っていると僕は考える
あくまでセマンティクス上の話だからね、実行した場合は未定義動作だな
0274デフォルトの名無しさん
2009/10/12(月) 16:14:01CPUによるから、一般的にはあんまりしないほうが良いだろな
たとえ出来た場合でも、そのソースをその環境から出さないとい
うのならともかくよそで使われることを想定するのなら
本質的に処理系依存であることを明示する為に
キャスト演算子の直書きは避け
例えば
int **pint2ppint_80x86(int *)
int **pint2ppint_PowerPC_G5(int *)
とか使うべきだろうな(マクロでも良いが)
C++でクラスの場合は、直系クラス間でのポインタの相互運用性
は保証されている(できなければC++コンパイラと名乗る資格は
無い)からルールに沿って行うべきだが
0275デフォルトの名無しさん
2009/10/12(月) 18:48:40コマンドライン引数は一般的にどのように処理しているのでしょうか?
0276デフォルトの名無しさん
2009/10/12(月) 18:52:190277デフォルトの名無しさん
2009/10/12(月) 18:58:26今までそのようにしていたんですけど、getopt() を使う方が見た目も
すっきりしてわかりやすいので使ってみようと思いました。
BCCになかったので、何か代替のものがあるのかと思って質問しました。
0278デフォルトの名無しさん
2009/10/12(月) 19:12:150279デフォルトの名無しさん
2009/10/12(月) 19:51:220280デフォルトの名無しさん
2009/10/12(月) 20:26:400281デフォルトの名無しさん
2009/10/12(月) 21:52:13charが8bitでintは12bitといった処理系も世の中にはあるらしいんですが、この場合1byteのbit数っていうのは何bitなんでしょうか?
そもそもこのintは2byte?それとも1.5byte?
0282デフォルトの名無しさん
2009/10/12(月) 21:57:39いや、16ビットというふうに決まっているわけではないが、
少なくとも -32767 〜 +32767 の値を表現できなければならないので、
16ビット以上なければおかしい
0283デフォルトの名無しさん
2009/10/12(月) 22:33:53{
char buf[LINE_BUF];
char buf2[LINE_BUF];
char *log[10];
char *log2[10];
FILE *fp = fopen("a.txt", "r");
FILE *fp2 = fopen("b.txt", "r");
while(fgets(buf, sizeof buf, fp))
{
//printf("bufだよ%s",buf);
//printf("%s", log[0]);
while(fgets(buf2, sizeof buf2, fp2))
{
//printf("buf2だよ%s",buf2);
if(strncmp(buf,buf2,3)==0)
{
break;
}
else if(strncmp(buf,buf2,3)>0)
{
printf("%s",buf);
break;
}
}
}
fclose(fp);
return 0;
}
0284デフォルトの名無しさん
2009/10/12(月) 22:40:21{
char buf[LINE_BUF];
char buf2[LINE_BUF];
char *log[10];
char *log2[10];
FILE *fp = fopen("a.txt", "r");
FILE *fp2 = fopen("b.txt", "r");
while(fgets(buf, sizeof buf, fp))//NULLが返ってくるまで・・・
{
while(fgets(buf2, sizeof buf2, fp2))//NULLが返ってくるまで・・・
{
if(strncmp(buf,buf2,3)==0)//先頭から3文字が一致したらbreak
{
break;
}
else if(strncmp(buf,buf2,3)>0)//a.txtの行の値のほうが大きくなった=つまりb.txtにはもう存在しないため抜き出す
{
printf("%s",buf);
break;
}
}
}
fclose(fp);
return 0;
}
ファイルは降順にソートされています。
a.txtにあってb.txtない行を抜き出すプログラムのつもりですが、当然正常に処理されていません。
2重目のwhile文で、抜けるたびに行を先頭から見るいくにはどうしたらよいでしょうか?(今のプログラムだと抜けるたびに次の行へ移動してしまいます)
0285284
2009/10/12(月) 22:41:420286デフォルトの名無しさん
2009/10/12(月) 22:47:39Tabは削除されます
スペースはデータ上は残りますがブラウザの仕様で表示されません
長いソースを詠みやすい状態で貼り付ける時は別の方法を使うしかありません
0287デフォルトの名無しさん
2009/10/12(月) 23:00:40ここ使えば問題ないさ
0288デフォルトの名無しさん
2009/10/12(月) 23:15:31そうでしたか。
1つ目のwhileの{の終わりがfcloseの上です。
2つ目のwhileの中にほとんどの処理が入っています。
見にくいと思いますが解読お願いします。。
0289デフォルトの名無しさん
2009/10/12(月) 23:31:42#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LINE_BUF 1024
int main(void)
{
char buf[LINE_BUF];
char buf2[LINE_BUF]="";
FILE *fp = fopen("a.txt", "r");
FILE *fp2 = fopen("b.txt", "r");
if(fp==NULL || fp2==NULL) exit(1);
while(fgets(buf, sizeof buf, fp))
{
if(feof(fp2) || strncmp(buf, buf2, 3)<0)
{
printf("%s",buf);
}
else
{
while(fgets(buf2, sizeof buf2, fp2) && strncmp(buf, buf2, 3)>=0)
;
}
}
fclose(fp);
fclose(fp2);
return 0;
}
0291デフォルトの名無しさん
2009/10/12(月) 23:41:46ちょっと面白かったw
専ブラでポップアップ表示しな
0292288
2009/10/12(月) 23:47:37細かい部分も修正ありがとうございます。
実行してみたのですが、a.txtの先頭行以外がすべて表示されるプログラムとなっています。。。
0293デフォルトの名無しさん
2009/10/12(月) 23:47:42エラー処理も満足に実装できない糞APIなのに、どうして頑張っちゃうの?
ドカタ根性ってやつ?
0294デフォルトの名無しさん
2009/10/12(月) 23:58:17#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LINE_BUF 1024
int main(void)
{
char buf[LINE_BUF];
char buf2[LINE_BUF];
FILE *fp = fopen("a.txt", "r");
FILE *fp2 = fopen("b.txt", "r");
if(fp==NULL || fp2==NULL) exit(1);
fgets(buf2, sizeof buf2, fp2); // 追加
while(fgets(buf, sizeof buf, fp))
{
if(feof(fp2) || strncmp(buf, buf2, 3)>0) // 不等号の向きを変えた
{
printf("%s",buf);
}
else
{
while(fgets(buf2, sizeof buf2, fp2) && strncmp(buf, buf2, 3)<=0) // 不等号の向きを変えた
;
}
}
fclose(fp);
fclose(fp2);
return 0;
}
0295デフォルトの名無しさん
2009/10/13(火) 00:00:19完璧です!神!
0296デフォルトの名無しさん
2009/10/13(火) 01:35:070297デフォルトの名無しさん
2009/10/13(火) 02:22:590298デフォルトの名無しさん
2009/10/13(火) 02:36:360299デフォルトの名無しさん
2009/10/13(火) 02:50:09最低でも2桁だろう
0300デフォルトの名無しさん
2009/10/13(火) 03:00:520301デフォルトの名無しさん
2009/10/13(火) 03:06:28雑談は雑談スレでお願いします
0302デフォルトの名無しさん
2009/10/13(火) 03:22:17今インデントを決める大事な話をしてるんだから、雑談なんかで邪魔するんじゃないぞ。
0303デフォルトの名無しさん
2009/10/13(火) 03:30:26今は1920もあるんだから8タブに戻すべき。
0304デフォルトの名無しさん
2009/10/13(火) 03:39:38ソースだけでなくプロパティウィンドウやデバッグ出力など色々なペインも並べなくちゃならないし
5-10-15…が適当
0305デフォルトの名無しさん
2009/10/13(火) 03:52:44それだけ行っとく。
0306デフォルトの名無しさん
2009/10/13(火) 08:38:230307デフォルトの名無しさん
2009/10/13(火) 14:41:34インデントに使うキャラクタをいろいろ混在させないことだけが正義だろw
0308デフォルトの名無しさん
2009/10/13(火) 14:52:37それでもインデントが整ってればまだいいんだけど(エディタのマクロでハードタブに一括置換すればいいから)、
たまに半角スペースが1個足りなかったり多かったりする行とかあるのな
0309デフォルトの名無しさん
2009/10/13(火) 15:06:100310デフォルトの名無しさん
2009/10/13(火) 15:08:230311デフォルトの名無しさん
2009/10/13(火) 16:11:57ネットからコピペするとそうなりやすい。。
俺はそういうの気になるから一つ一つ既存のコードにあわせて修正してるけどな。
0312デフォルトの名無しさん
2009/10/13(火) 16:14:51そのマクロ公開してください><
0313デフォルトの名無しさん
2009/10/13(火) 18:16:44自分で作ったわけじゃない
どっかで公開されてたのを拾っただけ
0314デフォルトの名無しさん
2009/10/13(火) 18:32:21エディタが何かも判らずクレクレ言うような奴には
つ彡テイッ! [map T 1G!Gunexpand -a -t 4^V^M]
0315デフォルトの名無しさん
2009/10/13(火) 18:39:01今はxyzzy上でワンキーで自分好みに整形するだけだな。読むときは。
0316デフォルトの名無しさん
2009/10/13(火) 18:45:470317デフォルトの名無しさん
2009/10/13(火) 18:52:42・{ ごとに、n++する。
・} ごとに、n--する。
っていう整形ツールでも作ればいいじゃない。
0318デフォルトの名無しさん
2009/10/13(火) 18:55:450319デフォルトの名無しさん
2009/10/13(火) 19:14:470320デフォルトの名無しさん
2009/10/13(火) 19:30:08少なくする方法を知りませんか?
0321デフォルトの名無しさん
2009/10/13(火) 19:32:30tabつかえ
0322デフォルトの名無しさん
2009/10/13(火) 19:38:21printf("{");
まぁ、gg=Gとかですませる。
>>321
いや、そこはなんかちが、、、
tabでキーワード補完しろという意味じゃないよね?
0323デフォルトの名無しさん
2009/10/13(火) 19:39:07自分がC初心者の頃は、学習を兼ねて例え同じようなものがフリーであっても作ってみたりしてた。
0324デフォルトの名無しさん
2009/10/13(火) 19:45:39作るよ。
問題解決のためにふつーにプログラミングできるようになって一人前。
0325デフォルトの名無しさん
2009/10/13(火) 19:48:350326デフォルトの名無しさん
2009/10/13(火) 19:55:48偶然だけど、俺はShift-TABにdabbrev-expandを割り当ててる。
実際には、範囲選択中は別動作になるように、
http://wiki.livedoor.jp/kogo77/d/xyzzy%A4%CE%C0%DF%C4%EA
にしてるけど。
IDEの方が、意味を考えながら補完してくれるという意味でずっと便利なんだけど
同じキーを繰り返すだけで選択できて、かつ他のキーを使わずに確定して
そのまま先の入力に進めるのがなかなか。
0327デフォルトの名無しさん
2009/10/14(水) 06:28:52配列の数は9個で,降順,昇順どちらでも構いません.
中身は,float f_hairetu[9] = {145.20, 55.32, 33.20, 55.55, 348.99, 12.01, 1.29, 88.29, 0.98} などのデータが入っています.
0328デフォルトの名無しさん
2009/10/14(水) 07:52:050329デフォルトの名無しさん
2009/10/14(水) 08:14:38define、グローバル変数、関数名
などなどの情報を抜き出して一覧化してくれるフリーソフトがありましたら教えてください。
0330デフォルトの名無しさん
2009/10/14(水) 08:34:120331327
2009/10/14(水) 09:18:10ありがとうございます。qsort関数は、検索してint型のソートなら良さげなサンプルが見つかったのですが、float型のものは見つからず仕様も良く分からなくて困っています。
0332デフォルトの名無しさん
2009/10/14(水) 09:57:31float f1 = *(float *)p1, f2 = *(float *)p2;
if (f1 == f2)
return 0;
return f1 > f2 ? -1:1;
}
int main() {
float data[] = { ... };
qsort(data, sizeof(data)/sizeof(data[0]), sizeof(data[0]), compare);
...
}
0333デフォルトの名無しさん
2009/10/14(水) 10:01:230334デフォルトの名無しさん
2009/10/14(水) 10:04:100335デフォルトの名無しさん
2009/10/14(水) 10:17:480336デフォルトの名無しさん
2009/10/14(水) 10:31:070337デフォルトの名無しさん
2009/10/14(水) 10:36:07C99では ○
C99においては ◎
0338デフォルトの名無しさん
2009/10/14(水) 10:45:482項を引き算してたりしてw
0339デフォルトの名無しさん
2009/10/14(水) 11:05:31それは意味が変わっているだろ。
「C89ではNaNを正しく扱えないが、C99において*なら*できる」
の省略としての「C99なら」なのだから「なら」を取ってしまってはいけない。
0340デフォルトの名無しさん
2009/10/14(水) 11:52:04素直にC89ではできないと述べれば良い
0341デフォルトの名無しさん
2009/10/14(水) 12:02:42C90わすれてますよ
0342デフォルトの名無しさん
2009/10/14(水) 12:11:15int float_compare(const void *a, const void *b){
const long *p, *q;
p=a;
q=b;
if(*p<*q) return -1;
if(*p>*q) return 1;
return 0;
}
0343デフォルトの名無しさん
2009/10/14(水) 12:15:550344デフォルトの名無しさん
2009/10/14(水) 12:30:58IEEE754 だと、上位から 符号 指数部 仮数部 の並びだけど… うまくいくのかな?
0345デフォルトの名無しさん
2009/10/14(水) 12:35:08Sleep(600000);でいいの?
0346デフォルトの名無しさん
2009/10/14(水) 12:44:10それだと10分+αになる
αの長さは不定
0347デフォルトの名無しさん
2009/10/14(水) 13:44:10駄目に決まってるだろ
0348デフォルトの名無しさん
2009/10/14(水) 13:48:02処理系依存の何らかの順番でソートされるであろう
0349デフォルトの名無しさん
2009/10/14(水) 13:53:590350デフォルトの名無しさん
2009/10/14(水) 14:47:41数値としての大小関係に一致するかはともかく、
大小関係を定義するcompare関数としての動作に矛盾はないかと?
0351デフォルトの名無しさん
2009/10/14(水) 14:57:51compare(p1,p2) が 正の値を戻すとき
compare(p2,p1) が負の値を戻さないのなら そうだろうね
0352デフォルトの名無しさん
2009/10/14(水) 19:46:18#define TEST2 2
#define TEST3 3
こんなことをして
プログラムの中で、TEST3 を使ってみたのですが
期待通りTEST3は3に置き換えられていました。
ふと、TESTは1に置き換えられるから、TEST3は13になったりしないのかと
思ったのですが、なぜ大丈夫だったのでしょうか?
0353デフォルトの名無しさん
2009/10/14(水) 19:47:57識別子単位だから
0354デフォルトの名無しさん
2009/10/14(水) 19:52:540355デフォルトの名無しさん
2009/10/14(水) 20:12:08でも、ただ一緒にしようとしたら、.libファイルが無駄に多くなって使いづらくなっちゃって…
この多くの.libファイルを一つの.libファイルにまとめたいのだが、何か方法はないかな?
開発環境はVisual Studio 2008 (Visual C++)で、出来れば嬉しい。
前作ったプロジェクトは、ライブラリが完成した後にHDDの整理で消してしまってるから、もうないんだ。
0356デフォルトの名無しさん
2009/10/14(水) 21:46:361パスだから
0357デフォルトの名無しさん
2009/10/14(水) 23:32:48教科書どおりに書いたらエラー出やがった。
マジ糞だろ俺の頭
ちなみに作りたいものがあってかなりすっ飛ばしたため
自分でも意味がわかっておりません。
誰か解説してください
0358デフォルトの名無しさん
2009/10/14(水) 23:38:01教科書のタイトルと、今使ってる処理系の名前かけよ
0359デフォルトの名無しさん
2009/10/14(水) 23:42:57どんなエラーが出たのかも言わずに解説しろとな?
codepadのエラーからエスパーすると「conio.hが無い」ってエラーが出てるじゃんとしか言いようがありません。
0360357
2009/10/14(水) 23:46:09教科書
「すぐわかるC/C++」塚越一雄
エラー
「error C3861: 'get_charset': 識別子が見つかりませんでした」
ちなみに環境はvisualc++2008exedition
0361デフォルトの名無しさん
2009/10/14(水) 23:48:120362デフォルトの名無しさん
2009/10/14(水) 23:50:11地道に勉強します
0363デフォルトの名無しさん
2009/10/14(水) 23:53:140364デフォルトの名無しさん
2009/10/15(木) 00:21:28答えない奴は説教もするな
0365デフォルトの名無しさん
2009/10/15(木) 00:24:133-->6-->9-->12-->15-->18-->21-->24-->27-->30-->33-->
って感じのプログラムを書かないけないんだが誰か教えてくれ。
for?とかなんかそういうのを使ったりしてるんだが全くできねえ。
33ってのは入力した数で、その入力した数までの三の倍数が表示されないといけないらしい・・・
0366デフォルトの名無しさん
2009/10/15(木) 00:25:26そんな事は無いよ、表示されなくていいよ。
0367デフォルトの名無しさん
2009/10/15(木) 00:32:410368デフォルトの名無しさん
2009/10/15(木) 00:45:403から始めて、33以下である間、3ずつインクリメント
0369デフォルトの名無しさん
2009/10/15(木) 01:09:42大変だな。
0370デフォルトの名無しさん
2009/10/15(木) 01:10:490371デフォルトの名無しさん
2009/10/15(木) 01:11:13a = a/3;
for(b=1;b<=a;b++){
printf("%d-->",b*3);
}
0372デフォルトの名無しさん
2009/10/15(木) 01:24:49まさか答えてくれる人がいるとは・・・
本当にありがとうございます!!!
0373デフォルトの名無しさん
2009/10/15(木) 01:37:52scanf("%d", &n);
for(i=3; i<=n; i+=3) printf("%d-->", i);
0374デフォルトの名無しさん
2009/10/15(木) 01:57:020375デフォルトの名無しさん
2009/10/15(木) 01:59:57man setbuf
0376デフォルトの名無しさん
2009/10/15(木) 03:13:49vが抜けてる?
0377デフォルトの名無しさん
2009/10/15(木) 07:13:230378デフォルトの名無しさん
2009/10/15(木) 08:13:420379デフォルトの名無しさん
2009/10/15(木) 10:01:40あってるだろ
0380デフォルトの名無しさん
2009/10/15(木) 13:37:140381デフォルトの名無しさん
2009/10/15(木) 19:27:54特に無いんですが、もっとCに詳しくなりたくて・・・
0382デフォルトの名無しさん
2009/10/15(木) 19:35:20オラ入りでも買っとけ
0383デフォルトの名無しさん
2009/10/15(木) 23:01:53実際に何かソフトを作ってみれば自然と詳しくなる
何か便利なツールが欲しくなったとき、誰かが作ったフリーウェアを探すんじゃなくて自分で作ることをまず考える
0384デフォルトの名無しさん
2009/10/15(木) 23:18:140385デフォルトの名無しさん
2009/10/15(木) 23:31:290386デフォルトの名無しさん
2009/10/15(木) 23:38:37書いてあったんで。まだレベル的に意味がよく分からないんですけど
0387デフォルトの名無しさん
2009/10/15(木) 23:44:200388デフォルトの名無しさん
2009/10/15(木) 23:45:430389デフォルトの名無しさん
2009/10/15(木) 23:46:04まだ組み込みはやる気ないんでちゃんと読んではいないです
0390デフォルトの名無しさん
2009/10/15(木) 23:48:07個人的にはC言語で飯が炊ければと・・・
0391デフォルトの名無しさん
2009/10/16(金) 00:03:44昔はハード的に別クロック入れてたけど。
0392デフォルトの名無しさん
2009/10/16(金) 00:33:000393デフォルトの名無しさん
2009/10/16(金) 01:43:090394デフォルトの名無しさん
2009/10/16(金) 01:53:320395デフォルトの名無しさん
2009/10/16(金) 07:13:35炊飯ジャーのプログラムはCだっったりするんじゃないの
0396デフォルトの名無しさん
2009/10/16(金) 08:27:03現状自分でプログラムできないよねってこと。
外出先から携帯でもつかって、自宅の飯の支度ができたら楽だと思うんだ。
0397デフォルトの名無しさん
2009/10/16(金) 08:37:53ちょっと古いタイプの炊飯器なら個人でも制御できると思うよ
高校の時にポケコンで制御してるやつがいた
0398デフォルトの名無しさん
2009/10/16(金) 09:10:210399デフォルトの名無しさん
2009/10/16(金) 09:38:21#include <stdio.h>
#include <math.h>
main(){
double a,b;
scanf("%lf",&a);
b=cos(a);
printf("b=%lf",b);
}
正確に計算してもらえません
どこがいけないのでしょうか?
0400デフォルトの名無しさん
2009/10/16(金) 09:49:13単位が何なのかわかってないだろ
0401デフォルトの名無しさん
2009/10/16(金) 10:41:45取り敢えず、0を入れたら1が出力されるのは確認した?
0402デフォルトの名無しさん
2009/10/16(金) 12:49:080403デフォルトの名無しさん
2009/10/16(金) 13:27:300404デフォルトの名無しさん
2009/10/16(金) 13:35:48Cだとそれができないというのは変な話だな
0405デフォルトの名無しさん
2009/10/16(金) 13:46:09例のジョークRFCを実装したコーヒーポットとかそんな感じだろ
0406デフォルトの名無しさん
2009/10/16(金) 13:51:24RFC ttp://www.studyinghttp.net/cgi-bin/rfc.cgi?2324
実装 ttp://alpha.mixi.co.jp/blog/?p=386
0407デフォルトの名無しさん
2009/10/16(金) 13:56:430408デフォルトの名無しさん
2009/10/16(金) 14:17:42腕に自信のあるプログラマは、以下のコンピュータ大富豪大会に参加しましょう。
ひろゆき杯コンピュータ大富豪大会
http://uecda.nishino-lab.jp/2009/
○What's UECda?
大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひとつでしょう。
このゲームは、1960年頃に日本で生まれたと言われており、海外では、ほとんどプレイされていないようです。
本大会は、その日本固有の人気トランプ・ゲームである大貧民を、人が直接プレイするのではなく、
プレイするコンピュータ・プログラムを作成して持ち寄り、対戦させる大会です。
主催
電気通信大学
0409デフォルトの名無しさん
2009/10/16(金) 14:37:38中国でも有名なゲームだ
0410デフォルトの名無しさん
2009/10/16(金) 16:27:540411デフォルトの名無しさん
2009/10/16(金) 16:57:48したよ
πいれても1になっちゃったけどね
ほかにもπ/3なんかも1になる
0412デフォルトの名無しさん
2009/10/16(金) 17:03:19なんでπだとだめだったんだろう
0413デフォルトの名無しさん
2009/10/16(金) 17:05:220414デフォルトの名無しさん
2009/10/16(金) 17:30:33んで、たまたまaの初期値が0だったから1になったんだな。
当然、「π/3」を入れても同じ結果なわけだ。
0415デフォルトの名無しさん
2009/10/16(金) 18:28:320416デフォルトの名無しさん
2009/10/16(金) 18:29:260417デフォルトの名無しさん
2009/10/16(金) 18:35:22お前はなにを言ってるんだ
0418デフォルトの名無しさん
2009/10/16(金) 18:40:260419デフォルトの名無しさん
2009/10/16(金) 19:46:51クソワロタ
0420デフォルトの名無しさん
2009/10/16(金) 20:42:20このとき
i=i+1;やi++;や++i ;
の意味は分かっていますが、
i = i++;
は未定義の動作になるのですね。
i = ++i;
はどうでしょうか?
これも未定義の動作になりますか?
0421デフォルトの名無しさん
2009/10/16(金) 20:54:130422デフォルトの名無しさん
2009/10/17(土) 00:03:50表示するにはどうやれば良いのでしょうか。
下記例ではコンパイルが通りません。
long a = 10;
void *p = &a;
printf("%f", *p);
0423デフォルトの名無しさん
2009/10/17(土) 00:05:29voidポインタに格納したlong値を表示するにはどうやれば良いのでしょうか。
次の実装ではエラーが起きてしまいます。
long a = 3.14;
void *p = &a;
printf("%f", *p);
0424デフォルトの名無しさん
2009/10/17(土) 00:11:46printf("%ld", *((long*)p));
0425デフォルトの名無しさん
2009/10/17(土) 00:20:25重くてやってらんね。
もう寝る...
0426デフォルトの名無しさん
2009/10/17(土) 01:00:540427デフォルトの名無しさん
2009/10/17(土) 01:02:45>>425
韓国から攻撃
0428327
2009/10/17(土) 01:04:39いつもこのスレにはお世話になってます.m(_ _)m
0429デフォルトの名無しさん
2009/10/17(土) 01:07:180430デフォルトの名無しさん
2009/10/17(土) 01:08:34でたらめ言うなゴミ
0431デフォルトの名無しさん
2009/10/17(土) 01:22:06ありがとうございました!
0432デフォルトの名無しさん
2009/10/17(土) 02:19:280433デフォルトの名無しさん
2009/10/17(土) 03:23:070434デフォルトの名無しさん
2009/10/17(土) 03:34:240435デフォルトの名無しさん
2009/10/17(土) 05:58:020436デフォルトの名無しさん
2009/10/17(土) 08:44:030437デフォルトの名無しさん
2009/10/17(土) 08:47:360438デフォルトの名無しさん
2009/10/17(土) 09:14:04http://root.cern.ch/drupal/content/cint
0439デフォルトの名無しさん
2009/10/17(土) 12:20:59x = (x+0x4000) >> 15;
このコードの意味を教えてください
0440デフォルトの名無しさん
2009/10/17(土) 12:27:49if(x+0x4000>=0) x=0;
else x=-1;
0441デフォルトの名無しさん
2009/10/17(土) 12:42:070442デフォルトの名無しさん
2009/10/17(土) 12:44:390443デフォルトの名無しさん
2009/10/17(土) 12:49:100444デフォルトの名無しさん
2009/10/17(土) 12:50:38上位1ビットが整数部、下位15ビットが小数部の固定少数で、
四捨五入してんじゃね?
0445デフォルトの名無しさん
2009/10/17(土) 13:14:09ポインタでメンバーにアクセスできんぞ、いいのかこれ
0446デフォルトの名無しさん
2009/10/17(土) 13:18:320447デフォルトの名無しさん
2009/10/17(土) 13:18:41なんか無理やりなことをしないとアクセスできないだろ?
それにここ、Cのスレだし。
0448デフォルトの名無しさん
2009/10/17(土) 13:27:480449447
2009/10/17(土) 13:32:07メンバ変数のナマのハンドルやら外にだすなってのは、オブジェクト指向のお作法本によく書いてあるな。
0450デフォルトの名無しさん
2009/10/17(土) 14:00:00int main(void)
{
short x;
short y;
for(x=-32768;x<=32767;x++)
{
y=(x+0x4000)>>15;
printf("x=%d y=%d\n",x,y);
}
return 0;
}
0451デフォルトの名無しさん
2009/10/17(土) 14:03:37値を2倍、4倍,8倍としたいんですが
0452デフォルトの名無しさん
2009/10/17(土) 14:26:32double pi =
#include "pi.dat"
;
とすればpiには円周率が入りますが、一度ファイルに出力をせずにそのままほかのプログラムの出力結果をincludeするといったことはできないでしょうか?
0453デフォルトの名無しさん
2009/10/17(土) 14:27:560454デフォルトの名無しさん
2009/10/17(土) 14:34:55doubleに入れるくらいの桁数なら、ソースに直書きでいいんじゃね?
0455デフォルトの名無しさん
2009/10/17(土) 14:36:220457デフォルトの名無しさん
2009/10/17(土) 14:38:440458デフォルトの名無しさん
2009/10/17(土) 14:41:34sedとか使って、置換すれば
0459お願い!
2009/10/17(土) 14:44:02このスクリプトをC言語で書き直してください
0460デフォルトの名無しさん
2009/10/17(土) 15:01:06そのプロジェクトフォルダ全部をアップお願いします。
0461デフォルトの名無しさん
2009/10/17(土) 15:08:270462デフォルトの名無しさん
2009/10/17(土) 15:10:140463デフォルトの名無しさん
2009/10/17(土) 15:19:59昔のIOCCCのエントリにこんなのがあった
http://www0.us.ioccc.org/years.html#1988_spinellis
同様に、ネームドパイプをうまく使えばできるんじゃないかね
0464デフォルトの名無しさん
2009/10/17(土) 16:20:10とかしたら
0465デフォルトの名無しさん
2009/10/17(土) 16:28:090466デフォルトの名無しさん
2009/10/17(土) 17:29:57これはどういったポインタなんでしょうか?;
0467デフォルトの名無しさん
2009/10/17(土) 17:31:54*2, *4, *8でおk。
0468デフォルトの名無しさん
2009/10/17(土) 18:23:44const float *hoge;
*hoge = 1.0; //エラー
hoge = NULL; //OK
float const *hoge;
同上
float * const hoge;
*hoge = 1.0; //OK
hoge = NULL; //エラー
0469デフォルトの名無しさん
2009/10/17(土) 18:32:38ポインタがさす実体は変えれない。
さすところは変えれます
const float *hoge;
*hoge = 1.0; //エラー
hoge = NULL; //OK
?
float const *hoge;
同上
?
float * const hoge;
*hoge = 1.0; //OK
hoge = NULL; //エラー
よくわかりません。 *がどこに関連するのかが見えません
0470デフォルトの名無しさん
2009/10/17(土) 18:39:5316ビット長の値(unsigned short)を4ビットずつ分割して、その分布を調べて
ソートする、というアルゴリズムらしいのですが、ちょっとわからない点があります。
2^4 = 16 ですから、分布を数えるために使う配列は int count[16] と宣言しました。
16ビット長の値を4ビットずつ分割して(分割された値を A とします)、その分布を調べるわけですが、
教科書にあるコードは
count[A & 0x0f]++;
となっています。
ここで、A & 0x0f するのはどうしてでしょうか?
A は4ビット長なわけですから、大きさ16の配列 count に収まるはずです。
なぜ、わざわざ 0x0f との論理積を求めるのか謎です。
よろしくお願いします。
0471デフォルトの名無しさん
2009/10/17(土) 18:41:34float other = -1.0;
const float *hoge1 = &other;
float const *hoge2 = &other;
float * const hoge3 = &other;
const float * const hoge4 = &other;
のように直してそれぞれコンパイルしてみろ。
0472デフォルトの名無しさん
2009/10/17(土) 18:41:36float型のconst変数を指すポインタ型のconst変数
float a; // float型の変数
const float b; // float型のconst変数
const float *c; // float型のconst変数を指すポインタ型の変数
const float *const d; // float型のconst変数を指すポインタ型のconst変数
0473デフォルトの名無しさん
2009/10/17(土) 18:43:49unsignedで4bitに収まる保証があるなら論理積とらなくてもいいよ
0474デフォルトの名無しさん
2009/10/17(土) 18:49:37それだけじゃ分からん。Aの時点ではまだ4bitに分割しきれてないとか。
0475デフォルトの名無しさん
2009/10/17(土) 18:50:39あ、すみません。。
ソース読み直してみたら、僕が勘違いしていますた。
忘れてください。
0476デフォルトの名無しさん
2009/10/17(土) 21:37:570477デフォルトの名無しさん
2009/10/17(土) 21:39:11それを聞くような人にとってはメリットはありません
0478デフォルトの名無しさん
2009/10/18(日) 03:40:332で割れる数、5で割れる数、2と5で割れる数を1000個目まで出力したいのですがうまくカウントできません
for ( k = 1 ,count =1 ; count <= 1000 ; k++, count=count+1) {
if( k%5==0 && k%2==0){
printf("%dは5,2で割り切れます。%d回目 \n" , k,count) ;
}else if(k%2==0){
printf("%dは2で割り切れます。 %d回目 \n" , k ,count) ;
}else if(k%5==0){
printf("%dは5で割り切れます。 %d回目 \n" , k,count ) ;
} }
こんな感じで書いたのですがどこが悪いんでしょうか?
0479デフォルトの名無しさん
2009/10/18(日) 03:45:050480デフォルトの名無しさん
2009/10/18(日) 04:14:04if( k%5==0 && k%2==0){
printf("%dは5,2で割り切れます。%d回目 \n" , k,count++) ;
}else if(k%2==0){
printf("%dは2で割り切れます。 %d回目 \n" , k ,count++) ;
}else if(k%5==0){
printf("%dは5で割り切れます。 %d回目 \n" , k,count++) ;
} }
よくわからんが、こういうこと?
0481デフォルトの名無しさん
2009/10/18(日) 12:18:09これはこうも書けるな
if( k%10==0 ){
0482デフォルトの名無しさん
2009/10/18(日) 12:26:23数学厨おつ
0483482
2009/10/18(日) 12:27:37さーせん w
0484デフォルトの名無しさん
2009/10/18(日) 12:32:03そこんとこ詳しく教えてくれないかな
0485デフォルトの名無しさん
2009/10/18(日) 12:33:56a='d'
b='h'
略
fprintf(file,"abc%c efg%c",a,b);
とすると出力が
abcd
efgh
といった具合に自動で開業されてしまいます。
させな方法はありますか?
abcd efgh
と出力させたい
0486デフォルトの名無しさん
2009/10/18(日) 12:34:43ありがとうございます
望んでいたような結果が出力されました
ちなみに丁度1000個目だけを出力することってできますか?
if(count==1000)のときだと違う結果が出力されてしまいます。
0487デフォルトの名無しさん
2009/10/18(日) 12:44:20改行されてるのはどうやって確認したの?
実際に入ってる改行コードは何
0488デフォルトの名無しさん
2009/10/18(日) 12:48:45windows、VC++でコンパイルしてできた.exeを実行しました。
改行コード \n,\rとかですか?
0489デフォルトの名無しさん
2009/10/18(日) 12:58:280490デフォルトの名無しさん
2009/10/18(日) 13:02:290491toya
2009/10/18(日) 13:12:59http://ja.wikibooks.org/wiki/C%E8%A8%80%E8%AA%9E
0492デフォルトの名無しさん
2009/10/18(日) 13:13:290493デフォルトの名無しさん
2009/10/18(日) 13:14:560494デフォルトの名無しさん
2009/10/18(日) 13:29:25いやいや、実行してできたファイルをダンプしたりしてみてよ
デバッガは使えないのかな?
0495デフォルトの名無しさん
2009/10/18(日) 13:32:34その例みたいに全角スペースなのか?
0496デフォルトの名無しさん
2009/10/18(日) 13:41:22for(k=1,cnt=1; ; k++) if(k%2==0 || k%5==0) if(cnt++ == 1000) break;
printf("%d", k);
0497デフォルトの名無しさん
2009/10/18(日) 13:47:32別のプロセスで出力ファイルが開かれてたりして、実際には書き込まれてないんじゃないかな。
0498デフォルトの名無しさん
2009/10/18(日) 13:56:09そのプログラムちょっとミスって
fork(k=1,cnt=1; ; k++) if(k%2==0 || k%5==0) if(cnt++ == 1000) break;
printf("%d", k);
ってやったら大変なことになっちゃったんだけど。
絶対落ちないって有名なLinuxが二度と起動しなくなった。
0499デフォルトの名無しさん
2009/10/18(日) 13:58:580500デフォルトの名無しさん
2009/10/18(日) 13:59:53ゾンビプロセスが増えただけで、カーネルは落ちてないだろ。
死ねよマルエツマカ。
0501デフォルトの名無しさん
2009/10/18(日) 14:01:280502デフォルトの名無しさん
2009/10/18(日) 14:01:28はいはい、面白い面白い。
これで満足?
0503デフォルトの名無しさん
2009/10/18(日) 14:14:13間違っている部分は、直してあげた方がいいのか。
>498
俺様fork()ならたぶんコンパイルできると思うけど、一般的なfork()ではコンパイルできないと思われる。
0504デフォルトの名無しさん
2009/10/18(日) 14:26:380505485
2009/10/18(日) 14:38:59http://oshiete1.goo.ne.jp/qa1538277.html
ぐぐったけどたぶんこういうことだとオモワレ。
それにしても自動改行ってなんだ?・・・
0506485
2009/10/18(日) 14:42:58http://oshiete1.goo.ne.jp/qa1538277.html
ググったけどたぶんこういうことだと思われ。
それにしても自動改行ってよくわからん
0507デフォルトの名無しさん
2009/10/18(日) 14:54:14勝手に改行なんてしねえよ。
何かミスってるだけだろ。
0508デフォルトの名無しさん
2009/10/18(日) 15:13:54どうやって改行してることを確認したかってのはまさにそのことが知りたかったのだけど。
使ってるエディタやコントロールが、自動で折り返したんじゃないかと。
だからファイルに出力したらダンプやバイナリエディタで改行コードが入ってるのか調べてみなさいよ、と。
0509デフォルトの名無しさん
2009/10/18(日) 17:59:04QUESTION1; ←ヘッダーにあるdefineで問題呼び出し
fgets (buf, sizeof (buf), stdin);
sscanf (buf, "%d", &ans);
if (1 <= ans && ans <= 3 ){
if (ans == 2){
printf("正解\n");
point++;
}else{
printf("はずれ\n");
}
}else{
printf("1〜3の数字おして。もっかい。\n");
goto Q1;
}
Q2:
ans = 0;
QUESTION2;
以下ループ
3択クイズ形式学習プログラムを作ったのですが、fgets→sscanfのところで数字を入力してEnterを押すと、
次の問題のif文のelseが1度実行される(1〜3を押せエラー→Gotoで問題が2回表示される)のですが、
なぜそうなるのかわからず対処できません。
単純にエンターを1回押してるのに入力を2回(複数回)受け付けてるだけなんでしょうか・・?
もし、そうならどのように対処すればいいのでしょうか。
0510デフォルトの名無しさん
2009/10/18(日) 18:14:28「問題」ってのは question じゃなくて problem な。
0511デフォルトの名無しさん
2009/10/18(日) 18:17:07?
3択クイズの問題 = question
0512デフォルトの名無しさん
2009/10/18(日) 18:28:280513デフォルトの名無しさん
2009/10/18(日) 20:10:08このとき、
name
の要素数を取得するにはどうすれば良いでしょうか?
0514513
2009/10/18(日) 20:12:38ちょっと撤回します。
失礼しました。
0515デフォルトの名無しさん
2009/10/18(日) 20:23:19for (cnt = 0; cnt < no; ++cnt) {}の方が見慣れてるって本当?
入門書ってだいたい
for(cnt = 0; cnt < no; cnt++){}ってかいてあるけど
0516デフォルトの名無しさん
2009/10/18(日) 20:32:56「見慣れてる」ってのは0からカウントするってところだろ。
0517デフォルトの名無しさん
2009/10/18(日) 20:47:42その世代に言わせると整数は i だろ
0518デフォルトの名無しさん
2009/10/18(日) 20:54:280519デフォルトの名無しさん
2009/10/18(日) 21:06:16C++の流儀だな。
cnt++より++cntの方が、オブジェクトを生成しない分高速。
0520デフォルトの名無しさん
2009/10/18(日) 21:36:59できました
ありがとうございました
0521デフォルトの名無しさん
2009/10/18(日) 21:37:46省略可能なオプションは[]とか、必須オプションは<>とか。
0522デフォルトの名無しさん
2009/10/18(日) 21:48:530523デフォルトの名無しさん
2009/10/18(日) 23:24:16if(moji[0] == 115)
のような形でいいんでしょうか?
0524デフォルトの名無しさん
2009/10/18(日) 23:28:04ただし char は符号付きの場合があるので 128 以上の値の扱いに気をつけて
0525デフォルトの名無しさん
2009/10/19(月) 02:08:01空かどうかわかるだけでもいいです。
0526デフォルトの名無しさん
2009/10/19(月) 02:19:08環境依存しない方法は無い
0527デフォルトの名無しさん
2009/10/19(月) 02:19:320528デフォルトの名無しさん
2009/10/19(月) 02:25:11つーか、これを使う機会って無いよな。
0529デフォルトの名無しさん
2009/10/19(月) 02:27:10質問が曖昧で難しいな。
0530デフォルトの名無しさん
2009/10/19(月) 02:29:100531デフォルトの名無しさん
2009/10/19(月) 02:37:59普通に getchar() で読めば良いだろ。
0532デフォルトの名無しさん
2009/10/19(月) 03:21:480533デフォルトの名無しさん
2009/10/19(月) 03:33:50どこが違ってる?
for(b = 2 ; b<=a/2 ; b=b+1){
if(a%b == 0){
printf("%dは素数ではありません。" ,a);
break;
} else {
printf("%dは素数です。" ,a);
break;
}
}
0534デフォルトの名無しさん
2009/10/19(月) 03:45:080535デフォルトの名無しさん
2009/10/19(月) 03:50:450536デフォルトの名無しさん
2009/10/19(月) 03:53:190537デフォルトの名無しさん
2009/10/19(月) 04:16:55ってaが2や3の時はね
0538デフォルトの名無しさん
2009/10/19(月) 04:43:110539デフォルトの名無しさん
2009/10/19(月) 06:47:26偽なら右判定はしないのか?
0540デフォルトの名無しさん
2009/10/19(月) 06:56:31&&は左が偽なら右の判定を行わない。
0541デフォルトの名無しさん
2009/10/19(月) 07:24:300542525
2009/10/19(月) 07:49:18{
int i;
char c;
for(i=0;i<n;i++){
c=getchar();
if(c=='\n'){
break;
}
buf[i]=c;
}
/*入力バッファを空読みする*/
if(i==n){
while(getchar()!='\n');
}
/*文字数が一文字以外は最後に'\n'を加える*/
if(i!=1){
buf[i]=NULL;
}
}
525です。
上の関数を呼び出した後、入力バッファが空読みされたかどうかをmainで確認
する方法を教えてください。
0543デフォルトの名無しさん
2009/10/19(月) 08:31:14ひどいコードだ
0544デフォルトの名無しさん
2009/10/19(月) 09:04:39空読みする方法は無いと思え。
初心者なら尚更
0545デフォルトの名無しさん
2009/10/19(月) 17:00:380546デフォルトの名無しさん
2009/10/19(月) 17:04:12再帰を使わないで処理する方法はないと思うのですか?
0547デフォルトの名無しさん
2009/10/19(月) 17:15:05EOFで確認するとか?
0548デフォルトの名無しさん
2009/10/19(月) 17:31:130549デフォルトの名無しさん
2009/10/19(月) 17:35:27まだ勉強をはじめたばかりなのでわかりません。
0550デフォルトの名無しさん
2009/10/19(月) 17:41:03{
func();
}
↑みたいなのが再帰です
0551デフォルトの名無しさん
2009/10/19(月) 18:00:310552デフォルトの名無しさん
2009/10/19(月) 18:02:56EOFは読もうとしないと意味がない。
従って、入力が空かどうかは「読み出そうとしたときは空だったかどうか」わかるというだけ。
0553デフォルトの名無しさん
2009/10/19(月) 20:05:400554デフォルトの名無しさん
2009/10/19(月) 20:06:130555デフォルトの名無しさん
2009/10/19(月) 20:32:04え?
見ようとしなければ生きてるか死んでるか分からないが、どっちかだと言っている?
0556デフォルトの名無しさん
2009/10/19(月) 21:30:110557デフォルトの名無しさん
2009/10/19(月) 21:33:230558デフォルトの名無しさん
2009/10/19(月) 21:37:54確率的だと言うのはマクロスケールでは現実的ないと思うよ
0559デフォルトの名無しさん
2009/10/19(月) 21:55:52改行まで空読みしてるだけだろ?
なんでEOFが関係あるんだ。
上のほうの「空読みする方法はない」とか、なんか空読みが
別のものと勘違いされる。
0560デフォルトの名無しさん
2009/10/19(月) 22:10:250561デフォルトの名無しさん
2009/10/19(月) 22:15:03心拍計が壊れている可能性がある
心拍計が正常かどうかを確かめる装置を用意してもそれが壊れているかもしれない
以下無限ループ
0562デフォルトの名無しさん
2009/10/19(月) 22:25:160563デフォルトの名無しさん
2009/10/19(月) 22:29:49サーモグラフィーで観測した瞬間に猫の生死状態が確定するというお話。
0564デフォルトの名無しさん
2009/10/19(月) 23:25:350565デフォルトの名無しさん
2009/10/19(月) 23:35:500566デフォルトの名無しさん
2009/10/19(月) 23:39:090567デフォルトの名無しさん
2009/10/19(月) 23:42:03×ぼけども
○ぼけ
×物理板
○50代板
0568デフォルトの名無しさん
2009/10/20(火) 00:30:250569デフォルトの名無しさん
2009/10/20(火) 00:37:050570デフォルトの名無しさん
2009/10/20(火) 00:47:180571デフォルトの名無しさん
2009/10/20(火) 01:49:45お前こそ質問者の意図を分かってるか?
要するに、これを訊いてるわけ
http://www.nurs.or.jp/~asada/FAQ/UNIX/section4.2.html
0572デフォルトの名無しさん
2009/10/20(火) 02:00:05> 実際に文字を読み込まずに読む文字があるかどうか確かめ
られたかどうかを訊いてるんじゃないの
0573デフォルトの名無しさん
2009/10/20(火) 03:35:23と
#if defined(DEBUG) || defined(_DEBUG)
の違いってわかります?要は|と||なんですが。。。
0574デフォルトの名無しさん
2009/10/20(火) 04:16:52○ Apple ][
0575デフォルトの名無しさん
2009/10/20(火) 04:22:40http://koreawatcher.at.infoseek.co.jp/janexeno.htm
・正式版として最初のリリース。
・Jane終了時の挙動のみ091015試作品から変更された。
───────────────────────
予告どおり、正式版をリリースしました。×ボタンのツールチップ
ヒントに関して、真魚のソースを参考にして修正を試みました。
JaneNidaの開発は事実上終了です。2chの仕様変更などで
対応するかもしれません。
0576デフォルトの名無しさん
2009/10/20(火) 05:27:19ttp://pc12.2ch.net/test/read.cgi/tech/1254829314/
こいつ、ここでも宣伝していやがる。
こりゃあ通報かな。
0577576
2009/10/20(火) 05:28:53ごめんこっちだった。
0578525
2009/10/20(火) 07:45:46いろいろ回答ありがとうございます。
自分の意図としては>>571で言っている通りで、それをmainで確かめる
方法を探していたんですけど、難しいのであきらめて違う方法を探してみます。
わかりづらい質問ですいませんでした
0579523
2009/10/20(火) 12:05:26ありがとうございます
unsigned charを使えば問題なさそうでした
トリップ生成プログラムなんかを試しに作ってみたいんですがgccでコンパイルしたところ以下のエラーが出ます
trip.c:36: error: parse error before "salt"
trip.c:79: error: incompatible types in assignment
79行目のエラーに関してはきっと自分がcrypt関数についてよくわかってないだけな気がするんですが、
36行目のエラーの原因がいまいちわかりません
今までこういう構文エラーの原因は大体前の行に;を忘れていたくらいだったのですが・・・
ttp://f50.aaa.livedoor.jp/~iwazaki/uploader/src/up4250.bin
どうかよろしくお願いします
0580デフォルトの名無しさん
2009/10/20(火) 12:09:56このような構文は無い
elseに条件式は付かない
0581デフォルトの名無しさん
2009/10/20(火) 13:23:33|はビット演算のORで||は論理演算のORじゃなかろか
0582デフォルトの名無しさん
2009/10/20(火) 13:35:350584デフォルトの名無しさん
2009/10/20(火) 15:18:47俺もそう思う。
上は必ず両辺が評価され、下は必ずしも両辺が評価されないという差も出てくるが、
それがこの場合にどう影響するかがわからん
0585デフォルトの名無しさん
2009/10/20(火) 15:30:560586デフォルトの名無しさん
2009/10/20(火) 21:38:46(aaa == bbb) ? flag = true : ; ;
0587デフォルトの名無しさん
2009/10/20(火) 21:52:35flag = (aaa == bbb) ? true : flag ;
というかそこに代入処理を書くのはif文が冗長だと思える人から見てスマートな記述なの?
0588デフォルトの名無しさん
2009/10/20(火) 21:54:450589デフォルトの名無しさん
2009/10/20(火) 22:04:25ってことはないですか?
0590デフォルトの名無しさん
2009/10/20(火) 22:12:380591デフォルトの名無しさん
2009/10/20(火) 22:19:44「かわらないから、読みやすいifのほうがいいじゃん」ってこと?
0592デフォルトの名無しさん
2009/10/20(火) 22:27:140593デフォルトの名無しさん
2009/10/20(火) 22:32:57if x < 30 then kihonkyu + x * jikyu
else kihonkyu + x * yugu_jikyu
より
kihonkyu + x * (if x < 30 then jikyu else yugu_jikyu)
のほうを薦めてるな。
0594デフォルトの名無しさん
2009/10/20(火) 22:45:51そここそ3項演算子だと思うが、その本ではifですか
0595デフォルトの名無しさん
2009/10/20(火) 22:48:443項演算子が無い言語ってことかな。
0596デフォルトの名無しさん
2009/10/20(火) 22:50:590597デフォルトの名無しさん
2009/10/20(火) 22:52:57これ見て「うわifだ、条件演算子がない言語って不便ね」みたいな
感想をもつやつは、たぶん条件演算子も使えてない。
0598デフォルトの名無しさん
2009/10/20(火) 22:54:130599デフォルトの名無しさん
2009/10/20(火) 22:59:35>>593 を見て、ifと条件演算子の脳内置き換えができないやつを評してる。
0600デフォルトの名無しさん
2009/10/20(火) 23:01:200601デフォルトの名無しさん
2009/10/20(火) 23:03:53処理したくない場合、どう書くかについての話だろ?
>>593はななめってる
0602デフォルトの名無しさん
2009/10/20(火) 23:05:42>>597は3項演算子に特別な思い入れでもあるのかねぇw
0603デフォルトの名無しさん
2009/10/20(火) 23:07:030604デフォルトの名無しさん
2009/10/20(火) 23:09:32いやぜんぜんななめじゃないよ。
条件演算子を効率のためにつかってるって思ってるやつに、
そうじゃないって例を示しただけ。
0605デフォルトの名無しさん
2009/10/20(火) 23:10:24誰にレスしてるかくらいはっきりさせろ蛆虫共
0606デフォルトの名無しさん
2009/10/20(火) 23:11:23>>593の下の方がいい理由を言ってみろ
0607デフォルトの名無しさん
2009/10/20(火) 23:13:060608デフォルトの名無しさん
2009/10/20(火) 23:13:08使えない。値を返す必要があるから空文があったら困るだろ。
どうしてもってことなら適当な変数でx=xとか入れときゃいいんじゃね?
0609デフォルトの名無しさん
2009/10/20(火) 23:17:04> (aaa == bbb) ? flag = true : ; ;
つーか、式を返す形で使わなきゃダメだろ。色々と。
0610デフォルトの名無しさん
2009/10/20(火) 23:19:33みて分かれよ。
プログラミングの基礎って本に載ってるぞ。
サイエンス社2300円。
0611デフォルトの名無しさん
2009/10/20(火) 23:22:370612デフォルトの名無しさん
2009/10/20(火) 23:25:00> 条件演算子を効率のためにつかってるって思ってるやつに、
> そうじゃないって例を示した
だから、ななめじゃん
0613デフォルトの名無しさん
2009/10/20(火) 23:26:04変数 = 条件?成功:失敗;
return 条件?成功:失敗;
みたいな形でよく使われる。
良く使われるということは、そう書くとみんな理解しやすい。
コンパイラ的に見ると
if ( 条件 ) 変数=成功 else 変数=失敗;
と吐き出されるコードは多分一緒。
逆に言えば、値を返す必要のないときに
三項演算子を使うのは理解しにくい?
0614デフォルトの名無しさん
2009/10/20(火) 23:27:150615デフォルトの名無しさん
2009/10/20(火) 23:30:50「ななめじゃん」って一言レスしてれば、ななめだってことにできると思ってるのか。
0616デフォルトの名無しさん
2009/10/20(火) 23:31:490617デフォルトの名無しさん
2009/10/20(火) 23:33:46より
( 条件 ) ? 変数=成功 : 変数=失敗;
の方がコード量減るからいいじゃん。
プロはこの辺の効率も求めていかなければならない。
0618デフォルトの名無しさん
2009/10/20(火) 23:34:570619デフォルトの名無しさん
2009/10/20(火) 23:48:36以下のような文字列から数字部分(10桁)の「1111111112」だけを抜き出したいと思います。
但し以下のような条件があります。
・数字の前は必ず「AAA」があります。
・下記はカンマ区切りだけど、カンマ区切りとは限りません
-------------------------------------
あいうえお,AAA1111111112,かきこけこ
-------------------------------------
strstr関数など、いろいろ試してみたのですがどうもうまくいきません。
皆様、よろしくお願い致します。
こんなのもわからなくて恥ずかしいです。。。。
0620デフォルトの名無しさん
2009/10/20(火) 23:49:490621デフォルトの名無しさん
2009/10/20(火) 23:49:57> ( 条件 ) ? 変数=成功 : 変数=失敗;
変数 = ( 条件 ) ? 成功 : 失敗;
普通こうでしょ…?
0622デフォルトの名無しさん
2009/10/20(火) 23:50:49頑張れ
0623デフォルトの名無しさん
2009/10/20(火) 23:55:020624デフォルトの名無しさん
2009/10/21(水) 00:07:20同じ変数だとはどこにも…
0625デフォルトの名無しさん
2009/10/21(水) 00:10:42代入するのは成功か失敗かなのに?
あとから二ヶ所でチェックするんですか?(笑)
てか"文"を書くなと。
0626デフォルトの名無しさん
2009/10/21(水) 00:10:50>>587
0627デフォルトの名無しさん
2009/10/21(水) 00:11:39sscanfについてもう少し調べる
0628デフォルトの名無しさん
2009/10/21(水) 01:00:46aaa == bbb && flag = true;
0629デフォルトの名無しさん
2009/10/21(水) 01:03:330630デフォルトの名無しさん
2009/10/21(水) 01:12:100631デフォルトの名無しさん
2009/10/21(水) 01:21:36括弧が不足してる
0632デフォルトの名無しさん
2009/10/21(水) 02:22:07なぜfalseにしたし
0633デフォルトの名無しさん
2009/10/21(水) 03:09:30scanf関数で数字を入力する際に
数字を打ち込みエンターキーを押すと改行してしまいます
もう一度数字を入力すると、前に打ち込んだ数字が認識されます
二度目の数字を入力しないと、ずっと改行しつづけます
この仕様はどうにかならないんでしょうか
0634デフォルトの名無しさん
2009/10/21(水) 03:12:020637デフォルトの名無しさん
2009/10/21(水) 07:09:370638634
2009/10/21(水) 07:49:240639デフォルトの名無しさん
2009/10/21(水) 09:59:160640デフォルトの名無しさん
2009/10/21(水) 10:05:31単項、二項、三項は項の数を問題にしているのであって条件式であることは無関係でしょ?
0641デフォルトの名無しさん
2009/10/21(水) 10:15:030642デフォルトの名無しさん
2009/10/21(水) 12:34:340643デフォルトの名無しさん
2009/10/21(水) 14:39:25そういった時にはtime関数で現在時刻を取得してからでないとだめなんですか?
プログラムの組み方がよくわからないので教えてください
0644デフォルトの名無しさん
2009/10/21(水) 14:50:06標準関数だけでは無理があるので、環境依存スレでどうぞ。
0645デフォルトの名無しさん
2009/10/21(水) 14:50:50開始からの経過時間さえ判ればよい。
だから普通は clock() を使う。
0646デフォルトの名無しさん
2009/10/21(水) 14:54:39プ
0647デフォルトの名無しさん
2009/10/21(水) 15:02:19time()だけでやるのは待ちループが必要になって現実的でないということは理解している?
>>645
あんたも同類か。ついでに言えば、clock()だからと言ってtime()と手間がさして変わるわけではないが。
0648デフォルトの名無しさん
2009/10/21(水) 15:03:000649デフォルトの名無しさん
2009/10/21(水) 15:27:530650デフォルトの名無しさん
2009/10/21(水) 16:05:250651デフォルトの名無しさん
2009/10/21(水) 16:21:56int i;
int *ip = &i;
2行目のコードの記述がおかしいです。
ipはアドレスを保持するポインタ変数で、*ipはポインタが指し示す領域の内容ですよね?
*ipには3とか-1といった整数値が入るものだと思っていましたが上の例ではアドレスを代入しています。
アドレスも整数に分類される値ということでしょうか。
これでもコンパイルが通るので何が何だかさっぱりです…
0652デフォルトの名無しさん
2009/10/21(水) 16:26:46int* という型なのだ。でも int* p1, p2とかやるとはまるから注意な。
0653デフォルトの名無しさん
2009/10/21(水) 16:29:35コンパイルの結果は変わらないから、気に入らなければ宣言時代入は使わなくてもいい。
0654デフォルトの名無しさん
2009/10/21(水) 16:30:49ほざけ。
0655デフォルトの名無しさん
2009/10/21(水) 16:35:17int *ip = &i;
は置き換えると
int *ip
ip = &i;
ですか。
0656デフォルトの名無しさん
2009/10/21(水) 16:36:36C言語を始めたばかりの初心者です。
LSI C-86 Ver3.30c 試食版というものを使っています。
コンパイルをして、コードをコマンドプロンプトで表示させると、
日本語が文字化けしてしまいます。
コンパイルもできているし、アルファベットや数字はきちんと出るのですが……。
どうすれば日本語が表示できるようになるのでしょうか?
ぐぐってもよく判らなかったため、質問させていただきました。
どうかよろしくお願いします。
0657デフォルトの名無しさん
2009/10/21(水) 16:37:32悪いことは言わないから、そのコンパイラは捨てなさい。
それはもう、10年以上も前のパソコン通信時代の代物だ。
0658デフォルトの名無しさん
2009/10/21(水) 16:43:00です。
0659デフォルトの名無しさん
2009/10/21(水) 16:48:58ありがとう。あやうく誤解するところでした。。
0660デフォルトの名無しさん
2009/10/21(水) 16:50:22文字コード体系が違う。
以前の Windows では CP-932 が使われていたが、
最近は UTF-16LE に変わってきている。
古いソフトなどを使うと、それらが混在するので文字化けすることがある。
ソースコードと表示系の文字コードを同じものに揃えれば問題ない。
0661デフォルトの名無しさん
2009/10/21(水) 16:57:50軽量・高速で使いやすく、変な制限もない。
0662デフォルトの名無しさん
2009/10/21(水) 17:01:08>10年以上も前のパソコン通信時代
20年前ですw
0663デフォルトの名無しさん
2009/10/21(水) 17:04:5532ビットよりも難しいです。
0664デフォルトの名無しさん
2009/10/21(水) 17:16:270665デフォルトの名無しさん
2009/10/21(水) 17:30:56できなくはありませんが、厳密には違う動作です。POSIXならusleep()という選択肢もありますが。
0666デフォルトの名無しさん
2009/10/21(水) 17:41:34エラー出るだろ?
0667デフォルトの名無しさん
2009/10/21(水) 17:42:130668デフォルトの名無しさん
2009/10/21(水) 20:10:15下のソースは間違ってますが、
やりたいことは、値によって、aaa、bbbを出力したいのです。
コンパイラに依存しない?標準のC言語の範囲でお願いします。
void hoge(){
char s[256];
setText(0,s);
printf("%s\n",s); // aaa を出力したい
settext(1,s);
printf("%s\n",s); // bbb を出力したい
}
void setText(int n , char *str){
if (n == 0) {
strcpy(str,"aaa");
}else{
strcpy(str,"bbb");
}
}
0669デフォルトの名無しさん
2009/10/21(水) 20:13:390670デフォルトの名無しさん
2009/10/21(水) 20:14:37setTextがsettextになってる以外は別に間違ってないぞ
先頭に
#include <stdio.h>
void hoge();
void setText(int n , char *str);
int main(){ hoge(); return 0; }
を付ければ問題なく動く
0671デフォルトの名無しさん
2009/10/21(水) 20:32:14これでよかったんですね。
どうもありがとう。
0672656
2009/10/21(水) 22:15:16コンパイラが古いのですね。
Turbo-C 2.01というものをダウンロードしてみることにします。
本当にありがとうございました。
0673デフォルトの名無しさん
2009/10/21(水) 22:31:22BCCとかLSI-Cよりよっぽど使いやすいのに。
どうしてもコマンドラインがいいっていうんならLinux入れてgcc使うべき。
0674デフォルトの名無しさん
2009/10/21(水) 22:33:580675デフォルトの名無しさん
2009/10/21(水) 23:55:530676デフォルトの名無しさん
2009/10/22(木) 00:02:310677デフォルトの名無しさん
2009/10/22(木) 00:03:34分厚い、単なる取扱説明書みたいなものが本屋に溢れてる
0678デフォルトの名無しさん
2009/10/22(木) 00:12:01Cライブラリがグローバル名前空間を汚染してるし
勉強には向いてないよ。
0679デフォルトの名無しさん
2009/10/22(木) 00:12:33とりあえず ASCII 文字だけで一通りやってみたら?
0680デフォルトの名無しさん
2009/10/22(木) 00:14:550681デフォルトの名無しさん
2009/10/22(木) 00:19:080682デフォルトの名無しさん
2009/10/22(木) 01:15:220683デフォルトの名無しさん
2009/10/22(木) 01:22:260684デフォルトの名無しさん
2009/10/22(木) 01:34:440685デフォルトの名無しさん
2009/10/22(木) 01:43:45foo_t foo(const struct foo *foo);
最後のfooは、foo()の名前(シンボルへのポインタ)を関数のスコープで別の型のシンボルfooで上書きしているから、barの方がいいか。
まぁ、なんだ、const修飾しとけと言いたかったんだ。
0686デフォルトの名無しさん
2009/10/22(木) 02:59:51つまりなんだ、関数名と構造体名と変数名は同時におなじものを使えるが、いまいちよくないということか
0687デフォルトの名無しさん
2009/10/22(木) 03:14:280688デフォルトの名無しさん
2009/10/22(木) 03:20:18そんなことはわかっているんだよ
関数名と変数が同じ名前だから、再帰呼び出しや関数ポインタが使えないと言っているわけで。
0689デフォルトの名無しさん
2009/10/22(木) 03:22:01おまえへのレスじゃねえよアホが
0690デフォルトの名無しさん
2009/10/22(木) 03:25:10>688の変数というと語弊があるので、s/変数/仮引数/としておく。
まぁ、そうはいっても関数スコープのちょっと上で宣言された変数なんだけどね。
スタックですね、わかります。
0691686
2009/10/22(木) 03:29:00なるほど。ありがとう
ちなみにtypedefしちゃうとだめだよね?
>>688
あぁー、そういう弊害が出てくるんですね。為になります。
0692デフォルトの名無しさん
2009/10/22(木) 04:39:15const付けたとしてもこの関数呼び出しの後でkouzoutaiのメンバが書き換わるのかどうかわからないすよね。
func(kouzoutai);
だったら書き換わらないことがわかるけど。
キャストすればいいのかな。。
0693デフォルトの名無しさん
2009/10/22(木) 06:26:120694デフォルトの名無しさん
2009/10/22(木) 10:31:59「呼び出しの後」が呼び出した関数内の話なら自己責任だろ。
「呼び出しの後」が呼び出した先の呼ばれた関数内の話ならその関数の宣言でconstポインタなら書き換わらないだろ。
0695デフォルトの名無しさん
2009/10/22(木) 10:48:080696デフォルトの名無しさん
2009/10/22(木) 12:13:14{
Kouzoutai kouzoutai;
kouzoutai.member = 100; //func()では書き換えたい
func2(&kouzoutai); //func2()では書き換えたくない。関数呼び出しからそれを明記できないか。
}
0697デフォルトの名無しさん
2009/10/22(木) 12:18:59void func2(const Kouzoutai * parameter);
func2()自体が書き換え可能なのだとしたら、呼び出すこと自体が無茶。
0698デフォルトの名無しさん
2009/10/22(木) 12:23:49{
Kouzoutai kouzoutai;
const Kouzoutai *kouzoutai_constptr = &kouzoutai;
kouzoutai.member = 100;
func2(kouzoutai_constptr);
}
0699デフォルトの名無しさん
2009/10/22(木) 12:38:38func(const T &in, const T &in2, T *out) //定義
func(in, in2, &out) //呼び出し
みたいにして、呼び出しの記述を見て関数内で変更されうることが類推しやすくしたりするね
そういう意味では
func2((const Kouzoutai *)&kouzoutai)
でいいのかも知れんが、全部それやらないと本末転倒
0700デフォルトの名無しさん
2009/10/22(木) 13:11:120701デフォルトの名無しさん
2009/10/22(木) 13:38:470702デフォルトの名無しさん
2009/10/22(木) 15:14:48値渡しこそ正義。
0703デフォルトの名無しさん
2009/10/22(木) 17:42:250704デフォルトの名無しさん
2009/10/22(木) 17:54:440705デフォルトの名無しさん
2009/10/22(木) 18:01:020706デフォルトの名無しさん
2009/10/22(木) 18:08:330707デフォルトの名無しさん
2009/10/22(木) 21:47:210708デフォルトの名無しさん
2009/10/22(木) 21:52:38なるほど。天才ですね。
0709デフォルトの名無しさん
2009/10/22(木) 22:09:020710デフォルトの名無しさん
2009/10/23(金) 01:34:000711デフォルトの名無しさん
2009/10/23(金) 10:56:550712デフォルトの名無しさん
2009/10/23(金) 12:15:02貧乏神や疫病神でないことを祈る
0713デフォルトの名無しさん
2009/10/23(金) 12:30:380714デフォルトの名無しさん
2009/10/24(土) 10:26:40{
Kouzoutai kouzoutai;
kouzoutai.member = 100; //func()では書き換えたい
func2(&kouzoutai); //func2()では書き換えたくない。関数呼び出しからそれを明記できないか。
kouzoutai.member = 100; //func()では書き換えたいんだってば
}
0715デフォルトの名無しさん
2009/10/24(土) 10:40:450716デフォルトの名無しさん
2009/10/24(土) 13:21:320717デフォルトの名無しさん
2009/10/24(土) 15:36:03次に関数Bでそのデータを処理、みたいな事をしたいのですがうまくいきません。
どうも関数Aで確保したメモリがmainに戻ってくると解放されているようす・・・なにか方法はないですか?
void main(void)
{
char *p;
関数A(p);
関数B(p);
}
void 関数A(char *p)
{
//ここで*pに動的メモリを割り当て&データセット
}
void 関数B(char *p)
{
//*pのデータを処理
}
0718デフォルトの名無しさん
2009/10/24(土) 15:39:290719デフォルトの名無しさん
2009/10/24(土) 15:41:22void 関数A(char **p)
じゃないと p@main が書き換わらないよ
0720デフォルトの名無しさん
2009/10/24(土) 15:45:57関数A(&p);
にする
普通の変数を関数内で書き換えるときと同じ。
0721デフォルトの名無しさん
2009/10/24(土) 16:05:42void main(void)
{
char *p;
p = 関数A();
関数B(p);
}
char *関数A(void)
{
//ここで動的メモリを割り当て&データセット
}
void 関数B(char *p)
{
//*pのデータを処理
}
0722717
2009/10/24(土) 16:14:340724デフォルトの名無しさん
2009/10/24(土) 17:28:44インデントを説明するための例なので、内容については説明しません
int foo(){return 0;}
int bar(){return 0;}
int main(){int a,b;for(a=0;a!=5;a++){b=((b+a)*b+a)/a;foo();bar();}return 0;}
せめてバグがない物を提示しないか
0725デフォルトの名無しさん
2009/10/24(土) 17:29:59と続いてるわけだし。
0726デフォルトの名無しさん
2009/10/24(土) 18:07:45多くの人によって編集されていくと、スタイルがバラバラになる可能性があるので、
最低限は決めておいた方がいいと思う。
また、説明などに使う用語やどの規格に準拠して書くかなども。
これ以上はスレチなので、新しくスレを立ててからお願いします。
0727デフォルトの名無しさん
2009/10/25(日) 04:03:480728デフォルトの名無しさん
2009/10/25(日) 04:18:370729デフォルトの名無しさん
2009/10/25(日) 04:30:29fclose に NULL を渡すのはダメ
0730デフォルトの名無しさん
2009/10/25(日) 14:55:59「車輪を実装した」という経験をもたせないようにして、先行者利益を確保するという、孔明の罠なのです。
0731デフォルトの名無しさん
2009/10/25(日) 15:05:440732デフォルトの名無しさん
2009/10/25(日) 15:40:14止めてやるべき
0733デフォルトの名無しさん
2009/10/25(日) 15:44:350734デフォルトの名無しさん
2009/10/25(日) 15:47:330735デフォルトの名無しさん
2009/10/25(日) 15:52:500736デフォルトの名無しさん
2009/10/25(日) 16:17:07発明するのが無駄ってことだろ。
0737デフォルトの名無しさん
2009/10/25(日) 16:19:560738デフォルトの名無しさん
2009/10/25(日) 16:45:53ありもしないライブラリを再発明になるといけないので探してます、とかな。
0739デフォルトの名無しさん
2009/10/25(日) 17:24:10巧妙なトリック
0740デフォルトの名無しさん
2009/10/25(日) 17:39:110741デフォルトの名無しさん
2009/10/25(日) 18:13:11http://gigazine.net/index.php?/news/comments/20080802_find_free_time/
10.「それは受けられません」と言うことを学びなさい
12.最も大きなタスクを一番最初に処理しなさい
13.人に任せる
14.気を散らすあらゆるものを視界から取り除きなさい
15.インターネットから切断する
16.外部委託する
0742デフォルトの名無しさん
2009/10/25(日) 18:50:31げぇ!
0743デフォルトの名無しさん
2009/10/25(日) 19:55:572. 2chviewer をアンインストールする
0744デフォルトの名無しさん
2009/10/26(月) 02:48:27押している間じゃないです
お願いします
0745デフォルトの名無しさん
2009/10/26(月) 03:03:150746toya
2009/10/26(月) 06:15:16準拠する規格は『JISX3010:2003 プログラム言語C』で
「http://www.jisc.go.jp/ 」→「JIS検索」→
「JIS規格番号からJISを検索」で「X3010」と入力し
「一覧表示」→「JISX3010」→「規格の閲覧」で閲覧できます
0747デフォルトの名無しさん
2009/10/26(月) 06:27:280748デフォルトの名無しさん
2009/10/26(月) 11:04:50for(;;){
}
return 0;
}
こういうスタイルって、紙の本で行数が間延びしないためのものだろ。
実機での記述でこのスタイルにしてる奴って、それを理解してないんじゃないのか?
0749デフォルトの名無しさん
2009/10/26(月) 11:14:430750デフォルトの名無しさん
2009/10/26(月) 11:18:300751デフォルトの名無しさん
2009/10/26(月) 11:53:35ディスプレイで見たときにも間延びするとかっこわるい。
0752デフォルトの名無しさん
2009/10/26(月) 12:03:070753デフォルトの名無しさん
2009/10/26(月) 12:34:43{
int i, j, k, something;
for ( i = 0; i < n; ++i )
if ( i != m ) {
(void)something;
for ( j = 0; j < n; ++j )
for ( k = 0; k < n; ++k ) {
(void)something;
if ( k != m )
(void)something;
{
int a, b;
(void)(something = a + b);
(void)something;
}
}
} else
(void)something;
(void)something;
return 0;
}
関数化しろとかインデントが2カラムと言うのは無しで、こういうソースはできれば見たくない
0754デフォルトの名無しさん
2009/10/26(月) 12:36:40見なきゃいい
エディタ起動時に必ず整形ツールを通すようにすればいいだけだ
0755デフォルトの名無しさん
2009/10/26(月) 12:38:01コンピュータプログラミングには向いていないよ。
0756デフォルトの名無しさん
2009/10/26(月) 12:43:13別に悪くないと思うが。
じゃあどんなスタイルが良いんだ?
定番で悪いが
Linux流プログラム書法
ttp://www.linux.or.jp/JF/JFdocs/kernel-docs-2.2/CodingStyle.html
0757デフォルトの名無しさん
2009/10/26(月) 12:51:07調べても何か特定の原因があるってわけでもなさそうなのでさっぱり意味がわかりません。
一つ一つの処理ごとにprintfを挟んでみたところ以下のようでした。
#define _XOPEN_SOURCE
#include <stdio.h>
#include <string.h>
#include <unistd.h>
main(void)
{
int i, j, len;
unsigned char tripkey[11] = "";
unsigned char salt[3] = "";
unsigned char trip_f[256] = "";
unsigned char trip[11] = "";
printf("トリップキーを入力:");
scanf("%u", &tripkey);
printf("トリップキー入力"); ←これが表示されずにコアを吐く
0758デフォルトの名無しさん
2009/10/26(月) 12:54:03> scanf("%u", &tripkey);
scanfの使い方調べろよ
0759デフォルトの名無しさん
2009/10/26(月) 12:54:36Java見たいで嫌だ書き直す
int foo(int n, int m){
int i, j, k, something;
for(i = 0; i < n; ++i){
if(i != m){
(void)something;
for(j = 0; j < n; ++j){
for(k = 0; k < n; ++k){
(void)something;
if(k != m) (void)something;
{
int a, b;
(void)(something = a + b);
(void)something;
}
}
}
}else (void)something;
}
(void)something;
return 0;
}
漏れが許せる隙はこれが限界だ
0760デフォルトの名無しさん
2009/10/26(月) 12:54:48ブレースだけの行があるのが嫌な人もいるんだろうけどね
もう慣れているからどちらでもいいんだけど、修正時のエンバグ対策に{}付けていた体質を改めようかな、はっはっはぁ
0761デフォルトの名無しさん
2009/10/26(月) 13:00:43インデントついてるからまだましだけど
その書き方でインデントめちゃくちゃなやつもいた
if(k != m) (void)something; {
int a, b;
(void)(something = a + b);
(void)something;
}
とかもう
0762デフォルトの名無しさん
2009/10/26(月) 13:10:11int
foo(int n, int m)
{
}
って書く方が好みだ。
関数名を検索するときに、/^foo\(/でジャンプできるからな。
'{'を独立した行に置くのは、K&R第1版の頃の
foo(n, m)
int n;
int m;
{
}
からの慣れかな。
0763デフォルトの名無しさん
2009/10/26(月) 13:13:37他人が読むことを想定していないコードだな
0764デフォルトの名無しさん
2009/10/26(月) 13:14:21具体的にどこがそうなのか挙げてみれ
0765デフォルトの名無しさん
2009/10/26(月) 13:16:070766デフォルトの名無しさん
2009/10/26(月) 13:16:56/*!
* @brief fuga
*
* hoge
*
* @return piyo
*/
int
foo(
int n, /*!< [in] bar */
int m /*!< [in] baz */
) {
}
って書く方が好みだ。
ただの似非Doxygenスタイルだけど。
0767デフォルトの名無しさん
2009/10/26(月) 13:17:47わかってるくせに
0768デフォルトの名無しさん
2009/10/26(月) 13:18:59Java みたいなのはお前の方だw
0769デフォルトの名無しさん
2009/10/26(月) 13:20:59int i, j, k, something;
for(i=0; i<n; ++i){
if(i != m){
(void)something;
for(j = 0; j < n; ++j){
for(k = 0; k < n; ++k){
(void)something;
if(k != m)
(void)something;{
int a, b;
(void)(something = a + b);
(void)something;
}
}
}
}
else
(void)something;
}
(void)something;
return 0;
}
0770デフォルトの名無しさん
2009/10/26(月) 13:23:52>>753は、非難されるほどひどいスタイルには見えん。
ひどい点があるなら、教えてくれないか
0771デフォルトの名無しさん
2009/10/26(月) 13:26:58全角スペース
0772デフォルトの名無しさん
2009/10/26(月) 13:28:11if ( k != m )
(void)something;
{
int a, b;
(void)(something = a + b);
(void)something;
}
0773デフォルトの名無しさん
2009/10/26(月) 13:29:38(void)something;
}
{
int a, b;
(void)(something = a + b);
(void)something;
}
0774デフォルトの名無しさん
2009/10/26(月) 13:31:01#define END }while(0)
if ( k != m ){
(void)something;
}
BEGIN
int a, b;
(void)(something = a + b);
(void)something;
END;
0775デフォルトの名無しさん
2009/10/26(月) 13:32:17htmlでインデントを表現するために、わざと全角空白をつかってるんじゃないか?
0776デフォルトの名無しさん
2009/10/26(月) 13:36:39使え
受け取った方がコピペでコンパイル出来るようになる
0777デフォルトの名無しさん
2009/10/26(月) 13:54:13
使え
消えてたorz
0778デフォルトの名無しさん
2009/10/26(月) 14:02:010779デフォルトの名無しさん
2009/10/26(月) 14:10:58一部の専ブラでは書き込まれた&nbspをコピペすると化ける。
0780デフォルトの名無しさん
2009/10/26(月) 14:12:27なんだかよくわからなかったのでgetsを使ってみたけれどそれでもダメでした
0781デフォルトの名無しさん
2009/10/26(月) 14:13:57なんだかよくわからない結果にしかならないと思うんだ
0782デフォルトの名無しさん
2009/10/26(月) 14:23:26scanfのフォーマット指定子とそれに対応する引数を考えてみて。
つかあまりにも適当に指定してるようにしか見えないから、
正解をズバリ書くのもはばかられるわ
0783デフォルトの名無しさん
2009/10/26(月) 14:47:18%sと%cを試してみたけど変わりませんでした
0784どちらが正統?
2009/10/26(月) 14:58:45sは長さ6の文字列へのポインタで、その値は変更不能な文字列
(リテラル)"INTEL"を指すポインタ値
なのか
sは長さ3の文字列へのポインタで、その値は変更可能な文字配列
を指すポインタ値で、変更可能な文字列配列はあらかじめ
コンパイラによって変更不能な文字列"INTEL"を複製したもの
が設定されている。
0785デフォルトの名無しさん
2009/10/26(月) 15:03:19へぇ
0786デフォルトの名無しさん
2009/10/26(月) 15:19:05どちらも間違い。 sはポインタではなく配列
0787どちらが正統?
2009/10/26(月) 16:20:53sは長さ7の変更不能な文字配列である"foobar"の名前である
のか
sは長さ7の変更可能な文字配列で(コンパイラにより)
変更不能な文字配列(リテラル)"foobar"の複写で初期化された
ものの名前である。
0788デフォルトの名無しさん
2009/10/26(月) 16:29:32プログラミングの基本とか
だいたい理解したと思うので
そろそろCをはじめようかと
思うのですが、Cをはじめる
前に、これを先にPHPで勉強
しておいたほうがいい、
っていうの、何かありますか?
一応、PHPで、
print文で画面に文字とかを出力、表示する
ifでの分岐
switch文での分岐
for、while、foreachでのループ
ユーザー定義関数
関数への値渡し、引数渡し
includeで他のファイルを読み込んで使う
配列、連想配列(ハッシュ)
ファイルへの読み書き
OOP基礎
----------------------------------------------
↑こんくらいはマスターしました。
Cに移行する前に、何かもっと
勉強しておいたほうがいい知識はありますか?
0789デフォルトの名無しさん
2009/10/26(月) 16:30:350790デフォルトの名無しさん
2009/10/26(月) 16:34:11PHP→Cは結構苦労するってなんかの本に書いてあったな
逆にC→PHPは3日で覚えられるって事も
0791デフォルトの名無しさん
2009/10/26(月) 16:37:48セッションやら、
クッキーやら、
サニタイズやら、
BASIC認証やら、
やらされたので、Cだと
そういうのないので、
かえって勉強しやすいかなー
と思ってます。
0792デフォルトの名無しさん
2009/10/26(月) 16:40:33後者。
でも「変更不能な文字配列(リテラル)"foobar"の複写で」がなんか違和感あり。
char s[6] = "INTEL";
は、
char s[6] = {'I', 'N', 'T', 'E', 'L', 0};
と全く同じよ。
0793デフォルトの名無しさん
2009/10/26(月) 16:51:190794デフォルトの名無しさん
2009/10/26(月) 16:54:29引数もちゃんと考えようぜ。
例を見て&つけてるんだろうけど、何で&がついてるかわかるか?
配列の[]無しはどういうものかも。
0795デフォルトの名無しさん
2009/10/26(月) 17:06:55C-CGI作るならもちろんその辺もやらないとだめだよ
0796デフォルトの名無しさん
2009/10/26(月) 17:09:37USBで外部デバイスを接続して
パソコンでプログラム組んで
ROMライターで焼いて、、、
ってやるんだよ。
お掃除ロボットのルンバの
プログラム組んだりとか
ロボット作ったりとかしてーんだよ。
空気よめよwww
0797デフォルトの名無しさん
2009/10/26(月) 17:44:30どっからダウンロードするんにゃ〜〜
おしえれ〜〜
0798デフォルトの名無しさん
2009/10/26(月) 17:45:570799デフォルトの名無しさん
2009/10/26(月) 17:55:47どっかのFlashで見たなそういえば、
zlibとか使って圧縮して通信容量減らして危機を救ったとかなんとか
十分慎重に組めばセキュアなCGIも作れるわけだが
CでCGI作るというウェブサイトや書籍にろくなものが無い気がしないでもない
0800デフォルトの名無しさん
2009/10/26(月) 18:05:38というか、2chのC化自体はあまり効果が無かったような
0801デフォルトの名無しさん
2009/10/26(月) 18:10:220802デフォルトの名無しさん
2009/10/26(月) 18:59:070803デフォルトの名無しさん
2009/10/26(月) 19:26:030804デフォルトの名無しさん
2009/10/26(月) 19:39:48タブをたくさん開きーのそいつらをいっせいにリロードしーの
あまつさえ自動でリロードしーの
0805デフォルトの名無しさん
2009/10/26(月) 19:44:080806デフォルトの名無しさん
2009/10/26(月) 19:57:13100タブ単位で開いてると馬鹿にならない
0807デフォルトの名無しさん
2009/10/26(月) 20:20:000808デフォルトの名無しさん
2009/10/26(月) 20:24:170809デフォルトの名無しさん
2009/10/26(月) 20:25:090810デフォルトの名無しさん
2009/10/26(月) 20:27:51なのにそのスレ読むときにまたリロードしたりして。
専ブラに起因した問題じゃないってのはタブ型ブラウザのことでも指してるのかなぁ
0811デフォルトの名無しさん
2009/10/26(月) 20:29:46なにか勘違いしてない?
0812デフォルトの名無しさん
2009/10/26(月) 20:31:23昔話
0813デフォルトの名無しさん
2009/10/26(月) 20:31:280814デフォルトの名無しさん
2009/10/26(月) 20:40:01HTTPリクエストヘッダに
Range: bytes=
で差分を指定できるみたいだね。(この場合は gzip 圧縮はされない)
ただ、リクエストしまくるとバーボン規制やボボン規制を食らう可能性もある。
0815デフォルトの名無しさん
2009/10/26(月) 20:40:240816デフォルトの名無しさん
2009/10/26(月) 21:42:38実行して出力したときに、
countを1000にするとうまく表示されるのですが、
countを100にしたときに、どうして壁を突き破るのか教えてください。
また、100にしても壁を突き破らない方法を教えてください。
0817デフォルトの名無しさん
2009/10/26(月) 22:01:03char s[]="書き換えてはならない文字列";
s[2]='¥0';
この場合コンパイルは通る?動作は保証される?
0818デフォルトの名無しさん
2009/10/26(月) 22:13:19大丈夫
保証される
0819デフォルトの名無しさん
2009/10/26(月) 22:39:18解釈ルール上からは大丈夫な筈であるが
char *s="書き換え禁止文字列";
とかと混同使用されている現実から安全対策の為、
強く警告を出して事実上禁止している処理系が
多いのでやらないほうが良い。
0820デフォルトの名無しさん
2009/10/26(月) 22:45:52そんなのがあるとは…
ちなみに処理系の名前を教えて欲しいです
0821デフォルトの名無しさん
2009/10/26(月) 22:57:47混同してるのも安全対策が必要なのもてめーだけだ
何を禁止or警告されているかくらい読めぼけ
0822デフォルトの名無しさん
2009/10/26(月) 23:06:020824デフォルトの名無しさん
2009/10/26(月) 23:16:37int array[]={0,1,2,3,4,5,};
の要素がLValueになれない処理系はモグリだが
char array[]="012345";
の要素がLvalueになれない処理系がモグリだと
決めつけられないとオモ
char array[6]="012345";
でLValue禁止はモグリだが
0825デフォルトの名無しさん
2009/10/26(月) 23:18:10そういう処理系がある可能性もあるから
名前が知りたいだけですよ
0826デフォルトの名無しさん
2009/10/26(月) 23:20:330827デフォルトの名無しさん
2009/10/26(月) 23:20:49> 決めつけられないとオモ
何が「特別」なのかどう頑張っても足掻いても完璧にわかってないな
0828デフォルトの名無しさん
2009/10/26(月) 23:32:44がconst char s[6]={'1','2','3','4','5',0}と
等価だって保証されてる?
0829デフォルトの名無しさん
2009/10/26(月) 23:35:06constはつかないんじゃないの?
0830解説
2009/10/26(月) 23:49:59リテラル表現を見つけるとCコンパイラは機械的にそれを
void *型のconst ポインタ値に置換するというウワサ
(void*)の(char*)のキャスト省略は認容されているからprintfとかに
与えても文法上合法だし、その処理系に付属しているライブラリ関数
ならば期待した動作をする。
問題はvoid*が指しているアドレスに実際に何が書かれているかに
ついての規定が不可能になってきていること。
エンコーディング(フォントの種類とかサイズランク
(微妙に書体が変わるんで)まで規定できる新しいコード体系とか)
によっては連続したメモリ領域にマップしないほうが良い場合もあり
得るし実際しないだろうし。
そいった状況になったらchar s[]="うんたらかんたら";
がchar s[]={ 文字配列要素定義列 };
という解釈をしてもらえるという保証が無くなる可能性がある
0831デフォルトの名無しさん
2009/10/26(月) 23:52:37char s[]="12345"; は左辺のために新たに確保された領域に
右辺の値がコピーされるから、つける必要もないし。
0832デフォルトの名無しさん
2009/10/26(月) 23:56:35そういうヘボい実装をしている処理系を知っているなら教えて欲しい
○○向け○○コンパイラとか
0833デフォルトの名無しさん
2009/10/26(月) 23:57:07だから、>>819や>>824はその処理系の名前を具体的にあげてくれればいい。
それだけで話は終了する。これは一般論じゃないから。
0834デフォルトの名無しさん
2009/10/26(月) 23:59:02だろ。Cの現状的には
0835デフォルトの名無しさん
2009/10/27(火) 00:06:57そもそも
> char s[]="うんたらかんたら";
> がchar s[]={ 文字配列要素定義列 };
> という解釈をしてもらえるという保証が無くなる可能性がある
char s[] = "うんたらかんたら";
と
char s[] = {'う', 'ん', 'た', 'ら', 'か, 'ん, 'た, 'ら'};
は違うんじゃないの?
0836デフォルトの名無しさん
2009/10/27(火) 00:23:33そうだろうね。いずれにせよ>>830は
実例をひとつ挙げればそれですむ話を延々としているだけ。
誰もそういう実装のコンパイラが存在しないとは考えていないわけで
規格に合致しないコンパイラがあるなら
その名前を挙げてくれと言っているにすぎない。
0837デフォルトの名無しさん
2009/10/27(火) 00:40:30リトルエンディアンですねわかります
0838デフォルトの名無しさん
2009/10/27(火) 00:48:460839デフォルトの名無しさん
2009/10/27(火) 01:40:420840皐
2009/10/27(火) 02:43:41#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
int c;
char *p, o[] = "= +-*/^ ";
double x[26];
int get(void)
{
do c = *p++ & 0xff;
while (isspace(c));
return c;
}
0841デフォルトの名無しさん
2009/10/27(火) 02:48:250842皐
2009/10/27(火) 02:49:290843デフォルトの名無しさん
2009/10/27(火) 03:00:590844皐
2009/10/27(火) 03:02:54分割でのっけます。
double expr(const char *s)
{
double v;
if (*s == '=') {
char *q = p; int n = get();
v = (islower(n) && get() == '=') ? (x[n-'a'] = expr(s)) : (p = q, expr(s+2));
} else if (*s)
for (v = expr(s+2); c == s[0] || c == s[1]; )
switch (c) {
case '+': v += expr(s+2); break;
case '-': v -= expr(s+2); break;
case '*': v *= expr(s+2); break;
case '/': v /= expr(s+2); break;
case '^': v = pow(v, expr(s)); break;
}
0845皐
2009/10/27(火) 03:03:51else if (get() == '.' || isdigit(c)) v = strtod(p-1, &p), get();
else if (c == '(') v = expr(o), c == ')' ? get() : (c = 1);
else if (c == '-') v = -expr(s);
else if (c == '+') v = expr(s);
else if (!memcmp(p-1, "sqrt",4)) p += 3, v = sqrt(expr(s));
else if (!memcmp(p-1, "exp", 3)) p += 2, v = exp(expr(s));
else if (!memcmp(p-1, "log", 3)) p += 2, v = log(expr(s));
else if (!memcmp(p-1, "sin", 3)) p += 2, v = sin(expr(s));
else if (!memcmp(p-1, "cos", 3)) p += 2, v = cos(expr(s));
else if (!memcmp(p-1, "tan", 3)) p += 2, v = tan(expr(s));
else if (!memcmp(p-1, "atan",4)) p += 3, v = atan(expr(s));
else if (islower(c)) v = x[c-'a'], get();
else v = c = 1; /* error */
return v;
}
0846デフォルトの名無しさん
2009/10/27(火) 03:05:070847皐
2009/10/27(火) 03:05:34int main(void)
{
char buf[1024]; double v;
while (printf("> "), fgets(buf, sizeof buf, stdin) && *buf != '.') {
p = buf; v = expr(o);
if (c) puts(" error");
else {
p = buf;
if (!islower(get()) || get() != '=') printf(" %.15g\n", v);
}
}
return 0;
}
0848皐
2009/10/27(火) 03:11:17関数電卓で、まず四則演算と三角関数を1つの式で計算しようと思っています。
0849デフォルトの名無しさん
2009/10/27(火) 04:05:09Sの示す文字列の3文字目を表す場合どう表現すればいいんでしょうか?
S[2]と書いたら、それはint型だとか言われました
0850デフォルトの名無しさん
2009/10/27(火) 04:15:38orzchar_t s[] = {0x1a33, 0x48b1, 0x5273, 0x542e};
orzchar_t *S;
S = s;
(void)S[2];
とか、そういうことは無いよな
wchar_t使っていると怪しい
とりあえず、コード片でも貼るといいお
0851849
2009/10/27(火) 04:22:34wchar_t wcStr[sizeof(szStr)];
WCHAR* strprev = wcStr;
これでif文の中でstrprev[2]としたらint型だと言われました
0852デフォルトの名無しさん
2009/10/27(火) 04:43:09どうすればSからsのn番目の要素を取り出すことができるんでしょうか?
0853デフォルトの名無しさん
2009/10/27(火) 05:22:080854デフォルトの名無しさん
2009/10/27(火) 05:31:00wchar_t を使う場合、
1. locale を正しくセットすること、
2. wchar_t対応のライブラリを使うこと
3. wchar_t と char をごっちゃにしないこと
の3点が重要です^^
ちなみに、wchar_tは符号なし1バイト整数以上のサイズであれば良いとしか規定されていないので
shift_JISすらまともに扱えない環境も普通に存在します^^
0855デフォルトの名無しさん
2009/10/27(火) 05:54:01Cを独学し始めたばかりの初心者です。目的はVBAで書いたコードをCに書き直すこと
です。VBAも独学なので冗長な表現や不要な処理が多々あると思われますが、
とりあえず動いているのでよしとしています。
と、ここからが本題なのですが、とりあえずVBAコードをまとまりのある
ブロックに分けてCに書き直し、コンパイル→実行して意図通りに動いているか
確かめています。すでに4,5個分はチェックできました。
使っているエディタ?は「C言語を始めよう!」というフリーのものですが、
今引っかかっているブロックでは「問題が発生したため、block3.exe を終了します。
ご不便をおかけして申し訳ありません。エラー報告する しない云々・・」という
おなじみの表示が出てしまって、実行できません。
BCCを使っているみたいで、コンパイルエラーは出ないのですが実行できないのです。
これはコードの問題なのか、エディタもしくはそれ以外の問題なのかが目下の悩みです。
この「C言語を始めよう!」は、コード書く→コンパイル→実行という
とてもシンプルで使いやすいのですが、他の「統合開発環境」と名の付くソフト
(たとえばWildStudioなど)はビルドやらプロジェクトやら、意味が分からんことばかりで
使い方を学ぶまで時間がかかりそうで尻込みしています。
コードがまずいのだろうと思われますが、それを確かめるためにも、初心者やさしいエディタ
(開発環境)があれば、教えてください。ただしフリーのもので。
0856デフォルトの名無しさん
2009/10/27(火) 05:58:000857855
2009/10/27(火) 06:12:06どうやってするの?
0858デフォルトの名無しさん
2009/10/27(火) 06:37:470859デフォルトの名無しさん
2009/10/27(火) 06:43:290860デフォルトの名無しさん
2009/10/27(火) 06:59:560861デフォルトの名無しさん
2009/10/27(火) 07:00:47ttp://yuukiremix.s33.xrea.com/chirashi/
これならフリーソフトだよ。
0862849
2009/10/27(火) 07:21:53setlocaleもやってみましたが全く変化ありません
どうすればwchar_tのn番目の要素とL""の比較ができるんでしょうか?
デバッグ中は期待通りの文字列が見えるのに、一文字だけ取り出そうとするとint型になってしまいます
コマンド引数に/Zc:wchar_tを指定しても変わりありませんでした
(VC++では規定で有効らしいので当たり前ですが)
0863デフォルトの名無しさん
2009/10/27(火) 07:24:46できるわけないだろ…。
0864デフォルトの名無しさん
2009/10/27(火) 07:27:380865デフォルトの名無しさん
2009/10/27(火) 07:48:32const wchar_t comp = L'う'; // == L"う"[0]
if (str[2] == comp) {}
0866デフォルトの名無しさん
2009/10/27(火) 08:04:52それだとif文で左辺がint型、右辺がconst wchar_t*型でエラーが出ます
Unicodeを調べて両辺int型でやればなんとかうまくいくようです
wchar_t型の文字のUnicodeを求める関数などはあるのでしょうか?
0867デフォルトの名無しさん
2009/10/27(火) 08:43:520868デフォルトの名無しさん
2009/10/27(火) 08:44:54>右辺がconst wchar_t*型で
???
0869デフォルトの名無しさん
2009/10/27(火) 08:50:47うん。明らかに君の使っているコンパイラは標準に合致してない。
別のコンパイラに変えるしかないよ。
そのコンパイラではどうやってもwchar_t同士の比較はできない。
0870デフォルトの名無しさん
2009/10/27(火) 09:39:44wchar_t が unsigned なのかも
0871デフォルトの名無しさん
2009/10/27(火) 10:50:58アドバイスするとしたら
わざわざC言語使わなくてもVBAでいいんじゃない?
ってことくらいかな。
あと、異常終了するのはまず間違いなくコンパイラやエディタのせいではない
と思っていい。
0872デフォルトの名無しさん
2009/10/27(火) 10:51:53#define wchar_t int
とかやってたりしてな。
0873855
2009/10/27(火) 12:25:42>わざわざC言語使わなくてもVBAでいいんじゃない?
プログラムをLinuxで走らせたいのです。
>異常終了するのはまず間違いなくコンパイラやエディタのせいではない
やはり、コードですかね。問題は。
もうちょっとがんばってみます。 ありがとうございました。
0874デフォルトの名無しさん
2009/10/27(火) 12:36:59スクリプト系言語にしたら?
LinuxならRubyでもPythonでも選り取り緑でしょ。
0875デフォルトの名無しさん
2009/10/27(火) 12:42:060876デフォルトの名無しさん
2009/10/27(火) 13:06:26Linuxで動かすつもりなら、Linuxで開発したほうが楽だと思うけどね。
Windowsと違うところ結構あるし。
あと、まさかWindows特有の機能使おうとはしてないよね?
0877855
2009/10/27(火) 13:16:49>>876
あの〜、この辺まったく知らないんですが、Windows上で動くcプログラムでも
Linuxで動かないってことあるんですか?あ、もちろんWindows特有の機能ってのは
使わない上での話ですが。
「Linuxで走らせる」っていうのも先の目標でして、実際はKnoppixのデスクトップ画面
を、自身のPCで見たことがある程度の者です。
0878デフォルトの名無しさん
2009/10/27(火) 13:23:29> Windows上で動くcプログラムでも
> Linuxで動かないってことあるんですか?
あるねぇ。
> あ、もちろんWindows特有の機能ってのは
> 使わない上での話ですが。
あなたのレベルでは、Windows特有の機能かどうかの判断は難しいと思う。
0879デフォルトの名無しさん
2009/10/27(火) 13:40:23自分のLinux上で動くcプログラムが
他人のLinuxで動かないってこともある
0881デフォルトの名無しさん
2009/10/27(火) 13:52:13Windows の VB に相当するのは Python だ
0882デフォルトの名無しさん
2009/10/27(火) 13:54:200883デフォルトの名無しさん
2009/10/27(火) 15:05:01引数に配列名を持ってくるときは自動的に配列の1番目の要素のアドレスを表すので&は不要ということはわかりましたが
そこを直してもやはりダメでした
というかunsigned charに対するフォーマット指定子は%sでよいのでしょうか?
もちろん文字列入力を行うということなのですが・・・
0884デフォルトの名無しさん
2009/10/27(火) 15:11:01ディレクトリ操作すら標準化されてない。GUIなど無論。
0885デフォルトの名無しさん
2009/10/27(火) 15:12:13"%s"は試したの?
0886デフォルトの名無しさん
2009/10/27(火) 15:13:27scanf("%s", tripkey);
これでダメなら原因は別のとこにある。
0887デフォルトの名無しさん
2009/10/27(火) 15:36:11試しましたがダメでした
>>886
同じようにコアを吐きます
とりあえずソース全部です・・・
この部分だけでなく他にもおかしいところが多々あって見苦しいとは思いますが・・・
ttp://ccfa.info/cgi-bin/up/src/up1812.txt
0888デフォルトの名無しさん
2009/10/27(火) 15:44:20crypt()周辺がおかしいんで内科医?
crypt()の仕様はどうなってんのよ。
つーか、手元にcrypt()がないからコメントアウトしたら、実行しても少なくともコアは吐かないんだが。
0889デフォルトの名無しさん
2009/10/27(火) 15:47:29C言語を始めよう!ってなんじゃろうと思って調べたら統合開発環境だた
0890デフォルトの名無しさん
2009/10/27(火) 15:47:450891デフォルトの名無しさん
2009/10/27(火) 15:52:14cryptの呼び出しは
strcpy(trip_f, crypt(tripkey, salt));
こんな感じ?
0892デフォルトの名無しさん
2009/10/27(火) 15:56:14printf("トリップキーを入力:");
scanf("%u", &tripkey);
printf("トリップキー入力"); ←これが表示されずにコアを吐く
fflush(stdout); ←これを追加したら↑これ出ないかな
0893デフォルトの名無しさん
2009/10/27(火) 16:33:35本来ならそんな感じで呼び出すはずだけど
僕の環境では
/usr/include/unistd.h:1073:extern char *crypt (__const char *__key, __const char *__salt)
/usr/lib/i386-redhat-linux4E/include/unistd.h:1019:extern char *crypt (__const char *__key, __const char *__salt)
となっていたから
diff
96c96
< *trip_f = crypt(*tripkey, *salt);
---
> strcpy(trip_f, crypt(tripkey, salt));
結果
./up1812
トリップキーを入力:foo
トリップキー入力トリップキー前処理salt作成1回目:OK2回目:OK3回目:OK4回目:OK5回目:OK◆yaoo
0894デフォルトの名無しさん
2009/10/27(火) 20:59:52___char mozi[100]; //文字列格納用
_______int year[100];//点数格納用
}Data;
Data data[100];構造体を100個用意
data[0].mozi="aaaaaaaa";←*1
printf("%s",data[0].mozi);
これでコンパイルすると*1の部分が「左辺値が必要」といわれてしまいます。
どうやったら文字列を格納できるのでしょうか?
0895デフォルトの名無しさん
2009/10/27(火) 21:10:430896デフォルトの名無しさん
2009/10/27(火) 21:12:360897デフォルトの名無しさん
2009/10/27(火) 21:14:53ありがとうございます。
配列=配列ができないのと同じ原理なんですね。
0898デフォルトの名無しさん
2009/10/27(火) 22:46:47char (*b)[8];
この違いを教えてください。
0899デフォルトの名無しさん
2009/10/27(火) 22:47:50すぐにUSB接続デバイスとか
作れそう。
0900デフォルトの名無しさん
2009/10/27(火) 22:54:26DDK次第
0901デフォルトの名無しさん
2009/10/27(火) 22:55:55カウンターの様な機械をC言語で作ってみたいと思っています。
コマンドプロンプト上で、Enterを押せば数字が増えていくというモノです。
Enterの入力があれば用意した変数に1を足して出力 とするプログラムはすぐに書けると思うのですが、
C:\>counter.exe
Enterの入力回数:1
Enterの入力回数:2
Enterの入力回数:3
・・・・
Enterの入力回数:100
の様な感じになると思います。
C:\>counter.exe
Enterの入力回数:XXX として、Enterを押せばXXXの部分の数字だけを書き換える
という事は出来るのでしょうか?
説明が下手なのですが、内容を察して教えて下さい。
もしよろしければコーディングまでよろしくお願いします。
0902デフォルトの名無しさん
2009/10/27(火) 22:58:310903デフォルトの名無しさん
2009/10/27(火) 23:03:20int main(void)
{
int counter=0;
while(1){
int c = getchar();
if(c=='\n'){
counter++;
}
system("clear");
printf("counter:%d\n", counter);
}
return 0;
}
※windowsならsystem("cls");
0904デフォルトの名無しさん
2009/10/27(火) 23:05:15非標準な事をすれば可能
環境を書いてくれないと無理
0905デフォルトの名無しさん
2009/10/27(火) 23:11:20#include<stdio.h>
#include<conio.h>
#define KEY_ENTER 0x0d
#define KEY_ESCAPE 0x1b
int main(void){
int count=0, key;
while(1){
key=getch();
if(key==KEY_ENTER) printf("\rEnterの入力回数:%d ", ++count);
if(key==KEY_ESCAPE) break;
}
return 0;
}
0906デフォルトの名無しさん
2009/10/27(火) 23:11:30本当はこうなってるんじゃないの?
C:\>counter.exe
Enterの入力回数:1
Enterの入力回数:2
Enterの入力回数:3
・・・・
Enterの入力回数:100
表示が本当に >>901 の通りなら入力にエコーが無いから
単に改行しなければ良いだけだろ
0907デフォルトの名無しさん
2009/10/27(火) 23:12:57これってCだと必須なんだ。
変数を宣言しないと
つかえないから。
0908894
2009/10/27(火) 23:17:53struct suji{
char moji[100];//文字列格納
int su[100];//数字格納用
};
int main(void)
{
____struct suji score[100];//100の構造体を用意
____FILE *fp;
____char *tp;
____char str[256];//ファイルの行を格納する配列
____int i=0,k=0;
____ if((fp= fopen("input.txt", "r")) == NULL)exit(1);
____________while( fgets(str,256,fp) != NULL)//ファイルの中身がなくなるまで
____________{;
/************文字列格納******************************/
________________tp=strtok(str,","); //文字列格納 tp=ポインタ
________________strcpy(score[i].moji , tp); //文字列コピー
________________printf("%s\n" , score[i].moji); //テスト表示
________________i++;//構造体を一つ進める
/***************数字格納******************************/
____________________while(tp!=NULL){//一行読みきるまで
____________________________score[i-1].su[k] = atoi(strtok(NULL , "," ));//i-1は上でi++してるため無効化する作業
____________________________printf("%d\n" , score[i-1].su[k] ); //テスト表示
____________________________k++;
____________________}
_____________}
___________fclose(fp);
___________return 0;
}
0909894
2009/10/27(火) 23:18:57input.txtには、文字列,数字1,数字2・・・,数字n(文字列は行の先頭に一つだが、数字はいくつでも可能)といった形式で入っています。
このプログラム、コンパイルは正常にできますが実行するとエラーで強制終了となります。
何がおかしいかご教授ください。
CSVファイルが
aiueo,10,23,53,55,60
kakikukeko,22,33
の2行だったら格納後、適当なメンバを参照すると
score[0].enzan=aiueo
score[0].su[0]=1
score[0].su[1]=2
score[1].enzan=kakikukeko
score[1].su[1]=33
という具合になる予定です。
0910デフォルトの名無しさん
2009/10/27(火) 23:20:25score[0].su[1]=23
の間違いです。
0911デフォルトの名無しさん
2009/10/27(火) 23:23:32全然違う。後者に使い道はない。
0912デフォルトの名無しさん
2009/10/27(火) 23:28:16「定義域 -1.5<=x<=1.5の時
関数 y=3x^3-0.2x^2+0.3x-0.7
の値を出力するプログラムを作れ。
なお、xは-1.5から0.1刻みで増やすこと」
という問題なのですが、
↓のようなプログラムを実行させると
なぜか、x=1.5のときだけ出力されません・・・
0913つづき
2009/10/27(火) 23:28:59main()
{
float x, y, step;
x=-1.5;
step=0.1;
y=0.0;
while(x>=-1.5 && x<=1.5){
y=3.0*x*x*x-0.2*x*x+0.3*x-0.7;
printf("%4.1f %9.5f\n", x, y);
x = x + step;
}
}
ちなみに、
whileの中の条件式を
x>=-1.5 && x<1.6 (右の不等式のイコールをとって、1.6にしてみた)
とか
x>=-1.5 && x<=1.51
とかにかえると正しい結果が得られました。
どこで間違ってるのでしょう??
どなたかご教授願います
m(_ _)m
0914デフォルトの名無しさん
2009/10/27(火) 23:40:45使い道はある
(単純な二次元配列でも使うし固定長配列へのポインタを関数の引数にする場合にも使う)
>>898
>char *a[8];
char *a; が8個
char *a[8] = {"abcd", "ef", "gh", "ijkl", "mnopq", "rst", "uv", "wxyz"};
>char (*b)[8];
char [8]へのポインタb または char [8]がn個 の配列
char (*b)[8] = {"abcdefg", "1234567", "zyxwvut"};
0915デフォルトの名無しさん
2009/10/27(火) 23:41:31ピッタリでは判定できないことが多いよ。
0916デフォルトの名無しさん
2009/10/27(火) 23:46:560917デフォルトの名無しさん
2009/10/27(火) 23:49:580.1を正確に表せないから。
step=0.1;
としても、0.1よりちょっとずれた値になるので、何度も足してると誤差が蓄積する。
誤差少なくするなら、
double x;
int n;
for(n = 0; n <= 30; n++){
x = -1.5 + n*0.1;
...
}
みたいな。
0918デフォルトの名無しさん
2009/10/28(水) 00:16:08へぇ〜
そんな話、聞いたことありませんでした!!
ありがとうございました!!
ところで、
どうして、その1次関数で
誤差を少なくすることができるのでしょうか??
何度も何度も聞いてしまってスイマセン・・・
m(_ _)m
0919デフォルトの名無しさん
2009/10/28(水) 00:27:33型が違う。
aはcharを指すポインタの配列(要素数は8)
bはcharの配列(要素数8)を指すポインタ
aに+1するとsizeof(char*)増加(32ビット環境なら通常4)
bに+1するとsizeof(char[8])増加(8)
0920デフォルトの名無しさん
2009/10/28(水) 00:30:01>配列=配列ができないのと同じ原理なんですね。
というか、文字列リテラル("aaaaaaaa")の型はconst charの配列
なので、問題の箇所は「配列=配列」そのもの。
0921デフォルトの名無しさん
2009/10/28(水) 00:35:35>>898
>全然違う。後者に使い道はない。
いやいや、普通にあるでしょ。
char a[N][8];
を引数にとる関数の仮引数の型がそう。
0922デフォルトの名無しさん
2009/10/28(水) 01:10:00char *(b[8]);
じゃないの?
0923デフォルトの名無しさん
2009/10/28(水) 01:28:14fclose(func(fopen(fname,"r")));
みたいに出来ないから困る。
free(func(malloc(s)));
ならできるのにな。
0924デフォルトの名無しさん
2009/10/28(水) 01:36:53演算子の優先順位で覚えればいいと言いたい所だけど、
*は、演算子では無くポインタ宣言子なわけで、
(ついでに言うと、[]もここでは演算子でないのよ、優先順位は、高 () > [] > * 低)
でも、間接参照するときは、(*b)[i]のようにしないと演算子の優先順位があって、
いや、何というかね
char *(b[8]);は、bに[]が付いているから、bは配列、それに*が付いているから、ポインタの、型はcharである。
つまり、bは、char型のポインタの配列と解釈されるわけで。b is array[8] of pointer to char.優先順位の高い方から低い方へ。
まぁ、『Cの強化書』とか『エキスパートCプログラミング』でも読めばいいよ。
0925デフォルトの名無しさん
2009/10/28(水) 01:43:12int myfclose(FILE *stream)
{
if(NULL == stream)
return 0;
else
return fclose( stream );
}
0926デフォルトの名無しさん
2009/10/28(水) 01:47:22標準関数を直呼びすることはあまり無くなった
int safe_fclose(FILE *f) {
if ( f == NULL ) {
return 1;
}
return fclose(f);
}
戻り値を何にするかちょっと悩んだ。
0927デフォルトの名無しさん
2009/10/28(水) 01:57:14#include <time.h>
#include <Windows.h>
int main(void){
time_t timer;
struct tm *t_st;
while(1){
time(&timer);
printf("現在時刻: %.24s\r", ctime(&timer));
Sleep(1000);
}
}
このプログラムで、Ctrl+Cの強制終了ではなく、Escapeなどできれいにプログラムを終了させるには
どうしたら良いでしょうか?
0928デフォルトの名無しさん
2009/10/28(水) 01:59:43doubt
0929デフォルトの名無しさん
2009/10/28(水) 02:01:57getchでESC押されたか判定して抜けると良いんじゃない
0930デフォルトの名無しさん
2009/10/28(水) 02:03:00escapeがきれいだとは思わない
0931デフォルトの名無しさん
2009/10/28(水) 02:04:04OSに大麻イベントをセットしてWM_TIMERで読んでもらえばいいじゃないか。
え?ミリ秒単位で制御したいの?
どっかのスレで誰かが副作用で暴れてたなぁ。
0932デフォルトの名無しさん
2009/10/28(水) 02:13:11#include <stdio.h>
#include <time.h>
#include <Windows.h>
#include <conio.h>
int main(void){
time_t timer;
struct tm *t_st;
while(1){
time(&timer);
printf("現在時刻: %.24s\r", ctime(&timer));
Sleep(1000);
while(kbhit()){
if(getch()==0x1b)break;
}
}
}
0933デフォルトの名無しさん
2009/10/28(水) 02:14:190934927
2009/10/28(水) 02:17:14#define KEY_ESCAPE 0x1b
int key;
while()1{
key=getch();
if(key==KEY_ESCAPE) break;
・・・・・
}
としてみたのですが、何かキーを押さないと時刻を更新しなくなります。
>>930
そうですよね。
強制終了ではなく、キー入力でwhileから抜けて処理終了を「きれい」と言っていました。
>>931
全く知識がないので、sleep使えば手っ取り早くできるかなと思いまして・・・・
0935デフォルトの名無しさん
2009/10/28(水) 02:19:18#include <time.h>
#include <Windows.h>
int main(void){
time_t timer;
struct tm *t_st;
while(1){
while(!_kbhit()){
time(&timer);
printf("現在時刻: %.24s\r", ctime(&timer));
Sleep(1000);
}
if(_getch()==0x1b)break;
}
}
0936デフォルトの名無しさん
2009/10/28(水) 02:23:55#include <stdio.h>
#include <time.h>
#include <Windows.h>
#include <conio.h>
int main(void){
time_t timer;
struct tm *t_st;
do{
while(!_kbhit()){
time(&timer);
printf("現在時刻: %.24s\r", ctime(&timer));
Sleep(1000);
}
}while(_getch()!=0x1b);
return 0;
}
こうだろ。
0937927
2009/10/28(水) 02:37:30もしお時間があれば、>>931さんの言うタイマーイベントを使ったプログラムのサンプルをお願いします。
私の環境はWinVista
コンパイラ:Borland C++ 5.5.1
です。
よろしくお願いします。
0938デフォルトの名無しさん
2009/10/28(水) 02:43:07_kbhit() → kbhit()
_getch() → getch()
に置き換えだな。
MicroSoft は非標準には '_' を付けてる。
0939デフォルトの名無しさん
2009/10/28(水) 02:44:59それを受け取るウィンドウが必要だぞ。
0940デフォルトの名無しさん
2009/10/28(水) 02:48:350941デフォルトの名無しさん
2009/10/28(水) 02:49:22このスレもC++拒否じゃなくて、無保証対応で
良くね?
0942デフォルトの名無しさん
2009/10/28(水) 03:09:06#include <stdio.h>
#include <time.h>
#include <Windows.h>
VOID CALLBACK tp(HWND hwnd, UINT u, UINT_PTR p, DWORD dw){
time_t timer;
struct tm *t_st;
time(&timer);
printf("現在時刻: %.24s\r", ctime(&timer));
}
int main(void){
SetTimer(0,0,1000,tp);
while(getch()!=0x1b);
return 0;
}
0943デフォルトの名無しさん
2009/10/28(水) 04:53:52その本には char (*b)[8]がポインタの配列であると書いてるの?
そうなら子供の落書き帳にでもしちゃいなよ
0944デフォルトの名無しさん
2009/10/28(水) 04:55:35途中から char *(b[8])の話になってる。すまんこ。
0945デフォルトの名無しさん
2009/10/28(水) 08:04:040946デフォルトの名無しさん
2009/10/28(水) 23:03:47> () > []
アホ
0947デフォルトの名無しさん
2009/10/28(水) 23:38:34なんとなくカンテーレ
0948921=919
2009/10/29(木) 00:24:38なんか、違う人間が同じ問にレスしてわけわかになっていますな。
>ならなんで
>char *(b[8]);
宣言子においては*と[]では[]の方が結びつきが強いので
char *b[8];
と
char *(b[8]);
は同じ。
かえって混乱するかもしれないけど『関数の仮引数の宣言部では』
void func(char b[N][8]);
void func(char b[][8]);
void func(char (*b)[8]);
は全て同等。
ついでに上のbと下のcは別物。下の宣言同士は全て同等
void g(char *c[N]);
void g(char *c[]);
void g(char **c);
>924さんはもちろん理解していると思うけど、
>間接参照するときは、(*b)[i]のようにしないと
いやそこは普通はb[0][i]になるよね。
0949デフォルトの名無しさん
2009/10/29(木) 00:56:38ざっと見て2つほど明らかなバグがあるけど面倒なので詳細は説明しない。
・2つ目のwhileの条件
・k
デバッガの使い方を覚えて1行ずつトレースしてみるのいいと思うよ。
0950デフォルトの名無しさん
2009/10/29(木) 02:19:12> >間接参照するときは、(*b)[i]のようにしないと
> いやそこは普通はb[0][i]になるよね。
ケースバイケースじゃないか?
0951デフォルトの名無しさん
2009/10/29(木) 11:05:30ある文字列について、任意のn番目の文字からx文字だけ参照したいときにはどんな関数を使えばよいのでしょうか?
strcpyやstrncpyでは先頭からしか見ることができないので困っています。
//////////////////////////////
char STR[]
char Buf[]
sprintf( Buf ,"123,456\0");
//////////////////////////////
このようなコードがあるときにSTRにBufの5文字目から7文字目まで(456)だけ
コピーするにはどうすれば…
任意のトークンで区切れるstrtokも状況によっては使えそうなのですが
挙動が分からずNullエラーになってしまったりして安定しません…
0952デフォルトの名無しさん
2009/10/29(木) 11:10:07sprintf(Buf, "123,456\0"+4);
0953デフォルトの名無しさん
2009/10/29(木) 11:12:24char *str = "123,456\0";
int start = 5;
int end = 7;
sprintf(Buf, "%.*s", end - start + 1, str + start - 1);
0954デフォルトの名無しさん
2009/10/29(木) 11:24:15>>952のも>>953のもどちらも実行結果は正しいのですが
肝心の何故こうなるのかが理解できてません。ダメジャンorz
>>952の方のはsprintf関数の挙動を調べればなんとなく分かりそうなのですが(文字列操作に+4って何事?状態)
>>953のお方のは正直何が起こっているのかさっぱりです。ポイン・・・タ・・・?
とにかくとっかかりは掴めたのでもう少し調べてみようと思います。ありがとうございました
0955デフォルトの名無しさん
2009/10/29(木) 11:27:00正直、ポインタの理解なしに文字列操作は厳しいと思う
0956デフォルトの名無しさん
2009/10/29(木) 11:32:45>Buf+4 は &Buf[4] と同じ
だということを今知ったレベルでした。
ポインタはなんとなーく概念的にはつかんでいるものの使いこなすには至らず逃げてばかりだったので…
ネットワーク間でデータをやりとりしたいため文字列操作に手を出さざるを得なくなったのですが
ポインタの基礎から把握していないと駄目っぽいですね…
0957953
2009/10/29(木) 11:37:57char str[10];
strcpy(str, "123,456");
sprintf(Buf, "%.3s", str[5-1]); /* 5文字目の添え字は4 */
0958951
2009/10/29(木) 11:47:59お恥ずかしながらフォーマット指定子で .[整数] ってなんだっけ…レベルです。
そして%sでstr[4]を指定すると何故5文字目以降が参照されるのかもしっかり把握していません。
後者は
sprintf(Buf,"%s",str);
は str[0]から\0にぶつかるまで参照していたということなのでしょうか。
とにかく、今やってみたおかげで>>957に類するコードを入力したら
何故かは知らないけどこうなる!というのが分かる状態になりました…
がそんなんでは使いものになりませんよね
0959デフォルトの名無しさん
2009/10/29(木) 11:52:29プログラムは向いていない。
0960デフォルトの名無しさん
2009/10/29(木) 11:53:180961デフォルトの名無しさん
2009/10/29(木) 12:02:16本なりサイトなりで勉強し直すのが一番早そうですね。
丁寧に教えて下さった方、ありがとうございました。
\0を手動で入れていたのは、
ネットワークから送り込まれてくるデータがバッファに際限なく溜まっていってしまうため
区切りとして入れたのですがきっとそんなことになってしまう時点で何かがおかしいんですねわかります。
0962953
2009/10/29(木) 12:08:20%[整数1].[整数2]s
と書くと、最低でも[整数1]幅、最大でも[整数2]幅という指定になる
最低幅に足りない場合は先頭にスペースが埋められ、最大幅を超えた部分は切り捨てられる。
ネットワーク間でのデータやりとりだと、最大幅に足りない場合は後ろにスペースを埋めたいという
ニーズもあるかと思う。
その場合は
%-[整数1].[整数2]s
とすればいい。
そのうち慣れるからがんばれ。
0963デフォルトの名無しさん
2009/10/29(木) 12:15:15ネットワークから流れてくるものは文字列ではない。あれは只のバイト列だ。
と言う意識がないといつまでもカスみたいなコードしか書けないよ。
# 某SIerのプロパーがまさしくそれなんだが……
神経質な人は、文字列で扱うときはcharでバイト列として扱うときは(unsigned charをtypedefした)BYTEにしているくらいだ。
# それはそれで、文字列系の標準関数を使うたびにキャストする必要があるので時としてあれだけど。
0964デフォルトの名無しさん
2009/10/29(木) 12:18:29?
バッファに際限なくたまるというのは確かにそうなってる時点でなんか変だと思う。
recv近辺のコードを上げてくれたらなんか分かるかも。
0965951
2009/10/29(木) 12:27:47なるほど、覚えておくと見やすくなるだけでなく色々活用できるんですねえ…
>>963
今まで平気で文字列として扱ってきたのですがバイトだったのですか!
…それを知ったところで今すぐ何かが変わるわけじゃないのが不勉強なところですが
保存したレスをいつか発掘したら意味がちゃんと分かるようになってるといいなあ…
>>964
相談したいのは山々なのですが
ネットワーク周りはDXライブラリの関数を使用しているので
ここだとスレ違いな気がするのです。
0966デフォルトの名無しさん
2009/10/29(木) 12:40:43念の為に捕捉。
>963は、ナル文字で終端されていることがはっきりしている場合を文字列と言っている。
終端されていないものにはstrlen()やstrcpy()などの関数が使えないから、意識しておかないとね。
だからと言って、受信バッファより多めにメモリを確保して事前にクリアするなんてのは下策。
尚sprintf()の場合は、>962にあるようにサイズ制限ができるからバイト列に対しても使えなくはない。
0967デフォルトの名無しさん
2009/10/29(木) 12:46:22> >>963は、ナル文字で終端されていることがはっきりしている場合を文字列と言っている。
別に>>963がどうとかじゃないよね。
Cにおける文字列の定義の話でしょ。
0968デフォルトの名無しさん
2009/10/29(木) 13:02:58異論避け。それほど他意はない。
0969デフォルトの名無しさん
2009/10/29(木) 14:38:260970デフォルトの名無しさん
2009/10/29(木) 14:43:03puts("3 6 9 12 13 15 18 21 23 24 27 30 31 32 33 34 35 36 37 38 39");
0971デフォルトの名無しさん
2009/10/29(木) 14:44:44#include <stdio.h>
#include <string.h>
int main(void) {
int i;
char buf[32];
for(i = 1; i <= 40; i++) {
sprintf(buf, "%d", i);
if (i % 3 == 0 || strchr(buf, '3') != NULL) {
printf("%d\n", i);
}
}
return 0;
}
0972デフォルトの名無しさん
2009/10/29(木) 15:59:09#include <stdio.h>
#include <unistd.h>
int main()
{
char a[100];
*a = crypt("hogehoge", "EV");
printf("%s", a);
return 0;
}
crypt関数について調べようと思ってこんなん作ったんだけどaに何も入らないのはなぜ?
crypt関数自体がアレなのかなと思って
int main()
{
char a[100];
printf("%s", crypt("hogehoge", "EV"));
return 0;
}
を試しに実行してみたけどこれはまともに動いた。
0973デフォルトの名無しさん
2009/10/29(木) 16:12:200974デフォルトの名無しさん
2009/10/29(木) 16:19:50char a[100]; の時、a は &a[0] と同じ
つまり、*a はa[0]と同じ
a[0] = crypt・・・
が変なのはわかるだろ。
strcpy使え。
0975デフォルトの名無しさん
2009/10/29(木) 16:22:14は
a[0] = (char)crypt("hogehoge", "EV");
と同じ
0976デフォルトの名無しさん
2009/10/29(木) 16:49:460977デフォルトの名無しさん
2009/10/29(木) 16:57:47英語配列に変えてみた、、がまだ慣れない。
0978デフォルトの名無しさん
2009/10/29(木) 17:53:51プログラミングとタッチタイピングを同時に学ぼうと言うのがそもそも間違い。
プログラミングは、基本的にキー入力速度が速い必要はないからね。
0979デフォルトの名無しさん
2009/10/29(木) 18:11:080980デフォルトの名無しさん
2009/10/29(木) 20:11:55char aの上位4バイトに 64以下の整数char bを代入したい場合、
(a & 0b00001111) + (b << 4)
でできるのはわかるのですが、
もっと単純な表記方法はあるでしょうか?
0981デフォルトの名無しさん
2009/10/29(木) 20:14:17ローマ字覚える前にタッチタイピングマスターしちまったなぁ
最近出た第二弾はわからんがタイピング覚える気ならゾンビ打マジおすすめ
本当の意味でゲーム感覚で覚えられるタイピングソフト
他にもいろいろタイピングソフトやってみたがまともなのはこれしかなかった
スレチごめんね
0982デフォルトの名無しさん
2009/10/29(木) 20:17:20union {struct {unsigned ah:4; unsigned al:4} s; char c} a;
として
a.s.ah = b;
と書ける。
或いは、
a = (a % 16) + (b * 16);
とも書ける。
いずれの場合も、bが16以上の場合は破綻する。
0983デフォルトの名無しさん
2009/10/29(木) 20:18:43>char aの上位4バイトに 64以下の整数char bを代入したい場合、
char aの上位4ビットに 15以下の整数char bを代入したい場合、
の書き間違いかな?
0984デフォルトの名無しさん
2009/10/29(木) 20:19:17charの上位4バイトってなんだよpgr
0985980
2009/10/29(木) 20:19:56どうも
4ビットって64じゃなくて16でしたね…
こんなんでビット演算とかやらない方が安全か
C言語なら俺に聞け(入門篇) Part 55
http://pc12.2ch.net/test/read.cgi/tech/1256818218/
0987デフォルトの名無しさん
2009/10/29(木) 22:10:01「こんなんで・・・」はないと思うぞ。
1ビットでも必要な時はビット演算をする。
そもそも何のためにやるのかだよね。
0988デフォルトの名無しさん
2009/10/29(木) 23:37:27プ
0989デフォルトの名無しさん
2009/10/29(木) 23:47:580990デフォルトの名無しさん
2009/10/29(木) 23:52:11まあ、うっかりミスだろうから指摘するまでもないが。
0991デフォルトの名無しさん
2009/10/30(金) 00:56:33そのunionの使い方って厳密には保証されないんじゃないっけ?
0992デフォルトの名無しさん
2009/10/30(金) 00:58:540993デフォルトの名無しさん
2009/10/30(金) 08:44:31上下どちらのビットから割り付けるかは処理系定義なので
移植性はないけどもどっちかに決まっているはず。
0994デフォルトの名無しさん
2009/10/30(金) 09:46:080995デフォルトの名無しさん
2009/10/30(金) 09:50:06処理系によっては、妙な割り付け方をするかもしれないね。
0996デフォルトの名無しさん
2009/10/30(金) 10:02:190997デフォルトの名無しさん
2009/10/30(金) 10:04:350998デフォルトの名無しさん
2009/10/30(金) 10:18:54>957のことなら、& str[5 - 1]だ。
0999デフォルトの名無しさん
2009/10/30(金) 10:18:591000デフォルトの名無しさん
2009/10/30(金) 10:21:4110011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。