413 :
デフォルトの名無しさん :
04/12/01 08:40:09 きっと初歩的な質問で申し訳ないのですが、以下のプログラムの下から2行目 gets(y->name); のところが、コンパイルしても実行されません。 どなたか分かる人、原因を教えて下さい。お願いします。 ちなみに、エラーメッセージは出ていません。コンパイラはLSI-Cです。 #include<stdio.h> struct Student {int sintyou;int taijuu;char name[20];}tanaka,ikeda; void hyouzi(struct Student x);void nyuryoku(struct Student *y); int main(void){ nyuryoku(&tanaka); nyuryoku(&ikeda); hyouzi(tanaka); hyouzi(ikeda); return 0;} void hyouzi(struct Student x) {printf("%d %d %s\n", x.sintyou , x.taijuu , x.name);} void nyuryoku(struct Student *y) {printf("身長を入力して下さい"); scanf("%d",& y->sintyou); printf("体重を入力"); scanf("%d",& y->taijuu); printf("名前を入力\n"); gets(y->name); }
414 :
デフォルトの名無しさん :04/12/01 09:12:52
getsとscanfを使わなければうまくいきます。
>>413 scanf()とgets()を組み合わせた場合によく陥る罠。
どちらも仕様を推奨できる関数ではないので、前者はfgets()+sscanf()で、後者はfgets()で書くことをお勧めする。
それから、必要がないならLSI-Cではなく、32ビットのフリーのコンパイラを使用することを強くお勧めしておく。
>>413 fgets()+sscanf()でもいいが、fgets()+atoi()でも充分用は足りるね。
417 :
デフォルトの名無しさん :04/12/01 09:31:28
っていうか、 数値入力するのにfgetsでとるなよ argvからとれ
(・3・)エェー
>>417 インタラクティブな処理を目指しているとしたら?
例外処理とか入ってないし実用は考えてないだろ 構造体の勉強用のわざとらしいプログラムに思える。
>>420 だったら尚のこと、コマンドライン仕様を考えるのも無駄な気がするが。
K&R買ってしばらくたつんだけど。原著で読めないならば買わないほうがよかったかな? もちろん原著では読めませんけど^^;
getopt()じさく
世界中で何千・何万もの再発明を(事実上)しなきゃいけないのがクラスライブラリの貧弱なCの悩ましいところ
VisualC++6.0でダイアログのイベントハンドラ追加できないエラーに はまってます。 ダイアログエディタでダブルクリックすると 「新規メンバを追加できません」←なメッセージボックスがでて ハンドラ追加してくれません。 何が原因なんでしょう?
突っ込まれる前に訂正しとこ クラスライブラリ→標準ライブラリ
>>425 プロジェクトを一度閉じて、.clwファイルを削除した後もう一度開いても現象が変わらないなら
VC専用スレへどうぞ。
#そのソースファイルが他で開かれてるって落ちはないよな。
.clwを削除してもだめでした。 PC再起動したらいけました。 他でそのファイルを開いてたわけではないのですが・・・。
>>422 そんなことはない。
ただのC言語の解説書だよ。
理解できたら後は捨ててもいいくらい。
>>429 そうですか。安心しました。
レス、ありがとうございます。
if(A) { if(B) { hoge(); } } と if(A && B) { hoge(); } どちらも速度は変わりませんかね? A,Bは条件式とする。
そんなこと気にするぐらいだったら他所をいじれという程度の違いは出るかも
>>431 最近のコンパイラなら最適化によって同じコードを吐きます。
コンパイル速度を問うているなら、余計なことは気にするな、と。
で、まだ1種類も出ないのか?
なにが?
☆ チン マチクタビレタ〜 マチクタビレタ〜 ☆ チン 〃 ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ヽ ___\(\・∀・) < 10種類まだ〜? \_/⊂ ⊂_ ) \_____________ / ̄ ̄ ̄ ̄ ̄ ̄ /| | ̄ ̄ ̄ ̄ ̄ ̄ ̄| | | 愛媛みかん |/
437 :
デフォルトの名無しさん :04/12/01 20:45:54
晒しage
438 :
デフォルトの名無しさん :04/12/01 20:48:35
>>431 処理系による。翻訳環境と実行環境、いずれの特徴にも強く依存する。
少なくとも、その処理系での実測をせずに他の処理系での最適化についての議論を始める阿呆がいるようだが相手にしてはならない。
vc, vc++.net, gcc for cygwin & Linux & XXX & YYY, bcc shc, CodeWarrior for XXX & YYY & ZZZ, cc
440 :
デフォルトの名無しさん :04/12/01 20:56:16
stdboolのある10種類だよ♪お馬鹿さん♪♪
>>438 では、実測した結果を報告してください。
442 :
デフォルトの名無しさん :04/12/01 22:21:13
>>441 実測が必要と示唆した者になぜ実作業を要求するのか、論理的に説明したまえ。
厨国の故事による
先ずは隗より始めよと
実測するまでもなく同じコードを出力すると書いているのが見えないらしい。
コードに違いがある可能性がないはと考えられない。
447 :
デフォルトの名無しさん :04/12/01 22:52:51
>>445 >実測するまでもなく同じコードを出力する
脳が腐乱していてプログラムに関する議論ができないらしい。
448 :
デフォルトの名無しさん :04/12/01 22:55:08
すいません。他すれで質問していたのですが、ここでも質問させてください。 365 名前:デフォルトの名無しさん 投稿日:04/12/01 22:01:17 すいません。スレ違いかもしれませんが教えてください。 windowsで動作するアプリを作成してみたい(勉強したい)のですが、 例えば、VBで作成するとだとランタイムが利用するマシンに必要になるとおもいます。 こういったランタイムなどの配布なしで動作するアプリを作るには どのような技術を勉強すればよいのでしょうか??
>>448 Delphi, C++ Builder, Visual C++ とか使うといい。
ちなみに C++ Builder が一番お奨め。
452 :
デフォルトの名無しさん :04/12/01 22:57:42
453 :
448 :04/12/01 23:02:39
>>450 451
ありがとうございます。
>>452 誘導受けたわけではないのですが、”俺に聞け!”ってタイトルにつられて
ふらふらと。。。すいません。
454 :
413 :04/12/01 23:22:16
返事が遅くなってしまい、申し訳ありません。 414〜417さん、アドバイスありがとうございました。 scanf()とgets()は組み合わせるとよろしくないということですね。 まだまだ初心者で理由が分かりませんが、おいおい勉強していきたいと思います。
455 :
デフォルトの名無しさん :04/12/01 23:25:13
>>453 ちなみに、C でもランタイムはすぐつくよ。
printf みたいな標準関数を使わないんなら別だけど。
とにかくランタイムが嫌いでチキン肌がスタンダップするほどなら、
組み込み系かアセンブラのが C よか君の好みに近いんじゃないかな。
間違っても携帯アプリとかに近寄らないほうがいいよ。
ム板には機械語スレもあるけど、CISC だとやっぱりランタイムがいたりするから、
話すなら RISC 限定で切り出した方がいいな。
VC++7以上を使ってmsvcr70に嵌れ(w
458 :
デフォルトの名無しさん :04/12/02 03:29:21
> K&R買ってしばらくたつんだけど。原著で読めないならば買わないほうがよかったかな? もったいないのでわたしにください。
459 :
デフォルトの名無しさん :04/12/02 03:30:19
>>424 > 世界中で何千・何万もの再発明をしなきゃいけないのがクラスライブラリの貧弱なCの悩ましいところ
Cに「クラス」があると思い込んでいるしったかぶり君。
460 :
デフォルトの名無しさん :04/12/02 03:37:24
初めての開発環境に、MicrosoftのものかGNUのもの以外を薦める奴の気がしれない。 ボーランド最悪。
462 :
デフォルトの名無しさん :04/12/02 09:05:41
は? 逆だろ。VC最悪
素人にGNU勧めてどうするんだ?
464 :
デフォルトの名無しさん :04/12/02 09:45:43
463 名前:デフォルトの名無しさん :04/12/02 09:11:08 素人にGNU勧めてどうするんだ?
465 :
デフォルトの名無しさん :04/12/02 09:55:51
小さいファイルから巨大なファイル(数G程度)を扱うコンソールアプリを作っています。 しかしながら、ファイルのサイズをバッファに読み込むことなく取得することができず困っています。 Windows、UNIXに依存したプログラムを書くことを想定してますが、どなたか助けていただけませんか? Windows(NTFS) 2003 Server + VS .net 2003 UNIX Solaris + gcc
466 :
デフォルトの名無しさん :04/12/02 09:56:27
かなりの初心者なんですが、教えていただけたら有り難いです。 >整数型配列aに100から199までの数字を格納し、4けたの書式付10進数で出力 >せよ。また、書式なしの10進数で出力した結果と比較せよ(両方の結果を示す事)。 for文を使うと良い。 for(i=100;i<200;i++); 書式付というのは、この場合%4dということで良いのですか?
467 :
466 :04/12/02 09:57:13
初心者なりに使えない脳で書いてみました。どこが違うのでしょうか。 #include <stdio.h> main(){ int a = 0; int i; for(i=100;i<200;i++){ a = i - 1; printf("%4d",a); printf("%d",a); } }
468 :
デフォルトの名無しさん :04/12/02 09:57:45
よい。
469 :
デフォルトの名無しさん :04/12/02 09:58:35
470 :
466 :04/12/02 10:00:21
とおっしゃると? コンパイラーが無いので、確認が取れないのですが、 友人に聞いたところ、違うと返答が来て・・・・・・。
471 :
デフォルトの名無しさん :04/12/02 10:01:25
>>470 なんでわざわざ1を引くんだよ。
for(a=100;a<200;i++){
printf("%4d",a);
printf("%d",a);
}
472 :
466 :04/12/02 10:02:59
となると、、、、 #include <stdio.h> main(){ int a; for(a=100;a<200;a++){ printf("%4d",a); printf("%d",a); } } ということになるんでしょうか?
473 :
デフォルトの名無しさん :04/12/02 10:03:43
おまえら改行いれろよ...
474 :
デフォルトの名無しさん :04/12/02 10:08:44
正しくはこう #include <stdio.h> main() { int i; for (i = 100; i < 200; i++) { printf("%4d\n", i); printf("%-4d\n", i); printf("%d\n",i); } }
475 :
デフォルトの名無しさん :04/12/02 10:18:25
問題には整数「配列」aとかかれているから、 int a;はダメ int a[100];にする
476 :
466 :04/12/02 10:21:21
では、474,475さんの書き込みを二つを合わせると、 #include <stdio.h> main() { int i[100]; for (i = 100; i < 200; i++) { printf("%4d\n", i); printf("%-4d\n", i); printf("%d\n",i); } } でOKなんですか? あと、追加の質問で失礼なんですが、%-4dが示すものは何でしょうか。
477 :
デフォルトの名無しさん :04/12/02 10:36:18
> 整数型配列aに100から199までの数字を格納し、4けたの書式付10進数で出力 こういう無意味な課題出すぼけの顔をみたいものだなあ。 何か「意味のあること」やれよ。
478 :
デフォルトの名無しさん :04/12/02 10:36:48
> 整数型配列aに100から199までの数字を格納し、4けたの書式付10進数で出力 こういう無意味な課題出すぼけの顔をみたいものだなあ。 何か「意味のあること」やれよ。
479 :
デフォルトの名無しさん :04/12/02 10:38:17
正しくはこう #include <stdio.h> main() { int a[100]; int i; for (i = 0; i < 100; i++) { a[i] = i + 100; printf("%4d", a[i]); printf("%d",a[i]); } }
480 :
デフォルトの名無しさん :04/12/02 10:39:22
だからかいぎょうしろって。 #include <stdio.h> main() { int a[100]; int i; for (i = 0; i < 100; i++) { a[i] = i + 100; printf("%4d\n", a[i]); printf("%d\n",a[i]); } }
481 :
デフォルトの名無しさん :04/12/02 10:40:47
2つの出力を見比べるなら、このほうがいいのでは? #include <stdio.h> main() { int a[100]; int i; for (i = 0; i < 100; i++) a[i] = i + 100; for (i = 0; i < 100; i++) printf("|%4d|%d|\n", a[i], a[i]); }
482 :
デフォルトの名無しさん :04/12/02 10:41:49
2種類の意味のちがう「100」がまじるとわかりにくいので、 以下のようにしたほうがいいのでは? #include <stdio.h> #define N main() { int a[N]; int i; for (i = 0; i < N; i++) a[i] = i + 100; for (i = 0; i < N; i++) printf("|%4d|%d|\n", a[i], a[i]); }
Lvの低い質問だと急に賑やかになるな。
>>482 >#define N
題意を汲んだら、最初のループは for (i = 100; i <= 199; ++i) { a[i - 100] = i; } だと思うのだけどね。 #define START_NUMBER 100 #define END_NUMBER 199 int a[END_NUMBER - START_NUMBER + 1]; for (i = START_NUMBER; i <= END_NUMBER; ++i) { a[i - START_NUMER] = i; } とすりゃ間違いないな。
485 :
デフォルトの名無しさん :04/12/02 10:53:09
#include <stdio.h> #include <stdlib.h> #define N int main(int argc, char **argv) { int a[N]; int i; for (i = 0; i < N; i++) a[i] = i + 100; for (i = 0; i < N; i++) printf("|%4d|%d|\n", a[i], a[i]); return EXIT_SUCCESS; }
486 :
デフォルトの名無しさん :04/12/02 10:54:19
> 題意を汲んだら、最初のループは いや逆だろ
487 :
デフォルトの名無しさん :04/12/02 10:55:10
値が抜けてるぞ! たしかに、課題だったら丁寧なほうがいいよな。 以下ので正解では? #include <stdio.h> #include <stdlib.h> #define N 100 int main(int argc, char **argv) { int a[N]; int i; for (i = 0; i < N; i++) a[i] = i + 100; for (i = 0; i < N; i++) printf("|%4d|%d|\n", a[i], a[i]); return EXIT_SUCCESS; }
>>465 long FileSize;
fseek(fp, 0, SEEK_END);
FileSize = ftell(fp);
>>488 数GBと言うことだけど、2GB超えたら?
Windows だったら GetFileSize() とか GetFileSizeEx() とか GetFileAttributeEx() とか。 UNIX 系だったら、488 の方法で ftell() のかわりに ftello() とか、 stat() して st_size とか。
VCなら _filelength, _stat ってのもある
494 :
デフォルトの名無しさん :04/12/02 16:19:58
で、10種類は?
495 :
ゆかこ :04/12/02 16:56:39
今度C言語の課題が出たのですがどうも自分の力ではできません。 よろしければ助言をいただきたいと思います。よろしくお願いします。 レポート課題 以下のようなゲームを作りなさい。 コンピュータが 0から 9までの数を 4つ, 順序付きで重複なく選ぶとする. プレイヤ(人間)は, この数列を当てるのだが, はずれた場合に提示されるヒントは次の通り. 正解の n番目の数を n番目に解答していれば, Hit と呼ぶ. Hit の個数がヒントとして提示される. 正解の n番目の数を m番目(n≠m)に解答していれば, Blow と呼ぶ. Blow の個数がヒントとして提示される. 実行例 5 6 7 8 Hit: 0, Blow: 3 7 8 9 0 Hit: 1, Blow: 1 1 2 3 6 Hit: 1, Blow: 0 9 8 5 6 Hit: 3, Blow: 0 0 8 5 6 Congratulations!
497 :
ぼるじょあ ◆yBEncckFOU :04/12/02 17:02:18
エェー あっちのスレで待っているYO!
ぼるじょあさん全然答えてないYO↓
>>488 これ使え
unsigned int filesizeget(unsigned int *GByte, FILE *fin)
{
unt Byte;
int ch;
if(GByte == NULL){
/*ファイルのサイズが1GBに満たない約束できる場合*/
for(;;){
for(Byte=0;Byte<0x40000000;Byte++){
if((ch=fgetc(fin)) == EOF){
return Byte;
}
}
}
}else{
*GByte = 0;
for(;;){
for(Byte=0;Byte<0x40000000;Byte++){
if((ch=fgetc(fin)) == EOF){
return Byte;
}
}
(*(GByte))++;
}
}
}
>>499 >488内のアンカーにある>465を読むことを思いつけませんでしたか?
typedef struct _node { char name[32]; char phone[16]; struct _node *next; }Node; Node *InsertNode(Node*,Node*); void main(void) { Node *p=NULL,q; while(1){ printf("名前:"); scanf("%s",q.name); if(strcmp(q.name,"end")==0) break; printf("電話番号:"); scanf("%s",q.phone); p=InsertNode(p,CreateNode(&q)); } return; } これと同じことを以下のdatファイルからfscanfを用いて読み込むにはどうすればいいのでしょうか? けいさつ 110 しょうぼう 119 じほう 117 てんき 116 FILE *fp; fp=fopen("data.dat","r"); while(1){ fscanf(fp,"%s",%s",q.name,q.phone); p=InsertNode(p,CreateNode(&q)); } では出来ませんでしたぁ〜
不思議なとこにダブルクォーテーション入れますね君
#include "resource.h" これがあるときどう実行するんですか LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です Debug/memo01.exe : fatal error LNK1120: 外部参照 1 が未解決です。 link.exe の実行エラー
学校の先生に聞いてください。暗号文から解答を導くのが彼らの仕事です。
>>501 いつから天気予報は116になったんでしょうか
>>505 NTTが天気予報も始めたんですよ。ご存知ありませんか
なんか面白いスレだな〜
不真面目なインターネッツですね
117 ぴっぴと鳴る 177 天気になれなれ
>>503 Windowsプログラムを作るオプションを書き足せ。
#include "resource.h"じゃなくてWinMainが原因だろ。
時間割を作成するプログラムってどんな感じで作ればいいですか? 空いているスケジュールを探して埋めていくと言う感じで
うぉ・・・何やってるんだ自分は
>>495 のやつをちょっと作ってみようと思って作り始めたらこんなにたってるし
作るべきプログラムそっちのけでorz
>>511 スケジュールが重複した場合はどうするの?
516 :
466 :04/12/02 21:58:47
皆さん、議論していただきありがとうございます。 あれから、色々考えてみて、動くソースを考えてみました。 #include<stdio.h> main(){ int a [100] = {100} ; int i; for(i=100;i<200;i++){ a[i] = i ; printf("書式なし:a[%d]%d\n",i,a[i]); printf("書式あり:a[%d]%4d\n",i,a[i]); } } こんなんじゃ駄目なんですかねぇ。 487さんの様に色々混ぜて使えると良いのですが、私にはまだ無理っぽいです。
>>516 int a[100];って宣言したのにa[i]、つまりa[100]〜a[199]に書き込もうとしている。
本当に動いてる? for (i = 100; i < 200; i++) が必須だとしたら、 a[i-100] = i; でないといけません(もしくはa[200]と宣言するw)。
520 :
466 :04/12/02 22:11:03
実行してみたんですが、普通に動いてます。 a[100] に100を格納していて、for文からのiはi++によって a[101] = 101 〜 a[199] = 199 まで格納されるように考えたんですが・・・・・・。 って、a[100]からって意味不明ですね・・・・。 でも動くのは何故・・・・・?
破壊された領域を他の用途に使ってないからです。 再現性の低いバグに悩まされます。
523 :
デフォルトの名無しさん :04/12/02 22:21:49
>>511 科目(?)のデータのほうがどうなってるのかわからんしなー。
>>520 =466
#include <stdio.h>
int main()
{
int a[100], b[100], c[100];
int i;
for(i = 0; i < 100; i++)
a[i] = 1, c[i] = 3; /* aはすべて1, cはすべて3にする */
for(i = 100; i < 200; i++)
b[i] = 2;
for(i = 0; i < 100; i++)
printf("a[%d] = %d, c[%d] = %d\n", i, a[i], i, c[i]); /* aかcの値が... */
return 0;
}
ウジウジいつまでも残ってるのもあれだからサクっと使ってしまいたいが 電波でも来ない限りそうそう埋まるもんじゃないからなぁ
526 :
デフォルトの名無しさん :04/12/02 23:30:49
C言語で質問なのですが、少しわからない事があります。 背番号,打数,安打数を多数入力し、打率の最高の選手のみ 背番号,打数,安打数とともに打率を出力する(同一打率の選手はない) プログラムです。ストッパは背番号=−999,打数=安打数=0 ここまでは出来ました。しかしコンパイルがうまくいきません・・・。 指摘下さいますと助かります。 #include <stdio.h> int main(void) { int num,num1,dasuu,dasuu1,anda,anda1; double daritu,daritu1; daritu=0; daritu1=0; do{ printf("背番号を入力せよ\n"); scanf("%d",&num); printf("打数を入力せよ\n"); scanf("%d",&dasuu); printf("安打数を入力せよ\n"); scanf("%d",&anda); daritu=anda/dasuu; if (daritu1<daritu) { num1=num; dasuu1=dasuu; anda1=anda; daritu1=daritu; } }while(num!=-999 && dasuu!=0 && anda!=0); printf("%d %d %d %.3f",num1,dasuu1,anda1,daritu1); return(0); }
528 :
デフォルトの名無しさん :04/12/03 00:16:00
533 :
デフォルトの名無しさん :04/12/03 03:52:21
> 先にこのスレ使わないのか? あれはにせものだから削除だろ。
534 :
デフォルトの名無しさん :04/12/03 04:29:36
で、10種類は?
535 :
デフォルトの名無しさん :04/12/03 08:26:38
> ひとつのオブジェクトを2つに分裂させるコードを書きたいのですが、 fork() して exec()
536 :
デフォルトの名無しさん :04/12/03 08:58:09
で、10種類は?
537 :
デフォルトの名無しさん :04/12/03 10:07:21
ほんとにVC厨っているんだー
538 :
デフォルトの名無しさん :04/12/03 10:39:14
本に書いてある通りに打ったのですが、 #define iskanji(c) \ (0x81 <= (c & 0xff) && (c & 0xff) <= 0x9f || \ 0xe0 <= (c & 0xff) && (c & 0xff) <= 0xfc) この行でエラーになるんです。 なぜでしょう?
540 :
デフォルトの名無しさん :04/12/03 11:00:37
覚えてないけど、エラーが出るんです。 いま手元にないんで試せないけど...。
char型の変数の使いかたがいまいちわかりません。。。 教えてください。 (例)char型の変数bufに"あいう"を代入する。 char buf[7] = ""; char buf2[3] = "い"; buf = "あ" + buf2 + "う"; ポインタにポインタを加えられないということで これは無理ですよね。 strcpy(buf, "あ"); strcat(buf, buf2); strcat(buf, "う"); こうすれば buf に"あいう"が入りますよね。 他に簡単というか適切な方法はないのでしょうか?
542 :
デフォルトの名無しさん :04/12/03 12:20:10
> (例)char型の変数bufに"あいう"を代入する。 char型にひらがなは入りません。 asciiの文字コード表を見ること
543 :
デフォルトの名無しさん :04/12/03 12:35:09
>>541 sprintf( buf, "%s%s%s", "あ", buf2, "う" );
>>542 はい、確認してみます。
>>543 sprintfでできました。ありがとうございました。
>>544 sprintfでやると領域が破壊されてしまうのでしょうか?
>>545 bufのサイズより書き込む文字数が多いと領域破壊となる。
>sprintfでやると領域が破壊されてしまうのでしょうか? 出力文字数がバッファより多いときはな。 なので代わりに最大文字数を指定できるsnprintf使うとか sprintf(buf, "%.6s", "あいうえ"); として精度を指定したら確実
>>546 >>547 すごくわかりやすかったです。
説明ありがとうございました。
もう少し本を読んで勉強してみます。
549 :
デフォルトの名無しさん :04/12/03 14:50:58
printfのプロトタイプ宣言で↓な感じでした。 printf( const char *, ... ); "..."はどういう意味ですか?
可変引数
このスレ、面白くもなんともないな。
>>551 楽しくしてやるよ。
Windowsクライアントからソケットストリームで送られてくる
ASCIIコードデータをホスト用にEBCDICへ変換する汎用ルーチンを作成せよ。
なおバイトオーダーはスモールエンディアンとする。
開発環境はUNIX-Cな。 暇なんだろ。さっさと作れ。
554 :
549 :04/12/03 16:13:23
>>550 可変引数で検索したら出てきました。
有り難うございました。
ところで受け取った可変引数のパラメータをそのまま別の関数に渡す事は出来ないのでしょうか?
やりたいことは、あるマイコンのファームウェアなんですが、
printfする前に必ずあるレジスタの書き換えが必要です。
それを myprintfを作成してprintfの置き換えとして使用したいと思っています。
myprintf( 可変引数 )
{
レジスタの設定
printf( myprintfが受け取った可変引数をそのまま渡す )
レジスタの設定を元に戻す
}
ttp://www.geocities.jp/ky_webid/c/057ans.html の問題2の様にしても
良いのですが1文字毎にprintfを呼び出しているのでちょっと・・・
どなたかお知恵を貸してください。
>>556 変な人とつきあったらだめですよー にゃんにゃん
558 :
デフォルトの名無しさん :04/12/03 16:40:21
#include <stdio.h> #include <process.h> int main() { FILE *fp; char str[5]; fp=fopen("test.exe","r"); if (fp == NULL){ printf("eror"); exit(-1); } while (fscanf(fp,"%s",str) != EOF) printf(str); fclose(fp); exit(-1); //return -1; } としてexeファイルを読み込んで表示させるとMZPとなるのですが、なぜ全文を表示できないのでしょうか? テキストとかなら読み込めるのですが。
バイナリだろ
fscanfがそういう仕様になってるだけ
561 :
デフォルトの名無しさん :04/12/03 17:09:16
質問です ある計算を複数回行いたいのですがそれを繰り返し回数 ではなく、実行時間で決めたいのですがどのように すればよいのでしょうか?イメージとしては n=繰り返し回数 for(i=1;i<=n;i++){ ある計算 } をn=1分間という感じなのですが・・・よろしくお願いします
562 :
デフォルトの名無しさん :04/12/03 17:14:19
cat -n使っての、行番付サーバですが、 telnetで接続して、データおくっても、反応なしです。。 どこかで詰まってます。 おかしなところあったら教えてください。 fork()2回してます。 一回目は並行サーバのため、1回目はcat -nをexecuteするためです。 pipe2個つかって通信してます。
563 :
サーバ部 :04/12/03 17:14:54
while (1) { if (pipe(pipe1)<0)perror("pipe"); if (pipe(pipe2)<0)perror("pipe"); cfd=accept(lfd,(struct sockaddr*)NULL,NULL); printf("accept OK.\n"); if ((pid=fork()) < 0) { perror("fork");exit(1);} if (pid == 0) { /* cat -n */ close(lfd);close(cfd); printf("I'm cat -n\n"); if (dup2(pipe1[0],STDIN_FILENO)<0)perror("dup2"); close(pipe1[0]);close(pipe1[1]); if (dup2(pipe2[1],STDOUT_FILENO)<0)perror("dup2"); close(pipe2[1]);close(pipe2[0]); execlp("cat","cat","-n",(char*)NULL); perror("cat"); exit(1); } if ((pid2=fork()) < 0) { perror("fork2");exit(1);} if (pid2 == 0) { /* client processor */ close(lfd);
>>561 time_t StartTime = time(NULL);
while (difftime(StartTime, time(NULL)) < 60)
565 :
サーバ部2 :04/12/03 17:16:41
printf("I'm client processor\n"); close(pipe1[0]);close(pipe2[1]); nbytes=read(cfd,buf,sizeof(buf)); write(pipe1[1],buf,nbytes); nbytes=read(pipe2[0],buf,sizeof(buf)); write(cfd,buf,nbytes); while ((nbytes=read(cfd,buf,sizeof(buf))) > 0) write(pipe1[1],buf,nbytes); while ((nbytes=read(pipe2[0],buf,sizeof(buf))) > 0) write(cfd,buf,nbytes); exit(0); } close(cfd);close(pipe1[0]);close(pipe1[1]);close(pipe2[0]);close(pipe2[1]); printf("I'm parent\n"); for (i=0; i<2; i++) { while ((wr=wait(&status)) != pid && wr != pid2) ; /* do nothing */ printf("wait: status=%d\n",status); } }
566 :
訂正 :04/12/03 17:19:35
サーバ部2の nbytes=read(cfd,buf,sizeof(buf)); write(pipe1[1],buf,nbytes); nbytes=read(pipe2[0],buf,sizeof(buf)); write(cfd,buf,nbytes); は余分なのでcutです。
567 :
openGL初心者 :04/12/03 17:25:28
openGLを使ったプログラム作成を助けてください。Visual Cプログラムの関数void 図形(void)の部分なのですが、問題は以下の通りです。 「表面の座標(x,y,z)が下の左式、その点における法線nが下の右式で表される立体を描け。 ここで、θおよびφはそれぞれ0<=θ<=2πおよび-π/2<=φ<=π/2の範囲をとる媒介変数であって、定数hは0<=θ<πにおいて0.3、π<=θ<=2πにおいて2とする。 なお、法線ベクトルnは正規化されてないことに注意せよ。」という問題です。また描画要素としてGL_QUADS_STRIP(隣接四辺形)を使うことが条件です。 どなたか教えてくださいお願いします。尚、初心者なのでコードの説明をしていただけると幸いです。
>>567 > ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
あ〜 マルチしちゃったよ〜 だめだな、こりゃ。
可変長引数の関数が受け取った引数を、別の可変長引数関数に全部渡すのって、どうやるんでしょう。
572 :
デフォルトの名無しさん :04/12/03 17:41:31
>>564 ありがとうございました。さっそくやってみたところ
実行が終わりませんでした。
教えてくださったことを参考に調べてみて書き変えて
みたのですが
time_t StartTime = time(NULL);
(difftime(time(NULL) , StartTime) < 60)
ではないでしょうか?こっちでやってみたところ
うまくいった感じです。どうもありがとうございました。
>>571 無理、可変個引数をとる関数を作るときはva_listを受け取るバージョンも作っておけ。
お前が554なら
>>555 に答えは出ている。
574 :
デフォルトの名無しさん :04/12/03 18:28:07
スレ違いかもしれませんが Telnetを引数なしで起動したときのように ユーザーに入力させてそれを解析して実行する というUIって何か名前あるんですか?
対話型インターフェイス
577 :
デフォルトの名無しさん :04/12/03 22:27:42
>>559 >>560 #include <stdio.h>
#include <process.h>
int main()
{
FILE *fp;
char str[500];
fp=fopen("test.txt","rb+");
if (fp == NULL){
printf("eror");
exit(-1);
}
while (fgets(str,256,fp) != NULL)
printf("%s\n",str);
fclose(fp);
exit(-1);
//return -1;
}
なおしてみますた。
こうすると12fd98がずらっと表示されるのですが、なぜでしょう?
スルーする?
┌───────────────────┐ |致命的なエラー [×]| ├───────────────────┤ |質問者は致命的なエラーを抱えています。 .| | | |スルーしますか? | | [ はい(Y) ] [ いいえ(N) ] | └───────────────────┘
>>577 fgetsの代わりにfreadを使ってみたら?
ネタだろ
582 :
デフォルトの名無しさん :04/12/03 22:53:28
12fd98がずらっと表示されるのってなんでえTT
_,.. ----- 、_
,. ‐''´ `丶、
, '" _,. -―‐--、ヽ ヽ、
/ / ,. '´ ,. ---`,r=、 ヽ
,:' / // / i `丶、 ヽ
/ / / , ' / / l! 、ヽ ',
/ / / / ,イ / /|| ', ヽヽ !
! i l i / // /, ' l '、 ', ヽ', |
! | ! l| ! // ,ィ´∠∠',,,,,,,_', ヽ ヽ ',! |
! l !''7|!',´i`!/'//'´_,,......._ ヾ`ヽヽ l!| !
| ', !ノ''ラ∀、、 '´ ,r'''ラ""''ヽヽ、 ヾ、 リ / |
', ヽ{i {_)::::::i !_)::::::::!ヽヽ }__// !
', !ヾ、 !:::::::::} |::::::::::::} ノ、 !', ヽ !
', | | ! ゝ--' ゝ---'、 ノ l ノ ノ /
',', ',', // ,ィ´ /
',', ',丶、 r--、 /'  ̄/ {
',ヽ', `丶、 ` ´ _,.. ィ´'´ i ! ヽ
ノ ヽ | }`T;ーr '´ // /! ', '
┌/)/)/)/)/)/)/)/)/)/)l . . .l l:. l-、 . i. .i
|(/(/(/(/(/(/(/(/(/(/│. . | i:. l \ .:i
r'´ ̄ヽ. | | | .| i: .l \
/  ̄`ア
>>582 | | | /| i: .l 入
〉  ̄二). あなたは | | |./ .| i: |
〈! ,. -'. だあれ? | | ヽ,r| i. l---', '´ ',
| \| |
584 :
デフォルトの名無しさん :04/12/03 22:56:59
586 :
デフォルトの名無しさん :04/12/03 23:20:38
>>584 こんどは0012FD98が表示されました!
どうしましょう?
中身はexeのバイナリーなんですけど、同じ文字が表示されるの変じゃないですか?
#include <stdio.h> int main() { FILE *fp = fopen("rebuild.exe", "rb"); char str[512]; if (fp == NULL) { printf("error"); return 1; } while (fgets(str, 512, fp) != NULL) printf(str); fclose(fp); return 0; }
>>588 printfじゃなくてfputsだろ。
>573 そうか。ありがとう。C言語の範囲じゃできないわけだね。 va_listを引数にする関数を作りたいところなんだが、他人の作った関数を呼び出す必要が あるので、別の方法を考えてみるよ。(引数のパターンをある程度制限するとか、アセンブラ に挑戦してみるとか)
移植性や仕様として許されるかは別として、 ただ単に可変引数をそのまま渡すのなら、 例えば int型の変数a1,a2,a3,....a30を用意し、 それぞれにva_arg(int, an)で引数をコピーし、 original_printf(format, a1,a2,a3,...,a30); で呼び出すという手も 一応無くはないよ。
指定されたバイトに書き込むときってどうやるんですか?
>>592 そのバイトは誰だ?書き込むとは誰が何処に何を?時給は?
って、今思ったけど でかい構造体を引数扱いにすればいいな。 struct arg { char data[256]; }; struct arg *args; va_start(ap, fmt); args = &va_arg(ap, struct arg); org_func(fmt, *args); 構造体のサイズ分のコピーは起こるし 移植性の問題は全然解決しないけど。
>594 おお。これ面白いアイデアですね。 関数に渡したいデータはもともと別のデータ領域に入っているので、この方法は 使えそうです。 関数のパラメータのアラインを調べてみます。
そこまでして可変引数を使いたがる理由がわからん
引数がスタックに入ってることを理解してれば 可変だろうが簡単なのに
あたりまえのことを何偉そうに書き込むんだろうね。 スタックに入ってるものを、どうやってそのまま全部別の関数に渡すかって話なのに。
599 :
デフォルトの名無しさん :04/12/04 10:17:28
v([s,f])printfみたいのは用意されてないのか...
プログラムで疲れたろ /||ミ / ::::|| __ /:::::::::::|||W.C| |:::::::::::::::|| ̄ ̄|| |:::::::::::::::|| ガチャッ |:::::::::::::::|| || |:::::::::::::::||∧_∧ |:::::::::::::::||´・ω・`) お茶が入りましたよ・・・。 |:::::::::::::::|| o o旦~ |:::::::::::::::||―u' || \:::::::::::|| \ ::::|| \||彡
便所の水で煎れたお茶・・・
飲尿
604 :
デフォルトの名無しさん :04/12/04 14:15:18
> 引数がスタックに入ってることを理解してれば 引数がスタック上に置かれる保証などどこにもない。 むしろそうでない環境のほうがいまどき多い。
605 :
デフォルトの名無しさん :04/12/04 14:22:19
VCはスタックにおくだろ。 ここはVC厨ばかりだから、それでいいんだよ!
606 :
デフォルトの名無しさん :04/12/04 14:27:13
607 :
デフォルトの名無しさん :04/12/04 14:28:12
> X-Windowsがうごきません そんなものはこの世に存在しません。
まあ、可変引数に限れば ほぼ間違いなく、スタックにあると考えていいけどな。
決勝進出 日下部 陽一 沖縄
>>607 X-Window
>>602 は2ch初心者
玄人なら黄金茶と分かるはず
611 :
デフォルトの名無しさん :04/12/04 15:44:05
ニラ茶だろ
612 :
デフォルトの名無しさん :04/12/04 16:29:44
あんなところにお湯があることがおかしい!!
613 :
デフォルトの名無しさん :04/12/04 18:17:53
> X-Window そんなものも存在しません。
X-Widow
615 :
デフォルトの名無しさん :04/12/04 18:21:07
> まあ、可変引数に限れば > ほぼ間違いなく、スタックにあると考えていいけどな。 いいえ。たとえばVAXはあきらかにちがう。
616 :
デフォルトの名無しさん :04/12/04 18:21:14
617 :
デフォルトの名無しさん :04/12/04 18:24:40
> X-Widow うちのとなりのアパートに1人存在します。
>617 まだ若いのか?
>>618 甘いな。
X(ex)-widowとは元未亡人、再婚した人妻のことだぞ
おかまいなしかよ。
つーか未亡人より人妻の方が萌えるだろ?ふつう
ふつうって何だよ
ここは不倫なスレですね
625 :
デフォルトの名無しさん :04/12/04 19:31:14
「widow pointer検出」ってのが、 いま使ってる開発ツールにあるんだけど、 まちがって読んで「windows pointerって何?」とかいってるぼけがいました。
628 :
デフォルトの名無しさん :04/12/04 19:36:24
どこもさしていないポインターを動的にみつけるんです。
ポインタの参照先がdeleteされてるとかそんなのか。
630 :
デフォルトの名無しさん :04/12/04 19:39:34
Cなのでdeleteはありません。
freeか。
632 :
デフォルトの名無しさん :04/12/04 20:03:53
> NULLを勝手に#defineし直してるソースもよく見るから、そういうソースが軒並み通らなくなっちゃう そんなソースを通すことのほうが問題だ。
633 :
デフォルトの名無しさん :04/12/04 20:04:57
NULLは stdio.hに入っているべきでしょうか? stdlib.hに入っているべきでしょうか?
634 :
デフォルトの名無しさん :04/12/04 20:05:52
argv って、どうして const char **argv; じゃなくて char **argv; なんでしょうか?
635 :
デフォルトの名無しさん :04/12/04 20:15:36
>>538 行末のバックスラッシュの後ろに空白があったりしないか?
636 :
デフォルトの名無しさん :04/12/04 20:16:29
>>550 > 可変引数
そんなものはない。「個数」が可変なだけ。
637 :
デフォルトの名無しさん :04/12/04 20:18:08
> ASCIIコードデータをホスト用にEBCDICへ変換する汎用ルーチンを作成せよ。 > なおバイトオーダーはスモールエンディアンとする。 こいつぼけ そんなものはない > スモールエンディアン big-endianの反対語もしらんのか? そんなものはない > ASCIIコード ASCIIのCは何の略かもしらんのか? ぼけ
>>635 を見て思ったんだけど、改行コードがCR+LFだったらマクロ継続が失敗したりしないの?
(\CR)<-これは欠落 LF<-これは残って、通常の改行として処理、とか
639 :
デフォルトの名無しさん :04/12/04 20:19:19
>>635 それは先輩にも言われたのですが、
空白は入っていませんでした。
>>638 OSがWindowsならスルー
UNIXならエラーになる
641 :
デフォルトの名無しさん :04/12/04 20:24:50
OSはCygwinとかいうやつです
>>634 const char **argv;
ってどういう意味かわかる?
#define iskanji(c) \ ((0x81 <= (c & 0xff) && (c & 0xff) <= 0x9f) || \ (0xe0 <= (c & 0xff) && (c & 0xff) <= 0xfc))
unsigned char c; char c; どっちで宣言してるかによる。
645 :
デフォルトの名無しさん :04/12/04 20:37:36
*argv++ で順番に参照するため
>>645 だからなんで仕様がそうなってるのか聞いてるんだろ。
OSはCygwinとかいうやつです
相変わらず低脳age厨が住み着いてるな
650 :
デフォルトの名無しさん :04/12/04 20:58:31
>>646 こいつ ぼけ
char * const * a;
a++; //ok
(*a)++; //error
(**a)++; //ok
651 :
デフォルトの名無しさん :04/12/04 21:00:26
argvは変更可能だと仕様で決められているよ。
652 :
デフォルトの名無しさん :04/12/04 21:01:23
argv[0][0]='a';などとやってもよいということ。
>>652 ほほう。そしたら
argv[100][100]='a'; とやっても大丈夫なのか。
654 :
デフォルトの名無しさん :04/12/04 21:05:37
低脳sage厨登場
>>653 メモリ確保がなされているのであれば問題ないのでは?
>>656 メモリ確保って何?馬鹿で低脳な僕にもわかるように説明してちょ。
>>657 ごめんなさい。私も低脳なのでわかりません。
660 :
デフォルトの名無しさん :04/12/04 21:23:23
C++なんですが、なにかを0.5乗とか0.25乗の計算をする場合はどうすればいいのでしょうか?
661 :
デフォルトの名無しさん :04/12/04 21:23:50
pow
662 :
デフォルトの名無しさん :04/12/04 21:30:03
ありがとうございます
なんか途中(
>>623 あたり)から文字が太くなってるんですけど、
みなさんはどうですか?
スレ再取得汁
ブラウザの不具合でしょ。
667 :
デフォルトの名無しさん :04/12/04 23:57:05
で、10種類は?まだ一種類もあがってないぞ?
しつこい男は嫌いです。
ねちっこいセックスをする男の人は好きです。
670 :
デフォルトの名無しさん :04/12/05 01:16:47
671 :
デフォルトの名無しさん :04/12/05 01:22:18
>>670 10種類は? 早く言え。 お前は口を割るしかない。 これが何だかわかるか? 丁字油だ。 ドイツ軍が安価な鎮痛剤として使っていたこともある。 お前に使うかどうかはまだわからん。 とりあえず、10種類をまず言うんだ。 わかったな?
672 :
デフォルトの名無しさん :04/12/05 01:23:29
673 :
デフォルトの名無しさん :04/12/05 01:33:28
よーするに、しったかコイテ10種類と大風呂敷を広げただけか
674 :
デフォルトの名無しさん :04/12/05 01:36:41
何の話か分からんので遡ってみた
>>81 のことかな?
676 :
デフォルトの名無しさん :04/12/05 01:42:43
boolがどうたらこうたらのコンパイラが10種類挙げろってことらしい。
678 :
デフォルトの名無しさん :04/12/05 06:28:16
> *argv++ で順番に参照するため こいつぼけ だからchar ** const argv; じゃなくって const char **argv;だっていってるだろ
679 :
デフォルトの名無しさん :04/12/05 06:29:51
> OSがWindowsならスルー > UNIXならエラーになる こいつもぼけ。 たとえば改行コードが\r\nの組みでそのコードを書いてgccに通してみろよ。 LinuxでもFreeBSDでもノーエラーだぞ ぼけ
680 :
デフォルトの名無しさん :04/12/05 06:36:32
652,653はargvがchar型の2次元配列だと思い込んでいるぼけ。
681 :
デフォルトの名無しさん :04/12/05 06:38:10
↑しかたないだろ。VC厨が多いんだから。(おれはちがうが)
682 :
デフォルトの名無しさん :04/12/05 06:38:32
こいつもぼけだな。VCだってそんなコードは通らん。
683 :
デフォルトの名無しさん :04/12/05 06:46:02
あのね、Cってポインター変数に[]をつけてその参照先の内容にアクセスできるんだよ。
684 :
デフォルトの名無しさん :04/12/05 07:04:28
char型の2次元配列とcharのダブルポインタは違うだろ
char[][]とchar*[]が違うことは誰でも知ってるし 中身が違っていても同じ形式でアクセスできることも、殆どの人は知っている。
687 :
デフォルトの名無しさん :04/12/05 09:33:07
#include<stdio.h> int main(void){ int a[2]; int *p; int cnt; a[0]=1; a[1]=2; a[2]=3; *p=a; for(cnt=0; cnt<3; cnt++ ) { printf("Input data %d\n",*p[cnt]); } return 0; 上のプログラムをコンパイルしたらエラーが出ました。ポインターの部分というのは分かるのですが すいませんご指導お願いします。 ex.c:12: warning: assignment makes integer from pointer without a cast ex.c:16: invalid type argument of `unary *'
for (cnt = 0; cnt < 3; cnt++) { printf("Input data %d\n", p[cnt]); } 但しforのカウンタにはcntより i の方が一般的。
689 :
デフォルトの名無しさん :04/12/05 09:53:19
>>687 p[cnt] は *(p + cnt) と等価
君はそこへ更に * を追加している
690 :
デフォルトの名無しさん :04/12/05 10:39:06
>>687 int a[2]; で使えるのはa[0]とa[1]だけだぞ。
Cの仕様上エラーにはならないが。
エラーが出たらキャストすればおっけー。
692 :
デフォルトの名無しさん :04/12/05 13:01:09
693 :
デフォルトの名無しさん :04/12/05 15:01:29
> エラーが出たらキャストすればおっけー。 するなよ ぼけ
>>691 禿同
所詮やってることはメモリのバイトデータの読み書きだからな
695 :
デフォルトの名無しさん :04/12/05 15:04:24
ヘッダーの中とかに、関数のプロトタイプを書くときに、 「extern」ってつけると、何かいいことあるんですか?
おまじない
ない。 C++から呼ぶときはextern "C"必須だけど。
DLL作るときは書いておかないといけないとか どこかに書いてあったような希ガス
699 :
デフォルトの名無しさん :04/12/05 15:15:19
> DLL作るときは書いておかないといけないとか まったくのでま。こういうVC厨はおおぼけ
さっきからボケボケうるせー
701 :
デフォルトの名無しさん :04/12/05 15:29:34
うんうん。
702 :
デフォルトの名無しさん :04/12/05 15:35:09
> さっきからボケボケうるせー やーい ぼけ
704 :
デフォルトの名無しさん :04/12/05 15:44:25
あっちからコピペ char *m9['A'+1]; m9['A'] = "ソレダ";
705 :
デフォルトの名無しさん :04/12/05 16:18:19
VC厨だと2バイトめにバックスラッシュが入る心配をするかも ;-)
706 :
デフォルトの名無しさん :04/12/05 16:21:21
>>703 > 標準ではない新しい64ビット長の データ型long long
やーい > まちがい
>>706 あれはC99ができるよりも前に書かれているんだから当然だ。
long long って C 標準なんですか? __int64 は?
709 :
デフォルトの名無しさん :04/12/05 16:45:35
> long long って C 標準なんですか? あたりまえだろぼけ
710 :
デフォルトの名無しさん :04/12/05 16:46:11
> できるよりも前に書かれているんだから当然だ。 いや、当然ではない。 何度も改訂されているんだから、ここ5年も改訂がないのが問題なだけであり、 ちっとも「当然」ではない。
じゃ、鯖に入って書き換えてきてくださいね(^^
712 :
デフォルトの名無しさん :04/12/05 16:52:39
うんうん。
>>711 馬鹿だなぁ。
鯖の中の人に電話で頼めばいいだろ(^^
714 :
デフォルトの名無しさん :04/12/05 16:57:34
715 :
デフォルトの名無しさん :04/12/05 17:09:52
C++の「algorithm」にある、文字列の並び替え関数next_permutationって、 どういうアルゴリズムなんですか?普通のC言語のプログラムで書こうとしたらどうなるのでしょうか? javaで同じことをしたいんですけど、ヘッダファイルを見てもチンプンカンプン。
>>714 すいません、信用が無い人にはには無理でしたね(^_^;
にはには
>>715 C++かJavaの領域では?
Cは全く関係ないと思うんだけど。
719 :
デフォルトの名無しさん :04/12/05 17:39:06
Cでもできるって
720 :
デフォルトの名無しさん :04/12/05 17:39:46
関数内のローカルな変数に auto ってつけると、なにかいいことありますか?
ソースコードの文字数を稼げます。一杯ソースを書いた気になれます。
726 :
デフォルトの名無しさん :04/12/05 18:03:10
>>720 B の名残り
単項 + もそうだけど
まず使わないけど
なけりゃないで言語として美しくない
727 :
デフォルトの名無しさん :04/12/05 18:32:38
逆だろ? 単項の「+」がCに追加されたのはかなりあとだ (C89のころ)
728 :
デフォルトの名無しさん :04/12/05 18:40:07
>>727 そう言ったつもりはなかった
「もそう」は後続の形容にかけたつもりだったが
確かにワンパス的にパースすると
そのように解釈されやすい構文になっていた
729 :
デフォルトの名無しさん :04/12/05 18:44:54
われもこう
どっち道情報量0の駄レスだけどな
731 :
デフォルトの名無しさん :04/12/05 18:45:39
> そのように解釈されやすい構文になっていた いいわけになってない
732 :
デフォルトの名無しさん :04/12/05 18:46:09
2パスで読んでも3パスにしても意味かわらんぞ。ぼけ
顔パスでオーケーだ。
734 :
デフォルトの名無しさん :04/12/05 18:51:05
上げ足取りして楽しんでるところ悪いが、10種類のコンパイラはまだかね?
下げ足取りしてやる
738 :
デフォルトの名無しさん :04/12/05 19:19:09
一人芝居を見ている気分だ
741 :
デフォルトの名無しさん :04/12/05 20:17:46
742 :
デフォルトの名無しさん :04/12/05 22:51:34
10種類まだ〜?無いならないと言え。粘着やめてやるから。 もっとも普通のコンパイラですら10種類もあげられていないがな
>>742 10種類もありませんでした。嘘つきました。ごめんなさい。
stdbool.h 使えるのはほんのわずかのコンパイラでした。 もうVC厨とか言うのやめます。ごめんなさい。
C言語には、数値を16進数文字に変換する関数はないのでしょうか?
sprintf
748 :
デフォルトの名無しさん :04/12/06 02:57:03
743、744は742が自分で言ってるのが明白
749 :
デフォルトの名無しさん :04/12/06 02:57:46
750 :
デフォルトの名無しさん :04/12/06 02:59:20
>>745 一桁ならこれで
char *hex = "0123456789abcdef";
printf("%c", hex[a]);
751 :
デフォルトの名無しさん :04/12/06 03:06:54
752 :
デフォルトの名無しさん :04/12/06 03:17:02
実際10種類どころかもっとあるのでは? なんで言わないんだろう? しったかぶりしてるというよりは、ひっぱりすぎなだけな気がする。
753 :
デフォルトの名無しさん :04/12/06 03:19:37
%ょりは%02xにしたいなあ > 0〜255
754 :
デフォルトの名無しさん :04/12/06 03:21:15
粘着VC厨をひっかけてひっぱってるんだろうけど、 安物の釣り針だと、竿や糸より前に壊れちゃうよ。 もっとも重量級じゃなさそうだから平気なのかもsれんが。
あんたは特徴があり過ぎてつまんない
756 :
デフォルトの名無しさん :04/12/06 03:23:33
intじゃなくてunsigned intを使う利点を教えてください。
757 :
デフォルトの名無しさん :04/12/06 03:24:27
> 文字列の並び替え関数next_permutationって、 そんなものはない > 並び替え 「並べ換え」ならある。
758 :
デフォルトの名無しさん :04/12/06 03:27:37
voidの弟子だろ?
意外と少ないんじゃない? Turboとか古いのも入れてやっと10種類くらいかなぁ。
760 :
デフォルトの名無しさん :04/12/06 03:28:39
で、その人の名前ときどき出てくるんですが、 どんな人なんですか?
761 :
デフォルトの名無しさん :04/12/06 03:29:03
Turbo-CはC99なんかちっとも対応してないぞ。
まだ、だれもxxでstdboolは標準で使えるとは言ってないんだが名
764 :
デフォルトの名無しさん :04/12/06 03:30:13
VCと同じで99年より前に寿命が尽きたやつだから当然 > Turbo-CはC99なんかちっとも対応してない
C99に対応してないとCコンパイラじゃないとでも?
767 :
デフォルトの名無しさん :04/12/06 03:32:02
対応していないコンパイラーだったら10どころか50でも80でもあるだろうが ぼけ ちゃんとC99に対応している(少なくともstdbool.hのある)もののうち(たぶん20はないはず)、 10個名前言えるかどうか、っていう話だろ?
>>760 だからオマエは特徴有り過ぎなんだって。背中まで透け透け
>>767 また知ったかぶりして大風呂敷広げたな。80種類あげてみろや?
771 :
デフォルトの名無しさん :04/12/06 03:40:19
古いコンパイラーあわせて5つも言えないやつらって、 ...おまえら厨房すぎー
772 :
デフォルトの名無しさん :04/12/06 03:40:46
> そんな話しらねーよ。 知らないおまえがぼけなだけ
773 :
デフォルトの名無しさん :04/12/06 03:41:23
774 :
デフォルトの名無しさん :04/12/06 03:44:09
mainの前についてる人です。
775 :
デフォルトの名無しさん :04/12/06 03:55:22
寿命が尽きたプログラマー
777 :
デフォルトの名無しさん :04/12/06 04:02:49
いいなー
778 :
デフォルトの名無しさん :04/12/06 04:03:09
本業は何なんだろ
779 :
デフォルトの名無しさん :04/12/06 04:16:53
すみません。 プリプロセッサーの#ifのところで、sizeofって使えるのがふつうなんですか? 手元にあるいくつかのコンパイラーで、使えるやつと使えないやつがあって, どっちに合わせてかいておいたほうが今後のためかを知りたいのです。
>>779 使えないやつがあるのならつかわなきゃいいじゃん?
0x1234という数値があったときに、メモリー上では 0x34 0x12 という場合と、 0x12 0x34 という場合があるってききました。 それなら一通りの書き方で、メモリーにコピーしたメモリーの中身をintすることは できないのでしょうか。
コンピュータのレジスタやメモリの仕組みもだけど まずは日本語の勉強から。
>>782 リトルエンディアン、ビッグエンディアンでぐぐれ。
同じエンディアン方式ならそのまま扱える可能性が高い、
しかし異なるエンディアンなら変換する必要がある。
>>782 ついでに言うとintのビット長も環境依存。
変換ってどうやればいいんですか。 どんなとこでも大丈夫にできますか?
787 :
デフォルトの名無しさん :04/12/06 08:36:33
2バイトのintの順が、たとえばi = 1234; が 04 d2 になるのがビッグエンディアン d2 04 になるのがリトルエンディアンだというのはわかります。 でも、a = 12345678; の場合、 00 bc 61 4e がビッグエンディアン 4e 61 bc 00 がリトルエンディアンなのでしょうけど、 うちのマシンだと bc 00 4e 61 になるんです。 これは何エンディアンなのでしょうか?
>>787 リトルエンディアンとビックエンディアンを調べろ。
783のかた、「にコピー」が抜けてました。これでいいですか。 よろしければ内容にもおへんじください。
790 :
デフォルトの名無しさん :04/12/06 08:56:38
> リトルエンディアンとビックエンディアンを調べろ。 調べたけど乗ってないから聞いてるんです。 つまりあなたはわからないのですね?
なんだかえらそうですよ。分からないで聞いてるのでもっと謙虚にしましょうよ
793 :
デフォルトの名無しさん :04/12/06 09:20:53
791と792は実は788 (ってみりゃわかるか)
>>787 ちゃんと1バイトずつ見ているか? 2バイトずつ見てないよな?
もしかして、odのディフォルト出力そのまま見てるって落ち?
#或いは同様のツールで。
釣りだろ。787はスルー推奨
796 :
デフォルトの名無しさん :04/12/06 09:57:50
エンディアンごとき自学できない香具師がコンパイラをいじくろうとはな
>>746-750 ありがとうございました。画面に表示するのではなく文字列変数に代入したいので、
sprintfで出来ました。
>>796 ム板の約1/50はCスレで出来ています
htonl, ntohl
802 :
デフォルトの名無しさん :04/12/06 13:56:25
変数A(unsigned short型)に格納された値(400)を 変数B(BYTE型)に格納したいのですがどうすればいいのでしょうか?
BYTEは0..255しか格納できないぞ。 はみ出た分をどうしたいんだ。
まずは1byteが10bit以上な環境を探してきてください
「C言語なら俺俺に聞け! Part 87」に書き込んでしまった。。。 うかつだった・・・ マルチになってしまいますが、気を取り直して・・・ コーディングスタイルの話になると思いますが、 識別名にマルチバイトを使う事について 皆さんだったらどう思われますか? 例えば、 ある関数に定数を与えて処理したい場合、 move_command_set( COMMAND_右に動く, MOVE_STEP_1 ) move_command_set( COMMAND_左に動く, MOVE_STEP_1 ) とか・・・ さすがに、識別名すべてをマルチバイトにするつもりは無いんだけど、 日本人として生まれたからには、こういう書き方を「アリ」に していく流れって作れないかなーって思っているのですが・・・ 昔だったら、こういうことかなり抵抗があったんだけど、 もう今となってはいいかなぁーって感じになってます。
自分で流行らないし自分が関わるソースでもやって欲しくないけど 公開しないなら好きにしとけ。それからマナー・スタイルはスレ違い。
「C言語なら俺俺に聞け! Part 87」についたレスは無視ですか? そうですか
>>805 好きじゃないがローマ字を使われるよりはまだましだな。
電脳化したいんですがC言語で書けるでしょうか?
>>805 c99 では、そういう書き方アリだけどな。
英語を読み書きできない高卒PGには、
便利な気がするな
まぁ、あれだ、そういう機能を付けた外人は、
要求されてマルチバイトを使えるように
したんだろうから、使う分には問題ないん
じゃないか
文章を分かち書きしない日本語の利点が現れると言えなくもないな。 move on to leftをmoveOnToLeftと書くと違和感があるが、『左に動く』と書いても違和感は無いわけで。
まだMoveToLeftとかMoveLeftとかの方が...
>>805 ロシア人がその方針で書いたとして、
渡されたソースの識別子がロシア語だったらつらいな。
コメントや文字列はある程度仕方ないけど
識別子くらいは英語で書く。
DB3だったかそのクローンだったかの操作言語の著者で、 DBのフィールド名や変数名に漢字を使うことを否定してた人がいたなぁ。 そのソフトのマニュアルに書かれたサンプルは全て漢字名だったのだが。 その人の否定した理由として、誤変換に気を取られるのはプログラミングの過程においては 非能率的だというものだった気がする。 私はローマ字のほうがましだと思うが、ローマ字はローマ字で、綴り方が複数あるからそれも問題。
801のかた、htonlやntohlはネットワーク用に並べ替えるだけで 順番はきにしちゃいけないっていわれたんですけどつかっていいんですか。 あとintやlongでも使えますか。ひきすうがなんか違う、、、
805 です。
>>806 スレ違いすみません・・・
これ最後に消えます。
>>810 >>812 英語知らないやつだと、結構無理やりなんですよ・・・
>>808 >>815 チームでプログラム組んでいると、
関数の機能に該当する単語を辞書で無理やり調べました的な識別名を
使ってくるやつもいれば、ローマ字でヘボン式だかなんだか
わからない識別名を使うやつもいて、ムキーって感じなんですよ。
だから、この際マルチバイト使おう!なんて考えたのですが・・・
「C言語なら俺俺に聞け! Part 87」についたレスは無視ですか? そうですか
>>813 大文字を混ぜると何故か格調高く書きたくなるんだよ
>>811 わぁ、ごめんなさい。
煽りだと思った。
「ひまわり」知らなかった。
すげー、これすげーよ。
ぴゅー太みたい
でも、仕事には使えないやぁー
生越なんかは仕事でRuby使ってるらしいし、ひまわりで仕事してもいいんじゃないかなぁ
>>817 マルチバイトを使ったところで、そういういい加減な香具師は相変わらずいい加減なキーワードをつけるよ。
例えば、関数名で「マウスボタン欧化処理」とかね。
>>822 そいつはもう消えてる。しかもマルチで、その上スレ違い。
> スレ違いすみません・・・
> これ最後に消えます。
スレ違いでもないような気がするが、 一応C言語のことだしな。
825 :
デフォルトの名無しさん :04/12/06 20:37:02
warning: implicit declaration of function `E1' E1ってのは関数名なんですが、↑はどういったイミの警告なのでしょうか?
さぁ、この変な日本語から意味を推定してみよう。 答えは来週だよ!みんな見てね!
implicitのcit部分のみ訳 ♀を殴ると cit 頭が落ちたよ・・・
830 :
デフォルトの名無しさん :04/12/06 22:19:44
助けてください。 OSはUNIXでc言語でお願いします。期日は早めでお願いします。 1.c言語を用いてスロットマシーンをつくってください。 2.構造体利用を用いたプログラムをつくって下さい。 以上の二つです。
833 :
デフォルトの名無しさん :04/12/06 22:55:59
>>830 #include <stdio.h>
int main(void)
{
printf("ジャンジャンバリバリ〜♪");
printf("チョリリリーン♪");
printf("わぁ。大当たりだ!");
return 0;
}
834 :
デフォルトの名無しさん :04/12/07 09:54:36
> 英語の文章に出現する単語の中で、文字数が最も多い単語を出力して終了するプログラムを作成せよ。 > 入力データには英文字、スペースのみが含まれているものとし、単語とはスペースで区英語の文章に出現する単語の中で、文字数が最も多い単語を出力して終了するプログラムを作成せよ。 課題出すやつのセンスが悪いな。通常は、 cat file1 file2 | tr -cs A-Za-z '\012' | sort | uniq -c | awk '{print length($2), $0}' | sort -nr とやるだけで出てくるんだから、そんなものをCでやらせるんんじゃね-よ! ぼけ
835 :
デフォルトの名無しさん :04/12/07 09:55:44
↑ もういっちょ「| head -1」も追加して欲しかったな
836 :
デフォルトの名無しさん :04/12/07 09:59:11
いや、おれなら cat file1 file2 | tr -cs A-Za-z '\012' | sort | uniq -c | awk '{print length($2), $0}' | sort -nr | head -1 | awk '{print $3}' だな。
837 :
デフォルトの名無しさん :04/12/07 09:59:50
VC厨には無縁
途中の sort | uniq はいらない気がする... あと、最大長のものは 1つとは限らないから head -1 は危険。
839 :
デフォルトの名無しさん :04/12/07 10:03:30
> 途中の sort | uniq はいらない気がする... 同じものをまとめたかったんだろ?
840 :
デフォルトの名無しさん :04/12/07 10:54:58
> 2. 構造体利用を用いたプログラムをつくって下さい。 main() { typedef struct { char kozo[256]; } KOZO; KOZO i; strlcpy(i.kozo, "こーぞー"),; printf("これはなんですか?\n"); printf("%sたい。\n", i.kozo); }
841 :
デフォルトの名無しさん :04/12/07 10:55:50
「じゃあこれは?」 「文字列ですたい。」
842 :
デフォルトの名無しさん :04/12/07 10:57:51
strlcpy
843 :
デフォルトの名無しさん :04/12/07 10:57:55
> c99 では、そういう書き方アリだけどな。 ねーよ いいかげんなウソつくな。
844 :
デフォルトの名無しさん :04/12/07 10:58:49
> strlcpy ふつうstrlcpyだね。(840のは引数たりんぞ!) strncpy使うやつはVC厨だ。
845 :
デフォルトの名無しさん :04/12/07 11:00:46
846 :
デフォルトの名無しさん :04/12/07 11:01:40
やーいstrlcpyもしらなかった842 !
847 :
デフォルトの名無しさん :04/12/07 11:02:06
いまどきstrlcpyは常識やね。
848 :
デフォルトの名無しさん :04/12/07 11:02:51
849 :
デフォルトの名無しさん :04/12/07 11:12:01
なんだいま検索したのかよ。
850 :
デフォルトの名無しさん :04/12/07 11:15:29
strlcpyの必要性が想像できないなんて、 VC厨が多いってのはほんとなんだな。ここ
>>834 おれならエクセルにはりつけて文字数出すけどな。
852 :
デフォルトの名無しさん :04/12/07 12:33:16
853 :
デフォルトの名無しさん :04/12/07 12:42:26
C99で、型のサイズを指定した変数を定義することができるようになったと 思うんですが、あれってどのヘッダファイルに書かれていましたっけ? C#でいう Int32 a; (aは符号付き32ビット) UInt32 b; (bは符号なし32ビット) みたいなことができたはず、ですが・・・
#include <stdio.h> main() { int i=0,tou; printf("購入する馬の頭数を入れてください"); scanf("%d",&tou); printf("%d頭連れてきました。\n"); /*←この部分*/ for(i=0; i<tou; i++){ printf("∈・^ミ\n",i); } } これで、「%d頭連れてきました」ってのが4247748頭になるんだけど、 なんでかなぁ(´・ω・`)
>>853 stdint.h
int32_tとかuint32_tとか
>>854 ネタ?
>4247748頭になるんだけど、なんでかなぁ
たまたま。
時と場合によって結果が変わるコードだな。
>851 ダサッ
>>856 ネタじゃないんだけど・・
scanfのときにどんな数字入れても、4247748頭ってなるんだけど
>>858 - printf("%d頭連れてきました。\n");
+ printf("%d頭連れてきました。\n", tou);
>>859 ありがとうございました。きちんと思った通りに動きました。
そして、レベルの低い質問ですいませんでした。( ;∀;)
1:#include <stdio.h> 2: 3:int fact(int n) 4:{ 5:int n1; 6:int fc; 7: 8:printf(">n %p %d\n", &n, n); 9:printf(">n1 %p %d\n", &n1, n1); 10:printf(">fc %p %d\n", &fc, fc); 11:printf("\n"); 12: 13:if(n == 1) 14:return 1; 15:n1 = fact(n - 1); 16:fc = n * n1; 17: 18:printf("<n %p %d\n", &n, n); 19:printf("<n1 %p %d\n", &n1, n1); 20:printf("<fc %p %d\n", &fc, fc); 21:printf("\n"); 22: 23:return fc; 24:} 25:main() 26:{ 27:printf("fact(4) = %d\n", fact(4)); 28:} 本にのってるプログラムなんですが、return1以降の動きがわかないんですよ、 return1の後は16行目以降が繰り返されているんですが、なんでなんでしょ? 本はそこらへんの解説は載ってないんで、誰か解説してください_| ̄|○
862 :
デフォルトの名無しさん :04/12/07 14:03:57
fopen()で開くファイル名を実行時に編集しているので グローバル変数(char*)に格納しています。 でもこのままじゃfopenに渡せませんよね? fopen(const char*,...)だから。 こういう場合どうやって書けばいいのでしょうか? アドバイスよろしくお願いします。
>>861 ・行番号は不要→コピペするときに邪魔。
・インデントはつけよう→主に括弧の対応付けなどが把握し難い。
・質問の意図が不明。
>>862 char* str;
fopen( (const char*)str, …);
865 :
デフォルトの名無しさん :04/12/07 14:10:55
866 :
デフォルトの名無しさん :04/12/07 14:14:25
867 :
862 :04/12/07 14:26:31
>>866 ネタじゃなくてまじめです…。
試行錯誤していろいろコード書いてコンパイルを繰り返しています。
#include <stdio.h>
#include <stdlib.h>
char *szFileName[MAX_PATH+1];
void putText(char *data)
{
FILE *fp;
fp = fopen(szFileName, "a"); ←エラー
if ( !fp ){
・・・・
}
main()でグローバル変数szFileNameへファイル名をセットしています。
main()からputTextをコールします。
短縮しましたがこんなところです・・・どなたか教えてください。
よろしくお願いします。
char *szFileName[MAX_PATH+1];
869 :
デフォルトの名無しさん :04/12/07 14:32:25
>>867 - char *szFileName[MAX_PATH+1];
+ char szFileName[MAX_PATH+1];
>>866 こいつぼけ
>>863 指摘サンキューです
return 1が動いたらmainのprintfに1を返してプログラムは終了すると思ってるんですが、
実際にはプログラムは終わらずにfcを返して終了するんですよ
そこんとこがわかんないんで教えて欲しいなーと思ってるんです
わかりにくくてすいません
>>871 15行目でfactを呼び出してるから。
具体的に処理の順番を書くと
1:mainでfuct(4)呼出
2:fact(4)の15行目でfact(3)呼出
3:fact(3)の15行目でfact(2)呼出
4:fact(2)の15行目でfact(1)呼出
5:fact(1)の14行目でreturn 1;になりfact(2)の16行目以降の処理へ(fcは2*1で2)
6:戻値2でfact(2)が終わり、fact(3)の16行目以降の処理へ(fcは2*3で6)
7:戻値6でfact(3)が終わり、fact(4)の16行目以降の処理へ(fcは6*4で24)
8:戻値24でfact(4)が終わるのでprintfで"fact(4) = 24"が出力される
分かりづらいなら15行目で関数呼び出しをやめて展開してみると吉
VCならF10でも押してろ
>>872 丁寧に手順まで書いてもらってありがとうございます
ピンとこないんで聞いておきたいんですが、
「展開」ってのは動かせってことですよね?
876 :
862 :04/12/07 17:22:09
>>868-870 ありがとうございました・・。
無事できました。もっと本を読んで勉強してきます・・。
878 :
デフォルトの名無しさん :04/12/08 01:05:51
あたまつれてきました!
879 :
デフォルトの名無しさん :04/12/08 09:25:42
> return 1が動いたら returnが「動く」わけではない。
880 :
デフォルトの名無しさん :04/12/08 09:31:33
こいつぼけ。kf7ち76き98;p−0p:おいf6ういdc6う7で6qw346えゆjyhgきjぉい;。vjkmtdcひゃ4s7うm6おl89
質問ですunsorted list(ソートされないリスト)で ┏━┳━┳━┳━┳━┳━┓ ┃10┃53┃24┃35┃ ┃ ┃ ┗━┻━┻━┻━┻━┻━┛ と配列が渡されたとき、「75」を挿入すると ┏━┳━┳━┳━┳━┳━┓ ┃10┃53┃24┃35┃75┃ ┃ ┗━┻━┻━┻━┻━┻━┛ となるので正しいですか?? また、 ┏━┳━┳━┳━┳━┳━┓ ┃10┃53┃24┃35┃ ┃ ┃ ┗━┻━┻━┻━┻━┻━┛ から53を削除した場合、リストはどの様に並びますか? よろしくおねがいしますm(_ _"m)
どんなソートだか分からないし 知障だとこんな問題も解けないのか? しかもスレ違いだし 頭悪いにも程がある
>>881 リストってリスト構造の事か?75を挿入する時だって先頭に挿入すれば
10の前に75が入るぞ。
そこら辺を詳しく説明しろ。問題があやふやだと解答も出せん。
要するに答えられないわけですね。 俺に聞けなんてスレだからマシかと思いましたが、 カキコした自分が馬鹿でした。 頼りにならない人しかいないなんて知らなかった。
>>881 マジレスするとスレ違い。宿題は宿題スレで。
>>881 ┏━┳━┳━┳━┳━┳━┓
┃10┃ ┃24┃35┃ ┃ ┃
┗━┻━┻━┻━┻━┻━┛
すげー
>>885 > 自分が馬鹿でした
ここだけ読んで激しく同意した
892 :
デフォルトの名無しさん :04/12/08 23:03:56
881は沢山返事してもらって幸せな奴だな
┏━┳━┳━┳━┳━┳━┓
┃10┃53┃24┃35┃ ┃ ┃
┗━┻━┻━┻━┻━┻━┛
と配列が渡されたとき、「75」を挿入すると
┏━┳━┳━┳━┳━┳━┓
┃75┃10┃53┃24┃35┃ ┃
┗━┻━┻━┻━┻━┻━┛
となる
あとは
>>888
895 :
デフォルトの名無しさん :04/12/09 09:55:06
int型の数値を16進にしてバイナリデータとして BYTE型変数に格納したいです。 BYTE buf[512]; buf[0] = 0xA3; buf[1] = 0xF2; ↑と書けばBYTE変数にバイナリデータを格納できると分かりました。 次にint型の数値を16進に変換してBYTE型変数に入れてみようと思い 詳しい方のホームページを見てやってみましたがうまくいきません。 どこが悪いか教えていただけませんか? 最終的にはint sizeに格納された450を バイナリデータ1C2に変換してBYTE buf[0]に格納したいです。 int size; size = 450; BYTE buf[512]; // size(450)を16進にしてszsize(1C2)に格納 char szsize[5]; wsprintf(szsize," %d ",size); // int → char const char *szbuf1; char *szbuf2 ; szBufSize1 = szsize; long lsize = strtol(szbuf1, &szbuf2, 0); // 10進→16進 itoa(lsize, szsize, 0x10); // ←szsizeにはちゃんと"1CA"と入ります // BYTE型変数に格納する buf[0] = strtol(szsize, NULL, 16); // ←bufに16進数が入りません・・・
/* buf[0]-buf[(sizeof(int)-1]にsizeの値を分解して格納(エンディアンに注意) */ memcpy((char *) & size, buf, sizeof(int)); /* bufにsizeの値を16進文字列として格納 */ sprintf(buf, "%0*x", sizeof(int) * 2, size);
>>896 memcpy(buf, (char *) & size, sizeof(int)-1);
sprintf(buf, "%0*x", sizeof(int) * 2, size);
早速ありがとうございます。
教えて頂いたようにやってみたら16進文字列をスムーズに取得できました。
しかし、BYTE型の変数にバイナリデータを格納できません・・。
charの16進文字列をバイナリデータに変換したいです・・・。
せっかく教えて頂いたのに説明が下手ですみません。
●結果は、こんな感じでバイナリデータを格納したいです。
BYTE buf[512];
buf[0] = 0x01;
buf[1] = 0xCA;
×文字列データが格納されると失敗です。
BYTE buf[512];
buf[0] = '0';
buf[1] = '1';
buf[2] = 'C';
buf[3] = 'A';
>>897 キミがしたいのは、単に↓のようなことかい?
buf[0] = size >> 8;
buf[1] = size & 0xff;
>>898 はい、教えてもらったように演算したら簡単にできました。
ありがとうございました。
それと追加質問で申し訳ないのですが
long型をBYTE配列にコピーする方法ってないのでしょうか?
_ltoaで文字列へ変換することはできました。
>>901 はい、試してうまくいきました。
コードは
>>898 のままでいけました。
>>900 unionを調べて使ってみたところ、
BYTE配列にあっさりlongデータが入りました。
以下のような感じです。
union u_tag{
long ss;
BYTE buf[4];
}uval;
union u_tag *ptr;
ptr = &uval;
uval.ss = 500;
// この時点でssに格納した500が
// 同じ共用体のBYTE配列bufにもコピーされている。
903 :
デフォルトの名無しさん :04/12/09 16:55:39
質問です。 キーボードの方向キーの入力を調べたいのですが 専用の関数等あるのでしょうか? Win32の GetKeyState() みたいな関数はありますか? また、現在 system("cls")で画面を更新するようにしているのですが 更新を連続的にしてしまうと、画面がちらついてしまいます。 これの回避策などもあればご教授ください。
904 :
デフォルトの名無しさん :04/12/09 17:02:07
additional storage 使わないでスワップするときって、int型ならXOR使ってっていうのは、 分かったんだけど、doubleとか char の場合ってどうするか分かりますか?
>>903 上・・・ありません。
下・・・ありません。
>>903 よく分からないけど
void clearScreen()
{
const HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO csbi;
GetConsoleScreenBufferInfo(out, &csbi);
const COORD coset = { 0 };
DWORD written;
FillConsoleOutputCharacter(out, ' ', csbi.dwSize.X * csbi.dwSize.Y, coset, &written);
const WORD attribute = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE;
SetConsoleTextAttribute(out, attribute);
FillConsoleOutputAttribute(out, attribute, csbi.dwSize.X * csbi.dwSize.Y, coset, &written);
SetConsoleCursorPosition(out, coset);
}
こういうのもあるぞ
908 :
903 :04/12/09 17:27:29
>>905 そうですか。。
やはり、OSが提供するAPIを使うしかなさそうですね。
>>906 コードを書いて頂き、ありがとうございます。
しかし、そのコードでクリアしても、ちらついてしまうようです。。
やはり、完全にちらつきを取るには
ビデオメモリを制御するしかないでしょうね。。
とりあえず、これは諦めます(笑)
キーボードで数値を入力したとき特定範囲以外の数字が入力されたとき エラーメッセージを出すようにしたいのですがどうすれば良いでしょう
>>908 #define MIN 0
#define MAX 10
int n;
scanf("%d", &n);
if(n < MIN || n > MAX) fprintf(stderr, "error!\n");
ありがとう
EBCDIC←→ASCII コード変換サンプル 掲載サイト 目にも止まらぬ速さで教えて下さい
EBCDIC ASCII 変換 ソース の検索結果 約 1,210 件中 1 - 10 件目 (0.81 秒) 0.81秒では不満か?
うちは0.37秒だった。
Akamaiパワーだな
>>902 >907 も書いてるが
long n;
BYTE buf[4]; // longは4バイトであるとする
buf[0]=*((BYTE *)&n);
buf[1]=*((BYTE *)&n +1);
buf[2]=*((BYTE *)&n +2);
buf[3]=*((BYTE *)&n +3);
とかでよい? エンディアンってわかる?
main関数の戻り値って必要なんですか?
はい。
いいえ。
はい。
ぬる
>>924 すみませんが、真面目に教えてください
理由は何ですか?
int main←必要 void main←不要
>>927 void mainなんて物の事なんて聞いてないんですが…
あなたは>922なんですか?別の人なら邪魔をしないでいただきたいです
⊂_ヽ、
.\\ /⌒\
\ ( 冫、)ウンチになぁれ
> ` ⌒ヽ
/ へ \
/ / \\
レ ノ ヽ_つ
/ / ・*.・:
/ /| :。 *.・
( ( 、 ★。:’*
| |、 \ 。・.*・; ・
| / \ ⌒l ;* ・。;*★ 人・
| | ) / ・ ★・ (_ );; * 。・
ノ ) し' ・ * (__) * ・。・
(_/ 。*.;; ・ (
>>928 ) ★.* ’★
931 :
デフォルトの名無しさん :04/12/10 08:51:36
intのサイズって環境依存なんですよね? 実際にサイズが決まるのは、実行時なんですか? それともコンパイル時なんですか?
コンパイル時。 それと環境というより処理系による。
>>907 >>919 はい。上位/下位のことですよね?
Intel系使っていますので私の環境ではリトルエンディアンです。
long n;
n=416;
BYTE buf[4];
buf[0]=*((BYTE *)&n);
buf[1]=*((BYTE *)&n +1);
buf[2]=*((BYTE *)&n +2);
buf[3]=*((BYTE *)&n +3);
ビッグエンディアンではbuf[2][3]に160と1がはいって
リトルエンディアンではbuf[0][1]に160と1がはいるってことですよね。
エンディアンは知っていましたがBYTE配列へのlongのキャスト方法
分かっていませんでした。教えてくださってありがとうございました。
どうやってやるのかWebを見たのですが読んでも理解できなかったので
とても助かりました。本当に感謝です。
934 :
931 :04/12/10 09:11:31
>>932 あ〜そうですか、よかった。
intが32bit環境で作成したバイナリを、64bit環境で動作させても
32bitで処理されるんですよね?
>>933 union {
long l;
unsigned char c[sizeof(long)];
} u;
u.l = 416;
long l = 416;
unsigned char c[sizeof(l)];
memcpy(c, (char *) & l, sizeof(l));
>>934 そういうこと。だからintが16ビットのLSI-Cなら仮令64ビット環境でもintでは32767までしかカウントできない。
宿題スレよりレベル低いな
1つのプログラムを実行したとき、 そのメモリの使用容量はどう計算ししますか?
>>937 それは、OSのAPIで取得するしかないのでは?
何の環境か知らんけど、WinNT系のOSの場合だと、それ関係の隠しAPIがあった筈。
公開されてるよ
struct test{ string aaa; }; test *pstr; pstr->aaa = "ABC"; ポインタについて教えてください。 文字列"ABC"を代入するにはどう書けばいいですか?
>>940 激しくCじゃない気がするが
test *pstr = new test;
pstr->aaa = "ABC";
940です。 すみません。ポインタはCじゃなかったんですね。 でもありがとうございました。
>>942 ポインタがCじゃないんじゃなくて、
stringがC++のstd::stringじゃないかって話かと
940です。何度も教えてもらってすみません。
マンデルブロー集合の計算と結果を画像で出力するプログラムを作ってみたいんですが 参考になるサイトとかありましたら教えてください。 考え方としては 計算した回数を2次元配列に入れて 0 0 0 20 0 0 0 20 50 20 0 20 50 50 50 0 0 20 50 20 0 0 0 20 0 こんな感じにして回数に応じて色をつけるようにすればいいんですよね?
ところで10種類君、最近みかけないね。 また暴れてほしいよ。
そろそろ来るよ
で、10種類は?もう1週間は経ったな?
>>945 こんなの見つけた。
ttp://yokohama.cool.ne.jp/yew/bbs/58.html ----cut here--------cut here--------cut here--------cut here----
For all you C programmers out there, try this:
main(){char *b=" .:-;!/>)|&IH%*#";float i,j,k,r,x,y=-16;while
(puts(""),y++<15)for(x=0;x++<84;putchar(b[(int)k&15]))for(i=k
=r=0;j=r*r-i*i-2+x/25,i=2*r*i+y/10,j*j+i*i<11&&k++<111;r=j);}
----cut here--------cut here--------cut here--------cut here----
951 :
デフォルトの名無しさん :04/12/11 02:02:31
なにそれ。
952 :
デフォルトの名無しさん :04/12/11 11:38:38
かてぃ〜
954 :
デフォルトの名無しさん :04/12/11 12:22:09
955 :
デフォルトの名無しさん :04/12/11 12:27:44
この Part 96 の 1書いたやつ! だれだかしらんが、97のときは、ちゃんとエンティティーの160番つかえよ! 俺はスレッドたてられんからやらんけど。
じゃ、次スレはPart96 Rev.2ということで
905 :デフォルトの名無しさん :04/12/10 23:47:28
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
hドライブの○○フォルダのint型の複数データが格納されたバイナリファイルを使って
|給 与|一万円|五千円|千 円|五百円|百 円|五十円|十 円|五 円|一 円|
--+------+------+------+------+------+------+------+------+------+------|
1|423251| 42| | 3| | 2| 1| | | 1|
2|498225| 49| 1| 3| | 2| | 2| 1| |
3|316482| 31| 1| 1| 1| 4| 1| 3| | 2|
--+------+------+------+------+------+------+------+------+------+------|
合 計 | 122| 2| 7| 1| 8| 2| 5| 1| 3|
という表を作らなければならないみたいです。
[3] 環境
[3.1] OS:XP
[3.2] コンパイラ(バージョン):.NET2002
[3.3] 言語:C++
[4] 期限:2004年12月11日12:30まで
[5] その他の制限:無し
どなたかよろしくお願いします!!
940 :デフォルトの名無しさん :04/12/11 10:17:53
>>939 そのファイルにはどのようにデータが入っているんだ?
943 :939 :04/12/11 10:30:50
>>942 ファイル学校行かないとないんです…。形だけでもどうにかなりませんか?
944 :デフォルトの名無しさん :04/12/11 10:36:09
>>943 いつまでもフザケた事言ってんじゃねえよ
945 :デフォルトの名無しさん :04/12/11 11:44:38
ファイル学校ってどんな学校や
…とか一瞬考えたのは秘密
946 :906 :04/12/11 12:21:30
あわれ905楽しようとしたばっかりに
寝坊した漏れに笑いのネタを提供してくれた。
いや、7時には起きたんだけどね。
>>905 のレスを見ても仕様がよく分からんから
二度寝したんだよね。
別に学校の宿題くらい納期過ぎたって問題ないっしょ
自分でガン( ゚д゚)ガレ
960 :
デフォルトの名無しさん :04/12/11 14:48:05
> じゃ、次スレはPart96 Rev.2 いや、どうかんがえても97だ。
961 :
デフォルトの名無しさん :04/12/11 14:58:42
> いや、どうかんがえても97だ。 ということにしたいのですね?
933 :初心者A :04/12/10 23:02:04
#include<stdio.h>
int main(void){
int a;
a = 1;
printf("number%d\n , 0");
} return 0;
参考書見ずに書いてみました。もしかしたらどこか違うカモ…
まず1歩目です!
940 :デフォルトの名無しさん :04/12/11 13:06:10
>>933 int a;
a = 1;
は int a = 1;
とまとめられる。
のはいいんだがaは何に使ってるんだ?
941 :デフォルトの名無しさん :04/12/11 13:26:35
>printf("number%d\n , 0");
そもそも number%d\n , 0 って表示させてどうするw
942 :デフォルトの名無しさん :04/12/11 13:31:33
>%d
...何が表示されるんだろう
943 :デフォルトの名無しさん :04/12/11 14:31:43
>>941 「returnの場所がおかしい」と、一番の餌で釣れない933て一体。。。
963 :
デフォルトの名無しさん :04/12/11 15:41:14
96のつぎだから97だろ?
87と95が2本あったから次は99じゃないかな
つぎはMEとかXPとかにしよう
966 :
デフォルトの名無しさん :04/12/11 16:02:21
Windowsプラグラムでもいいですが、シングルクリックで起動する .exe を作るにはどうすればいいのでしょう?
ダブルクリックで起動する環境で一つだけシングルクリックで起動するexeは 無理なのでしょうか
969 :
デフォルトの名無しさん :04/12/11 16:22:15
>>968 クリックを検出したら起動すればいいのでは?
その核となる部分はいかに書いたらいいか、ヒントだけでも良いんで 教えて欲しいです・・・
シェルエクステンション
ありがとうございました。 とりあえず、現段階の僕では無理だと悟りました。
EXPLORER.EXEに与えるマウス・メッセージを、ラッパーを被せて 横取りする考え方なんかな。。。サブクラス化か。
ダブルクリックせずに起動するウィルスでも書きたいんだろ
976 :
デフォルトの名無しさん :04/12/11 22:31:46
教えてください。 入力した文字列を格納した配列のポインタを戻したいんですけど、警告がでました。 警告1:プロトタイプ宣言のない関数'input'の呼び出し。(関数 main) 警告2:コードは効果をもたない。(関数 main) 警告3:問題のあるポインタの変換。(関数 input) ソース↓ #include <stdio.h> #define MAX 256 char *input(); void main() { *input(); } char *input() { char s[MAX]; printf("COMMAND:"); scanf("%s", s); return s; }
#include <stdio.h> #define MAX 256 char *input(void); void main(void) { char *p=input(); } char *input(void) { static char s[MAX]; printf("COMMAND:"); scanf("%s", s); return s; }
973 :デフォルトの名無しさん :04/12/11 22:30:58
>>972 つ、釣られないぞ…
974 :デフォルトの名無しさん :04/12/11 22:31:16
>>972 マルチポストするな消えろ
975 :デフォルトの名無しさん :04/12/11 22:31:56
>>972 char *input()はですねー、char*型の返り値を返す、inputという関数の定義なんですよー にゃんにゃん
977 :973 :04/12/11 22:33:21
>>972 お前が言いたいだろうことを最大限考慮してやった↓。
これがしたいんだろ?
#include <stdio.h>
#define MAX 256
char *input();
void main()
{
char* p;
p = input();
printf("%s\n", p);
}
char *input()
{
static char s[MAX];
printf("COMMAND:");
scanf("%s", s);
return s;
}
949 :デフォルトの名無しさん :04/12/11 21:42:51 初心者です。 参考書によって void main() と書いてあるものと int main() と書いてあるものの2種類ありますよね。 intにしてreturnしても、どこにも使われてないし プログラムも問題なく動くので 全部voidでいいと思うんですが。 voidにしてはいけない理由でもあるのでしょうか。
で、10種類マダー、チンチン
983 :
デフォルトの名無しさん :04/12/11 22:58:24
>>980 voidで書いてはいけないとはどこにも書いていない
と言い張る馬鹿はいますけど、int型にしておいて困る理由は何もないですね。
>>983 LinuxやWindowsなどの上でのアプケーションではそうですねー^^ にゃんにゃん
せめてこのスレまでで終わりにしてね。 いくら週末っていっても 埋め立てように投下したネタに対して 反応がよすぎるから。
>>980 自分しか使わないならvoidでもかまわんけど
他人も使う場合はちゃんと作った方がいいと思う。
使い道がないなんて勝手に思い込まないように
987 :
デフォルトの名無しさん :04/12/11 23:05:46
>>983 言い張ったら馬鹿とは、どこに書いてあったんだ?
>>983 で、規格で決まってるというのどうなったんだよ?
半可通あばれまくりープ
ちょっとまてオレはあばれてないぞ
991 :
デフォルトの名無しさん :04/12/11 23:08:55
voidで書くなとはどこにも書いていない=voidで書いてもいいじゃない この理屈がまかりとおるならshortでもdoubleでもstruct hogeでも 好きな型でreturnすればいいじゃない
992 :
デフォルトの名無しさん :04/12/11 23:09:43
>>991 だから、そうだよ
規格票を持っている者の発言には到底見えない
その通り、処理系が認めていればなんでもいい。 ただし、コードの可搬性はなくなる。
994 :
デフォルトの名無しさん :04/12/11 23:11:27
>>993 可搬性をどの程度持たせるべきかとは、全く別な議論だな
995 :
デフォルトの名無しさん :04/12/11 23:12:22
> ただし、コードの可搬性はなくなる。 平気な感じでいう当たり、馬鹿だな。
>>994 その通り。個人だったら個人で、団体なら団体で勝手に決めればいい。
ISO/IEC 9899:1999
5.1.2.2.1 Program startup
1 The function called at program startup is named main. The implementation declares no
prototype for this function. It shall be defined with a return type of int and with no
parameters:
int main(void) { /* ... */ }
or with two parameters (referred to here as argc and argv, though any names may be
used, as they are local to the function in which they are declared):
int main(int argc, char *argv[]) { /* ... */ }
or equivalent;9) or in some other implementation-defined manner.
>>980 他
JIS X3010:2003(いわゆるC99)ではこういう風に書いてある。(ISO/ANSIも同じだろう)
5.1.2.2 ホスト環境
5.1.2.2.1 プログラム開始処理
プログラム開始時に呼ばれる関数はmainとする。
処理系はこの関数に対してプロトタイプを宣言しない。
この関数は次の4種類の方法のいずれかで定義しなければならない。
1. int main(void);
2. int main(int argc, char *argv[]);
3. 上記2つの方法のいずれかと等価なもの。
4. 処理系定義
ちなみに5.1.2.1でフリースタンディング環境の場合プログラム開始時に呼ばれる関数は(戻り値の型・引数含め)処理系定義と書いてある。
998 :
デフォルトの名無しさん :04/12/11 23:13:03
>intにしてreturnしても、どこにも使われてないし プログラム作る前にパソコンの使い方ぐらい勉強しろよ
999
また1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。