1 :
デフォルトの名無しさん :
2011/09/29(木) 07:31:00.93
入門レベルのお話をたのむー 難しくってついて行けないオッサンです
退門編ってどこにありますか?
前スレ、
>>995 は
「void *」は型ではないが、「void* 」は型だと言っているのか?
>>5 そう勘違いしてしまうことで
jもポインタだと誤解してしまう場合があるから
推奨してない。って事でしょう。
失礼します。switch文をif文に書き換える問題なのですが、default文がうまくいきません。 (入力値が正しくてもprintfが実行されてしまします) #include <stdio.h> int main (void){ int grade; int aCount = 0, bCount = 0, cCount = 0, dCount = 0, fCount = 0; printf("試験結果の成績(A,B,C,D,F)を入力してください。\n"); printf("入力終了は1\n"); while ((grade = getchar()) != '1'){ if (grade == 'a' || grade == 'A') ++aCount; if (grade == 'b' || grade == 'B') ++bCount; if (grade == 'c' || grade == 'C') ++cCount; if (grade == 'd' || grade == 'D') ++dCount; if (grade == 'f' || grade == 'F') ++fCount; if(!((grade == 'a' || grade == 'A') || (grade == 'b' || grade == 'B') || (grade == 'c' || grade == 'C') || (grade == 'd' || grade == 'D') || (grade == 'f' || grade == 'F'))) printf("入力値が異常です、再入力\n"); } printf("\n成績結果\n"); printf("A: %d\n",aCount); printf("B: %d\n",bCount); printf("C: %d\n",cCount); printf("D: %d\n",dCount); printf("F: %d\n",fCount); return (0);} よろしくお願いします
else
if 条件{ 処理 }else if 条件{ 処理 }else{ 処理 }
>>8 さん
>>9 さん
さっそく、ありがとうございます、試してみました。
9さんの形にしても、必ず最後のif文が実行されてしまいます。
たとえば、Aと入力すれば実行されないつもりで書いているのですが・・・。
getcherじゃなくて getchにすればすこしわかりやすくなるんじゃね?
>>10 さん
おっしゃる通りでした。
if(!((grade == 'a' || grade == 'A') || (grade == 'b' || grade == 'B') || (grade == 'c' || grade == 'C') || (grade == 'd' || grade == 'D') || (grade == 'f' || grade == 'F') || (grade == ' ' || grade == '\n')))
printf("入力値が異常です、再入力\n");
と、空白と改行も条件に追加した所思うようにいきました。
みなさん、ありがとうございました。
>>12 さん
getch関数、初めて知りました。
試してみたところ、確かにこれなら改行を条件に追加しなくても思うように動きました。
勉強になります。
ありがとうございます。
小文字でも大文字でも意味が同じなら、判定する前に入力を小文字にする関数でも挟めばいいのに……
switch 使えと言いたくなるな。
こういうこと。 switch(0)default:{ if (grade == 'a' || grade == 'A'){++aCount;break;} if (grade == 'b' || grade == 'B'){++bCount;break;} /*default*/ }
Cにジャンプ命令ってないの?
なにかここのところで大きなまちがいを犯しているような気がしてならない。 > int aCount = 0, bCount = 0, cCount = 0, dCount = 0, fCount = 0; 配列にした方が……
>>19 goto とか
if for while switch break continue とか
要注意なので setjmp, longjmp
23 :
デフォルトの名無しさん :2011/09/29(木) 19:52:34.67
char s1[16][128]; char s2[128][16]; s1は128文字まで入る文字配列が16個で s2は16文字まで入る文字配列が128個という イメージでおk?
C言語検定ってどう思う?
糞資格 履歴書に書くのも恥ずかしいレベル
簡単なの?
>>24 ヌル文字を入れないか
ヌル文字も文字に含めるならそう
新卒で実務経験や実績を書けない人用じゃないの?
高専の進学には役に立つかもしれん
前スレの
>>988 さん
>入力を閉じている(CtrlD)のに再度入力できるのが不自然だと思う。
>標準入力をリダイレクトしてファイルから読んでいたら、そんな振る舞いはしないと思う。
例えば、lessでパイプからの入力を受け、その後端末からlessをコントロール、
まあちょっと違う話なんですけどねw
前スレの
>>989 さん
>現象から推測してreadが0を返したときに、 (以下略)
気になっているのはUbuntuとMac OS X、どちらの挙動が正しいのか、
あるいは未定義(?)なのか、なんですが....
>>31 以前もちょっとした議論になりましたが、MS-C や Borland C では、getchar()等がいったん EOF を返したら入力できない仕様でした。
まあ DOS 流では Ctrl-Z + enter でやっと EOF が入力できる変な端末ではありますが。
それにしても、Linux や FreeBSD が異端で、Mac OS X が正統‥‥ん?おっかしーなー。MAC OS X って確か BSD 界隈育ちだったはず。
http://hibari.2ch.net/test/read.cgi/tech/1314783907/954 宿題スレで議論になったのをお忘れですか?それとも理解できませんでしたか?
>>32 いいからPCのCPU-Zのスクリーンショットをうpしてみろや
>>19 「ジャンプ命令」文法上は無い。
ジャンプ文なら以下の4つ。
goto 識別子;
break;
continue;
return 式opt;
>>21 for, whileは繰り返し文、
if, switchは選択文
>>22 setjmp, longjmpは標準関数で、ジャンプ文では無い。
>>32 過去ログを参照してみたけど議論になった場所が分かりませんねえ
俺は●を持ってるから具体的なURLで示してみ
>>24 まぁいいと思うけど
s1は charの配列(要素数128)の配列(要素数16)
s1は charの配列(要素数16)の配列(要素数128)
>>28 イミフ。charの配列とNUL文字は直接は関係ないぞ。
charの配列にはC文字列を格納することが多いとは思うけどね。
38 :
34 :2011/09/30(金) 00:48:16.90
>>35 >あなたの中ではそうなんだね
違います。「C言語の文法では」
>>34 の通りです。
>>35 みたいなアホも受け入れるこのスレの懐の深さが好き
40 :
34 :2011/09/30(金) 01:18:41.32
よく誤解する人がいるので強調しておくけど、議論の対象はC言語。
そしてC言語には「ジャンプ命令」という言葉は無い。
※念のため、K&R2ndで確認している。C99とかは知らない。
ジャンプ文なら
>>34 で挙げた4つ
setjmp, longjmpは標準関数であり、「ジャンプ命令」ではない。
もちろんジャンプ文、longjmpはコンパイラによって、
「ターゲットCPUのジャンプ命令」に変換されるはず。
したがってアセンブラの範囲になれば、「ジャンプ命令」は存在する。
C言語の「命令」ってどんなのがあるの?
>>41 お前がCore2DuoやPhenomUX6を買ったと嘘を付くから証拠を見せろと前から言ってるだろ
まあそれも今となってはすっかり型遅れになったがな
スクショうpできないならPenV850MHzノート一台という事で
なんていうかpedantic
中の人バトンタッチしたんじゃないの?
自分に都合が悪くなるとすぐコテを外すヘタレ すぐバレる嘘
>>40 嘘書くな。
setjmpなんていう標準関数はない。
setjmpはマクロだ。
48 :
デフォルトの名無しさん :2011/09/30(金) 02:04:09.38
マクロとかw ここはすごいのばっか出てくるなw
C言語に限らず他の全部ので「命令」なんて無いんじゃない? やっぱ「命令」ったら機械語だけっしょ。 それ以上のはやっぱりどこまで行っても文どまりじゃん
50 :
デフォルトの名無しさん :2011/09/30(金) 02:05:36.98
日本語でおkwww
>>28 「文字列」ではなくて「文字配列」だからいいんじゃないか
>>43 おまえQZ情報すごいな
どんだけ大ファンなんだよw
そんな必死に自演せんでも
QZが嘘を見破られてファビョるの巻
>>48 setjmpはマクロ、jmp_bufは型、longjmpは関数、と規格に書かれてる
>>49 directiveは命令とも訳せるので
preprocessor directiveは命令と言えるね
誰でもわかる糞みたいな議論だと活発っすね
QZにSSE2を使ったプログラムの問題を出してみな 解けないから Pentium3じゃあさすがにSSE2は使えないわなあ
>>61 の文章からにじみ出てるオーラが半端無いので腹が痛いです
チン ☆ チン ☆
チン マチクタビレタ〜 チン ♪
♪
♪ ☆チン .☆ ジャーン! マチクタビレタ〜!
☆ チン 〃 ∧_∧ ヽ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ヽ ___\(・∀・ #) /\_/ <
>>32 の具体的なURLマダ〜
チン \_/⊂ つ ‖ \__________
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄/| ‖ マチクタビレタ〜!
|  ̄  ̄ ̄ ̄ ̄ ̄ ̄:| :| /|\
| |/
標準入出力のそんな細かい振る舞いは Cの範疇の話じゃないっしょ
>>61 QZが在日でも、中年でも、ニートでも、ヒキコモリでも、PenIIIでも、てめえには関係ねえだろ!!!!1111!!!111!!!!!!
と、中年ニートの在日チョンQZが暴れております
なんだかニコ厨くさいぞ
初歩的な質問ですみません
getchar()で入力された文字数を表示させるコードを書きたいのですが、
whileループ以降のprintfがうまく動いてくれません
どのようにすれば上記ができるようになるでしょうか?
コードは以下です。よろしくお願いします
http://codepad.org/gqGT7tLo
'\n'
n++を++nにする EOFの入力はCtrl+z
>>70 レスありがとうございます
Ctrl+zでEOFの入力、というのはどういうことでしょうか?EOFというのは特殊文字ということなのですか?
Mac+vimでコードを書いているのですが、Ctrl+zを入力するとsuspendしてしまいます…
間違えた n++は関係ないか
>whileループ以降のprintfがうまく動いてくれません というのはどううまく動かないのか whileからぬけられないということか? 想定と違う数になるのか? 何も表示せずに終了するとか?
>>71 Winだとそう
macはCtrl+d(多分
getcharは1行ごとに動く やりたいことは掟破りのgetch使うのでは
うそ教えるなよ
コード自体は幾つかの注意点を除けば問題ないだろう。 なので、Unxi系の端末では入力を閉じるにはCtrl+Dだということさえ判ればいいだろう。 で、コードはこう書いた方がいい。 -- #include <stdio.h> int main() { // 中略 return 0; } --
78 :
68 :2011/10/01(土) 20:53:37.20
コマンドラインから文字列を入力した後、Ctrl+dを二回入力したところ、カウントしてくれるようになりました Ctrl+dがなぜ2回入力されなければ動いてくれなかったのか不明ですが… ありがとうございました!
79 :
68 :2011/10/01(土) 20:55:34.61
>>77 連投すみません
return 0;
の意味は何か教えていただけますか?
これを書かないと何か不具合があるのでしょうか
ない 慣習
>>79 一応それが正規の書法だし。
Macでおそらくコマンドインタプリタ(シェル)から起動していると思うのだけど、
そのコマンドインタプリタに対してプログラムが成城に終了したことを通知するために、0を返す。
実際、codepadに貼ったコードを見てみると、Outputに「ExitFailure」と書かれているのは判るかい?
>>80 あんたにとって意味はないかもしれんが、世の中には真に無意味なことなどそうそう無いものだよ。
codepadで入力が必要なプログラムってどう処理されるん?
84 :
68 :2011/10/01(土) 21:08:14.91
>>81 なるほど、returnすることで正常に終了した、という扱いになるのですね
ありがとうございます!
return 0; 書かなくてもExitFailureって出るんだけど
>>85 あんた馬鹿? 0を返さないから出るんだって言ってるでしょ。
C++なら、省略した場合に0を返すことになっているけど。
>>83 何も入力せずに入力を閉じた扱いになる。
空のファイルからのリダイレクトと似た振る舞いだね。
ExitFailure=正常終了だと思ってるんでしょ ちゃんと和訳してみるといいよ
初歩的な質問ですみません scanf("%100s %100s",&a,&b); として複数の入力をスペースで開け受け付けて次の処理に移るようにしてるんですが、 一つの入力だけでも次へ進めることってできますでしょうか
一行入力させて、 あとからスペースで区切ればいい スペースで区切れなかったら「次の処理」に行けばいい
>>86 C99でも省略したときは0返すことになってるよ
exitとreturnの違いってあるんですか?
>>93 当然違うが、int main() 内に置く return と exit() については一緒。
なんで素材サイトって基本的に字が小さくて見づらいの?
>>94 素材をつくっる様な人は、えてして大きなモニターを使っている。
大きなモニターに表示した場合、小さい字でも気にならない。
(意外な真実かもしれないぞ)
>>95 サイト自体が無駄に凝ってて
メインのコンテンツがどこなのか分からないのとかあるな
Ctr+マウスでグリグリぐらい覚えよう
tableをtbl countをcnt flagをflg こういう命名方法ってなんていうんだっけ?
ハンガリー記法ではない
>>100 素人じゃないんだから、グリグリはないだろ。
省略しすぎるのもどうかと思うね 3文字に省略するのがカッコいいとか思ってるんだろうけど zgrとか書かれてても所見じゃ分からんよ
>>104 3文字じゃなくて母音抜きじゃね
一緒だけど
失礼します。pic16F84Aをしようして6個のLEDをランダムで点灯するプログラムはこれであってますか? #include<pic.h> #include<stdio.h> #include<stdlib.h> #include<time.h> void main(){ int a; a=rand(); TRISA=0x00; TRISB=0xFF; PORTA=0x00; PORTB=0xFF; for(a=0; < a=0; a<6; a++) while(){ a=a%6+1; PORTA=a; PORTB=a; } } こちらはc言語をはじめたばかりなので自信がないです。よろしくお願いします。
初めてで組込(pic)をやるとは、根性有るな。スレ違なきもするが
電子工学が専門なんだろう
for(a=0; < a=0; a<6; a++) この辺りが頭からクソが漏れそうだ
是非!
mallocした配列の要素数を知るにはどうしたらいいのですか?
#include <stdio.h> int main(){ int sum, n, num; sum=0; num=-1; while(num <= sum){ printf("正の整数の上限値を入力してください:"); scanf("%d", &num); for(n=1; sum<=num; n++){ sum=sum+n; printf("n = %d sum = %d\n", n, sum); } } return 0; } まで出来たけど、sumがはじめてnum以上になるまで繰り返すプログラムの表示を num=21として入力した場合 n = 1 sum = 1 n = 2 sum = 3 n = 3 sum = 6 n = 4 sum = 10 n = 5 sum = 15 n = 6 sum = 21 n = 7 sum = 28 正の整数の上限値を入力してください: になってしまいます。
>>113 の続き
n = 7 sum = 28
正の整数の上限値を入力してください: の部分をなくすのにどのコードを直せばいいのか
ヒントをください。
ヒント for(n=1; sum<=num; n++){
>>94 せっかくなのでw
「一緒」って具体的にはどういうことですか?
規格書き写しただけだろ。触んな
2次元配列を動的に作成するコードを関数化しようと思って下記のソースを作ってみたのですが、 初期化が正常に完了しなくて困っています。 どの部分がおかしいのでしょうか? int X=2;Y=2; float **a; setup(a,X,Y); void setup(float **in,int x,int y) { in = (float**)malloc(sizeof(float*) * x); for(i = 0; i < x; i++){ in[i] = (float*)malloc(sizeof(float) * y); } }
>>119 そりゃあそうだろ
ポインタのポインタだけじゃ関数setup()内での代入は関数を抜けたら無効になる
int X=2;Y=2;
float **a;
setup(&a,X,Y);
void setup(float ***in,int x,int y)
{
*in = (float**)malloc(sizeof(float*) * x);
for(i = 0; i < x; i++){
*in[i] = (float*)malloc(sizeof(float) * y);
}
}
こう書かなきゃな
setupの前後でaのアドレスをprintfしてみれ aのコピーをsetupに渡してるだけでaの値は何も書き換わってないぞ、と
>>119 あとよくあるのがFILE *構造体を他の関数でopenして戻ったらおかしくなるやつ
これも
FILE *p;
setup(&p);
void setup(FILE **p)
{
*p = fopen("filename", "r");
}
と書かなければ正常に動かない
それと同じ
C++なら参照を使えばこの問題は起きない
>>119 無理にポインタ渡ししなくても戻り値使えばいいんじゃね?
int X=2;Y=2;
float **a;
a=setup(X,Y);
float** setup(int x,int y)
{
float** in;
in = (float**)malloc(sizeof(float*) * x);
for(i = 0; i < x; i++){
in[i] = (float*)malloc(sizeof(float) * y);
}
return in;
}
>>123 代入するのが一つならそれでもいいが複数戻したい時は困るだろ
今回はいいけど
>>124 別にポインタ渡しを使うなとは言ってないよw
そのうち要素数もセットで管理したくなるから構造体にまとめるのもアリ struct array2d { int numX, numY; float** body; }; void setup(struct array2d* dst, int x, int y) { dst->numX = x; dst->numY = y; dst->body = (float**)malloc(sizeof(float*) * x); for(i = 0; i < x; i++) dst->body[i] = (float*)malloc(sizeof(float) * y); }
typedef struct {size_t d1,d2;float[]}arry2d_float; arry2d_float*const setup(size_t b, size_t c){return (arry2d_float*)malloc(sizeof(arry2d_flpat)+sizeof(float)*(a+b);} float const set(arry2d_float*const a, size_t b,size_t c,float d){float *r=(float*)((char*)a+sizeof(arry2d_flpat)+sizeof(float)*(a+b));return *r=d;}
128 :
x127 :2011/10/04(火) 18:19:08.17
a+bじゃだめだよなww
>>122 その用途で参照を使うのはちょっとなぁ。
130 :
119 :2011/10/04(火) 19:10:05.09
ポインタ渡しだとエラーで、戻り値だと成功しました。 ネットで調べたら、main関数に戻ったときに保持されなくなると、書いてあったので戻り値方式でいきます。 色々アドバイスありがとうございました。
>>130 悪い
バグってた
void setup(float ***in, int x, int y);
void unsetup(float **in, int x);
int main(void)
{
int X = 2, Y = 2;
float **a;
setup(&a, X, Y);
unsetup(a, X);
return 0;
}
void setup(float ***in, int x, int y)
{
int i;
*in = (float**)malloc(sizeof(float*) * x);
for (i = 0; i < x; i++)
(*in)[i] = (float*)malloc(sizeof(float) * y); // ここ
}
void unsetup(float **in, int x)
{
int i;
for (i = 0; i < x; i++)
free(in[i]);
free(in);
}
ブロードキャストアドレスを得るには ioctl() が常套手段ですか? 何かもっといいかげんで簡単な方法は無いですか? 動作環境はUnix汎用(BSD,Linux他)です。
>>119 >>120 蛇足だけど、そのaは二次元配列にはなっていない。
要するにsizeof(float)*X*Yの連続した領域が確保されるわけじゃない。
2次元配列に見えればいい(a[i][j]でアクセスできればいい)のだろうから、
構わないのだろうけどね。
>>132 ラッピングされたライブラリかなんかが欲しいってことなんだろうけど、これ以上どこを楽にしようか
1次元配列を2次元配列のポインタにキャストして設定とかできるんだっけ
>>133 あれ、二次元配列の大きさってsizeof(float)*X*Yになるって保証されてたっけ?
必要なサイズの1次元配列確保するんじゃ駄目なの?
>>136 サイズじゃなくて連続領域かどうかの話かと。
>>137 それでもいいし、各次元の先頭アドレスを詰めていくのでもいいよね
>>133 それは分かってるよ
もし二次元配列にしたいなら (*)[Y]みたいに書かないとな
(実際はYは定数でなくてはいけないのでエラーになる)
>>138 パディングが挟まったりとかは無いんだっけ?
連続してる保証があったのかなぁと
141 :
138 :2011/10/04(火) 22:39:08.35
>>139 それはまた別の話だけど、正しいことだね。
二次元配列を動的に生成したい→
>>139 (無理)
添え字演算子を使用した場合のみにおいて、二次元配列と同等のアクセスが可能なポインタを作成したい→
>>119 ポインタ演算を含め、二次元配列と同等のアクセスが可能なポインタを作成したい→
>>133 デリケートな話だけれど。
142 :
138 :2011/10/04(火) 22:46:21.19
>>140 もしそれが保証されていなければ、ポインタに成り下がったあとに正しくアクセスする術がない言語になってしまうよ
スレ違いになるけどboostのmulti_arrayとかな これは出来が悪かったstd::valarrayの代替用だが、結局パフォーマンスを 出そうとするとtemplateしかない
>>142 多次元配列でもポインタで走査できるのって保証されてたんだ?
それは知らなかった
メモリにおいての配列は連続するメモリのことをさすのであって ポインタで繋いだ場合は別のデータ構造だと思うの
146 :
138 :2011/10/04(火) 22:58:14.22
>>143 スレ違いにならない範囲でいくなら、C99で char[m][n];
>>144 もしそこに不安を抱いていたなら、p + i*N + j; のような演算をしてこなかったということ?
>>146 多次元配列でその計算が必要になることがないし
規格を読んでも日本語が難解でよくわからないなw
今度勉強しよう
>>146 C99のはalloca()の糖衣構文らしいな
便利でいいんだけど下位の次元が可変という事はいちいちメモリにアクセスしたり
レジスタを食うわけで1次元配列で代用したくなる
なんかややこい話になってる。配列が出てくるといつもこうだ!! というのはさておき、1次元配列で代用ってどういうことだろ。同じことになりそうな…? C99だとallocaを複数回つかって配列のポインタ配列が生み出されているということ?(つまり連続領域じゃない)
[1]□→□□□□□□□□□ [2]□→□□□□□□□□□ [3]□→□□□□□□□□□ [4]□→□□□□□□□□□ [5]□→□□□□□□□□□ [6]□→□□□□□□□□□ [7]□→□□□□□□□□□ [8]□→□□□□□□□□□ [9]□→□□□□□□□□□
int * data = (int*)malloc(sizeof(int) * w * h); Int ** a2d = (int **)malloc(sizeof(int*)* h); for(i =0; i != h; ++I) a2d[i] = data + w; a2d[x][y] = 100; free(a2d); free(data);
* iを忘れてるね これだからiPhoneは困る
符号なし整数のビット幅はCHAR_BITS * sizeof(uint_type) これってどこの処理系に行っても通用するの?
http://codepad.org/bsGYVXWW ここまでは出来たんだが、
学生別平均 学生1:0.0 学生2:0.0 学生3:0.0 学生4:0.0
科目別平均 科目1:0.0 科目2:0.0 科目3:0.0
とこんなふうに出力表示を出すにはどうすればいいのでしょうか?
まず、iとjがなんだかごっちゃになってしまっているのを直す。 numが学生ごとの合計だと思うけど、それを元に学生別平均を出そうとしていることはわかる。 なので、科目ごとの合計を入れる配列を用意すればいけるのではないか。 そのあとで、あちらこちらの計算間違いを直せばいいと思う。
星が2つ付いたポインタがどうしても理解できない。 char **argv char *argv[] 上はポインタのポインタで下はポインタの配列。 全く違うものだよね。 ていうかポインタのポインタって何なんだ。 何の意味があるんだ。
>全く違うものだよね。 同じじゃね? >ていうかポインタのポインタって何なんだ。 >何の意味があるんだ。 データのソートの時にデータ自体の入れ替えが要らないから速いよ。 テキストエディタとかでもポインタ配列使うと、一行消した時に前に詰めるデータ転送が少量ですむ。
160 :
デフォルトの名無しさん :2011/10/06(木) 21:22:44.03
うん
bccというコンパイラは7の64bitでも使えますか?
struct p2{char(*a)[2];char x0[8];}; 8バイト+sizeof(char*)+sizeof(char*) struct a2{char a[2][4];}; 8バイト 違う。全くといってイイほど違う。
あっそ。
先頭アドレスの一致は大丈夫だろうけど みなし配列化はパディング入る可能性があるから規格以前の問題じゃないかな
bccというコンパイラは7の64bitでも使えますか?
変数の名前ってどのくらいの長さまでなら許せる?
>>158 なんの意味があるかと言われても、実際あるんだからcharと同じくらいの意味はあるでしょ。
>>159 ポインタを指すポインタと、ポインタの配列は別物だよ。
ただし、関数のプロトタイプ宣言中の仮引数並びでは、配列がポインタに成り下がるので
同じになるけどね。
char *a[] = {"foo", "bar", "boo"};
func(a);
とした時のfuncに渡る仮引数の型がchar **
概念の違いよりも ポインタの配列ならコンパイル時に要素数の情報が参照できる ポインタのポインタではできない この違いのほうが重要
int main(int argc, char* argv[]) 派 int main(int argc, char** argv) 派
書籍 Cプログラミングの非常識 4.9 char *argv[]の正しい意味 ... argvを使用する立場からは、char *argv[]という書き方のほうが意味がはっきりする が、構造的な意味合いからはchar **argvの方がより明示的であろう。 ... 4.10 char a[]とchar *aの違い ... char a[10]; func(a); func(char b[]) { ... } において、char b[]の代わりにchar *bとしても全く同じである。 ... ところが char a[]="hello"; と char *a="hello"; は異なる。
win32apiで作った同じウィンドウ内の複数のエジットコントロール間を Tabで移動できるようにするにはどうしたらいいの?
WS_TABSTOP
ある構造体のメンバのサイズを知りたいんですが どうしたらいいですかね!
ゆっくりしていってね!!!
177 :
175 :2011/10/07(金) 15:27:04.68
自己解決しました
その結果がこれだよ!!!
滞在時間ものの5分。
質問です。 linuxのC言語でシステムCALLを使っています。 ret=system("ls > hoge.txt") 上記でlsの一覧をテキストに貼り付けそそテキストをopenしたいのですが、 systemでcallされた命令が終了するまで待機するにはどうすればよいのでしょうか? ret = system("ls > hoge.txt"); while(WIFEXITED(ret) == FALSE); //システムコールが終了するまで待機の予定 ではダメみたいでした・・・
fork
>>181 調べましたけど、チンプンカンプンです。
土日の宿題ができました^^;
>>180 lsの結果を欲しいということなら、popen使っても良いんじゃないかな?
>>182 system()は同期関数だから返ってきた時点でls > hoge.txtは終了している。
system, exec, fork のクソ命令は覚えるまで脳みそに丁寧にすりこんどけ その臭いがとれなくなるまで嗅げ
楽しようとして、苦しんでる人がいるとは
>楽しようとして、苦しんでる人がいるとは これこそ、プログラミングの神髄
いかにサボるかを常に考え続けているからこそ苦しむ
>>180 >>183 のいうpopenを使うのが正統派だと思う。
$ ls | hoge
ってしている感じになる。
横フォローだけど、lsの結果をファイルに保存することも必須なら、teeコマンドを併用するといいよ
さっき別の板で貼ってあったんですが これって何をしてるんですか? .def ___main; .scl 2; .type 32; .endef .section .rdata,"dr" vip: .ascii "Hello World!!¥0" .text .globl _main .def _main; .scl 2; .type 32; .endef _main: pushl %ebp movl %esp, %ebp andl $-16, %esp subl $16, %esp call ___main movl $vip, (%esp) call _puts leave ret .def _puts; .scl 2; .type 32; .endef
main() { puts("Hellow World!!"); } してるだけちゃうか。
このディレクティブとかオペランドの順序、gasでがすか?
あるファイルをfopenで開いて書き込み処理をしてfcloseした後、また同じファイルをfopenで開こうとするとエラーが起こります。 エラーが起こらない時もあるのですが、その時はfclose後に数秒経ってからアクセスしていました。 fcloseが完了するのって数秒経たないといけない仕様なのでしょうか?
気のせいか、環境のせい
196 :
194 :2011/10/08(土) 16:02:21.31
環境を書くの忘れてました。 OSはWindowsXPでVC++2008EEです。
>>194 普通そんなことはない、バグか環境の問題。
排他処理 コードみせて
ウィルス対策ソフトが絡むなんてないか?
200 :
838 :2011/10/08(土) 16:46:40.51
うん
201 :
194 :2011/10/08(土) 16:55:43.92
202 :
デフォルトの名無しさん :2011/10/08(土) 21:02:57.36
いえいえ
関数ポインタとかビットフィールド構造体とか詳しく載せてるサイトご存知の方いらっしゃいますか? 書籍でもよいです。
ベクトル化とかをやらない限りは そういう結果もありえる
だな
float使うのは情弱 情強はdoubleオンリー
つまりDirectXは(ry
サイズの方が問題 メモリを使いすぎるばかりか、キャッシュ効率も悪くなる
>>204 CPUによる。x86ならfloatもdoubleも80bitで演算されるから基本そう変わらん。
もちろんサイズや型変換やコンパイラ/オプションにもある程度よるが。
211 :
デフォルトの名無しさん :2011/10/09(日) 08:02:07.16
速度が違うだろうとはわかっていても 精度をおとすわけにはいかない 最近の64bitのwin7だと、doubleは何バイトっていえるの?
昔からdoubleは8バイトと決まっておる。
サイズがOSに依存するのはintだけじゃなかったけ?
違う。仕様的にはほぼすべて環境依存。
ちょっと前のスレでは float の方が速い、double 使う奴はアホ、とのたまっていた方がいたんですけど。
ああ宿題スレのほうでしたかね。
速さはそれぞれなんじゃね
>>215 そんなレベル低いんならお前はコテ外せよ。
よく恥ずかしくないな。
クズは速度云々言う資格ないだろw ゴミみたいなクソ遅いコードしか書けないんだから
fpu floatとfpu doubleの差は動作時の誤差って思える。 実は両方ともdoubleで実行してたりして
スレタイ読んでない奴ばっかでしょ
環境依存
早くc言語おしえてくれよ><
>>222 だからx86なら内部80bit演算だと言っとろうが。
228 :
デフォルトの名無しさん :2011/10/09(日) 17:07:39.82
質問させてください。 行列の指数計算(eの行列乗というか)をC言語で行いたいのですが、利用できる関数などはあるのでしょうか。
y%2
>>228 printf("%c",'1'-(x+y)%2);
if (x%2^y&1 == 0)
234 :
デフォルトの名無しさん :2011/10/10(月) 01:00:29.04
int x,y;
>>229 数値的にやるなら... 行列の乗算でテーラー展開だっけ? まずは対角化とか... とか?
こういう一般的なプログラムのスレより数値計算に詳しそうな人がいるスレで
聞いた方がいいかもね。あとどれだけ数学的知識があっての質問かにもよりそう。
singned char = 0xff; これが-1になるのは処理系依存でしょうか?
サインドキャラで表す事が出来るのは127から−128まで、0xffは255
整数型で表現できる値より大きい値を入れようとした場合は未定義です。処理系のマニュアルを参照してください
>>229 Cには全然ない。
計算だけしたいならC++使って、まず行列関連のクラス作ってからやった方が速い。
C言語で開発されている方って動作テストする時一々コンパイルしているんですか? コンパイルに時間がかかって大変じゃないですか?
昔にくらべたら天国だよ
そのためのライブラリだよ
make -jすれば4倍速だしな。
そのための分割コンパイルですね。最近は makefile も自動生成できることですし。
いつの時代だよ。makefileの自動生成なんて何十年も前からあるわ。
相変わらず浅そうだ
知ったかぶりの屑に反応すんなよw
Qは20年前で成長が止まっている馬鹿ですから
C言語で1/3*1の答えを1/3か0.3(1/3に近いもの)にする方法を教えて下さい
なるほど、そういうことか。
>>252 できました、迅速な回答ありがとうございました
*1はいらんけどな。
サンプルプログラムのソースコードとか眺めてたら関数の引数の定義で main(argc, argv) int argc; char **argv; { } な感じの定義があったんだけど 引数の定義を丸括弧の外側に出すってどこのC言語の入門書にも書いてなくて これってどういうことなの?
古い形式
この形式って便利なのにC++だと使えないんだよな。なんでだろう
どういうとき便利なんだろう
バグをコンパイラのせいにするとき便利
はあ?
引数にコメントを付けたいとき便利じゃね?
int main( int argc、 char **argv ) こうすれば書けるよ
matrix4x4(m11, m12, m13, ...); double m11, m12, m13, ...: m11(m11), ... {} こういう時に型を一回書くだけでいいから楽ちん
それって配列で渡した方がよくね?
関数のプロトタイプ宣言は使えなくなるけどな
可変長ってことか・・・
入門書で printf("%d\n", a) こういう風にa前にスペースが入ってるのはなんのためですか? スペース入れない printf("%d\n",a) でも同じように表示されるのですが…
プログラマのおっさんはもれなく目が悪いので間が開いてるほうが見やすいのです
,の手前は空けない、,の後は空ける。 これは世界の常識。
両方空けるわ 二項演算子の前後は1スペースが普通だろ カンマでも同じ
カンマ演算子の場合は空けて、そうじゃ無いときは空けない
非常識なやつだな。
>>269 試しにaの前にタブやら改行やら入れてみては?
>>269 ですが回答ありがとうございました。
ようするに一行空けと同じような感じで , の後は見易くするためスペース空けるものという程度の理解で先に進んでみます
>>278 うん。
その辺がコーディングスタイルというものになって、論争のタネになる。
>>278 プログラムコード以前に、英文とかアルファベットの文章の場合、カンマの後に
スペースを入れる習慣があるでしょ。もちろん見やすさのためにね。
英語のサイトとか見てごらん。
質問です。 txtファイルからfscanfでwhileループなどを使って何行もデータを取り出していくときに、 なにも書きこまれていない行が出てきたら、そこは取り出さずに取り出し作業を終了する にはどうすればよいのでしょうか?
strlen()==0じゃだめなん?
>>281 取り合えず取り出してからチェックして捨てるといいよ
そのほうがプログラムも簡単になるし、マシンへの負荷も小さい
>>282 なるほど、それで文字列の個数を読み取って、0のとき終了すればいいんですね。
ありがとうございます><
>>283 そうなんですか。
ちなみに何も書きこまれていないデータを読み取った後、
どのようにしてそれだけを捨てれば良いのでしょうか?
Cにこだわらないならそういうのはperlでやりゃいい 空白文字だけの行をスキップするとか そりゃもういろいろできる perlはテキストを行ごとに処理すんのに特化してるから 餅は餅屋
286 :
デフォルトの名無しさん :2011/10/13(木) 11:11:42.62
Cの生みの親が死んじゃった・・・・・・
K&RのRが死去
288 :
デフォルトの名無しさん :2011/10/13(木) 13:36:49.95
糞C++を作ったストラウストラップの野朗が代わりに死ねばよかった
290 :
デフォルトの名無しさん :2011/10/13(木) 15:34:32.77
組み込み系です。 CAN通信のライブラリ探してコーネル大学のソースにブチあたったんですが サブルーチンの開始が { ではなく BEGIN で 終了が } ではなく END とかになっててPascal風味で気持ち悪いんですが こういうの流行ったんですかね?
リッチー…R.I.P
自分で読むだけなら置換すればいいよな。
>>285 どうしてもCでやらなければいけないんです><
pearもそのうち学びたいですね。
>>282 すいません、今更ですが、文字だけでなく、数字データがあるかどうかも知りたいんです
>>296 #include <stdio.h>
#include <ctype.h>
int is_contain_digit(char *p)
{
while (*p) {
if (isdigit(*p++)) return 1;
}
return 0;
}
int main()
{
puts(is_contain_digit("foo1") ? "digit found." : "digit not found.");
puts(is_contain_digit("foo") ? "digit found." : "digit not found.");
puts(is_contain_digit("1bar") ? "digit found." : "digit not found.");
}
演習問題とかやってんなら、 「空白」とか「数字」というのはisalpha()とかisdigit()とかそういうので一文字ずつ判定して いったりするようなコードを想定しているんじゃ?
しまった、リロードすべきだった。あと空白はisspace()か。手が滑った
>>298 いろいろ試しましたがうまくいきません。
例えば、point.txtの中が
458
769
483
だった場合、どうにかして3行数字があるなとわからせて
fscanfを3回実行するというようなプログラムにしたいんです。
どうしてもそのフローでやりたいのなら、まず読んで、各行がどのようなものかを把握したあとで、先頭に戻って再度読み直す。
int n = 2; int hoge[n] = {1, 2}; のように可変長配列を初期化しようとするとコンパイラに怒られるんですけど何でですか?
>>303 早速どうもです
C99使ってるんですけど警告が出ます
ファイルを読まないと何があるかわからないのに、それを先にわかれって言うのは無理だろw
せめて警告をそのまま貼れ
直感的に要素数の指定をしつつ初期化子を使った初期化は組み合わせられない気がするんだけどなぁ。 そういうエラーとか出てないの? 初期化子よりも要素が少ないとき、あふれた分は無視されるという挙動を期待しているのかな。
>>300 そのデータなら単に毎回 fscanf(fp, "%d", &i) みたいのを呼べばいいんじゃないの?
もっと具体的にどう駄目なんだ?
一般的な話としてfscanf()/scanf()は入力のフォーマットがしっかり決まってるときに
しか普通使わない/使えない。
で普通はfgets() + sscanf()にしたりする。どうしてもfscanf()でいくなら、毎回戻り値を
チェックして0だったら入力を捨てるとか、そういう処理が必要になってくるが大丈夫?
309 :
デフォルトの名無しさん :2011/10/14(金) 06:04:29.53
main() { printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
310 :
デフォルトの名無しさん :2011/10/14(金) 06:25:20.98
>>306-307 Variable-sized object may not be initialized.
です。
intにconstつけれ
const付けたら可変長配列ではなくなる。 そもそも可変長なのに初期化子使いたいって…
vector<int> hoge = {1, 2}; ※ただしC++0x以降に限る。
>302 >何でですか? コンパイルの時点で「この関数はローカル変数にこれだけメモリを消費する。」 って決めうちしてるからじゃね? malloc()使え。
あ、[]のあとにhoge忘れた
>>310 ああやっぱ無理なんだね。
で、無理を通そうとしてるの?
プロセス間、スレッド間で共有ロックをおこなうのに いい方法を教えてください
pthread semaphore
構造体メンバーのサイズを性的に知るマクロって 標準的な環境(POSIXとか)で用意されてますか?
>>322 offsetof というマクロがあるから、それをヒントに作って見れば?
>>323 車輪の再開発して、友達に噂とかされると、恥ずかしいし・・・。
>>326 struct X {
int a;
char b[3];
int c;
};
#define Sizeof(s,m) sizeof(((s *)0)->m)
printf("[%d]\n",Sizeof(struct X, b));
C++ならsizeof(X::b)とできるんだけどな。
txtファイルの中の任意の場所に文字を書き込む方法はありませんか? 例えば下の「とまと」と「だいすき」の間に「も」を入れて 「とまともだいすき」にしたりとかです。 /**********test.txt*********** はんばーぐおいしい とまとだいすき ****************************/
sytem("sed s/とまと/とまとも/ text.txt");
>>330 ありがとうございます。
このプラグラムで実行したら警告が出たのですがどうすればよいのでしょうか?
/*******************q.c**************************************************
#include <stdio.h>
#include <stdlib.h>
int main(void){
sytem("sed s/とまと/とまとも/ test.txt");
return 0;
}
************************************************************************/
/******************cmd***************************************************
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
q.c:
警告 W8065 q.c 5: プロトタイプ宣言のない関数 'sytem' の呼び出し(関数 main )
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: 外部シンボル '_sytem' が未解決(D:\C_PROGRAMMING\Q.OBJ が参照)
**************************************************************************
system
>>332 脱字でしたかwすいません。
次はコンパイルは通ったのですが、実行ができません。
何が原因なのでしょう?
/**********************cmd**********************************
D:\C_programming>bcc32 q.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
q.c:
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
D:\C_programming>q
'sed' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
*************************************************************/
Windowsならsedは無いぞ。
336 :
333 :2011/10/14(金) 21:30:15.68
>>327 Sizeof という名前は紛らわしいしダサいので、
公式または準公式、デファクトスタンダード的な名称があれば
おしえてください
mainの引数ってコンパイルしたexeファイルは無理でしたっけ? 実用的じゃないですか? コマンドライン上で数字を打ち込んでそれを引数にするのは現実的ですが exeファイルを引数にするってどういうときでしょうか?
>>337 デファクトスタンダードは sizeof だろw
>>338 ランチャーとかモニターとかデバッグとか解析とか、色々ある
>>340 こういうの無理ですかね?
Hello.cはGoodBye.cをコンパイルし実行するプログラムとか。
GoodBye.cを実行したらいいって言ったら身も蓋もないんですが
ソースファイルでそういうプログラム作れるのかなと。
作れる。
#include <stdio.h> int main(void) { system("cc GoodBye.c; ./a.exe"); return 0; }
仕様書を読ませると、プログラム設計書、プログラム本体、試験結果報告書を出力してくれるプログラムを作ってくれ
>>344 すごいですね、systemとか初めて知った・・
じゃぁGoodBye.cの実行結果を引数にするプログラムは作れますか?
その様な理想を目指したプロジェクトはたくさん有った、有る、お国のプロジェクトもあった。 しかし、広い分野で一般化できた(成功した)話しは聞かない。
仕様書記述言語を開発すればすぐに出来上がるよ
system("cc GoodBye.c; ./a.exe | ./program");
>>348 そうなんですか?
テキストファイルをmain引数にすることはできるけど、Cファイルの出力を引数
にする方法がわかりません。
Hello.cはGoodBye.cを引数にして、GoodBye.cの出力結果である文字goodbye
の文字数を数えるプログラムみたいなの無理でしょうか?
>>349 簡単に作れるなら今がチャンス。大もうけできるぞw
354 :
350 :2011/10/14(金) 21:58:43.06
これじゃだめか…
>>354 いえいえ、systemとかいう関数知りませんでした。ありがとうございます。
CUIのコマンドで | でしたっけ? これを使うとエクゼファイルの出力を入力にすることができるのは知っているのですが、 こういうコマンドを使わずに、エクゼファイルを引数にする場合はsystem使うしかないのですか?
357 :
350 :2011/10/14(金) 22:14:55.68
これでできたわ system("cc GoodBye.c; ./program `./a.exe`");
>>357 いやコマンドライン上でGoodBye.cを入力したいんですが。
360 :
350 :2011/10/14(金) 22:25:22.21
#include <stdio.h> int main(int argc, char* argv[]) { char cmd[100]; sprintf(cmd, "cc %s; ./program `./a.exe`", argv[1]); system(cmd); return 0; }
361 :
デフォルトの名無しさん :2011/10/14(金) 22:27:31.89
>>359 cygwinあるのでそこらへんダイジョーベです。
>>360 やっぱり初心者には難しいプログラムになるんですね・・
|使うと簡単なソースプログラムでいいんですが・・
仕様書記述言語で書けばすぐに出来上がりますが その仕様書は四則演算レベルまで正確に規格通りに仕様を記述しないとうまくいきません
殆どプログラムソースを書いている感じ
>>339 sizeofはもうすでにあるから使えないよ。
「性的に」知りたいのか・・・
368 :
デフォルトの名無しさん :2011/10/14(金) 23:16:13.28
リッチー死去 享年70歳
>>334 そんなこといってもこの記述自体が車輪であるから、回答としては、マクロは用意されていないが有名なidiomならある、だろう。
#include <stdio.h> /*
>>329 */
#include <string.h>
int main(void) {
char buffer[128], c[128], to[128];
char *p;
const char head[] = "とまと";
const char body[] = "も";
const char tail[] = "だいすき";
int length;
strcpy(c, head);
length = strlen(c);
strcat(c, tail);/* とまとだいすき */
strcpy(to, head);
strcat(to, body);/* とまとも */
for(;;) {
p = fgets(buffer, sizeof(buffer), stdin);
if(p == NULL) break;
p = strstr(buffer, c);
if(p != NULL) {
*p = '\0';
fputs(buffer, stdout);
fputs(to, stdout);
p = p + length;
fputs(p, stdout);
} else {
fputs(buffer, stdout);
}
}
return 0;
}
371 :
370 :2011/10/14(金) 23:56:20.50
bcc32 between.c between < text.txt
>>370 strcpy(c, head);
この時点でアウト
373 :
350 :2011/10/15(土) 00:07:48.76
とまとだいすき
374 :
370 :2011/10/15(土) 00:09:37.67
おまえにいってない
フフ
376 :
333 :2011/10/15(土) 00:55:02.06
>>370 ありがとうございます。
ちなみにそのプログラムのどこに何を追加すれば
test.txtを
>>329 のように修正できるのでしょうか?
できないよ。 バグを直したとして、 ./a.out < test.txt > /tmp/test.txt && mv /tmp/test.txt . ってやればできる
378 :
333 :2011/10/15(土) 02:53:02.10
ユーザ関数内でファイルオープン&ファイルの内容を読み取ることはできますか?
心配しなくてもすべてのことはできる。
380 :
333 :2011/10/15(土) 03:03:01.00
openしてreadすればいい。
>>339 sizeofはデファクトスタンダードじゃなくて、ただのスタンダードだろ。
384 :
382 :2011/10/15(土) 11:22:24.86
385 :
333 :2011/10/15(土) 11:38:39.83
>>384 Pathの部分に、自分が読み込みたいファイルの"te.txt"を入れて
コンパイルしたら以下の警告が出てきてしまいました・・・
警告 W8057 test.c 26: パラメータ 'path' は一度も使用されない(関数 read_file_print )
>>369 じゃあ デファクトになりそうなレベルのかっこういい名称を
考えてみませんか?
388 :
333 :2011/10/15(土) 12:47:14.64
分からないなら答えないで下さい うざいです
389 :
382 :2011/10/15(土) 13:01:15.63
390 :
333 :2011/10/15(土) 14:15:22.83
同じようなものを何度も書かれてもわかりません もっとわかりやすいものをください
おまえはアホか
コミュ障すぎワロタw
なりすましだろ
394 :
333 :2011/10/15(土) 16:06:07.56
Cに触れたばかりの中学生かストレスが溜まり過ぎた底辺SEというところか
>同じようなものを何度も書かれてもわかりません こんな事書く時点で嘘だろ
397 :
333 :2011/10/15(土) 16:51:51.16
398 :
333 :2011/10/15(土) 16:54:53.74
>>398 × if ((fp = fopen(path, "r")) < 0) return;
○ if ((fp = fopen(path, "r")) == NULL) return;
401 :
333 :2011/10/15(土) 18:09:33.76
>>400 見事に表示されました!ありがとうございます、これで無事家に帰れます^^
昨日から泊り込みでやってたの?
403 :
333 :2011/10/15(土) 18:19:26.21
Cです JavaでのarrayListなどのように プログラムの途中で要素を追加したり、逆に削除したり ということはCではできないのでしょうか?
>>404 誰かに作ってもらうか、自分で作るしかない。
>>405 ありがとうございます
要素の追加削除や配列の要素数の変更など
色々なところでJavaに比べて難しいですね・・・
どうするかちょっと考えたいと想います
自己参照構造体使って自分で作る
今時なんでCなんてやってんの? やるならC++だろ。
>>406 そのへん自由にしたければ、C#やれ。 普通に使えるぞ
名前は聞いたことはあるものの CとC++とC#の違いも正直よく分かっていないので それなら一番基本そうなCで作っています・・・ 自己参照構造体は聞いたこともありませんでしたので、今ぐぐって読んで何とかやってみます
C言語によるスーパーLinuxプログラミングにライブラリが紹介されてたような気がする
Cはアセンブラに近い言語だから、細かい指示が必衰。メモリー管理必衰。 C++は、低級も高級も仮想化もメタもOOPも何でもできるが、複雑な子。メモリー管理必衰。 Java、C#は殆どのメモリー管理は言語任せ。だから、管理しなくても書ける。
盛者必衰の理をあらはす
C#を出さなければJava厨乙っていえたのに、立場がわかりにくいです><
そこじゃない
本人からしたら何に鼻水ふかれてるのかもよくわからないんだな
つーか、今時Cだけの処理系とか存在すんのか?
組み込み用のマイコンとかはCしかないものだらけでしょう
あぁ、PICとかか。 組み込みっても大きいのはみんなgccベースだろうしな。
誤字指摘する人久しぶりに見た
いやこれは誤字ではなく誤記だと思う。
425 :
デフォルトの名無しさん :2011/10/16(日) 21:03:55.44
誤記でもなくてただのアホだろ。
そうだね なんかごめん好きなだけ馬鹿にして
哀執
デイト?
親切でいいことじゃないか
>>417 そこを含めてだったのに何でわかってもらえなかったかが不思議
必衰してる行を見てほしい
うん
432 :
忍法帖【Lv=21,xxxPT】 :2011/10/17(月) 11:40:04.33
やさしいC→明解C言語中級編 と来たら次は??
新版明解C言語中級編
プログラミングなら、エディタのマクロでもできる(マクロがあるエディタを利用) エディタのマクロでできないことがCでできるのだ。 マクロがないエディタ(メモ帳など)で、マクロがほしいなぁとおもったらCでプログラミングする。
435 :
デフォルトの名無しさん :2011/10/17(月) 15:39:25.88
なんのこっちゃ(・ω・`)
秀丸使いは頭のおかしい人が多いということ
437 :
デフォルトの名無しさん :2011/10/17(月) 16:33:34.71
java script の演算でフォームを作って 変数a+b=xの計算をやるプログラムを作ったのですが xの値をかえた時に式が正しくなる方法を教えてください。
ここはC言語のスレ。
,、ァ ,、 '";ィ' ________ /::::::/l:l ─- 、::::;;;;;;;;;`゙゙''‐ 、 __,,,,......,,,,_/:::::::::/: !| . : : : : : : `゙'ヽ、:::゙ヾ´::::::::::::::::::::::`゙゙゙'''‐'、. l| またまた ご冗談を 、、 . : : : : : : : : r'":::::::::::::::::::::::::,r':ぃ::::ヽ::::::::ヽ! ,、- 、 .ヽ:゙ヽ; : : : : : :ノ:::::::::::::::::::::;;、-、、゙::: rー-:'、 / }¬、 . \::゙、: : : :./::::::::::::::;、-''":::::::::: ,...,:::,::., :::':、 _,,/,, ,、.,/ } ヽ:ヽ、 /::::::::::::::::::::::::: _ `゙''‐''" __,,',,,,___ /~ ヾ::::ツ,、-/ `ヽ、:::::::::;;;、、--‐‐'''''',,iニ- _| 、-l、,},,  ̄""'''¬-, ' ''‐-、 .,ノ'゙,i';;;;ツ _,,,、-‐l'''"´:::::::' ,、-'" ,.X,_,,、-v'"''゙''yr-ヽ / ゙゙'ヽ、, ,.' j゙,,, ´ 7 ,、-''" .l:::::::::::;、-''" ,.-' ゙、""ヾ'r-;;:l 冫、 ヽ、 / __,,.ノ:::::ヽ. / l;、-'゙: ,/ ゞ=‐'"~゙゙') ./. \ / '''"/::::;:::;r-''‐ヽ ,、‐゙ ヽ:::::..,.r'゙ ,,. ,r/ ./ ヽ. ,' '、ノ''" ノ ,、‐'゙ ン;"::::::. "´ '゙ ´ / ゙、 ,' / ' //::::::::: {. V / / ./::::::::::::: ', / / . / /:::::::::::::::::. ',. / ,.、 /
/: : : : : __: :/: : ::/: : ://: : :/l::|: : :i: :l: : :ヽ: : :丶: : 丶ヾ ___ /;,, : : : //::/: : 7l,;:≠-::/: : / .l::|: : :l: :|;,,;!: : :!l: : :i: : : :|: : ::、 / ヽ /ヽヽ: ://: :!:,X~::|: /;,,;,/: :/ リ!: ::/ノ l`ヽl !: : |: : : :l: :l: リ / そ そ お \ /: : ヽヾ/: : l/::l |/|||llllヾ,、 / |: :/ , -==、 l\:::|: : : :|i: | / う う 前 | . /: : : //ヾ ; :|!: イ、||ll|||||::|| ノノ イ|||||||ヾ、 |: ::|!: : イ: ::|/ な 思 が /: : ://: : :ヽソ::ヽl |{ i||ll"ン ´ i| l|||l"l `|: /|: : /'!/l ん う ∠: : : ~: : : : : : : :丶ゝ-―- , ー=z_ソ |/ ハメ;, :: ::|. だ ん i|::ハ: : : : : : : : : : : 、ヘヘヘヘ 、 ヘヘヘヘヘ /: : : : : \,|. ろ な |!l |: : : : : : : : :、: ::\ 、-―-, / : : :丶;,,;,:ミヽ う ら 丶: :ハ、lヽ: :ヽ: : ::\__ `~ " /: : ト; lヽ) ゝ レ `| `、l`、>=ニ´ , _´ : :} ` / ,,、r"^~´"''''"t-`r、 _ -、 ´ヽノ \ノ / お ・ ,;'~ _r-- 、__ ~f、_>'、_ | で 前 ・ f~ ,;" ~"t___ ミ、 ^'t | は ん ・ ," ,~ ヾ~'-、__ ミ_ξ丶 | な 中 ・ ;' ,イ .. ヽ_ ヾ、0ヽ丶 l / ( ;":: |: :: .. .`, ヾ 丶 ! \____/ ;;;; :: 入:: :: :: l`ー-、 )l ヾ 丶 "~、ソ:: :い:: : \_ ノ , ヾ 丶
みんなの中でも、C言語のすれだろ
____ / ̄ ̄ ̄\ /___ \ / ___ ヽ / |´・ω・`| \ / |´・ω・`| \ みんな〜 /  ̄ ̄ ̄ \ / _,  ̄⊂二二) | i ヽ、_ヽl | | └二二⊃ l ∪ | | | ,、___, ノ | ,、 | ヽ_二コ/ / ヽ / \ / _____/__/´ __ヽノ____`´
産地の異なるワインの味覚成分を正規化した特徴量として数値化した。 産地ごとの標準的なワインの特徴量と未知のワインの特徴量を比較して 未知のワインがどの産地かを当てよ。 ヒント:パターン認識、最短距離法、ノルム(ユークリッドノルム) <実行結果例> 産地ごとの標準的なワインの特徴量 酸味 渋味 甘味 産地A: 0.70 0.50 0.60 産地B: 0.60 0.70 0.50 産地C: 0.50 0.60 0.70 未知のワインの特徴量 酸味 渋味 甘味 1番目: 0.63 0.67 0.51 →このワインは産地Bです 2番目: 0.46 0.61 0.65 →このワインは産地Cです 3番目: 0.73 0.48 0.59 →このワインは産地Aです 4番目: 0.48 0.57 0.69 →このワインは産地Cです 5番目: 0.63 0.69 0.48 →このワインは産地Bです 6番目: 0.73 0.52 0.58 →このワインは産地Aです 7番目: 0.54 0.61 0.66 →このワインは産地Cです 8番目: 0.57 0.74 0.51 →このワインは産地Bです 9番目: 0.72 0.48 0.55 →このワインは産地Aです scanf はしなくていいんでこれをC言語でお願いします
>>444 #include <stdio.h>
typedef struct{ double params[3]; }wine_t;
int main(void){
wine_t base[]={
{{0.70, 0.50, 0.60}}, {{0.60, 0.70, 0.50}}, {{0.50, 0.60, 0.70}}
};
wine_t target[]={
{{0.63, 0.67, 0.51}}, {{0.46, 0.61, 0.65}}, {{0.73, 0.48, 0.59}},
{{0.48, 0.57, 0.69}}, {{0.63, 0.69, 0.48}}, {{0.73, 0.52, 0.58}},
{{0.54, 0.61, 0.66}}, {{0.57, 0.74, 0.51}}, {{0.72, 0.48, 0.55}}
};
int i, j, k;
char *result=NULL, *place_name[]={"産地A","産地B","産地C"};
double min_distance=0.0, distance, diff;
for(i=0;i<9;i++){
for(j=0;j<3;j++){
distance=0.0;
for(k=0;k<3;k++){
diff=(target[i].params[k]-base[j].params[k]);
distance+=diff*diff;
}
if(j==0 || min_distance>distance){
result=place_name[j];
min_distance=distance;
}
}
printf("%d番目: %.2f %.2f %.2f →このワインは%sです\n", i+1, target[i].params[0], target[i].params[1], target[i].params[2], result);
}
return 0;
}
>>448 mainでのreturnを、コンパイラがexitと同様になるようにしてたり、してない場合もある。
>>448 生成されたコードをデバッガに掛けてみればすぐに分かることだが、return 0;では
そのままeaxやraxに0を持って終了するのに対し(x86やx64の場合)、exit(0)では
ご丁寧にexit()をcallしている場合が多い
これだけでもはっきりと生成コードに違いがある場合があるのだから、
>>94 みたいに
「int main() 内に置く return と exit() については一緒。」と言い切るのは馬鹿の
所業としか言いようがない
exitは開いてるストリームを閉じて一時ファイルを削除します returnとは違うんですよ
>>451 プログラムの終了時にも開いているストリームは閉じられて一時ファイルは削除されるんですけど
/* S.c */ #include <stdio.h> int main(void) { int r,s; printf("円の半径入力="); scanf("%d",&r); s = r*r*3.14; printf("円の面積= %d",s); return 0; } Ubuntu gcc環境だと日本語部が化けます。どうにかなりませんでしょうか?
>>452 それは気をきかせてるだけ
C言語はreturnの場合はべつに閉じなくてもいい
456 :
デフォルトの名無しさん :2011/10/18(火) 11:43:33.90
return と exit の動作の違いを調べようとJISのサイトで規格表を見ようとしているんだが どうやらうちの環境では表示できないようだ。 Acrobat 8では見られたんだが、最新のXでは表示できない… みんなはどう?
system("pause")に相当する、外部プログラムを呼ばない方法を教えてください。
void Pause(void) { cout << "適当に入力してEnterで終了" << endl ; char c ; cin >> c ; } int main(void) { Pause() ; return 0 ; }
>>445 素早いご回答ありがとうございます。
私は初心者なのでtypedef structというのがわかりません。
どのような意味なのでしょうか?
任意のキー1つで進める方法はありませんか?
getch();
kbhit
ありがとうございます。 これでpauseと同じことができそうです。
>>467 >444をポインタなしでということなら、ほぼ無理です。諦めましょう。
アセンブリ勉強したいのですが、アセンブリの勉強=アセンブリ言語を組む ということでしょうか?良くわからないので教えてください。 C言語の勉強=とりあえずC言語でプログラムを書くってのが勉強の手法ですよね。
同時にコンパイラの勉強もしたいです。 コンパイラとアセンブリは似たようなものですか?いずれもコンピュータの 根幹の機能だと思うのですが・・
>>472 何をしたらいいかわからない・・
C言語の場合、とりあえず組むんだなと思って専門書を読み始めるのですが
コンパイラ、アセンブリの場合何をするのかわからない、理論を学ぶのか、
それとも何か組んだりするのか、入門者の場合何したらいいですか?
コンパイラの本なんて腐るほど出てるから適当に本屋で眺めてよさそうなの持って買えればいいじゃん
476 :
665 :2011/10/18(火) 17:43:51.17
>>475 コンパイラ勉強したら何できます?個人で。
大学なんですが光や通信なんてのは大規模な設備必要っぽいから
個人でできないってわかるんですが。
>>476 コンパイラの勉強をしたらコンパイラを作るのが普通。
コンパイラの勉強をしても、こんなしょっぱなから人に聞いてばかりの君には何も出来ないと思うよ
>>477 なるほどコンパイラは作るもんなんですか・・
そのコンパイラってのは集積回路のことですか?
それともソフトウェアのこと?
>>478 ノーベル賞とった偉人は人に良く質問するという、あるあるがあるんで。
>>479 ノーベル賞とうような人がする質問とお前の質問は全く別物だから勘違いしないように
阪大のレベルの低下が懸念されるな
阪大は俺でも入れるくらいだからたいしたことはない そもそも高校生から全く成長して無くても阪大生名乗れるしなw
>>485 大学入ったあと何もしてないぼんくらでも一生懸命勉強した奴でも肩書きは同じ大学の学生ってことだろ
文字読むときは脳みそ動かして読めよまじで
>>485 受験時にボーダー超えてるかどうかにしかすぎないってこと
488 :
デフォルトの名無しさん :2011/10/18(火) 18:00:11.61
c言語で色々と作りたいんですけどどうすればいいんですか?
>>479 コンパイラの勉強をする前に、コンパイラとは何かくらい調べたら?
国語辞典くらい持ってるでしょ?
>>484 阪大生か?
ここにいる奴らでコンパイラとか勉強してる人はやっぱ大卒?
日本人でノーベル賞取ったやつらより俺のほうが頭良いと思う あいつらよりプログラミングの能力においては俺のほうが上な自信あるww 化学とか物理とかだろ?情報学で俺に勝てる奴いない
>>491 実験で使うためにプログラム組んだりしてるかもよ?
実際どうなのか知らないけど
C言語ってjavaに比べたら機能少なすぎない? ゲーム作るならjava以外ありえないよな・・
コンパイラが何かも調べられないやつには何もできない。
>>494 いやいやw
標準ライブラリ以外ですごいんじゃない?
パッケージやボクシング、オーバードライブなど全ては
クラス指向向きのための魔法だけど、そういうのCにあるの?
>>495 調べて200字で説明せよって言われて説明できるやつはいないよ。
難しすぎる。
天才で暇を持て余してるならファミコンのプログラムのnesasmを出力するCコンパイラ作ってくれ
誰もそんなことは言っていない。
>>497 今時Cはないって。
普通C++。ゲーム機ならC++だろ。
>>499 日本語でOK
Cコンパイラでファミコンの機能を作れってことか?
パソコンにコントローラー繋いでゲームしたらマシンパワーがすごくて
動作が快適すぎたりしないの?
快適すぎて何が問題なんだ。
C言語でファミコンソフトを開発できるようにしてほしいってことだけど難しい日本語だったかなあ
>>504 それだとコンパイラだけじゃなく開発環境そのものが必要になっちまうだろ。
>>503 ファミコンの内部集積ベースにあうようなコンパイラプログラムを作れということでしょ?
ファミコンでも快適に動くコンパイラプログラムなのにそれをそのまま作ってWindowsとかで動かした快適すぎて逆にバグじゃね?
マリオ時速何キロ出るんだろう。
マシンパワーに見合ったコンパイラを作らないと意味ないんじゃないですか?
ゲ製行けよ
コンパイラを作る意味が分からない。 C言語の環境があればプログラムを組むことさえできたら処理内部の情事なんて どうでもよくないですか?
そうですみんな自己顕示欲を満たしたくて新しい言語を作ってるんです
>>456 英文なら持ってるよ。
一応、俺流の訳を付けておいた。
5.1.2.2.3 Program termination
1 If the return type of the main function is a type compatible with int, a return from the
initial call to the main function is equivalent to calling the exit function with the value
returned by the main function as its argument; reaching the } that terminates the
main function returns a value of 0. If the return type is not compatible with int, the
termination status returned to the host environment is unspecified.
main関数の戻り値の型がintと互換性のあるものなら、main関数の最初の呼出しからの復帰は、
main関数の戻り値を引数とするexit関数の呼出しと同等です。main関数を終了する } に到達
すると、0という値を返します。
戻り値の型がintと互換性がないならば、ホスト環境へ返される終了状態は特定されない。
C言語で2Dアクション作りたいな。3Dのライブラリで2D作りたい。
作ればいいじゃん
バグっぽい動作も仕様としてあえていれたいんだけどどうしたらいい?
実装すればいい
自分で考えられないならゲームなんて無理
スーパーDKのCGって神過ぎるんだけどあれを超えるアクションゲーが 未だに出ないのが不思議で仕方ない。
>>512 作りたいから作るんだよ。
お前の作るプログラムこそどうでもいいわ。
>>523 俺はゲームなど高次なものを作りたいんだよ。
525 :
デフォルトの名無しさん :2011/10/18(火) 18:57:33.72
勝手に作れよ。
ゲーム作るとか一人では不可能に近いよ。
>499 __,, , , , _ 、 ,,, ... ,, _ ..,_ ー=、 、ー-、`ヽ、、ヽ`!i' , ,i",r'",-'"=ミ `ヽ`ヾ`、 ! ヽ ! l! i! !_i_/_<'"`` `,ゝ、iliー'" "、,"、', i, リ !/!,li ,;;-=o=-,ッィ=。ゥィ __ i、`!', '; `ー /;;!i、''; ,! ー''`ヽ`,ーi'`''"!、ヽ , `一'、 / __ `il `i ! ヽ、  ̄ ̄ / iヽ、/ ,.ヽ_ i! !` `ーァ、-ー' ! ノ!トi,!'",ノ-、 ,..=、i! iヽ-、 rィ',;'!ヽー-、! `/_,i' _,.!'、 ーニー-、._ `ヽゞニ-、.;' i! ! , `ト_ノ`x-'" ノ =ニヽ、 , `, /ヾ=ソ ノ !/ !、`ー`''イ、 -ー-、 `i, / / ヽ `イ_, i -'" ̄`! ! ヽ ゝノ /-'" ` ' ! ヽ ! 朝鮮に かえるんだな おまえにも 同胞がいるだろう・・・
最初から丁寧に教えろください
>>463 のいう条件ってtypedef structを知らないということだろうか。
>>468 ほぼ、か。じゃあできるね。
>>490 大学の授業でコンパイラってのがあったよ。
情報系なら大抵あるのかな
脱ぎましたぞ 次はどうすればいいの?
>>530 常識レベルの行列計算テクニックをまとめただけみたいな卒論らしきもの.pdfをネットで見かけたことがあるがよく見ると早稲田大学だった
一流の大学でこんなんだから学部でコンパイラなんて作らないのが普通なんじゃね?
このスレのせいでC言語が余計に分かりにくくなった。 自分のテクニックや知識を披露するだけで相手の事何も考えてない。
噛み砕けばアホみたいに分かりやすい事でも変な用語を混ぜるせいでいつも 引っかかる。本当にこのスレで質問して無駄に過ごした時間を返してほしい。
回答者は常に腰を低くしとけよ。
C言語を教えて誰か
541 :
デフォルトの名無しさん :2011/10/18(火) 20:12:54.28
ww
>>539 基本的に教える側ってのは余裕があるんだから、腰低くして当然じゃないか?
教えられる側は混乱してるんだから多少イライラしてても仕方ないだろ。
お前、頭おかしいってよく言われるだろ。
C言語よくわからなかった むずかしいんだな
545 :
デフォルトの名無しさん :2011/10/18(火) 20:15:42.72
10文字程度の英数字を、32bitのハッチュ値にしたいんだけど なんか短くてそこそこ性能のいい方法を教えてください。
ハッチュ!
"何でこんな事が分からないんだよ、ちょっと考えれば分かるだろ!!" ↑ これは典型的なブーメラン。IQ20のくせに人に物を教えようとするとこうなる。
みんな頭良いのな
549 :
デフォルトの名無しさん :2011/10/18(火) 20:21:52.19
俺に最初から簡単に説明してくれる人いない?
>>552 月5万円くれ
週に90分×2教えるから
554 :
545 :2011/10/18(火) 20:26:51.99
>>550 ずらしたりひっくり返したりした程度では同一判定されないレベル
な適当な感じでいいです。
標準関数に使えそうなのがあるならそれでいいや って感じ
何がわからないか説明する能力にないヤツに説明するのは難しい
適当でいいなら最初の4文字をシフトして終わり
557 :
545 :2011/10/18(火) 20:29:03.82
普通にCRC32とかそのあたり使えばいいんだよな。
存在忘れてたわ。
>>550 ありがとう。
559 :
デフォルトの名無しさん :2011/10/18(火) 20:30:47.89
>>549 最終的には本に頼るしかないんかな・・
何か果てしないね。
>>555 説明する能力のある奴は、その場所だけ調べればいいだけだから質問なんてしないだろwwww
いるんだよな、わかっている事なのに確認のため質問する奴。
みだりに信じてはいけない。確認のため左右へ問うことが大切と、韓非子は言いました
ワザと頓珍漢な質問をする 間違った答えで自信満々で自己レスする こうするとこう確率でちげーよバカつって答え教えてくれる本当の馬鹿が釣れる
そうまでして人に頭を下げたくないの? 安いプライド守るために必死だなw
563 :
デフォルトの名無しさん :2011/10/18(火) 20:42:48.17
564 :
デフォルトの名無しさん :2011/10/18(火) 20:43:09.85
windowsでC言語のプログラムできないかな?
565 :
デフォルトの名無しさん :2011/10/18(火) 20:44:14.31
>>562 いやいや、教える側はつけあがるからね。
"こんな事も分からないの!?!?"こんな事言う奴はぶん殴られてOK。
>>565 高校出ても小学校の問題解けなかったりするから難しい話だな
えてしてそういう奴ほど
>>565 っぽい
>>564 VC++でも拡張子を.cにすればCでコンパイルしてくれるはず
一番楽なのはcodepad使う。これならiPadだってプログラミングできる。
569 :
デフォルトの名無しさん :2011/10/18(火) 20:56:23.47
女『車のエンジンがかからないの…』 男『あらら?バッテリーかな?ライトは点く?』 女『昨日まではちゃんと動いてたのに。なんでいきなり動かなくなっちゃうんだろう。』 男『トラブルって怖いよね。で、バッテリーかどうか知りたいんだけどライトは点く?』 女『今日は○○まで行かなきゃならないから車使えないと困るのに』 男『それは困ったね。どう?ライトは点く?』 女『前に乗ってた車はこんな事無かったのに。こんなのに買い替えなきゃよかった。』 男『…ライトは点く?点かない?』 女『○時に約束だからまだ時間あるけどこのままじゃ困る。』 男『そうだね。で、ライトはどうかな?点くかな?』 女『え?ごめんよく聞こえなかった』 男『あ、えーと、、ライトは点くかな?』 女『何で?』
男『あ、えーと、エンジン掛からないんだよね?バッテリーがあがってるかも知れないから』 女『何の?』 男『え?』 女『ん?』 男『車のバッテリーがあがってるかどうか知りたいから、ライト点けてみてくれないかな?』 女『別にいいけど。でもバッテリーあがってたらライト点かないよね?』 男『いや、だから。それを知りたいからライト点けてみて欲しいんだけど。』 女『もしかしてちょっと怒ってる?』 男『いや別に怒ってはないけど?』 女『怒ってるじゃん。何で怒ってるの?』 男『だから怒ってないです』 女『何か悪いこと言いました?言ってくれれば謝りますけど?』 男『大丈夫だから。怒ってないから。大丈夫、大丈夫だから』 女『何が大丈夫なの?』 男『バッテリーの話だったよね?』 女『車でしょ?』 男『ああそう車の話だった』 女『もう、男って人の話聞かないんだから』 男『ごめん、ごめん。で、ライト点く?』 女『やっぱ怒ってんじゃん』 男『怒ってないってば』 女『絶対怒ってる。何カリカリしてるの? 人が大変な時に!』 男『いや、俺はただライトが付くかどうかを…』 女『話を逸らさないで! ライトがどうこうじゃなくて今あなたの話をしてるの!』
>>559 本を読んで自習「できる」ってのも一つの能力なんだよな。
俺みたいにCの本を30冊以上買って読んでも
書けるのはハローワールドだけというとんでもないのもいる。
>>572 ハローワールドだけで済まされるのは2〜3冊までだろう
なんで30冊も買っちゃったの?
さすがにジョークだろう
変数の定義や制御文を覚えたけど、それから先何をすればいいのかわからん 何ができるのかもわからん
まず、何がやりたいか決めるんだ!
他人のPCに侵入してヘローワールドさせるプログラムなら入門書30冊では難しい
ハローワルドってwwネタ乙 チンパンジーに反復練習させて仕込んだらできるんじゃないかwww? そんな俺も未だにゲーム作れないがw
ならC++プログラムからnsfの再生ができるdllライブラリを作ってください 自作ゲームでnsf鳴らしたいんだ
ハローワークって出して
はっきりいってゲームはかなり難しい部類だよ
撒き餌さ投稿ばっかだな。
えささ?
撒き餌(まきえ) 捲き餌さ(まきえさ) よし、大丈夫だ、うちのFEP(死語)
>>573 買った本がわからなかったから別の本を買った。
それを繰り返したらこうなった。
K&Rの緑と白から始まって足かけ何十年だろ。
今年も2冊くらい買ったがモノにならん。
Cのセンスがないんだろうなあ。
N88BASIC→アセンブラ→C言語 この順に学べばOK!
>>533 たしかに、ぐぐったらそんなに当たり前の授業ではないようだった。
三流なんだけどな…
卒論、卒研は玉石混交なんであまり。
インデントスタイルについて研究しました。でも卒業できるんじゃないかね。
>>585 ありがちな住所録(コンソール)でもつくったら
>>434 エディタ、ワープロのキーボードマクロ → エディタのマクロ → AWK → C
アセンブラは、NEC PC-98でリセットボタンのある機種でやったことがあるよ
暴走したらリセットをおしました
情報系だけど卒論何書かされるんだろ プログラミング書いて提出何てありえないだろうしww 怖いなぁ・・
プログラミングを書くってなんか違うような
strtok, scanfがきにいらないから自作してみるとか
いや光とか結局工学系の事やるんだろうな・・ プログラミングは道具にすぎない・・
C言語を一から覚えるのにオススメの本ある? Cが覚えられなくて改造コードを作る毎日orz
>>594 クライイング・ザ・C言語って本おすすめしない
>>594 「改造コード」か
悪いことしてる自覚持てよ
最近の質問の印象 | | | | | | | | | | || | | | | | レ | | | | | J || | | | | | J | | | し || | | | レ | | レ| || J | J し | | || J | し J| J レ /V\ /◎;;;,;,,,,ヽ _ ム::::(l|l゚Д゚)| …うわぁ ヽツ.(ノ::::::::::.:::::.:..|) ヾソ:::::::::::::::::.:ノ ` ー U'"U'
>>474 昔々、MS-DOS の時代ならば、OS の勉強をすることが、即アセンブリ言語を習得することだったんですけれども、今の時代はどうやってアセンブリ言語を勉強すればいいんでしょうかね。
>>447 ISO/IEC を調べていますのでしばしお待ちを。
>>549 >言い換えると、書籍とコンピュータ以外は
>批判有りで有限にしか対話してくれない。
残念ながら、対偶になっていません。論理学の勉強をお勧めします。
>>600 バグだらけのプログラムしか書けないQが何を偉そうに「論理学」だあ?
千年早ええっつーの
>>601 即席で書いてるせいもあり多少のバグが混入して残念な想いではありますが、「バグだらけのコードしか書けない」とはあんまりですねえ。
それにしても最近は宿題スレもご無沙汰だ。瞬速で回答がつくので、手をつける隙もありません。すばらしい‥‥‥。
>>598 >
>>474 今の時代はどうやってアセンブリ言語を勉強すればいいんでしょうかね。
取っ掛かりとしては、「Cでコンパイル時にアセンブリソースを出して読む」など。
URLを入力 そのサイトにアクセス タイトルを出力 っていうCUI作りたいんだが、サイトにアクセスってどうすりゃいいんだ?
プログラミングスキルとコミュニケーションスキルは負の相関を持つみたいだね
>>603 今Mac OS Xで main(){puts("Hello World!");} のアセンブリを出してみたら以下のように
なった。ちょっとだけトリッキーw
(インデントとか壊れるかもしれんが単純にコピペ)
.cstring
LC0:
.ascii "Hellow World!!¥0"
.text
.globl _main
_main:
pushl %ebp
movl %esp, %ebp
pushl %ebx
subl $20, %esp
call L3
"L00000000001$pb":
L3:
popl %ebx
leal LC0-"L00000000001$pb"(%ebx), %eax
movl %eax, (%esp)
call _puts
addl $20, %esp
popl %ebx
leave
ret
>>605 現状のまま乏しいリソースを割り振ろうとするか、相乗効果で両方アップを狙うか、にもよるな。
クズは最近アセンブリに手を出した俄か臭がぷんぷんするんだが まともにアセンブリやったことあれば、あんな無駄だらけのコードは普通は書けない
611 :
デフォルトの名無しさん :2011/10/19(水) 11:25:20.09
なんでmunmapをしないとclose後も書き込み出来るの?
>>610 だからQは自分を大きく見せようと平気で嘘をつく自己愛性人格障害なんだってば
linuxのGCCで教えてください。 /dev/ttyAM0というデバイスファイルがあります。 このファイルはデバイスがあってなくても存在します。 C言語でこのデバイスに関連付けされている、機器が存在するか否かを判断するには、 どうすればよいのでしょうか?
解決しました。 普通にOPENすれば良いだけでした。
>>611 closeはファイルディスクリプタでの参照を閉じるだけで仮想メモリ空間での参照は
munmapするまで残っているから。
とか適当に答えてみるw
いいからさっさと死ねよ
心無い一言に泣いている人もいるんです。
うざいからNG設定したわ
620 :
デフォルトの名無しさん :2011/10/19(水) 22:31:56.61
日下部陽一もそうだが 唯一ありがたいことはちゃんと名乗ることだな。 NGワードで簡単にあぼんできる。
音楽流したり止めたりするプログラム教えてください
DirectX
623 :
デフォルトの名無しさん :2011/10/19(水) 23:16:25.76
戻り値ってのがなにかさっぱりわかんねえ 理解しなきゃいけないもんなのかすらわからない いつも形式的にreturn 0;って全部に書いちゃってるけどやはり理解したい どの本やサイト見てもなんかフワフワしてるから誰かわかりやすく教えてください‥‥
必要ないならvoidにするといいんだよ!
>>623 関数の実行結果を値として受け取れる。
足し算関数なら、合計の値。
文字検索なら、見つかった位置(あるいは存在しないよとか)
サブルーチンの場合は、実行結果の成功・失敗
626 :
デフォルトの名無しさん :2011/10/19(水) 23:29:50.18
>>625 戻り値がないと関数が実行されてもこちら側に受け取ることができない、というわけですね
とてもよくわかりました
ありがとう!
627 :
デフォルトの名無しさん :2011/10/19(水) 23:30:53.87
C言語の入門書レベルで作れるような結構大きめで複雑なプログラム組みたいんだけど何かいい案無い?
628 :
デフォルトの名無しさん :2011/10/19(水) 23:33:22.10
b
629 :
94 :2011/10/19(水) 23:33:46.72
>>623 main() の戻り値のことなら。
そのプログラム(main())を呼び出すプログラムなりシェルスクリプトなりが main() の戻り値を使用しているのなら、それにあわせて書いてあげればいいでしょう。
もしmain() を呼び出すプログラムなりシェルスクリプトなりが main() の戻り値を使用しそうにないのなら、適当に、あるいは書かなくても問題ないでしょう。
作法はあるようですが(
>>516 ) ナーバスになることはないと思います。
main() 以外の戻り値については、どなたかお願いします。
煽ったり叩いたりするために便利ではありますが。
>>627 定番としてはマスターマインド(ヒットアンドブロー)とか
631 :
デフォルトの名無しさん :2011/10/19(水) 23:42:23.46
>>629 すいません
かなりの初心者なのでそこまでは理解できなさそうです
ただ、戻り値を説明しているところがあまりにも用語などで難しくされたものが多かったので質問させてもらい無事把握することができました
またそれなりに知識がついたら読み返させて頂きます。ありがとう
そんな慌てて逃げなくてもいいじゃん ゆっくりしてってね!
断る
634 :
デフォルトの名無しさん :2011/10/19(水) 23:46:56.32
>>630 ぐぐってみたけど結構面白そうだな
できるか分かんないけど頑張ってみるわ
thx
635 :
デフォルトの名無しさん :2011/10/19(水) 23:48:28.78
いえいえ
$ echo "int main(void){ return 0; }" > test.c $ cc test.c ; ./a.exe; echo $? 0 $ echo "int main(void){ return 1; }" > test.c $ cc test.c ; ./a.exe; echo $? 1
dxライブラリ
sdl
>>627 設定ファイルのとおりに、文字列を置換するプログラム
/* 設定ファイル(第一のフィールドは置換対象の文字列、第二のフィールドは置換文字列) */
コンサドーレ札幌 札 幌
川崎フロンターレ 川 崎
ヴィッセル神戸 神 戸
名古屋グランパス 名古屋
0 0
1 1
2 2
3 3
A A
B B
C C
D D
a a
b b
c c
d d
, ,
≪ <
≫ >
* *
設定ファイルのコメントは、たとえば、行頭に#があればコメントとみなす
644 :
デフォルトの名無しさん :2011/10/20(木) 00:52:33.19
>623 数値やデータを関数に渡して(引数)、関数内で色々処理して、結果を関数呼び出し元に返す(戻り値)。 数学のsin、cosは習ったか? float sin(float kakudo /*引数*/) { float kotae; /* sin値計算 */ return kotae;/*戻り値*/ } ... printf ("%f\n",sin(x));
>623 ----- return_test.c --------- int main(void) { return 10;/*戻り値*/ } --------------------------- ------- return_bat_test.bat ----- return_test.exe echo %ERRORLEVEL% pause -----------------------------
647 :
デフォルトの名無しさん :2011/10/20(木) 01:10:57.13
>>645 多分お前みたいな説明ならそのへんのサイト見る方がましだと思うぞ
用語並べた受け売りでしかないな
>>644 設定ファイルとは、第一のフィールドに置換対象の文字列を記載し、第二のフィールドは置換文字列を記載したテキストファイルです
>647 その辺のサイト紹介してやれよ。
非難するだけならチョンでも出来る。
かみ合わない声闘はチョンの十八番
652 :
デフォルトの名無しさん :2011/10/20(木) 02:25:31.35
C言語とやらの代表例となるものをあげてくれんかの
gcc
658 :
デフォルトの名無しさん :2011/10/20(木) 11:59:48.52
MS-DOS で思考ルーチン使ったオセロとか動かすことってできる?
>>658 充分可能かと。実際、MS-DOSパソコン時代にゲームとして販売されていたし。
まぁ、そのこと自体Cが関係するわけでもないから続けたいなら適当なスレへ。
660 :
デフォルトの名無しさん :2011/10/20(木) 12:10:02.64
>>659 そうなのか
サンクス
実はC言語で思考ルーチンつくってみようかなと思って
DOSだと作れないものってあるの?
パソコンの上で動くものなら何でも作れる。OS(Windows)すら可能
663 :
デフォルトの名無しさん :2011/10/20(木) 13:07:22.00
20.314のdouble型があり、 これを整数と小数にわけて別々の配列に入れたいのですが、 どうしたらいいですか。 例 配列A=20 配列B=0.314
整数部分を確定して引く。
>>664 は、正しく無い場合がある。
問題は、精度を何処まで許すかによる。
>>663 、精度は精度は何処まで期待するのか?
大事なので、2回言って(ry
667 :
デフォルトの名無しさん :2011/10/20(木) 13:26:00.62
>>665 精度は、配列に入れた後に計算をするのである程度あったほうがいいです。
>>663 では配列に入れたいといっていますが、
計算するので、配列ではなく
整数部分をint型、小数部分をfloat(double)型にしたいと思います。
668 :
デフォルトの名無しさん :2011/10/20(木) 13:34:37.73
667です。 modfを使ったらできました。 ありがとうございました。 #include <stdio.h> #include <stdlib.h> #include <math.h> /* main */ int main(void) { double x, y; double iptr; x = 3.1415; y = modf(x, &iptr); printf("seisu is : %.0f \n syosu is : %.4f\n", iptr, y); return 0; }
x = 3.1415; n = (int) x; y = x-n; では異常にデカイ数はダメと言うことか。
modf()が正解ですよ。フォーマットのビット演算で実数部、小数部取出しているので誤差無しだ。
672 :
デフォルトの名無しさん :2011/10/20(木) 15:45:49.62
現在、数字(int,doubleなど)を 配列に入れるために、sprintfをつかって文字列にし、 strcatで配列に結合させるプログラムを書いています。 一度なら大丈夫なのですが、for文で何回か回すと、 値が大きく増えてしまったり、変な数字になってしまいます。 数字を文字列にする場合に、sprintfを使わないほうがいいのでしょうか。
sprintfさんは悪くないと思う
sprintf()を使っているのなら、strcat()なんていらない。
君の恥ずかしいコードを全て晒しなさい
676 :
デフォルトの名無しさん :2011/10/20(木) 16:34:33.27
voidは値を返さない場合に使うらしいですがなぜ値を返さなくていい場合が存在するのかイメージが出来なくて困っています なにをするにせよ結果を受け取らない限り此方には何もわからないんじゃないか、と思ってしまいます 値を返さなくていいプログラム、とはどういうものですか? そもそも何か考え方が間違っているのでしょうか‥‥
677 :
デフォルトの名無しさん :2011/10/20(木) 16:37:25.60
コード貼り付けます。 #include<stdio.h> #include<math.h> #include<string.h> int main(void){ double syosu_a; double seisu_b; double syosu_aa; double seisu_bb; double syosu_roku_aa; char seisu_sp_aa[20]=""; char syosu_sp_aa[20]=""; double syosu_roku_bb; char seisu_sp_bb[20]=""; char syosu_sp_bb[20]=""; double b=123.432; double a=19.920; int count;
678 :
デフォルトの名無しさん :2011/10/20(木) 16:42:16.09
続きです。 for(count=0;count<17;count++){ printf("---------------------------------\n"); syosu_a=modf(a,&seisu_b); printf("seisu is : %d \nsyosu is : %.4f\n",(int)seisu_b, syosu_a); syosu_roku_aa=syosu_a*60; printf("syosu_roku_aa is : %f\n",syosu_roku_aa); sprintf(seisu_sp_aa,"%s%d",seisu_sp_aa,(int)seisu_b); sprintf(syosu_sp_aa,"%s%f",syosu_sp_aa,syosu_roku_aa); strcat(seisu_sp_aa,syosu_sp_aa); printf("ABC is : %s\n\n",seisu_sp_aa); seisu_sp_aa[0]=0;
679 :
デフォルトの名無しさん :2011/10/20(木) 16:44:22.97
最後です。 syosu_aa=modf(b,&seisu_bb); printf("seisu is : %d \n syosu is : %.4f\n",(int)seisu_bb, syosu_aa); syosu_roku_bb=syosu_aa*60; printf("syosu_roku_bb is : %f\n",syosu_roku_bb); sprintf(seisu_sp_bb,"%s%d",seisu_sp_bb,(int)seisu_bb); sprintf(syosu_sp_bb,"%s%f",syosu_sp_bb,syosu_roku_bb); strcat(seisu_sp_bb,syosu_sp_bb); printf("QWE is : %s\n",seisu_sp_bb); seisu_sp_bb[0]=0; } }
>>676 画面に出力したり、ファイルに出力したりとかで処理が終わったら
別に値を返してもらわなくったっていいよね
あとは複数の値を返却したい場合、戻り値を使わずにポインタ渡しだけで済ませたりとか
>>679 >sprintf(seisu_sp_aa,"%s%d",seisu_sp_aa,(int)seisu_b);
第一引き数を取り込むのは鼻から悪魔。
どうしてもseisu_sp_aaに追記したいのなら、
sprintf(seisu_sp_aa + strlen(seisu_sp_aa, "%d", (int) seisu_b);
か
sprintf(strchr(seisu_sp_aa, '\0'), "%d", (int) seisu_b);
とする。
で、ループを回る間seisu_sp_aaはクリアしているのにsyosu_sp_aaをクリアしてないから溢れている。
682 :
デフォルトの名無しさん :2011/10/20(木) 17:03:46.12
>>680 ありがとうございます
では逆にvoidを使うのはどういった時なのでしょうか
本などには引数を持たない時と書かれているんですが引数を持たない関数、というのがピンと来ません
それも加えて教えてもらえると嬉しいです
>>679 >syosu_a=modf(a,&seisu_b);
変数名のルールが判らん。全部_aに統一しないのは何で? ややこしくてかなわん。
途中経過が要らないなら、
sprintf(seisu_sp_aa, "%d%f", (int) seisu_b, syosu_a * 60);
でよさそうだけど……
>>682 関数の戻り値の型がvoidの場合は>680。
引き数リストがvoidの場合は、例えば一文字キー入力のように副作用だけでできている関数など。
685 :
683 :2011/10/20(木) 17:12:44.13
ああ、途中だった。 小数部だけ60倍する意味も判らん。
686 :
デフォルトの名無しさん :2011/10/20(木) 17:14:53.09
>>684 ああーよくわかりました!
ありがとうございます
よく考えてみたら、C言語はUNIXをアセンブラから 移植するために開発された言語なんだから 少なくともオペレーティングシステムをアセンブラで書ける 技量を持った人でないと理解できないに決まってるわけだよ。 そりゃ素人が何十年学んでも無理だ罠。 あきらめてアセンブラでOS書くことから修行する。
そんなことしなくていいようにC言語は開発されたんだよ。
689 :
デフォルトの名無しさん :2011/10/20(木) 18:52:50.78
確かにそれじゃ本末転倒だよな
うん
691 :
デフォルトの名無しさん :2011/10/20(木) 19:29:31.63
>>681 ありがとうございます。
syosu_sp_aaもクリアしました。
>>683 ありがとうございます。
変数名のルールは、特に決めていませんでした。
どんどん増えてわかりづらくなってしまいました。
sprintf(seisu_sp_aa, "%d%f", (int) seisu_b, syosu_a * 60);
これでできました。
小数部だけ60倍するのは、貼り付けたコードは、一部でしたので
後々必要になってくるからです。
ありがとうございました。
692 :
デフォルトの名無しさん :2011/10/20(木) 20:43:43.04
いえいえ
693 :
デフォルトの名無しさん :2011/10/20(木) 21:05:07.87
入力時の質問 例えば 年齢: 歳 と表示させて":"と"歳"の間に文字やら数字やら入力させることってできる?
うん
695 :
デフォルトの名無しさん :2011/10/20(木) 21:14:33.17
>>663 int a;
double b=20.314, c, d;
c=b;
a=(int)c;
d=b-a;
printf("%d,%f",a ,d);
で
20,0.314000
て表示されるはず
696 :
デフォルトの名無しさん :2011/10/20(木) 21:15:55.01
うん
698 :
デフォルトの名無しさん :2011/10/20(木) 21:16:51.61
いいよ
700 :
デフォルトの名無しさん :2011/10/20(木) 21:21:44.43
cursesとかじゃないの
環境を聞いてからにした方が
年齢: 歳 って表示した後にsystem("clear");して 年齢:6歳 って表示するだけじゃねーの
>>693 puts("年齢: 歳");
for(i = 0; i != 100; ++i)
puts("");
printf("年齢:%d歳", age);
705 :
デフォルトの名無しさん :2011/10/20(木) 22:25:48.65
a.hっていうヘッダーファイルで extern HWND hWnd; って変数宣言して、 そのa.hをインクルードしたファイル(b.cpp)の局所変数でhWndっていう変数があるんだけど 局所変数だから、そっちが優先されて使われるから、モウマンタイだとおもってたんだけど、 hWndがa.objとb.objで重複宣言されているってエラーがでるんだけど、 そういうもんなの?
こんなんじゃね? #include <stdio.h> int main(void){ int age; printf("\n年齢: 歳\r年齢: "); fflush(stdout); scanf("%d", &age); printf("\nage=%d\n", age); return 0; }
>>705 両方にあるんだろ、有名コンパイラは滅多に嘘つかない。
>>707 関数の仮引数がhWndですけど、それってローカル変数だけど
駄目なんすか?
問題が起るソース出せ。又は、問題が起る最小のソースにして出せ。 作ってる間に気がつくと思うが、気がつかなかったらチェックする。
ゲームなんか60分の1秒毎にやってるわけだが
extern なんぞ使わなくともよい。extern を使うことこそミス・誤解への第一歩。
713 :
デフォルトの名無しさん :2011/10/20(木) 23:33:14.45
すごいな。このスレにいるだけでそんなことも言えるようになるんだな 俺には恥ずかしすぎてとてもできない。
昔、VRAM直書きしたことあったな
たまにいる、ソースファイル1つで総て、と言う貴重な人が…
自信満々に嘘を吐くのが得意
717 :
デフォルトの名無しさん :2011/10/20(木) 23:38:06.61
719 :
デフォルトの名無しさん :2011/10/20(木) 23:43:22.38
>>706 thx
てか\rってどういう動作するの?
確か"復帰"だったよな
txtファイルの任意の行に文字列を挿入するプログラムを教えて下さい
>>719 行頭にキャレットを移す
APIを使えばもっといろいろとできる
externまみれにするのもどうかと思うがな
>>711 コンソールを秒間60フレームで書き換えることも辞さない雰囲気だな。
726 :
デフォルトの名無しさん :2011/10/21(金) 00:46:06.58
>>726 タイプライターの動画を見ればイメージしやすいと思う
gcc-coreとcc1はどういう関係なんでしょう? gcc-coreというツール群の中のcc1というサブプログラムという認識で あっていますか?
729 :
デフォルトの名無しさん :2011/10/21(金) 02:52:16.91
x=x+1 を、 x++ とする利点を、 ソースコードを短くする以外で教えてください
>>729 変数名が長くなってもインクリメントであることがすぐに分かる
わかりやすい。 x=x+1なんて普通書かないから、ひょっとしてx=y+1と間違ってんのか?とか 読む人を疑心暗鬼にからせない。
733 :
デフォルトの名無しさん :2011/10/21(金) 03:08:43.27
いや、すまん。忘れてくれ。
x += 1
>>729 配列の添え字としてi++をつかえますね
for(i = 0; i < 10; i = i + 1) {
a[i] = 0;
}
for(i = 0; i < 10; i++) {
a[i] = 0;
}
for(i = 0; i < 10; ) {
a[i++] = 0;
}
#include <stdio.h> int main(void) { char c[5]; int i; i = 0; c[i++] = 'w'; c[i++] = 'o'; c[i++] = 'r'; c[i++] = 'd'; c[i] = '\0'; puts(c); return 0; }
まぁ、 i = -1; c[i = i + 1] = 'w'; とかもできるわけだが。
>>729 ・短くなることに含まれるかもしれないが、タイプミスしにくい。
・Cのイディオムなので、読み易くなる。
→x = x + 10; とのタイプミスなどを視覚的に疑い安くなる。
・CPUのインストラクションセットに、インクリメントが含まれている場合があり、
最適化しやすい。
し〜プラプラにスムーズに移行できる
(´・ω・`)へえ
742 :
186 :2011/10/21(金) 12:07:47.25
へえプラプラ
名前欄に嘘書いて何したいんだ?
学校の課題のように問題を解いてそのプログラムを提出すると、 それが正しいかどうかを見てくれるサイトってありますか?
ここ
宿題スレに問題と答えを書くと、暇な人が突っ込んでくれるかもしれない
748 :
デフォルトの名無しさん :2011/10/21(金) 16:56:54.55
正しいかどうか見る観点が必ずしも「題意のとおり」とは限らない それを承知のうえ、というより楽しむのがここ 与太話に発展するのがいやならやめとけ
>>713 >>715 >>716 http://pc12.2ch.net/tech/kako/1201/12011/1201153965.html の
>>139 >あまり知られていないが、これは 「仮定義(tentative definition)」 という仕様。
>extern も static もついていない、初期化を伴わないグローバル変数の宣言は 「仮定義」 と見なされる。
>対する、extern も static もついていない、初期化を伴うグローバル変数の宣言は 「外部定義(external definition)」 と見なされる。
>外部定義は必ず実体定義を伴う。
>外部定義が複数あると、二重定義となりエラーとなる。
>しかし、仮定義は他に実体定義がなければ実体を定義し、
>他に実体定義があれば実体定義を伴わない単なる宣言と見なされる。
>複数の仮定義を書いた場合、実体は1つだけ定義され、それらの仮定義は実体を共有する。
>>715 むしろモジュールが20も30もになると、extern なんて使ってらんないのですけど、ご経験はないのでしょうか?
>>714 そういうのはありますね。
実務経験ゼロの中年ニートが何かほざいてるよ
752 :
デフォルトの名無しさん :2011/10/21(金) 20:43:24.10
年収ゼロが実務とか腹筋崩壊さすなよ
まさか実務経験って、モリタポ500円乞食のことか?w
シープラプラってなんなん?
すいません質問です。 WinAPIを使おうと思ったのですが↓でコンパイルするとエラーが出ます。 どうすればいいのでしょうか? /*******************************************/ #include <Windows.h> int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR 1pCmdLine, int nCmdShow ){ MessageBox( NULL,"test","test", MB_OK); return 0; } /*********************************************/ /**********エラーメッセージ******************* Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland s.c: エラー E2293 s.c 6: ) が必要 *** 1 errors in Compile *** *********************************************/
1pCmdLine
変数名の頭文字に数字は使えない
>>757-758 ご返答ありがとうございます。
ではどのようにすればうまくいくのでしょうか?
1pCmdLine → pCmdLineにするとたくさんエラーが出ました。
/*************************エラーメッセージ*************************************
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
s.c:
警告 W8057 s.c 11: パラメータ 'hInstance' は一度も使用されない(関数 WinMain )
警告 W8057 s.c 11: パラメータ 'hPrevInstance' は一度も使用されない(関数 WinMain
)
警告 W8057 s.c 11: パラメータ 'pCmdLine' は一度も使用されない(関数 WinMain )
警告 W8057 s.c 11: パラメータ 'nCmdShow' は一度も使用されない(関数 WinMain )
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照)
/******************************************************************************
760 :
759 :2011/10/21(金) 21:33:40.23
ちなみにOSはWidows7 32bitです
Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照)
>>759 警告はとりあえず無視して良い。
記憶で書いているけど、Windows用にコンパイルスイッチが必要だったはず。
-Wだったかな?
今は通常のCとしてコンパイルしようとしてmainが無いので、文句を言っている。
763 :
759 :2011/10/21(金) 21:49:19.84
>>7 その通りでやったら無事いけました!
ありがとうございます!
いえいえ
横レスで、蛇足というかなんというかだけれど、写し間違いだと思う。 ×1p(いち・ぴー) ○lp(える・ぴー)
質問お願いします. 配列a[1000]に0か1をランダムに選択していきたいのですが, int a[1000]={ {0 + rand() % (2 - 0),0 + rand() % (2 - 0),…} }; といったようにこれを1000回繰り返さないといけないのでしょうか? なにかいい方法があれば教えてください.
文字の配列の終わりに\0がセットされているように、 main関数のargv[]配列の最終要素にはヌルポインタが セットされているという記述を本で読みましたが、マジでしょうか? それは誰がセットしてくれているのでしょうか? ポインタの配列を作る場合、そうしないといけないという決まりが あるのでしょうか?
1000回書くのが嫌ということなら for (i=0; i<1000; i++) a[i] = rand()%2;
ループ
>>767 それが規格で決まってるかどうかは知らないけど、決まってるなら便利だなぁ。
自分でポインタ配列作るときはそんな決まりはないよ。
ただ、センチネル(門番、番兵)という手法があるので、そうすることはある。
Cの配列初期化に非定数は使えんよ。0/1千個配列なんてそもそもの要求を見直した方がいいと思うけど int a[1000]={0};unsigned cnt=rand()%1000;for(unsigned i=0;i<cnt;++i){unsigned n=rand()%1000;a[n]=~(a[n]&1);}
>>768 >>769 そうですよね!
気づきませんでした.
あほな質問に答えて頂きありがとうございました.
いえいえ
俺は774になる
775 :
デフォルトの名無しさん :2011/10/22(土) 00:42:58.23
srand しないなら 1000/CHAR_BITS バイトの定数でよかんべ 起点を変えるだけで srand とほとんど区別がつかなくなるし
(´・ω・`)ふ〜ん
>>767 私は規格書を参照できないのですが、argv[argc]はNULLでなければならないとなっています。
NULLをセットするのはコマンドライン引数をセットする人と同じく、処理系です。
コマンドライン引数を1つずつ処理するときのイディオムは
for (i = 0; i < argc; i++) {
// argv[i]を参照
}
ですが、argv[argc] == NULLなので、Javaと同じように以下でもOK。
while (argv++) {
// *argvを参照
}
>>767 では規格の面から裏打ちを。
ISO/IEC 9899:1999 5.1.2.2.1.2
argv[argc] shall be a null pointer.
結局出来ることは他所からのコピペだけで、頭を使うってことがないんだよな
783 :
デフォルトの名無しさん :2011/10/22(土) 02:15:30.53
ポインタ使うメリットって何? 嫌でも学ばなきゃならない時がきますか?
for(;;){}のループと while(1){}のループどっちが好きですか
コピペが彼の頭を使う限界なんだろw
前のQよりは今のQのほうがずっとマシ 前のは本当にアレだった
>>787 それは興味深い。
前のQZのいつ頃あるいはどんなところがアレだったか、ちょこっとだけ教えてくださいませんか?
自分の妄想をソースにしてたよ アレは直らないから中の人がバトンタッチしたと思ってる
今も昔もゴミ以下なことはかわってないだろ
792 :
デフォルトの名無しさん :2011/10/22(土) 06:02:03.01
static変数とグローバル変数の区別がいまいちつかないのですがどなたか簡単に教えていただけませんか
ファイルスコープと全体スコープ
1.staticをつけたら、それが含まれるファイル内でのみ可視になる(他のファイルからみえない。情報を隠蔽できる) 2.関数からでたら関数内の変数は、もうつかえないが、 関数内の変数にstaticをつけておけば、また関数にはいれば、前の状態が保持されている
795 :
デフォルトの名無しさん :2011/10/22(土) 07:17:48.47
{ 関数A 関数A このブロック間は変数の結果が初期化されず保持 } { 関数A ブロックを出ているので初期化 } 関数A スタティック変数 わかりにくいもしれないですがこういうことであってますか? これがもしグローバル関数であればブロックを出てからも適応されるということですかね?
>>749 前スレでも書いたけど、規格では仮定義の挙動は1つの翻訳内についてしか書かれていないから
本来その動作は未定義でしょう。
もちろん、UNIXやcommon extensionで複数定義が認められているから、ほとんどの処理系で
動作はするでしょうけど、規格厳密合致プログラム(strictly conforming program)としては
アウトだと思う。
初心者に規格厳密合致プログラムを薦めるべきかまではわからんけど。
>>795 何言ってるか不明。変数はどこにある?
何言っているか不明な時点で、何か誤解があるように思う。
とりあえずブロック内とトップレベルで、staticの意味が変わってくる。
・トップレベルの場合
static無しの場合: 外部結合(プログラム全体から参照できる。)
static有りの場合: 内部結合(ソースファイル内からのみ参照できる。)
・ブロック内の場合
static無しの場合: ブロックに入るたびにスタックに積まれる。
static有りの場合: プログラム開始時から特定の領域のみ確保される。(結果的に値が維持される)
センスがないから諦めれ
799 :
デフォルトの名無しさん :2011/10/22(土) 08:22:08.92
#include<stdio.h> int add(int); int main() { int sum; sum = add(5); printf("sum = %d¥n", sum); sum = add(10); printf("sum = %d¥n", sum); return 0; } int add(int n) { static int total = 0; total += n; return total; } 携帯端末からだったので書き方悪すぎましたすいません 例えばこういう場合なら{}でだけ値が維持されるってことですよね? グローバル関数だとしても維持されるんじゃないのでしょうか?
>561 名前:デフォルトの名無しさん[sage] 投稿日:2011/10/18(火) 20:40:21.79 >ワザと頓珍漢な質問をする >間違った答えで自信満々で自己レスする >こうするとこう確率でちげーよバカつって答え教えてくれる本当の馬鹿が釣れる
801 :
デフォルトの名無しさん :2011/10/22(土) 08:46:38.56
そもそも教えてあげられる答えがあるならそれは頓珍漢な質問じゃないんじゃねえの? パンダはなんでキリンなの?とか聞かれても答えようがないから頓珍漢と言えるんだろうが
親切心で手を差し伸べても裏で舌を出しているような世の中だよ
803 :
デフォルトの名無しさん :2011/10/22(土) 10:32:51.36
>>803 printf()の引数に積んだ時にintに変換されてるから。
i16 & 0xffffとすればいい。
805 :
デフォルトの名無しさん :2011/10/22(土) 11:24:29.53
>>805 int/shortは符号付だからだよ。
unsigned int/unsigned shortにすればいい。
807 :
デフォルトの名無しさん :2011/10/22(土) 11:26:20.11
符号付のshort を int に代入する場合は i32 = i16 & 0xffff; としなければならないということですか?
>>807 目的による。
符号拡張したいかどうか。
809 :
デフォルトの名無しさん :2011/10/22(土) 11:33:14.97
811 :
デフォルトの名無しさん :2011/10/22(土) 11:36:56.46
812 :
デフォルトの名無しさん :2011/10/22(土) 11:38:08.04
813 :
デフォルトの名無しさん :2011/10/22(土) 12:31:30.23
ファイル1があり、そこからデータを読み込んで、プログラムAで処理しているのですが、 ファイル1が更新されたときに、プログラムを動かすことはできますか?
もちろんできます。
ファイルを監視するプログラムを作り常駐させてファイル1に変更があったらAを起動させる
常にファイルに追記なら、定期的にプログラムAでサイズチェックをして、前回より大きくなってたら処理するとか。 書き直しなら、更新時間をチェックして、前回の処理以降に更新してたら処理するとか。
817 :
デフォルトの名無しさん :2011/10/22(土) 12:44:23.62
818 :
デフォルトの名無しさん :2011/10/22(土) 12:51:00.03
/ ̄\
| ^o^ | < コーラ おいしいです
\_[]⊂/)
_| |/ |
| /
/ ̄\
| | < それは しょうゆ です
\_/
_| |_
| |
/ ̄ ̄ ̄ ̄\
/;;:: ::;ヽ
|;;:: ィ●ァ ィ●ァ::;;|
|;;:: ::;;|
|;;:: c{ っ ::;;|
|;;:: __ ::;;;|
ヽ;;:: ー ::;;/
\;;:: ::;;/
|;;:: ::;;|
|;;:: ::;;|
/ ̄ ̄ ̄  ̄ ̄ ̄\
|;;:: ::;;|
|;;:: ::;;|
>>825
820 :
デフォルトの名無しさん :2011/10/22(土) 14:29:53.32
すいません、質問です。 WinAPIのプログラムと普通のC言語のプログラムを 組み合わせることは可能でしょうか? 例えばですが、 #include <Windows.h> #include <stdio.h> int main(){ ・・・・・・・ if(a==1)→WINAPI WinMain()で作ったプログラムへ飛んでゲームが始まる みたいな感じで、普通のC言語のプログラムでif分岐などを使って WinAPIをユーザ関数みたいに使えたらいいなと思っています。
>>820 >if(a==1)→WINAPI WinMain()で作ったプログラムへ飛んでゲームが始まる
でなかった時は、何をしたいの?
普通に可能です
823 :
デフォルトの名無しさん :2011/10/22(土) 15:16:33.69
>>821 まだ考えていませんが、if(a==2)なら別のWINAPI WinMain()で作ったプログラムへ飛んで
別のゲームを始めたり、普通のC言語で作ったゲームのプログラムへ飛ばしたり
したいです。
>>822 そうなんですか!
どのように記述すればよいか教えてもらえないでしょうか?
824 :
デフォルトの名無しさん :2011/10/22(土) 15:45:18.18
system("gikoparo.exe");
>>818 ちなみに、OSによっては「ファイルが更新されたら教えてくれるサービス」
みたいのがあって、そういうOS限定ならそういうのを使うこともできる。
int MyAppMain(HINSTANCE hThisApp, void const * pArg) { /* ry */ ; return 0 ; } int main(void) { if(a == 1) MyAppMain((HINSTANCE)GetModuleHandle(0), 0) ; return 0 ; }
>>796 未定義なのは、外部宣言のメモリ空間への割付は本来リンカのお仕事だから、という気がしないでもありません。
◆QZaw55cn4cって糞だよなぁ
ありがとうございます。試しに↓のプログラムでコンパイルして実行して見ましたがダメでした。 なにがいけないのでしょうか? #include <stdio.h> #include <Windows.h> int MyAppMain(HINSTANCE hThisApp, void const * pArg) { /* ry */ ; return 0 ; } int main(void) { int a; printf("ゲームを始めるなら1を入力>");scanf("%d",&a); if(a == 1){MyAppMain((HINSTANCE)GetModuleHandle(0), 0);} return 0 ; } /********************************************************************** D:\C_programming>bcc32 -W test.c Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland test.c: 警告 W8057 test.c 4: パラメータ 'hThisApp' は一度も使用されない(関数 MyAppMain ) 警告 W8057 test.c 4: パラメータ 'pArg' は一度も使用されない(関数 MyAppMain ) Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Error: 外部シンボル 'WinMain' が未解決(C:\BORLAND\BCC55\LIB\C0W32.OBJ が参照) D:\C_programming>test 'test' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。
エラー読めよ
Error: 外部シンボル 'WinMain' が未解決(C:\BORLAND\BCC55\LIB\C0W32.OBJ が参照)
どちらかといえば、君はむしろ教わる側ではないかと・・・
彼は教える側の言うことが理解できないから
教える側だと思う奴は、責任もって理解させろよ。 できないなら、教えるなんてやろうと考えるな。
836 :
デフォルトの名無しさん :2011/10/22(土) 20:35:54.03
初心者が初心者に教えるスレはここですか?
初心忘れるべからず
>>833 はい、それはそうだと常々考えています。間違いなく私は教わるほうです。
でも、困っている人がいれば、知りうる限りの情報はお出ししようかと考えています。
>>834 >>796 や
http://hibari.2ch.net/test/read.cgi/tech/1314783907/766 のことならば、折に触れて再考しています。
(規格全部の構成を整理して把握するのはまだできていない)
ただし、昔の .obj とかで考えてみても、モジュール間で共有する変数の最終的なロケーションと最終的なサイズを決めているのはリンカ、という気がしてなりません。
(参照:MS-DOS 6.2 プログラマーズリファレンスマニュアル Vol.1: 付録B インテルオブジェクトモジュールフォーマット: B.12 レコードフォーマットおよび B.14 共有変数の型に関するマイクロソフト表現法)
coff や elf の事情がわかる資料があればいいのですけれども。
>でも、困っている人がいれば、知りうる限りの情報はお出ししようかと考えています。 どちらかというと借り物の知識を無知な人にひけらしたがっているような気がするね。 別にいい人を装うことはないと思うよ
やたらリンクをつけて引用しているけど、本当に内容を理解できてるのかな
>>839 「ひけらしたがって」じゃなくてな「ひけらかしたがって」だぞ俺、自重orz
誰か丁寧にわかりやすくこの場で教えて
>>829 直接は関係ないことだけど、メッセージが「警告」「Error」みたいに日英混ざってるのね。
コンパイラーとリンカーで違うっぽいね。
標準出力から入力って出来る?
0<&2
0<&1
おしりでご飯は食べられない
iPadで言うと、タッチパネルセンサーが標準入力で、ディスプレイが標準出力
>>845 パイプのことだろうか
aの標準出力をbの入力にする
$ a | b
>>852 それは出力を別のアプリの入力に渡してるだけ。
コアラの親が出したう○ちを子コアラが食べるようなもの。
そうまでしてユーカリ食べたいのかと聞いてみたいな
肛門から食べたいと言う話じゃ無いのか?
何者のウンコ喰えば標準出力から入力出来るようになるんだろうな?
ディスプレイからゲームの世界に入りたいって話だろ
○| ̄|○| ̄|○| ̄|_
>>860 ○ 標準出力を入力
× 標準出力から入力
自分で書いてて何言ってるんだか分からんなw 出力からの入力は不可能(浣腸NG) 出力を入力として受け取るのは可能(スカトロOK)
うん
自分でうんこを食って出す永久機関ができないか挑戦してみた けど、うまくいかない。 だれかおかしなところを直してくれ。 main(){ char s[256]; setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); printf("0\n"); for(;;){ fgets(s,sizeof(s),stdin); printf("%d\n",atoi(s)+1); } } で、名前つきパイプAを作って ./a.out >A <A とやってみたがダメだった。 cat A | ./a.out >A もダメだ。どこかでまだバファリンしてるんだろうか。
./a.exe > a < a で動いてるようだが。
マジで? りろんはあってたのか。 環境依存にぶちあたるとは・・・ もはやCは関係なくなったな
ポインタのポインタを学ぶため まずメモリにデータを作り込んでから表示させてみようと 以下のソースを作ってコンパイルしました。 #include <stdio.h> int main () { char **p = { "abc","def","ghi" }; printf("%s\n", **p); p++; printf("%s\n", **p); p++; printf("%s\n", **p); } すると以下の警告が出ますが、コンパイルは通ります。 test01.c: In function ‘main’: test01.c:3: 警告: initialization from incompatible pointer type test01.c:3: 警告: スカラー初期化子内の要素が多すぎます test01.c:3: 警告: (near initialization for ‘p’) test01.c:3: 警告: スカラー初期化子内の要素が多すぎます test01.c:3: 警告: (near initialization for ‘p’) 実行ファイルを実行すると、Segmentation faultと出て終了します。 各文字列が出るはずなのですが、何がまずいのでしょうか。
>>867 char **p = { "abc","def","ghi" };
→
char *p[] = { "abc","def","ghi" };
>>867 >>868 ↓もまずい。
printf("%s\n", **p);
→
printf("%s\n", *p);
それから、p++とは(*p)++を比べてみるのもいいかも。
http://codepad.org/79gN2eY3 エラー E2342 練習用プログラム.c 23: パラメータ 'o' は int * 型として定義されているので int は渡せない(関数 main )
エラー E2342 練習用プログラム.c 23: パラメータ 'p' は int * 型として定義されているので int は渡せない(関数 main )
↑のようなエラーが出てて改善方法がわかりません。
1次元配列を使った関数が分からないので良ければ教えていただきたいです。
>>871 × wairu(a[R],a[R]);
○ wairu(a,a);
int wairu()だから、関数の最後でreturn 0;か何かする。
>>872 分かりました。ありがとうございました。
みんなGetAsyncKeyStateって日本語でどうやって読むの?
まずはお前が日本語を読めるようになってからにしろ
1から7の範囲で乱数を発生させて 4以外の乱数が発生すれば終了としたいのですが なにか良い方法はないでしょうか?
878 :
デフォルトの名無しさん :2011/10/24(月) 15:53:27.90
どんな条件を「良い」というのかによる とりあえずエスパーすると rand() は使うなという縛りがあるんだな?
>>878 int i=4;
if(i=4){
i = rand() % 7 + 1;
printf("%d\n",i);
};
というようにしてうまくいかなくて困ってます.
とりあえず,1,2,3,5,6,7のなかから1つの値をランダムに選択したいです.
>>878 ifじゃなくてwhileでした
int i=4;
while(i=4){
i = rand() % 7 + 1;
printf("%d\n",i);
};
881 :
デフォルトの名無しさん :2011/10/24(月) 16:02:38.67
>>879 答えを貼るのは簡単だが・・・
まずいのが if 文
代入と比較を間違えているし
繰り返すなら if 文じゃなく while 文
そして rand() を実行する前に 4 かどうかはわからない
while(i == 4)
operatorって糞だよね 全部関数で書くべき
885 :
デフォルトの名無しさん :2011/10/24(月) 16:17:20.04
>>877 4 以外で即終了? それとも表示などをしてから終了?
>>879 1,2,3,5,6,7 には 4 が含まれていないので、
4 以外で終了ということは「必ず終了」になる
揚げ足が取りたいのではない
問題を整理せよと言いたい
886 :
デフォルトの名無しさん :2011/10/24(月) 16:49:58.52
ファイル(テキスト)で、5秒ずつデータが更新(増える)されるとします。 5秒後に処理するときに、増えたところから処理することは可能でしょうか。 例 A →5秒後 A A A B B こんな感じでBから処理できますか。 またどのようにしたらいいでしょうか。 お願いいたします。
入門編や初心者にお勧めの本はよくありますがそこから更に先にすこし踏み込んだ本はないでしょうか
>>885 読解力が足りない。
ただ、1-6の乱数で、4以上が出たら1加えるのがいいとは思うけどね。
891 :
デフォルトの名無しさん :2011/10/24(月) 17:05:09.51
>>889 現に 877 が困っている様子から困っている原因を指摘したまで
終了条件を見落としている誰かさんの大きなお世話は謹んで辞退させていただく
static const int Transed[] = {1, 2, 3, 5, 6, 7}; int i = rand() % (sizeof(Transed) / sizeof(* Transed)); printf("%d\n", Transed[i]);
#include <stdio.h> int main(){ char variable_a; char *pointer_a; variable_a = 'a'; pointer_a = &variable_a; printf("変数variable_aの中身は %c ", variable_a); printf("そのメモリ アドレスは %p \n", pointer_a); return 0; } ってどういう処理の流れになるんですか?
>>892 なるほど。
srand(time(NULL));
i=rand()%7+1;
だと毎回、i=7になるからな。
>>894 どこがわからないのかを。
そのままじゃ書いてるとおりとしか
898 :
デフォルトの名無しさん :2011/10/24(月) 19:17:45.56
例の形が崩れ、見づらくて申し訳ありません 例 AAAA→5秒後→AAAABBB(実際には改行が入り、縦型) >890 ありがとうございます。 ftell,fseekを見たのですがいまいちわかりませんでした。 簡単なプログラム教えていただけませんか。
診断室とか作法とかリファクタリングとかは初心者向けに含まれているのかどうかがわからん
902 :
デフォルトの名無しさん :2011/10/24(月) 21:39:51.54
>>898 です
fseekを用いて、挑戦しているのですが、
http://simd.jugem.jp/?eid=57 このページを参考にし、5秒間で増えた分のバイト数を出そうとしています。
fssek(fp,0,SEEK_END);で最後の行まで読み込み、
sz=ftell(fp)でファイル位置を取得しているみたいなので、
5秒後の処理でfssek(fp,sz,SEEK_END);で増えた分のバイト数を取得できるかと
おもったのですが、うまくできませんでした。
ファイルポインタの位置を蓄えておくにはどのようにしたらいいのでしょうか。
テキストファイルの中にある複数の英字の文字列をソートして書きこむプログラム教えてください MOJI EIGO NIPPON ↓ EIGO MOJI NIPPON
>>888 Cの本で言えば下記がおすすめ。
エキスパートCプログラミング
C言語 ポインタ完全制覇
プログラム全般なら以下あたり
プログラミング作法
珠玉のプログラミング
一番のおすすめは、C以外の言語をマスターすること。
なるべく毛色が違うものが良い。
Ruby, JavaScript, LISP,
>>902 fssek(fp,sz,SEEK_END); でどうなると思っていたの?
908 :
デフォルトの名無しさん :2011/10/24(月) 22:14:04.52
>>902 最初の処理の続きから5秒間で増えたデータの最後まで
読み込むのかなと思いました。
>>908 fseek について調べた方がいい
fseek(fp, 0, SEEK_END);
でファイルポインタの指す先を (ファイルの終端+0) に移動させる
ftell(fp);
でファイルポインタの指す先を得る
この二つを組み合わせてファイルサイズを得ることが出来る
fseek(fp, sz, SEEK_END);
の場合 終端+sz に移動させようとすることになる
910 :
デフォルトの名無しさん :2011/10/24(月) 22:38:10.12
>>909 ありがとうございます。
fseek(fp, sz, SEEK_CUR)とすると
現在位置からsz分、読み込むということでよろしいですか。
912 :
デフォルトの名無しさん :2011/10/24(月) 22:49:02.23
今のプログラムは、 タイマー{ fp = fopen( fname, "rb" ); if( fp == NULL ){ printf( "%s FILE IS ERROR\n", fname ); return -1; } if(i==0){ fseek( fp, 0, SEEK_END ); i++; } else{ fseek(fp,ftell(fp),SEEK_CUR); } sz = ftell( fp ); printf( "%s file size : %d bite\n", fname, sz ); fclose( fp ); } という感じで、while分の中でfcloseし、fopenするからだめなのでしょうか。
>>912 いつでも
fseek( fp, 0, SEEK_END );
でおk
書き込みアプリケーションが fflush するまではファイルサイズが変わらないのは仕様なのでしょうがない
914 :
デフォルトの名無しさん :2011/10/24(月) 23:14:02.10
>>912 そうなんですか!
ということは、実際にはできてると考えて大丈夫でしょうか。
1000ゲット
>>914 4秒ごとにfflushしながら書き込むプログラムを作って確認すればいい
917 :
デフォルトの名無しさん :2011/10/25(火) 01:33:43.03
C言語でデータベース(MySQL)にデータを保存するには どうしたらいいですか? 簡単なサンプルとかありますか?
fstatでfile_statにファイル状態を得た後 if (file_stat.st_size < 0 || (file_stat.st_size + 0UL != (unsigned long int) file_stat.st_size)) でファイルサイズエラーと判別してるコードを読んだんだけど file_stat.st_size + 0UL != (unsigned long int) file_stat.st_size 一体これはどういう意味なの? 左辺はoff_t型で、右辺はそれをULに型キャストしてるから ULより大きいサイズだとエラーになるという事かな。
C言語初心者だけどファイル入出力(fopenとか)って勉強しておいたほうがいい? 初心者はあまり使わないような気がするんだが
初心者なら使わないとか意味分からないんですけど一生初心者でいるつもりなんですか
>>920 実務じゃどうせOSのAPIじゃないと使いもんにならんから勉強しなくていいよ
>>921 “まだ“勉強しなくていい
だったなすまん
fp = fopen("output.txt", "w");
>>920 メモリに大量のデータを記憶しきれない場合、ファイルに記憶できる
C言語の文字列で空白ごとに文字を区切って配列に格納すること可能ですか? 例えば、 あいうえお\0かきくけこ\0さしすせそ みたいに。 どうもstrcpyかsprinfを使ってでお願いします。 私がやると\0を入れると自動的に書き込まれないようになってる気がしました
空白というかヌル文字です 失礼しました
>>929 strcpyは\0までをコピーするから
931 :
712 :2011/10/25(火) 11:30:39.48
映像を受けとるプログラムを教えてくれませんか? また、わかりやすいサイトでもいいので教えてください。
>>928 char notAsciz[1000];
strcpy(notAsciz, "あいうえお");
char * second = strchr(notAsciz, '\0') + 1;
strcpy(second, "かきくけこ");
char * third = strchr(second, '\0') + 1;
strcpy(third, "さしすせそ");
int firstLen = sprintf(notAsciz, "あいうえお");
int secondLen = sprintf(notAsciz + firstLen + 1, "かきくけこ");
sprintf(notAsciz + firstLen + 1 + secondLen + 1, "さしすせそ");
>>928 こういう意味?
int i;
char s[50], *p, *q[] = { "あいうえお", "かきくけこ", "さしすせそ" };
for(p = s, i = 0; i < sizeof q / sizeof q[0]; i++)
p += sprintf(p, "%s", q[i]) + 1;
935 :
デフォルトの名無しさん :2011/10/25(火) 14:02:41.60
C言語で処理したデータをmysqlにINSERTする プログラムを教えてください。
>>928 “あいうえお”の後ろに\0 をつければ?
>>935 mysql_query(& mysql, "insert command string");
こんな要領。
939 :
デフォルトの名無しさん :2011/10/25(火) 14:26:58.16
自己紹介乙。
>>928 #include <stdio.h>
#include <string.h>
int main()
{
char text[100] = {0};
char *data[3] = { "あいうえお", "かきくけこ", "さしすせそ" };
char *p;
int i;
p = text;
for (i = 0; i < 3; i++) {
sprintf(p, "%s", data[i]);
p += strlen(data[i]) + 1;
}
p = text;
while (1) {
if (*p) printf("%c", *p++);
else {
printf("\\0");
if (!*++p) break;
}
}
printf("\n");
return 0;
}
942 :
デフォルトの名無しさん :2011/10/25(火) 16:49:15.59
C言語で改行コードがCR(\n)になっていると思うんですが、 それをCR+LF(\r\n)に変更することはできますか?
944 :
デフォルトの名無しさん :2011/10/25(火) 16:53:31.28
問題 printfのような可変長引数の関数をluaにバインディングするCソースを書きなさい。
946 :
デフォルトの名無しさん :2011/10/25(火) 17:17:32.93
>>943 strcatで\r\nをつけたらできました
ありがとうございました。
>>945 お前が欲しいだけだろ。
宿題スレにでも池。
/\___/\ / / ヽ ::: \ | (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ | ,,ノ(、_, )ヽ、,, | < ちょーっと難しい問題出すとすーぐこれだ | ,;‐=‐ヽ .:::::| \_______ \ `ニニ´ .:::/ /`ー‐--‐‐―´´\
951 :
デフォルトの名無しさん :2011/10/25(火) 19:07:26.60
>>937 ありがとうございます。
最初は書き込む予定でしたが、ファイルから読み込み、
MySQLに入れることにしました。
C言語で、やるにはどのようにしたらよいのでしょうか。
何回も申し訳ありません。
るあってなん?
スクリプト言語
956 :
デフォルトの名無しさん :2011/10/25(火) 20:12:44.10
958 :
デフォルトの名無しさん :2011/10/25(火) 21:52:13.11
"ABSCD"test.txt"AAAAA" のプログラムがあるときに、 ""の中がABSCDとAAAAだけになってしまい、 test.txtが認識されません。 どうしたらいいですか?
>>919 簡単な話にしかレスが付かないの法則? w
>file_stat.st_size + 0UL != (unsigned long int) file_stat.st_size
>一体これはどういう意味なの?
>
>左辺はoff_t型で、右辺はそれをULに型キャストしてるから
>ULより大きいサイズだとエラーになるという事かな。
少し違って、
off_t が UL より大きいサイズのとき左辺は off_t 型で
st_size が負の値のとき != が成り立つ(エラーになる)、じゃないかな。
off_t は符号付き整数、というのは常に正しいんだっけ? 忘れたw
makeコマンドで実行ファイルを作りますが、 そのタイミングでシェルを動かすことは可能ですか?
可能です。 というか、常に動いているが。
>>960 負数のチェックは上の st_size < 0 でしてるんでは?
longでは負数となる領域になってないかチェックしてるんだと思う。
964 :
デフォルトの名無しさん :2011/10/26(水) 00:19:34.43
教科書の以下の問題を教えてください。 正解は下記のようですが、if(c !='\n') を省略すると2行にわたって表示されてしまいます。 なぜこの文が必要なのでしょうか。 #include <stdio.h> int main(void) { int c; printf("文字を入力してください!\n"); c=getchar(); while (c !=EOF){ if(c !='\n') printf("入力文字のJISコードは、0X%2xです。\n",c); c=getchar(); } return 0; }
お金儲けできるプログラム教えてください
投資を自動化しろ
>>964 2行目のASCIIコード(JISコード)は何と出てる?
それをCではどう表現する?
'\n' ではないのかね?
Cの標準入出力にはバッファがあるって話だろ? 入力された文字は一旦バッファにためられ改行が入力された時点で一気にバッファから出力されるから getchar()でそれを一文字ずつ拾ってくと最後に改行コードを拾うことになると
getchar()が1文字入力ってリファレンスに書いてあるのに 実際にやってみると一文字キー入力しただけは何も起きずその後にEnterキーを押してはじめて動く そこで1文字入力するってのはキー押してからEnter押すことなんだと勘違い
次スレ立てます
おつ!
>>919 off_tが64ビットサイズで、unsigned long intが32ビットサイズの場合なんかを想定してんのかな。
キャストで丸められて初めて不等式が成り立つ。
975 :
デフォルトの名無しさん :2011/10/26(水) 10:35:25.11
5が出るまで数字を入力し続けて 5が出たら その入力した数字全ての平均を出すプログラムの作り方を教えてください
>>975 カウンター、合計値=0
5以外の入力->カウンターを+1、合計に入力値を足す。
5を入力->(double)合計値/カウンター
>>975 #include <stdio.h>
int main(void){
int counter = 0, goukei = 0, n;
while (1) {
printf("in = ");
scanf("%d", &n);
if (n == 5)
break;
counter++;
goukei += n;
}
if (counter > 0)
printf("%g¥n", (double) goukei / counter);
return 0;
}
979 :
デフォルトの名無しさん :2011/10/26(水) 11:06:04.66
ありがとうございます 5kという計算式で kに数字を入力して 100になる時のkを求めるプログラムはどうやって作るのでしょうか疑問符
if(k==100/5) { }
strcatの要領でint型の配列を 結合する関数があれば教えてください
ないです
>>982 なにかいい方法知らないですか?
a[10]={0,1,2,3}とb[]={4,5}結合させたいとすると,
a[10]={0,1,2,3,b[0],b[1]}みたいな感じでするしかないのでしょうか?
ポインターを使うんですよ
Ex: int intcat(int * dest, int destCnt, int const * src, int srcCnt) { for (int ic = 0; ic < srcCnt; ++ic) { dest[destCnt++] = src[ic]; } return destCnt; } // Usage: destCnt = intcat(dest, destCnt, src, srcCnt);
Sentinel どうすんのさ?
じゃあフォーク。
void array_cat(void * dest, int destCnt, void const * src, int srcCnt, size_t size)
{
memcpy(dest + size * destCnt, src, size * srcCnt);
}
int main()
{
int ia[10] = {1, 2, 3};
int ib[] = {11, 12};
array_cat(ia, 3, ib, sizeof(ib)/sizeof(*ib), sizeof(*ia));
for (i = 0; i < 10; i++){
printf("%d: %d\n", i, ca[i]);
}
return 0;
}
>>988 ね。どうするも伝えられてないので。
int型でsentinelは相性が悪いな。 値域を厳密に仕様化できないとね。 たとえば、0-32767しか扱わなくていいなら-1をSentinelにできるけど。 それを考え出すと、サイズを別に管理したくなる。 尤も、それならそれで>987みたいに別に持たずに構造体にした方が判り易い気がするが。
CSTLでok
台形近似法を用いてf(x)=cos(x)を任意の範囲で積分するプログラムを ユーザ関数を定義して作成しなさい. その際の区分間距離も任意に入力できるようにすること。 実行例 積分範囲を入力せよ x0 = 0 xl = 10 区分間距離を入力せよ length = 1 ans = 9.949055 積分範囲を入力せよ x0 = 0 xl = 100 区分間距離を入力せよ length = 5 ans = 49.588107 お願いします。
ここは宿題スレじゃねぇ。
994 :
デフォルトの名無しさん :2011/10/26(水) 18:15:44.11
へえ
といっても宿題レベルの分り易い質問にしか答えられないからな。 入門スレだから仕方ないといえばそれまでだが…
つーか積分なんて 一般人にはわからんぞ
997 :
デフォルトの名無しさん :2011/10/26(水) 18:40:36.76
>967 >968 改行が表示されるのはわかっていたのですが、getcharの理解が足りなく 文字列がバッファされているのがわかりませんでした。 質問の仕方が悪くすいませんでした。 >969 >970 この説明ではっきりとわかりました。 書き込みをしてくれた皆様ありがとうございました。m(_ _)m
宿題じゃ無いとしたら、CでやるよりMathematicaやMatLabみたいな数式処理ソフト使った方が良いと思う。
銀河鉄道999
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。