C言語なら俺に聞け(入門編)Part 81
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2011/04/03(日) 04:42:00.73★前スレ
C言語なら俺に聞け(入門編)Part 80
http://hibari.2ch.net/test/read.cgi/tech/1299649237/
★過去スレ
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
★教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 147代目
http://hibari.2ch.net/test/read.cgi/tech/1301553333/
★C++言語については避けてください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
# サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
★ぬるぽ。
長くなりそうなコードはcodepadに貼り付けてもいいでしょう
http://codepad.org/
0002デフォルトの名無しさん
2011/04/03(日) 04:42:59.86依頼者は心のそこから詫びて自殺してください
0003デフォルトの名無しさん
2011/04/03(日) 04:59:58.050004デフォルトの名無しさん
2011/04/03(日) 05:03:13.79ツンデレたん。乙
がっ
0005デフォルトの名無しさん
2011/04/03(日) 09:37:49.52>★分からない事をなるべく詳しく書いて下さい。
「何が判らないのかをできるだけ詳しく」。
分からないことは詳しく書けない。
0006デフォルトの名無しさん
2011/04/03(日) 10:28:49.22#include <stdio.h>
#include "func.h"
int main(void)
{int a = func();printf("%d\n", a);return 0;}
「func.c」
#include <stdio.h>
#include "func.h"
int func(void)
{int a;printf("input number: ");scanf("%d", &a);return a;}
「func.h」
int func(void);
単品のファイルに書いた場合はエラー無くコンパイルできます。
vcvars32.batを実行した後[cl test.c func.c]を実行すると以下のエラーがでてコンパイルできません。
/out:test.exe
test.obj
test.obj : error LNK2019: 未解決の外部シンボル _func が関数 _main で参照されまし
た。
test.exe : fatal error LNK1120: 外部参照 1 が未解決です。
0007デフォルトの名無しさん
2011/04/03(日) 10:30:27.59...
} hoge_t;
のように書いているサイト様が多いのですが、この"_t"はtypedefの意味ですか?
0008デフォルトの名無しさん
2011/04/03(日) 10:34:34.81VisualStudioスレへ。恐らくC++としてコンパイルされているんでしょう。
>>7
単に「type」かと。
0009デフォルトの名無しさん
2011/04/03(日) 10:42:02.38そちらのスレで聞いてみます
0010デフォルトの名無しさん
2011/04/03(日) 10:43:57.87ありがとうございます。
0011デフォルトの名無しさん
2011/04/03(日) 18:57:22.76int *t; int s;
t=&s;
とすると
tとsが表すアドレス番地は一緒ですか?
printf("%u",&t);�@
printf("%u",&s);�A
�@�Aは一緒ですか?
0012デフォルトの名無しさん
2011/04/03(日) 19:02:56.570013デフォルトの名無しさん
2011/04/03(日) 19:16:40.17#include <time.h>
int main(void)
{
int cpu;
int i;
int result;
int user;
printf("0:グー\n1:チョキ\n2:パー\n");
scanf("%d", &user);
srand((unsigned)time(NULL));
cpu = rand() % 3;
result = (user - cpu) % 3;
switch (result)
{
case 0: // あいこ
printf("あいこ!");
break;
case 1: // 負け
printf("負けました。。");
break;
case 2: // 勝ち
printf("勝ちました!!");
break;
default:
printf("resultの値がおかしいですよ?\nresult=%d\nuser=%d\ncpu=%d\n", result, user, cpu);
break;
}
}
0014デフォルトの名無しさん
2011/04/03(日) 19:19:07.69おそらく違うと思うんですね。
tはsを操作するための拠点アドレスがあり、t*==&sは実際にsの場所でしょう。
printf("&u",&t)とprintf("%u",&s)は違う値が出力されると思います。
0015デフォルトの名無しさん
2011/04/03(日) 19:20:59.24resultの値が-1になってしまうのですが原因は何故なんでしょうか?
0あいこ
1まけ
2かち
0グー
1チョキ
2パー
(0-0)%3=0 あいこ
(0-1)%3=2 勝ち
(0-2)%3=1 負け
(1-0)%3=1 負け
(1-1)%3=0 あいこ
(1-2)%3=2 勝ち
(2-0)%3=2 勝ち
(2-1)%3=1 負け
(2-2)%3=0 あいこ
0016デフォルトの名無しさん
2011/04/03(日) 19:46:36.400017デフォルトの名無しさん
2011/04/03(日) 20:52:53.020018デフォルトの名無しさん
2011/04/03(日) 21:17:16.50すうがくでいう余りは、除数、被除数のいずれかが負のときは文脈定義だし、 C の % も、最小非負剰余であるか絶対値最小剰余であるか、あるいはそれ以外になるかどうかは(仕様書にははっきり書かれていないが)処理系依存だった記憶があります。
0020デフォルトの名無しさん
2011/04/03(日) 21:55:38.95一つのプログラムがを複数の c ファイルで構成されるときに威力を発揮します。
0022デフォルトの名無しさん
2011/04/03(日) 22:12:21.80a.outって何でしょう?
実行ファイルがtの場合
t a.outとするのでしょうか?
0023デフォルトの名無しさん
2011/04/03(日) 22:33:22.16>a.outって何でしょう?
コンパイル時の伝統的な出力先
>実行ファイルがtの場合
>t a.outとするのでしょうか?
a.exeなら「t a.exe」で実行するのか?
なら、それで良いと思われ
0024デフォルトの名無しさん
2011/04/03(日) 22:33:31.63配列を表すときはint char何ですか?
int pip[]="ABCD";
としてはダメなのでしょうか?
配列とは具体的にどういうのを配列というのですか?文字列も配列だし
int[]={1,2,3};
も配列だそうです。
0025デフォルトの名無しさん
2011/04/03(日) 22:35:40.45a.outのaは何を表すのですか?
a.exeのaは実行プログラムの名前ですから
t.exeでもk.exeでもいいんですよね?
0026デフォルトの名無しさん
2011/04/03(日) 22:49:24.04signed char ならありうると思います。
単に
char c;
と宣言したときに、signed char、 unsigned char のどちらになるかは、処理系依存だったはずです。
0028デフォルトの名無しさん
2011/04/03(日) 22:58:10.52char s[] = "abc";
は、
char s[] = { 'a', 'b', 'c', '\0' };
の特別な表現(便宜上設けた表現)である。‥‥�@
ということだけ、理屈ぬきに丸暗記しておけばいいと思います。
どんな型の配列でも、その宣言と初期化は
int a[3] = { 1, 2, 3 };
double b[3] = { 3.1415926, 2.71828, 0.57721566 };
と書くのが基本です。‥‥�A
>int pip[]="ABCD";
�@でも�Aでもないので不可です。
0030デフォルトの名無しさん
2011/04/03(日) 23:06:43.39aはassemblerのa
ぶっちゃけunixつーかリンカができる前の遺物
0031デフォルトの名無しさん
2011/04/03(日) 23:07:38.24>a.outのaは何を表すのですか?
つ ttp://ja.wikipedia.org/wiki/A.out%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88
>a.exeのaは実行プログラムの名前ですから
>t.exeでもk.exeでもいいんですよね?
t.outでもk.outでも構わんぞ
0032デフォルトの名無しさん
2011/04/03(日) 23:19:33.33charって文字型ですよね。
char s[]={'0','1','2,'3'};として
sの文字を出力すると
char整数 0 1 2 3に対応する文字コードの列が出てくるんですか?
DEFGみたいに。
0033デフォルトの名無しさん
2011/04/03(日) 23:58:10.940034デフォルトの名無しさん
2011/04/03(日) 23:58:25.43C言語に文字型という型は存在しない。
(charはただ単に符号有り1byte型って事。)
質問にある文字コード列が出るか?は、恐らくprintfを使うと思うので、
char s の値を、数値として出力するか文字として出力するか、で変わるよ。
下に適当なサンプル載せました。試してみてちょ。
int main(void)
{
char test[5] = "11230";
char i;
printf("CPU値:");
for( i = 0 ; i < 5 ; i++ )
{
printf( "%d", test[i]); /* ←数値として出力 */
}
printf("\n\n文字列:");
for( i = 0 ; i < 5 ; i++ )
{
printf( "%c", test[i]); /* ←文字として出力 */
}
}
int array[] = {1, 2, 3,};
と言った要領で書けばいい。
試してみました。
http://codepad.org/8oBxBbVn
0037デフォルトの名無しさん
2011/04/04(月) 00:02:16.50string型ってありませんか?
%sとすると文字列が出てきますよ?
0038デフォルトの名無しさん
2011/04/04(月) 00:02:49.68バックスラッシュでエスケープするのは
間抜けに見えるな。
0039デフォルトの名無しさん
2011/04/04(月) 00:04:10.38>>>34
>string型ってありませんか?
>
ねぇよ。
>%sとすると文字列が出てきますよ?
だから何?
0040デフォルトの名無しさん
2011/04/04(月) 00:05:38.06文字型はある事の証明。
string 型というのは厳密には c にはありません。
printf の %s は、
与えられた数値を特定のアドレスとみなし、そのアドレスから先にいずれ '\0' が格納されているアドレスがあるものと仮定して、
与えられたアドレスから '\0' が格納されているアドレスまでのあいだのアドレスの内容を(文字を示すものと仮定して)全部表示する、
というだけです。
これを文字列型、というのなら、あるいはそう考えていいかもしれませんが、巷の言語の「文字列型」と比べると制限がいろいろときついのです。
0042デフォルトの名無しさん
2011/04/04(月) 00:09:06.4316進数型とか8進数型もあるんだね?
ご指摘感謝。
0044デフォルトの名無しさん
2011/04/04(月) 00:09:49.02つまり文字型があるとまた違った事ができるんですね。
0045デフォルトの名無しさん
2011/04/04(月) 00:13:34.31書式指定子には%%もあるんだ。
まさか、こいつをパーセント文字型なんて言う訳ないだろが。
文字列型なる変数に自由に文字列を代入したり、文字列と文字列を連結したり、
といったことは、C では制限付き、いいかえるといろいろと下工作した上でやっと可能になります。
java や ruby の文字列型のようには C は自由にはできません。
だから「C には文字列型はない」と考えたほうが無難です。
0047デフォルトの名無しさん
2011/04/04(月) 00:17:35.25理解しました^^
0048デフォルトの名無しさん
2011/04/04(月) 00:42:18.15だめなんですか?
int main(int 3 , int t )とかint main(int argc, char *argc, float argt)
とかだめなんですか?
0049デフォルトの名無しさん
2011/04/04(月) 00:47:08.26そもそも、その引数を、どうやってmain()に与えるつもりだ?
0050デフォルトの名無しさん
2011/04/04(月) 00:52:24.81端末のコマンドラインから入力します。
どのサイトでもint main(int argc,char *argv[])となってた。
デフォですか?
0051デフォルトの名無しさん
2011/04/04(月) 00:52:42.72あなたがどのように書いたところで、
mainの外からやってくる引数が変わるわけではありませんよ
0052デフォルトの名無しさん
2011/04/04(月) 00:59:49.040053デフォルトの名無しさん
2011/04/04(月) 01:02:49.80t='3';
と
t=3;
と
t="3";
は全部可能ですか?
0054デフォルトの名無しさん
2011/04/04(月) 01:04:16.18main() はコマンドラインから直接呼ぶ為の物ではなくて、
プログラム実行のお膳立てをしている OS さんが呼ぶ為の
インターフェイスだから、形式は固定です。
プログラムが実行されたら直ぐに main 関数が実行されると
思うかもしれませんが、実際には main が呼び出される前に
メモリの用意やライブラリのロード等、沢山の処理が実行
されます。
0055デフォルトの名無しさん
2011/04/04(月) 01:05:07.83どんな内容のプログラムを作りたいかによって、
プログラムの外から引数を与えたいこともありますし、
そんなことをする必要がないこともあります
0056デフォルトの名無しさん
2011/04/04(月) 01:05:21.63>t='3';
可能です。t には '3' という文字の文字コードが入ります。
>t=3;
可能です。t には 3 が入ります。
>t="3";
不可能です。
0057デフォルトの名無しさん
2011/04/04(月) 01:14:53.30int t;
t='3';
printf("%d",t)=??
それとも
int t;
t='3';
printf("%c",t)=??
??には何が?
0058デフォルトの名無しさん
2011/04/04(月) 01:15:04.32嘘はイカンぜよ
>t="3";
"3"へのポインタをint型にキャストした結果が入ります。
0059デフォルトの名無しさん
2011/04/04(月) 01:17:10.90文字の文字コードって何でしょう?
文字=文字コードですか?
'3'の文字コードは3?
よく分かりません。
0060デフォルトの名無しさん
2011/04/04(月) 01:17:13.51printf()に代入は出来ません。
出力結果という意味なら両方「3」が表示されます。
0061デフォルトの名無しさん
2011/04/04(月) 01:23:51.53'3'の文字コードが何なのか分からなくても問題ありません。
数値を表示したいときに"%d"を指定する。
文字コードを表示したいときに"%c"を指定するなど、ルールを覚えて下さい。
int t;
t = 3 + 3;
printf( "%d\n", t ); // 6が表示される
t = '3' + '3'; // 文字コード同士を足しても意味のある値にはならない
printf( "%c\n", t ); // 何が表示されるか分からないので↑はやっちゃ駄目
0062デフォルトの名無しさん
2011/04/04(月) 02:09:15.800063デフォルトの名無しさん
2011/04/04(月) 03:06:01.70別にオブジェクト指向っぽく書かなかったとしても、
とりあえずcppにしておけば、少なくともコメントで//が使えたり
変数の宣言が自由な位置で出来たり、bool型やデフォルト引数使えたり
純粋に言語の機能があがって良いと思うんだけどな。
0064デフォルトの名無しさん
2011/04/04(月) 03:11:51.07当然知ってると思うけど、大抵の C コンパイラなら // コメントとか
自由な変数の位置とかサポートしてるんだぜ
0065デフォルトの名無しさん
2011/04/04(月) 03:20:29.04.cpp にするくらいなら .m の方がマシだわあ。
わざわざスマフォで使えないマニアック言語を使う理由は無いね。
0066デフォルトの名無しさん
2011/04/04(月) 03:30:57.47もちろん知ってるが、//コメントを書くたびに心にちくっとこない?
gccだと-ansiオプションでコンパイル出来なくなるし、変数宣言も
正確にはc99仕様であってfor(int i = 0;;)という表記は出来ないしね。
0067デフォルトの名無しさん
2011/04/04(月) 03:33:10.43もう直ぐ C1X も来るしね。
0068デフォルトの名無しさん
2011/04/04(月) 03:33:31.58拡張子をcで書いているくせに // コメント使ってるソースコードは
お前移植性のためにc言語にしているんちゃうんかと問い詰めたくなる
0069デフォルトの名無しさん
2011/04/04(月) 03:38:50.98・MSのVisual StudioはC99非対応(というかC++のみ対応でC言語すらない)
・gccを前提にしているプロジェクトは、C99どころかgcc拡張使いまくり(関数内関数とか)
・一般的なLinuxのオープンソースのコードはANSI-C完全準拠
C99で書くくらいならC++かANSI-Cにしろと思うけど。何の意味があるの?
0070デフォルトの名無しさん
2011/04/04(月) 03:42:55.89ベターCっすか
糞ですね
0071デフォルトの名無しさん
2011/04/04(月) 03:43:14.0021 世紀になってまで // コメントを使えないコンパイラを使ってるなんてお気の毒様。
ちなみどのコンパイラ使ってるの?
0072デフォルトの名無しさん
2011/04/04(月) 03:43:30.73gcc拡張よりGNU拡張が一般的な言い方だ。
よく「C99で書いてます」とか言うやついるけど、
ただのGNU拡張だったりすることは多いよな
何がC99の機能で何がGNU拡張か理解していない奴がほとんど。
>>67みたいなやつなw
0073デフォルトの名無しさん
2011/04/04(月) 03:44:21.63wwwwww
0074デフォルトの名無しさん
2011/04/04(月) 03:44:48.58見えない敵と戦うのはさぞ大変だろうな。毎日ご苦労。
0075デフォルトの名無しさん
2011/04/04(月) 03:47:17.14お前みたいなやつがMSの独自拡張に拍車をかけるんだろうな
0076デフォルトの名無しさん
2011/04/04(月) 03:48:14.59地獄のみさわさん、C99前提お疲れ様ーっす
0077デフォルトの名無しさん
2011/04/04(月) 03:48:20.13残念ながら君の脳内の敵とは違うようだ
0078デフォルトの名無しさん
2011/04/04(月) 03:50:04.260079デフォルトの名無しさん
2011/04/04(月) 03:50:46.65C との互換性は無くなるし、わざわざ過去の言語と心中する必要は無い。
0080デフォルトの名無しさん
2011/04/04(月) 03:54:00.69別にその意見は否定しないけど、
2行目が思いっきり矛盾してる気がするんだけどw
0081デフォルトの名無しさん
2011/04/04(月) 03:57:25.94君の中ではそうなんだろうな。そんな貴重な情報をわざわざ知らせてくれてありがとう。
0082デフォルトの名無しさん
2011/04/04(月) 03:57:47.53上にもあったけど、C99だとfor文の中での初期化が出来ないのがイケてないから
それだけのためにcppにすることがある
0083デフォルトの名無しさん
2011/04/04(月) 04:03:32.920084デフォルトの名無しさん
2011/04/04(月) 04:07:02.670085デフォルトの名無しさん
2011/04/04(月) 04:14:28.70>C99だとfor文の中での初期化が出来ないのがイケてないから
>それだけのためにcppにすることがある
?
http://en.wikipedia.org/wiki/C_syntax#Iteration_statements
0086デフォルトの名無しさん
2011/04/04(月) 04:16:28.56言いづらいけど、馬鹿なのを隠して口出さないでくれない?
0087デフォルトの名無しさん
2011/04/04(月) 04:21:11.56>C99だとfor文の中での初期化が出来ないのがイケてないから
>それだけのためにcppにすることがある
?
http://infocenter.arm.com/help/topic/com.arm.doc.dui0472c/BABBGFGB.html
0088デフォルトの名無しさん
2011/04/04(月) 04:22:49.03よく勘違いされるが、for文の中での変数宣言はc99では出来る。
gccでは出来ないんだが、最近のだと-std=c99オプションをつければ出来るはず。
GNU拡張とc99をごっちゃにするやつが多いのはこういうgccの挙動のせいなんだよな。
0089デフォルトの名無しさん
2011/04/04(月) 04:23:42.91??
0090デフォルトの名無しさん
2011/04/04(月) 04:24:00.74言葉も書けない馬鹿だって自己紹介は1度で十分です^^;
0091デフォルトの名無しさん
2011/04/04(月) 04:26:53.26知らなかった。GNUはデフォルトでC99だと思ってた。サンクス
0092デフォルトの名無しさん
2011/04/04(月) 04:28:57.54>C99だとfor文の中での初期化が出来ないのがイケてないから
>それだけのためにcppにすることがある
?
http://gcc.gnu.org/c99status.html
> new block scopes for selectionand iteration statements
0093デフォルトの名無しさん
2011/04/04(月) 04:32:03.31で?
0094デフォルトの名無しさん
2011/04/04(月) 04:32:07.410095デフォルトの名無しさん
2011/04/04(月) 04:32:47.220096デフォルトの名無しさん
2011/04/04(月) 04:33:45.110097デフォルトの名無しさん
2011/04/04(月) 04:34:12.950098デフォルトの名無しさん
2011/04/04(月) 04:34:57.00むしろC++とCの境界線をしらない、というのが正しい気がする
0099デフォルトの名無しさん
2011/04/04(月) 04:36:15.83悔しいのうw
0100デフォルトの名無しさん
2011/04/04(月) 04:37:19.640101デフォルトの名無しさん
2011/04/04(月) 04:38:20.21ああ、確かに C だけじゃなく C++ も知らないという可能性もあるね
0102906
2011/04/04(月) 04:38:51.64>>908
>初心者は余計なこと考える必要はない
確かにそうかもしれませんね。初めのうちは、こういうことを
考えなくても知らなくてもプログラミングに支障はなさそうですし。
でも、いつかこういうことを意識する時が来るかな? と思って
今のうちに質問してみました。
>>909
規格で決められていること、丁寧に教えていただきありがとうございました。
条件演算子の評価順序についても参考になりました。
0103デフォルトの名無しさん
2011/04/04(月) 04:38:57.130104デフォルトの名無しさん
2011/04/04(月) 04:39:49.07プロトタイプとしてのベターCならありだけど
最終的にcppなのにベターCってのはありえないなー
困惑するだけでしょ・・・
0105デフォルトの名無しさん
2011/04/04(月) 04:40:20.600106デフォルトの名無しさん
2011/04/04(月) 04:44:16.60クラス使ってたら許す、とかそんな感じ?
0107デフォルトの名無しさん
2011/04/04(月) 04:45:19.26俺もそう思うわ。どっちの言語のプログラマにとってもメンテし辛いコードが出来るだけ。
0108デフォルトの名無しさん
2011/04/04(月) 04:50:54.77それだけのためにcppにしてた人はC++と手が切れてよかったね!
0109デフォルトの名無しさん
2011/04/04(月) 04:58:41.88サジ加減はどうでもいいよ。
ただ、携わる人が不満を抱く事無く
明確な規則が設けられるのかと考えたとき
厳しいでしょって話。
0110デフォルトの名無しさん
2011/04/04(月) 05:04:04.88Linux関連のオープンソースもそうじゃない?使っていいのはGNU拡張までのはず。
そうでないプロジェクトがGNUもしくはApacheであれば是非教えてほしい。
ただでさえfor文初期化については歴史的に問題があったんだよ
初期のC++ではfor文の外までスコープが通った時代があって
for(int i = 0; i < 10; i++) { printf("%d\n", i); }
printf("%d\n", i); // エラーにならない
こんな感じ。今でもコンパイラオプションでこう出来るはず。
MSの場合はバージョンによって挙動が変わったりするので、MS死んでくれ。
だからGNU拡張ではfor文の初期化は導入されていない。
でも時代とともにいずれ導入されるのは間違いないだろう。
C99でしかコンパイル出来ないコードを書く奴は
オープンソースでもゴミ扱いされるから、
for文の中の初期化は今はやめておけ。
0111デフォルトの名無しさん
2011/04/04(月) 05:08:28.33C++ で例外を使ったコードを書く奴はゴミ扱いされる訳か
それはそれは大変ですなあw
ご苦労様なこってす
0112デフォルトの名無しさん
2011/04/04(月) 05:09:45.050113デフォルトの名無しさん
2011/04/04(月) 05:10:32.620114デフォルトの名無しさん
2011/04/04(月) 05:12:54.29・一人で書く分にはcppでもC99でもおk
・多人数のプロジェクトの場合はベターC的cppとかGNU拡張にないC99とかやめておけ
これだけの話だろ
0115デフォルトの名無しさん
2011/04/04(月) 05:14:51.76結論(>>114)が出たみたいだぞ。良かったな。
0116デフォルトの名無しさん
2011/04/04(月) 05:15:45.06とはいえ
C99でしかコンパイル出来ないプロジェクトもあるよね
楽なのは分かるけどそこを耐えて頑張って欲しいねぇ
>>111
for文の初期化式での宣言のみ可
それ以外はすべて不可
というベターC コーディング規約に比べたら天国ですね
0117デフォルトの名無しさん
2011/04/04(月) 05:22:18.46どっか他所行ってやってくれ
0118デフォルトの名無しさん
2011/04/04(月) 07:36:36.01コンパイルとまた違うんですか?
0119デフォルトの名無しさん
2011/04/04(月) 08:24:36.960120デフォルトの名無しさん
2011/04/04(月) 09:36:04.64する必要ないのですか?
0121デフォルトの名無しさん
2011/04/04(月) 09:38:40.15C++と互換性が無いから(でも、どこに互換性が無いかは知らない)。
だから何かと難癖付けてC99の普及を妨害しようとする。
0122デフォルトの名無しさん
2011/04/04(月) 09:41:32.80それともコンパイラですか?
0123デフォルトの名無しさん
2011/04/04(月) 09:42:33.24お前がそう思うんならそうなんだろう、お前ん中ではな
0124デフォルトの名無しさん
2011/04/04(月) 09:44:18.24WindowsじゃC++自体オワコンだから
ベターCとやらのためにC++にする理由なんて無いんだよね。
0125デフォルトの名無しさん
2011/04/04(月) 09:45:02.88main(int argc, char **argv, char **envp)
なんてのはあって処理系定義(規格違反でないことに注意)
処理系定義でないのが
main(int, char **) と main(void) だけで
それでたいていのサイトがこれで書いている
0126デフォルトの名無しさん
2011/04/04(月) 09:47:40.33でもオープンソースで採用されてない!不思議!
まぁぶっちゃけ、GNUでデフォルトの挙動がC99になった瞬間に
C99が普及してC90は終焉だと思うけどね。
あとVisual StudioはそもそもC言語をサポートしていない。C++のみ。
それでC99をサポートしないというのはちょっとフェアじゃない。
0127デフォルトの名無しさん
2011/04/04(月) 09:48:51.130128デフォルトの名無しさん
2011/04/04(月) 09:55:20.12bcc?メール?
0129デフォルトの名無しさん
2011/04/04(月) 09:56:54.25bccは良いんじゃないですか?
0130デフォルトの名無しさん
2011/04/04(月) 09:58:21.26まぁ実際のところbccは環境が良いですね。後はIntel Cとかかな。
bccはC++対応してC99非対応、Intel Cは部分対応(正式対応予定)
流れとしてはC++かC99か片方という感じなのかな
0131デフォルトの名無しさん
2011/04/04(月) 09:59:10.13最近はgccも速いけどね
0132デフォルトの名無しさん
2011/04/04(月) 10:00:20.500133デフォルトの名無しさん
2011/04/04(月) 10:07:19.200134デフォルトの名無しさん
2011/04/04(月) 10:08:56.77C++で行うことは可能?
0135デフォルトの名無しさん
2011/04/04(月) 10:12:56.090136デフォルトの名無しさん
2011/04/04(月) 10:20:13.96あります。詳しくはgccスレへ。
>>134
コンパイラによってはC++でも処理系拡張でrestrictをサポートしています。
>>133
いいえ。
>>132
質問が意味不明です。VisualStudioスレへでも行きやがれ。
0137デフォルトの名無しさん
2011/04/04(月) 10:20:19.440138デフォルトの名無しさん
2011/04/04(月) 10:29:28.42シェルスクリプトしたいんですよ。
0139デフォルトの名無しさん
2011/04/04(月) 10:44:04.33スレ違い。とっとと失せろ。
0140デフォルトの名無しさん
2011/04/04(月) 10:47:58.43何だとっ!?!?志を持った若者だぞ俺は。
0141デフォルトの名無しさん
2011/04/04(月) 10:49:37.240142デフォルトの名無しさん
2011/04/04(月) 10:55:46.140143デフォルトの名無しさん
2011/04/04(月) 11:02:45.59初心者の場合は何を使えばいいのでしょうか?
今はVC++ 2010 Expressを使ってます
0144デフォルトの名無しさん
2011/04/04(月) 11:09:22.110145デフォルトの名無しさん
2011/04/04(月) 11:37:11.11Xwindowsを利用したいんですが、Windows7上では無理ですか?
cygwinも使ってます。Unixをダウンロードしないとだめでしょうか?
0146デフォルトの名無しさん
2011/04/04(月) 11:45:08.20何も考えずにそのまま使っていればよいよ。知っているに越したことはないけどね
0147デフォルトの名無しさん
2011/04/04(月) 11:55:23.51tcl tk windowsで検索してみたら?
0148デフォルトの名無しさん
2011/04/04(月) 12:12:10.46cygwinにもXWindowのpkgは含まれているから利用はできるよ。
でも、今時XWindowを生のまま使うのもナンセンスだけど。
詳しくは、cygwinスレ辺りで。
0149デフォルトの名無しさん
2011/04/04(月) 12:13:24.16環境がごっそり変わるのはちょっと・・・
あくまで自分が利用したい範囲で・・
0151デフォルトの名無しさん
2011/04/04(月) 12:32:42.510152デフォルトの名無しさん
2011/04/04(月) 12:39:05.41義務教育でいやいや宿題したことがない奴なんていないぞw
0153デフォルトの名無しさん
2011/04/04(月) 12:42:53.35どこのウォルターブライトだよ
0154デフォルトの名無しさん
2011/04/04(月) 13:03:06.720155デフォルトの名無しさん
2011/04/04(月) 14:37:29.66main()
{
auto class, virtual, template, new, operator, dynamic_cast, typeid;
return class= virtual= template= new= operator= dynamic_cast= typeid = 0;
}
↑VC で通るぞ
0156デフォルトの名無しさん
2011/04/04(月) 15:15:39.00用途はjavascriptでペーストが禁止されているページに文字列をプログラムでタイピングする為です
コマンドラインで動作させるのは無理でしょうか?
GUIじゃないと無理ですか?
0157デフォルトの名無しさん
2011/04/04(月) 15:30:29.95オレ30歳だけど中学の技術でN88BASICやったぞ
学校によるんじゃね?
0158デフォルトの名無しさん
2011/04/04(月) 15:39:58.11あまりにも専門用語多くて挫折する。
0159デフォルトの名無しさん
2011/04/04(月) 16:52:19.05これをC言語でどう書くのですか?
0160デフォルトの名無しさん
2011/04/04(月) 17:07:32.98「これ」ってどれ? やりたいことを具体的に書いてくれ。
0161デフォルトの名無しさん
2011/04/04(月) 17:11:24.01フラクタル画像なら再帰呼出が楽
0162デフォルトの名無しさん
2011/04/04(月) 17:36:42.69例えば"stdio.h"とかprintf関数のパスを調べたいです。
0163デフォルトの名無しさん
2011/04/04(月) 17:38:28.39環境によって違うし、入門レベルでやることでもないし、Cとも直接関係ないのでお使いの環境スレにでも逝きやがれ。
0164デフォルトの名無しさん
2011/04/04(月) 20:30:44.82プログラマーとしてはあんまり意識したくないところだよね
SEさんちゃんとしてくださいなと言いたいところなのだが
SEは総じて丸投げ体質だったりする
0165デフォルトの名無しさん
2011/04/04(月) 20:50:37.19たのむから数学的に破綻した要求だけはやめてくれ
0166デフォルトの名無しさん
2011/04/04(月) 21:01:05.860167デフォルトの名無しさん
2011/04/04(月) 21:12:07.51fwrite()がどうにも上手くいきません
例えばcountに書き込んだものをバイナリエディタで見ると、iが1だったときは01 00 00 00となってしまいます
sizeofの使い方がおかしいのでしょうか……
gcc version 3.4.2 (mingw-special)
OS: Windows 7 Home Premium 64bit
すいませんが、宜しくお願い致します
0168デフォルトの名無しさん
2011/04/04(月) 21:14:31.03バイトオーダーとかエンディアンとかで調べるといいよ
0169デフォルトの名無しさん
2011/04/04(月) 21:17:58.690170167
2011/04/04(月) 21:21:59.68リトルエンディアンでしたので、それで逆(00 00 00 01ではなく)で出力されたのですね
ビッグエンディアンへの変換を試みてみます
大変ありがとうございました
0171デフォルトの名無しさん
2011/04/04(月) 21:25:26.56(int型で 1 をバイナリ書き込みした時 00 00 00 01 を期待できるのはビッグインデアンな環境)
utnion {
int int_val;
unsigned char char_val[4];
} val;
val.int_val = 1;
val.char_val[0] 〜 val.char_val[3] を調べるよろし
-------------------------
逆にファイルのフォーマットが決まってて 00 00 00 01 と書かれているものを
int 値として取りだしたい要求であれば、自前で並べ替えとかを行うんだ
0172デフォルトの名無しさん
2011/04/04(月) 21:26:58.960173167
2011/04/04(月) 21:35:09.66あー、バイナリエディタで直接見てるのがいけないのですね
freadしたときには(01 00 00 00)を(00 00 00 01)として読み込める、ということでよろしいでしょうか
お手数おかけして申し訳ないです
0174デフォルトの名無しさん
2011/04/05(火) 06:09:06.28fwrite()で書き込んだデータは同じ環境であればfread()で正常に読み込める。
エンディアンを気にする必要があるのは、他の環境へ移植した場合など。
※同じ環境であれば実際に書き込まれたデータの形を気にする必要はない
0175167
2011/04/05(火) 13:19:38.94なるほど、わかりました
これからはエンディアンのことも覚えておくようにします
ご丁寧にありがとうございました
0176デフォルトの名無しさん
2011/04/05(火) 13:35:33.06すいません何故3を足さないと-1になるのでしょうか?
何度もgoogle電卓で計算しても(user - cpu) % 3で全てのパターンで-1になることはありませんでした
0177デフォルトの名無しさん
2011/04/05(火) 13:40:43.60(-1)%3
が -1 になるか 2 になるかは処理系依存
0178デフォルトの名無しさん
2011/04/05(火) 13:43:33.86割り算したり余りを出したりするときはマイナスの数字にならないように気をつけたいと思います
0179悪いけど誰か↓スレ立ててくれ
2011/04/05(火) 15:20:38.45名前:ビル・ジョブス
インスタンス変数には、xxx_、@synthesize xxx=xxx_で入力楽々、可読性低いが、setXxxでセッターオーバーロードも時にはアリ?
@class PreviewStillImage;
PreviewStillImage previewStillImage_;
@property (nonatomic, assign) PreviewStillImage* previewStillImage;
[self.navigationController pushViewController:self.previewStillImage animated:YES];
retainしないでassignならpop後にdeallocされてまさしくエレガント!
エレガントなObjective-CでUIKit最高ですな。IBも使おうぜ!さぁ質問あるヤツは来い!有償アプリは遠慮してね。
0180悪いけど誰か↓スレ立ててくれ
2011/04/05(火) 15:32:51.60× PreviewStillImage previewStillImage_;
○ PreviewStillImage* previewStillImage_;
0181デフォルトの名無しさん
2011/04/05(火) 17:47:07.45ゲームの移動手段としてカーソルキーを使いたいのですが、そのプログラムがわかりません。
誰かヒント下さい・・・
0183デフォルトの名無しさん
2011/04/05(火) 19:33:58.420184デフォルトの名無しさん
2011/04/05(火) 19:49:52.044/7 予測 http://up3.viploader.net/ippan/src/vlippan198234.jpg
発表はドイツ気象庁 http://www.dwd.de/
0185デフォルトの名無しさん
2011/04/05(火) 21:31:50.11なぜポインタ宣言子を2つ重ねるのでしょうか?
どんなけ繋がってても単に「アドレスを格納する」だけなのに。
0186デフォルトの名無しさん
2011/04/05(火) 21:37:25.640187デフォルトの名無しさん
2011/04/05(火) 21:43:27.710188ビル・ジョブス
2011/04/05(火) 21:44:53.11ポインタが指し示しているものがポインタだからさ
毎回キャストして使うなら環境に応じて別にunsignedとかでもいいんだよ
しかしプログラムが読みにくいだろ?
0189デフォルトの名無しさん
2011/04/05(火) 21:46:08.41char*a=0,**b=0;++a;++b;
アドレスの進み方が違うから。2個以上は同じになるけど。
0190ビル・ジョブス
2011/04/05(火) 21:48:23.48intが32bitでlongが64biやintもlongも32bitの処理系があるから処理系によっては同じ
まさかunsignedについて聞きたいわけじゃないよな?
0191デフォルトの名無しさん
2011/04/05(火) 21:50:09.96格納している値の違い
int型へのポインタ
格納された値はアドレスで、そのアドレスにはint型が格納されている。
int型へのポインタのポインタ
格納された値はアドレスで、そのアドレスにはint型へのポインタが格納されている。
0192ビル・ジョブス
2011/04/05(火) 21:51:04.36それは間違ってないが解釈の方向性がちょっと違う
0193ビル・ジョブス
2011/04/05(火) 21:54:13.62△格納された値はアドレスで、そのアドレスにはint型へのポインタが格納されている。
○格納された値はアドレスで、そのアドレスにはint型を指すアドレスが格納されている。
0194デフォルトの名無しさん
2011/04/05(火) 21:56:28.27添削する必要はない
※「int型へのポインタ」をその上で説明してるため
0195ビル・ジョブス
2011/04/05(火) 21:59:43.760196デフォルトの名無しさん
2011/04/05(火) 23:03:53.0816bit だと、unsigned int も unsigned long も同じでしょうか?
32bit だと、unsigned int = unsigned long ということでしょうか?
0197デフォルトの名無しさん
2011/04/05(火) 23:10:41.83何に対して16bitとか32bitとか言ってるのか分からんが、
CPU・メモリに関係なく、各環境によってintやlongなどのビット幅が定義されている
0198デフォルトの名無しさん
2011/04/05(火) 23:13:11.640199デフォルトの名無しさん
2011/04/05(火) 23:16:28.04持てるけどなんで?
0200デフォルトの名無しさん
2011/04/05(火) 23:17:57.7416bitでunsginede long をもった場合2バイトになるのでしょうか?
16と32bitで何で持ち方がかわるのかがよくわからないのです。
0201デフォルトの名無しさん
2011/04/05(火) 23:26:30.88C言語を使う限りCPUのビット数なんて気にする必要はない
intもlongも、そのコンパイラで定義されたバイト数で構成される
0202デフォルトの名無しさん
2011/04/05(火) 23:28:53.49なるほど。よっぽど古いコンパイラでもunsinged long くらいは定義してますよね?
そういうのって、コンパイラのマニュアルかなにかみればよいのでしょうか?
0203デフォルトの名無しさん
2011/04/05(火) 23:30:17.400204デフォルトの名無しさん
2011/04/05(火) 23:31:53.52簡単に確認できる環境でもないので・・・
0205デフォルトの名無しさん
2011/04/05(火) 23:36:26.87どの程度古いかにもよるが、ANCI(C89)に準拠してれば大丈夫
それ以前なら、マニュアル読むか、開発元に問い合わせるか
0206デフォルトの名無しさん
2011/04/05(火) 23:38:44.60ANSIに準拠していれば、unsigned int = unsigned long だと思っていいわけですよね?
0207デフォルトの名無しさん
2011/04/05(火) 23:40:28.84違うよ
0208デフォルトの名無しさん
2011/04/05(火) 23:40:42.37sizeof(unsigned short) <= sizeof(unsigned int) <= sizeof(unsigned long)
を満たしていることは期待していい
0209デフォルトの名無しさん
2011/04/05(火) 23:41:54.28short < longを忘れたら誤解しかねない
0210デフォルトの名無しさん
2011/04/05(火) 23:42:12.99そういうことですか・・・
0211デフォルトの名無しさん
2011/04/05(火) 23:42:21.15>どの程度古いかにもよるが、ANCI(C89)に準拠してれば大丈夫
は
>なるほど。よっぽど古いコンパイラでもunsinged long くらいは定義してますよね?
に対する回答
大きさは>>201なのでマニュアルに載ってなかったり、問い合わせできなければ>>203
0212デフォルトの名無しさん
2011/04/05(火) 23:56:10.83そんなルールないだろ
0213ビル・ジョブス
2011/04/06(水) 00:16:33.270214デフォルトの名無しさん
2011/04/06(水) 00:27:27.950215デフォルトの名無しさん
2011/04/06(水) 00:31:10.280216デフォルトの名無しさん
2011/04/06(水) 00:37:51.89俺の勘違いだった
K&Rの読み杉らしい
0217デフォルトの名無しさん
2011/04/06(水) 00:52:46.25実際の使い道とかは別にして
0218ビル・ジョブス
2011/04/06(水) 01:03:42.9716bit CPUの場合、sizeof short == sizeof int ポインタとshortとintは16bit、longは32bit、long long intは64bit
32bit CPUの場合、sizeof int == sizeof long shortは16bit、ポインタとintとlongは32bit、long long intは64bit
64bit CPUの場合、sizeof int == sizeof long shortは16bit、intとlongは32bit、ポインタとlong long intは64bit
>>217
sizeof演算子の評価結果はあくまでバイト数かと
0219デフォルトの名無しさん
2011/04/06(水) 01:06:12.80>sizeof演算子の評価結果はあくまでバイト数かと
sizeof(char)は仕様に準拠してれば常に1なんだが?
0220デフォルトの名無しさん
2011/04/06(水) 01:06:54.550221ビル・ジョブス
2011/04/06(水) 01:07:33.89その1の単位は何ですか?
0222ビル・ジョブス
2011/04/06(水) 01:14:13.12コンパイルオプションでも変わりますかね。long doubleとかも12バイトとか16バイトとか。
64bit CPUネイティブのコード生成した場合、longは8バイトが主流かもしれませんね。
0223デフォルトの名無しさん
2011/04/06(水) 01:14:32.88>sizeof演算子の評価結果はあくまでバイト数かと
の意図は?
0224デフォルトの名無しさん
2011/04/06(水) 01:19:26.470225デフォルトの名無しさん
2011/04/06(水) 01:24:25.350226デフォルトの名無しさん
2011/04/06(水) 01:25:12.900227ビル・ジョブス
2011/04/06(水) 01:29:27.98単位がなければ、記憶サイズ計算できないというか、ただ1では困りますよね。
charが32bitならsizeof char==4なのでは?
http://ja.wikipedia.org/wiki/Sizeof
主にCとC++において、sizeofは、データ型の大きさを求める単項の演算子である。
sizeofは原則としてコンパイル時計算される演算子で、式もしくは括弧で括った型指定子を与えるとその大きさをバイト単位で返す。
0228デフォルトの名無しさん
2011/04/06(水) 01:32:22.20ちゃんとよめ
>厳密な大きさはsizeof (char)が1であることを除いて標準に定められていない。
0229デフォルトの名無しさん
2011/04/06(水) 01:33:03.44char が 1 バイトってのは定義
何bitあるかは limits.h でも眺めてろ
0230デフォルトの名無しさん
2011/04/06(水) 01:33:30.150231ビル・ジョブス
2011/04/06(水) 01:33:33.94その特殊な処理系はsizeof char==4を返すべきだろ?
0232デフォルトの名無しさん
2011/04/06(水) 01:35:10.270233デフォルトの名無しさん
2011/04/06(水) 01:36:03.70堂々と間違うなよ
>組込型の大きさは処理系定義となっており、厳密な大きさはsizeof (char)が1であることを除いて標準に定められていない。
って書いてあるだろ?
CHAR_BITが8でも32でも、sizeof(char)は常に1で、C言語ではそれを1バイトと呼ぶ
0234デフォルトの名無しさん
2011/04/06(水) 01:36:54.55仕方なく汚い限定があるというだけ
それに合わせてコードを書くのは美しさの観点から本末転倒
0235デフォルトの名無しさん
2011/04/06(水) 01:37:16.40CPUによっては最小単位が違うことがあるみたいだし
0236デフォルトの名無しさん
2011/04/06(水) 01:37:30.60お前のところではcharが9bitのマシンでsizeof(char)が1.1ちょっとを返すのか?
0237デフォルトの名無しさん
2011/04/06(水) 01:41:20.190238デフォルトの名無しさん
2011/04/06(水) 01:42:11.61先生、charが9bitでshortが12bitのマシンでsizeof(short)が1.3ちょっとを返してくれません。
0239デフォルトの名無しさん
2011/04/06(水) 01:47:34.82bit単位でアクセスするのか
型によって記憶域が違うのか知らないが
かなり特殊なマシンだな
仮に存在したとしても short とかいう型名じゃないか
コンパイラが規格に沿ってないだろうな
0240デフォルトの名無しさん
2011/04/06(水) 01:51:06.370241ビル・ジョブス
2011/04/06(水) 01:51:58.470242ビル・ジョブス
2011/04/06(水) 01:56:45.33とは言うものの、ま、標準で定義だから、char 9bitなんて標準じゃサポート無いだろうし色々無理あるだろうな。
0243デフォルトの名無しさん
2011/04/06(水) 01:58:39.020244ビル・ジョブス
2011/04/06(水) 02:03:41.840245デフォルトの名無しさん
2011/04/06(水) 02:05:14.05何かのネタで、そんな環境があるってみた記憶があるけど、間違いかもしれん。
ただ、そのネタの中でshortで12bitになってて、規格満たしてねーじゃんって思ったり
charが9bitなのに、他の型が2のべき乗になってて、sizeofは?って思ったりしたので、
そんな環境があることも確からしい。(幸か不幸かあたったことないけど)
0246ビル・ジョブス
2011/04/06(水) 02:12:31.13intが倍の18bitだとすると18bit出すかマルチプレクサでバスサイクル2回回して出すのか・・
char 12bitマシンとか組込み用途向けに結構実用的かもしれんな・・しかし周辺デバイスが手に入らないな・・
少しがっかりした。
0247デフォルトの名無しさん
2011/04/06(水) 02:20:53.50つか36bit機
Cコンパイラももちろんある
でも実際に組んだことはないからsizeofがどうなるかはわからんのだよなぁ
0248ビル・ジョブス
2011/04/06(水) 02:23:24.13今でもバイト単位のアドレス線なんて無くてレジスタ内部シフトで実現してるけど、
メモリを8bit単位でちまちまアクセスされちゃオーバーヘッドが大きすぎるしな。
ただ1byteが16とか32bitになるのは少し抵抗あるな〜。
0249デフォルトの名無しさん
2011/04/06(水) 02:25:45.40構造体のパディングと同じで切り上がると予想
って36bit機だと、そのまま普通に表せるのか
まぁ、大昔は3の倍数が流行ってたから、8進数とか、その名残だね
0250ビル・ジョブス
2011/04/06(水) 02:33:20.84あ!!!大昔ワードマシンって呼んでたよ!変なbit長のマシン!
Cコンパイラなんてあるんだ・・ってなきゃ困るよな。
C言語は中坊の頃PC-8801のCP/Mで覚えたんでスッカリC言語=バイトマシンの感覚なんだよね〜。
0251デフォルトの名無しさん
2011/04/06(水) 02:38:01.59そうか
お前はPDP-11を変なマシンというのか
0252デフォルトの名無しさん
2011/04/06(水) 02:40:31.510253デフォルトの名無しさん
2011/04/06(水) 02:43:38.450254デフォルトの名無しさん
2011/04/06(水) 02:45:54.440255ビル・ジョブス
2011/04/06(水) 02:46:21.95直ぐにSophiaのマシンに変わっちゃったけど。
0256ビル・ジョブス
2011/04/06(水) 02:47:25.340257デフォルトの名無しさん
2011/04/06(水) 02:47:42.58International Business Machines
0258ビル・ジョブス
2011/04/06(水) 02:48:40.820259デフォルトの名無しさん
2011/04/06(水) 02:50:15.090260デフォルトの名無しさん
2011/04/06(水) 02:54:40.76でも、ホスト知らない人に対しては、メインフレームの方が通じる。
0261ビル・ジョブス
2011/04/06(水) 02:55:18.48戻り番地をレジスタに格納してさw
0262ビル・ジョブス
2011/04/06(水) 02:59:12.97確かにホストコンピューターという呼び名が当時中心だったような。
0263デフォルトの名無しさん
2011/04/06(水) 07:22:07.20さすがC言語
0264デフォルトの名無しさん
2011/04/06(水) 09:15:59.350265デフォルトの名無しさん
2011/04/06(水) 09:33:42.86いまは↓こんな感じですが美しくできないかと思ってます。
UCHAR dst[4];
ULONG src=0x12345678;
dst[0] = src & 0xFF;
dst[1] = ( src & 0xFF00 ) >> 8;
...
func( &dst[0] );
0266デフォルトの名無しさん
2011/04/06(水) 09:37:42.480267デフォルトの名無しさん
2011/04/06(水) 09:41:41.570268デフォルトの名無しさん
2011/04/06(水) 09:54:27.68いろいろ書いて慣れていきたいと思いますが、ジャンケンのように初心者に向いたサンプルみたいなお題って何がありますか?
0269デフォルトの名無しさん
2011/04/06(水) 10:22:11.410270デフォルトの名無しさん
2011/04/06(水) 10:32:01.070271デフォルトの名無しさん
2011/04/06(水) 11:02:45.200272デフォルトの名無しさん
2011/04/06(水) 11:31:33.440273デフォルトの名無しさん
2011/04/06(水) 11:32:20.270274デフォルトの名無しさん
2011/04/06(水) 11:33:59.74#include <stdlib.h>
#include <time.h>
int main(void)
{
int a;
int rnd;
srand( (unsigned)time(NULL) );
rnd = rand() % 8999 + 1000;
while (1) {
printf("4桁の数を入力してください(0で終了): ");
scanf("%d", &a);
if (0 == a) {
printf("終了します\n\n");
break;
} else if (rnd == a) {
printf("正解\n\n");
break;
} else if (rnd > a) {
printf("入力した数より高い位置にあります\n\n");
} else if (a > rnd) {
printf("入力した数より低い位置にあります\n\n");
}
}
return 0;
}
0275デフォルトの名無しさん
2011/04/06(水) 11:34:57.10ここを直したほうがいいなどのご指導お願いいたします
0276デフォルトの名無しさん
2011/04/06(水) 11:36:40.470277デフォルトの名無しさん
2011/04/06(水) 12:12:08.380278デフォルトの名無しさん
2011/04/06(水) 12:15:41.270279デフォルトの名無しさん
2011/04/06(水) 12:42:52.66ルールちがくね?
0280デフォルトの名無しさん
2011/04/06(水) 12:45:00.16三分計だろ
0281デフォルトの名無しさん
2011/04/06(水) 13:06:09.34>>279
それも作ってみたいですおもしろそうですね
0282デフォルトの名無しさん
2011/04/06(水) 13:22:42.110283デフォルトの名無しさん
2011/04/06(水) 14:47:06.04アドバイスお願いします
http://codepad.org/qbJanJHD
0284デフォルトの名無しさん
2011/04/06(水) 14:54:43.76>>>185
>格納している値の違い
>
>int型へのポインタ
>格納された値はアドレスで、そのアドレスにはint型が格納されている。
>
>int型へのポインタのポインタ
>格納された値はアドレスで、そのアドレスにはint型へのポインタが格納されている。
なるほど。ではint型へのポインタのポインタのポインタを宣言する時は、型がint型へのポインタのポインタだから、
((int*)*) *p
こういう意味ですか?
0285デフォルトの名無しさん
2011/04/06(水) 15:23:03.74#include <stdio.h>
#include <time.h>
#include <windows.h>
int main(void)
{
time_t end_time;
int m = 180; // カウントダウンの時間(秒数)
end_time = time(NULL) + m;
while( time(NULL) < end_time ) {
printf( "%ld\n", end_time - time(NULL));
Sleep(1000);
}
printf("時間です!!");
return 0;
}
0286デフォルトの名無しさん
2011/04/06(水) 15:50:23.49プログラムを先に起動しておいて、Enterでカウントダウン開始
で、0になったら、ブザーをならすのが使いやすいタイマー
あと、細かいことを言えば、time_tは1秒とは限らないし、
その仕様は、まれに何処かの1秒を飛ばすことがあるが、細かいことを気にしなければOK
0287デフォルトの名無しさん
2011/04/06(水) 16:03:18.13linuxでもコンパイルできるパッチあてた
http://codepad.org/2k3XPWbp
0288デフォルトの名無しさん
2011/04/06(水) 16:11:17.82日本語の言葉で考えるなら、そうなのだが、C言語としては、そう考えない
*演算子や()が色々と評価された結果
((int *)*)*p;
は
([int型へのキャスト] *(乗算) ) [ポインタp]
と解釈され、*(乗算)に右側のオペランドがないためエラーになる
書き方としては
int ***p; // int (*(*(*p)));と同じ
となり、解釈は、pはポインタで、その格納先はポインタで、その格納先はポインタで、その格納先はint型と考える
0289デフォルトの名無しさん
2011/04/06(水) 16:15:28.31>と解釈され、*(乗算)に右側のオペランドがないためエラーになる
間違えた。
キャストがあって、左側のオペランドがないから、*は乗算ではなく、アドレス演算になり
*(アドレス演算)に右側のオペランドがないためエラーになる
0290デフォルトの名無しさん
2011/04/06(水) 16:26:02.50time_tはlongとは限らないので、差の値をintでキャストして"%d"で受ける方がいい。
>>286
time_tは必ず秒単位。
0291デフォルトの名無しさん
2011/04/06(水) 16:35:11.88#include <stdio.h>
#include <time.h>
#include <windows.h>
int main(void)
{
time_t end_time;
int m = 180; // カウントダウンの時間(秒数)
int c;
// エンターキーを押すまで待機する
printf("エンターキーを押すとタイマーが起動します");
c=getchar();
end_time = time(NULL) + m;
while( time(NULL) < end_time ) {
printf( "%d\n", end_time - time(NULL));
Sleep(1000);
}
printf("\a時間です!!\n");
return 0;
}
0292デフォルトの名無しさん
2011/04/06(水) 16:40:52.56また、初心者をだまして、何が楽しいんだ?
time_tは数値型であることが保証されてるだけで、精度と単位は処理系依存
伝統的にUNIX Epochが使われることが多いだけ
0293デフォルトの名無しさん
2011/04/06(水) 17:36:04.83作れますか?
0294デフォルトの名無しさん
2011/04/06(水) 18:17:06.75ファイルを D&D でdos窓へもってった場合、そのファイルのフルパス名が文字列として渡されるから…
それなりには作れるんじゃね?
※ プロンプト上では↑の動作だが、実行ファイル実行中の標準入力にも適応されてるのかは未確認
0295デフォルトの名無しさん
2011/04/06(水) 18:25:57.500296デフォルトの名無しさん
2011/04/06(水) 18:30:50.34本を読みながらやってるんだがorz
0297デフォルトの名無しさん
2011/04/06(水) 18:41:17.28入力方法が分からないの?
それとも、判定方法が分からないの?
0298デフォルトの名無しさん
2011/04/06(水) 18:51:03.68説明不足ですまない
判定方法がわからない;;
0299デフォルトの名無しさん
2011/04/06(水) 19:13:22.44余りを見るとよい
0300デフォルトの名無しさん
2011/04/06(水) 19:19:13.168年前に挫折して、6年前に初心者本を買ってみるも挫折して、2年前に初心者講座サイトを見て挫折して・・今回は初めてプログラミングが面白いと思えました。
他にも初心者向けのお題ってありませんか?
もしくはそういうネタを集めたサイトはありませんか?
0301デフォルトの名無しさん
2011/04/06(水) 19:26:39.43ヒットアンドブローの正解に使われる数値の条件
1〜9 で 0 は使用しない
同じ数字は2回以上使用されることはない
0302デフォルトの名無しさん
2011/04/06(水) 19:42:04.75メッセージ表示するだけじゃタイマーにならん
最後のメッセージを
printf("時間です!!\a\a\a");
に変更するよろし
0303デフォルトの名無しさん
2011/04/06(水) 19:47:38.800304デフォルトの名無しさん
2011/04/06(水) 19:47:43.13ではジャンケンとヒットアンドブローの戦歴をファイルに保存するように改良してみれ
ゲームでいうセーブファイルを作るのだ
0305デフォルトの名無しさん
2011/04/06(水) 19:55:48.93>数値を入力してください: 64
>正解はもっと小さい数です。
>数値を入力してください:
みたいな
0307デフォルトの名無しさん
2011/04/06(水) 20:07:45.390308デフォルトの名無しさん
2011/04/06(水) 21:07:49.63それなんてシュウォッチ?
0309謙虚フロンティア戦士
2011/04/06(水) 21:36:34.240310デフォルトの名無しさん
2011/04/06(水) 22:07:17.95なんと、待ち時間4分なのだが・・・どうすんだよこれ・・・バリ堅で食えと? あ?
0311デフォルトの名無しさん
2011/04/06(水) 22:45:35.26#include<stdio.h>
#include<string.h>
main(int ac,char **av)
{
--ac;
++av;
printf("*av=%s\n",*av);
printf("**av=%c\n\n",**av);
++*av;
printf("++*av=%s\n",*av);
printf("**av=%c\n\n",**av);
++**av;
printf("++**av=%c\n",**av);
printf("*av=%s\n",*av);
}
******************実行結果*****************************
$ ./a 1234567
*av=1234567
**av=1
++*av=234567
**av=2
++**av=3
*av=334567
下から2番目がわかりません 予想では*av anser=34567なんですが・・・
解説おねがいします
0312デフォルトの名無しさん
2011/04/06(水) 22:54:32.190313デフォルトの名無しさん
2011/04/06(水) 23:05:41.32>printf( "%d\n", end_time - time(NULL));
printf("%d\n", (int) difftime(end_time, time(NULL)));
これでtime_tがlong longだろうがdoubleだろうが、秒単位でさえなくても大丈夫。
0314ミカミ
2011/04/06(水) 23:26:07.75あなたの知識お金にしてみませんか?
内容によっては100以上十分可能です。ご連絡お待ちしております。
請けでのお仕事です。通勤等はありません。
匿名可能。お仕事は沢山あります。
ひやかしはご遠慮ください。
mikami100023あっとyahoo.co.jp
0315デフォルトの名無しさん
2011/04/06(水) 23:26:52.86何が大丈夫なの?
駄目に決まってんじゃん
0316デフォルトの名無しさん
2011/04/06(水) 23:27:46.670317デフォルトの名無しさん
2011/04/06(水) 23:32:40.78圧力鍋に入れて2気圧位にすれば3分でいけんじゃね?
0318デフォルトの名無しさん
2011/04/06(水) 23:33:51.39++**av;は*avが指している'2'に+1して'3'にする
0319デフォルトの名無しさん
2011/04/06(水) 23:38:23.83どこがダメなのか詳しく。
0320デフォルトの名無しさん
2011/04/06(水) 23:41:52.79if(クリックしたとき)
swich = 1;
〜〜〜〜〜〜〜
☆if(swich = 1) //クリックしたときしてほしい処理
〜〜〜〜〜〜〜
if(swich = 1)
swich = 0;
}
こんなプログラムでやっていると、クリックしてなくても☆の部分が暴発します
こういう書き方が悪いのでしょうか?それともここにない他が原因と思われるでしょうか?
0321デフォルトの名無しさん
2011/04/06(水) 23:42:10.75ご指摘ありがとうございます。
修正してみました。
http://codepad.org/RewCxQhV
0322デフォルトの名無しさん
2011/04/06(水) 23:42:58.10ヒント: end_time
0323デフォルトの名無しさん
2011/04/06(水) 23:45:35.68等号分が足りない
0324デフォルトの名無しさん
2011/04/06(水) 23:47:13.18ネタありがとうございます。
ジャンケンのほうで挑戦してみます
0325デフォルトの名無しさん
2011/04/06(水) 23:49:49.32>313のどこにend_timeに関する問題が?
って、なんだ。要は>313の触れていないend_timeの計算の仕方にケチつけているのか。
>291で言えば、end_time = time(NULL) + m;の代わりに
localtime_r()でstruct tmにばらしてtm_secにmを足してからmktime()でtime_tに戻せばOKだな。
0326デフォルトの名無しさん
2011/04/06(水) 23:51:30.02なるほどわかりました
if文の条件は=はダメってことですかね?
0328デフォルトの名無しさん
2011/04/06(水) 23:54:29.00ケチじゃねーよ
>>313で「秒単位でさえなくても大丈夫」って謳ってるんだから
end_timeも直してなきゃ、駄目に決まってんじゃん
0329325
2011/04/06(水) 23:56:48.10>>328
だから、>313はそこには触れてないだろ。って、私が言っても仕方ないんだけどw
0330デフォルトの名無しさん
2011/04/07(木) 00:06:19.38スレの流れ理解してないだけか
元々>>285に対して>>286と>>290(一部間違いあり>>292参照)のレス
で、>>286や>>290の対応が>>291とか>>302とか>>313の流れだから
>>313だけじゃ、駄目に決まってんじゃんって話だ
0331デフォルトの名無しさん
2011/04/07(木) 00:06:25.51完全に解決できましたありがとうございます
0332デフォルトの名無しさん
2011/04/07(木) 11:38:51.75ファイルの保存の仕方とか日時の使い方はうまく分からないのですがこんな感じで使い方あってますでしょうか?
http://codepad.org/IWIEKD3R
0333デフォルトの名無しさん
2011/04/07(木) 12:16:07.830334デフォルトの名無しさん
2011/04/07(木) 12:51:31.330335デフォルトの名無しさん
2011/04/07(木) 13:09:38.880336デフォルトの名無しさん
2011/04/07(木) 13:18:32.550337デフォルトの名無しさん
2011/04/07(木) 13:33:26.25俺って言う人いないんだけど どうすれば質問できるの?
0338デフォルトの名無しさん
2011/04/07(木) 13:37:23.130339デフォルトの名無しさん
2011/04/07(木) 13:44:33.630340デフォルトの名無しさん
2011/04/07(木) 13:51:00.900341デフォルトの名無しさん
2011/04/07(木) 13:58:14.50Python好き:C1X
0342デフォルトの名無しさん
2011/04/07(木) 14:07:49.690343デフォルトの名無しさん
2011/04/07(木) 14:35:14.400344デフォルトの名無しさん
2011/04/07(木) 22:23:26.16〜〜〜〜
method_A(head);
int method_A (struct list* a){
}
この時3行目はアドレス渡しですか?値渡しですか?
値渡し(call of value) であり、渡す値はアドレスです。これをアドレス渡しと仮にいうのであれば、>>344 は値渡しかつアドレス渡しになります。
値渡しの対義語は参照渡し(call of reference)ですが、C には厳密には参照渡しはありません。pascal や C++ にはありますが。
0346デフォルトの名無しさん
2011/04/07(木) 23:22:57.81このa中の0をすべて左によせて
a = [ 3, 2, 1, 4, 0, 0, 0, 0 ]
ってしたいんですが、右が0ばかりになったことを確認するにはどうすればよいでしょうか?
t = 7;
for( i = 0; i <= t; i++ ){
if( a[ i ] == 0 ){
for( j = 0; j <= t - i - 1; j++ ){
a[ i + j ] = a[ i + j + 1 ];
}
a[ t ] = 0;
i -= 1;
}
}
ここまで考えました。
0347デフォルトの名無しさん
2011/04/07(木) 23:26:03.05このa中の0をすべて右によせて
でした
0348デフォルトの名無しさん
2011/04/07(木) 23:43:54.050349デフォルトの名無しさん
2011/04/07(木) 23:47:49.68for(i = j; i <= t; i++) a[i] = 0;
0350デフォルトの名無しさん
2011/04/07(木) 23:53:05.11そんなに短くなるのれすか…
a[j++] = a[i]; ←これの意味を教えて下しい…
0351デフォルトの名無しさん
2011/04/07(木) 23:56:42.09ちょっと感動しました…
0352デフォルトの名無しさん
2011/04/08(金) 00:46:43.93fgets()を何回実行するか、またナル文字検出のプログラムを書いてみました
エラーがでる原因教えてください
0353デフォルトの名無しさん
2011/04/08(金) 00:49:26.93配列はポインタではないよ
0354デフォルトの名無しさん
2011/04/08(金) 01:30:02.6728行目のエラーはどうしてですかね
0355デフォルトの名無しさん
2011/04/08(金) 01:31:54.34配列はポインタではないよ
0356デフォルトの名無しさん
2011/04/08(金) 01:56:08.66char s[11];
↓
char *s;
s[i]=m[i];
s=&(s[0]);
↓
s = m;
0357デフォルトの名無しさん
2011/04/08(金) 07:14:19.27なければfopenに切り替えたいのですが。
0358357
2011/04/08(金) 08:01:45.11コンパイルの時fopen(とchar、string)へ切り替えたいのですが。
手間のかからない方法はどうやればいいですか。
0359デフォルトの名無しさん
2011/04/08(金) 08:45:17.080360デフォルトの名無しさん
2011/04/08(金) 08:45:23.14BUF_SIZE - 1にしたいのですが、どのようにすればいいのでしょうか?
#define BUF_SIZE 80
char str[BUF_SIZE];
scanf("%79s", str);
0361デフォルトの名無しさん
2011/04/08(金) 09:06:00.47#define BUF_SIZE (80)
char str[BUF_SIZE];
char format[20];
sprintf(format, "%ds", BUF_SIZE - 1);
scanf(format, str);
そも、scanf()を生のまま使うのは止めよう。
0362デフォルトの名無しさん
2011/04/08(金) 09:49:30.27�d
0363デフォルトの名無しさん
2011/04/08(金) 10:21:47.42その昔、「なぜ0を足しているんだろう」とか
「偽にしかならなさそうな式をなぜか if で見ている」といった
謎のコードが流行っていたが今やる奴っていかにも温室だな
0364謙虚フロンティア戦士
2011/04/08(金) 13:52:18.48#define FMT(len) "%##len##s"
char buf[LEN+1];
scanf(FMT(LEN), buf);
みたいな?
0365デフォルトの名無しさん
2011/04/08(金) 14:08:54.56{
Ni shi shui?
}
0366デフォルトの名無しさん
2011/04/08(金) 14:10:59.150367デフォルトの名無しさん
2011/04/08(金) 14:11:40.180368デフォルトの名無しさん
2011/04/08(金) 14:16:42.050369デフォルトの名無しさん
2011/04/08(金) 14:34:45.64{
}
class おおさか : ジャップ
{
}
0370デフォルトの名無しさん
2011/04/08(金) 14:43:47.800371デフォルトの名無しさん
2011/04/08(金) 14:53:06.30class Test
{
public function a(){
return 'a';
}
private function b(){
return 'b';
}
public function(){
$this->b();
}
}
0372デフォルトの名無しさん
2011/04/08(金) 15:03:08.36ファイル使わなくてもこれで一通りの事ができる
0373デフォルトの名無しさん
2011/04/08(金) 15:23:41.63どのようなキーワードで検索したらようのでしょうか?
0374デフォルトの名無しさん
2011/04/08(金) 16:26:06.33エスケープシーケンスコードって事?
0375デフォルトの名無しさん
2011/04/08(金) 16:42:18.46ガンバレ
0376デフォルトの名無しさん
2011/04/08(金) 16:57:53.470377( ̄ー ̄)ニヤリッ
2011/04/08(金) 17:44:31.620378デフォルトの名無しさん
2011/04/08(金) 17:46:02.300379デフォルトの名無しさん
2011/04/08(金) 20:23:17.92と、表示されて先に進めません。文章は別のパソコンならビルト出来るのでソフトの設定自体に何かあると思うのですが、どうしたら解決できるでしょうか。
あと、スタートメニューからvisualstdioをドラッグ&ドロップしたらvisual studioのマーク(無限マーク)が表示されなくなってしまいました。どうしたら直るでしょうか?
本当に困っているので宜しくお願いします。
0380デフォルトの名無しさん
2011/04/08(金) 20:43:53.24VisualStudioスレへどうぞ
0381デフォルトの名無しさん
2011/04/08(金) 22:56:00.63curses
0382デフォルトの名無しさん
2011/04/08(金) 23:09:53.13ありがとうございます!!!!!!!!
でもVC++ 2010 Expressにはcurses.hが入っていませんでしたorz
せっかく教えていただいたのに申し訳ございません
0383デフォルトの名無しさん
2011/04/08(金) 23:16:41.92SetConsole〜
GetConsole〜
0384デフォルトの名無しさん
2011/04/08(金) 23:29:05.02getch
0385デフォルトの名無しさん
2011/04/09(土) 01:32:44.71文字入力してエンターキー押したら
Segmentation fault (core dumped)がでた
なんで
0386デフォルトの名無しさん
2011/04/09(土) 01:50:18.94sの先を確保してない
ってかNULLのまま
0387デフォルトの名無しさん
2011/04/09(土) 01:51:04.76//strcpy(s,m);
s = m;
>char *s;
>s=NULL;
>strcpy(s,m);
端的にいって、NULL にコピーできません。
このコードをみて、文字列型のある言語を触られたことがあるのかなと感じましたが、
s = NULL
で文字列を空に設定する、ということにはならないのです。
そもそも C には文字列型はありません。
0389デフォルトの名無しさん
2011/04/09(土) 02:40:11.370390デフォルトの名無しさん
2011/04/09(土) 02:48:02.53malloc を使わないってどういう事?
全部スタックにアロケートするという事?
それとも、mmap や sbrk を使うという事?
何で malloc を使わないの?
メモリリークが怖いの?
元々どういう処理で malloc を使っていたの?
みたいな疑問が湧いてくるから、3行以上で状況を説明しておくんなまし。
0391デフォルトの名無しさん
2011/04/09(土) 10:51:40.240392デフォルトの名無しさん
2011/04/09(土) 11:00:15.190 & 0 は0
1 & 0 は0
0 & 1 は0
1 & 1 は0
0 & 10 は0
10 & 10 は10
http://ja.wikipedia.org/wiki/%E8%AB%96%E7%90%86%E7%A9%8D
wikiを読んで a & b のとき、 aとbが同じ数字なら 1(true)そうでないなら0(false)を返すって認識でよいでしょうか?
0394デフォルトの名無しさん
2011/04/09(土) 11:21:41.91大体あってる
1bit目と1bit目、2bit目と2bit目って
bitごとに処理されるの
まず、何ビットで考えるかはっきりと明示するとわかりやすいと思います。
論理積 ∧ について、1ビットで考えると、
0∧0 = 0∧1 = 1∧0 = 0,
1∧1 = 1
型 char は 8 ビットであると仮定して、8 ビットで考えると、
1 & 1は二進数8ビットで 00000001 & 00000001 = 00000001 = 1
0 & 10 は二進数8 ビットで 00000000 & 00001010 = 00000000 = 0
10 & 10 は二進数8ビットで 00001010 & 00001010 = 00001010 = 10
14 & 7 は二進数8ビットで 00001110 & 00000111 = 00000110 = 6
0396デフォルトの名無しさん
2011/04/09(土) 12:05:19.221 & 1は 1だぞ。
>395
ワザワザ誤解しやすい'∧'なんて記号使わないでくれよ。
排他的論理和'^'と思って混乱したじゃないか。
伝統的な記号論理学の記号を導入しました。
http://ja.wikipedia.org/wiki/%E3%82%B2%E3%83%AB%E3%83%8F%E3%83%AB%E3%83%88%E3%83%BB%E3%82%B2%E3%83%B3%E3%83%84%E3%82%A7%E3%83%B3
0398デフォルトの名無しさん
2011/04/09(土) 14:23:56.85コピペ厨を相手にすんなよ
0399デフォルトの名無しさん
2011/04/09(土) 14:26:10.760400デフォルトの名無しさん
2011/04/09(土) 14:54:15.85& は 『両方1なら1。 それ以外は全部0』
1 & 1 は両方1だから1
0 & 1 は両方1じゃないから0
0 & 0 は両方1じゃないから0
例:
1100 & 1010 の場合
1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0
0401400
2011/04/09(土) 15:13:51.96もしも 1100 を10進数として読むなら、千百
1 : 千の位が1
1 : 百の位が1
0 : 十の位が0
0 : 一の位が0
1000 + 100 = 千百
もしも 1100 を2進数として読むなら、12
1 : 8の位が1
1 : 4の位が1
0 : 2の位が0
0 : 1の位が0
8 + 4 = 12
>>400 の例は2進数です
0402デフォルトの名無しさん
2011/04/09(土) 15:40:04.79charだとPPPPPは5バイト?
後int型で3×3の時間量と、123×123の時間量は一緒ですか?
0403デフォルトの名無しさん
2011/04/09(土) 16:03:30.27>int型は65536までだっけ?までは全部要領4バイトなんですか?
int型のサイズは環境依存。今は大抵は4バイト。その場合の表現できる値の範囲は、-(2の31乗)から(2の31乗-1)。
必要なら、sizeof(int)でサイズは得られる。
>charだとPPPPPは5バイト?
意味不明。sizeof(char)は常に1。文字列を表したいなら、配列を用意するなどする必要がある。
>後int型で3×3の時間量と、123×123の時間量は一緒ですか?
通常、全く一緒。
0404デフォルトの名無しさん
2011/04/09(土) 16:08:03.52文字列 "PPPPP" だと終端の \0 まで欲しいので 6
文字の塊(だだし、文字列ではなく終端無し) PPPPP なら 5
コンパイラによる (が、整数リテラルの掛け算は同じになるだろう と予測される)
0405デフォルトの名無しさん
2011/04/09(土) 17:38:10.40>コンパイラによる (が、整数リテラルの掛け算は同じになるだろう と予測される)
コンパイラに依存するよりも、CPUに依存する。
例えば、9のロードと15129のロード時間が異なるCPUは想定できるが、それが異なるコンパイラの実装は考えにくい。
0406デフォルトの名無しさん
2011/04/09(土) 17:51:20.500407デフォルトの名無しさん
2011/04/09(土) 18:41:18.49たとえば
intを4バイトとすると
int a = 'PPPP';
とかってOKなの?
0408デフォルトの名無しさん
2011/04/09(土) 18:48:50.070409デフォルトの名無しさん
2011/04/09(土) 18:55:01.68エラーにはならないよ。
0410デフォルトの名無しさん
2011/04/09(土) 19:02:24.27コードとしては問題ないな。
asciiの環境なら0x50505050が代入される。
問題は、a = 'abcd'としたときに0x61626364か0x64636261かは環境依存だと言うことだ。
0411デフォルトの名無しさん
2011/04/09(土) 19:07:14.230412デフォルトの名無しさん
2011/04/09(土) 19:17:31.490413デフォルトの名無しさん
2011/04/09(土) 19:29:12.49WCHAR ch ='あ';
とかしてるコードは見たことある。
0414デフォルトの名無しさん
2011/04/09(土) 20:23:10.91プロトタイプ宣言はどこに書いたらいいんですか
内部でしか使わないやつはtest.c内に static void fuck(void);とかで
外部のやつはtest.hにextern void fuck2(void);と書けば良いんでしょjか
0416デフォルトの名無しさん
2011/04/09(土) 21:49:56.47それでいいけど、おれは関数にextern を書いたことがない。
0417デフォルトの名無しさん
2011/04/09(土) 21:54:30.45もう少し規模が大きくなって
test.c だけじゃ見通し悪いからファイル分割したい test1.c test2.c ...
test1.c 〜 test2.c 相互利用したいけど内部関数がが test_local.h
外部公開したい関数 test.h
こういうことをやっちゃう
テーブルの定義とか#defineとかもその方針で良いんですねありがとうごじあsみあ
test.hにextern void fuck1(void); から extern void fuck10(void);まで
10個のプロトタイプ宣言があるとして、
外部からvoid fuck5(void);のみを使いたい場合にどうするのがいいんでしょうか
#include "test.h"とすることで何か無駄が生じないのでしょうか
単に外部の.cの先頭にextern void fuck5(void);とだけ書くほうがいいんでしょうか
0420デフォルトの名無しさん
2011/04/09(土) 22:13:29.20test.h内でstatic inlineとして関数を書いて、ソースに直接埋め込んでしまう方法が使われる場合もある。
たとえば
/* include/linux/hid.h */
static inline int __must_check hid_register_driver(struct hid_driver *driver)
{
return __hid_register_driver(driver, THIS_MODULE, KBUILD_MODNAME);
}
ただし、
リーナストーバルズ曰く「(内容が)4行以上の関数はinlineにする候補としては考えないほうがいい」
http://linuxjf.sourceforge.jp/JFdocs/kernel-docs-2.6/CodingStyle.html
0421デフォルトの名無しさん
2011/04/09(土) 22:14:05.65もし、fuck5()だけを利用するソースが多いなら、test.hの分割を検討すべきときだ。
0422デフォルトの名無しさん
2011/04/09(土) 22:14:53.39ヘッダーファイルに10個全部プロトタイプ書いて、一個しか使わなくても
それをインクルードすればいい。
別にムダじゃない。
0423デフォルトの名無しさん
2011/04/09(土) 22:17:15.54コンパイル時間がやたら長くなるならそのときに考えればいい
0424デフォルトの名無しさん
2011/04/09(土) 22:20:53.28使用する標準関数のプロトタイプを個別タイプするか
0426ポインタ初学者
2011/04/09(土) 22:32:32.90char型の配列に代入したいのですが,どのようにすればいいのでしょうか?
ご教授よろしくお願いします.
0427デフォルトの名無しさん
2011/04/09(土) 22:38:04.59short si = SomeValue;
char array[] = {(si >> 8) & 0xff, si & 0xff};
0428デフォルトの名無しさん
2011/04/09(土) 22:40:50.50(x>>8)&255
0429デフォルトの名無しさん
2011/04/09(土) 23:31:49.600430ビル・ジョブス
2011/04/09(土) 23:34:07.17算術シフトの例)0x8001>>1→0xc000
この技をあえて使う事もあります。
unsignedの場合は論理シフトが用いられ最上位ビットにはゼロが補われます。
論理シフトの例)0x8001>>1→0x4000
よってシフト前にマスクするよりもシフト後にマスクした方がより安全なコードとなり得ます。
エンディアンが固定で分かっていれば、short型変数のアドレスをchar*でアクセスした方が実行速度は速いかもしれません。
0431デフォルトの名無しさん
2011/04/09(土) 23:42:38.05unsignedをシフトしたときの符号の扱いって環境依存じゃなかった?
0432デフォルトの名無しさん
2011/04/09(土) 23:43:04.78scanf("%s",&x[])
&はいらないんですか?
0433デフォルトの名無しさん
2011/04/09(土) 23:44:08.150434デフォルトの名無しさん
2011/04/09(土) 23:52:26.03short s = SomeValue;
char* p = &s;
char array[] = {*(p+1), *p};
>>431
unsignedの場合、論理シフトでsigned charだけが環境依存かと。
なぜならコンパイルオプションでsigned char to unsigned charって必ずあるでしょ?
後まぁ、基本、慣習と言うか通例で答えてやりゃ良いでしょ。
質問者もおれらのレスをそれほど信じてないし。
環境依存で答え無しってのも味気ないしね。
0435デフォルトの名無しさん
2011/04/10(日) 00:04:31.14配列名=配列のアドレス x=&x[0] です。
言語仕様的には「代入出来ない左辺値」
よって&要らない。と言うかエラーになりませんか?配列名には領域無いと。
0436デフォルトの名無しさん
2011/04/10(日) 00:07:24.64ない実物例を見たから質問したわけであって。
本当にプログラミングはストレスが溜まりますね。
0437ポインタ初学者
2011/04/10(日) 00:07:57.35最初の方のサンプルコードで解決できました.
続く方々の説明はまだ完全に自分のものに出来てませんので,熟考してみます.
0438ビル・ジョブス
2011/04/10(日) 00:26:50.42C言語は13歳からもう30年経験し、この1スレの1である。
C言語習得の近道は疑問のある処理のアセンブラ出力を見るに限るよ。
疑問が湧いたら、とにかくソースから切り出しアセンブラ出力で確認しよう。
コンパイラによっては>>演算子もコンパイラ内部サブルーチン呼んでたりしてクソ遅い時がある、そんな時はインラインアセンブラを駆使しなきゃならない。
アセンブラの知識は絶対に無駄にならないよ。
そうは言っても、アセンブラ見ても分からん時は分からんので、とりあえず動くのならまたいつか考えればいい。
その時は一瞬で分かる事もあるし。気楽に気長に継続は力なりけり。かな。
0439デフォルトの名無しさん
2011/04/10(日) 00:40:07.69エラーが出たら、ダメって感じの人は向いてないかも
0440デフォルトの名無しさん
2011/04/10(日) 00:51:06.140441デフォルトの名無しさん
2011/04/10(日) 00:52:31.80-1
0442デフォルトの名無しさん
2011/04/10(日) 00:56:16.280443デフォルトの名無しさん
2011/04/10(日) 01:15:26.95プログラミング向いてない事に気づいた。
0444デフォルトの名無しさん
2011/04/10(日) 01:15:29.77ある意味では正論ではあるが、それはアセンブラ→C言語経験ならまだしもC言語→アセンブラ経験は
大抵の人にとってハードルがかなり高いと思われ、かつC言語を使う大抵の人にとってアセンブラが
必要とされる機会はかなり低いと思われ。ちなみに私はアセンブラ→C言語経験ですけども。
0445デフォルトの名無しさん
2011/04/10(日) 01:44:20.23逆コンパイルなどされてプログラムを見られることはありますか?
0446デフォルトの名無しさん
2011/04/10(日) 01:45:03.96自分はNULLはポインターでEOFはint型というように
代入や比較のときつかいわけてます
0447デフォルトの名無しさん
2011/04/10(日) 01:47:50.120448デフォルトの名無しさん
2011/04/10(日) 02:17:06.42--
C言語により記述された次の関数fがある。ここで、display()は画面に1個の文字Aを書く手続きであるとする。
int f(int x){
display();
if(x==0)return 1;
if(x==1)return 3;
if(x==2)return 5;
return(f(x-1)+f(x-2)+f(x-3));
}
いま、f(x)を呼び出したとき、値105が返された。このf(x)が呼び出されてから値を返すまでの間に、文字Aは画面にいくつ書かれたか。
--
直感でf(0)=1,f(1)=3,f(2)=5
f(3)=f(2)+f(1)+f(0)=9
f(4)=f(3)+f(2)+f(1)=17
f(5)=f(4)+f(3)+f(2)=31
f(6)=f(5)+f(4)+f(3)=57
f(7)=f(6)+f(5)+f(4)=105
だからx=7がミソだとは思うんですけど、それ以前に呼び出されたとか値が返されたもイマイチピンときません
0449デフォルトの名無しさん
2011/04/10(日) 02:20:18.660450デフォルトの名無しさん
2011/04/10(日) 02:23:30.860451デフォルトの名無しさん
2011/04/10(日) 02:27:43.410452デフォルトの名無しさん
2011/04/10(日) 02:28:48.47printf("%d\n",x);
if(x==0)return 1;
if(x==1)return 3;
if(x==2)return 5;
return(f(x-1)+f(x-2)+f(x-3));
}
で、やってみな
0453デフォルトの名無しさん
2011/04/10(日) 02:52:22.83そもそもscanfがないからプログラムとして成り立ちますか?
0454デフォルトの名無しさん
2011/04/10(日) 02:58:23.740455デフォルトの名無しさん
2011/04/10(日) 03:15:41.840456デフォルトの名無しさん
2011/04/10(日) 11:33:37.15おかげさまで何とか作れそうです
感謝します
0457デフォルトの名無しさん
2011/04/10(日) 14:21:24.28設定で
typedef struct data
{
char name[20];
int age;
struct data *next
} DATA;
となってる場合は
この構造体はDATA型であり、struct data型ってことですよね?
つまり
typedef struct data
{
char name[20];
int age;
DATA *next
} DATA;
としても問題ないのでしょうか?
0458デフォルトの名無しさん
2011/04/10(日) 14:38:03.60DATA型にtypedefするのは、構造体を設定後なんですね・・
たぶんそうでしょう・・
0459457=458
2011/04/10(日) 14:40:04.340460デフォルトの名無しさん
2011/04/10(日) 15:35:45.98Cってインクルードというものがありますよね? なぜインクルードをまとめて一つの - Yahoo!知恵袋
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1059846970
0461デフォルトの名無しさん
2011/04/10(日) 15:50:03.520462デフォルトの名無しさん
2011/04/10(日) 20:14:54.79あと、依存関係を明確にするためファイルに別けてたってのもある
0463デフォルトの名無しさん
2011/04/10(日) 20:22:32.16Cはプロトタイプなくてもエラーにならないんで、ヘッダーファイルを
インクルードしなくてもコンパイル->リンクまで平気でいく。
0464デフォルトの名無しさん
2011/04/10(日) 21:57:59.89aは文字列へのポインタ
char *b;
bも文字列へのポインタ
とします。
bの指す文字列をaの指す文字列に代入したいときどうすればいいですか?
strcpyを使う場合と、何も関数を使わない場合それぞれで教えてください。
0465デフォルトの名無しさん
2011/04/10(日) 22:14:29.27「文字列に代入」の意味が判らん。
bの指す領域にaの指す領域に格納されているナル終端文字列をコピーすると言う意味でいいのなら、
strcpy(b, a)でいい。勿論、bの指す領域がその文字列を格納するに充分であること。
何も関数を使わない場合と言うのはナンセンスなので割愛。
0466デフォルトの名無しさん
2011/04/10(日) 22:15:39.15指定した座標にツールチップを表示させたいのですが
どのようなキーワードで検索したらよいのでしょうか?
C言語 ツールチップでは参考になるものがみつかりませんでした
どなたかご教示お願いいたします
0467デフォルトの名無しさん
2011/04/10(日) 22:38:27.91b=a
0468デフォルトの名無しさん
2011/04/10(日) 22:42:32.97cuiにはツールチップと言う汎用的な概念がありません。頑張って自力で実装しましょう。
0469デフォルトの名無しさん
2011/04/10(日) 22:47:09.95指定した座標に任意の文字を書き込みたいということでいいのかな?
linux と MS windows で手順が違うから環境書きな
0471デフォルトの名無しさん
2011/04/10(日) 22:52:14.92CUIな開発環境Iだけど、実行環境はGUIです ってオチじゃないだろうな?
0472デフォルトの名無しさん
2011/04/10(日) 22:59:06.60とでてきましたが、何が不備だったのでしょう・・・
->が使えない処理環境なのでしょうか?
0473デフォルトの名無しさん
2011/04/10(日) 22:59:58.01. ピリオドにするとうまくいくかもしれないw
0474デフォルトの名無しさん
2011/04/10(日) 23:00:04.84失礼いたしました。環境はWindowsになります
例えば
#include<windows.h>
int WINAPI WinMain(
HINSTANCE hInstance ,
HINSTANCE hPrevInstance ,
PSTR lpCmdLine ,
int nCmdShow ) {
MessageBox(NULL , TEXT("Hello world") ,
TEXT("メッセージボックス") , MB_OK);
return 0;
}
のようにCUIでコードを書いて、実行したらメッセージボックス(今回はツールチップを表示したい)を表示するような事をやりたいのです。
0475デフォルトの名無しさん
2011/04/10(日) 23:01:00.16エラーになったソースを晒せ
0476デフォルトの名無しさん
2011/04/10(日) 23:01:57.18->はポインタの指す要素なので.とは違うと思うんです。
何故このようなエラーが出たのでしょうか?
0477デフォルトの名無しさん
2011/04/10(日) 23:04:20.54コンソールアプリじゃないの?
AllocConsole してるの?
>>471 の通りで単にコマンドラインからコンパイルしてるだけって意味なの?
0478デフォルトの名無しさん
2011/04/10(日) 23:04:29.14構造体がポインタだった -> を使う
struct { char* a; } foo;
struct foo *p;
struct foo q;
p->a;
q.a;
こういうこっちゃ
0479デフォルトの名無しさん
2011/04/10(日) 23:08:57.98すいません私が勘違いしているのかもしれません
コマンドプロンプトから起動するプログラムの事です
ttp://mga8cak.sitemix.jp/AutoItHelp3.3.6.1.jp/html/functions/ToolTip.htm
や
ttp://d.hatena.ne.jp/ampll/20080724/1216918598
の
ようにツールチップを指定した座標上の表示したいと考えております
0480デフォルトの名無しさん
2011/04/10(日) 23:09:21.69すいません・・
構造体の名前を仮にxとして
x->としてました・・
xのメンバーにポインタがあり、それがaなので
a->としなければいけないのでした><
0481デフォルトの名無しさん
2011/04/10(日) 23:15:29.68?
xが構造体の実体なら
x.a
xがポインタなら
x->a
xのメンバにaがある時にx無しでa->なんてしてるとエラーになるけど。
構造体が入れ子になっていて、xのメンバaが構造体を指すポインタなら
x.a->p
とする必要がある。
0482478
2011/04/10(日) 23:19:18.55×構造体がポインタだった -> を使う
×struct { char* a; } foo;
○構造体がポインタだったら -> を使う
○struct foo { char* a; };
0483デフォルトの名無しさん
2011/04/10(日) 23:21:53.13構造体を指すポインタがaであるので
a->pとしても問題ないのですた。
0484デフォルトの名無しさん
2011/04/10(日) 23:26:49.71structは構造体なのに中の要素が一個だけって構造体の意味あるんでしょうか
?
0485デフォルトの名無しさん
2011/04/10(日) 23:29:36.63今の議論に要素数は関係ないよ?
0486デフォルトの名無しさん
2011/04/10(日) 23:47:21.81WinAPIの話は該当スレでどうぞ。
0487デフォルトの名無しさん
2011/04/11(月) 00:14:35.08これは認識される形式は上記ってことで、表記の場合は
*strcpy(?,?);でいいんですよね?
具体的に文字列に与えられた形式が違う場合どう?,?に入れたら良いか分かりません
ので例を示しますので教えてください。
例1 char p[10]の文字列をchar s[10]に入れる場合。
例2 char *p の文字列を char *sに入れる場合。
例3 関数の引数 xx(int a, char p[])のp[]の文字列を char*sに入れる場合。
↑
書き方自信無し・・
例4 関数の引数 xx(int a, char *p)のpの文字列を char*sに入れる場合。
全部 *strcpy(p,s);ですか?
0488デフォルトの名無しさん
2011/04/11(月) 00:21:24.57全部そうだよ。
strcpy(p,s);
strcpy の頭に * は(普通は)いらない。念のため。
0490デフォルトの名無しさん
2011/04/11(月) 00:48:43.80ちげーよ
>>489
おめーもだ
0491デフォルトの名無しさん
2011/04/11(月) 00:52:42.40どれも、strcpy(s, p)だ。但し、>465も読んでおけ。
おっと逆だった orz
0493デフォルトの名無しさん
2011/04/11(月) 09:26:27.20WinAPIで出来るのですね
該当スレで聞いてみます
ありがとうございます
0494デフォルトの名無しさん
2011/04/11(月) 15:23:59.48#undefで解除は出来ないですか。一度決まるとTCHAR型は変化しませんか?
#define UNICODE
#define _UNICODE
〜
#undef UNICODE
#undef _UNICODE
0495デフォルトの名無しさん
2011/04/11(月) 15:31:11.48linuxとwindows共用コードを作りたいのですが、
ファイル・ディレクトリ操作で、linuxはwchar_tは定義されておらずwindowsではwchar_tでアクセスしないと不具合が出ます。
しかし、UNICODEを切り替えるのは上手くいきそうに無いので、使用関数を独自でラップすることにしました。
自己解決しました。
0496デフォルトの名無しさん
2011/04/11(月) 15:42:37.52たとえば拡張子が .bin だったら .out に変更するなどの条件分岐に使いたい
です。どなたか解る方がいましたらよろしくお願いします。
0497デフォルトの名無しさん
2011/04/11(月) 15:47:21.76その次の位置の文字列比較で分岐
<エラーチェックは省く>
char * p = strrchr(filename, '.');
if (!strcmp(p+1, "ini")) {
/* .ini っぽい */
} else if (!strcmp(p+1, "bin")) {
/* .bin っぽい */
}
こんな感じ
0498デフォルトの名無しさん
2011/04/11(月) 16:34:45.83int strrep(char *buf, char *mae, char *ato)
{
char *mituke;
size_t maelen, atolen;
maelen = strlen(mae);
atolen = strlen(ato);
if (maelen == 0 || (mituke = strstr(buf, mae)) == NULL) return 0;
memmove(mituke + atolen, mituke + maelen, strlen(buf) - (mituke + maelen - buf ) + 1);
memcpy(mituke, ato, atolen);
return 1;
}
if(!strrep(fin,".grs","")){
sprintf(fout,"%s.out",fin);
fp=fopen(fout,"wb");
K=0;
}
sprintf(fout,"%s.grs",fin);
fp=fopen(fout,"wb");
こうするとファイルポインタからデータが読めなくて終了してしまいます。
どうしたらいいでしょうか?よろしくお願いします。
0499デフォルトの名無しさん
2011/04/11(月) 17:18:09.010500デフォルトの名無しさん
2011/04/11(月) 17:30:02.960501デフォルトの名無しさん
2011/04/11(月) 17:34:09.30strrep(fin,".grs","") の結果が 0 の場合
ファイル2回開いて さらに fp は 後に開いたほうを指してるんだが...
else ブロックにしてないのは意図的なの?
0502デフォルトの名無しさん
2011/04/11(月) 18:07:44.430503デフォルトの名無しさん
2011/04/11(月) 21:22:20.13ソケットのSIGIOみたいに、シグナルで通知されるとスマートなのですが
Linuxで、F_NOTIFY使わないと駄目なんでしょうか?
環境がOpenBSDなので、標準的なやり方を知りたいです
キーワードとなる関数名だけでも構いません
宜しくお願いします
0504デフォルトの名無しさん
2011/04/11(月) 22:02:18.330505デフォルトの名無しさん
2011/04/11(月) 22:35:23.32を見てワイルドカードの使い方を勉強しています。
mainの中の*argv[]で第一引数でワイルドカードを指定しても最初の
一つしか表示できません。なぜでしょうか?どうしたら全てのファイル
を表示できるでしょうか?よろしくお願いします。
0506デフォルトの名無しさん
2011/04/11(月) 22:40:45.52コンパイラの種類やコンパイルオプションによって
自動でワイルドカードの展開をしたりしなかったりするので
貰ってきたもの(argv)の中身を確認するべし
0507デフォルトの名無しさん
2011/04/11(月) 22:43:00.64エスパーじゃないんだから、それだけじゃ分からない。
ソースを晒せば、誰かが答えてくれる。
0508デフォルトの名無しさん
2011/04/11(月) 22:47:50.74struct _finddata_t c_file;
long hFile;
// カレント ディレクトリ内の最初のファイルを探します。
if( (hFile = _findfirst( argv[1], &c_file )) == -1L )
printf( "カレント ディレクトリにはファイルは存在しません。\n" );
else{
printf( "ファイルのリスト\n\n" );
printf( "RDO HID SYS ARC FILE DATE %25c SIZE\n", ' ' );
printf( "--- --- --- --- ---- ---- %25c ----\n", ' ' );
printf( ( c_file.attrib & _A_RDONLY ) ? " Y " : " N " );
printf( ( c_file.attrib & _A_SYSTEM ) ? " Y " : " N " );
printf( ( c_file.attrib & _A_HIDDEN ) ? " Y " : " N " );
printf( ( c_file.attrib & _A_ARCH ) ? " Y " : " N " );
printf( " %-12s %.24s %9ld\n", c_file.name, ctime( &( c_file.time_write ) ), c_file.size );
// 残りのファイルを探します
while( _findnext( hFile, &c_file ) == 0 ){
printf( ( c_file.attrib & _A_RDONLY ) ? " Y " : " N " );
printf( ( c_file.attrib & _A_SYSTEM ) ? " Y " : " N " );
printf( ( c_file.attrib & _A_HIDDEN ) ? " Y " : " N " );
printf( ( c_file.attrib & _A_ARCH ) ? " Y " : " N " );
printf( " %-12s %.24s %9ld\n", c_file.name, ctime( &( c_file.time_write ) ), c_file.size );
}
_findclose( hFile );
}
}
0509デフォルトの名無しさん
2011/04/11(月) 22:58:53.99普通に動いたよ
WinXP,vs2010,vs2008
0510デフォルトの名無しさん
2011/04/11(月) 23:00:49.75この違いは乗り越えられますか?
Windows 上の cygwin を使っているのなら、gcc-3 かつ -mno-cygwin でなんとかコンパイルできるはず。
linux とかだったら、そもそも findfirst/findnext がないからコンパイルすらできない。
0512デフォルトの名無しさん
2011/04/11(月) 23:11:48.270513デフォルトの名無しさん
2011/04/11(月) 23:15:29.63ピンポイントのキーワードをありがとうございました
0514デフォルトの名無しさん
2011/04/11(月) 23:24:24.73unsigned char box[10];
box[0] =1, box[1] =2,box[2] =3, box[3] =4,box[4] =5,
box[5] =6, box[6] =7, box[7] =8, box[8] = 9, box[10] =10;
この状態で次のキューがたまると
FIFOを配列を使って実現したいのですが、以下をもっと簡単にできないのでしょうか?
unsigned char box[10];
box[0] =2,box[1] =3, box[2] =4,box[3] =5,
box[4] =6, box[5] =7, box[6] =8, box[7] = 9, box[8] =10;
このようなFIFOを実現したいのですが、どうしたらよいのでしょうか?
0515デフォルトの名無しさん
2011/04/11(月) 23:29:15.110516デフォルトの名無しさん
2011/04/11(月) 23:30:56.500517デフォルトの名無しさん
2011/04/11(月) 23:31:04.27リングバッファでググれ
0518デフォルトの名無しさん
2011/04/11(月) 23:32:32.20どちらのほうがシンプルにできますか?
極力、関数は使わずにしたいのです。
>>517
すみません、サンプルコード書いてください!
検索しても難しい上に長いのしかでてこないのです。
0519デフォルトの名無しさん
2011/04/11(月) 23:44:36.400520デフォルトの名無しさん
2011/04/11(月) 23:47:16.75C言語の宿題なら宿題スレへいけよ
0521デフォルトの名無しさん
2011/04/11(月) 23:49:45.367章:STL
queue キュー
先入れ先出し(FIFO)のキューです
コンテナの終端にデータを追加し、コンテナの先端からデータを取得するのに適したコンテナですqueue
deque 両端キュー
コンテナの両端からアクセスできるキューです
コンテナの両端へのデータ追加、両端からのデータ取得に適したキューです
http://www5c.biglobe.ne.jp/~ecb/cpp/07_04.html
0522デフォルトの名無しさん
2011/04/11(月) 23:51:09.01int count=0;
while( _findnext( hFile, &c_file ) == 0 ){
stock[count++]= c_file.name;
printf( "%s ", c_file.name);
printf( "%s \n", stock[count]);
}
このようにやって検索結果のリストを作りたいのですがうまく
いきません。全て(null)になってしまいます。
なぜでしょうか?どうすればうまくリストに出来ますか?
よろしくお願いします。
0523デフォルトの名無しさん
2011/04/11(月) 23:51:18.110524デフォルトの名無しさん
2011/04/11(月) 23:51:22.47#include<iostream>
#include<queue>
using namespace std;
queue<int> q;
void main(){
// queueに追加
for( int i = 0 ; i < 10 ; i++ ) q.push( i );
// queueの中身を表示
while( !q.empty() ){
cout << q.front() << " ";
q.pop();
}
cout << endl << endl;
// 1を追加する
q.push( 1 );
// 代入
q.back() = 2;
// 追加した「1」ではなく、代入した「2」が表示される
cout << q.front() << endl;
}
http://www5c.biglobe.ne.jp/~ecb/cpp/07_09_02.html
0525デフォルトの名無しさん
2011/04/11(月) 23:52:12.37言い忘れておりもうしわけないですが、
popとかpushとかいった関数は使わずに実現したいのです。
0526デフォルトの名無しさん
2011/04/11(月) 23:52:15.76findfirst はどこ?
0527デフォルトの名無しさん
2011/04/11(月) 23:57:38.97struct _finddata_t c_file;
long hFile;
int count=0;
char *stock[256];
// カレント ディレクトリ内の最初のファイルを探します。
if( (hFile = _findfirst( fin, &c_file )) == -1 )
printf( "カレント ディレクトリにはファイルは存在しません。\n" );
else{
printf( " %-12s \n", c_file.name );
stock[count]=c_file.name;
count++;
// 残りのファイルを探します
while( _findnext( hFile, &c_file ) == 0 ){
stock[count++]= c_file.name;
printf( "%s ", c_file.name);
printf( "%s \n", stock[count]);
}
_findclose( hFile );
}
return count-1;
}
こんな感じで。
0528デフォルトの名無しさん
2011/04/12(火) 00:01:52.40#define N 100
int a[N];
int sento=-1;
push( int x ) { if(sento==N-1) { sento=0; a[N-1]=x; return; } a[sento]=x; sento++; }
0529528
2011/04/12(火) 00:03:49.810530デフォルトの名無しさん
2011/04/12(火) 00:06:46.770531デフォルトの名無しさん
2011/04/12(火) 00:11:08.49なんかどう突っ込むべきか悩むけど、
> stock[count++]= c_file.name;
ここで stock に代入したあと count は +1 される
> printf( "%s \n", stock[count]);
ここで +1 された新しい count を表示してるけど、そこにはまだ何も代入してないよな?
0532デフォルトの名無しさん
2011/04/12(火) 00:46:31.54直しましたが、stockには検索結果は保存されずに、最後のファイル名
だけが列挙して表示されてしまいます。なぜですか?何か解決方法が
あったら教えてください。よろしくお願いします。
0533デフォルトの名無しさん
2011/04/12(火) 00:47:25.330534デフォルトの名無しさん
2011/04/12(火) 00:52:27.51中身をコピーしてるわけじゃない
c_file.nameを指してるだけ
findnextを呼ぶたびにc_file.nameの中身は書き変わるから
0535デフォルトの名無しさん
2011/04/12(火) 00:55:45.96よろしくお願いします。
0536デフォルトの名無しさん
2011/04/12(火) 00:58:50.440537デフォルトの名無しさん
2011/04/12(火) 01:02:06.43具体的にコードで説明していただけるとありがたいのですが。
申し訳ありませんが、よろしくお願いします。
0538デフォルトの名無しさん
2011/04/12(火) 01:05:03.86↓
char stock[256][ファイル名を格納するのに充分な長さ];
0539デフォルトの名無しさん
2011/04/12(火) 01:11:45.75一列目にはcountを、では2列目はname?
よろしくお願いします。
0540デフォルトの名無しさん
2011/04/12(火) 01:31:53.07とりあえず円の中で星を作るってのはわかるんだけど、星の特長とか公式とか覚えてない
誰かおせーておくんなまし
0541デフォルトの名無しさん
2011/04/12(火) 01:37:50.30ポインタを代入する代わりにstrcpy()するだけだよ。
この説明で判らないのなら、先ずは文字列の取り扱いを勉強するところから。
0542デフォルトの名無しさん
2011/04/12(火) 01:55:06.09Cの言語仕様にはlineもcircleもないのでその辺りは自分で使いたいライブラリを勝手に調べてくれ。
どんな星を描きたいのかも判らないけど五芒星や六芒星でいいのなら、
それぞれ円を五等分、六等分する点を計算で求めてそれを一つおきに線分で結べばいいだけ。
円を等分する点を求めるのはそんなに難しくないけど計算式まで書かないとダメ?
0543デフォルトの名無しさん
2011/04/12(火) 01:57:47.35なぜ二次元配列が必要なのでしょうか?
ポインタのさす文字列をコピーするのに2次元配列が必要なのですか?
コピーされた文字列は2次元配列のどこに格納されるのでしょうか?
読み出すときはどうすればいいのでしょう?
解らないことだらけです。よろしくお願いします。
0544デフォルトの名無しさん
2011/04/12(火) 02:02:15.32文字列を扱うのには配列(或いは明示的に確保された空間)が必要なの。
文字列の配列を扱うには、配列の配列が必要なわけ。数学的な意味の二次元配列じゃないからね。
0545デフォルトの名無しさん
2011/04/12(火) 02:05:49.95ありがとん
よければ式書いてもらいたいです・・・
0546デフォルトの名無しさん
2011/04/12(火) 02:08:38.74急いでます。よろしくお願いします。
0547デフォルトの名無しさん
2011/04/12(火) 02:10:49.09自助努力もできないなら諦めたら?
或いは宿題スレに丸投げしたら書いてくれるかもよ。
0548デフォルトの名無しさん
2011/04/12(火) 02:48:13.59#include <stdio.h>
#include <math.h>
static double pi() {return 3.14159265358979;}
static double deg2rad(double x) {return x / 180 * pi();}
static void print5pointedStar(double length)
{
for (int ic = 0; ic <= 5; ++ic) {
double const angle = deg2rad(ic * 144);
printf("%g, %g\n", length * sin(angle), length * cos(angle));
}
}
int main()
{
print5pointedStar(10);
return 0;
}
--
当然、lineなんて知らんから座標を出力するだけ。
この出力をExcelかなにかに放り込んでやればグラフとして五芒星が描かれる筈。
OpenOfficeCalcではペーストして選択してグラフにして散布図にして線のみを選択。
後は適当に応用してね。
# gccで最適化ありにしたら、全部即値でループアンローリングまでしやがったw
0549デフォルトの名無しさん
2011/04/12(火) 02:53:27.49謎が解けた。めっちゃありがとう
0550デフォルトの名無しさん
2011/04/12(火) 10:19:40.34複数のファイル名に分解して一つずつ処理したいのですが、リストの
作り方がわかりません。どなたかわかる人がいればよろしくお願い
します。
0551デフォルトの名無しさん
2011/04/12(火) 10:25:50.40日本語で
0552デフォルトの名無しさん
2011/04/12(火) 10:39:43.051)落ち着いて。2)山にこもって再度考えてから。3)書き直し。
0553デフォルトの名無しさん
2011/04/12(火) 11:20:05.11入力:*.c *rb
list[0]=*.c;
list[1]=*.rb
for(i=0;i<ワイルドカードの数;i++)
find(list[i])
という処理がしたいのですが、scanfから取り込んだ文字列を
複数のリストに分けて代入する方法がわかりません。
よろしくお願いします。
0554デフォルトの名無しさん
2011/04/12(火) 11:42:40.35そりゃ大変だ。"*.c", "*.rb"をそれぞれ取り込むだけならちょっとした文字列操作だからそれほど難しくない。
しかし、それをワイルドカードとしてディレクトリを検索するとなるとCの言語使用の範囲内では不可能。
従って、環境と具体的にやりたいことを整理した上でC/C++環境依存スレで聞き直したほうがいい。
0555デフォルトの名無しさん
2011/04/12(火) 12:02:21.47findという関数はもう用意されていて、前半の文字列分割だけを聞きたいのかも
0556デフォルトの名無しさん
2011/04/12(火) 12:18:06.82表示するものです。従って文字列分割の方法がわかればいいのですが、
strtokを使うと分割できると聞いたのでやってみましたが、scanfで
取り込んだ文字列はスペース以降を文字列として除外してしまうらしく
うまくいきません。どのようにすればscanfを使って、またそれ以外の
方法でもいいのですが出来るでしょうか?ただしmain関数の引数として
の記述は不可です。よろしくお願いします。
0557デフォルトの名無しさん
2011/04/12(火) 12:20:54.77scanfは自動的に空白で文字列を分割する
0558デフォルトの名無しさん
2011/04/12(火) 12:23:15.28scanfじゃないとだめ?
getsの方がスペースも取り込めて楽じゃない?
0559デフォルトの名無しさん
2011/04/12(火) 12:26:34.33自作したなら、アルゴリズム見直した方がいい。
それだと拡張子100個なら100回探査するぞ。
0560デフォルトの名無しさん
2011/04/12(火) 12:27:09.27gets()なんて使っちゃダメ。
>>556
fgets()で1行丸々取り込むのが何かと便利。
その後はstrtok()でばらしてもいいし、sscanf()でばらしてもいい。
つーか、空白区切りだとすると空白を含むファイルパターンは使えなくなるけどいいの?
それと、どうしてもscanf()を使いたいなら%sの代わりに%[^\n]として改行以外全部取り込む方法もあることはある。
0561デフォルトの名無しさん
2011/04/12(火) 12:27:28.250562デフォルトの名無しさん
2011/04/12(火) 12:28:59.69ながーいファイルパターンを入力してご覧。
0563デフォルトの名無しさん
2011/04/12(火) 13:01:30.44自分の環境になかったら自作しても良い。fgetsあれば自作できる。
0564デフォルトの名無しさん
2011/04/12(火) 13:05:35.29もしかして、C++スレとお間違いでは?
0565デフォルトの名無しさん
2011/04/12(火) 13:11:09.89#define _GNU_SOURCE すればstdio.hから取り込めるやつ。
0566デフォルトの名無しさん
2011/04/12(火) 13:51:14.860567デフォルトの名無しさん
2011/04/12(火) 14:20:15.850568デフォルトの名無しさん
2011/04/12(火) 14:20:56.970569デフォルトの名無しさん
2011/04/12(火) 14:25:31.05"ではさまれた区画の区切り文字は 区切りとして作用させない って例外の為だけに
0570デフォルトの名無しさん
2011/04/12(火) 14:29:38.35要求仕様を検討し扱う必要がなければ、詳細仕様で扱わないとすれば宜しい。
どうしても扱いたい場合は要求仕様と矛盾しないように詳細仕様でフォーマットを決定する必要がある。
プログラミングの時間は、しばしばこうした仕様の検討に費やされていくものだ。
0571デフォルトの名無しさん
2011/04/12(火) 14:57:33.87int find(moji name2[256],int sum2){
struct _finddata_t c_file;
long hFile;
int count=0,i,j;
for(j=0;j<sum2;j++){
// カレント ディレクトリ内の最初のファイルを探します。
if( (hFile = _findfirst( name2[j].m, &c_file )) == -1 ){
printf( "カレント ディレクトリにはファイルは存在しません。 %s\n" ,name[j].m);
system("pause");
}
else{
printf( " %-12s \n", c_file.name );
strcpy(name[count].m,c_file.name);
count++;
// 残りのファイルを探します
while( _findnext( hFile, &c_file ) == 0 ){
strcpy(name[count].m,c_file.name);
count++;
printf( "%s ", c_file.name);
printf( "%s \n", name[count-1].m);
}
_findclose( hFile );
}
}
for(i=0;i<count;i++)
printf( "%s \n", name[i].m);
return count;
}
0572552
2011/04/12(火) 15:23:19.93strtok で文字列を区切る話は、ここまでで締め切りとします。
0573デフォルトの名無しさん
2011/04/12(火) 15:51:58.06環境も提示せずに断片だけ見せられてもなんとも言えない。
動いているならいいんじゃない?
0574デフォルトの名無しさん
2011/04/12(火) 17:10:45.03場合はどのようにすればいいのでしょう?
パスを入れてもファイル名以外は引き継がないらしいです。
また見つかっても処理したファイルはカレントディレクトリの
中で大きさが0の殻のファイルしか出来ません。
ほかのディレクトリのファイルをそのファイルのある場所に処理した
ファイルを置くには何をどうすればいいのでしょうか?
わかる人よろしくお願いします。
0575デフォルトの名無しさん
2011/04/12(火) 19:28:10.89freeコマンドで取得した戻り値解析する方法しかわかりません。
0576デフォルトの名無しさん
2011/04/12(火) 21:13:08.77http://codepad.org/jE2PzcWl
[Alt] + [Ctrl] + [F1]
gcc -o a tt_put_star.c -lm
sudo ./a
0577デフォルトの名無しさん
2011/04/12(火) 22:35:25.28char s1[10] ="abc";
struct point {
char *data;
} pointer;
pointer->data = malloc(10);
説明のためかなり適当で省略していますが。。。
char *dataにmallocで確保した領域のポインタが入っています。
pointer->dataに文字列をコピーしたいのですが、どのように書けばいいですか?
memcpy(pointer->data, s1, 4); これだとdataにコピーしようとしてしまいますよね?
また、pointer->dataに既に文字列へのポインタが入っており、strcatする場合もどのように書けばいいですか?
0578577
2011/04/12(火) 22:40:40.54と書きましたが、mallocで確保した領域にコピーしたいという意味です。
0579デフォルトの名無しさん
2011/04/12(火) 23:05:41.32char s1[10] ="abc";
struct point {
char *data;
} pointer
pointer.data = malloc(10);
memcpy(pointer.data, s1, 4);
strcat(pointer.data,"str");
0580577
2011/04/12(火) 23:11:31.69レスありがとうございます
書いてませんでしたが別関数にポインタで渡してるので
pointer->dataで合ってます。。。
はい、どうぞ。
http://codepad.org/esQqoiSN
0582デフォルトの名無しさん
2011/04/12(火) 23:34:11.55必要なところは省くなよ
577で動くんじゃないの?
あとは
strcat(pointer->data,"str");
0583デフォルトの名無しさん
2011/04/13(水) 01:46:29.040584デフォルトの名無しさん
2011/04/13(水) 01:56:20.0264bit CPU で 64bit OS を動かしていて 64bit プロセスで LP64 とかなら基本はそう。
C 以外の言語だと、Java なんかは -XX:+UseCompressedOops を付けると64bit プロセスでも
アドレス幅が 32bit で済んだりする場合もある。
0585デフォルトの名無しさん
2011/04/13(水) 01:57:46.55おお〜すっきりしましたありがとう。
0586デフォルトの名無しさん
2011/04/13(水) 01:59:45.47ポインタのサイズも従来通り。
C ではなく、GC のある言語で tagbit を使っていたりすると、実効ポイント幅は
30bit だったりする事もある。
0588デフォルトの名無しさん
2011/04/13(水) 02:10:51.94まことに恐れ入りました、ありがとうございます。
0589デフォルトの名無しさん
2011/04/13(水) 06:00:32.05場合はどのようにすればいいのでしょう?
パスを入れてもファイル名以外は引き継がないらしいです。
また見つかっても処理したファイルはカレントディレクトリの
中で大きさが0の殻のファイルしか出来ません。
ほかのディレクトリのファイルをそのファイルのある場所に処理した
ファイルを置くには何をどうすればいいのでしょうか?
わかる人よろしくお願いします。
0590デフォルトの名無しさん
2011/04/13(水) 06:13:03.75やフォルダに適用する方法がわかりません。よろしくお願いします。
int find(moji name2[256],int sum2){
struct _finddata_t c_file;
long hFile;
int count=0,i,j;
for(j=0;j<sum2;j++){
// カレント ディレクトリ内の最初のファイルを探します。
if( (hFile = _findfirst( name2[j].m, &c_file )) == -1 ){
printf( "カレント ディレクトリにはファイルは存在しません。 %s\n" ,name[j].m);
system("pause");
}
else{
printf( "name %s \n", c_file.name );
strcpy(name[count].m, c_file.name);
count++;
// 残りのファイルを探します
while( _findnext( hFile, &c_file ) == 0 ){
strcpy(name[count].m,c_file.name);
count++;
printf("b%s ", c_file.name);
printf("a%s \n", stock[count-1].m);
}
_findclose( hFile );
}
}
}
0591デフォルトの名無しさん
2011/04/13(水) 06:33:52.61name2[j].m にパスを入れればいい
0592デフォルトの名無しさん
2011/04/13(水) 06:41:32.82しても、カレントディレクトリの結果が出てきてしまいます。検索結果
とファイル処理の場所が異なってしまうので、ファイルが見つからず
エラーになってしまいます。どのようにすればいいでしょう?、また
デフォルトではカレントディレクトリを探したいと思います。
長々と書きましたが、よろしくお願いします。
0593デフォルトの名無しさん
2011/04/13(水) 06:58:58.48とりあえず _findfirst() の手前に puts(name2[j].m); を入れて、_findfirst() に何が渡されているか調べてみろ
それと name2[0〜sum].m が _findfirst() で使われているのに後で name[0〜].m に strcpy() されているのは大丈夫か
あと stock とは何者?
0594デフォルトの名無しさん
2011/04/13(水) 07:15:39.61が処理できるようになります。
name[j].mにはパスが入ってましたか、検索結果のリストに代入する
時にカレントディレクトリで見つかったファイル名を代入するので
うまくいきません。以下の部分が問題だと思うのですが解りません。
よろしくお願いします。
else{
printf( "name %s \n", c_file.name );
strcpy(name[count].m, c_file.name);
count++;
// 残りのファイルを探します
while( _findnext( hFile, &c_file ) == 0 ){
strcpy(name[count].m,c_file.name);
count++;
printf("b%s ", c_file.name);
}
0595デフォルトの名無しさん
2011/04/13(水) 07:24:55.77stockはmameと同じ構造体ですが、ダイレクトにパスを指定したいので
使いません。パスが入っていて、name[i].mと連結させてパスを通そう
としましたが無駄でした。
strcmy()で見つかったファイルのリストを作りたいのですが、カレント
ディレクトリで見つかったファイルしか代入されません。
一体何をコピーすればいいのかわかりません。よろしくお願いします。
0596デフォルトの名無しさん
2011/04/13(水) 07:33:33.57までコピーされないのが原因だと思うのですが、どうしたらパス付き
のリストを作れますか?ちなみに検索結果はあっているようですが、
処理の対象のファイルが間違っています。実行環境はMinGWです。
Visual Studioでもやっています。
0597デフォルトの名無しさん
2011/04/13(水) 07:46:53.44【初心者歓迎】C/C++室 Ver.75【環境依存OK】
http://hibari.2ch.net/test/read.cgi/tech/1299218426/
0598デフォルトの名無しさん
2011/04/13(水) 07:49:03.900599552
2011/04/13(水) 08:02:39.870600デフォルトの名無しさん
2011/04/13(水) 15:00:41.50とりあえず name2 以外の引数を持たせて、そこに検索対象パスを格納するようにしろ
入力と出力を混ぜるのは、メモリに困った時以外ダメ、絶対
>>596
_findfirst() 系がパス情報を含まないファイル名しか返さないのは仕様なので、自動で
フルパスを得るのはあきらめる事。
パス文字列を組み立てるには sprintf(name[count].m, "%s\\%s", 検索対象パス, c_file.name);
とでもすること (「検索対象パス」 は適宜変数名に置き換えること)。
0601デフォルトの名無しさん
2011/04/13(水) 15:14:13.98これってunixでは使えないし、winAPIでもないし。
0602デフォルトの名無しさん
2011/04/13(水) 16:59:40.49関数の外部からくるサイズのわからないchar*の変数srcから
charの変数destに文字列をコピーしたいのですが、下記のようなコードで問題無いでしょうか?
destのバッファより大きなsrcがきた場合は切り捨てても問題ありません。
char dest[1025];
ZeroMemory(dest, sizeof(dest));
strncpy(dest, src, sizeof(dest) - 1);
気になったのは、srcがdestより小さい場合、strncpyでsrcの領域を超えてコピーすることになるので、
おかしな事にならないかと言うことです。
また、strncpyの際にsizeから-1しているのは、常に最後の\0を保持するために必要という理解です。
小さい方のサイズでコピーするとか下記のようにやらないと駄目でしょうか?
strncpy(dest, src, strlen(src) < sizeof(dest) - 1 ? strlen(src) : sizeof(dest));
0603デフォルトの名無しさん
2011/04/13(水) 17:04:05.57src が NUL文字終端の文字列なら問題ない
0604デフォルトの名無しさん
2011/04/13(水) 17:06:40.59ありがとうございます。
すっきりしました!
0605デフォルトの名無しさん
2011/04/13(水) 17:08:04.99…… ZeroMemory で埋めてるのか。 ちょっとドキっとするね(俺的に)
0606デフォルトの名無しさん
2011/04/13(水) 17:09:06.61自分はサンプルがあるのでそれを使ってしまいましたがそれ以外に方法が
あるなら教えてください。
また2次元配列の2次元目だけに値を入れるにはどうしたらいいでしょうか。
自分は解らなかったので配列の構造体にしました。よろしくお願いします。
ファイルネームの先頭に、strcatでパスをくっつけて検索したらうまく
行きましたが何か問題があるでしょうか?
0607デフォルトの名無しさん
2011/04/13(水) 17:13:38.71レスありがとうございます。
こういう感じでしょうか?
char dest[1025];
strncpy(dest, src, sizeof(dest));
dest[sizeof(dest)-1] = '\0';
null終端文字列の場合は
memsetやzeromemory使うより
こういう感じの方がすっきりしますか?
0608デフォルトの名無しさん
2011/04/13(水) 17:17:04.27危なそうなコードの直後に対処は考えてますよコードが居るのと
頭で危険性回避コード 後で危なそうなコードが居るの
個人的な気分の違いだけだよんw
0609デフォルトの名無しさん
2011/04/13(水) 17:23:56.670610606
2011/04/13(水) 17:24:00.22レスありがとうございます。
わからないことが多いのでよろしくお願いします。
0611デフォルトの名無しさん
2011/04/13(水) 17:26:16.67ZeroMemory(dest, sizeof(dest));
strncpy(dest, src, sizeof(dest) - 1);
0612デフォルトの名無しさん
2011/04/13(水) 17:40:19.77ちょっと混乱してきました。
sizeofですけど、
sizeofするのが、配列の場合は配列の全体サイズ
変数の場合は変数のサイズと理解しています。
char dest[1025];
size_t size_a = sizeof(dest); /*size_a は 1025*/
size_t size_b = sizeof(dest[0]); /*size_b は 1*/
0というのはどういうことでしょうか?教えていただけませんか?
0613デフォルトの名無しさん
2011/04/13(水) 17:41:14.12なるほど、そういうことですね。
理解しました
0614デフォルトの名無しさん
2011/04/13(水) 17:46:13.56まちがえた。strlenかとおもった
0615デフォルトの名無しさん
2011/04/13(水) 17:48:22.13いずれにしても間違えてるだろ。
strcpy(dest, src)にしとけ。
0616デフォルトの名無しさん
2011/04/13(水) 19:05:42.06>>615
char dest[8];
char* src = "12345678901234567890";
strcpy(dest, src);
コピー先のバッファが小さい場合など
上記のケースでも問題無いのでしょうか?
0617デフォルトの名無しさん
2011/04/13(水) 19:21:50.30http://codepad.org/9s4vxEAC
以前読んだosaskの川合さんのソースコードで、リングバッファーのインデックス移動時の境界での挙動を
条件分岐を使わずに解決する巧い仕組みをマスクによって実現してるコードがあった。それと同じアプローチで。
0618デフォルトの名無しさん
2011/04/13(水) 19:22:37.87destは十分大きく取っておけばいいだけ。
MAXを決めておくか、n=strlen(src)として
char *dest = new char [n+1];
0619デフォルトの名無しさん
2011/04/13(水) 19:32:48.57任意の長さで、バッファ管理が面倒ならばC++つかえ。
これだけで、メモリ自動確保とデータコピーをしてくれる。
static string dest;
dest = (string)src;
0620デフォルトの名無しさん
2011/04/13(水) 20:25:23.460621デフォルトの名無しさん
2011/04/13(水) 20:33:09.750622デフォルトの名無しさん
2011/04/13(水) 20:36:38.250623デフォルトの名無しさん
2011/04/13(水) 20:37:41.610624デフォルトの名無しさん
2011/04/13(水) 20:48:31.710625デフォルトの名無しさん
2011/04/13(水) 20:56:22.700626デフォルトの名無しさん
2011/04/13(水) 20:57:41.650627デフォルトの名無しさん
2011/04/13(水) 20:59:26.570628デフォルトの名無しさん
2011/04/13(水) 21:02:26.47なかったら、sprintf()がいちばんマシかな。
0629デフォルトの名無しさん
2011/04/13(水) 21:05:40.790630デフォルトの名無しさん
2011/04/13(水) 21:09:19.760631デフォルトの名無しさん
2011/04/13(水) 21:10:02.16atoi()は違うだろ。
0632デフォルトの名無しさん
2011/04/13(水) 21:10:39.800633デフォルトの名無しさん
2011/04/13(水) 21:12:41.520634デフォルトの名無しさん
2011/04/13(水) 21:14:31.250635デフォルトの名無しさん
2011/04/13(水) 21:14:32.820636デフォルトの名無しさん
2011/04/13(水) 21:16:15.110637デフォルトの名無しさん
2011/04/13(水) 21:16:19.34ポインタの配列なんだから出来る
0638デフォルトの名無しさん
2011/04/13(水) 21:19:51.060639デフォルトの名無しさん
2011/04/13(水) 21:20:41.81それは不可能
0640デフォルトの名無しさん
2011/04/13(水) 21:25:34.80そもそも「関数の配列」が定義できない
0641デフォルトの名無しさん
2011/04/13(水) 21:26:19.510642デフォルトの名無しさん
2011/04/13(水) 21:33:11.140643デフォルトの名無しさん
2011/04/13(水) 21:38:32.09機械語変換済みバイナリの集団が配列になるようなものなのか?
要素間のアドレス差が最も大きいもの単位になってるっていうような
0644デフォルトの名無しさん
2011/04/13(水) 21:58:53.460645デフォルトの名無しさん
2011/04/13(水) 22:11:27.34関数によって定義しなきゃ駄目じゃねぇかww
0646デフォルトの名無しさん
2011/04/13(水) 22:13:55.440647デフォルトの名無しさん
2011/04/13(水) 22:21:41.08int func[10]();
0648デフォルトの名無しさん
2011/04/13(水) 22:23:38.76文字列の配列で
char s[] = "hogehoge";
とかはよくやりますが、文字列リテラルはchar[]型には代入できないというのはわかっています。
ところが、文字列配列を受け取る関数
foo(char s[])
とかを定義すると、
foo("hogehoge")
で呼び出しができてしまいます。内部でsの値をいじろうとすると怒られるので
文字列リテラルだと認識されているようです。これは、関数呼び出し時に代入演算
でない渡し方になっているということでしょうか。
0649デフォルトの名無しさん
2011/04/13(水) 22:24:52.990650602
2011/04/13(水) 22:25:30.28sprintfをstrcpyの代わりに利用するというのは
次のようなコードの事ですね。
char dest[8];
char* src = "12345678901234567890";
strcpy(dest, src); /*これだと、バッファオーバー*/
sprintf(dest, "%0.7s", src); /*スマート*/
確かにシンプルですね。
コレを利用してみます〜
0651デフォルトの名無しさん
2011/04/13(水) 22:27:28.08typedef int (*func_ptr)(const char *, ...);
func_ptr a[] = { printf, scanf };
こんなんでよろしいか?
0652デフォルトの名無しさん
2011/04/13(水) 22:29:14.11代入っつーか文字列の先頭のアドレスを渡してるだけでしょ。
固定文字列はメモリ空間内の書き換え不能なエリアに配置されるから
書き換えようとすると怒られる。
0653デフォルトの名無しさん
2011/04/13(水) 22:30:53.50それだと int[10] を返す普通の関数に見えるな
0654デフォルトの名無しさん
2011/04/13(水) 22:31:45.10関数に配列を渡すことはできない。
void foo(char s[]);
としても
void foo(char *s);
と同等。
したがって char *s = "hogehoge";
と初期化しているのと同等の処理となる。
char s[] = "hogehoge";
ではない。
0655デフォルトの名無しさん
2011/04/13(水) 22:35:30.960656648
2011/04/13(水) 22:35:34.98ありがとうございます。
そうすると、char[]型のsについて
s = "hogehoge";
ができないというのは配列型特有の特殊な仕様ということでしょうか。
("hogehoge"が単なる先頭ポインタだとすると、配列の先頭ポインタであるはずのsには代入できてもよい気がします)
0657デフォルトの名無しさん
2011/04/13(水) 22:36:31.38配列を返す関数w
int func()[10];
0658デフォルトの名無しさん
2011/04/13(水) 22:37:30.67同じ記号 = を使ってるけど やってることは全然違うから
0659デフォルトの名無しさん
2011/04/13(水) 22:38:34.46エラー
0660648
2011/04/13(水) 22:38:34.70ありがとうございます。
関数に配列引数が指定された場合は暗黙にポインタに読み換えられるということですね。
紛らわしいので明示的にわかる文法にしてほしいですね…。
0662デフォルトの名無しさん
2011/04/13(水) 22:41:11.160663648
2011/04/13(水) 22:43:06.94初期化では
char s[] = "hoge";
とできるのに、それ以外では
s = "hoge";
とできないのは納得がいかない!
と言っているわけではありません。
0664デフォルトの名無しさん
2011/04/13(水) 22:46:07.07http://www7b.biglobe.ne.jp/~robe/cpphtml/html01/cpp01077.html
ここを読むといいよ
0665デフォルトの名無しさん
2011/04/13(水) 22:46:16.92sは、アドレスを示すラベルみたいなものだから。
最初にそのアドレスに格納することはできるけど、
そのラベルに何かを代入するのは出来ない。
0666デフォルトの名無しさん
2011/04/13(水) 22:46:43.19了解。
0667648
2011/04/13(水) 23:02:13.84sはポインタですが、"hoge"がfoo(char s[])に渡されるときは"hoge"という文字列の先頭ポインタが渡されるのだとすると、
リテラル"hoge"自体が適当に確保されたメモリに格納された文字列hogeの先頭'h'に対応するポインタ(メモリアドレス)の値を
持っていると考えるのは自然だと思います。実際>>664にも書いてあります。
また、char s[]のsは配列の先頭ポインタですから、sと"hoge"は同じポインタ型(メモリアドレスの値を持つ)なので、代入可能であっても良い気がします。
しかし実際にはこれはできないので、他のルールがあることになります。それが>>652かと思います。「配列型の暗黙のポインタは」書き込み不能なメモリ領域のアドレスは受け取れない。
一方、foo(char s[])に"hoge"が渡せてしまう問題は、上記ルールにも違反すると思います。これは、「関数の配列引数」に関するまた別のルールがあって、
「関数の配列引数は暗黙に(明示的な)ポインタ型に読みかえられる」というものかと思います。その上では、上記ルールが適用範囲外になるため、"hoge"を
受け取ることができるのではないかと思います。
別の解釈の可能性もあります。「配列の暗黙のポインタ型は初期化時のみリテラルを受け取ることができる」ので、「関数の配列引数への値渡しは初期化処理になる」
のだとすると、上記2つ目のルールはなくても良いことになると思います。
非常にややこしくて気持ち悪いですが、もっとシンプルなルールなのかもと思っています。
0668デフォルトの名無しさん
2011/04/13(水) 23:04:21.73って
foo(char *s)
で解釈されてるだけでしょ
0669デフォルトの名無しさん
2011/04/13(水) 23:16:53.00配列は代入可能な左辺値に含まれないので、配列に代入することはできない。
なんども繰り返されているが、
1)char s[] = hoge;
は初期化付きの宣言であり、代入ではない。
2)配列は関数の引数に指定できない。
0670デフォルトの名無しさん
2011/04/13(水) 23:20:13.86ポインタや配列がどういうもんなのか分かってないようだから
http://www.kab-studio.biz/Programing/Codian/Pointer/07.html
ここを一読したあとに
IDEでも使って実際に確認するといいよ
0671デフォルトの名無しさん
2011/04/13(水) 23:24:07.18・まずテキストエリアに "foo" がアロケートされる
・s は "foo" の先頭アドレスで初期化される
・puts() には "foo" の先頭アドレスである所の s が渡される
・非常に自然な流れなのでオケ
2) char s[10]; s = "foo";
・まずテキストエリアに "foo" がアロケートされる
・s は char が 10 個分のデータとしてスタックにアロケートされる
・s に "foo" の先頭アドレスを代入しようとすると、ひとつ前で
スタック上にアロケートした char 10 個分はどうなるの?
・不自然な流れになるのでエラー
3) puts("foo");
・まずテキストエリアに "foo" がアロケートされる
・puts は "foo" の先頭アドレスを引数として受け取る
・非常に自然な流れなのでオケ
0672デフォルトの名無しさん
2011/04/13(水) 23:25:46.58>・puts() には "foo" の先頭アドレスである所の s が渡される
これは消し忘れた。スマソ。
0673デフォルトの名無しさん
2011/04/13(水) 23:31:31.870674デフォルトの名無しさん
2011/04/13(水) 23:33:22.361) char s[] = "foo";
配列の値はコンパイル時に決定されてるから、アロケートっておかしいだろ?
0675デフォルトの名無しさん
2011/04/13(水) 23:38:16.24{
{ -1, -1, -1, -1, -1 } ,
{ -1, -1, -1, -1, -1 } ,
{ -1, -1, -1, -1, -1 } ,
{ -1, -1, -1, -1, -1 } ,
{ -1, -1, -1, -1, -1 } ,
} ,
{
{ -1, -1, -1, -1, -1 } ,
{ -1, -1, -1, -1, -1 } ,
{ -1, -1, -1, -1, -1 } ,
{ -1, -1, -1, -1, -1 } ,
{ -1, -1, -1, -1, -1 } ,
};
この書き方ではダメと言われました、3次元配列を一気に入れるときはどう書けばよいのでしょうか?
0676デフォルトの名無しさん
2011/04/13(水) 23:38:47.80int a[5][5][2] =
{
{ -1, -1, -1, -1, -1 } ,
{ -1, -1, -1, -1, -1 } ,
{ -1, -1, -1, -1, -1 } ,
{ -1, -1, -1, -1, -1 } ,
{ -1, -1, -1, -1, -1 } ,
} ,
{
{ -1, -1, -1, -1, -1 } ,
{ -1, -1, -1, -1, -1 } ,
{ -1, -1, -1, -1, -1 } ,
{ -1, -1, -1, -1, -1 } ,
{ -1, -1, -1, -1, -1 } ,
};
でした
0677デフォルトの名無しさん
2011/04/13(水) 23:40:29.240678デフォルトの名無しさん
2011/04/13(水) 23:44:02.93解決しましたトンクス
0679デフォルトの名無しさん
2011/04/13(水) 23:44:46.46アロケートはメモリの割当の事で、値の決定とは関係無いよ
0680648
2011/04/13(水) 23:55:31.241:"hoge"は変更不可な領域を指すポインタ
2:char s[] = "hoge"は変更可能な領域に静的に確保されたメモリに"hoge"を書きこんで先頭ポインタを返す
3:char s[]で定義したsは変更不可なため、アドレスを変更しようとする(s="fuga"とか)と怒られる
4:foo(char s[])は暗黙にfoo(char* s)と読み換えられる。したがってfoo("hoge")は変更不可能な領域を指すポインタ
が渡されるため、内部で変更しようとすると怒られる
「変更不可」が2つの意味(内容の変更不可(リテラル)と、メモリアドレスの変更不可(左辺値))を持っていたために混乱したのかと思っています。
0681デフォルトの名無しさん
2011/04/14(木) 00:00:59.062がおかしい。
0682デフォルトの名無しさん
2011/04/14(木) 00:23:00.17>2:char s[] = "hoge"は変更可能な領域に静的に確保されたメモリに"hoge"を書きこんで先頭ポインタを返す
分かってるかもしれないけど、"hoge" がメモリ上に書き込まれるのはプロセス起動時ね。
0683デフォルトの名無しさん
2011/04/14(木) 00:36:00.72配列は何も返さない
0684デフォルトの名無しさん
2011/04/14(木) 00:40:50.55sが先頭ポインタを返すんです
と思う
0685デフォルトの名無しさん
2011/04/14(木) 00:55:54.94硫黄が放射能を返すってのと同じくらいありえない
0686デフォルトの名無しさん
2011/04/14(木) 01:02:14.830687デフォルトの名無しさん
2011/04/14(木) 01:07:30.56全然分かっていない。
1:"hoge"は変更不可な領域を指すポインタ
→文字列リテラルの型はconst char の配列。
2:char s[] = "hoge"は変更可能な領域に静的に確保されたメモリに"hoge"を書きこんで先頭ポインタを返す
→char s[] = "hoge";はchar s[] = {'h','o','g','e'};を簡易にかけるようにした構文糖。
3:char s[]で定義したsは変更不可なため、アドレスを変更しようとする(s="fuga"とか)と怒られる
→char s[N];で定義した配列sは、式の中では&s[0]として評価される。(&, sizeofのオペランドになる場合は例外)
4:foo(char s[])は暗黙にfoo(char* s)と読み換えられる。したがってfoo("hoge")は変更不可能な領域を指すポインタ
が渡されるため、内部で変更しようとすると怒られる
→sが指している先は書き換えられない("hoge"の型はconst char[5]であるため)ので、sが指している先を変更しようとすると怒られる。
きれい。でも FILO のようなきが。
0689デフォルトの名無しさん
2011/04/14(木) 01:11:06.08もしかして LIFO ?
0690デフォルトの名無しさん
2011/04/14(木) 01:19:53.42>→char s[] = "hoge";はchar s[] = {'h','o','g','e'};を簡易にかけるようにした構文糖。
これは俺も勘違いしてた。ありがとん。
0691デフォルトの名無しさん
2011/04/14(木) 01:21:27.45ちなみに間違ってるけどw
ご指摘感謝。どっちでもいいみたい。
http://ja.wikipedia.org/wiki/LIFO
0693デフォルトの名無しさん
2011/04/14(木) 01:37:25.14なぬ・・・
おとなしく規格読むことにするわ・・・
0694デフォルトの名無しさん
2011/04/14(木) 01:47:56.12がんばってねー
687 読むとお腹痛くなるまで
笑いは健康にいいからね
0695デフォルトの名無しさん
2011/04/14(木) 02:02:26.590696デフォルトの名無しさん
2011/04/14(木) 02:07:15.010697デフォルトの名無しさん
2011/04/14(木) 02:14:46.87まだ1つしか気付かないの?
突っ込みどこ満載の蜂の巣なんだが
0698デフォルトの名無しさん
2011/04/14(木) 03:54:21.420699デフォルトの名無しさん
2011/04/14(木) 03:55:12.23C99 においては一緒。
0701デフォルトの名無しさん
2011/04/14(木) 04:09:25.060702デフォルトの名無しさん
2011/04/14(木) 04:12:43.04嘘を書くな、嘘を。
失礼。正確には >>701 のとおり。
ISO/IEC 6.7.5.3.14
An identifier list declares only the identifiers of the parameters of the function. An empty
list in a function declarator that is part of a definition of that function specifies that the
function has no parameters. The empty list in a function declarator that is not part of a
definition of that function specifies that no information about the number or types of the
parameters is supplied
0704703
2011/04/14(木) 04:20:32.370705デフォルトの名無しさん
2011/04/14(木) 04:25:22.92(void) 引数を持たない
() 引数情報を持たない
void f1(){}
void f2(void){}
int main(){
f1(100); //ok
//f2(200); //compile error
return 0;
}
0706デフォルトの名無しさん
2011/04/14(木) 04:26:58.87お前はアホで頭が悪いんだから。それが本当の姿なのに、無理に自分を
頭のいい特別な存在だと思い込みたがるもんだからあちこちにボロが出る。
それ自体は別に悪い事ではないが、問題はお前がその事実を絶対に認め
たがらない事だ。だから嫌われているという事に気づけ。社会からもそれが
原因でのけ者になっているだろう。
0707デフォルトの名無しさん
2011/04/14(木) 04:47:42.67>>698は
mainについて聞いているんじゃないのか?
0708687
2011/04/14(木) 07:03:00.02終端文字忘れていた。
char s[] = "hoge";はchar s[] = {'h','o','g','e','\0'};
です。
4ではちゃんと("hoge"の型はconst char[5]であるため)と終端文字のこと意識していたのだけれど。
>694
上記終端文字以外間違いはないと思います。
誤りあればご指摘いただけませんか?
0709デフォルトの名無しさん
2011/04/14(木) 07:32:20.300710デフォルトの名無しさん
2011/04/14(木) 07:35:08.48つーか、判ってないのに煽るだけなんてのは最悪。
0711デフォルトの名無しさん
2011/04/14(木) 09:21:53.25#include <windows.h>
int main(void){
char buffer[MAX_PATH];
GetFullPathName("../cc/16.rb", MAX_PATH, buffer, NULL);
puts(buffer);
}
このプログラムを実行するとパスを含んだファイル名が出力され
ますが、ファイル名を除いたパス名だけを取得するにはどうすれば
いいでしょうか。環境はビスタでVisual Studioです。
よろしくお願いします。
0712デフォルトの名無しさん
2011/04/14(木) 09:25:59.03絶対(相対)ファイル名を入力して、ファイル名を除いたパスだけの
出力が欲しいです。
0713デフォルトの名無しさん
2011/04/14(木) 09:50:11.07_splitpath
0714デフォルトの名無しさん
2011/04/14(木) 10:13:06.960715デフォルトの名無しさん
2011/04/14(木) 11:06:42.56strrchr(buffer, '/')[0] = '\0';
puts(buffer);
0716デフォルトの名無しさん
2011/04/14(木) 13:44:14.15#include <sys/types.h>
#include <sys/param.h>
を読めなくて躓いているのですが、VCで代替可能なヘッダは用意されているのでしょうか?
0717デフォルトの名無しさん
2011/04/14(木) 14:11:47.09しらねえけど。
コメントアウトして、止まる所の関数、defineを全文検索
0718デフォルトの名無しさん
2011/04/14(木) 14:21:58.44自力で出来ないなら、諦めるしか...
0719デフォルトの名無しさん
2011/04/14(木) 14:27:10.73そですか、コメントアウトして適当に代替関数でもでっち上げてみます。
0720デフォルトの名無しさん
2011/04/14(木) 14:27:52.110721デフォルトの名無しさん
2011/04/14(木) 14:30:20.420722デフォルトの名無しさん
2011/04/14(木) 14:30:45.72* 機能:src からディレクトリとファイルネームを取得し、それぞれを格納する
* 補足:取得を失敗した('/'がなかった)ときは何もしない
*/
void get_dirpath_filename(const char *src, char *dirpath, char *filename)
{
const char *divide = src; /* divide = 区切る. 結果的には src の最後尾にある '/' のアドレスを格納させる */
divide += strlen(src); /* src の終端のアドレスを代入 */
while (src != --divide) /* src の先頭まで '/' を検索する */
if (*divide == '/')
break;
if (src != divide) { /* '/' が見つかった場合は、directory-path, filename の取得 */
strncpy(dirpath, src, divide - src);
*(dirpath + (divide - src)) = '\0';
strcpy(filename, divide + 1);
}
}
この関数でファイル名とパスを分けて格納しますが、ルートディレクトリ
を格納することが出来ません。パスを見ると""になっています。
どのようにすればいいでしょう?よろしくお願いします。
0723デフォルトの名無しさん
2011/04/14(木) 14:54:29.14// コード読む気がしないから判らんが、やりたいことはこういうこと?
void get_dirpath_filename(const char * src, char * dirpath, char * filename)
{
char const * const lastSlash = strrchr(src, '/');
if (lastSlash == NULL) return;
sprintf(dirpath, "%.*s", lastSlash == src ? 1 : lastSlash - src, src);
sprintf(filename, "%s", lastSlash + 1);
}
0724デフォルトの名無しさん
2011/04/14(木) 14:56:21.76どこが問題なのか教えて下さい。お願いします。
コマンドライン引数からアルファベットだけからなる文字列(空文字列を含む)のみを選び、 一行に一つずつ標準出力に出力するプログラムです。
http://codepad.org/mQcnLNqr
0725デフォルトの名無しさん
2011/04/14(木) 14:57:26.24ttp://docs.embarcadero.com/products/rad_studio/radstudio2007/RS2007_helpupdates/HUpdate4/JA/html/devwin32/fnsplit_xml.html
0726デフォルトの名無しさん
2011/04/14(木) 15:06:31.31仕様がよく判らん。取り敢えず、実行結果はこうなった。
--
$ ./a foo bar 123 dd "" Abc3 a2Bc abC
foo
bar
dd
abC
--
で、どうなって欲しいの? つーか、実行できないってどういうことよ。
0727デフォルトの名無しさん
2011/04/14(木) 15:12:22.19その通りです。ありがとうございました。
0728デフォルトの名無しさん
2011/04/14(木) 15:41:05.90./a.outとしても文字入力にならず次の行?にいってしまうんです。
0729デフォルトの名無しさん
2011/04/14(木) 16:04:03.22間違いに気づきました。
有難うございました。
0730デフォルトの名無しさん
2011/04/14(木) 16:05:37.15時々悩むのだが、この for を使う指標、whileを使い分ける指標に対して、
個人的にハッキリとした理由が持てない。
たとえば
int i;
for(i = 0; i < 10; i++) {
putchar('A');
}
と
int i;
i = 0;
while(i < 10) {
putchar('A');
i++;
}
のどちらでも、頭の中のパーサーの動きが同じである。
個人的には、プログラム中にforを一切含めない。すべてwhileで書くことにしている。 forを使うべきか? whileを使うべきか?で思考する手間を省ける。
プロブラム中に for と while を混在させてる人の「使い分けの指標や、判断の拠り所は何なのか?」を聞かせてほしい。
0731デフォルトの名無しさん
2011/04/14(木) 16:07:08.10どっちでもいいやん
「こういう場合はforで・・・」とか語り出す奴は大抵頭がおかしい
0732デフォルトの名無しさん
2011/04/14(木) 16:08:36.15只の代入文を生で放り出しておくよりも、場所を限定してやった方が目的が明確になる。
0733デフォルトの名無しさん
2011/04/14(木) 16:42:41.900734デフォルトの名無しさん
2011/04/14(木) 17:11:58.87}
とした場合forから抜ければiは破棄できる
0735デフォルトの名無しさん
2011/04/14(木) 17:12:40.24それC++/C99の話だろ
0736デフォルトの名無しさん
2011/04/14(木) 17:19:41.13whileだと入り口でi=0;や中でのi++;をうっかり忘れる。
0737デフォルトの名無しさん
2011/04/14(木) 17:20:39.00最近はC++をベターCとして使ってるからあんまいしきしてねえけど。
0738デフォルトの名無しさん
2011/04/14(木) 17:28:27.130739デフォルトの名無しさん
2011/04/14(木) 17:30:57.19古き良き時代のソースみたいに関数がちっちゃいうちは「関数の冒頭でまとめて宣言」でもよかったけど
ちょっと長いプログラムになると宣言ばっかりずらずら並ぶのがうっとうしいし、
関数の最後の方で一回しか使わないような変数を初めから用意しておくってのはあまり現実的じゃないよね。
0740デフォルトの名無しさん
2011/04/14(木) 18:13:53.08struct point{
double x;
int y;
};
struct hist{
struct point **p;
int n;
};
で構造体を宣言し,適当な整数sizeでもって
struct hist* y2;
y2 = (struct hist*)malloc(sizeof(struct hist));
y2->p = (struct point**)calloc(size,sizeof(struct point));
でsize個のpoint配列を持ったhist構造体を作りました。
それで
int s;
s = y2->p[0]->x
でもってy2の0番目(何番目でもエラーが出る)のpoint構造体のメンバx(メンバyでも同じく)
を参照しようとすると
「"0x00000000" のメモリを参照しました。メモリが "read" になることはできませんでした。」
の例外エラーが出ます。
何がいけないんでしょうか?
0741デフォルトの名無しさん
2011/04/14(木) 18:21:35.10for (i = 0; i < size; i++) y2->point[i] = (struct point *)malloc(struct point);
とやってpointの実体を確保しないとまずい
0742デフォルトの名無しさん
2011/04/14(木) 18:22:46.94そしたら2次元配列風になるな
0743デフォルトの名無しさん
2011/04/14(木) 18:24:00.82実はこうしたいんじゃない?
struct hist{
struct point *p;
int n;
};
y2 = (struct hist*)malloc(sizeof(struct hist));
y2->p = (struct point*)calloc(size,sizeof(struct point));
s = y2->p[0].x;
0744デフォルトの名無しさん
2011/04/14(木) 18:25:21.33struct point *p;でs = y2->p[0].xじゃね?
0745デフォルトの名無しさん
2011/04/14(木) 18:29:31.02p は { struct point* が書かれてる場所の } ポインタ
calloc で 戻りの領域は 0 で埋まってるので
*p (or p[0]) は ぬるぽ がっ ってな具合
特に y2->p[index]->x としたい理由がないのなら
struct hist{ struct point *p; int n; };
にして y2->p[index].x のほうが素直
0746デフォルトの名無しさん
2011/04/14(木) 18:39:46.93>>740
struct point **p;
で管理したい(ポイントしたい)のはpointの1次元配列?
それともpointの2次元配列?
なんか説明だと2次元配列って感じするんだが
0747デフォルトの名無しさん
2011/04/14(木) 18:43:17.17>>742
>>743
>>744
>>745
>>746
pointの一次元配列のつもりでしたが、うまくいきました
そして今更ながら自分の勉強不足に・・・><
ほんとうにありがとうございます、これからもちょくちょく利用させてもらいます!
0748デフォルトの名無しさん
2011/04/14(木) 18:46:14.17http://codepad.org/GGHkSmUl
こうしたいのかな?
したい事がよく伝わってこないので適当に書いたが
0749デフォルトの名無しさん
2011/04/14(木) 18:48:53.89あのね、そういう場合は>>741-746って書けるから覚えとくといい
残念ながら、>>701 のとおり、宣言と定義で解釈が異なる。
>An empty list in a function declarator that is part of a definition of that function specifies that the
>function has no parameters.
>void f1(){}
>f1(100); //ok
void f1() {} は void f1(void){} と同等だから、C99 に準拠するコンパイラならエラーになってしかるべき。
インデックスな変数があるなら for() を使っている。
for (p = a, q = b; *p; p++, q++)
*q = *p;
0752デフォルトの名無しさん
2011/04/14(木) 18:54:44.170753デフォルトの名無しさん
2011/04/14(木) 19:13:22.55毎回思うのだが、この人の書くソースコードは汚くて読みにくい。
あと、妙な歪さがいつも気になる。
具体的には、
洗練されてるアルゴリズム部分は、やたら洗練された完璧なアルゴリズムを書くくせに、
一方、イモのようなアルゴリズムの所は、どうしようもなくイモだったりする。たとえばmain()中の、検証用テストコードなんかは、どうしようもなくイモだったりする。
このエレガントさとイモさのギャップが、あまりにも不自然すぎて笑う。というか本当に同じ人間が書いたコードなのか?というコードの混在が、どうにも不思議でならない。
0754デフォルトの名無しさん
2011/04/14(木) 19:32:36.68誰かのパクリなんだろ
ご感想ありがとうございます。
>この人の書くソースコードは汚くて読みにくい。
まだまだ修行が足りませんね。もっと読んでもっと書きます。
>このエレガントさとイモさのギャップが、あまりにも不自然すぎて
そうなんですか。全然気が付きませんでした。
ちょうど http://hibari.2ch.net/test/read.cgi/tech/1295273862/386 に新しいコードを書きましたので、
・汚いところ
・エレガントなところ
・イモなところ
を教えてください。
0756デフォルトの名無しさん
2011/04/14(木) 20:37:52.38コピペ厨だから触んないほうがいいよ
0757デフォルトの名無しさん
2011/04/14(木) 20:45:23.83◆QZaw5 5cn4c はまともな批判をされると常人の百倍ぐらいに苦痛に感じるらしい
要するに頭が狂っているので触らぬキチガイに祟り無し
0758デフォルトの名無しさん
2011/04/14(木) 22:16:16.760759デフォルトの名無しさん
2011/04/14(木) 23:09:15.670760デフォルトの名無しさん
2011/04/15(金) 05:17:12.940761デフォルトの名無しさん
2011/04/15(金) 06:35:31.960762デフォルトの名無しさん
2011/04/15(金) 10:32:46.05ポケモン金銀直撃の世代はみんな一度はやってると思うんだけど
0763デフォルトの名無しさん
2011/04/15(金) 11:46:21.710764デフォルトの名無しさん
2011/04/15(金) 12:01:53.340765デフォルトの名無しさん
2011/04/15(金) 12:16:20.100766デフォルトの名無しさん
2011/04/15(金) 12:31:57.96どういう意味でしょうか?
0767デフォルトの名無しさん
2011/04/15(金) 12:32:14.590768デフォルトの名無しさん
2011/04/15(金) 12:34:25.85最近はOSがアプリに対する制限をいろいろかけてきてるので、
きっとその表現がされていたであろう文脈での危険なプログラムは
書けなくなったかと。
0769デフォルトの名無しさん
2011/04/15(金) 12:34:51.710770デフォルトの名無しさん
2011/04/15(金) 12:35:38.50それを言わないのは正解を知っているからで
正解を知らない綴りに対しては赤っ恥を露呈する
続きはこちらでどうぞ
http://hibari.2ch.net/test/read.cgi/prog/1242268027/
0771デフォルトの名無しさん
2011/04/15(金) 12:38:53.17scanf スキャンフ
fget エフゲッツ
0772デフォルトの名無しさん
2011/04/15(金) 12:39:12.48危険なプログラム?
「核ミサイルの発射プログラム」とか
「不特定多数の人に結婚を申し込むプログラム」とか
そういうのを書けてしまうから非常に危険だね。
0773デフォルトの名無しさん
2011/04/15(金) 12:39:51.78「安全」を自分で作るための道具なので
始めからあったらすることがないのさ
0774デフォルトの名無しさん
2011/04/15(金) 12:44:34.11あるあるあるw@ww
0775デフォルトの名無しさん
2011/04/15(金) 12:48:22.990776デフォルトの名無しさん
2011/04/15(金) 12:49:27.54Cが特に安全対策してないのは明白
0777デフォルトの名無しさん
2011/04/15(金) 12:56:12.680778デフォルトの名無しさん
2011/04/15(金) 12:59:23.79何に対して安全?
>>777
環境
0779デフォルトの名無しさん
2011/04/15(金) 14:16:43.15int a[ ];
int *p;
p=a;
みたいな感じの定義で、aはa[]の(最初の)アドレスで
この2行目、3行目をまとめて表すと
int *p = a;
となるんだけど、これはある意味厳密ではないけど慣例でやってるんだよね?
0780デフォルトの名無しさん
2011/04/15(金) 14:32:41.86慣例?
質問の意味も意図も判らんが変数をきちんと初期化するのはいいことだ。
0781デフォルトの名無しさん
2011/04/15(金) 14:35:21.73int* p = a;
int*型変数を定義して代入。
0782デフォルトの名無しさん
2011/04/15(金) 14:36:21.81おまえのためにわかりやすく括弧を付け加えてやる
0783デフォルトの名無しさん
2011/04/15(金) 14:39:39.59while文処理が行われてる時間においては
while(){}の
()内{}内の情報はstaticですか?
0784デフォルトの名無しさん
2011/04/15(金) 14:41:35.88質問の意図がまったく見えない
0785デフォルトの名無しさん
2011/04/15(金) 14:41:54.02main(){}なんかと同じだよ。
0786デフォルトの名無しさん
2011/04/15(金) 14:46:28.02while(){}の(){}内で例えば1回目ループの最終評価値がn=1とすると、
2回目ループの(){}内でも最初n=1ですか?
それでwhile(){}の処理が終了したとき、最終ループ内でのnの評価値
は保存されてますか?
0787デフォルトの名無しさん
2011/04/15(金) 14:48:36.66質問の意図が判らんが、少なくともそれをstaticとは言わない。
言葉で説明するのはもういいから判りやすいコードの断片を貼ってくれ。
0788デフォルトの名無しさん
2011/04/15(金) 14:51:35.66その変数のスコープの間は有効だよ。
変数のスコープは おおざっぱに言って { から } までの間
void foo()
{
int n;
while (nがうんたらかんたら) {
int j;
n と j 使ってなんかやる
/* j は ここまで生きてる */
}
なんかやる
おわりんぐ
/* n はここまで生きている */
}
0789デフォルトの名無しさん
2011/04/15(金) 15:04:46.14int i=0; /*―(1) */
while (i<5) /* この while の判定対象は (1) */
{
int i=0; /*―(2) : このスコープ内での i は (2) を指す */
i++; /* (2) をインクリメントしたところで (1)のi は変わらない */
}
0790デフォルトの名無しさん
2011/04/15(金) 15:34:07.38int main(void)
{
int i=1;
while(i<10)
{printf("%d\n",i);i++;}
printf("iの値は%d\n",i);}
↓実行結果
・
・
・
・
iの値は10 そうなんですか?
#include<stdio.h>
int main(void)
{
int i=1; int s=100;
while(i<10)
{
int s=99;printf("%d\n",i);i++;}
printf("iの値は%d\n",i);
printf("sの値は%d\n",s);}
sの値は??あれ?
0791デフォルトの名無しさん
2011/04/15(金) 15:44:08.18上
i をインクリメントした (結果が 10 になった)
i < 10 かどうか確認 不成立なので while から抜ける
i の値は 10
下
while の中で ”新たな別変数 s に 99" を代入してるだけで(厳密には初期化 だが) main 直後の s の値は変わらない
while から抜けた
s は 100 のまま
0792779
2011/04/15(金) 16:12:30.41int (*p) = a; だと思ってたわ、型がワワナイ・・・って
例解C言語教科書(CQ出版社)やってんだけど、いい本だな
0793デフォルトの名無しさん
2011/04/15(金) 16:29:55.01きちんと読解できないし、説明できない。
プログラミング言語も言語である以上、似たような能力が必要なのだろうし。
0794デフォルトの名無しさん
2011/04/15(金) 16:42:00.30ついでに高脳なら能力の低いのが言った・書いたことから本質を見抜き、
適切なアドバイスできるがいまや日本は低脳だらけだからな
0795デフォルトの名無しさん
2011/04/15(金) 17:25:02.00新しい言葉を使ってみた気になって悦に入っているのかもしれないが、底の浅さが丸見えだ。
0796デフォルトの名無しさん
2011/04/15(金) 17:34:36.51>は右大なり?
<は左大なり?
0797デフォルトの名無しさん
2011/04/15(金) 17:42:38.570798デフォルトの名無しさん
2011/04/15(金) 17:45:09.38do
while
の長所短所ってなんですか?
0799デフォルトの名無しさん
2011/04/15(金) 17:46:28.170800デフォルトの名無しさん
2011/04/15(金) 17:49:16.460801デフォルトの名無しさん
2011/04/15(金) 17:49:37.12#include<iostream> //いんくるーどあいおーすとりーむ
vector<int> //べくたーいんと
Class->Member //くらすのめんばー
俺はあまり読まないな。
0802デフォルトの名無しさん
2011/04/15(金) 17:55:30.14>>796
right/left angle bracket
0803デフォルトの名無しさん
2011/04/15(金) 17:56:00.97do while文のことです。
0804デフォルトの名無しさん
2011/04/15(金) 17:59:16.83list/dict
0805デフォルトの名無しさん
2011/04/15(金) 18:00:10.60やってみないと条件に関係する変数値が決まらない場合(do より前で適切な値が設定できるかどうか)
マクロのお供 do { } while (0)
while(条件) { } 条件により { } ブロック内は実行されないかもしれない
for() { } while のちょっと気の利いた機能が増えた版
0806デフォルトの名無しさん
2011/04/15(金) 18:01:26.37先ずはこれからだな
for(){
continue;
}
do{
continue;
}while()
continueしたらどこに飛ぶの?
0807デフォルトの名無しさん
2011/04/15(金) 18:03:18.340808デフォルトの名無しさん
2011/04/15(金) 18:06:19.360809デフォルトの名無しさん
2011/04/15(金) 18:07:29.70このような条件式ではなく、単純に >と<の読み方が判りません
0810デフォルトの名無しさん
2011/04/15(金) 18:19:44.12不等号(より小) less-than sign
0811デフォルトの名無しさん
2011/04/15(金) 18:20:06.59アングルブラケットを出すぐらいだからカーリーブラケット、スクエアブラケットでいいんでないかっておもうけど。
0812デフォルトの名無しさん
2011/04/15(金) 18:42:06.79http://mailsrv.nara-edu.ac.jp/~asait/cpp/ntl/ntl.htm
http://www.shoup.net/ntl/
をコンパイルしようとしていますが、
cstdlib(28): error C2061: 構文エラー : 識別子 'strtod'
などというエラーが100個以上出てコンパイルできません。
まだ使い始めたばかりなのでよくわかりません。スタティック
ライブラリを作りたいのですがどうすればいいでしょうか?
ちなみにLinuxやMinGWではうまくいきます。よろしくお願いします。
0813デフォルトの名無しさん
2011/04/15(金) 19:11:07.490815デフォルトの名無しさん
2011/04/15(金) 19:49:48.57a>>=bの違いを教えてください。
どちらも一緒なのでは?
0816デフォルトの名無しさん
2011/04/15(金) 19:50:39.460817デフォルトの名無しさん
2011/04/15(金) 19:51:49.87良い加減うざい
0818デフォルトの名無しさん
2011/04/15(金) 20:16:55.03は
a = a>>b
と同じ
0819デフォルトの名無しさん
2011/04/15(金) 20:52:54.12お前が一番うざいと思われてるよ
0820デフォルトの名無しさん
2011/04/15(金) 20:54:51.23そうでもない
0821デフォルトの名無しさん
2011/04/15(金) 21:00:31.17まじでか・・・orz
0822デフォルトの名無しさん
2011/04/15(金) 21:04:25.64死ね
0823デフォルトの名無しさん
2011/04/15(金) 21:54:28.83しかしパソコンが早すぎてどっちが早いのかわからん。誰か確かめてくれ。
log(1)+log(2)+log(3) = log(3!)であることを利用する。
x = 0;
for(i=1;i<100;i++) x += log(i);
return pow(10,x);
普通方式
x=1;
for(i=2;i<100;i++) x *= i;
return x;
0824デフォルトの名無しさん
2011/04/15(金) 22:16:16.31そりゃ初めの方が速いだろ。しかし十分な精度を出すためにlognを求める方が時間食う。
0825デフォルトの名無しさん
2011/04/15(金) 22:49:10.10先ずはtgamma()と較べるんだ。
0826デフォルトの名無しさん
2011/04/15(金) 22:58:04.60「オレオレ電子署名」というソフトを作ります。
0827デフォルトの名無しさん
2011/04/15(金) 23:07:35.74cout をファイルに書き込む感じですがリダイレクトしたくないです。
0828デフォルトの名無しさん
2011/04/15(金) 23:14:45.77つスレタイ
0829デフォルトの名無しさん
2011/04/16(土) 00:03:43.39数字をソートするとかつまらないにもほどがあるだろ。
プログラミングを使う事によって、どんなゲームやアプリが作れるかが重要
なんじゃないだろうか?
それにプログラミング言語の綺麗さとか馬鹿じゃないの?
何の得になるの。
0830デフォルトの名無しさん
2011/04/16(土) 00:18:07.34そういう観点がある
0831デフォルトの名無しさん
2011/04/16(土) 00:18:23.20小さな技術の積み重ねでゲームやアプリが作られているという内情を理解するのが面白い。
色んな人の努力と学究の成果の上でゲームやアプリが成立していると思うと愛おしい。
偉業を達成した人の第一歩目はどんなだったろうと考えると、簡単なソートプログラムでも、
遥かなる山の頂の風を感じて心が舞い上がる気持ちだ。
言語は思考の道具だから、奇麗な言葉を使えばそれだけ奇麗なモノを生み出す事が出来る。
奇麗なモノは誰にでも分かり易くて、後から手直ししたり機能を追加したりするのが楽で、
みんなが幸せになれる。
・・・みたいな話が聞きたい訳じゃないよねw
0832デフォルトの名無しさん
2011/04/16(土) 00:22:34.350833デフォルトの名無しさん
2011/04/16(土) 00:45:04.03つJava
辛くない/楽が出来る != つまらなくない/楽しい
0834デフォルトの名無しさん
2011/04/16(土) 00:50:47.89そんならあなたにはPerlお勧め。
0835デフォルトの名無しさん
2011/04/16(土) 00:52:46.18それはまず、おまい自身がゲーハーとクロスを用意してから言うことだな
0836デフォルトの名無しさん
2011/04/16(土) 00:55:21.06バーカ、商用プログラムの中身の80%以上はエラー処理とログの書き出し処理だ。
お前みたいなホビーでやってるカスにはわからんだろうが。
0837デフォルトの名無しさん
2011/04/16(土) 00:55:51.17あっているようで完全な間違い
小さな技術の積み重ねでもゲームやアプリめいたものが作
れるようになったのは最近のこと
MS-BASIC上のゲーム?1980年代前半だろ?
最近のことじゃんw
0838デフォルトの名無しさん
2011/04/16(土) 01:19:40.960839デフォルトの名無しさん
2011/04/16(土) 01:22:30.27ツクールでもMMFでも使えばいい
0840デフォルトの名無しさん
2011/04/16(土) 01:31:30.060841デフォルトの名無しさん
2011/04/16(土) 06:48:57.270842デフォルトの名無しさん
2011/04/16(土) 07:28:36.010843デフォルトの名無しさん
2011/04/16(土) 09:08:04.580844デフォルトの名無しさん
2011/04/16(土) 10:56:01.610845デフォルトの名無しさん
2011/04/16(土) 11:05:41.04>>829みたいに楽しい事だけしたいやつは向いていないし、迷惑だから職場とかチームに入って来て欲しくない。
せいぜい己の欲求を満たす楽しさ満載のクズプログラムを書いてマスかいてろ、って感じ。
0847デフォルトの名無しさん
2011/04/16(土) 11:39:04.740848デフォルトの名無しさん
2011/04/16(土) 11:40:28.980849デフォルトの名無しさん
2011/04/16(土) 11:49:50.15ハードぶっ叩いたり、非同期処理考えたり
コードだと、如何にグローバル減らせるか考えたり
0850デフォルトの名無しさん
2011/04/16(土) 11:53:16.75衝撃の道具は何で?
0851デフォルトの名無しさん
2011/04/16(土) 12:22:15.210852829
2011/04/16(土) 12:29:06.68ゲーム好きで、ゲームを作るために複雑なアルゴリズムが必要ならば
結局演算処理自体も凝らねばならんのよね。
矛盾してるよね、ごめんw
でもゲーム性が優れていて快適に動くならプログラムをそれ以上凝る必要なくね?
あくまでゲーム性を追求するという動機があってプログラムを凝るんでしょ???
で聞きたいんだけど職業がプログラマーの人は具体的にどんな仕事してるの?
何のプログラム書いてるの?ホームページとか?そくらいしか思いつかん・・
だから最初から演算実装を頑張ろうなんて思わないんだよね。
ちなみに俺はプログラマーじゃないよwww
高3だからw
0853デフォルトの名無しさん
2011/04/16(土) 12:32:26.130854デフォルトの名無しさん
2011/04/16(土) 12:39:49.88>何のプログラム書いてるの?
コンテックやインターフェースのボードを使った検査装置や制御装置。
データベースと連動して製品情報として判定結果を残したり、
画像処理で製品の表面荒さの比較検査を行なったり。
一本、400万からご購入頂けます、的な。
ホームページ?ゲーム?そんなのは学生のバイトに毛が生えた程度だろ。
0855デフォルトの名無しさん
2011/04/16(土) 12:42:49.17私ゃ只管他人が作った数値演算系のプログラムを如何に効率よく動かすか、そればっかりやってますな。
理論は設計者に任せて、そのアルゴリズムをGPUを使ったり複数台のPCを並列動作させたりして
コストパフォーマンスを上げることで仕事としてますよ。
# 他のこともやっているけどね。
0856デフォルトの名無しさん
2011/04/16(土) 12:51:04.58「息抜き」と言えば聞こえがいいけど、社会貢献度という点では「無」に等しいわな。
0857デフォルトの名無しさん
2011/04/16(土) 12:53:04.990858デフォルトの名無しさん
2011/04/16(土) 12:57:34.51娯楽はしょせん娯楽に過ぎ無いのにゲーム関連作ってる奴らってアーキテクト的な芸術家ぶったところがあるからなおさらタチが悪い。
0859デフォルトの名無しさん
2011/04/16(土) 12:58:43.340860デフォルトの名無しさん
2011/04/16(土) 12:59:28.160861デフォルトの名無しさん
2011/04/16(土) 13:05:40.54>ゲーム好きで、ゲームを作るために複雑なアルゴリズムが必要ならば
>結局演算処理自体も凝らねばならんのよね。
>あくまでゲーム性を追求するという動機があってプログラムを凝るんでしょ???
↑こういうのとか、ゲームプログラムを高尚なものと勘違いしている良い例といえるな。
0863デフォルトの名無しさん
2011/04/16(土) 13:12:14.84どうせ娯楽を商売にするんなら、いままで見たこともないような新しい表現や体験を作り出して俺らを楽しませてくれよ
3DSとかキネクトとか色々ハードも出てきて何か出来そうじゃん?
0864デフォルトの名無しさん
2011/04/16(土) 13:13:35.55え?テンプレじゃないの?
>事務処理好きで、事務処理に複雑なアルゴリズムが必要ならば
>結局演算処理自体も凝らねばならんのよね。
>あくまで事務処理を追求するという動機があってプログラムを凝るんでしょ???
>科学技術計算好きで、科学技術計算に複雑なアルゴリズムが必要ならば
>結局演算処理自体も凝らねばならんのよね。
>あくまで科学技術計算を追求するという動機があってプログラムを凝るんでしょ???
どうとでもなるな
0865デフォルトの名無しさん
2011/04/16(土) 13:24:06.81数種類の小さなパーツの組み合わせだけで曼荼羅のように
様々な模様を持った大きな構造物になっているんだけど、
入力→出力、パラメータ→計算→結果・・・
プログラムも同じようにたいした事無小さなパーツの組み合わせなんだよね。
ttp://obase-arch.img.jugem.jp/20091026_759021.jpg
0866デフォルトの名無しさん
2011/04/16(土) 14:29:58.98ミスが分かりませんorz
分かる人はいますか?(C言語で製作の初心者)
ttp://blog-imgs-45.fc2.com/x/c/k/xcken/test.txt
0867デフォルトの名無しさん
2011/04/16(土) 15:24:50.98入れるという処理を10回繰り返しても10個とも全部最後に入力した名前に
なってしまいます・・・どうしてでしょうか?
山田 田中 佐藤 鈴木 村上
山本 裏山 田山 小島 島々
これだけの名前を先頭から順番に入れて,
printf("%s",P.first->name);
printf("%s",P.first->->next->name);
printf("%s",P.first->->next->next->name);
・
・
10個とも島々になってしまいます・・・何故でしょうか?
一番簡単なリスト構造で先頭に入れるプログラム作っていただきませんか?
ちなみにPはfirstを含む構造体です。firstは構造体NAMEへのポインタで、
最初first=NULLです。 name,nextはNAMEのメンバーです。
0868デフォルトの名無しさん
2011/04/16(土) 16:58:08.38Windowsの話だろうから、環境依存OKスレが良いと思う。
>867
>10個とも全部最後に入力した名前に
>なってしまいます・・・どうしてでしょうか?
そうなるようにプログラムしているんだろうとしか言えない。
>一番簡単なリスト構造で先頭に入れるプログラム作っていただきませんか?
丸投げなら宿題スレへ。
添削して欲しいならコードを晒す。
0869デフォルトの名無しさん
2011/04/16(土) 17:02:34.03http://codepad.org/でソース全文アップするとよろしい
0870デフォルトの名無しさん
2011/04/16(土) 17:06:00.880871デフォルトの名無しさん
2011/04/16(土) 17:16:54.29お前みたいなクズをプログラムに寄せ付けないことが出来るようになる
0872デフォルトの名無しさん
2011/04/16(土) 17:19:31.06すみませんでした。
ちゃんと調べてきます。
0873デフォルトの名無しさん
2011/04/16(土) 18:37:30.92晒したくはありません・・・
どうしてもです。何故なら名簿作りの課題なんですが全部コード書くといろいろ
クラスメートとかに知られたら嫌だからです。
考えられるミスとしては、名前の保存を配列ではなくchar*としてるからかもしれません・・
何か原因はありますか?
0874デフォルトの名無しさん
2011/04/16(土) 19:01:26.190875デフォルトの名無しさん
2011/04/16(土) 19:04:38.78name = buffer;
とでもしてるんだろ
0876デフォルトの名無しさん
2011/04/16(土) 19:05:27.14じゃあその考えられるミスを検証することだな
例えば %s で char* の中身を表示する代わりに %p で char* のアドレスを表示してみるとか
0877デフォルトの名無しさん
2011/04/16(土) 19:09:57.650878デフォルトの名無しさん
2011/04/16(土) 19:39:40.64お前が組んだようにしか動かないからどこにも間違いなんか無いよ
0879デフォルトの名無しさん
2011/04/16(土) 19:57:23.83>考えられるミスとしては、名前の保存を配列ではなくchar*としてるからかもしれません・・
間違いなくそれだよ原因は。
解ってるなら直せよ。
一つの案を http://hibari.2ch.net/test/read.cgi/tech/1295273862/ に書きましたので参考になればいいのですが。
なお、モリタポを請求することはありません。
それでもわからなければ、これはもうソースを曝すのが一番手っ取り早いと思います。
さんざんなコメントがつくかもしれませんが、めげずに頑張ることです。
私なんか動物以下の扱いになっています、ここ 1〜2年、コードを量産しているのに。
0881デフォルトの名無しさん
2011/04/16(土) 20:03:16.80しねカス。
0882デフォルトの名無しさん
2011/04/16(土) 20:12:05.440883デフォルトの名無しさん
2011/04/16(土) 20:34:09.28自然にそうなってしまいました。今、過去アップしたファイルを積んでいるフォルダをのぞいてみると、ファイル数は 300 超えています。
いろいろとコメントをいただいて修正した最終版ばかりなのですが、そうなっています。
0885デフォルトの名無しさん
2011/04/16(土) 21:32:55.27普通他人の組んだコードなんて興味ねーよwわざわざコピってググって笑おうなんてヒマな奴の集まりなのかお前の学校はw
勉強用の小規模なプログラムを300個作ったってそれが何なんだよw
0887デフォルトの名無しさん
2011/04/16(土) 21:47:25.34うん、それはそうなんですね。
お題をみつける能力は、これはこれで一つの能力なんですが、私にはそれは欠けているんでしょうね。
というか、宿題スレでちゃちゃっと 100 行ぐらいのコードを書いて結構満足してしまっているというか。
今、個人的なお題は、「クライアントはプリントスクリーンを定期的におこなって、サーバーに送り込む」という奴です。
なんとかスクリーンキャプチャできるようになりました。32bit DIB section はつかえる奴だと認識しました。
0889デフォルトの名無しさん
2011/04/16(土) 21:55:46.170890デフォルトの名無しさん
2011/04/16(土) 22:05:20.23悪質なウィルス作ってるようにしか聞こえないんだが
0891デフォルトの名無しさん
2011/04/16(土) 22:05:45.950892デフォルトの名無しさん
2011/04/16(土) 22:09:05.32「クライアントはプリントスクリーンを定期的におこなって、サーバーに送り込む」
ならそこからどう膨らませていくか、それも欠落してる。
作ったら作りっぱなしなんだろ。
プログラマ全体の8割が何を作ったら良いかわからない奴等。
残った2割のうちの8割が作ったものを膨らませかたを知らない奴等。
そこで残った奴等のうちのまた8割がろくでもないデバッグに追い回され退屈な雑プログラムに従事していて
最期に残った2割が真に目的をもって道を切り開いてゆく奴等。
さすがにウィルスは無理ですね。まず OS の穴をみつけないと。
いや、最近は、winny にのっけてユーザーにクリックさせる手合いもウィルスとかよぶそうですが、そうなのならウィルスのレベルも落ちましたね。
>そこからどう膨らませていくか
今ひとつイメージがわきませんが、たとえば IPv6 に対応させちゃる、とかサーバー側はマルチクライアントにする、とか、伝送路中は暗号化・圧縮化・HTTP にのっけて
ファイヤーウォール超え、とか、そういうのを「膨らませる」、というのでしょうか?
いまいち「膨らませる」がよくわかりませんが、よろしければ、ひとつ。
0895デフォルトの名無しさん
2011/04/16(土) 22:18:11.59んー、面白そうですね。
0897デフォルトの名無しさん
2011/04/16(土) 22:22:48.52のが目的の人なんていない
それを使って何ができるのかってことでしょう
自分もうまい案は浮かばないが「日々の作業記録が画像として自動で残ります」っていうソフトにするとか
やりたいことが決まると次に実装する機能も見えてくるし
0898デフォルトの名無しさん
2011/04/16(土) 22:30:10.70>それを使って何ができるのかってことでしょう
つまりそういう事だよね。
勉強用の小規模なプログラムを300個作ったってそれだけじゃ
ただ積み重なっただけで他の誰の役にも立たないクズプログラムだ。
味見のためだけの料理を繰り返し作るようなもん。
0899デフォルトの名無しさん
2011/04/16(土) 22:40:34.79客のテーブルに載せるひとつの皿として完成していない。
もしくは皿ごとにバラバラで、カップルの特別な夜に華を添えるディナーのコースとして出来上がっていない。
となるとマーケティングとかマーチャンダイジングとか、その手の頭の回し方も必要、ということですね。
コード書きながら考えときます。
0901デフォルトの名無しさん
2011/04/16(土) 23:09:04.58職業プログラマ? それとも単に趣味グラマ?
0902デフォルトの名無しさん
2011/04/16(土) 23:15:12.100903デフォルトの名無しさん
2011/04/16(土) 23:36:01.090904デフォルトの名無しさん
2011/04/16(土) 23:50:01.94http://yuzuru.2ch.net/test/read.cgi/idol/1298418299/l50
趣味です。だから「売れる」という要素はあまり考えてこなかったのです。皆さんのお話は参考になります。
0906デフォルトの名無しさん
2011/04/17(日) 00:03:02.86他スレに迷惑かけんなよクズ
0907デフォルトの名無しさん
2011/04/17(日) 00:51:09.86マは開発屋でマーケティング、マーチャンダイジングが解るわけないだろ
料理のメニュー、値段はマが決めるんじゃないからな。マは言われたものを作るだけ
日本に多い下請け会社は売れるもののマーケティング、マーチャンダイジングなんて禄に出来ない
から下請けやってるんだか(言われたものを基本的に作るだけ)。
それが出来るなら自社ソフト製品を開発して売りまくっている。
0909デフォルトの名無しさん
2011/04/17(日) 01:05:21.17このスレの先で見たコードがかなり異次元でわろた、こんなもんコンパイル通る訳ねーだろw
趣味でやっており、皆に使ってもらえるフリーソフトを作ることを目標としています。現在はそのための体力づくりの日々です。
「売れるかどうか」という極めて難しい目標は当面考えませんが、「使ってもらえるかどうか」くらいなら手が届きそうですし、この問題もマーケティングに含まれそうな気がします。
職業でなさるときはマーケティングまでは考慮することはないのですか?とすると、フリーソフトを作るときには、規模は別にせよ実は、より経営に近い、幅広い思考が要求されるのですね。
0911デフォルトの名無しさん
2011/04/17(日) 01:20:32.32と、中学の頃から7年くらい入門本を卒業出来なかった俺が言ってみる。
0912デフォルトの名無しさん
2011/04/17(日) 03:37:41.500913デフォルトの名無しさん
2011/04/17(日) 06:59:41.50>晒したくはありません・・・
>どうしてもです。何故なら名簿作りの課題なんですが全部コード書くといろいろ
>クラスメートとかに知られたら嫌だからです。
再現する最低限のコードを公開しなよ。原因も絞れるから、それだけで
バグが取れることもある。
宿題スレへ丸投げでもいいが、問題を晒す必要があるぞ。
0914デフォルトの名無しさん
2011/04/17(日) 10:27:29.02東電の隠蔽体質とおんなじだぞ。
問題の箇所を特定するためにプログラムは全部呈示してもらう必要がある。
自分の思っていたのとは全く別の場所での間違いが遠く離れた場所でバグ
として出てくる事は良くある事だ。
0915デフォルトの名無しさん
2011/04/17(日) 10:33:23.300916デフォルトの名無しさん
2011/04/17(日) 10:33:46.980917デフォルトの名無しさん
2011/04/17(日) 11:43:17.07日時・ID・パスワードで上記の書式が各行に1行づつありまして、これが100万行あります
日付は↑の通りで各桁は2桁固定、IDとパスワードは半角英数字の小文字のみ
これらを日時順の若いのを上にソートしたいのですがどのようなソートが効率よいでしょうか?
0918デフォルトの名無しさん
2011/04/17(日) 11:45:08.640919デフォルトの名無しさん
2011/04/17(日) 11:46:13.95『C/C++の宿題片付けます 147代目』
http://hibari.2ch.net/test/read.cgi/tech/1301553333/
ここまでしてあげないとわからないバカなのか?
0920デフォルトの名無しさん
2011/04/17(日) 11:48:39.20実は例の小池里奈スレは俺が個人的にナビゲートロックしているスレだった
本当に偶然だけど、しかし何をやってるんだよあのアホどもは
0921デフォルトの名無しさん
2011/04/17(日) 11:51:41.63日付をtime_tの配列に変換してそれでqsort() or std::sort()ソートすればいいですね
構造体にぶち込むといいと思います
そしてそのポインタの配列を作ってそれをソートすればデータの移動に掛かる時間が
大幅に削減出来ます
0922デフォルトの名無しさん
2011/04/17(日) 11:53:49.80データが多すぎてメモリに入り切らない場合は外部マージソートが一番高速ですが
それでもメモリ内でソートするのにくらべるとひどく時間がかかりますね
どの程度のデータ容量になるのか計算してメモリ内で済むならそちらの方がいい
0923デフォルトの名無しさん
2011/04/17(日) 11:55:23.82質問をよく読まないバカ発見
0924デフォルトの名無しさん
2011/04/17(日) 11:56:25.890925デフォルトの名無しさん
2011/04/17(日) 11:56:36.500926デフォルトの名無しさん
2011/04/17(日) 11:57:30.00100万件でバブルソートやってみろよ
気が遠くなるぞ
0927デフォルトの名無しさん
2011/04/17(日) 11:58:18.820928デフォルトの名無しさん
2011/04/17(日) 11:58:43.28DBを持ってる環境の人かどうか分からないし、DB機能を備えているコンパイラ
エディションは最上位クラスになるし、ちょっとその答えはどうかと
0929デフォルトの名無しさん
2011/04/17(日) 12:02:36.41バカジャネーノ?
MySQLだってPostgreSQLだって無償で配布されてんだしべつに考える必要ないだろ。
行が増えたり、特定の条件で検索するなんてのも楽になる。
0930デフォルトの名無しさん
2011/04/17(日) 12:02:57.06100万行を一度読み込み、
日付とデータ位置情報の配列を作る。
日付でソートする。
ファイルのデータ位置を読み込み、出力する。
こんなとこかな?
0931デフォルトの名無しさん
2011/04/17(日) 12:03:24.43どんなソート方法か聞いてんだから
0932デフォルトの名無しさん
2011/04/17(日) 12:04:01.41恥さらし乙
0933デフォルトの名無しさん
2011/04/17(日) 12:05:36.030934デフォルトの名無しさん
2011/04/17(日) 12:06:07.96だからSQLでソートさせる方法が最善だっての。バカかお前は。
0935デフォルトの名無しさん
2011/04/17(日) 12:12:59.13あほか
0936デフォルトの名無しさん
2011/04/17(日) 12:13:26.66コードでマスかきたいだけなのか、ソートした結果が欲しいのかはっきりしろよw。
0937デフォルトの名無しさん
2011/04/17(日) 12:19:24.440938デフォルトの名無しさん
2011/04/17(日) 12:21:27.96速度はメモリ上では、自作 > STL > DB
ディスク使用では、自作 > DB
だろう。
STLにディスクを使用するソートやmapはない。
0939デフォルトの名無しさん
2011/04/17(日) 12:22:40.890940デフォルトの名無しさん
2011/04/17(日) 12:28:51.92ほう、で?その汎用なアプリに勝てるだけの速度のものをお前はひょいと小手先で作れると?
クラスの概念も無い標準のCで。
0941917
2011/04/17(日) 12:30:04.19データはファイルの終端に追記される形で増えていくのですが、必ずしも日時順で追記されるわけではないのでソートしたいと思っている次第です。
記録はファイルベースですがソートするときだけデータベースのほうが早いのであれば、作業するときのみデータベースに入れてソートすることも検討したいと思います
記録自体はファイルベースで行います
0942デフォルトの名無しさん
2011/04/17(日) 12:31:21.75作れないよ、無能で悪かったな
0943デフォルトの名無しさん
2011/04/17(日) 12:33:24.17それなら、最初からDBに格納がよいかと
0944デフォルトの名無しさん
2011/04/17(日) 12:36:01.54ソートするだけの為に、遅いデータベース使うなよ。
0945デフォルトの名無しさん
2011/04/17(日) 12:39:37.58http://www.vector.co.jp/soft/win95/util/se127691.html
0946デフォルトの名無しさん
2011/04/17(日) 12:48:17.740947デフォルトの名無しさん
2011/04/17(日) 12:52:47.39ソートコマンドじゃだめなの
0948デフォルトの名無しさん
2011/04/17(日) 12:54:09.22> DB機能を備えているコンパイラエディションは最上位クラス
どういうこと?
0949デフォルトの名無しさん
2011/04/17(日) 13:00:43.960950デフォルトの名無しさん
2011/04/17(日) 13:02:38.59安定じゃないソートは全て欠陥アルゴリズム
0951デフォルトの名無しさん
2011/04/17(日) 13:11:33.24いわゆる標準的に知られているサーチの方法以上に効率のいい方法なんて出て来るわかないだろ。
検索だけで一本の論文が書けるほどのテーマだっつーのに生半可が考えてどうなるもんでもなかろううが。
0952デフォルトの名無しさん
2011/04/17(日) 13:18:04.02各20メガをメモリ上でソートしてディスクへ書き出す。
あとはキャッシュを効かせて、5000個をマージしていく。
0953デフォルトの名無しさん
2011/04/17(日) 13:25:12.040954デフォルトの名無しさん
2011/04/17(日) 13:31:52.170955デフォルトの名無しさん
2011/04/17(日) 13:32:09.670956デフォルトの名無しさん
2011/04/17(日) 13:33:50.26さすが日曜日に集まってきただけはあるよね。
サーチじゃなくてソートの話だ。
0957デフォルトの名無しさん
2011/04/17(日) 13:35:47.61他人の揚げ足取る時だけは元気だな。有益なコードは何一つ提示しないくせに。
0958デフォルトの名無しさん
2011/04/17(日) 13:37:05.06コードを書いてたらまだソートできてないかもしれないけど。。
0959デフォルトの名無しさん
2011/04/17(日) 13:38:58.330960デフォルトの名無しさん
2011/04/17(日) 13:39:10.61自分は有益なコードを提示してるような口ぶりだな。
0961デフォルトの名無しさん
2011/04/17(日) 13:41:59.57「これ電源切った方が早くないっすか?」(「大捜査線THE MOVIE3ヤツらを解放せよ!」より)
人間はとかく目の前の問題に注目するあまり事を難しく考え過ぎて
ついつい最も簡単な解決策を見逃しがちだ。
0962デフォルトの名無しさん
2011/04/17(日) 13:45:18.320963デフォルトの名無しさん
2011/04/17(日) 13:46:47.470964デフォルトの名無しさん
2011/04/17(日) 13:48:29.49ソートしないで済む方法を取った方が解決の早道だったりするわけだ。
0965デフォルトの名無しさん
2011/04/17(日) 17:42:38.39100万行の>>917を生成するプログラム作ったからプログラムやDB使って
皆で時間を競おうぜ!
0966デフォルトの名無しさん
2011/04/17(日) 17:47:22.68>"%04d-%02d-%02d %02d:%02d:%02d %s %s"
惜しいw
0967デフォルトの名無しさん
2011/04/17(日) 17:57:11.34genrandがおかしいよ
0968デフォルトの名無しさん
2011/04/17(日) 18:00:03.3117秒。>>945のそ〜太では。8年くらい前の低価格PC
0969デフォルトの名無しさん
2011/04/17(日) 18:05:33.21http://codepad.org/sCU9iEEV
こっちも適当だけど
http://codepad.org/fIJmmwrv
0970デフォルトの名無しさん
2011/04/17(日) 18:10:01.550971デフォルトの名無しさん
2011/04/17(日) 18:12:59.24かかりすぎじゃね?
0972デフォルトの名無しさん
2011/04/17(日) 18:23:00.57<> ってスペースじゃないのか
0973デフォルトの名無しさん
2011/04/17(日) 18:23:41.450974デフォルトの名無しさん
2011/04/17(日) 18:30:14.06cygwinのtimeで計ったらユーザCPU時間が0.016sだった
cygwinのsortだと59sくらいかかってる
0975デフォルトの名無しさん
2011/04/17(日) 18:36:54.182chのdatファイルも<>がデリミタ。昔はよく見たデリミタだったように思う。
0976デフォルトの名無しさん
2011/04/17(日) 18:41:16.64#include <stdio.h>
#define FILENAME "pass.txt"
#define MAXRAW 1000000
#define MAXCOL 128
unsigned int rand_xor() { static unsigned int t, x=123456789UL,y=362436069UL,z=521288629UL,w=88675123UL;t=x^(x<<11); x=y; y=z; z=w; return w^=(w>>19)^t^(t>>8); }
void strgen(char *str, char base, int haba) {
unsigned int x,n;
haba++;
for(n=0; n<6 +rand_xor()%8 ; n+=6) {
x=rand_xor();
str[n+0]=base+x%haba; x>>=5; str[n+1]=base+x%haba; x>>=5;
str[n+2]=base+x%haba; x>>=5; str[n+3]=base+x%haba; x>>=5;
str[n+4]=base+x%haba; x>>=5; str[n+5]=base+x%haba; }
str[n]=0; }
int main(){
FILE *fo = fopen(FILENAME, "wb");
unsigned int i,x,year, month, day, hour, minute, second;
char id[MAXCOL], pass[MAXCOL];
for (i = 0; i < MAXRAW; i++) {
x=rand_xor();
year=2001+x%10; x>>=4; month=1 + x%12; x>>=4;
day=1 + x%31; x>>=5; hour=x%24; x>>=5;
minute= x%60; x>>=6; second= x%60; x>>=6;
strgen(id,'a', 'z'-'a'); strgen(pass,'0', '9'-'0');
fprintf(fo, "%04d-%02d-%02d %02d:%02d:%02d<>%s<>%s\n", year, month, day, hour, minute, second, id, pass);
}
fclose(fo);}
0977デフォルトの名無しさん
2011/04/17(日) 18:43:22.770978デフォルトの名無しさん
2011/04/17(日) 18:47:40.420979デフォルトの名無しさん
2011/04/17(日) 18:49:15.80最低でも1ギガはないと。
これ位だとアルゴリズムの有意差がはっきりする。
0980デフォルトの名無しさん
2011/04/17(日) 18:54:56.32sort -t \< -k 1,1 in.txt >| /dev/null 25.17s user 0.16s system 100% cpu 25.315 total
% time psql -d test_database -c 'select * from c_81 order by login_time' -o /dev/null
psql -d test_database -c 'select * from c_81 order by login_time' -o /dev/nul 4.75s user 0.28s system 27% cpu 18.384 total
ソートコマンドこれであってる?
0981デフォルトの名無しさん
2011/04/17(日) 18:55:35.68何かオススメ無いかな?
0982デフォルトの名無しさん
2011/04/17(日) 18:57:53.30優位性は目的を決めないと意味をなさないだろ
いつぞや円周率の計算が速い CPU が「優位」だよという皮肉があったように
0983デフォルトの名無しさん
2011/04/17(日) 19:05:44.18C/C++辞典
0984デフォルトの名無しさん
2011/04/17(日) 19:14:16.59了解
しかし単純にqsort使うと馬鹿遅いな
time_tでソートしてるだけなのに
0985デフォルトの名無しさん
2011/04/17(日) 19:22:35.17$ time ./a pass.txt > out.txt
real 0m1.978s
user 0m1.295s
sys 0m0.124s
だった
0986デフォルトの名無しさん
2011/04/17(日) 19:26:11.20えらく速いな
Core i7かい?
データが全部2次キャッシュに乗ってるとか
0987デフォルトの名無しさん
2011/04/17(日) 19:37:10.90このプログラムを使うとソートに1分ほどかかっちゃうけどお前らどれ位?
構造体のポインタをソートしているからデータの移動は最小限のはずなんだが
0988デフォルトの名無しさん
2011/04/17(日) 19:41:49.20このスレで出てる時間は
ソートだけの時間ではなく
time,timeitなどで計測する入出力も全部含めた
プログラム起動〜終了の時間だと思うよ
0989デフォルトの名無しさん
2011/04/17(日) 19:49:26.06>>945のそ〜太2は書き込み終了まで古いPCで17秒。
0990デフォルトの名無しさん
2011/04/17(日) 19:50:18.58それは簡単に改造できるけど、ソートに時間が掛かりすぎると思う
今の環境はqsortのルーチンをDLLに置いてあって呼び出すので
システムコールの時間が掛かりすぎるのだと思う
静的リンクすればかなり速くなると思うけどそれでも0.1秒とかはないぜ
0991デフォルトの名無しさん
2011/04/17(日) 19:54:31.50実質的に内部のアルゴリズムが遅いだけ。
むしろ頻繁に使うものはDLLからロードした方が速い可能性あり。
OSのキャッシュやHDDのキャッシュに乗っているかもしれないので。
0992デフォルトの名無しさん
2011/04/17(日) 19:56:45.330993デフォルトの名無しさん
2011/04/17(日) 19:58:41.460.1秒とかとても出ないぜ
読み込みの部分は十分に速いけど実行時半の大半はqsort()だよ
0994デフォルトの名無しさん
2011/04/17(日) 20:07:40.25へぼすぎる
0995デフォルトの名無しさん
2011/04/17(日) 20:10:23.89読み込みに失敗しており、全てのtime_tが0になっていました
こんな状態でqsort()を使うと最悪の結果になります
デバッグします
0996デフォルトの名無しさん
2011/04/17(日) 20:11:39.37"%04d-%02d-%02d<>%02d:%02d:%02d<>%s<>%s"
ではうまく読み込みませんね
正規表現の機能なんてないんだから
0997デフォルトの名無しさん
2011/04/17(日) 20:14:00.63timeじゃ計れないのでtimeGetTimeに置き換えたけど
40〜50msだったよ
0998デフォルトの名無しさん
2011/04/17(日) 20:16:40.360999デフォルトの名無しさん
2011/04/17(日) 20:18:39.36C言語なら俺に聞け(入門編)Part 82
http://hibari.2ch.net/test/read.cgi/tech/1303039075/
1000デフォルトの名無しさん
2011/04/17(日) 20:27:13.1510011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。