C言語なら俺に聞け( ..
511:デフォルトの名無しさん
07/04/06 16:43:06
>>502
2進数を3桁で区切ってその3桁を1桁づつにすると8進数、4桁で区切って1桁づつに
すると16進数。というのは、2進数3桁だと8種類の重みを表現可能だからで、これを
一桁で表せば8進数ということになる。2進数4桁で16進数というのも同じこと。
512:デフォルトの名無しさん
07/04/06 16:48:26
>>509
反論ではありません。あまりの愚かさに衝撃を受けて出た一言です。
外人がよく言う "Oh My GOD!" に近いものです。
ああ。あなたに神の許しがありますように。
513: ̄ ̄V ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
07/04/06 16:49:42
_____
/::::::::::::::::::::::::::\ _
/::::::::::::::::::::::::::::::::::::::\ /  ̄  ̄ \
|:::::::::::::::::|_|_|_|_| /、 ヽ
|;;;;;;;;;;ノ \,, ,,/ ヽ |・ |―-、 | きみ頭だいじょうぶ?
|::( 6 ー─◎─◎ ) q -´ 二 ヽ |
|ノ (∵∴ ( o o)∴) ノ_ ー | |
/| < ∵ 3 ∵> \. ̄` | /
::::::\ ヽ ノ\ O===== |
:::::::::::::\_____ノ:::::::::::\ / |
514:デフォルトの名無しさん
07/04/06 16:50:32
>>500
何社か渡り歩いたけど、そうやってる会社もあった
大手電機メーカーでした
515:デフォルトの名無しさん
07/04/06 16:55:28
>>514
恐ろしいな。
516:デフォルトの名無しさん
07/04/06 18:08:42
>>506
せめてvoid*
何も事態は改善しないけど
517:デフォルトの名無しさん
07/04/06 18:30:31
>>516
うん。まーーーったく変わらない。
518:デフォルトの名無しさん
07/04/06 18:45:30
え?悪化してるような気がする。
char*ってことは、一旦シリアライザ・デシリアライザを挟もう、って意図じゃないの?
いまどきのIPCがみんなXML使ってるみたいに、関数の引数もXMLにしよう、みたいな話ではないの?
519: ̄ ̄V ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
07/04/06 19:39:54
_____
/::::::::::::::::::::::::::\ _
/::::::::::::::::::::::::::::::::::::::\ /  ̄  ̄ \
|:::::::::::::::::|_|_|_|_| /、 ヽ
|;;;;;;;;;;ノ \,, ,,/ ヽ |・ |―-、 | きみ頭だいじょうぶ?
|::( 6 ー─◎─◎ ) q -´ 二 ヽ |
|ノ (∵∴ ( o o)∴) ノ_ ー | |
/| < ∵ 3 ∵> \. ̄` | /
::::::\ ヽ ノ\ O===== |
:::::::::::::\_____ノ:::::::::::\ / |
520:デフォルトの名無しさん
07/04/06 19:49:00
>>468
ありがとう。どうやらIDEが別の似たファイルを参照していたらしいです。
解決しました。
521:デフォルトの名無しさん
07/04/06 20:05:31
>>476
XOR使ったスワップは、同一だとちゃんと機能せんから
せめて
a +=b, b = a - b, a -= b
とか使うようにしましょう。
522:デフォルトの名無しさん
07/04/06 20:08:53
一方俺はバッファを使った…
523:デフォルトの名無しさん
07/04/06 20:12:42
>>521
おいおいw
524:デフォルトの名無しさん
07/04/06 20:28:42
叔母風呂
525:デフォルトの名無しさん
07/04/06 20:30:47
同一( &a==&b )の場合は >>521 の方法でも 0 になってしまうよ
526:デフォルトの名無しさん
07/04/06 21:24:42
for文の途中に
return 0などがあると
関数に0を返したあとに、関数の処理は終わってしまいますか?
527:デフォルトの名無しさん
07/04/06 21:26:28
もちろん
528:デフォルトの名無しさん
07/04/06 21:54:44
#include <stdio.h>
#include <math.h>
int sosu(int);
int main(void){
int i,m;
printf("数値入力>");scanf("%d",&m);
if(m<=0) return 0;
printf("2 ");
for(i=3;i<=m;i+=2){
if (sosu(i)==1) printf("%d ",i);
}
return 0;
}
int sosu(int n){
int i;
if(n==2)return 1;
if(n%2==0) return 0;
else{
for(i=3;i*i<=n;i=i+2){
if(n%i==0){
return 0;
}
}
}
return 1;
}
入力した数までの全ての素数を表示するプログラム作ってみたんだけど
これだと横一列に表示されて見づらいので、5個ずつ表示して改行\nつけたいんだけどどうしたらいいですかね
2 3 5 7 11
13 17 19 23 29
31 37・・・といった感じです
529:デフォルトの名無しさん
07/04/06 21:59:24
>>528 これでどう?
if (sosu(i)==1) printf("%d ",i);
↓
if (sosu(i)==1){
static int sosu_count=1;
sosu_count++;
printf("%d ",i);
if(sosu_count%5==0) printf("\n");
}
530:デフォルトの名無しさん
07/04/06 22:00:27
void MyPrint(int i)
{
static cnt;
printf("%d ", i);
cnt++;
if(cnt == 5) {printf("\n");cnt=0;}
return;
}
こんな関数をprintfの代わりに使うのはどう?
531:デフォルトの名無しさん
07/04/06 22:03:25
できたー ありがとうございます
532:デフォルトの名無しさん
07/04/06 23:02:53
int main(void) って int main() と
C言語は略しちゃいけないんだよね?
533:デフォルトの名無しさん
07/04/06 23:07:14
>>532
int main();はお勧めできませんが、
int main()ならどうでもいいと思います。
534:デフォルトの名無しさん
07/04/06 23:08:47
規格をあたってみたところ、関数の定義なら問題ないと読めた。
参照したのがはJIS X3010:2003 (C99翻訳)なんで、C89とかだとどうなのかは知らんが。
535:デフォルトの名無しさん
07/04/06 23:12:11
C89でも同じ事です。
536:デフォルトの名無しさん
07/04/07 03:51:54
素数そっすうそっすうーーー
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void sieve(char *p,int d);
int main()
{
int d = 0,i,k;
char buff[256] = {'\0'};
char *p = NULL;
fgets(buff,sizeof(buff),stdin);
sscanf(buff,"%d",&d);
if (d <= 0) {fprintf(stderr,"input positive number and less than INT_MAX number.\n");exit(1);}
if ((p = malloc(d))==NULL) {fprintf(stderr,"failed to allocate %d bytes of memory.\n", d);exit(1);}
memset(p, '\0', d);
sieve(p,d);
printf("primes up to %d\n", d);
for (i = 0, k = 1; i < d; i++){
if(p[i] == 2){i++;}
if (p[i]==0){printf("%-4d ", i+1); k++;}
if(!(k%5)){ putchar('\n');k++;}
}
return 0;
}
void sieve(char *p,int d)
{
int i, j;
p[0] = 2;
for (i=2; i <= d/2; i++)
for (j=2; j <= d/i; j++)
p[i*j-1]=1;
}
537:デフォルトの名無しさん
07/04/07 04:10:22
インデント無いとこれほどまでに読みにくくなるんだな…
538:デフォルトの名無しさん
07/04/07 12:46:42
C言語で駄目文字ってどういう時に発生するの?
539:デフォルトの名無しさん
07/04/07 12:50:03
駄目文字って何?
540:デフォルトの名無しさん
07/04/07 12:53:25
Shift_JISで表したときに2バイトめに 0x5c が来る文字を俗に
駄目文字と呼ぶらしい。
541:デフォルトの名無しさん
07/04/07 13:21:08
表とか?
542:デフォルトの名無しさん
07/04/07 15:21:56
カタカナの「ソ」とかな。
>>538への答えとしては、扱うエンコーディングにShift_JIS(CP932など
類似品も含む)があるときは常にその必要があると思え、くらいか。
543:デフォルトの名無しさん
07/04/07 15:33:49
sizeof演算子 の意味がわかりません。教えてください。
544:デフォルトの名無しさん
07/04/07 15:54:25
意味ってw
変数の使用バイトを調べる為にあるんだよ
マロックとかで変数渡すときに、4って書くよりsizeof(int)って書いた方が分かりやすいからだよw
545:デフォルトの名無しさん
07/04/07 15:55:06
sizeof(int) : int型のサイズ(4バイトとかそんな感じ)
sizeof(hoge) : 変数hogeのサイズ(char hoge[260]なら260)
前者は型のサイズが違っても対応できるように、後者はmalloc(sizeof(hoge))みたいな感じに使う
546:デフォルトの名無しさん
07/04/07 16:52:02
典型的な応用例:
int array[10];
for (int ic = 0; ic < sizeof(array) / sizeof(* array); ++ic) array[ic] = 0;
547:デフォルトの名無しさん
07/04/07 16:59:42
質問者のレベルだと
*arrayのところは、array[0]と書いた方が分かりやすいだろう。
548:デフォルトの名無しさん
07/04/07 17:30:20
構造体でもパッキングの値に対応した本当のサイズが出るので
sizeof は不可欠
549:デフォルトの名無しさん
07/04/07 17:54:23
sizeofはエロイ
550:デフォルトの名無しさん
07/04/07 18:36:20
inlineよかまし
551:デフォルトの名無しさん
07/04/07 18:59:45
>>548
いや、詰め物なくてもsizeofは使うだろ。
メンバ変数のサイズを個別に求めて、合計するわけ?
552:デフォルトの名無しさん
07/04/07 19:55:09
4って書くよりsizeof(int)って書いた方が分かりやすいからだよw
?intは2バイトじゃないのですか???
553:デフォルトの名無しさん
07/04/07 19:59:47
>>552
なんで2バイトだと思ってるの?
554:デフォルトの名無しさん
07/04/07 20:00:36
釣りだろうけどマジレスするとintサイズは環境依存、一般的には
8bit, 16bit cpu では2の
32bit cpuでは4
64bit cpuでは4, 8 に分かれる。
555:デフォルトの名無しさん
07/04/07 20:03:30
コンパイラが決めてるってことですか?
どーやって決めてるんですかね?
556:デフォルトの名無しさん
07/04/07 20:06:58
釣りじゃないです。
勉強し始めて、一ヶ月。
わからないことばかりです。
本には、intは2バイトって書かれてるから。
環境依存?
むつかしい。前途多難です。
557:デフォルトの名無しさん
07/04/07 20:08:58
>>556
すごい古い本つかってないか?
558:デフォルトの名無しさん
07/04/07 20:12:22
Javaだと身動き取れないくらいカッチリとサイズが決められてるけど、
Cのintは最低2バイトでshort以上long以下のCPUに都合の良い(が扱いや
すい)幅。以上/以下とあるから、どちらかと同じであってもよい。
559:デフォルトの名無しさん
07/04/07 20:15:49
C99だと「最低でも32bit以上で、一番速い型」とか指定できるからいいな。
560:デフォルトの名無しさん
07/04/07 20:16:10
intが最低2バイトと書いてしまったが、ちゃんと書くと、
1. short: 最低2バイト、longよりは小
2. long: 最低4バイト、shortよりは大
3. short <= int <= long
1.2.からshortとlongの幅が同じになることはないので、3.の等号は
成り立つとしても片方しか成り立たない。
561:デフォルトの名無しさん
07/04/07 20:16:22
longとintでサイズ同じなら二つも作って紛らわしくさせんじゃねーよ!
とか憤ってた学びたての頃の俺をDQNといわないで下さい
562:デフォルトの名無しさん
07/04/07 20:17:20
>>555
実行環境のCPUその他アーキテクチャにとって都合の良い大きさに決まる
563:デフォルトの名無しさん
07/04/07 20:19:24
CPUが64ビットだとややこしいな。
int=64ビット long=64ビット
int=32ビット long=64ビット
int=32ビット long=32ビット long long=64ビット
564:デフォルトの名無しさん
07/04/07 20:19:31
>>558のカッコのなかの「が」は
CPUに都合がよい、しかし扱いやすい
じゃなくて(逆接になる意味がない)、
CPUに都合がよい(CPUが扱いやすい)
の意です……
565:デフォルトの名無しさん
07/04/07 20:20:39
>>560
それ間違ってないか?
手元の本にはそんなことは書いてないが。
566:デフォルトの名無しさん
07/04/07 20:27:01
shortはshort int、longはlong intの略記であり、
無印intはshort intかlong intのどちらか処理系に都合がよいほうと同じ、
だっけ?
567:デフォルトの名無しさん
07/04/07 20:30:01
手元の本って何だよ。JISのプリントアウトか?
まぁ、もちろん規格にも>>560のような最低hogeバイトとは書いていないけどな。
568:デフォルトの名無しさん
07/04/07 20:38:20
>>560
> 1.2.からshortとlongの幅が同じになることはないので、3.の等号は
> 成り立つとしても片方しか成り立たない。
実際に sizeof(short) == sizeof(int) == siezeof(long) == 4 な処理系は実在する。
569:デフォルトの名無しさん
07/04/07 20:39:54
>>566
intがshort intとlong intのどちらかと
同じ大きさである必要があると定められてはいなかったと思う。
>>567
しかし<limits.h>の定数は少なくともxxx以上・以下でないといけないという規定があり、
そこから必然的にshortとintが16ビット、longが32ビットなければならないということが導かれる。
1バイトが8ビットである環境なら当然2バイトと4バイトになる。
「3.の等号は成り立つとしても片方しか成り立たない」は違うような気がするけど。
570:デフォルトの名無しさん
07/04/07 20:42:07
知っているつもりのことでも、きちんと知らないことってあるんだなあ。
571:デフォルトの名無しさん
07/04/07 20:42:24
>>567
新ANSI C言語辞典って本だけど。
572:デフォルトの名無しさん
07/04/07 20:52:41
すごい細かいんですね。
大丈夫かな??
無理かな??不安になってきた。
573:デフォルトの名無しさん
07/04/07 20:54:37
「どこでも同じとは限らない」ということだけ知ってればOK。
574:デフォルトの名無しさん
07/04/07 21:07:34
つまり
sizeof(short)=2
sizeof(int)=3
sizeof(long)=4
な処理系があればいいんだ、過去の俺を納得させるだけの為に
575:デフォルトの名無しさん
07/04/07 21:13:02
だからどーやってCPUがバイト割り当ててんだよ
その仕組みを教えればいいだろ
576:デフォルトの名無しさん
07/04/07 21:14:09
説明しきれないんだろ?
少なくとも俺はわからん
577:デフォルトの名無しさん
07/04/07 21:16:23
CPU < short形が2バイトだの、charが8ビットだのってのは、俺が決めてるわけじゃねーよ。
578:デフォルトの名無しさん
07/04/07 21:17:21
誰がきめてんだよ
579:デフォルトの名無しさん
07/04/07 21:19:28
設計者じゃねーの?
580:デフォルトの名無しさん
07/04/07 21:20:05
何になるの??
こんな質問方法では、だめか・・。
581:デフォルトの名無しさん
07/04/07 21:21:16
設計者なわけないだろ
あたらしいCPUがでたら
また設計者があたらしく定義しなおすのか?
582:デフォルトの名無しさん
07/04/07 21:21:50
>>575
CPUを設計する人が「これは32ビットCPUだ(1バイト=8ビット)」と言えば、
コンパイラを設計する人はそのCPUで動くコードを出力するコンパイラはintを4バイトにするという具合。
583:デフォルトの名無しさん
07/04/07 21:24:49
コンパイラを設計するひとは
CPUが新しくできるたびに設計しなおさないといけないってこと?
584:デフォルトの名無しさん
07/04/07 21:25:31
CPUのレジスタサイズと、コンパイラの整数型は必ずしも一致してないんだな。
32bitCPUでも、int8のコンパイラがあったり、int64のコンパイラがあったり。
585:デフォルトの名無しさん
07/04/07 21:25:33
すんげぇめんどくさいんですね
出来たばっかりのCPUだとプログラミングできないんじゃん
586:デフォルトの名無しさん
07/04/07 21:26:58
毎度新しく決める必要はない。
たとえば80386から続くIntelの32ビットCPUシリーズはIA-32と一括りにされるという具合。
587:デフォルトの名無しさん
07/04/07 21:27:27
なるほど
588:デフォルトの名無しさん
07/04/07 21:33:17
もちろんCPUが全てではない。
x86-64では、WindowsはMSがWindows APIをLLP64にすると言い、
VC++もLLP64(long longとポインタが64ビット、intとlongは32ビット)になった。
しかしUnix系では一般的にLP64(longとポインタが64ビット)が採用されていると言う具合。
589:デフォルトの名無しさん
07/04/07 22:14:09
入門者には難しい >_<;
590:デフォルトの名無しさん
07/04/07 22:18:22
>>574
そんな環境はないだろうけど、
short = 2
int = 4
long = 8
なら、普通にあるだろ。
591:デフォルトの名無しさん
07/04/07 23:12:07
char K1[]="abcde";
は、
sizeof は、何になるのですか?? 6??なぜ??
592:デフォルトの名無しさん
07/04/07 23:14:31
>>591
配列はその全体のサイズになるから。
文字列の場合は最後に0がつくから、みかけのサイズより+1の大きさになる。
593:デフォルトの名無しさん
07/04/07 23:14:32
規格でそう決まっているから
594:デフォルトの名無しさん
07/04/07 23:21:50
591
\0 じゃなくてですか?
595:デフォルトの名無しさん
07/04/07 23:23:54
NULLぽ
596:デフォルトの名無しさん
07/04/07 23:30:20
>>595
ガッ
597:デフォルトの名無しさん
07/04/07 23:51:36
>>591
暇だったんで俺が決めといたんだ
598:デフォルトの名無しさん
07/04/08 00:09:58
>>594
'¥0'なら
599:デフォルトの名無しさん
07/04/08 00:32:27
配列の平均値を求める関数aveを作ってみたんですが
これで表示が1としか表示されないんだけどなんでですかね・・・
#include <stdio.h>
void ave(int array[]);
int main(void){
int a[5]={1,2,3,4,5},i;
ave(a);
return 0;
}
void ave(int array[]){
int sum=0,i,m;
m=sizeof(array)/sizeof(int);
for(i=0;i<m;i++){
sum+=array[i];
}
printf("平均=%d\n",sum/m);
}
調べてみたら、ave関数のm=sizeof(array)/sizeof(int)
がおかしくて、mに1が入ってみるみたいなんです。
配列aの要素数は5だから、mに5を入れたいんだけどどうすりゃいいんですかね?
600:デフォルトの名無しさん
07/04/08 00:39:08
>>599
Cでは配列を関数に渡すことはできない。素直に個数も渡すしかない。
cf.
void ave(int * array, int nOfArray) {
...;
}
601:デフォルトの名無しさん
07/04/08 00:42:02
>>599
void ave(int array[]){
これはダメだな
int *array と同じでポインタのサイズしか渡さない
int *array のポインタサイズ(4バイト) / int のサイズ(4バイト)=1
void ave(int array[],int size)
{
int sum=0,i,m;
m=size/sizeof(int);
・・・・・
}
int main()
{
・・・・
ave(a,sizeof(a));
とするとか
602:デフォルトの名無しさん
07/04/08 01:13:19
you! c++でいっChinaよ
603:デフォルトの名無しさん
07/04/08 01:21:58
C言語では、関数に配列を渡して、渡された配列の要素数を調べる関数ってのは作れないのか。。。
main関数で要素数を入れなきゃダメなんですねどうもありがとうでした
604:デフォルトの名無しさん
07/04/08 01:38:01
出来ん事も無いけど
STLとか使ったら一瞬で出来ることをなんで悩まないといけないのか
って鬱になるから普通はしない
605:デフォルトの名無しさん
07/04/08 01:39:41
課題でeggx(C言語)てので正五角形を作って来いって言われたのですが途方にくれてます。
多角形を描く関数(fillpoly)もあるようですが、頂点の座標がわからないと描けないようで困っています。
606:デフォルトの名無しさん
07/04/08 01:54:27
頂点の座標なら
円の式と、直線の式の交点を求めるとか
sin、cosを使うとか
607:デフォルトの名無しさん
07/04/08 01:57:04
プログラムと何の関係があるのか分からんが、
正五角形の頂点なら、 k=0, 1, 2, 3, 4 として
x = cos(2π/5 * k)
y = sin(2π/5 * k)
で求まるだろう
608:デフォルトの名無しさん
07/04/08 08:32:47
Cのライブラリ全てが説明されている本って無いですか?
言われて分かる人なら X680x0 libc みたいな本を探している、と言えば早いですかね。
使用する関数名が分かっていれば、man して使い方を知る事は出来るものの、
どんな関数があるのかが分からずで困ってます。
対象は Linux / FreeBSD で、ソツ無く使える本を。
609:デフォルトの名無しさん
07/04/08 09:10:47
man2とかman3のディレクトリをlsしちゃだめなのか?
610:デフォルトの名無しさん
07/04/08 09:41:14
標準Cの範囲なら規格書で充分だろ。
611:デフォルトの名無しさん
07/04/08 09:46:47
セクション2はCの規格じゃないけどな。
612:デフォルトの名無しさん
07/04/08 10:13:48
>>604
興味本位でやってみたいからヒント頼む
613:デフォルトの名無しさん
07/04/08 11:32:32
>>612
C++をやれ
614:デフォルトの名無しさん
07/04/08 12:02:01
以後、配列を扱う場合はかならず構造体の単一メンバにすること。
615:デフォルトの名無しさん
07/04/08 12:02:46
オーライリーのC Pocket Referenceに種類ごとに標準関数の説明が載ってるよ
616:デフォルトの名無しさん
07/04/08 12:46:15
>>608 は、Unixのシステムコールも含んで、載ってるやつがほしいんじゃないか?
617:デフォルトの名無しさん
07/04/08 12:58:11
>>608
あんまりない無い。
URLリンク(www.linux.or.jp) 結局これが一番いいんじゃないかと思う。
入門書としては、UNIX-Cプログラミングを唱っているもので、プロセス・スレッド、
mmap、socletなんかを扱っているものもあるが、中途半端なものばかり。
最終的にはmanみろってことなのかもしれない。
UNIX共通に通用するベース技術・仕様の本といったら、POSIXの規格書とか
解説書あたりがお望みのものに近いか?
BSD系はソースが公開されているんだからそれを読んでコミニュティで
解決しろというスタンスが濃い。
Linuxはアプリケーションソフトばかりがとりだたされる傾向にあって、
コアなライブラリ解説なんて皆無に等しい。
オライリーのカーネル本とか、デバドラ本くらいか。
618:デフォルトの名無しさん
07/04/08 13:11:02
「ふつうのLinuxプログラミング」あたりでファイルシステムとかストリーム
とかシグナルとか、考え方から理解しておいて、あとはmanなんだろうなぁ。
619:デフォルトの名無しさん
07/04/08 14:09:16
>>613
Cではできないのですか?
620:デフォルトの名無しさん
07/04/08 14:15:22
>>619
STL は C++ 標準ライブラリ
621:デフォルトの名無しさん
07/04/08 14:55:09
スティーヴンス本も知らんのか君達は
622:デフォルトの名無しさん
07/04/08 15:17:13
(´・ω・`)知らんがな
623:デフォルトの名無しさん
07/04/08 15:26:18
C言語500の極意(うろおぼえ)みたいな本で十分だろ。
624:デフォルトの名無しさん
07/04/08 18:35:41
608です。
皆様からのレスは本屋で携帯から読めて大変参考になりました。
>>615
>オーライリーのC Pocket Referenceに種類ごとに標準関数の説明が載ってるよ
C Desktop Reference なる本は見掛けたのですが、これの事?
内容は本の厚さに比例してそこそこと言う感じでした。
初めてCを使う人には良いかも。
>>623
>C言語500の極意(うろおぼえ)みたいな本で十分だろ。
これを見掛けた時は「これか!?」と思ったのですが、内容が・・・
参考になる点も多かったのですが、今求めている物とは大きくずれてました。
いざ探してみると満足の行く物は確かに無いですね。
みんなどうやってプログラミングしているんだろう?と不思議になってきました。
今にして思うと X680x0 libc は偉業と感じます。
これには標準的な関数ならバッチリ載っているので、残りは
>>617 を参考にするのがベターの様です。
本屋で探した感じでは C言語大辞典 がわりとイイ線行ってたので
今度は神保町あたりでじっくり探してみたいと思います。
レスしてくれた方々、有難う御座いました。
625:デフォルトの名無しさん
07/04/08 21:36:11
配列って、絶対アドレス順にしかできないの?
a[0]とa[1]はメモリ上となりあわせで
a[0]アドレスが100ならa[1]は99といった感じで使いづらい・・・
malloc関数を使ったら、a[0]〜a[それまで]のものが全部初期化されちゃって使いづらい。
今までの配列の要素を変化させずに動的に配列の要素数を変化させることはできないですか?
scanf関数を使うたびに配列の要素をひとつずつ増加させるのを作りたいんだけど。
int ct=0,m,*data;
data=(int*)malloc(100*sizeof(int));
while(1){
scanf("%d",&m);
if(m==0)break;
data[ct]=m;
ct++;
}
たとえばこれだと100個以上の入力されるとエラー起こすし、
5個しか入力しないと残りの95個もったいない
どうすりゃいいですかね?
626:デフォルトの名無しさん
07/04/08 21:39:05
そのための線形リストだ。
627:デフォルトの名無しさん
07/04/08 21:42:26
>>625
・realloc
・std::vector (C++ 限定)
628:デフォルトの名無しさん
07/04/08 22:09:43
ビット演算の意味がわからない。
629:デフォルトの名無しさん
07/04/08 22:11:34
#include<stdio.h>
void main(void){
int x,y;
scanf("%d,%d",&x,&y);
printf("%d",x/y);
}
5行目:0で割っています と出るんですが、何故なんでしょうか?
x,yには0以外の数字を入力しています
630:デフォルトの名無しさん
07/04/08 22:15:11
"%d,%d"のフォーマット通りに入力してる?
631:デフォルトの名無しさん
07/04/08 22:15:15
>>620
>>603 の
>C言語では、関数に配列を渡して、渡された配列の要素数を調べる関数ってのは作れないのか。。。
に対して
>>604 が
>出来ん事も無いけど
って答えているので、STLってかテンプレート使わずにC言語の機能だけでできるのかなぁと思って聞いてみたわけです。
なんか粘着みたいですいません。
632:デフォルトの名無しさん
07/04/08 22:19:44
>>624
いや"C Pocket Reference"
もれは英語版を使ってるけど一応ISBNは
0-596-00436-2
633:629
07/04/08 22:22:42
>>630
すいません、フォーマット通りとはどういうことでしょうか?
634:デフォルトの名無しさん
07/04/08 22:26:52
>>630じゃないが
たとえば
$ 4,2
にように入力してるかってこと
635:デフォルトの名無しさん
07/04/08 22:27:11
10,2
とか
636:デフォルトの名無しさん
07/04/08 22:29:00
123,456もだな
637:629
07/04/08 22:29:46
>>634-635
やってませんでした。今やったらできました。ありがとうございます!
638:デフォルトの名無しさん
07/04/08 22:36:36
>>636
いやwwwそれいったらintの範囲のその範囲乗までレスがつくぞ
639:デフォルトの名無しさん
07/04/09 07:17:09
scanfの戻り値みろよ…
640:デフォルトの名無しさん
07/04/09 10:18:00
すいません、どなたかわかる方がいれば回答お願いします
C言語のコマンドラインから引数を渡すプログラムで
ちゃんと動いてくれませんorz
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[]){
FILE*fin,*fout;
char ss[256];
if(argc!=3){
printf("引数の数が違います\n");
exit(1);
}
if((fin=fopen(argv[1],"r"))==NULL)
{
printf("入力ファイルをオープンできません\n");
exit(1);
}
if((fout=fopen(argv[2],"w"))==NULL){
printf("入力ファイルをオープンできません\n");
exit(1);
}
while (fgets(ss,256,fin) !=NULL){
fputs(ss,fout);
}
fclose(fin);
fclose(fout);
return 0;
}
641:デフォルトの名無しさん
07/04/09 10:21:03
これをコマンドプロンプトやbcpadなどで実行しても最初の引数の数が違います、
としか表示されなくて・・・
色々調べて試行錯誤したのですが結局一晩かけてもわかりませんっでした
こんな自分は問題解決能力がないからPGむいてないのでしょうか(´Д`;)
642:デフォルトの名無しさん
07/04/09 10:24:50
>>641
俺の環境ではちゃんと動いたけど?
643:デフォルトの名無しさん
07/04/09 10:25:15
>>641
問題無いように見えるけど・・・
644:もしかして、コマンドライン引き数を知らないと言う落ち?
07/04/09 10:38:51
>>640
>これをコマンドプロンプトやbcpadなどで実行しても最初の引数の数が違います、
>としか表示されなくて・・・
漏れの環境では、引き数を指定しないで実行したらそうなった。
期待通りの動作じゃないのか?
645:デフォルトの名無しさん
07/04/09 10:45:37
学びたての頃一日かけてやっとセミコロンが一つ足りないことに気付いたことがある俺の勝ち
646:デフォルトの名無しさん
07/04/09 10:50:17
セミコロンが一つって思うだろうがたかが1日じゃないか
3日悩むよりずっといい
まだまだだな
647:デフォルトの名無しさん
07/04/09 11:00:17
>>640のfinの宣言部で
FILEと*finがくっついて1つの単語になってるように見えるのはオレだけ?
648:デフォルトの名無しさん
07/04/09 11:04:53
俺の三倍とはこやつやりおるわ…
hoge.exe piyo.txt
のようにコマンドプロンプトに入力すればファイルの中身を表示できるはずです。
くらい書いとけばいいのに、不親切なテキスト(かどうか知らんが)だなぁ
649:デフォルトの名無しさん
07/04/09 11:09:22
漏れなんて、ソースファイル末尾の改行がないためにNULLポン消えなくて一週間悩んだぜ。
#コンパイラが生成するアセンブリ出力の改行が足りなくなると言う素敵なバグの所為だったんだけど。
650:デフォルトの名無しさん
07/04/09 11:18:17
>>641
>これをコマンドプロンプトやbcpadなどで実行しても最初の引数の数が違います、
ってことは
printf("引数の数が違います\n");
が実行されて表示されてるってことで
それが実行される条件はプログラムに与えられた引数の数
だからtest.exe a.txt b.txtのようにプログラムに与える引数を変えればいいんじゃない
問題解決能力じゃないと思う
たとえばできるだけ客観的に説明する能力とか不足を補う理解力とか
誰もが通る道だけどな向き不向きなんてすぐにはわからん
651:デフォルトの名無しさん
07/04/09 11:21:31
>>650
お前は日本語で説明する能力を養え
652:デフォルトの名無しさん
07/04/09 11:26:54
PGに不向きな奴は1年持たない
1年持てば問題なす
653:デフォルトの名無しさん
07/04/09 12:42:16
もれなんて一切コメントがないという芸能人の浮気疑惑のようなプロジェクトを引き継いで
マイプライベートタア〜イムを返上して解読&コメントつけていったのに
1ヵ月後に会社が清算を迎えたo... rz
654:デフォルトの名無しさん
07/04/09 15:35:11
>>640
ちゃんと動くんだが?
655:デフォルトの名無しさん
07/04/09 20:53:17
フリーウェアの秀丸のサイトを教えてください
656:デフォルトの名無しさん
07/04/09 20:54:50
は?
657:デフォルトの名無しさん
07/04/09 20:55:17
URLリンク(www5.ocn.ne.jp)
658:デフォルトの名無しさん
07/04/09 21:15:23
#include <stdio.h>
int main(void) {
/*文*/
return 0;
}
入門書では上のように学んだんですが、コンパイルできれば次のような形式でも
問題ないのでしょうか?
#include <stdio.h>
main(){
/*文*/
}
659:デフォルトの名無しさん
07/04/09 21:22:17
>>658
コンパイルできても上の方が望ましい。
660:デフォルトの名無しさん
07/04/09 21:25:08
いや、下のでも問題ないよ。
661:デフォルトの名無しさん
07/04/09 21:30:00
戻り値の書かれていない関数定義はintを返すと見なされる(Cではだっけ?)
ので、いいっちゃいい。(許容されるという意味で)
662:デフォルトの名無しさん
07/04/09 21:31:27
return 0のほうか。
戻り値を使う予定がないならなんでもいいよ。
型は>>661にあるようにintになるがどんな値になるかは不明。
663:デフォルトの名無しさん
07/04/09 22:46:13
>>659->>662
レスありがとうございます。他の人のプログラム見せてもらったとき
たまたま見つけて疑問に思った程度なんです。とりあえず、
自分で書くときは習ったやりかたでやっていこうと思います。
664:デフォルトの名無しさん
07/04/09 22:58:14
>>663
たぶん書き忘れじゃないかと思ふ
665:デフォルトの名無しさん
07/04/09 22:58:37
>>662
>intになるがどんな値になるかは不明。
あれ?return書かない場合は0返すんじゃなかったか?
666:デフォルトの名無しさん
07/04/09 23:06:02
クラスのstaticで宣言したメンバー関数の関数ポインタを持つ事って可能ですか?
667:デフォルトの名無しさん
07/04/09 23:10:06
>>665
C++では前からそうだが、CではC99から
>>666
C++はスレ違いだが、静的メンバ関数は、非メンバ関数同様に扱える。
ようするに静的メンバ関数へのポインタはただの関数へのポインタで扱える。
668:デフォルトの名無しさん
07/04/09 23:11:14
>>666
可能
VCで試した
メンバーへのポインタじゃなくてC言語のように普通の関数へのポインタ
669:デフォルトの名無しさん
07/04/09 23:18:43
参考書とかネットの記事とか見てるとmain()内の最後で、
return 0;
return (0);
って2種類の書き方見るんだけどこれらに明確な違いってあるのか?
低レベルな質問ですまん ><
670:デフォルトの名無しさん
07/04/09 23:24:11
>>669
括弧いらない
あっても結果は変わらない
671:デフォルトの名無しさん
07/04/09 23:25:28
違いはない。ただし括弧を付けない書き方が一般的。
昔はreturnに括弧を付けなければならなかった。
現在、括弧は不要になったが、あっても式の一部として扱われるのでコンパイルは通る。
672:デフォルトの名無しさん
07/04/09 23:26:01
>>670
レスありがとう。やたら気になってたんだ
673:デフォルトの名無しさん
07/04/09 23:28:21
>>669
returnは関数じゃなくてステートメントだから付けないてよい。
付けてもエラーにはならないが a = b + c を a = (b) + (c) などと書くのと同じことで冗長。
お作法的な話で言えば、綴りを間違って retrn 0 と書けば即コンパイルエラーだが、
retrn(0) と書いてしまうとそういう関数があるものと仮定されリンク時までエラーが発覚しない。
674:デフォルトの名無しさん
07/04/09 23:29:06
>>671
いつの話だ。
675:デフォルトの名無しさん
07/04/10 01:48:13
sizeof expr はつけなくてよいと分かっていても括弧つけてしまうな…
676:デフォルトの名無しさん
07/04/10 02:36:33
これは確かに使い分けに迷う。
sizeof(型);
sizeof 変数;
677:デフォルトの名無しさん
07/04/10 02:42:05
演算子もいってみりゃ関数みたいなもんじゃん
ってことで()付けてるけどいいのか?
678:デフォルトの名無しさん
07/04/10 03:55:13
>>676
変数ではなく式
679:デフォルトの名無しさん
07/04/10 04:01:44
>>677
別に構いませんよ。
++(*(&(i)));
680:デフォルトの名無しさん
07/04/10 05:33:50
激しくうっとうしいわw
681:デフォルトの名無しさん
07/04/10 06:05:28
式だったら尚更()つけないとね
682:デフォルトの名無しさん
07/04/10 10:55:06
sizeof は、長い行の中に入ることもあって () なしだと見づらくなる場合があるからな
でもsizeof() じゃなくて、sizeof () にしてるな。
>>671
return に括弧が必要なときってあったか?
683:デフォルトの名無しさん
07/04/10 13:59:08
mem = malloc(len * sizeof * mem);
684:デフォルトの名無しさん
07/04/10 15:55:00
arrayという2次元配列にintの数値が入っています
for(i=0;i<array[0][j];i++)という風for文の条件式にしようとしても出来ませんでした
こういう場合はどうすればいいのですか
685:640
07/04/10 16:10:53
やはりちゃんと動いてくれません(´Д`;)
>>650さんの意味がよくわからないのですが
>>if((fin=fopen(argv[1],"r"))==NULL) の所のargv[]を1ではなくて他
の数値を渡せということでしょうか??
686:デフォルトの名無しさん
07/04/10 16:15:25
ちゃんと動かないって…もうちょっと他人にわかるように説明しろよ。
* どういう方法で起動していて、
* どういう挙動をして欲しいのか、
* そして実際はどういう結果になっているのか
687:362
07/04/10 16:38:24
>>363
型を見てみたらsignedcharでした。
この型しかソケット通信では送れないのでしょうか?
>>364
ぐぐってもデータの転送順がかわることしかわかんなかったです><
多くのデータを一度にsendで送るいい方法はないのですか><
688:デフォルトの名無しさん
07/04/10 17:06:16
bcpadから直接起動してるから引数渡せてないと予想
689:デフォルトの名無しさん
07/04/10 18:53:39
趣味で麻雀をやってるんだけど、自分の打ち方がどれぐらい強いのか試そうと思ってC++のコンパイラさえあればあとは言語が書ければ代打ちソフトが作れるってdllを見たんでCをしてみようと思うんですけど。
これを読めばとりあえず素人はなんとかなるとか、このコンパイラが素人向けでわかりやすいなどありましたら教えてください。
一応Delphiは触るだけ触ったことはあるので言語そのものにアレルギー反応なんかは起こしませんけど、実用的なソフトを作ったことがないのでアルゴリズムなどちんぷんかんぷんです。
690:デフォルトの名無しさん
07/04/10 19:00:07
にh
691:::
07/04/10 19:00:55
C言語習ったばかりなんですが、システムを組んでみたいと思ってます。
システムを組むための参考書や問題集は売ってますかね?自分で一から
システムを作るのはやはり難しいですか?
692:デフォルトの名無しさん
07/04/10 19:01:30
システムの定義を教えてくれ
693:デフォルトの名無しさん
07/04/10 19:03:29
>>690
わかりにくかったなら省きますけど要は、素人におすすめできるコンパイラ(いつまでも使えるのならなおいいけどわかりやすさ優先。)と素人向けの参考書を教えてくださいってことです。
OKですか?
眠いのでちょっと日本語がおかしかったのは見逃してください。
694:デフォルトの名無しさん
07/04/10 19:41:38
>>693
おまいは、>>690を見て
>にほんg(ry
って分かったのかよw
だったらなぜ、そもそも改行が出来ないんだ
WindowsならBCCでおk
695:687
07/04/10 19:58:19
キャストしてもデータが途中までしか送れません><
どうすればいいんですか
696:デフォルトの名無しさん
07/04/10 23:22:31
C言語で、char型の配列を確保する時に
領域を指定しないで宣言する方法ってありますか?
char *s[]; ←のように宣言してもsのサイズが不明、もしくはゼロとか出て
うまくいかないんですが、何かいい方法ありますか?
因みにこの問題ではmallocを使わないでやるという事が前提になってます。
697:デフォルトの名無しさん
07/04/10 23:24:37
callocもしくはreallocを使えばいい
698:デフォルトの名無しさん
07/04/10 23:28:27
>>695
じゃあ二回に分けて送れば
699:デフォルトの名無しさん
07/04/10 23:35:21
質問です
AまたはBならCをする
if( A || B )
{
C ;
}
という条件文をA、Bわけて記述した時に、
if( A )
{
C ;
}
else
{
if( B )
{
C ;
}
}
こう記述できると思いますが、Cを1回だけ使うような記述の方法はあるでしょうか?
700:デフォルトの名無しさん
07/04/10 23:39:14
最近、こんなトンチみたいな問題だす学校、多いのかね?
701:デフォルトの名無しさん
07/04/10 23:41:08
>>689
それはつまり1人用の麻雀ゲームを作ろうというわけですね
それなら簡単なGUIと思考ルーチンが必要です
思考ルーチンは現在の状況, つまり引いた牌と持ち牌(っていうのか?もれは麻雀やらないから言い方違うかも)
と相手の打った牌などから次にどの牌を打つかを決める一連の思考の手順のことです
これは一般的に一種類あるいは数種類の思考パターンを用意し, これらのような決まった処理のことを
アルゴリズムと言う
アルゴリズム(思考手順)そのものは言語に依存しないので(もちろん言語によって書き方は異なるかもしれないけど)
すでに知っている言語があったら新たにCとかC++を勉強しなくてもOK
思考手順そのものを研究するのが目的ならVBやJavaなどの簡単にGUIが作れる言語が(個人的には)おすすめ
これを足がかりにほかのゲームや実用ソフトを作りたいなら将来にわたって使っていけるような言語を選ぶのもあり(CとかC++)
もしLinuxなどのUNIX系OSや, プラットフォーム非依存をターゲットとするならJavaが一番手っ取り早い
GTKやwxWidgetなどのクロスプラットフォームのツールキットを使うこともできる
(こういったツールキットは大抵複数の言語に対応している)
あるいはPythonなどのスクリプト言語を使ってみるのもあり
でも, ひとこと言わせてもらうと
> 自分の打ち方がどれぐらい強いのか試そうと思って
の意図はいまいちよくわからないが
作ったプログラムと自分で対戦すると言うなら
それは一人二役でゲームをするのと同じだからちょっと無意味っぽいと(個人的に)思う
また自分の思考をプログラミングしてほかの人やプログラムと戦わせたいのなら相当の覚悟が必要
人の思考は想像以上に複雑で, 無意識や勘なども作用してくるから
完全に自分の思考回路をプログラミングすることは(現実には)不可能に近い
したがって出来上がったプログラムは君自身より弱い
また, 何手か先を読むような(ありふれた)機能を盛り込む場合でも
計算しなければいけない手数は爆発的に増えるから(計算量とメモリーの増加), それをいかにして押さえるかとか
いろいろとテクニックも必要になってくる
ここまで考えるとかなり手間がかかる
もれは大学の卒論がチェスのゲーム理論だったからよくわかる
702:デフォルトの名無しさん
07/04/10 23:44:16
>>699
do
{
if( !A )
{
if( !B )
{
break ;
}
}
C ;
}while(0);
703:デフォルトの名無しさん
07/04/10 23:48:24
>>699
なぜそうするのかはわからんが
単純にフラグをつけるのもいいんじゃない?
Aが真ならflag = TRUE;してBのところでflag == TRUE;ならCを実行しないとか?
704:デフォルトの名無しさん
07/04/10 23:49:25
>>699
if( A )
{
C ;
}
else if( B )
{
C ;
}
これじゃダメなのか?
705:704
07/04/10 23:52:50
>>699
あー1回だけの記述か
706:デフォルトの名無しさん
07/04/10 23:54:18
>>699
if(A) {
goto l;
} else if(B) {
l: C;
}
707:デフォルトの名無しさん
07/04/11 00:01:42
>>699
if(A) goto label1;
if(B) goto label1;
goto label2;
label1: C;
label2: ;
708:デフォルトの名無しさん
07/04/11 00:18:16
>>699人気だなww
709:デフォルトの名無しさん
07/04/11 00:30:03
で、本当にこれ宿題なのか?
だとしたらこんな腐った問題を出す教師ってどんなやつなんだ。
710:デフォルトの名無しさん
07/04/11 00:35:24
Q.腐った問題を出す教師自体が腐ってる確率を求めるプログラムを作りなさい
711:デフォルトの名無しさん
07/04/11 00:40:44
>>710
int main()
{
printf("腐った問題を出す教師自体が腐ってる確率=%d%%",100);
return 0;
}
712:デフォルトの名無しさん
07/04/11 01:01:48
>>701
えっとですね、あんまり必要ないかと思って省いてしまったんですけど。
東風荘っていうネット雀荘みたいなものがあるんですけど、そのゲームの画面の状況から変数を作るdllを見つけてですね。
上がりや聴牌の判断もそのdllの関数がやってくれるので私はその変数の扱いを設定するだけで麻雀の代うちソフトが作れるようになるわけなんです。
だから、相手は人だし麻雀というゲームを遊ぶための土台の部分は配布されているので単純にアルゴリズムを考えるだけでOKってことなんですよね。
テクニックとしては、プログラムのテクニックよりは麻雀のテクニックのほうが重要だとおもうので簡単という言葉を使わせてもらってます。
713:デフォルトの名無しさん
07/04/11 03:44:18
そんな面白そうなものがあるのか。
ちょっと探してこよう……と思ったら一発で見つかった。
714:701
07/04/11 05:22:28
>>712
ほほー便利だなー
それなら自分がどんな風に思考しているのかと
どうやってそれをアルゴリズムにするのかを悩むだけでいいのかw
715:デフォルトの名無しさん
07/04/11 07:56:24
if (A) {
if (B) {
C;
}
}
716:デフォルトの名無しさん
07/04/11 08:00:29
>>715
っ A==1 B==0
717:デフォルトの名無しさん
07/04/11 08:07:36
>>715
おちつけ
それは、A||Bは(又は)ではなくてA&&B(喝)だ
718:デフォルトの名無しさん
07/04/11 08:07:36
実際こういう場合はどうしたらいいの?
素直に判別式に論理演算使えってこと?
719:デフォルトの名無しさん
07/04/11 08:17:18
switch (x) {
case A:
case B:
C;
}
720:デフォルトの名無しさん
07/04/11 08:22:28
逆に論理演算を使いたくない理由ってのがわからない
721:デフォルトの名無しさん
07/04/11 08:22:53
というかその為に論理演算子があるんだから使ってやれよ…
論理演算子が泣いてるぞ。
722:デフォルトの名無しさん
07/04/11 08:23:43
>>719
なんじゃそりゃーーー!(松田優作風に
723:デフォルトの名無しさん
07/04/11 08:23:56
AまたはBならCをする。
=> AでないかつBでないならCはしない。
というド・モルガンの法則を理解するための課題であった。
なわけはないか。
724:デフォルトの名無しさん
07/04/11 09:22:50
>>719
caseは定数しかとらないので
A, Bのような式はだめ
725:デフォルトの名無しさん
07/04/11 09:23:38
>>699
void f(void){
C;
}
int main(void){
if(A){
f();
}else if(B){
f();
}
}
726:デフォルトの名無しさん
07/04/11 09:28:07
#define SHE C
void main(void){
if(A){
SHE;
}else if(B){
SHE;
}
}
727:デフォルトの名無しさん
07/04/11 09:29:03
↑訂正
×void main(void){
○int main(void){
728:デフォルトの名無しさん
07/04/11 09:52:06
>>723
setjmp&longjmp関数の有用性を教えるための課題
729:デフォルトの名無しさん
07/04/11 10:08:09
invalid digit "8" in octal constant
invalid digit "9" in octal constant
このコンパイルエラーって何ですか?教えてください!
730:デフォルトの名無しさん
07/04/11 10:15:07
>>729
8進数なんだから0〜7までで表せよ、
8や9なんてねーよバーカ
っていうエラー。整数の頭に0をつけてるだろ。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5386日前に更新/183 KB
担当:undef