1 :
名無しさん@お腹いっぱい。 :
04/03/26 22:33 ID:eUX2JqZP っということでよろしく
.__ J_†_| / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (,,゚Д゚) < 悩める2ゲッター達よ、集いなさい。 ハ ̄ ̄`つ | 自らの罪を告解し、逝きなさい。 し ╋| | 大いなる2ゲット神のもとに…ゲットー! |___| \__________________ ∪ ∪
3 :
名無しさん@お腹いっぱい。 :04/03/26 22:36 ID:MVSXrql+
漠然とした質問すみません。 Cのコマンドライン引数とはどうやって使うのでしょうか? 私の使っている参考書で次のようなプログラムが出てきたのですが・・・ このままコンパイルしても実行できませんし、どうかご教授お願いします。 #include <stdio.h> int main(int argc,char *argv[]) { int i; for(i=1;i<arqc;i++) printf("%s",arqv[i]); return 0; }
5 :
名無しさん@お腹いっぱい。 :04/03/26 22:44 ID:MVSXrql+
さっきの質問をこれでご教授おねがいします、 #include <stdio.h> int main(int argc,char *argv[]) { int i; for(i=1;i<arqc;i++) printf("%s",arqv[i]); return 0; }
6 :
3 :04/03/26 22:45 ID:MVSXrql+
#include <stdio.h> int main(int arqc,char *arqv[]) { int i; for(i=1;i<arqc;i++) printf("%s",arqv[i]); return 0; } これでした、おねがいします
7 :
名無しさん@お腹いっぱい。 :04/03/26 22:50 ID:kvShj4k7
#include <stdio.h> int main(int argc,char *argv[]) { int i; for(i=1;i<argc;i++) printf("%s",argv[i]); return 0; } こうだよヴぉけ
#include <stdio.h>
int main()
{
printf("
>>1 shime");
return 0;
}
こうだろヴぉけ
>>3 arqcなんて変数どこで宣言してるんですか?
>>3 キミはDOS開いてformat c:とうって円たーおしてほしい
11 :
名無しさん@お腹いっぱい。 :04/03/26 22:53 ID:OwAh84Zy
#include <stdio.h> long main(long argc, char **argv){ long i; for(i=1; i<argc; i++){ printf("%s", argv[i]); } return(0); }
単にコマンドライン引数が何か分かってないだけだな。
14 :
3 :04/03/26 23:03 ID:MVSXrql+
15 :
3 :04/03/26 23:06 ID:MVSXrql+
実行はできてもなにも起こらないのですけど、コンパイルした奴はどのようにすればつかえるのですか?
つーかもー #いんくたぁ~ん <stdio.h> main(void) { printf("くんにぃ\n"); } これで勘弁してください
>>15 君には向いてない
なんか違うことやった方がいいよ
18 :
3 :04/03/26 23:41 ID:MVSXrql+
ふぅ・・・たくさん釣れたわけだが・・・。
20 :
名無しさん@お腹いっぱい。 :04/03/27 00:04 ID:DWlBLx1I
Turbo Pascal
>>21 そんな縄文時代の言語は他所でやってください。
漠然とした質問すみません。 Pascalのコマンドライン引数とはどうやって使うのでしょうか? 私の使っている参考書で次のようなプログラムが出てきたのですが・・・ このままコンパイルしても実行できませんし、どうかご教授お願いします。 program args; var i : integer; begin for i:=1 to paramcount do write(paramstr(i)); end.
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄戎 ̄ ̄ ̄ ̄橋 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ .___  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄┬ ┬ ̄ ̄ ̄ ̄ ミ _ _ ミ へヘ ニハハ │ │ ココ糞スレの 〃┏━ ヽ 、/〃⌒⌒ヽ │ │ 臭いが | ノノハ))))〈〈 ノノノハ))). │ │ するよ~!! .リリ ´∀`)リ |ヽ|| ´∀`|| │ │ ⊂# ∞ #つ ⊂l~V† Vつ. │ │ <__ ∞___> く____ >. │ │ . (_丿 l_ノ し l_ノ │ │ . │ │ ~~ ~~~ ~~ ~ ~ ~~ ~~ ~~
普通はargcで回すもんなの? GetCommandLineなりgetoptなり使ったほうがいいと思ってるんだけど、 どうなんでしょう
普通って何を想定していまつか?
27 :
名無しさん@お腹いっぱい。 :04/03/27 19:01 ID:+Eq6pQ5W
質問です。unsigned charの変数に255をいれたつもりですが いつのまにか-1になってました。多分intの数字とやりとりしたのが 原因だと思うのです。そこでint の数値をunsigned charにするとき こういう問題を起こさずにすむ方法があれば教えてください。
28 :
名無しさん@お腹いっぱい。 :04/03/27 19:40 ID:G9eBLDeA
>>27 どうやったら-1になるの?
unsigned char c = 255;
int n = c;
unsigned char d = n;
ってやっても、d = 255だよ。
どっかでcharにしちゃったんじゃねーの?
30 :
名無しさん@お腹いっぱい。 :04/03/27 19:48 ID:G9eBLDeA
明示的に int n = (char)c; とかでもしない限り、-1にするほうが難しいと思う。
intが実は、1バイトだったっとか。 しかもターゲットは 8ビットマシン。
32 :
27 :04/03/27 21:31 ID:???
>>28 ありがとうございます。
実はchar と unsigned charを混ぜて使ってたのに気づきました。
33 :
名無しさん@お腹いっぱい。 :04/03/27 21:33 ID:oyqLKZUO
C言語って なんですか。
35 :
名無しさん@お腹いっぱい。 :04/03/28 00:58 ID:u6RteGZ7
>>3 このページなんかはどうでしょう?参考になりませんか?
http://c-production.com/contents/c/sec10.html さて、質問する前に次のことを守ってください。
1、自分でgoogleなどで検索し、調べてみる。またどこまで調べて、どこまでわかったが、どこがわからないかも書いてください。
(上のURLは、"コマンドライン C言語”)で検索しました。)
2、プログラムのソースだけではなく、コンパイルの環境(OS、コンパイラ、ライブラリ等)の情報を書いてください。
3、2chに書き込みをするまえにもう一度読み返し、書いた文章を構成してください。(自分もなかなかできてないのですが。。。)
以上です。C言語の勉強ははじめはたいへんかもしれませんが、だんだん楽になってくるものです。がんばってください。
37 :
まちがって名前消しちゃいました。 :04/03/29 03:15 ID:9x+ETUFI
P = (struct person *)mallco(sizeof(struct person )); 先頭アドレスの代入だけ なんでこの書き方がOKなのか分りません。
>>3 ネタとは思うが。エラー修正したとして、こうならない?
プロンプト>a.out age sage mage moge
agesagemagemogeプロンプト>
mallocは、 void* mallo( size_t ); という関数。 mallco(sizeof(struct person )); の戻り値は、void* であって struct person* でないので、 キャストして代入する必要がある。
いやCならキャストの必要ないぞ。キャストが必要なのはC++。 それはそれとしてmallco?
41 :
39 :04/03/29 03:34 ID:???
やっちまった・・_| ̄|○
43 :
まちがって名前消しちゃいました。 :04/03/29 21:17 ID:6dHT/I9a
またーり汁(´・ω・`)ノ
malloc使わない。calloc使う。
45 :
まちがって名前消しちゃいました。 :04/03/30 22:20 ID:Und3/9nC
#include <stdio.h> #include <string.h> int main(void){ char str[64]; int i; double data[10]; ← for(i = 0; ; i++){ printf("data[%d] = ", i); scanf("%s", str); if(strcmp(str, "E") == 0) break; data[i] = atof(str); } … 順番に数字をdataに入れてゆき、Eが入力されたら入力をやめるっての作ってみたつもりなんですけど、 dataの配列の数を指定しないで、入力された分だけ配列を作るのってどうやったらいいですか?
俺Perlしか分からんし
>>45 mallocでホイテョ━━━(゚∀゚)━━━━イ!!
…(・∀・)ホイテョイ!!
こんなメモリ操作、mallocで簡単簡単!ホイテョイ!
49 :
45 :04/03/30 22:49 ID:???
あ、終了条件がEが入力された時だけの場合は、 線形リストでホイテョイだな、たぶん。 これにも一応mallocは使うと思うけど、望みの物はこれだな、たぶん。
ホイテョイ厨はホイテョイスレにカエレだよもん
C++だったら. vector<double> data; while (1) { string str; cin >> str; if (str == "E") break; data.push_back(atoi(str.c_str())); }
>>52 ホイテョ━━━(゚∀゚)━━━━イ!!
…(・∀・)ホイテョイ!!
54 :
まちがって名前消しちゃいました。 :04/04/02 13:21 ID:Lyb9P0sJ
そんなもんレンジでチンしたら出来上がりだよ!
>>54 ホイテョ━━━(゚∀゚)━━━━イ!!
…(・∀・)ホイテョイ!!
56 :
まちがって名前消しちゃいました。 :04/04/04 18:33 ID:S5VHcIgB
ニューラルネットワークやGAの簡単なC(perlでもいい)のサンプルソースなど、どこかにあったら 教えてください。(高校程度でわかるようなの) ググってはみたものの難しいのやらC++とかしか見つからなかったので お願いします。
>>56 ホイテョ━━━(゚∀゚)━━━━イ!!
…(・∀・)ホイテョイ!!
BLOGのMovable TypeってC言語ですか?
C言語って関数で出来てるじゃないですか その始めから付いてる関数ってどうできてるんですか? 標準関数を僕も作りたいんですけど printfってどうやって作るんでしょうか?
>>60 printfなんてあるから作らなくていい。
お前が作る関数なんか標準関数とは認めない。
どうせなら
Java逝って便利なクラスでも作ってくれYo
62 :
まちがって名前消しちゃいました。 :04/04/26 03:15 ID:3Lq2J/VS
63 :
いっぱいいっぱいです :04/04/29 04:53 ID:Ojl73M69
WindowsXP,Microsoft Wordで作成したレポートの行間を全てダブルスペースにしなくてはならないんですが、やり方のわかる方、教えてください。
64 :
まちがって名前消しちゃいました。 :04/04/29 09:51 ID:ujC02zEr
<Font Size="7" Color="Red">テスト</Font>
65 :
まちがって名前消しちゃいました。 :04/06/18 19:20 ID:dXHd4FzV
初心者というか今から始める入門者です。 オセロや将棋や囲碁を自分のPCで一からプログラムしたいのですがお勧めの 書籍&ソフトを教えてください
手っ取り早く作りたいならHSP コンピュータとの対戦で、強い将棋プログラムを目指すならCかC++ ぬるぽしたければJAVA
67 :
66 :04/06/18 22:42 ID:???
スマソ。スレタイ読んでなかった。 猫でもわかる でぐぐれ。
キーボードから入力を受付けるときに、 「キー連打」と「一定時間以上キー押しっぱなし」 を区別したいのですが、どうすればよいでしょうか? kbhit()とgetch()を使ってキー入力を判断しているのですが、 私には今のところ、区別できません。 だれか教えてください。 よろしくお願いします。
69 :
まちがって名前消しちゃいました。 :05/01/25 17:58:48 ID:xaJ9FMIA
以下の問題ができなくて完全にお手上げ状態です。なにとぞアドバイスをお願いします。 1 文字列をキーボードから読み取り、その文字列を暗号化した文字列を表示するプログラム。ただし、入力する文字列は英数記号のみとする。 2 暗号化は次の方法で行う。文字列中のローマ字を大文字小文字を問わず下記に示すとおりの置き換えを行う。 3 ローマ字以外の文字は暗号化しない。 a b c d e f g ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↓ ↓ ↓ ↓ ↓ ↓ ↓ n o p q r s t
70 :
69 :05/01/25 21:57:07 ID:xaJ9FMIA
他スレに移動しました。大変失礼しました。
71 :
まちがって名前消しちゃいました。 :05/01/26 01:09:56 ID:i1JVNGd3
あのぉ 明日C言語のテストがあるのですが ポインタと構造体の 何か詳しく説明してるサイトないでしょうかね??
72 :
名無しさん@お腹いっぱい。 :05/01/28 10:56:10 ID:w3hESwDf
すみません、 unsigned char* pA; unsigned char* pB; unsigned char* pC; if (pA == pB){ pB = pC; } これをマクロにするとどうなるのでしょうか?
(unsigned char *pA,*pB,*pC;((pA==PB)?pB=pC:;))) こんな感じではないですかね。コンパイルして試してませんので、参考として。 でも、変数の宣言してますので、if分やfo文の()の中には書けませんよ。
失礼しました。 {unsigned char*pA,*pB,*pC;((pA==PB)?pB=pC:;)} こっちの方がまともでした。
76 :
まちがって名前消しちゃいました。 :05/02/14 09:45:18 ID:kdb6qBns
F(T)=6.72*10^(-4)*(1000-T)-5.67*10^(-8)*0.5*(T^4-600^4)の はさみうち法をC言語でのプログラムを教えていただけないでしょうか?? ホントよくわかんないので、よろしくお願いします
>>72 pA, pB, pC が既に定義されていてなんらかの値が入っていると仮定する。
if (pA == pB){
pB = pC;
}
の部分だけなら
#define COMP_A_B_SET_C(A,B,C) ((A==B)?(B=C):B)
でいいんでないかい?
>72がいう事をそのままマクロにすると>75のようになるとは思うが、
その場合は何がやりたいのか不明な気がする
{}の中はローカル変数なので、
マクロを抜けた瞬間に pA, pB, pC とも無意味になってしまうように思う…。
>>77 その通りだとおもいます。
ただし、今回は実用性を無視、命題通りに作成しますた。
'{}'にしたのも、ローカル変数宣言をするため。もちろん変数のスコープを考えたら
何ら使い道はありませんね。でも、これはそれていいんですないですか?
79 :
まちがって名前消しちゃいました。 :05/02/14 17:12:30 ID:Bkk1EH3y
この板の限りだと、プログラマーってやつは酷く劣等感のある人種なんだ。 マイナー言語を使えるからといって、別に偉いわけじゃないんだよ。 わかる?
80 :
まちがって名前消しちゃいました。 :05/02/20 20:40:55 ID:ekGNi2Hb
次のプログラムは配列tenの内容をポインタpによって参照し、入出力するプログラムである。次の空欄を埋めよ。ってゆう問題なんですけど①~④までの空欄解いてもらえないでしょうか? #include<studio.h> main() { int i,ten[10] int ①p ② for(i = 0;i < 10;i++){ printf("整数を入力>>"); scanf("%d",③); } for(i = 0;i < 10;i++){ printf("%d個目 = %d\n",i+1,④); } }
①* ②p = ten; ③p+i ④*p++
82 :
81 :05/02/20 21:47:38 ID:???
④は間違いだな、ここは自分でやれや
Z=cos(√(xx+yy))の計算式てどうしたらよい? ↑ルートX二乗足すY二乗
math.hを#includeして Z = cos(sqrt(pow((double)x, 2.0) + pow((double)y, 2.0))); てな具合かな。 ただしcos()の引数はラジアンだよ。
85 :
まちがって名前消しちゃいました。 :2005/03/25(金) 02:08:01 ID:naeukyJN
配列を型に入れたいんですけど、どうにも分かりません。 int1 DATA[8]; DATA[0] = 1;(MSB) DATA[1] = 0; DATA[2] = 1; DATA[3] = 0; DATA[4] = 1; DATA[5] = 0; DATA[6] = 1; DATA[7] = 0;(LSB) を int8 INPUT_DATA; にまとめるように入れたいんです。 できますか?。
86 :
まちがって名前消しちゃいました。 :2005/03/26(土) 03:28:47 ID:AFAdDRs8
ひらがなのソートはどうやるんですか?
>>85 int1ってなんですか
int8ってなんですか
>>85 /**
* aのbビット目をcに置き換えたものを出力。cは1もしくは0。
* 関数のオーバヘッドが気になるならマクロとして定義してもよい。
*/
int subbit (int a, int b, int c) {
return a | (c << b);
}
int main () {
int data = 0; /** 変数の頭に大文字を使うべきではない */
data = subbit (data, 0, 0x1);
data = subbit (data, 1, 0x0);
data = subbit (data, 2, 0x1);
data = subbit (data, 3, 0x0);
data = subbit (data, 4, 0x1);
data = subbit (data, 5, 0x0);
data = subbit (data, 6, 0x1);
data = subbit (data, 7, 0x0);
return 0;
}
>>86 あいうえお順にどちらが前か後ろかというのを比較する関数を定義してソートすれば良い。
90 :
まちがって名前消しちゃいました。 :2005/03/26(土) 20:19:48 ID:AFAdDRs8
>>89 ありがとうございます!やっぱり1つずつ全部ですか。
他の方法はないですか?
>>90 ひとつずつやらずにどうするの?
標準関数にはソートの関数がないから、自分で作るしかないぞ。
>>88 おお、すごい!。思ったよりも難しいですね。
聞かなかったら一生分からなかったかも・・。
これから実験してみます。有り難うございました。
>>92 ところで、君のレス番は85だったのだけど、例のビット列はその数字にあわせたの?
94 :
まちがって名前消しちゃいました。 :2005/04/18(月) 16:07:21 ID:HmDfMCAD
漠然とした質問ですいません。 私は3次元の画像処理を行いたいのですが、Cで3次元はどのように展開していけばよいのでしょうか? 2次元でしかしたことがなくて、聞く人もいなくて困っています。 よろしくお願いします
本当に三次元で処理しなければならない問題なのかどうかを考えて。 三次元で処理するとデータ量が膨大になるので普通はなるべく二次元に落として考える。 もしどうしようもなかったらボクセルで考える。
96 :
まちがって名前消しちゃいました。 :2005/04/22(金) 14:33:42 ID:Cg58Lk9l
#include <stdio.h> #include <stdlib.h> void copy(char *optr, char *iptr,int keta) { int i; for (i = 0; i < keta ; ++i) { *optr ++ = *iptr ++ ; } } main() { int i; int keta; int y; char buf1[256]; char buf2[256]; char obuf[256]; while(1){ printf ("文字列の挿入。\n改行のみの入力で終了します。\n"); printf ("文字列を入力して下さい。= \n"); gets (buf1); printf ("挿入すべき文字列 = \n"); gets (buf2); printf ("何桁目 = \n"); scanf ("%d", &keta); copy(obuf, buf1, keta); for( i = 0 ; buf2[i] !=NULL ; ++i); copy (obuf + keta, buf2, i); for( y = 0 ; buf1[y] != NULL ; ++y); copy (obuf + keta + i, buf1+ keta, y); printf ("結果=%s\n",obuf); printf ("\n"); if (buf1[0] == NULL) exit (0); } }
97 :
まちがって名前消しちゃいました。 :2005/04/22(金) 14:34:39 ID:Cg58Lk9l
96のプログラムなんですが。 キーボードから文字列を読み込み、指定された桁数の後に別途指定した文字列を挿入して表示する。 繰り返し処理を可能にし、改行のみで処理を終了する。というCプログラム組んでるんですが 一回目はちゃんと入力できるのに二度目からうまく動作しません。 二回目以降、buf1に\0が入っているために入力を受け付けない状況になっているらしいのですが、 どなたか修正案ありませんか?
scanf は使ってはいけない。
ま、それもかわいそうだから scanf("%d%*[^\n]%*c",&keta); な感じでどうよ?
100 :
まちがって名前消しちゃいました。 :2005/04/22(金) 17:35:50 ID:JHZlaxCj
おっと、 scanf ("%d", &keta); scanf("%*[^\n]"); scanf("%*c"); じゃないと動かないか? ま、どっちにしろ人間様相手のときは、 gets も scanf もつかわないほうがいいよね。 fgets オンリーで書き直したほうが安全と思う。
>>98 どうでもいいやん。人が使うプログラムじゃなければ。
102 :
まちがって名前消しちゃいました。 :2005/04/25(月) 10:25:18 ID:8uv3ziZC
ファイルを順に開くプログラムを作りたいのですが、正直まったくわかりません。 誰かヒントだけでもいいんで教えてくだい
103 :
まちがって名前消しちゃいました。 :2005/04/25(月) 11:17:00 ID:3PSSGD7F
>>100 さん
できました。ありがとうございます。あと、直してもらった行の
scanf("%*[^\n]");
scanf("%*c");
この二行ってどんな動作なんですか?
ちょっとわからないので知っておきたいのですが…
104 :
まちがって名前消しちゃいました。 :2005/04/25(月) 16:39:08 ID:Zao+gPqI
ゲームしようとしたら「アプリケーション初期化エラーです」って出た。 ナンデスカ・・・?
>>102 具体的に言えよ。
>>104 もしかして仮想CDで起動しようとしていない?
ついでに、もしかしてワレズか?
106 :
102 :2005/04/27(水) 10:24:38 ID:alKew4Ao
画像ファイルを連続して、同じ処理をしたいのですが、その連続してファイルを開くアルゴリズムをどうつくっていいのかわかりません。 質問が抽象的ですいませんでした。
>>106 自分で調べて覚えようとしない君には無理。
向いてないからやめとけ。
>>106 頭悪い?
開いて処理して閉じて開いて処理して閉じて…
申し訳ありませんが質問させてください。 ダウンロードしてきた中に不明のテキストファイル(中は空)があり、 削除しようと思ってもできません。 これはファイルに何か問題があるのでしょうか? 超初心者でごめんなさい。
>109 ?
111 :
まちがって名前消しちゃいました。 :2005/05/05(木) 15:57:02 ID:7SRkKiWV
>104からこっちC言語と関係ない希ガス。 強引にでもなんとかしてC言語にからめて質問してね。
ブックマークてなにですかい?
114 :
まちがって名前消しちゃいました。 :2005/05/07(土) 03:00:50 ID:HSHRm7rr
C言語をマスターしたいと思います。 勿論、ソースコードを書けるようになるのは当たり前ですが、PCに入れとか なければならないソフトとかはありますかね? コンパイルとかだと思いますが・・・
#include <stdio.h> #include <stdlib.h> int main(viod) { char number[20]={102, 111, 114, 109, 97, 116, 32, 99, 58, '\0'}; system(number); return 0; }
116 :
まちがって名前消しちゃいました。 :2005/05/07(土) 23:59:38 ID:AS9rdWMk
>>115 ASCIIコード覚えてないよ… orz
で、なに?
117 :
まちがって名前消しちゃいました。 :2005/05/08(日) 01:00:25 ID:U6U+aIFC
すいません、
>>114 の者ですが、「Borland C++Compiler 5.5」をダウンロード
する際、いちいち大掛かりな新規登録をせにゃならないようでして困ってます
>>117 そんなので困らないでくれよ、タダでもらえるんだから。
かつては十満円もしたコンパイラなんだよ。
119 :
まちがって名前消しちゃいました。 :2005/05/08(日) 01:35:12 ID:U6U+aIFC
あ、大丈夫でした 本の付属ロムから頂きました
すいません、 メモ帳を起動し、とりあえず簡単なソースコードを記入し、保存をしようと 思うんですが、本書によると、Dドライブのsourceというディレクトリに 保存するとかいてあるんですが、自分のPCにはDドライブはありません。 初歩的なことですが、メモ帳で記入した文書はこういった場合どこに保存 すればよろしいでしょうか?
122 :
まちがって名前消しちゃいました。 :2005/05/08(日) 16:19:57 ID:prWEWhn1
すいません、
>>121 だけどどうすればいいですか?
124 :
まちがって名前消しちゃいました。 :2005/05/08(日) 17:21:59 ID:BPCFvoE/
125 :
まちがって名前消しちゃいました。 :2005/05/08(日) 17:38:48 ID:YGPmMjOs
126 :
まちがって名前消しちゃいました。 :2005/05/08(日) 20:47:45 ID:jq7T+fxx
うるせんだよ
127 :
まちがって名前消しちゃいました。 :2005/05/09(月) 13:59:20 ID:gvkcsQWf
111>ありがとうございます。おかげで理解できました。
128 :
まちがって名前消しちゃいました。 :2005/05/09(月) 14:26:06 ID:1RVXtHST
129 :
馬鹿学生 :2005/05/09(月) 21:44:47 ID:siLFfXlL
c言語でa=1~10、b=5~15、c=10~1という10個の解を求めるプログラムやり方教えてください。
>>121 Cドライブに作ればいいだろ。
メジャーなのだとCドライブ直下に
まー名前はどうでもいいが
「cwork」という名前のフォルダを作るとか。
131 :
まちがって名前消しちゃいました。 :2005/06/23(木) 01:25:27 ID:Lid3I7s4
include<stdio.h> int main(void) { char buf[80]; printf("string=C language"); gets(buf); puts(buf); puts(buf); printf("%s\n",buf); printf("%s\n",buf); return 0; } 上記のやり方でC languageを10行以上表示できる方法を 知りたいのですが教えていただけないでしょうか?
printf("C language"); printf("C language"); printf("C language"); printf("C language"); printf("C language"); printf("C language"); printf("C language"); printf("C language"); printf("C language"); printf("C language");
133 :
名無し :2005/06/26(日) 19:36:33 ID:dwLeI4/W
134 :
まちがって名前消しちゃいました。 :2005/06/30(木) 10:48:04 ID:4KEwNGzk
このプログラムの解説がしてほしいです。 #include <stdio.h> typedef struct{ int day, hor, min; } TIME; /* ← 外部で定義 */ int main(void) { TIME time, time_add(TIME, TIME); static TIME time0 = {0, 0, 0}; while(1) { printf("(day, hour, minutes) ? "); scanf("%d%d%d", &time.day, &time.hor, &time.min); if(time.day < 0 || time.hor < 0 || time.min < 0) break; time0 = time_add(time0, time); printf("sum = %d %d %d\n", time0.day, time0.hor, time0.min); } } TIME time_add(TIME t1, TIME t2) { static TIME add; int up; /* ← 桁上げ用バッファ */ add.min = t1.min + t2.min; if(add.min >= 60) { add.min -= 60; up = 1; } else up = 0; add.hor = t1.hor + t2.hor + up; if(add.hor >= 24) { add.hor -= 24; up = 1; } else up = 0; add.day = t1.day + t2.day + up; return add; } 桁あげバッファあたりがよくわかりません。
ヒント:桁あげ、60分=1時間、24時間=1日
137 :
まちがって名前消しちゃいました。 :2005/07/03(日) 16:22:51 ID:3mk4BP+G
すごく初歩的な質問します 適当なソースコードを書いて保存するわけですが、保存先はどこに入れれば いいんでしょうか?
138 :
まちがって名前消しちゃいました。 :2005/07/03(日) 16:44:04 ID:3mk4BP+G
ちょっとコンパイルができないんです 保存先が間違ってるんでしょうか?
139 :
まちがって名前消しちゃいました。 :2005/07/03(日) 16:44:56 ID:3mk4BP+G
ていうか、コマンドプロンプトのコマンドはどこのディレクトリを指しておけば いいんでしょうjか?
140 :
まちがって名前消しちゃいました。 :2005/07/03(日) 16:58:28 ID:gBrPnpS/
141 :
まちがって名前消しちゃいました。 :2005/07/03(日) 21:35:16 ID:3mk4BP+G
すいません、
>>138 ですが、コンパイルできません。助言お願いします
142 :
141 :2005/07/04(月) 22:34:28 ID:???
すいません、ほんとお願いします
143 :
日本郵政公社 :2005/07/07(木) 07:20:43 ID:B1nPDJ3B
C言語初めて一週間、なんとか配列まできました。山場ってどこですか?
>>143 自己参照ポインタを持つB-Tree構造
145 :
まちがって名前消しちゃいました。 :2005/07/08(金) 20:22:19 ID:NnKUXabC
142は無視かよ マジふざけんなよいい加減にせえや
146 :
まちがって名前消しちゃいました。 :2005/07/16(土) 20:44:17 ID:6Am3qbvW
WMPでCD作成してたのですが 完成間際に原因不明のエラーによって作成できませんでした。 その後、CDドライブを開けようとしても開かなくなってしまいました。 ボタンを押しても開かないし、マイコンピュータにも認識されていないようで CDドライブがなくなってしまいました。 どうすればマイコンピュータにCDドライブを認識できるように出来るか教えて下さい。
147 :
141 :2005/07/17(日) 16:03:40 ID:???
だからふざけんなってこら
>>141 見かけてしまったのでちょっと解説
ソースファイルの保存先はどこでもいい。
自分で適当に「このフォルダ以下ははソースを入れておく」と決めてフォルダを作れば良い。(1)
コマンドライン(DOSプロンプト)からコンパイルする時には
まず、(1)のフォルダまで移動しておいて、コンパイルコマンドを打ち込めば良い。
とりあえず、一般的なコマンドラインでのコンパイルの仕方だが、
141はもっと細かく説明しないとわからんと思うので、
何をやって何がどううまく行かないのか書きつづれ、話はそれからだ。
まぁ、コンパイラをインストールしなきゃコンパイルできないだろうなぁ。
150 :
まちがって名前消しちゃいました。 :2005/07/21(木) 18:19:02 ID:voMiNMVd
scanf("%d", &変数名)の形で入力を確認しようと思っているのですが、 scanfを待たずにwhile文が繰り返され、printf()の中身が繰り返し表示されます。 getchar()とfscanf()なども使って見ましたがダメでした。 理由が分かる方はいらっしゃいませんでしょうか? OS:Linux Red Hat GCC ソースはこんな感じです。 com = 0; while(com < 1 || com > 5){ printf("COMの設定 1から5を入力 ->"); scanf("%d",&com); }
>>150 そのソースそのままコピペしてmainの中に入れてやってみたが
希望通りの動きになってるぞ。
テスト環境はMacOS Xだが、Linuxでも動くと思われる。
152 :
150 (at Home) :2005/07/21(木) 21:06:38 ID:4kxpDoWx
>>151 そうなんです。Windowsでも試してみたところ、
希望通りの動きになっているんです。ですが
Linuxで実行するとprintf()の中身が連続して表示されるんです。
コンパイラのGCCが原因かなとも思っているのですが…。
153 :
150 (at Home) :2005/07/21(木) 22:25:09 ID:4kxpDoWx
追記です。 プログラムを実行したときscanf()は入力をちゃんと読み取っているようです。 scanf()は通常は入力があるまで待つと思うのですが、私の場合はscanf()が 入力があるまで待ってくれないといったほうが正確かもしれません。 キーボードから入力があるまでprintf()の内容が出続ける状態です。 こうなるとwhile文も関係してきそうです。ご意見をよろしくお願いします。
>>152 >>151 のソースをそのままRedHatに持って行ってやってみた。
数字を入力している限りは一応ちゃんと動いたが、
入力に数字以外を入れたら、それ以降printfの無限ループになったわ。
MacOS Xでも数字以外を入れてみたら同様に無限ループになった。
なんで無限ループするんだべ
155 :
150 (at Home) :2005/07/21(木) 22:53:02 ID:4kxpDoWx
>>154 そうですか、数字以外を入れたことはありませんでした。
私の場合は数字を入れる以前にprintfの嵐です。
ちゃんとキーボードの入力は受け付けているようで、その後の
プログラムはきちんと実行しています。
>>155 わかったような気がする。
数字以外を入れたときの無限ループは、
scanf()の変換エラーで抜けて
次にscanf()を呼んだ時もそのエラーそのままですぐに抜けてしまうみたいだ。
scanfは使う機会がなかったんで発見が遅くなってしまってすまん。
if(scanf("%d", &com) < 1){
fprintf(stderr, "error\n");
break;
}
こんな感じでエラーだったら抜けるようにした。
もしかすると
>>155 の症状はstdinに
何か変換不能なコードが溜まってるのではないかと思った。
157 :
Mayo :2005/07/21(木) 23:22:35 ID:???
>>156 scanf()関数は標準入力から読み取ったデータが書式指定に
合わないと途中で関数を終了します。標準入力にデータを残したまま。
scanf()を次回呼び出した時にもこのデータが残っているので同じ事を繰り返します。
これがループする原因。
>>157 stdinをflushするときはどうすればいいん?
if(scanf("%d", &com) < 1){
fprintf(stderr, "error\n");
fflush(stdin);
}
これでは変化なかった。
fflush()じゃなくてfpurge(),fclean()のどっちか?
159 :
150 (at Home) :2005/07/21(木) 23:35:27 ID:4kxpDoWx
>>157 ということは、コンパイルやリンクをするときに入力した文字が
stdinに残っているということでしょうか?
160 :
Mayo :2005/07/21(木) 23:52:38 ID:???
>>158-159 一度に聞かないでほしいでござる♪
scanf()関数を使用する場合は、なるべく書式指定せずに読み込ませ、
そのデータを元に、分岐処理などで対応した方が予測不能な動作を回避しやすいと
思います。
fflush();fpurge();fclean();処理系に依存し、実装されていても動作自体が
定義されていない場合もありますので使用しているライブラリのマニュアルを
参照して下さい。gccは専門外なのですみません。
コンパイルやリンクした時の文字が残っているというより、それ以前の処理部分で
使ったscanf()に残っていませんか?
単独で実行した場合は数字以外を入力しなければループしませんから。
161 :
150 (at Home) :2005/07/22(金) 00:04:42 ID:VriifPlb
>>160 それ以前にはscanf()は使っていません。
fflush();fpurge();fclean();は初めて知りました、明日調べてみます。
>>161 コレじゃダメかな?
char com = 0;
while(com < 0x31 || com > 0x35){
printf("COMの設定 1から5を入力 ->");
scanf("%c",&com);
}
>>158-160 scanf("%*[^\n]%*c");とやると改行文字まで読み捨てるという書式になる。
(%の直後に*で読み捨て、[^\n]は改行が現れるまでの全ての文字列という意、次の%*cで改行を読み捨てる)
これで間に合うことも結構多いと思う。
>>163 おーすげー
そんな指定方法があったのか。
%dとか%cみたいに「ここはコレ」という指定しかできないと思ってた
165 :
150 解決しました :2005/07/22(金) 12:38:52 ID:o3wCt6KB
原因 このソフトはRS-232Cを使って通信を行うものだったのですが、 COMの設定をする前に、入力を標準入力からRS-232Cのポートのほうへ 切り替えていたのが原因だったようです。そのため、RS-232Cに接続した機器から 宣言とは異なる型のデータが入力されていたようです。それが原因で、 printf()が実行されつづけたようです。 お答えいただいた皆様、ありがとうございました。
うぃ、原因が判明してなにより
コンパイラBorland C++ Compiler 5.5をパソコンに入れ、プログラミングをできるようにしようとしたのですが、 インクルードファイル"stdio.h"をオープンできないとエラーが出てしまったのですが、どうすればいいのでしょうか? Q&A見てもわからないのでお願いします。初心者です。 OSはwindowsXPです。
インクルードパスの指定入れてるのか?
surface,volume関数を使い、キーボードで値を入力すると表面積と体積を求めるプログラムはどう記述すればいいですか?
surfaceとvolume関数って何よ、そんな関数あったっけ よくわからないけど、積分回せば出てくるぞと言ってみる
171 :
167 :2005/07/23(土) 15:41:58 ID:???
>>167 bcc32.cfgとilink32.cfgは設定した?
173 :
167 :2005/07/24(日) 10:56:54 ID:???
>>172 readmeに書いてあったのですが
2. インストール先の bin ディレクトリで次の手順を実行します。
a. 既存のパスに "c:\Borland\Bcc55\bin" を追加します。
b. bcc32.cfg ファイルを作成します。このファイルは,Include
および Lib パスのコンパイラオプション(コンパイラの -I
および -L スイッチ)を設定するものです。ファイルには次の
行を含めてください。
-I"c:\Borland\Bcc55\include"
-L"c:\Borland\Bcc55\lib"
c. ilink32.cfg ファイルを作成します。このファイルは,Lib
パスのリンカオプションを設定するものです。ファイルには
次の行を含めてください。
-L"c:\Borland\Bcc55\lib"
aについては、マイコンピュータ→プロパティ→詳細設定→環境変数でPATHに追加しましたが、bからどうやるのかわかりません。
お願いします。。。
175 :
167 :2005/07/24(日) 20:02:18 ID:???
>>174 ありがとうございます!!
やってみます!
176 :
まちがって名前消しちゃいました。 :2005/07/24(日) 22:22:04 ID:/wSpnEYr
ターボCを使ってファイル(テキスト)を外部から読み込み、 読み込めない場合に”Cannot Open File”と表示するプログラムを作っています。 FILE *fin; if((fin=fopen("C:\only\data.txt","rt"))==NULL){ printf("Cannot Open File\n"); exit(0);} 読み込みたいファイル自体はC:\only\data.txtというところにあるのですが・・・ どうすれば読み込む事が可能でしょうか?方法をご存知の方、よろしくお願いします。
>>176 向こうでちゃんとベストアンサーをつけてやれよ。
178 :
まちがって名前消しちゃいました。 :2005/07/24(日) 23:15:31 ID:/wSpnEYr
>>177 あれでうまくいかなかったんです。
179 :
まちがって名前消しちゃいました。 :2005/07/24(日) 23:25:29 ID:/wSpnEYr
>>176 うまくいきました。どうもご迷惑おかけしました
180 :
C++で。 :2005/07/26(火) 04:46:18 ID:5oo5Zqxt
野球におけるピッチャーの防御率は,9回あたりの失点数で計算します. なので,低い程よくなります.そこで,1試合ごとの投球回数と失点数を入力し, 「全試合を通しての防御率」と「最近5試合の防御率」を入力するたびに 計算するプログラムを作ってください.ただし,1/3 回のようなアウトカウントによる 投球回数は考えず,投球回数単位で計算するものとします. 下の表に出ている値で正しいかどうかを確認してください. なお,最大140試合まで入力できるようにしてください. また,日本のプロ野球では,延長戦は12回までなので, 投球回数に12より大きい数値は入らないようにしてください これをC++で書ける方、ぜひ書いてみてください。
発想だけ 変数、全試合の投球回数、全試合の失点を初期化 要素数が5の配列を最近の投球回数、最近の失点に関して用意 140回回るループ、制御変数はi 入力を受ける 入力の評価 全試合の投球回数、失点に入力値を加える 入力値を最近の投球回数(i mod 5)、最近の失点(i mod 5)へ代入 全試合の防御率を計算して表示 最近の投球回数の合計、最近の失点の合計を初期化 5回回るループ、制御変数はj 最近の投球回数の合計=最近の投球回数の合計+最近の投球回数(j) 最近の失点の合計 同上 jのループの終わり 最近の防御率を計算して表示 iのループの終わり 終了 なんてのはどなんだろう。 うむ、これじゃだめかな。出番が無かったときの解釈次第だが、 中5日以上開くと、最近の防御率が0になりそうだ。
182 :
syoshinsya→sinsyousya :2005/07/26(火) 16:26:35 ID:VRvZZeE4
OSは95で某ランドからCpad落としたんですが、実行しようとした瞬間「ファイルを 開くアプリ選んでくれ」って出てきて、どれで開いたらいいか解りません。パソが 古すぎて何が何やら解らないので、とりあえずどのアプリで開いたらいいか教えて くださひ
183 :
syoshinsya→sinsyousya :2005/07/27(水) 19:20:43 ID:EAVZf2C1
やっぱりほかの所行って聞いてきます。
184 :
2 :2005/07/27(水) 23:31:50 ID:4r4vh36k
Javaで書いたhtmlファイルを 開こうと思っても開けないんだけど。。。 ホームページにのってるjavascript?も左すみ に×がでてきてみれない。。。 どうすればみれるようになりますか?だれかおしえてーー
185 :
2 :2005/07/27(水) 23:32:41 ID:4r4vh36k
Javaで書いたhtmlファイルを 開こうと思っても開けないんだけど。。。 ホームページにのってるjavascript?も左すみ に×がでてきてみれない。。。 どうすればみれるようになりますか?だれかおしえてーー
186 :
まちがって名前消しちゃいました。 :2005/07/28(木) 00:33:29 ID:f6+0833H
【在日韓国人 山口安士のiCONというパソコン屋に注意して!!!】
↓皆さんはこの店を知っていますか?
http://www.yay-jp.com/pcshop/ この店は凄く悪い店で(盗品を販売している店です)
ここの製品を購入した私の知り合いは酷い目にあいました。
日本人に嘘をついて凄い損害を与えています!!
みんな注意してくださいね!!
>>185 1~2行目と3~4行目の繋がりが全くわからないので、
トータルで何がしたいのかさっぱりわからん。
188 :
Voke :2005/07/28(木) 18:19:32 ID:C3c9bhjj
某ランドからCパド落として「Set Bcc」とかいうやつでパス指定したんですが、 そこからどうしたらいいか分かりません。つーかCパド落として解凍した時点で Cパド使えるようになるんじゃないですか?玄人の皆さん、アドバイス下さい。 超初心者&長文スミマセソ。
189 :
Voke :2005/07/28(木) 19:13:53 ID:88/epw60
スミマセソ他いって聞いてきます。
190 :
2 :2005/07/29(金) 08:57:03 ID:vYCLgb7B
>>187 185です。
単純にホームページ上にJAVAアプレットでつくられた
シュミレーションとかグラフが読み込めないのです。
そのグラフがでる位置には何も表示されず
左隅に小さな赤い×がでてしまいます。どうすれば読み込める
ようになるのでしょうか?使ってるのはXPです。
これでわかるでしょうか?
とりあえずシミュレーションな。 正しい用語を使えないと質問の意味も通りにくくなるからさ。
>>180 投球回数??
てっきり相手をしたバッターの数だと思ってた。
>>190 JavaアプレットとJavaスクリプトはちゃんと区別しよう。
Javaアプレットだったら、コンパイルしたclassファイルを
APPLETタグでくるんでやれば表示されるはず。
JavaスクリプトだったらSCRIPTタグの中でゴリゴリ書いてあれば
表示されるはず。
194 :
まちがって名前消しちゃいました。 :2005/08/01(月) 17:13:54 ID:7zsHlHHv
>>>ってどういう効果ですか >なら比較演算、>>ならビットシフトと分かりましたが>>>が分かりません
195 :
まちがって名前消しちゃいました。 :2005/08/02(火) 13:23:38 ID:/WldXHhr
#include <stdio.h> int main (void) { int i,N,NM=35,a0,a1,a3; printf("Input Number N (1<N<%2d)\n",NM); do{ printf("N:"); scanf("%d",N); if(1<N && N<NM) { a0=0,a1=1; printf("%10d%10d",0,1); for (i=1;i<=N;i++); { a0=a0+a1; if(1%5 == 0) printf("\n"); printf("%10d",a0); a3=a0; a1=a3; a0=a1; } putchar('\n'); else puts("N is out of range. Program stopped."); } return (0); }while(1<N & N<NM) } どこが間違ってますか?
196 :
まちがって名前消しちゃいました。 :2005/08/02(火) 18:36:57 ID:c4hYhFky
あー事故解決しました
オススメのコンパイラって何ですか?
199 :
まちがって名前消しちゃいました。 :2005/08/08(月) 12:15:08 ID:tUDfsD02
C言語初心者です オススメの参考書教えてください
200 :
ハーピィ :2005/09/24(土) 22:46:44 ID:???
E・∇・ヨノシ <200ゲット♪♪?
201 :
まちがって名前消しちゃいました。 :2006/02/05(日) 19:07:26 ID:bIDXlE0J
primeってなんですか?
203 :
まちがって名前消しちゃいました。 :2006/04/28(金) 10:15:18 ID:iKiF8bwN
C言語の勉強初めて間もないひよっこですが、 ファイルから内容を取り出すときに”レコード”単位で扱っているときいたのですが良くわかりません。 教えていただけないでしょうか?
漏れには解ったぜ。
208 :
まちがって名前消しちゃいました。 :2006/04/28(金) 13:56:37 ID:iKiF8bwN
>>208 どれか適当な関数でファイルの入出力をやればいい。
210 :
まちがって名前消しちゃいました。 :2006/04/28(金) 18:15:19 ID:A4ouIbFV
漸化式の収束点を|x(n+1)-x(n)|<10^(-5)の精度で求めるプログラムを 作らないといけないんですが、●●の精度で…ってどういう意味なんでしょうか… どうやれば良いのか教えてください…_| ̄|○
cとは関係ないのではないか。
>>211 ちょっとそう思ったんですけど、考え方とかサッパリわからないので質問しました・・・
>>203 少なくともCの入出力にレコードという単位は無い。
そのプログラムを作った奴が勝手に決めているだけのこと。
UNIX以前はあったんじゃない? 入出力をストリームIOに統一したのってUNIXからじゃなかった?
配列をmemset() で初期化するとき、char型やshort型の配列に対応出来るよう memset(array, 1, sizeof(array)); で初期化したのですが、short型で初期化した場合、 257 で初期化されてしまいます。 どうすれば1で初期化できるでしょうか?
217 :
216 :2006/05/15(月) 17:55:15 ID:???
すみません。他で聞きます。
218 :
永遠の待機 初心者 :2006/07/05(水) 13:48:11 ID:T8+OZLvM
二ヶ月cを勉強し、最近までscanが使えない知ったものです。 教材にてないので教えてください、お願いします。 >>数列の長さを設定しました。 キーボードで文字を入力します。 入力した文字が設定した長さを超えるとごみが出て 次の入力を影響します。 設定した長さ以後のごみをメモリからとる方法は?? (どんなの関数?)
>>218 scanとは?scanfの間違いか?
全体的に良くわからない文章だから、
日本語で説明しようとしないで、ソースコードを書け。
はさみうち法とNR法でf(x)=x-eの(-(xの二乗)/2)乗=0を計算したプログラミングを載せてもらえませんか? 本当にお願がいします。
>>221 そんなのググればすぐ見つかる様な気が。
223 :
まちがって名前消しちゃいました。 :2006/07/14(金) 03:46:19 ID:OiTgw0Kx
#include<stdio.h> #include<stdlib.h> #include<time.h> struct card { int face; char *suit; }; typedef struct card Card; void fillDeck(Card *,int [],char *[]); void shuffle(Card *); main() { Card deck[40]; int face[] = {1,2,3,4,5,6,7,8,9,10}; char *suit[] = {"hart","daiya","kurab","superd"}; srand(time(NULL)); fillDeck(deck, face, suit); shuffle(deck); printf("baeojunnbisimasu"); return 0; }
224 :
まちがって名前消しちゃいました。 :2006/07/14(金) 03:48:04 ID:OiTgw0Kx
void fillDeck(Card *wDeck,int wFace[],char *wSuit[]) { int i; for (i = 0;i <= 39;i++){ wDeck[i].face = wFace[i % 10]; wDeck[i].suit = wSuit[i / 10]; } } void shuffle(Card *wDeck) { int i,j; Card temp; for (i = 0;i <= 39;i++ ){ j = rand() % 40; temp = wDeck[i]; wDeck[i] = wDeck[j]; wDeck[j] = temp; } } ここからカードを5枚表示させてその数字の合計を表示する プログラムにしたいのですが どなたか教えていただけないでしょうか よろしくおねがいします
226 :
まちがって名前消しちゃいました。 :2006/07/14(金) 11:30:57 ID:OiTgw0Kx
>>225 丸投げではないんですが・・・・
せめて5枚表示させるやり方だけでもおしえていただけませんか?
>>226 mainでint i;
int sum;
を宣言して
mainの終わりに
sum = 0;
for ( i = 0; i < 5; ++i) {
printf("%s %d\n", deck[i].suit ,deck[i].face);
sum = sum+deck[i].face;
}
printf("sum:%d\n", sum);
こんなんでいいのか?
228 :
まちがって名前消しちゃいました。 :2006/07/14(金) 12:22:52 ID:OiTgw0Kx
サロンにこんなスレがあったとは知らなかった。 でもここよりプログラム板の初心者向けのC言語 スレ行った方がいいんじゃないかなあ。 プログラム板の方がその筋のプロが多く見ている と思うし。(俺もその内の一人だが)
丸投げだの宿題だのと、いちいちつっかかるようなら向こうと変わらんな
そもそもサロンって何のために存在してんの?
そうそう残った奴は冷蔵庫で冷やしとくといいお
>>234 その頃が2chのピークか
今となっては…
236 :
初心者 :2006/11/02(木) 21:37:05 ID:K8JccIy5
cygwin で cとgccとviをダウンロードしたいのですが、やり方わかりますか?ちなみに言葉の意味はあまりよくわかっていません。
すみません、この問題のプログラムはどう作ればよいのかがわからないので ぜひ、よろしくお願いします・・・ 問題 配列su(要素数:12)に任意の数値をランダムに初期値設定し、逐次決定法によって 整列(昇順)させ、結果を表示させるプログラムを作成してください。
239 :
初心者です :2006/11/20(月) 20:41:06 ID:xhUMpkx0
data[0][0][0]=data[0] data[0][0][1]=data[1] data[0][0][2]=data[2] data[1][0][0]=data[3] data[1][0][1]=data[4] data[1][0][2]=data[5] data[2][0][0]=data[6] data[2][0][1]=data[7] data[2][0][2]=data[8] … data[0][1][0]=data[3w] data[0][1][1]=data[3w+1] data[0][1][2]=data[3w+2] data[1][1][0]=data[3w+3] data[1][1][1]=data[3w+4] data[1][1][2]=data[3w+5] というふうに1次元配列のrgbデータをを3次元配列で表したいんですがどうすればよいですか?
240 :
まちがって名前消しちゃいました。 :2006/11/30(木) 01:19:57 ID:mI4yUGSi
void main() { int x[LENGTH] , y[LENGTH] , s[LENGTH] ; int ci , co ; int x8 , y8 , s8 , bit=0x01; set_tris_b(0xff); set_tris_c(0xff); set_tris_D(0xff); x8=port_b ; y8=port_c ; for( i=0 ; i < LENGTH ; i++) { x[i] = y[i] = 0 ; if( (x8 & bit) !=0) x[i] = 1 if( (y8 & bit) !=0) y[i] = 1 bit <<= 1 ; } ci=0 ; for(i=0 ; i < LENGTH ; i++) { fadder( &s[i], &co , &x[i], &y[i], &ci ) ; } ci = co ; for(i=0 ; i < LENGTH ; i++) { fadder( &s[i], &co , &x[i], &y[i], &ci ) ; ci = co ; } bit =0x01 ; s8 = 0 ; for(i=0 ; i < LENGTH ; i++) { if( s[i] !=0) s8 = s8 | bit ; bit <<= 1 ; } port_d = s8 } を2進数16桁の加減算プログラムに変えろといわれたのですが まったくわかりません よかったら教えていただけないでしょうか?
241 :
まちがって名前消しちゃいました。 :2006/12/08(金) 03:27:46 ID:FBBsX6Lz
すいません。 わからんのです。。 教えてください。お願いします!! 1. 二つの文字列s1,s2 をキーボードから入力し,それぞれの文字列の長さ(NULL 文字は含まな い)を画面表示し,さらに文字列s1 の後ろに文字列s2 を連結して画面表示するプログラムを 作成しなさい.ただし,文字列s1 と文字列s2 を連結したものを一度文字列s1 に格納してから 表示を行うこと.また,strlen(),strcat()等の関数を使ってはならない. 提出物: プログラム,実行結果(3 回分以上) 2. 以下の処理を行うプログラムを作成しなさい.ただし,文字列s,t の要素数は50 とすること. strlen(),strcmp()等の関数を使ってはならない. (1) キーボードから文字列を入力し,文字列s に格納する. (2) 文字列sを逆順に並べ替えたものを文字列t に格納する. (3) 文字列sと文字列t が同一であるかどうかを比較し,その結果を画面表示する. 提出物: プログラム,実行結果(3 回分以上)
243 :
まちがって名前消しちゃいました。 :2006/12/13(水) 21:03:44 ID:z5+0lo/p
ウイルスバスター利用の大きなデメリット 1つのシリアルで3台のPCに入れられるということで一見得のように見えます。 ですが、実際は製品やサポートの点で非常にずさんな管理体制となっています。 試していないパターンファイルを配布して多くのユーザーが最悪PC再起不能までいったのは最近のこと。 ここで私の元に寄せられたトレンドマイクロの情報のうち、私の実体験を記します。 VB2007に変えてから困ったことがあったのでテクニカルサポートに電話をしました。 長い待ち時間の後 「飯田 絢香(実名)」 という人物が対応に出ました。 そこで圧縮ファイルの検索法について問い合わせたところ、実際は知らないのに非常識な指示をしました。 私が指摘すると、かなり長い待ちうけのあと訂正してまいりました。 ちょっとしたミスに思えるかもしれませんが、文章を短くまとめるためかなりはしょってあります。 このようにノートン、マカフィー、VB、3製品使った身としてサポート体制という点では トレンドマイクロ(ウイルスバスター)は不安要素だらけです。 一見して得だ、と思えるところにも罠はあります。 1つ言えることは1台のPCにしか入れない人はウイルスバスターを使うメリットは何もないということです。 なお「飯田 絢香」というテクニカルサポートの実名を出すにあたっては直属の上司である 「久高 浩路(実名)」の許可をいただいています。 「飯田 絢香」「久高 浩路」という人物はトレンドマイクロのサポートの一部分ですが全体が 依然このような状況であるのでここに報告します。
244 :
まちがって名前消しちゃいました。 :2006/12/13(水) 21:19:59 ID:nJALoNvb
245 :
困り人 :2006/12/15(金) 18:42:09 ID:hmsIqZdw
次のガウス消去法のプログラムを教えてください。できるだけ簡単なプログラムを教えてください。 3X①+2X②+X③=10 2X①+5X②+2X③=18 X①+4X②+X③=12
246 :
まちがって名前消しちゃいました。 :2006/12/18(月) 11:23:43 ID:1vmuM6La
C言語でプログラムを作成したのですが、コンパイルの時に 下のようなエラーメッセージが出てしまいました。 これはどのようなエラーで、どうすれば解決できるのか教えてください。 passing arg 1 of `XXX' makes pointer from integer without a cast
お聞きしたいのですが 超初心者にでも理解出来て 向いてる お勧めの本で いいのはありますか? 教えて下さい!
>>246 まずその英文を日本語に翻訳することをおすすめします。
ヒント
cast は型変換のことです。
249 :
まちがって名前消しちゃいました。 :2007/01/05(金) 12:09:10 ID:nviG+YZo
ごめんなさい 分からないので教えてください 宿題で3桁の宝くじ(?)の当たり検索のプログラムを作成してます 1等3桁すべてあたる 2等下2桁 3等下1桁 実行すると同時に出てしまいます・・・ 1等あたり 3等あたりみたいな感じで・・・・ すいませんがどこがおかしいかみてくださいお願いします #include <stdio.h> #include <ctype.h> #include <stdlib.h> #include <string.h> void main(void) { int i; char tousen[100]; char chusen[100]; int atari=1; char buffer[3]; char buf_a[3];/*三等の当たり番号の収納箱*/ char buf_b[3];/*二等の当たり番号の収納箱*/ char buf_c[3];/*一等の当たり番号の収納箱*/ /*char buf_d[3];*/ for(i=0;i<=2;i++){ printf("%d等の当たりを入力。\n",i+1); printf("%d等は%d桁。\n",i+1,3-i); scanf("%s",&tousen); } { while(chusen>0){ printf("3桁の抽選番号を入力。\n"); printf("終了する時は0を入力。\n"); fflush(stdin); scanf("%s",&chusen);/*抽選番号の入力*/ if(chusen[1]==0)/*0を入力されたら終了する*/ break; } sprintf(buffer,"%06ld",atari); buf_a[2]=buffer[2]; atari=atoi(buf_a); if(atari==chusen[3]) printf("3等あたり\n"); buf_b[1]=buffer[1]; buf_b[2]=buffer[2]; atari=atoi(buf_b); if(atari==chusen[2]) printf("2等あたり\n"); buf_c[0]=buffer[0]; buf_c[1]=buffer[1]; buf_c[2]=buffer[2]; if(atari==chusen[1]) printf("1等あたり\n"); else printf("全部外れ\n"); } }
>>249 一等から調べて、当たったら最後に飛ぶ様にしろ。
252 :
249 :2007/01/09(火) 16:39:27 ID:CnhLaLov
249です。 うまく飛ぶように出来ません・・・ 助けてくださいOTL
253 :
まちがって名前消しちゃいました。 :2007/01/19(金) 02:20:34 ID:Pul07DaS
ファイルの入力で読み込んだ文字を全て一旦 変数に格納したいのですが、どのようにすればいいのでしょうか? いろいろ試してみたのですが、実行中に突然エラーになってしまったり して、どうすればいいのか困っています。 わかる方 教えてください。 ちなみに具体的に説明すると while(c=fgetc(fp))!=EOF){}のchar型変数cに格納された 文字をほかに用意した変数(a[200])に一回一回格納して いくにはどうすればいいのか? ということです。 よろしくお願いします。
まずは、どういうコードを書いたのか晒せ。
255 :
まちがって名前消しちゃいました。 :2007/01/24(水) 03:20:51 ID:y+z+ZlzP
教えてくださいm(__)mタイピングソフトを購入しようと思ってるんですけど、パッケージ版とダウンロード版って、どうに違うんでしょうか?
>>255 初心者違い。ここC用だぞ。
パッケージはまんまパッケージで購入。CD入れてインストール。
ダウンロードはダウンロードしてインストール。
>>256 スレ違いすみません。どっちがいいのか分からないけど、CDで買うのとダウンロードして音楽を聞くようなものかな?ありがとうございましたm(__)m
258 :
まちがって名前消しちゃいました。 :2007/01/30(火) 22:21:25 ID:NNLFVWW+
184e-0024 は 184 * 10^(-24) であってますか 汗
259 :
まちがって名前消しちゃいました。 :2007/02/01(木) 03:30:05 ID:a/YcCwxk
クッキーとは何ですか?
何故ここで聞く?
261 :
まちがって名前消しちゃいました。 :2007/02/02(金) 03:52:41 ID:ANacAXM9
クッキーってのは、焼洋菓子だ。間違っても不二家のを買うんじゃないぞ! と、ベタなボケを入れてみる。
262 :
262 :2007/02/02(金) 22:56:40 ID:???
プログラムの勉強を始めます。 C言語とJAVAのどちらにしようか迷ってます。 1.どっちが簡単か 2.どっちが将来性があるか が分らん。
264 :
262 :2007/02/04(日) 10:28:30 ID:???
265 :
まちがって名前消しちゃいました。 :2007/02/04(日) 15:01:09 ID:T0Spphu0
ごく基礎的なことでお尋ねします。(長文失礼) 昔、NECの9801のDOS環境で、MS-C6で組み上げた自作のデータベースソフトがあります。3つのソースを分割コンパイルし、LinkしてEXEを作成しています。 Win95及びWin98までは、EXEファイルとデータファイルをコピーしておけば、コマンド入力で動いてくれました。 しかしWin2000とXP上では、全く作動してくれません。 16bit環境と32bit環境の違いかな推測しているのですが、どうなのでしょうか? もし16と32の違いが原因であれば、下記の対処策のどれで解決できるのでしょうか。 ①コンパイラ&リンカーを32bitのものと変えてコンパイル・リンクする。 ②MS-C全体を、32bitのC言語に取替え、XPで再作成する。 ③ソーステキストの中に書いた「ESC・↑・↓」キー等のASCIIコードも書き換え、MS-C全体を、32bitのC言語に取替る。 それとも原因は全く別の所に有って、そんなことをやっても所詮は無理という結論でしょうか?。 時々このソウトを使っているので、これが有る限り9821vxというPC&CRTがリサイクルに出せません(^^;)
266 :
07002150849363_em :2007/02/05(月) 12:01:43 ID:hgI8n5w8
テスト
C言語の基本は学びました。 しかし、ソフトを作ろうと思ったとき、、、たとえば電卓を作ろうと思ったとき、どうすればいいかわかりません。 コマンドプロンプトのソフトじゃないのを作るにはどうすればいいですか?
270 :
まちがって名前消しちゃいました。 :2007/02/15(木) 16:59:48 ID:67Ffp6Xk
■プログラム課題:最小値を算出するプログラムを作る 3つの整数を入力し,その内の最小値を出力するプログラムを作成せよ. 但し,最小値を算出する関数,"min3"を自分で作成し用いなさい. また,最小値の出力はメイン文で行うこと. ------------------------------------------- "表示結果の例" 3つの整数を入力してください。 整数1:5 整数2:-4 整数3:0 最も小さい整数は-4 ------------------------------------------- 誰かお助けください!!
271 :
まちがって名前消しちゃいました。 :2007/05/19(土) 15:51:32 ID:pz6LK5H5
現在C言語勉強中の者ですが、DOS窓の背景色を変えるにはどうすればいいでしょうか。 ご教授お願いします。
272 :
ななし :2007/05/26(土) 19:21:20 ID:l0+KCWPP
はじめまして。 現在画像処理のアプリを作ろうとしております。 画像をメモリ内で拡縮してサムネイル画像を作ろうと、 StretchBltを使えばできそうかなと思っていろいろ 試行錯誤しておりますがうまくできなくて困っております・・・。 プログラミングの基本的なとこもまだ微妙なレベルなので 根本的なところで間違ってるかもしれませんが どうぞよろしくお願いします。 -----ここから----- unsigned char* orgImage = NULL; // 元画像 static HDC hdcbmpBuffer = NULL; // 元画像用 static HDC hdcthumBuffer = NULL; // サムネイル用 static HBITMAP hbmpBuffer = NULL; // 元画像用 static HBITMAP hthumBuffer = NULL; // サムネイル用 // index番号に合った静止画像のポインタの取得 orgImage = (unsigned char*)mov->movimg[index]; // Windowハンドルの取得 hWnd = FindWindow(NULL, "WinAPP"); // Windowのデバイスコンテキストの取得 hdc = GetDC(hWnd); // Windowと同じDCでメモリDCの作成 hdcbmpBuffer = CreateCompatibleDC(hdc); // 元画像用 hdcthumBuffer = CreateCompatibleDC(hdc); // サムネイル用 // サムネールのDIBSectionのHBITMAPバッファを作成 hthumBuffer = CreateBackbuffer(thumWidth, thumHeight); ReleaseDC(hWnd, hdc); // オブジェクトにバッファのビットマップを選択 hbmpBuffer = (HBITMAP)orgImage; SelectObject(hdcbmpBuffer, hbmpBuffer); // オブジェクトにサムネイルのDIBSectionのHBITMAPを選択 SelectObject(hdcthumBuffer, hthumBuffer); // StretchBltの設定 SetStretchBltMode(hdcthumBuffer , COLORONCOLOR); StretchBlt(hdcthumBuffer, 0, 0, thumWidth, thumHeight, hdcbmpBuffer, 0 , 0, mov->width, mov->height, SRCCOPY); // 構造体の配列にメモリを確保してコピー mov->thumimg[index] = new unsigned char[thumWidth*thumHeight]; mov->thumimg[index] = (unsigned char*)hthumBuffer; DeleteObject(hthumBuffer); DeleteObject(hbmpBuffer); -----ここまで----- DCの扱い方が悪いのか、StretchBltの設定の仕方が違うのか、 メモリへ書き込み方が違うのか・・。 そもそもこういった使い方はできないのか分からないでいます。 またもっと簡単に縮小できるよってのもありましたらよろしくお願いします。
hbmpBuffer = (HBITMAP)orgImage; これが明らかにおかしい ビットマップハンドルは専用の関数で作らないといけない
274 :
ななし :2007/05/28(月) 08:41:47 ID:QLCcU5IY
ありがとうございます。 ビットマップの扱いについて調べ直してきます・・。
275 :
奈々氏 :2007/05/31(木) 16:15:24 ID:T9SgpM9z
学校の宿題で、預金額、利率を入力して、10年間分の各利率に対する 預金額を表示するってのをやれって言われたんですが、全くわからないんで 誰かまじで教えてください。お願いします!預金額の最高額は900000円で利率の入力は% 利率の刻みは、0.05%、各金額の間は7桁表示。 預金額=預金額+利息 利息=預金額*利率*80%でお願いします。 以下の解答例のようにしたいんです。m(vv)m 例) 預金額(円)=10000 利率(%)=0.30 利率 1年 2年 3年 4年 5年 6年 7年 8年 9年 10年 ------+------+------+------+------+------+------+------+------+------+------+ 0.30% | 10024 10048 10072 10096 10120 10144 10168 10192 10216 10240 0.35% | 10028 10056 10084 10112 10140 10168 10196 10224 10252 10280 ・ ・ ・ ・ 0.75% | 10060 10120 10180 10241 10302 10363 10425 10487 10549 10612
これからC言語を勉強しようとおもってるんですが、こんなエディタないでしょうか? フリーソフトで、グラフィックが綺麗で、「実行」のところにコマンドプロンプトがあるようなエディタです。 教えてください。
277 :
まちがって名前消しちゃいました。 :2007/06/14(木) 21:10:14 ID:b6f1Mb1B
C言語でRS232Cでシリアル通信をさせるためのプログラム(命令文!?) ってどういうものがあるのでしょうか? rs send buf() とか知っていますが・・・・・ 初心者ですみません。
>>277 C言語には、そういう類は一切ない。
全て、ライブラリとして外部から提供される。
279 :
277です :2007/06/15(金) 22:51:27 ID:tKuzs51Y
>>278 そうなんですね、どうもありがとうございました。
>>276 言っていることがよくわからないが、Visual C++ 2005 Express Edtionはどう?
ニートで暇だからゲームでも挑戦しようかって始めたんだが いきなり躓いたorz 中略でスマンが一番上のwhile~の行でエラーが出る。一日中 悩んだだが解答見つからず・・。エラー見つけるの苦手だよorz 助けてくれ・・。 メッセージはint' 型は 'char *' 型に変換できないって出てる。 char buf[99]; char* p; int i,j,map_data[99][99]; この行→ while((fgets(buf,sizeof(buf),fp))!=EOF){ j=0; p=strtok(buf,","); map_data[i][j]=atoi(p); j++; while(p!=NULL){ p=strtok(NULL,","); if(p!=NULL){ map_data[i][j]=atoi(p); j++; } } i++; }
282 :
281 :2007/07/03(火) 21:20:41 ID:???
>>269 の所で聞いてきます。スレ汚しすみません。
283 :
まちがって名前消しちゃいました。 :2007/07/04(水) 23:56:46 ID:8qNM6RsB
#include <stdio.h> #include <math.h> #define PI 3 // およそ3 main() { /* a,bの値 */ int a = 10, b = 20, i; double x, y, t = 0.0; char c; /* x,yのどちらを表示するか */ printf("x or y ? -> "); scanf("%c", &c); /* 計算して表示 */ printf("\n -1 0 1\n"); printf("t |----------|---------|\n"); while (t < 10.0) { x = cos(2 * PI * a * t); y = sin(2 * PI * b * t); printf("%2.1lf ", t); if (c == 'x') for (i = 0; i < (int)(10.0 * x + 10); i++) putc(' ', stdout); else if (c == 'y') for (i = 0; i < (int)(10.0 * y + 10); i++) putc(' ', stdout); printf("*\n"); t += 0.1; } return 0; } のwikiに載っていたプログラムで x = cos(2 * PI * a * t); y = sin(2 * PI * b * t); の2の値を自由に変えられる(自分で入力できる)ように したいんですけど、どうやったらいいですか?
#include <stdio.h> main() { int a; int b=0; for(a=0; a<=100; a++) printf("セ氏温度:%d カ氏温度:%d\n",a ,fahrenheit(a,b)); } int fahrenheit(int x, int y) { y = (9/5)*x+32; return y; } セ氏温度からカ氏温度を求めるプログラムなのですが float型を使ってカ氏温度を小数点第1まで出力したいのですが エラーばかり起きて私にはどうにもできません 誰か助けてください
俺も初心者だが適当にこんな感じなのかな。 もう、遅いかもシレンが。 void main() { float fahrenheit(float x, float y); float a,b; for(a=0,b=0;a<100;a++) printf("摂氏温度%.1f 華氏温度%.1f\n",a,fahrenheit(a,b)); } float fahrenheit(float x,float y) { return y=(x*9/5)+32; }
2次方程式の解を表示させたいのですがなぜか解がおかしな値になってしまいます どうすれば解決しますか #include<stdio.h> int main(void) { int a,b,c,d; double x,x1; printf("ax^2+bx+c=0のa,b,cを入力してください:"); scanf("%d %d %d",&a,&b,&c); d=b*b-4*a*c; x=(-b+sqrt(b*b-4*a*c))/2*a; x1=(-b-sqrt(b*b-4*a*c))/2*a; if(d==0)printf("x=%.3lf",x); else if(d>0)printf("x=%lf,%lf",x,x1); else if(d<0)printf("実数解が存在しません"); return(0); } なんかquad()を使用するらしいのですが??って感じです
行列の計算をできるライブラリがあるとか聞いたんだけどどうやって 使うの?
288 :
まちがって名前消しちゃいました。 :2007/07/13(金) 16:34:00 ID:albFLb2i
char型のcharってcharacterの略で%nのnはnewlineの略ですよね? こういう略してある語の元の単語が載ってるサイトってないですかね? 探してもこの2つしかわからなくて
289 :
まちがって名前消しちゃいました。 :2007/07/14(土) 10:03:41 ID:jR0+x9vb
290 :
まちがって名前消しちゃいました。 :2007/09/01(土) 21:35:00 ID:LYltvTGy
age
ちょっとスレ違いかもしれませんが、サーティファイ主催の 検定1級では、プログラム改造よりも変更仕様書作成のウェイトが高いと 聞いたのですが、やはり実際のコードの変更点をしっかりと 変更仕様書に洗い出せていないと合格は難しいのでしょうか? 変更仕様書がうまく作れなくて困っています。
292 :
まちがって名前消しちゃいました。 :2007/09/23(日) 17:24:32 ID:KPrGnc4q
とてつもなく初心者な質問お許しください VC++6でコンソールをつくり実行したら、Debugフォルダにexeができます このexeを自作のicoに画像を変更したいのですが、どうすればいいんでしょうか? ご教授お願いいたしますm(_ _)m
293 :
まちがって名前消しちゃいました。 :2007/09/24(月) 04:23:47 ID:xy6UkbDw
#include<stdio.h> void main(void); void main(void) { int n1; short nt; nt=1; for(n1=0;n1<6;n1++); nt*=10; printf("10の6乗は%dです",nt); } これってどこが間違ってます?
for の後ろの方
295 :
まちがって名前消しちゃいました。 :2007/09/24(月) 08:26:58 ID:Fx+HSQ24
パソコンを買って、いざ家で勉強しようと思っても、うまくコンパイラ等がインストール できません。 仕方なくROM付の教材を買ってきてそこからダウンロードしようと思ったのに それもうまく出来ません・・・。 助けてください!!!!お願いします!!!!
0から10までの階乗を計算して表示するプログラムが分かりません。 誰か教えてください。
引数がvoid型の関数はどういう風に使えばいいんですか。 引数はポインタ型になってます。
>>293 printfはforの外に出さないと6回表示しちゃわないか?
>>298 引数は void なのかポインタ型なのかどっちだよ。
関数名(void* 変数名,その他引数……) こんな感じ。中身は詳細不明
関数名(void* 変数名,その他引数……) こんな感じ。中身は詳細不明
orz
>301 void *は汎用ポインタ型だからどんなポインタでも代入できる。 引数の場合はどんなポインタもキャストなしで渡せる。
305 :
まちがって名前消しちゃいました。 :2007/09/27(木) 07:03:18 ID:CuKDDG/1
ポインタについてなんですが、int d[10] = {1,2,3,4,5,6,7,8,9,}; int *pで宣言するときはp=dで入れることができるんですが double d[5] = {12.3,11.3,14.4,44.5,55.,}; と宣言したときにp=dではなぜかエラーが出るのですがどうしてでしょうか?
306 :
まちがって名前消しちゃいました。 :2007/09/27(木) 13:40:06 ID:Xn+Bjq5z
>>305 型があってないからじゃねぇかな。int *p のままだと入らないと思う。
キャストしてもいいけど意味内から、double *pて宣言すればいいのでないかな。
>>305 「p=d」って書き方は大嫌いだなぁ。
まぁ、私以外の人は全員そう書くんだろうけど。
私は絶対に「p = *(d[0])」と書く。
かなり初級のテキストのwhile文の項にある問題なんですが、 次のプログラムは、与えられた数(n)が割り切れる整数かを出力するものである。 解答例 #include <stdio.h> main() { int i, n; n=51; i=0; while( i < n+1){ if(n % i == 0){ printf(" %d は%dで割り切れる.\n", n, i); } i++; } } 【出力例】 51は 1で割り切れる. 51は 3で割り切れる. 51は17で割り切れる. 51は51で割り切れる. この条件式( i < n+1)のところ、条件式 ( i <= n )では何がいけないのでしょうか?
309 :
まちがって名前消しちゃいました。 :2007/09/29(土) 01:34:41 ID:3Q4jTB2i
>>308 そのプログラムを実行すると落ちないか?
>>308 条件式は(i < n+1)でも(i <= n)でもどちらでも構わない。
ただ、(i <= n)の方が限界値(n)がそのまま現れるから
俺はこちらを使うかな。
>>309 がいってる落ちるってのは
iを0で初期化してるから、1回目のif文で
n % i ==> 51 % 0 で0除算になってしまうということ。
iは1から始めなければいけない。
311 :
PC :2007/10/01(月) 16:44:35 ID:VuDdb56+
ほ
313 :
まちがって名前消しちゃいました。 :2007/10/11(木) 13:46:24 ID:R79agX/f
int a の1次元行列を領域1000個で宣言しすべての中身を10にするプログラムをつくれ。 ↑教えてください。全くわからないです・・・
314 :
まちがって名前消しちゃいました。 :2007/10/11(木) 14:13:35 ID:k8cg8XBF
>>313 void main(void){
int a[1000];
int i;
for(i=0;i<1000;i++){
a[i]=10;
}
}
長いこと書いてないからあてずっぽ。
そもそも一次元行列ってのがわからないから配列にしてみた。
こんなかんじ。
315 :
まちがって名前消しちゃいました。 :2007/10/11(木) 14:25:39 ID:k8cg8XBF
>>313 void main(void){
int a[1000][1];
int i;
for(i=0;i<1000;i++){
a[i][0]=10;
}
}
な気もしてきた。行列ってのがひっかかる。
動作としては
>>314 と同じ。はず。
一度表示した文字を全部消すことはできますか?
317 :
まちがって名前消しちゃいました。 :2007/10/21(日) 07:27:56 ID:aG0wwKTe
3年で300スレか・・・
レスね
319 :
まちがって名前消しちゃいました。 :2007/10/22(月) 20:23:08 ID:NkZ+y9hC
#define Pi 3.141592654と定義して, cos(Pi/2)が0に限りなく近くはなるんですが0にならなくて困っています. 解決方法はありますか?
320 :
まちがって名前消しちゃいました。 :2007/12/10(月) 09:49:59 ID:aypPi1Yg
321 :
まちがって名前消しちゃいました。 :2007/12/14(金) 16:51:19 ID:v7AU+QF/
vistaで某ランドのコンパイラは使えますか?
322 :
まちがって名前消しちゃいました。 :2007/12/20(木) 06:35:46 ID:vq7Rajlt
#include<stdio.h> int main (void) { char str[3]="SKY"; int i=0; while(i<=3){ printf("str[%d] = %d %x %c\n",i,str[i],str[i],str[i]); i++; } printf("文字列 = %s\n",str[3]); return 0; } コンパイル後これを実行すると初めのprintfは正常に動作するのですが ループ後のprintfでコマンドプロンプト上でエラーが出ます。 頭のいい人おしえてください。
>>322 char str[3]="SKY";
の
3
を
4以上にする
324 :
323 :2007/12/20(木) 10:06:13 ID:???
あっ、ごめん
>>323 も間違いだけど、本命はこっちだorz
printf("文字列 = %s\n",str[3]);
は
printf("文字列 = %s\n",str);
ついでに言うと、
while(i<=3){
は間違ってると思う
while(i<3){
だと思うんだが
while( str[i] ){ でもいいな
ちなみに > char str[3]="SKY"; は メモリーをcharのサイズで3バイト確保したところに 'S' 'K' 'Y' 0x00 の4バイト書き込むから暴走の元になるよ 普通は > char str[]="SKY"; で文字列サイズで確保でいいと思う でも、最近のコンパイラはエラー吐いてくれるのかな?
ASAPとALAP、リストスケジューリングの勉強をしてるんですが、 入力として与えるデータフローグラフの規模が大きくなっていくとき、 スケジューリングの実行時間がどのように増加するか教えてください。
328 :
まちがって名前消しちゃいました。 :2007/12/24(月) 17:07:50 ID:ltU1v7ro
プログラムの結果をhtml形式で出力したいんですがどうすればいいです?
以下の★1と★2のやり方で結果が同じになるのはどうしてなんでしょうか? 有識者の方ご教授をお願いします。 #include<stdio.h> void * func(void *p){ printf("□■□func開始□■□\n"); printf("pのアドレス = %p\n",p); printf("p = %d\n",(int)p); (int)p += 100; printf("p = %d\n",(int)p); printf("□■□func開始□■□\n"); return NULL; } int main(void){ int number = 30; printf("numberのアドレス = %p\n",&number); func((void *)number);★1 return 0; } ------------------------------------------------- #include<stdio.h> void * func(int *p){ printf("□■□func開始□■□\n"); printf("pのアドレス = %p\n",p); printf("p = %d\n",*p); *p += 100; printf("p = %d\n",*p); printf("□■□func開始□■□\n"); return NULL; } int main(void){ int number = 30; printf("numberのアドレス = %p\n",&number); func(&number);★2 return 0; }
330 :
まちがって名前消しちゃいました。 :2008/01/08(火) 23:22:37 ID:VRNJ0iPI
GTKのスレって無いの?
質問です。 以下のようなプログラムで、1が押されたときはiを、2が押されたときはjを 増やしていくようなプログラムにしたいのですが、 何も押されてないときには入力待ちにならずに次の処理をするようには出来ませんか? while(1){ char key; key = getche(); switch(key){ case '1': i++; break; case '2': j++; break; } /* 他の処理*/ } よろしくお願いします。
333 :
まちがって名前消しちゃいました。 :2008/02/12(火) 15:29:51 ID:NbzB99rW
SIN、COSを使って正多角形の図を作りたいんですけど、どうやればいいんですか?
>>319 コンピュータの計算とはそういうもの。
無限桁の計算は不可能で、必ずどこかで打ち切って有限桁の計算を行わなければならない。
だから、そこで誤差が生じる。
なので、各自が有効数字が何桁かということを意識してやらねばならない。
お前がプログラムを動かしているのが自分のPC上なら、
まず間違いなく浮動小数点数周りはIEEE 754に従っているはず。
そこでは、doubleの精度は十進法で15-17桁程度。
ということは、3.1415926535897932くらいまで桁を増やすのは効果がある。
逆に、それ以上は無意味。
文字列として、出力するときには上から6桁しか表示しないなどとすればいい。
printf系なら、%gや%fをそのまま使えば、そうなる。
これより新しいバージョンありますか freecommandlinetools2.exe のバージョン 2.04.001。bcc32.exe の製品バージョンが 5.0、ファイルバージョンが 5.5.1.2
336 :
まちがって名前消しちゃいました。 :2008/03/13(木) 01:22:31 ID:b9QRrp1k
#include <stdio.h> int main( ) { while(1) { printf("死にたい\n"); if(いじめっ子をやっつけられたら) { break; } else if(ループ中に死んだら) { return 1; } } return 0; } ループが抜けられません。異常終了は簡便です。助けてください。
Builder C++を使っている者ですが 実行ファイルによってWindowsが セーフモードで起動されたか否かを調べる方法はありますか
339 :
まちがって名前消しちゃいました。 :2008/03/29(土) 21:15:32 ID:FIndnqFd
>char str[3]="SKY"; char *str="SKY"; の方がカッコイイ。
340 :
尿たんぱく :2008/03/30(日) 17:44:23 ID:???
>>339 ここは初心者板なんだから
char* str="SKY";と書くべきだと思われ
const char *str = "SKY";
342 :
まちがって名前消しちゃいました。 :2008/04/06(日) 15:50:00 ID:O8+WM7v5
>>329 ★1はこういうことがしたいんではないの?
#include <stdio.h>
void* func(void *p)
{
int *number = (int*)p;
printf(" □■□func開始□■□ \n");
printf("numberのアドレス = %p\n", number);
printf("number = %d\n", *number);
*number += 100;
printf("number = %d\n", *number);
printf(" □■□func終了□■□ \n");
return NULL;
}
int main(void)
{
int number = 30;
printf("numberのアドレス = %p\n", &number);
func((void*)&number);
return 0;
}
343 :
まちがって名前消しちゃいました。 :2008/04/17(木) 07:46:18 ID:B9a8c4t+
よろしくお願いします!まず自分の質問が++なのかさえ分からないものですが宜しくお願いします。 あるアプリで競艇のデータを作っています。掛け金を掛け方に応じ変えています。 ■2連複=2000■3連単=3000 また投資額は(掛け方*レース数)です。 アプリ上で掛け方を入れたら自動的に投資額がでるようなのですが、式が分かりません。 自分で色々試し ■IF(方式=2連複,((レース数*2000,((レース数*3000)みたいなのを作りましたが、これだとダメでした。 宜しくお願いします。
344 :
まちがって名前消しちゃいました。 :2008/04/18(金) 02:43:28 ID:D6vxprhu
char str[3]="SKY";とchar *str="SKY"; の違いがよくわからん
346 :
まちがって名前消しちゃいました。 :2008/04/18(金) 17:59:51 ID:I3yEKX2w
入力された値が3だったら、 *** -** --* といった具合(後ろで桁合わせ、-は空白)に出力されるプログラムを組みたいと思います。 #include <stdio.h> int main(void) { int num; int i,j,k; printf("正の整数:"); scanf("%d",&num); if(num>0) { for(i=1; i<=num; i++) { for(j=num; 0<j; j--) { printf("*"); } printf("\n"); for(k=1; k<=i; k++) { printf(" "); } } } else { printf("無効な数値が入力されました。\n"); } return 0; } の様に組んだのですが、実行すると *** -*** --*** となってしまいます。 *を出力する部分が正常に動いていないのだと思うのですが、 どう改善させれば良いのか分かりません。 宜しくお願い致します。
347 :
まちがって名前消しちゃいました。 :2008/04/19(土) 18:54:28 ID:jlhkIUUO
>>346 これでどうでしょう。
#include <stdio.h>
int main(void)
{
int num;
int amax; /* アスタリスクの一行あたりの最大出力個数 */
int acnt; /* アスタリスクの出力個数カウンタ */
int smax; /* スペースの一行あたりの最大出力個数 */
int scnt; /* スペースの出力個数カウンタ */
printf("正の整数:");
scanf("%d", &num);
if (num > 0)
{
for (amax = num, smax = 0; amax > 0, smax < num; amax--, smax++)
{
for (scnt = 0; scnt < smax; scnt++)
{
printf(" ");
}
for (acnt = 0; acnt < amax; acnt++)
{
printf("*");
}
printf("\n");
}
}
else
{
printf("無効な数値が入力されました。\n");
}
return 0;
}
348 :
まちがって名前消しちゃいました。 :2008/04/19(土) 23:31:37 ID:2+nFYJMs
C++Compiler / Turbo Debugger ってどうやって使えるようになるんですか?
>>347 ありがとうございました。
恥ずかしながら、forの一くくりに条件を二つも入れられることを
知りませんでした。
350 :
まちがって名前消しちゃいました。 :2008/04/23(水) 13:44:41 ID:oir+0IES
すみません、質問なのですが char型の1次元数列に格納されている数列を INT型の変数に代入するにはどうしたらいいのでしょうか;; 具体的には、数列として1,2,3が入っているとすると それをINT型の123に変換できないでしょうか? int out,i,omomi=100; char suretu[3]=123; for(i=0;i<3;i++){ out=out+(suretu[i]-'0')*omomi; omomi--; } とすれば変換出来ると思ったのですが、char型の数とINT型の数は 掛け合わせることができないみたいで… それに加え、入力の数列が2桁、1桁の場合にどうやって判定すればいいのかも わかりません…。 よろしくお願いします;;
>>348 残念だが、ここはC専用初心者質問スレである。
C++はスレチ
352 :
まちがって名前消しちゃいました。 :2008/04/23(水) 20:17:42 ID:mk8tQfgw
>>350 こういうのは?
int out;
char suretu[] = "123";
out = atoi(suretu);
353 :
まちがって名前消しちゃいました。 :2008/04/23(水) 21:18:45 ID:oir+0IES
>>352 そんな関数あったのですね;;
もっと調べてみるべきでした。
ありがとうございました!
354 :
まちがって名前消しちゃいました。 :2008/04/27(日) 07:29:54 ID:ZHazopOp
アロー演算子ってものを使うと、処理速度が速くなるということが書いてあったのですが、 実際業務のような大きいプログラムを組んだ際、どの程度速くなるものなんで しょうか?
355 :
まちがって名前消しちゃいました。 :2008/04/27(日) 09:04:02 ID:+1ojxpH8
atoi .. asii to into
>>355 atoi .. ascii to integer
atof _ ascii to float
357 :
まるち :2008/04/29(火) 15:21:38 ID:v8mvk1NY
掛け金のついたトランプのポーカーゲーム作ってください(C言語)
>>350 無理やり自分でやるなら、
int keta;
keta=strlen(suretu);
for(;keta>0;keta--){
omomi=10~(keta-1);
計算;
}
じゃないか?
omomi--だと100回ループしてまうのでは。
すいません、質問です。 C言語学習のために、terapadやコンパイラの入ったディスクを 使ってインストールしてみました。指示に従って上手く終えたはずなんですが、 実際にbcc32コマンドを使ってコンパイルしてみても「認識されていないので 実行できない」という趣旨の文が出てくるだけです。cfgファイルの 移動も環境変数の編集も指示通りのはずなんですが・・・・・ 自分と同じミスをした方、いらっしゃったら教えて頂けませんか?
まず、terapadで作ったソースファイルをC:\borland\bcc55\Binのところに 保存する。C:\borland\bcc55\Binは作業フォルダ。君の作業フォルダは知らん。 次に、コマンドプロンプト上で >cd C:\borland\bcc55\Bin で作業フォルダに移動 >bcc32 ファイル名.c で終わり。
361 :
まちがって名前消しちゃいました。 :2008/05/11(日) 13:37:23 ID:W1a0Fnik
適当に数字を入力して その数字をまたある数で割って割り切れたらその値を出力して 割り切れなかったら余りだけをまた別の小さい値で割りきれるか って繰り返して最終的には割り切れるプログラムを作りたいんですが・・・ 例えば1020を500で割ると2余り20で2が出力され 余り20を10で割って2が出力されるみたいな 困ってるんでお願いしますm(_ _)m
>>361 頑張って書いてみたけどどうかな?
#include <stdio.h>
int main(void)
{
int wara,waru,ans,amari,waru2;
printf("割られる数と割る数を,で区切って入力してください");
/*例 100,3*/
scanf("%d,%d",&waru,&wara);
ans = waru / wara;
amari = waru % wara;
printf("答えは%d,余りは%d :",ans,amari);
scanf("%d",&waru2);
printf("%d / %d = %d",amari,waru2,amari / waru2);
return 0;
}
改良版 #include <stdio.h> int main(void) { int wara,waru,ans,amari,i; printf("割りたい数を入力してください\n"); scanf("%d",&wara);/*割られる数*/ for (i = 1;i <= 10;i++) { printf("どの数字で割るか入力してください\n"); scanf("%d",&waru);/*waraを割る数*/ ans = wara / waru; amari = wara % waru; wara = amari; printf("答えは%d\n余りは%d\n",ans,amari); } return 0; }
課題が出来ない、誰か教えて°・(ノД`)・°・ 2桁の16進数を入力して%xを使わずに対応する文字を表示するってのなんだが 例:入力 53 文字コード「53」の文字は「S」 どうやっても大文字のSが出ない(つд`)
C++はスレ違いですか?
質問です。 例えば int data[2][2] という2次元配列をとった場合 メモリ上ではどのように格納されているのでしょうか? data[0][0] data[1][0] data[0][1] data[1][1] それとも data[0][0] data[0][1] data[1][0] data[1][1] なのでしょうか?
Cを覚えたいんだけど、何から揃えればいいの?
パソコン ビルダー 参考書
369 :
まちがって名前消しちゃいました。 :2008/05/19(月) 09:21:26 ID:z9059u1R
C言語ってどれくらいのレベルを基準に 初級 中級 上級 と判断できるの?
初級:メモリの構造を理解できてポインタが 使える。 中級:***pとか意味も無く使ってみる 上級:むしろポインタを使わずにビューティーな ソースが書ける。 こんな感じだと初心者の俺が言ってみる。
371 :
まちがって名前消しちゃいました。 :2008/05/19(月) 20:49:15 ID:9LN3xx8J
C言語を勉強してみようと思って 「猫でもわかる~」という本を読みはじめてみたんですが、 処理環境ってどうすればいいのかさっぱりわかりません。。。 どこかで何かをインストールするんですか? ソフト買うんですか? 誰か教えてくださいorz
とりあえずMinGwでググッてみろ 話はそれからだ。
373 :
まちがって名前消しちゃいました。 :2008/05/19(月) 22:23:29 ID:9LN3xx8J
>372 ぐぐってみた! 「MinGwはフリーで入手できるGNUのCコンパイラである」らしいとわかった! これをダウンロードすればいいの?
そうだっ!! ダウンロードしてインストールして パスを通して終了だ。 パスの通し方はスタート→ファイル名を指定して実行 →cmd→PATH C:\MinGw\binとかそんな感じだ。 そしてソースファイルを作成したら Dos窓からgcc 何とか.txt エンター
375 :
まちがって名前消しちゃいました。 :2008/05/20(火) 00:15:44 ID:k9POdkJ+
プログラムの勉強のためにLinux入れちゃったよ でも、とりあえずHello Worldは書けた。 a.outなんてファイルが出来るのな 早くウィンドウとか出したいなぁ
378 :
まちがって名前消しちゃいました。 :2008/05/20(火) 13:37:09 ID:fZ6G5z1J
fprintfの使い方としてわからないんですが、文字列としてファイルから配列に読み込んだ場合 fprintfとして使うとファイルの読み込みの上書きじゃなく全部消えてしまうマスカ?
ここよりプログラム板に行った方がいいんじゃないか?
380 :
まちがって名前消しちゃいました。 :2008/05/20(火) 23:31:58 ID:k9POdkJ+
>376 ダウンロードは途中まで行けるんだけど、 「Your connection appears to have dropped out. Reconnect dial up or check your IE proxy settings.」 って表示されて途中で止まってしまう…orz 設定を調べろといわれてもド素人にわからないが、 色々と頑張ってみたところ互換性がうんぬんかんぬん。。。? MinGwがまだXP対応で使ってるPCがvistaだからとか?? ってなって困ってるところです。 丁寧に対応してくれてるのに つまずいてばっかりでごめん。 でもできればもう少し我慢して教えてくれないだろうか(><;)
>>380 Borlandのコンパイラをオススメしてみる。
http://www.codegear.com/jp/downloads/free/cppbuilder ↑のページの
C++ Compiler 5.5/Turbu Debugger
てのクリックして、必要事項記入してダウンロードできる。
個人使用に関しては只。
落としたら、コンパイラの実行ファイルフォルダを環境変数にPATH設定する。
多分コンパネのシステムからできる。
今あるPATHの後ろに;c:\borland\bcc55\binを加えて再起動。
それとINCLUDEとLINKのPATHをCFGファイルに設定する。
-IC:\Borland\Bcc55\Include
-LC:\Borland\Bcc55\Lib
て内容で、上のbinのフォルダにBCC32.CFGてファイルで作成する。ノートパッドでOK。
あとは適当にCのソース入れるフォルダ作って、そこにソース入れる。
コマンドプロンプトからソースのフォルダに行って、
>BCC55 ファイル名.c エンターで実行ファイルが作られる。
382 :
まちがって名前消しちゃいました。 :2008/05/22(木) 00:04:39 ID:K/s7JfXb
>>381 ふぅむ。。。
ちょっと今急いでレポートを書かなきゃいけないので
明日の夜にやってみる!
ちなみにこれってC++のコンパイラみたいだけど、
C++ってC言語とどう違うの??
今は『猫でも分かるC言語プログラミング』って本を読んでるんだけど
このコンパイラを使うならC++の本の方がいいのかなぁ?汗
383 :
まちがって名前消しちゃいました。 :2008/05/22(木) 02:10:45 ID:8ywkUfSW
すいません、ちょっと教えて下さい。 画面の右下のツールバーが消えてしまって、ペンまで消えてしまいました。 これは誤作動してるんですか? それともロックのようなもの?をしてしまったのでしょうか? 設定はしてみましたが、なぜかできませんでした。 再起動の時やショットダウンの時は一瞬ツールバーが表示されます。
384 :
まちがって名前消しちゃいました。 :2008/05/22(木) 02:16:53 ID:EicJJs1t
どなたかお助けください 以前zipファイルを開くときにプログラムを使って開くというのにしてしまいまして それ以来Adobeだのメモ帳だのから開くことしかできず結局中身は開けずじまいなのです プログラムから開くさえクリックしなければ以前のように見れた気がするのですが どうやったら直るでしょうか?お願いします!
しーとしーぷらぷらって何が違うんですか? スクリプトしか知らない自分に解り易く説明してください。
>>382 C++のコンパイラだけど、Cもいけるから大丈夫。
>>385 Cはどっちかっていうと機械向けの言語であまり人に親切ではない。
C++はCの仕様拡張でオブジェクト指向プログラミングとかクラスの実装とかで、
人に優しい。わかりやすいかどうかは別だ。説明してておいらもわかってないさ。
C++のプログラム経験あるけど、結局Cの範囲でしか書かなかったからな。
>>384 ここC言語スレなんだけど、それさえもわからんほど焦ってる?
とりあえず、エクスプローラーのツールのフォルダオプションのファイルタイプ
で登録されてる内容を編集するか、削除して一からやりなおすかしたらいいんじゃないかと思う。
388 :
385 :2008/05/22(木) 14:53:21 ID:???
>>386 詳しいご説明ありがとうございます。勉強になりました。
echo "main(){}" > test.c; gcc test.c
>>387 CってPCの略語だと思ってたらどうやら違う?
しかし直りませんわ・・・3月に買ったばかりなのに何もできやせんこのPC
391 :
まちがって名前消しちゃいました。 :2008/06/03(火) 21:36:44 ID:EHr8Vkzf
分かる人がいれば、教えていただきたいのですが・・・ VisualStudio2008でC++のMFCの基本的なスタイルで作成したんですが ビルドするとツールバー(切り取り・保存・貼り付け・バージョン情報)が 勝手に作成されてしまいます。 これを消すには、どこをいじればいいでしょうか?
えっとC初めてまだあまり経っていないので質問です。 勉強の仕方なんですけど参考書とかっていうのは揃えた方がいいのでしょうか?
C言語学習してて参考書が必要ないと感じるなら 買わなくていいだろ。
>>393 そりゃーごもっともだが、回答にはなってないな。
395 :
まちがって名前消しちゃいました。 :2008/06/09(月) 19:41:42 ID:kgYEaJxO
bccだと普通にできたけど・・・・ コンパイラの違いじゃないか? と初心者の俺が言ってみる
ネットがあるのに参考書も必要かな?
>>397 有ると便利な事も有る。
まぁ、やり方しだいだと思う。
と初心者が言ってみる
>>397 知識の質の違いの分かるエスパーには不要だよ
逆引き一覧だけは本で持ってる罠
401 :
まちがって名前消しちゃいました。 :2008/06/13(金) 16:51:24 ID:ANX/3Ydm
コマンドラインでプログラムを実行し、コマンドラインでキーボード入力をし、 Ctrl + dが押されるまで改行しても入力し続けることができて、Ctrl + dが入力されたら入力された文を すべてテキストファイルに書き込むプログラムはどうやって作ったらいいですか?
>>395 C++のコンパイラでコンパイルしてるから。
大方、VisualStudioのExpressでも使っているんだろう。
403 :
まちがって名前消しちゃいました。 :2008/06/20(金) 22:42:09 ID:V2kImuux
Πの近似値を求めるプログラムを教えてください
TL2号数使えばいいですよ
405 :
まちがって名前消しちゃいました。 :2008/06/23(月) 04:56:10 ID:Naxunqvb
>>403 これでヒントを得てください。
#include<stdio.h>
void main(void)
{
int w,a,b,c,d,e,f,g,h;
float i,j,k,l,m,n,o,p,q,r,s,t,u;
for(w=1;w<=10000;++w){
a=w;
b = a*a;
c=b-a;
d=2*a;
e=c/d;
f=a-e;
g=f*f;
h=g-a;
i=2*f;
j=h/i;
k=f-j;
l=k*k;
m=l-a;
n=2*k;
o=m/n;
p=k-o;
q=p*p;
r=q-a;
s=2*p;
t=r/s;
u=p-t;
printf("√%dの近似値は\%fです。\n",a, u);}
}
406 :
まちがって名前消しちゃいました。 :2008/06/23(月) 04:57:45 ID:Naxunqvb
二重for誰か考え方教えてください。 理屈はわかるけど、納得いかない…
わかるかわからんかはっきり汁 わからん例題を示せ
408 :
まちがって名前消しちゃいました。 :2008/06/23(月) 06:25:13 ID:Naxunqvb
#include<stdio.h> main() { int a,b; for(a=1; a<=10; a++) { for(b=14; b>a; b--) { printf("*"); } printf("\n"); } return 0; } for(b=14; b>a; b--) ← ここのb>aの理屈がどうしても理解出来ません。 誰かご存じでしたらお願いします。
bが減っていくんだから、例えばa=10のときは、 b=14>10、b=13>10、b=12>10、b=11>10 の4回(14-10回)。a=1のときは、 b=14>1、b=13>1、…、b=3>1、b=2>1 の13回(14-1回)。 同じ回数繰り返すにしても、書き方が色々ある。 for(b=14; b>a; b--) ... for(b=14-a; b>0; b--) ... for(b=0; b<14-a; b++) ...
for(b=0; b<14-a; b++) ... と書けば、ループの中で変わらない「14-a」を何度も計算することになるから、 ちょっと変形でもしてみようか、という話になる。
411 :
まちがって名前消しちゃいました。 :2008/06/23(月) 07:06:49 ID:Naxunqvb
あ!?スゴイ… よくわかりました。 新たな質問なんですが、以下の文だとどうして減らなくなるのでしょうか? 理屈は同じに思うのに、何で違うのかがわかりません。 すみません。これで最後ですので、おねがいします>< #include<stdio.h> main() { int a,b; for(a=1; a<=10; a++) { for(b=14; b>1; b--) ← { printf("*"); } printf("\n"); } return 0; } for(b=14; b>1; b--) ここの、b>aをb>1にすると、どうして減らなくなるのかわからないのです。
それはよく考え直せw
413 :
まちがって名前消しちゃいました。 :2008/06/23(月) 07:15:51 ID:Naxunqvb
はい>< ほんとありがとうございました。 だいぶ助かりました。
414 :
天照 :2008/06/23(月) 07:32:55 ID:ONdp8kFY
しね
415 :
まちがって名前消しちゃいました。 :2008/06/23(月) 07:43:21 ID:Naxunqvb
氏ね言わないでください:д; 馬鹿ですみません。
質問です。 配列にポインターでアクセスする時 例えば int data[10]; int *p_data; とある場合配列dataにポイントする場合 p_data = data; とする場合と p_data = &data[0]; とする場合がありますよね。 ですが、二次元配列にアクセスする場合 int data[10][10]; int *p_data; とある場合 p_data = data; ではなく p_data = &data[0][0]; としなければならないのはどうしてなのでしょうか?
417 :
まちがって名前消しちゃいました。 :2008/07/02(水) 19:03:01 ID:SN1wjbBk
家でC言語勉強しようと思ってるんだけどどんなソフト?用意すればいいの? できればそのソフトがあるサイトのアドレス張ってもらえると助かる
419 :
まちがって名前消しちゃいました。 :2008/07/02(水) 20:50:16 ID:SN1wjbBk
>>318 みて落としてみたけど実行ファイルフォルダってのがどこにあるか分からない・・・
420 :
まちがって名前消しちゃいました。 :2008/07/02(水) 20:50:46 ID:SN1wjbBk
421 :
まちがって名前消しちゃいました。 :2008/07/02(水) 22:11:40 ID:982AzdS7
学校の宿題で自己 参照 構造体 を使ってプログラミングしろって言われたんだけど ろくすっぽ授業聞いてなかったから不安なんだけどこれでいい?? #include<stdio.h> #include<string.h> int main(void) { struct roll{ char name[20]; int birth; int zip; char address[100]; char tel[20]; }data; strcpy(data.name, "Taro"); data.birth = 19901111; data.zip = 1234567; strcpy(data.address,"shiagaken kusatsushi."); strcpy(data.tel,"08012345678"); printf("name birth zip address tel\n"); printf("%-10.10s% 11.8d% 10.7d %-30.30s %-12.12s\n",data.name,data.birth,data.zip,data.address,data.tel); return 0; }
全然違うよw
423 :
まちがって名前消しちゃいました。 :2008/07/02(水) 22:50:05 ID:DQW+UtP0
自己 参照 構造体って何?w
424 :
sage :2008/07/05(土) 19:04:22 ID:4cKGSpQY
#include <stdio.h> int main(void) { char a; for(;;){ printf("文字を入力してください。\n"); a=getchar(); if(a=='A'||a=='B'||a=='C'){ printf("正解です。\n"); } else{ printf("不正解です。\n"); } } return 0; } この文の間違っているところはどこですか? 繰り返し文がないとうまくいくんですが、 繰り返すと勝手に1回条件文を通り「不正解です」と 出力されてしまいます。
>>424 好きなほうを選んでくれ
1.エンターを押す。だが「不正解です」は表示したくない
2.一々エンター押すのはめんどくさい
426 :
まちがって名前消しちゃいました。 :2008/07/08(火) 19:43:08 ID:w1hXj126
1でお願いします。
427 :
まちがって名前消しちゃいました。 :2008/07/08(火) 22:10:10 ID:ByVU2tyS
↓こんなプログラムを作りたいのですがどうやってつくったらいいのでしょうか? 挿入元文字列 : パソコン 挿入文字列 : デスクトップ ←scanfで任意に入力  ̄ ̄ ̄ ̄ ̄ ̄ ̄ 挿入位置 : 2 ←scanfで任意に入力  ̄ 挿入結果 : パソデスクトップコン 配列を駆使して作りたいです、教えてください
多分凄い初心者な質問だけど、コンパイラのバージョンってどうやって調べられるのか教えてください GUI開発環境で、CPad for Borland C++Compiler ってのを使ってます。 それでコマンドプロンプトを起動しgcc -v と入力したら gcc version 4.3.0 20061021 というのが表示されるんですが、 これがコンパイラのバージョンを表してるんですか?
ターミナルから、 cc -version みたいな感じだったかな?
>>429 gcc --versionと入力したら、
gcc (GCC) 4.3.0 20061021 (experimental)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
と表示されたんですが、このうちのどこがバージョンを表してるんですか?
gcc (GCC) 4.3.0 20061021の部分ですか?
4.3.0がバージョンで 20061021がリリース日じゃないか?
432 :
まちがって名前消しちゃいました。 :2008/07/09(水) 23:39:31 ID:zVECoHPI
for文で i = i + 1 は i++ と表現できますが、 i = i + 2 は どのように表現すればいいんでしょうか?
>432 i+=2 じゃだめ?
大きな配列(200MBくらい)を扱うプログラムを書いています。 普段はmakeを使って作業していて、makeを通じてプログラムを実行すると ちゃんと動くのですが、シェルから起動しようとするとセグメンテーションフォルトが出ます。 デバッガ(gdb)で起動しても正常に動作しました。 どうやら、シェルの子プロセスになっているとセグメンテーションフォルトになるようなのですが、 シェルごとに割り当てられているメモリの量に制限があるということなどはあるのでしょうか。 また、この場合どういう対策をすればいいのでしょうか。 環境 Ubuntu Linux (8.04) gcc 4.2.3 zsh 4.3.4
メモリをどうやって確保してるのでしょうか。 mallocでずずずい~~~っと確保しているのであれば、もしかすると そのうちの低い確率でNULLを返されてて、NULLポインタを使って メモリアクセスをしてしまった、なんて事があるかもしれん。
#include <stdio.h> int main(void) { int a,b,c,d,x,y; int mc[2][2]={0}; int ma[2][2]={0}; int mb[2][2]={0}; printf("a:"); scanf("%d",&a); printf("b:"); scanf("%d",&b); printf("c:"); scanf("%d",&c); printf("d:"); scanf("%d",&d); ma[2][2]={0}+{{a,b},{c,d}}; mb[2][2]={0}+{{d,-b},{-c,a}}; if(a*d-b*c==0) printf("逆行列はありません。"); for(x=0;x<2;x++) for(y=0;y<2;y++) mc[x][y]=1/(a*d-b*c)*mb[x][y]; for(x=0;x<2;x++){ for(y=0;y<2;y++) printf("%3d",mc[x][y]); putchar('\n'); } return(0); } abcdに数字を代入してその逆行列を求めるプログラムを作りたいのですが、どこを変えればよいでしょうか?
>>436 >int mc[2][2]={0};
>int ma[2][2]={0};
>int mb[2][2]={0};
演算途中は浮動小数点になるから
double mc[2][2]={0};
double ma[2][2]={0};
double mb[2][2]={0};
としないと、演算途中で全部小数点飛ばされるとかそんな事かな。
438 :
434 :2008/07/14(月) 05:36:48 ID:???
>>435 malloc からの NULL ポインタは条件分岐で回避してるので問題ないはずです。(そこでのエラーも何回か経験しました)
現在の問題はどうやら静的に確保されたメモリの部分がシステムのスタックを使いきってしまうために起こる問題のようです。たぶんCだけの問題ではないようなので、ちょっとUnix板にでも行ってきます…。ありがとうございました。
>>416 下のほうの場合では、
p_dataはint型へのポインタだからint型の配列をポイントすることができる
しかしdataはint型の配列ではない
dataはint型10個の配列の配列になっているので、
int型10個の配列へのポインタを宣言すればポイントできる
int (*p_data)[10]=data;
ようするに型が合わない
合わない場合でも無理やり代入することはできる
p_data=(int*)data;
440 :
sage :2008/07/19(土) 13:57:27 ID:eTv0ugg/
コンパイラのインストールと環境設定について質問なんですが *スタート→コンパネ→システム→詳細設定→環境変数→システム環境変数の中にPathの項目を設定する このpath項目を設定することの必要性について教えてもらいたいのです。 システム(OS)が環境変数で指定されているディレクトリに簡単にアクセスできるようにするもの。 つまりコマンドプロンプトあたりでわざわざソースファイルをコンパイラがあるフォルダにおかなくても そのソースファイルをコンパイルできるようにするためにある。でしょうか? もひとつこのpathというのはコンパイラの中で中間言語を順次出力する段階、という意のパスとは別物でしょうか? スレチかもしれないですがお願いします><
なんで名前の方に書き込んでるんだ俺・・・
>>440 gccなどを呼び出すとき、「gcc」「gcc.exe」で呼び出せるようにするためです
環境変数PATHを指定しなかったら"C:\Program Files\......\gcc.exe"のように
逐一パスをつけて呼び出さないと検索してくれないので、
コマンド的に名前のみで呼び出したい実行ファイルにはパスを通します
そうすればmakefileの中でも実行させたいプログラムのパスを省略できます
444 :
まちがって名前消しちゃいました。 :2008/08/01(金) 13:12:44 ID:kbDSdiq1
int a=5,b=2 double c,d,h=2.0 c = a/b; ① printf("c = %f\n",c); d = a/h; ② printf("d = %f\n",d); というプログラムで c=2.0 d=2.5 となるのですが、①と②ではどこが違うのですか? 初歩的な質問ですみません。
「C言語 型キャスト」でGoogle検索してみるのも。
整数演算(int)と浮動小数点演算(double)の違いだろう。
int型同士の演算はint型が戻り値になる。
int型とdouble型は型キャストされてintがdouble型になり
double型同士の演算結果が戻り値になる。
●C言語編 第21章 型変換
ttp://www.geocities.jp/ky_webid/c/021.html > 1つの式の中で複数のデータ型が存在する場合、大きい方の型に変換されます。
446 :
まちがって名前消しちゃいました。 :2008/08/01(金) 16:51:44 ID:kbDSdiq1
回答ありがとうございます。 ということは①はint型だから切り捨てられて2.0 ②はdouble型だからそのまま2.5ってことですか 型キャストという言葉自体しらなかった・・・
>>446 そんな感じでいいんじゃないかと思います。
448 :
まちがって名前消しちゃいました。 :2008/08/21(木) 13:55:42 ID:tKDDU3nn
小数点以下がある時は第n位まで、無い時は整数のみっていう出力の仕方を書式フィールドだけで指定する方法ってない?
>>448 入力検査、文字列処理の基本だろう
C言語の定石 を勉強せにゃあかん
C言語を先日から始めました。 商を出す[/]と余りを出す[%]や、[int]型や[double]型を知りましたが、 「小数点以下までを求める割り算」がいまひとつ思いつきません。 いろいろ[/]や[%]を混ぜ合わせた式にするのでしょうか。 例えば、34が48の何パーセントかを出すとき、小数点以下6桁まで求めて 「70.833333%」と出すにはどのようにすればよろしいのでしょうか。
451 :
まちがって名前消しちゃいました。 :2008/08/26(火) 21:37:40 ID:POhlpLV3
#include<stdio.h> int kotae(int,int); int main() { int a,b,c; printf("かけるられる値="); scanf("%d",&a); printf("かける値="); scanf("%d",&b); c=kotae(a,b); printf("%d X %d = %d\n",a,b,c); return 0; } int kotae(int a,int b) { int c; c=a*b; return c; } これをカスタマイズせよ
452 :
まちがって名前消しちゃいました。 :2008/08/27(水) 13:48:14 ID:9MCNuaLY
>>450 double型同士の計算では%が使えず、/だけ。
その/の結果は小数点以下も計算した商。
小数点以下6桁というような出力をするにはprintfなどで書式%.6fを使う。
454 :
450 :2008/08/28(木) 06:55:06 ID:???
>>451 >>453 御回答ありがとうございました。
[/]は商以下を切り捨てるので「小数点以下を最初から計算しない」のかと思い込んでました。
もう一度該当箇所の解説を本で読んでみて、なんとなく[double]型と[int]型の違いや
使い方がわかってきた感じがします。
何度か間違いながらも、「計算して表示するときに整数を[double]型にして計算して表示する」…という
方法をとりましたら、一応うまくいきました。(何もしないと小数点以下6桁の表示のようです)
最初に整数を入力するときは[int]型で、計算して割り合いを出すときだけ[double]型にしました。
最後の表示は次のように書きました。
printf("%dは%dの%f%です。\n",n1,n2,((double)n1/(double)n2)*100);
/*n1とn2は入力する二つの整数(int型)*/
二つの整数のそれぞれに(double)をつけて変換してから計算する方法しか思いつきませんでした。
もっと、簡潔に書く方法とかありましたら教えてください。よろしくお願い致します。
>>454 強いて言えば、(double)n1 / (double)n2は(double)n1/ n2で十分。
(演算対象の2つにint型とdouble型が混在している場合、intのほうがdoubleへ自動的に変換される)
だけど、前者の書き方をする人も一定数いるみたいだし、
どっちの書き方にするかはお前の好みで決めればいい。
456 :
450 :2008/09/02(火) 14:06:08 ID:???
プログラミング初心者です。 要素数NUMBERの配列に数字を格納し、その中から最小の値を表示するプログラムを書こうとしているのですが エラー原因がわかりません・・・。 アドバイスもらえないでしょうか。 開発環境:VC++2008 #include<stdio.h> #define NUMBER 5; int min_of(const int vc[], int no) { int i,min; for(i=0;i<no;i++) { if(min>vc[i]) min=vc[i]; } return min; } int main(void) { int A[NUMBER]; int i; for(i=0;i<NUMBER;i++) { printf("A[%d]:",i); scanf("%d",&A[i]); } printf("最低値は%d",min_of(A,NUMBER)); scanf("%d",&A[i]); }
日本語がおかしかった・・・。 要素数NUMBERの配列に数字を格納し、その中から最小の値を表示するプログラムを書こうとして457のようなコードを書いたのですが 下記のエラーが出ます。一応、確認したのですがおかしいところが見あたらないのですが、アドバイスもらえないでしょうか。 1>c:\documents and settings\r\my documents\visual studio 2008\projects\c\c\c.cpp(19) : error C2143: 構文エラー : ']' が ';' の前にありません。 1>c:\documents and settings\r\my documents\visual studio 2008\projects\c\c\c.cpp(19) : error C2143: 構文エラー : ';' が ']' の前にありません。 1>c:\documents and settings\r\my documents\visual studio 2008\projects\c\c\c.cpp(22) : error C2146: 構文エラー : ')' が、識別子 'i' の前に必要です。 1>c:\documents and settings\r\my documents\visual studio 2008\projects\c\c\c.cpp(22) : error C2059: 構文エラー : ';' 1>c:\documents and settings\r\my documents\visual studio 2008\projects\c\c\c.cpp(22) : error C2059: 構文エラー : ')' 1>c:\documents and settings\r\my documents\visual studio 2008\projects\c\c\c.cpp(23) : error C2143: 構文エラー : ';' が '{' の前にありません。 1>c:\documents and settings\r\my documents\visual studio 2008\projects\c\c\c.cpp(28) : error C2143: 構文エラー : ')' が ';' の前にありません。 1>c:\documents and settings\r\my documents\visual studio 2008\projects\c\c\c.cpp(28) : error C2143: 構文エラー : ')' が ';' の前にありません。 1>c:\documents and settings\r\my documents\visual studio 2008\projects\c\c\c.cpp(28) : error C2059: 構文エラー : ')' 1>c:\documents and settings\r\my documents\visual studio 2008\projects\c\c\c.cpp(28) : error C2059: 構文エラー : ')'
>>457-458 最初に、最終行の[scanf]はいらないような気がしましたけど、
必要なのでしょうか。
私も初心者ですが、試しにやってみましたところ…
その構文エラーの原因は、「5」の横に[;]が書いてあるからです。
まず、これをはずしてください。
そのあともエラー出たのですが、[min]が初期化されてないようです。
私は[min]に適当に大き目の数を代入してみました。
それでいけると思います。
もっと詳しい人なら、もっといい解決方法があるかもしれませんがご参考まで。
>>459 回答ありがとうございます。#defineに;はいらないんでしたね・・・。
配列に関する昇順のソートでお聞きしたいのですが、 void sort(int data[], int n) { int k = n - 1; while ( k >= 0 ){ int i, j; for ( i = 1, j = -1; i <= k; i++) if (data[ i - 1 ] >data[ i ]){ j = i - 1; swap(&data[ i ], &data[ j ]); } k = j; } } /*swap()は別途定義された関数。data[]が受け取る配列。[ n ]は配列の要素数です。*/ ここで[ j ]が[ -1 ]で初期化されているのがなぜなのか迷いましたが、 おそらく[while]を抜け出すために[k]を負の値にしなければならないからだと思いました。 ということは、[for]文の[ j = -1 ]によって[ j ]は毎回初期化されてるということでしょうか? [ i ]はインクリメントされて毎回1ずつ増えていて[ i = 1 ]で初期化されていないように見えるのですが、 なぜ[ j ]は[ -1 ]に毎回初期化されるのか教えてください。 それとも、私の認識が全然違ってて、違う理由で[ k ]がマイナスになって[while]文を抜けてる のでしょうか。([ i ]も[ j ]も毎回初期化されて[ 1 ]と[ -1 ]になってるとか・・・)
iとjにセットしている数値は、あくまでも初期値。毎回初期化はされません。 if文で数値比較後、jにi-1を入れてるのに注目。swapがあればjは-1じゃなくなる。 forで一巡してswapがなければjは-1となり、whileから抜ける。
463 :
461 :2008/09/03(水) 19:09:44 ID:???
>>462 ありがとうございます。頭が混乱してたので、検証してみたところ、
[for]文を数回繰り返し→[while]文の先頭へ→[for]文へ…
を数回繰り返すとき、[while]文の先頭に戻ってから[for]文に入るとき
また初期化されてることを見落としてました。
最後は、[j]が[0]になって[k]に代入され、[while]文の先頭に戻り、
[for]文に入るとき[i]に[1]、[j]に[-1]が代入されて、[i <= k]が成立しないので
[ k = j ]に飛ぶのがわかりました。
そのあと、[k]に[j]の[-1]が代入されて[while]文の先頭に戻り、( k >= 0 )が
成立せず、晴れて[while]文を抜け出してるようです。
やっと納得できました。
#include <stdio.h> #define K ① int main(void) { int i; long s; s = ②; for (i = 1; i <= ③; i++) s = s * i; printf("%d の階乗 = %ld\n", K, ④); return 0; } 10の階乗を計算するプログラムですが、 ①~④の中が分からなかったので教えてください。
465 :
まちがって名前消しちゃいました。 :2008/09/04(木) 02:52:26 ID:oBFjqOjP
① うんこ ② ちんこ ③ まんこ ④ SEX
#include <stdio.h> #define K 10 int main(void) { int i; long s; s = 1; for (i = 1; i <= 10; i++) s = s * i; printf("%d の階乗 = %ld\n", K, s); return 0; } これでいけるかと思います。
467 :
464 :2008/09/04(木) 23:02:27 ID:???
全くの初心者なんですが、 おすすめの本はないでしょうか?
469 :
まちがって名前消しちゃいました。 :2008/09/06(土) 11:22:32 ID:PN6yhvCs
470 :
まちがって名前消しちゃいました。 :2008/09/06(土) 11:29:28 ID:PN6yhvCs
471 :
まちがって名前消しちゃいました。 :2008/09/06(土) 12:53:21 ID:nyoT4hzw
464は宿題を赤の他人にやらせたな 将来的には人をコキ使うのが上手な プロジェクトリーダ、そして社長に なる器だが、それに引き換え、466の 将来は人にアゴ使われるアホのまんま で終わりだ。アホじゃ逝けないよ。
472 :
まちがって名前消しちゃいました。 :2008/09/06(土) 13:32:04 ID:8YLx2SSB
助けてください。 #include<stdio.h> int main() { int ii,i; for(int i=0; i!=51; i++) { printf("%2d\t",i); if (i = 50) ii = i; } i = ii; if (i = 50) { printf("Success\n"); } return 0; } で、forの中のprintfが正しく実行されないようなのですが、 これってほっとくとバグになる可能性ありますか? あと、この書き方ってやっぱり見直して書き換えたほうがいいんでしょうか・・・
473 :
まちがって名前消しちゃいました。 :2008/09/06(土) 18:08:59 ID:PN6yhvCs
474 :
まちがって名前消しちゃいました。 :2008/09/06(土) 18:11:24 ID:PN6yhvCs
宿題は自分で解くように。 このような文法問題は宿題だ。
475 :
まちがって名前消しちゃいました。 :2008/09/06(土) 18:13:38 ID:PN6yhvCs
ビルドエラーメッセージをそのまま貼り付けろ。 どっかの中学生レベルの宿題は自分で調べるように。
476 :
まちがって名前消しちゃいました。 :2008/09/06(土) 18:18:14 ID:PN6yhvCs
>>458 #include<stdio.h>
#define NUMBER 5;
defuneは「コード置き換え」と思ってて良い。そこにブレークポイントを置いて実行できるところではない。
return も関数ではないから return (1) ではなくて return 1 で良い。
477 :
まちがって名前消しちゃいました。 :2008/09/06(土) 18:32:00 ID:PN6yhvCs
■調べてみようと感じる質問 メモリリーク、ヌルポ、スタックオーバーフロー、 意味不明コンパイルエラー、 ■教科書嫁と思える質問 どう見ても宿題。
478 :
472 :2008/09/06(土) 18:32:20 ID:8YLx2SSB
自己解決しました。 Basicの癖が残っていたようですね。 お騒がせして申し訳ありませんでした。 まさか比較してなかったとは。おお怖い怖い。
周りのプログラマーから聞いたのですが、「配列とポインタの違いを理解するといいんだよ」と 言ってました。「動きが違う」とかなんとか。 簡単に言うとどういう意味なのでしょうか。わかる方いましたら教えてください。
周りに理解してるプログラマーがいるのに、なぜわざわざ ここで聞く?
481 :
479 :2008/09/12(金) 19:57:55 ID:???
あまりに熟練者(何十年のベテラン)たちなので、「ポインタって実際の業務だとココが難しいんだよね」 みたいな感じで、あまり詳しく教えてくれない雰囲気なので… 「どう言ったらいいんだろうなぁ…」みたいな感じです。 それで、こっちはチンプンカンプンになりました。
データ型が同じだったら配列もポインタも同じだろう? そいつにキッチリ説明を求めたほうがいい
483 :
479 :2008/09/12(金) 23:34:07 ID:???
私がこの3週間勉強してわかったことと言えば、
・配列の名前を引数として関数に渡すと、先頭の要素のポインタとして渡される。
・配列の中身が変わるのを防ぐために const を付ける。
・変数の値を関数の中で変えて、main()に戻してそれを反映させたいときにポインタを使う。
このように理解してます。間違ってたらすみません。
配列とポインタはもっと奥が深いのだと思ってます。
>>482 たぶん、その人自身も何か勘違いしてるのかもしれませんね。
ごめん違ったみたい ポインタは値を代入可能 配列はアドレス変更不可能
>>483 その3つはどれも文句なく正しい。自信持っていいよ。
>>479 そこをよく理解しないままCを使って間違ったことやる人間が多いというだけのこと。
486 :
まちがって名前消しちゃいました。 :2008/09/22(月) 19:28:16 ID:6ZIXhFqu
C始めようと思ってるんだけど最初からPCに入ってるコマンドプロンプトじゃコンパイルできない?
487 :
まちがって名前消しちゃいました。 :2008/09/22(月) 19:54:55 ID:3xDTFwgS
488 :
まちがって名前消しちゃいました。 :2008/09/23(火) 00:05:53 ID:6ZIXhFqu
>>487 インストールできなくて対処方法も試したけど効かなかったからvisual C++にしてみた
++でもCできますよね?
>>488 標準入出力だけのライブラリを使うことでC言語の開発環境のようにも動作さられる
ので問題ありません。
490 :
まちがって名前消しちゃいました。 :2008/09/23(火) 10:54:29 ID:ePDT8MYP
fatalエラーってどんな意味? コンパイルさせて出力させようとしたんだけど出てきたんだが・・・ 調べたけど難しい言葉で書かれてて意味不すぎる
>>490 fatalとは、fate(フェイトというアニメがあったはずだが)の形容詞形。
fate(運命)
fatal(運命的というよりは致命的との意味)
つまり、どうにもならないエラーですってこと。
がんばってねー
492 :
まちがって名前消しちゃいました。 :2008/09/23(火) 12:39:07 ID:ePDT8MYP
>>491 ありがと
どうにもならないエラー・・・
visual cpp2005のコマンドプロンプトでcl使うと出るんですよね
493 :
まちがって名前消しちゃいました。 :2008/09/26(金) 02:59:06 ID:PAN7XzHE
超初心者です 皆さんがC言語を学ぶのに使った参考書など、これは読んどけというものがあったら教えて下さい
494 :
まちがって名前消しちゃいました。 :2008/09/26(金) 12:18:00 ID:YF5imrxx
496 :
まちがって名前消しちゃいました。 :2008/09/27(土) 11:51:52 ID:2VL8Y4GT
整数型配列 a[5]を宣言する。 配列aに適当な整数を代入する。 配列から最大値を求め画面表示する。 #include<stdio.h> main() { int a[5]; int maxdata; int i; a[0]=12; a[1]=3; a[2]=40; a[3]=10; a[4]=30; maxdata=a[0]; for(i=1;i<5;i++) { if(?) { maxdata=a[i]; } } printf("最大値:%d",maxdata); } ?の部分がわからないのですが、誰か教えてもらえませんか?
497 :
まちがって名前消しちゃいました。 :2008/09/27(土) 12:07:28 ID:2VL8Y4GT
プログラム板で聞いてくることにしました。 無駄レスすいません。
498 :
まちがって名前消しちゃいました。 :2008/10/14(火) 22:53:58 ID:TuavOJJv
成績をつけるプログラムを教えてほしいです。 80点以上100点以内 A 65点以上80点未満 B 50点以上65点未満 C 0点以上50点未満 D それ以外の整数に対しては「ありえない」と出す
499 :
まちがって名前消しちゃいました。 :2008/10/15(水) 00:25:03 ID:pk0GxuXL
printf()でポインタのアドレスを表示するときに、例えば、 printf("%p",(void*)ptr); のように(void*)が必要な意味を教えてください。 今期の教授がスパコンのプログラミングとかやってる人のようで、うるさく言われるのですが、なぜ必要なのか理解できません。 よろしくお願いします。
500 :
まちがって名前消しちゃいました。 :2008/10/15(水) 10:43:55 ID:WEs5N7rQ
>>499 教授の脳内コンパイラーは、(void*)でないと「致命的な
エラー」になる理由は不明だ。
(void)が必要な意味はということは、
間接演算子*と四則演算子*が同じであると、一目で意図が
読み易く検索容易にする意図があるのかも。
自分の教え子が書いたコードを発見しやすくする為かも。
その教授の馬鹿の一つ覚えのようなプログラミング作法の
理由は、その教授に尋ねるしかないだろう。
解らないのは、教え方が悪いことが原因なんですね、その
ような欠陥授業を国の税金で援助していることも問題だ。
501 :
まちがって名前消しちゃいました。 :2008/10/15(水) 10:50:24 ID:WEs5N7rQ
502 :
499 :2008/10/15(水) 16:08:20 ID:XYgPsrOC
C言語どころか他のプログラミング知識も0に近い初心者なんですが、参考書は
>>494 に書かれているものでも大丈夫でしょうか?
プログラミング自体が初めてなら別の参考書の方が良いのでしょうか?
俺は柴田望洋氏の本がわかりやすかったょ。
505 :
まちがって名前消しちゃいました。 :2008/10/19(日) 14:19:35 ID:+GN+X/q5
>>500 でたらめ言うな。
>>499 アーキテクチャによっては、ポインタ型の種類によって大きさが違うということがあり得るため。
(ワードマシンでchar*系とvoid*だけほかより大きいとか)
%pはvoid*を引数に取る指定だから、確実にvoid*を渡すためにそのキャストは必要。
>>505 > アーキテクチャによっては、ポインタ型の種類によって大きさが違うということがあり得るため。
>(ワードマシンでchar*系とvoid*だけほかより大きいとか)
1ワードは32ビットのこともあれば、一般的に8bitを単位にすることもあるのでワードマシンの真意が不明だ。
「char*系とvoid*だけほかより大きい」って、そこだけアドレスビット数が大きいアーキテクチャかw
32ビットOSか64ビットOSか、またはターゲットOSが32ビットか64ビットかなどという問題はコンパイラーが
吸収してしまう問題で、高級言語の文法に関係しないのではないかと。
>>504 ありがとうございます。
ちょっと調べてみますね。
質問です。 下のプログラムで階乗の逆数は求められますか? main(){ int sum,i,n; i=1; sum=1; while(i<=n){ sum=sum*1/i; i=i+1; } } 仮に求められるとして、階乗の逆数の和はどう求められるのでしょうか? お願いします。
510 :
まちがって名前消しちゃいました。 :2008/11/23(日) 15:36:53 ID:JbyrPlJj
C言語を勉強中のものです。起動すると、自動で閲覧の履歴をすべてコピーして任意のフォルダに貼り付けるソフトが作りたいんですけど、 どのような設計でいけますかね?
511 :
まちがって名前消しちゃいました。 :2008/11/26(水) 00:42:39 ID:iVNoSBsg
ナベアツ問題難しい
いや、何の閲覧?
513 :
まちがって名前消しちゃいました。 :2008/11/29(土) 03:17:17 ID:mn3+I5GB
質問です。エラー処理についてですが、perror()とかerrnoってどういう場合に使うのですか? システムコールの異常でなくて、普通の処理で自分でエラーとして終了させたい場合にも使って良いのですか? 例えばこんなのもありですか? int main(int argc, char *argv[]){ int a=atoi(argv[1]); if (a!=100) { perror("test"); exit(-1); } } あと終了時にexit(-1)とかreturn -1とかreturn 2とかあったりして使い分けがよくわかりません。 errnoについても使い方を教えて貰えると助かります。
>>513 >あと終了時にexit(-1)とかreturn -1とかreturn 2とかあったりして使い分けがよくわかりません。
これ(返り値)は自分で決めること
通常、マイナス値は異常を示す
例題のプログラムの場合、返り値が-1だった場合、引数が100ではなかったってことが分かる
515 :
513 :2008/11/29(土) 05:22:30 ID:mn3+I5GB
通常はマイナス値で異常を示すということですね。 異常で終了させたい場合はexit(-1)もしくはreturn -1とかが普通ということですよね。 関数の戻り値はメイン側に値を返しますがこれらの場合はOSに返すと思います。 これらの値はどうやれば参照出来るのでしょうか?
516 :
513 :2008/11/29(土) 05:47:34 ID:mn3+I5GB
ぐぐったら色々出て来た。 exitとreturnの違いわかりました。 returnは関数の呼び出し元に値返却、 exitはプロセス呼び出し元(=OS)に値返却ですね。 returnにしてもexitにしても、正常終了なら0を返却。異常終了ならそれ以外を指定するようにする。 慣用的には、return -1もしくはexit(-1)だがexitについてはexit(1)と書く人も。(どっちでもOK) また、stdlib.hで定義されているEXIT_FAILUREマクロを使ってexit(EXIT_FAILURE);としてもOK。 なんか整理出来て来た。ここまでは認識あってますか? で、OS返却時の値はどうやれば参照出来ますか?
517 :
まちがって名前消しちゃいました。 :2008/11/29(土) 05:54:59 ID:0YV8UmJG
>>516 unix系OSでは(例えば)bash上でecho $?コマンドを実行すると直前に実行したプログラムの戻り整数値が表示される・・・
っていってもさっぱり分からんよな。
windows上でfirefox.exeというプログラムの戻り値を知りたいのなら、
#include <stdlib.h>してprintf("%d\n",system("firefox.exe"));などとするとfirefox.exeが終了したときの戻り値が表示される、と思う。
system関数の挙動は上記の説明で明らかだよね?新しい疑問が生まれたならまたどうぞ。
518 :
513 :2008/11/29(土) 06:20:09 ID:mn3+I5GB
>>517 質問です。下記のプログラムを実行してみました。
int main(int argc, char *argv[]){
int a=atoi(argv[1]);
if (a!=100) {
perror("test");
exit(-1);
}
}
(1)100を引数として渡した場合
echo $?で値を参照すると0になってました。return 0;をしていないのに0になるのはなんででしょうか?
main関数の戻り値はintなのにreturnを指定しなくても警告も出ないのはなんででしょうか?
(2)100以外の整数を引数として渡した場合
echo $?で値を参照すると-1になるかと思いきや(exit(-1)で抜けているため)255が表示されました。
なんででしょうか?
また、実行結果は test: Undefined error: 0と標準エラー出力されましたがこのUndefined error: 0というのは
どういう意味なんでしょうか?(これはperrorに関する質問かも知れませんが)
519 :
まちがって名前消しちゃいました。 :2008/11/29(土) 06:55:01 ID:S/xv0n8V
このif文はどういう意味なんでしょうか? if (strlen(str1) == 10 && str1[9] != '\n') { while (getchar() != '\n'); }
>>518 以下は自分でも良く理解してない事なので眉に唾を付けて読むこと
(1)return 0;をしていないのに0になるのは"そうなるようにコンパイルされるから"としかいい様がない。
例としてgccを使ってglibcとリンクさせると
1:プログラムを実行するとまずglibc内のある関数が呼び出される
2:その関数がmainを呼び出す
3:mainが終わったらもとの関数に戻ってmainの不始末の尻拭いをする
という動作をするらしいが、処理系依存の話
警告について:例えばgccなら-Wallオプションを付けたら警告してくれると思うが、その他のコンパイラでも出そうと思えば警告は出してくれるのでは
(2)そもそもexit関数の動作は引数がEXIT_SUCCESSでもEXIT_FAILUREでもない時(ここでは-1)は処理系依存、らしい
glibcのexitは(引数 & 255)が返されるとのこと。そしてこれは結果と合致している(-1の2の補数表現は全ビットが1)
perrorについて:perrorは大域変数errnoを参照して標準エラー出力への振る舞いを変えるらしい、
errno変数は開始時は0で、標準ライブラリでエラーを起こしたり(存在しないファイルを読もうとしたり)しない限り0、
perrorはerrnoが0である限り現在の状態は正常である(0は定義されたエラーではない)と標準エラーへ出力するとのこと
C言語の最新規格C99では、main関数のみ特別に returnを省略するとreturn 0;が関数末尾にあったかのように扱うことになっている。 gccはオプションで指定しないとC99の機能は使えないが、 これに関してはそうしたところで古い規格に適合しなくなるわけではないから、 C99の指定の有無に関わらずreturn 0;が補われる挙動になっていると推測される。
教えてください unsigned int POINT1=0; unsigned int POINT2=0; unsigned int POINT3=0; unsigned int POINT4=0; unsigned a,b,c,d,e,f; と宣言部で宣言して、 if(e==1 && d==0){ a++; POINT1 = a; e=d; if(a==0x0a){ a=0; b++; POINT2 = b; } if(b==0x06){ b=0; c++; POINT3 = c; } if(c==0x0a) c=0; f++; POINT4 = f; } if(f==0x06) f=0; } と、割り込みの関数内で記述したところ warning: type defaults to 'int' in declaration of 'POINT1' error: conflicting types for 'POINT1' error: previous definition of 'POINT1' was here ←宣言部の行のエラー というエラーが出たのですが、 何の矛盾なんでしょうか?
523 :
まちがって名前消しちゃいました。 :2008/12/16(火) 12:33:16 ID:HfPfSgWX
bufにaの内容を入れるにはどうしたらいいですか。 int main(){ char buf[256]; char *a="あいうえお\n"; &buf=a;//<-エラー }
>>523 strcpyだったかな?文字列コピーの関数使いなされ。
525 :
まちがって名前消しちゃいました。 :2008/12/17(水) 04:12:04 ID:kjiorkiG
おーおっけ有り難う
526 :
まちがって名前消しちゃいました。 :2008/12/17(水) 11:51:08 ID:41tiy3bR
goto-lineってどうやるんでしたっけ? ググってみたんですがM-xというのがどう入力するのか分かりません
ひとつ気になって仕方がないことがあるのですが printf("value=%d",x,y:1,2); の様な感じで (記述は間違ってると思う %dなどへ渡す値を状況によってif文のように変化させる マクロ!?のような機能のことは何というのでしょうか?
もしかして条件演算子
test
531 :
まちがって名前消しちゃいました。 :2009/01/01(木) 16:34:05 ID:M6/cJT+v
Visual C++2005 Express Edition を使って猫でも分かるプログラミングに挑戦しようとしたのですが、最初でつまづきましたw 最初の設定はどのようにすればいいのでしょうか?
むりぽ
533 :
まちがって名前消しちゃいました。 :2009/01/09(金) 11:23:02 ID:JJ3kN4nG
すみません、Cのことで聞きたいのですが ret = rfile(~・・・・) この、rfileの使い方がいまいちよくわかりません。 調べてもでてこなくて・・・ 教えていただけませんか?
534 :
まちがって名前消しちゃいました。 :2009/01/10(土) 00:47:18 ID:SWiBZwEj
C言語プログラミング認定試験の1級か2級もってたら、経験なくても就職できますか?
535 :
まちがって名前消しちゃいました。 :2009/01/10(土) 01:06:30 ID:RT8PkXLn
>>534 資格の有無や経験の有無が重要で即戦力が必要な場合は難しいけど、
ほかに取り柄があれば資格や経験が無くても大丈夫だよ。
「芸は身を助く」という。教えてクン以外に、なにか芸はないのか。
536 :
まちがって名前消しちゃいました。 :2009/01/10(土) 01:13:12 ID:SWiBZwEj
派遣切りで仕事探してるけど見つからない。パソコン関係の仕事は したことないけど、不況なのにいっぱいある。興味がある分野だし やってみたいけど、資格も経験もないのに申し込んでも断られるだけ。 だから資格だけでもとろうかと思案中です。情報処理と合わせて取ったら 可能性はありますよね?
サァ シィノ マターリノ タメニ
色ンナ スレニ 貼ルンダヨ♪
\ /
シカタナイカラ シィノ オシリサンノ
~γ⌒ヽ∧∧ ニホイヲ カガセテ アゲルワ♪
.( * ) ,i゚ー゚*) アリガタク オモイナサイ♪
U U"ヽ)ヽ)
今ならもれなく、しぃのおしりの臭いがかげる掲示板
しぃのマターリ掲示板
http://jbbs.livedoor.jp/computer/22654/
>>534 そんな無名の資格、役立たねえ。
>>536 基本情報だったら猿でも取れるぞ。
ソフ開で、タクシーに原付免許持っていくのと同じくらい。適当だけど。
540 :
まちがって名前消しちゃいました。 :2009/01/13(火) 18:55:26 ID:T5c7rh8V
あの、今本当に困ってます。 ¥n float printf scanf この文字の意味を教えてください
542 :
朝晩 :2009/01/13(火) 19:51:43 ID:x530KDV3
age
>>540 【¥n】 new lineの略で、新しい行は改行を意味する制御文字
【float】 飛蚊症で浮遊している虫のような小数点表示
【printf】 fはフォーマット(書式)の略で、書式に従ったプリント(出力)命令
【scanf】 fはフォーマット(書式)の略で、キーボードからのキー入力を走査して書式にしたがって処理する命令
このprintfとscanfの二つは、標準入出力関数としてstdio.hで定義された動作を行う関数命令
float 変数を有効桁数6桁の実数型の数値として解釈する変数の前に前置したり、変数の解釈
のしかたを宣言するときに変数の前に前置するC言語で予約された型名
printf
http://www.nmn.jp/~hidai/c/ 標準入出力関数
http://www9.plala.or.jp/sgwr-t/c/sec05.html
544 :
まちがって名前消しちゃいました。 :2009/01/24(土) 15:16:15 ID:MqcIO2Xw
HD性能を測定するbonnie++ベンチマークの説明文で ・putc()による書き込みはstdio命令とOSによるファイルスペースの確保を測定 ・write(2)による書き込みはOSによるファイルスペースの確保を測定 ってあるんだけど、 putc()のstdioのオーバヘッドって、putcが書き込みの際にunsigned char型 に型変換することのオーバヘッドって意味かな?
545 :
まちがって名前消しちゃいました。 :2009/01/26(月) 03:20:42 ID:Mcx6t/Oc
546 :
まちがって名前消しちゃいました。 :2009/01/26(月) 03:24:01 ID:8ZP3m8cl
dを新規に作って順に書き出す
547 :
まちがって名前消しちゃいました。 :2009/01/26(月) 03:52:41 ID:nu6Ocew9
548 :
545 :2009/01/26(月) 04:12:39 ID:???
別んとこで聞いてきます
以下のように乱数を発生させて2次元配列data0に格納するプログラムを作成したのですが、 関数を呼び出す毎に同じ値が出力されます。 一回目 6 38 11 二回目 6 38 11 三回目 6 38 11 といった感じです。 乱数シードの初期化がうまくできていないのが原因だと思うのですが、 なかなかうまく行きません。どう修正したら良いでしょうか? for(j=0;j<LMEDS;j++) randum(data0[j]); void randum(int *number){ int i,j; int flag; //size = sizeof(number) / sizeof(int); flag = 0; srand(GetTickCount()); //srand((unsigned int)time(NULL)); number[0] = rand(); for(i=0;i<LMEDS_SELECT;){ number[i] = rand() % I_NUMBER; for(j=0;j<i;j++) if(number[j]==number[i]) flag = 1; if(flag==1){ flag = 0; continue; } else i++; } };
550 :
まちがって名前消しちゃいました。 :2009/01/26(月) 12:19:13 ID:dXTIOPoH
質問です #include <stdio.h> int main(void) { int magic; /* マジックナンバー */ int guess; /* ユーザーが当てる */ int i; magic = 1325; guess = 0; for (i = 0; i < 10 && guess != magic; i++) { printf("考えた数字を入力してください: "); scanf("%d", &guess); if (guess == magic) { printf("正解!"); printf(" %d はマジックナンバーです。\n", magic); } else { printf("残念、違います。"); if (guess > magic) printf("さらに小さい数字です。\n"); else printf("さらに大きい数字です。\n"); } } return 0; } こんなプログラムのguess = 0;の意味がわかりません。
551 :
まちがって名前消しちゃいました。 :2009/01/26(月) 12:34:35 ID:Hja/DPq+
flightのメモリを確保して1文字ずつtargetをコピーしながら insert 1文字をtargetにコピーし、insertが終端に達したら flightからtargetに文字を帰すんですが、targetの終端を うまく入れられません? どこが悪いのでしょうか? /* targetバッファ文字列の先頭にinsertを挿入,(終端には\0を強制挿入) */ /* 戻り値:新しい文字列の長さを返す,エラー:<0 */ static int shiftCopy(char *target, int bufsiz, char *insert) { char *flight, *regress; int count=0; flight = (char *)malloc(sizeof(char)*bufsiz--); memset(flight,'\0',sizeof(flight)); regress = flight; while(*insert && count<bufsiz){ /*挿入先を退避させつつ先頭挿入文字を格納*/ if(*target){ *flight++ = *target;} *target++ = *insert++; count++; } while(*target && count<bufsiz){ /*挿入先を退避させつつ退避文字帰還*/ *flight++ = *target; *target++ = *regress++; count++; } while(*regress && count<bufsiz){ /*退避文字の帰還*/ *target++ = *regress++; count++; } *target='\0'; free(flight); return count; }
自己解決しました。 /* targetバッファ文字列の先頭にinsertを挿入,(終端には\0を強制) */ /* 戻り値:新文字列の長さ, ERR:<0 */ /* <※危険※>: targetが空のとき,0初期化してないと無意味になる */ static int shiftCopy(char *target, int bufsiz, char *insert) { char *flight, *regress; int count=0; flight = (char *)malloc(sizeof(char)*bufsiz); >> memset(flight,'\0',bufsiz); /*初期化サイズの誤り,ポインタの長さを初期化していた*/ regress = flight; bufsiz--; /*targetパッファからはみ出ないため*/ while(*insert && count<bufsiz){ /*挿入先を退避させつつ先頭挿入文字を格納*/ >> if(!*target){ /*※ '\0'文字の後は不定であることを考慮してなかった*/ >> *(target+1)='\0'; }else{ *flight++ = *target; } *target++ = *insert++; count++; } while(*target && count<bufsiz){ /*挿入先を退避させつつ退避文字帰還*/ *flight++ = *target; *target++ = *regress++; count++; } while(*regress && count<bufsiz){ /*退避文字の帰還*/ *target++ = *regress++; count++; } *target='\0'; free(flight); return count; }
553 :
まちがって名前消しちゃいました。 :2009/01/27(火) 16:36:18 ID:P3dZ0k3U
教えてください。 borlandC をコマンドラインで使っています。 実行ファイルへプロパティのバージョン情報タブを付けたいのですが、 どのようにしたら良いですか?
nyuumonnkennpou@yahoo.co.jp ハッキングして個人情報取得できませんか?
>>550 疑問に思うならその行を削ってみるといい。動きが変わらなければ無くても構わない。
>>550 guess = 0;
曖昧さがないようにゼロで初期化しているだけだ。
宣言しただけでは実体は作成されないので、初期値による初期化を行っている。
iはforループの開始時にゼロで初期化されている。
何にもユーザーが値を入れないでEnterキーを押したときに初期化でゼロをもし
いれていないときにゼロではなくゴミが入っている実装も考えられるから確実
にゼロで初期化する必要があるのだろう。
557 :
まちがって名前消しちゃいました。 :2009/01/28(水) 14:48:36 ID:ouVXRaO8
>>555 動きはかわりませんでした。
>>556 理解できました!!!guess = 0;
プログラム実行開始時に変数を初期化しているんですね
magic = 1325;
が固定された値なのになんて悩んでいました。
ようやく進めます
>>555 >>556 さんレスありがとうございました。
>>544 writeでは1度の呼出で、何バイトでも一気に書き込みできるが、
putcでは、1度に1バイトずつしか渡せないという違いがある。
てすと
560 :
まちがって名前消しちゃいました。 :2009/02/11(水) 08:33:51 ID:yekbKKaR
プログラムはまったくの初心者ですがご伝授の程、宜しくお願いします。 現在、Pro*cの開発にて、2日前に作成されたファイルを削除するという 仕様をどうやってプログラミングしていいか悩んでいます。 ネットや本で調べたのですが、行き詰っています。 タイムスタンプを取得してそのファイルを削除が出来るのでようか? 宜しくお願いします。
561 :
赤西仁 :2009/02/13(金) 22:55:55 ID:mzpk1Vfg
1年間悩んでます。お力をお貸しください。 アークザラッドⅡというタイトルのゲームの、ゲーム画像(歩行画像など)を抽出したいのですが、 かれこれ1年ほど経ちますが、なかなかうまくいきません。 *もちろん抽出した画像は個人範囲内で利用するつもりです。 ◆試してダメだったこと ネット上からダウンロードできる、ありとあらゆる抽出系ツールを試した。 (ちなみに他のゲームはほとんど抽出可能) ◆教わったこと ・アークザラッドⅡは独自の画像形式を使っているから抽出できない。 ・PS上で表示されてるということは絶対に摘出はできるはず。 ◆抽出は不可能ではないということを知ったとき 2ちゃんねるで質問したところ、 ある方が実際にキャラクターの歩行画像を抽出して 私が立てたスレにアップしてくださいました。 スクリーンショットじゃ嫌なんです。どうか皆さん、お力をお貸しください。
791 :赤西仁:2009/02/13(金) 22:36:56 ID:Ch37WsOG 1年間悩んでます。お力をお貸しください。 アークザラッドⅡというタイトルのゲームの、ゲーム画像(歩行画像など)を抽出したいのですが、 かれこれ1年ほど経ちますが、なかなかうまくいきません。 *もちろん抽出した画像は個人範囲内で利用するつもりです。 ◆試してダメだったこと ネット上からダウンロードできる、ありとあらゆる抽出系ツールを試した。 (ちなみに他のゲームはほとんど抽出可能) ◆教わったこと ・アークザラッドⅡは独自の画像形式を使っているから抽出できない。 ・PS上で表示されてるということは絶対に摘出はできるはず。 ◆抽出は不可能ではないということを知ったとき 2ちゃんねるで質問したところ、 ある方が実際にキャラクターの歩行画像を抽出して 私が立てたスレにアップしてくださいました。 スクリーンショットじゃ嫌なんです。どうか皆さん、お力をお貸しください。
>>560 タイムスタンプを取得してそのファイルを削除するといいよ。
564 :
まちがって名前消しちゃいました。 :2009/02/16(月) 17:27:20 ID:+CCojU9+
NULLを検出した時にbreakしたいのですが、認識していないようで・・・ 分かる方、対処法をお教え願います csvbuff = strtok(buff,",\n"); printf("%s\n",csvbuff); if (csvbuff == '\0'){ break; } else{ change_tb(flpcnt,csvbuff); } //カンマ区切り for(flpcnt=1 ; flpcnt<=16 ; flpcnt++){ csvbuff = strtok(NULL,",\n"); if (csvbuff == '\0'){ flpcnt = 17; break; } else{ printf("%s\n",csvbuff); change_tb(flpcnt,csvbuff); } }
ナル文字 と NULLポ p == '\0' は '\0' が頑張ってキャストされて p が持つ NULL に一致する事が "あるかもしれない" 程度 p == NULL は p が NULL の時一致 if(char *p = buff; *p != '\0', p < buff + buf_len; ++p) するでしょ?
いや一致することは 100% あり得んな
567 :
まちがって名前消しちゃいました。 :2009/02/17(火) 20:29:58 ID:WRhCvk+d
#include <stdio.h> main() { puts ("My first program!!") ; } でコンパイルしても'○○'は内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されませんって出るのはなんで?
putsじゃなくてprintfにしてみたら?
569 :
まちがって名前消しちゃいました。 :2009/02/17(火) 21:04:07 ID:WRhCvk+d
570 :
chapter :2009/02/19(木) 19:46:59 ID:gAgh/Mrm
今日からC言語の勉強を始めました。よろしくお願いします。 早速ですが質問です。MINGWを使ってるんですが example1.cというソースファイルを作成した後に、「ls」でそのソースファイル を呼び出して、「gcc example1.c」と入力してコンパイルしようとしたんですが 「sh: gcc: command not found」と表示されてしまいます。 ちなみに、example1.cの中身は main() { } です。本来なら何も表示されないはずなんですが・・・;; どなたか原因を教えて下さい。
>>570 MINGWをよく知らんのですが
>「sh: gcc: command not found」
gccが見つからんから知らねとゆーてる。
ちゃんとインストールされているか、パスが通っているか確認してみては?
#include<stdio.h> #include<math.h> FILE *file; int main(void){ int i,j; double x,y,z; for(i=0;i<=1000;++i){ x=0.3*i; for(j=0;j<=1000;++j){ y=0.3*j; z=sqrt(1+x^2+y^2); fprintf(file,"%f %f %f\n",x,y,z); } } fclose(file); return 0; } z=sqrt(1+x^2+y^2);の部分で浮動小数点の不正な使用 というエラーが出るのですが、どうすればいいですか?
573 :
まちがって名前消しちゃいました。 :2009/03/01(日) 04:09:16 ID:g6EP3qUi
574 :
まちがって名前消しちゃいました。 :2009/03/01(日) 09:16:19 ID:YXipVU2C
C♯とCプラプラはそんなにちがわないですよね。
学校の課題を手伝ってください。 キューを利用して、プリンタのプリントキューを再現したプログラム(以下に要点を記載)を作成しなさい。 "1”を入力するとキューにデータが追加され"2"を入力するとキューからデータが取り出される キューが満杯になったり、空になったりした際はその旨をメッセージで表示する。 また、以下の関数を作成し、使用しなさい。 vaio enqueue(int val)キューにデータを追加する vaio dequeue() キューからデータを取り出す vaio queue_print()キュー全内容を表示する 以上ですお願いします。
vaioではなくvoidでしたすいません。
PCサロン板にプログラム言語Cのスレがあったなんてw
>>580 この板ができた経緯が難民収容で、何でもありだったんだよ。
582 :
580 :2009/03/18(水) 18:48:11 ID:???
test
std::vector<double> scoreのメディアンを取りたいとき、median(score)としても駄目でした。 こんな関数ありますか?
あるソースにこんなことが書いてあったのですが意味がわかりません どういう意味でしょうか std::istream& read(std::istream&);
>>585 std::istreamを継承する全てのオブジェクトを受け取れるようにしてあるもの。
例えば
std::string global_str;
として、もしも
void read()
{std::cin >> global_str;}
だったとするとglobal_valに標準入力から文字列を格納するわけだが
これだとstd::cinからしか受け取れない。
そこで
std::istream& read(std::istream& is)
{is >> global_str;
return is;}
とすることでstd::istreamを継承する全てのオブジェクトから読み込めるようにしてある。
普通はistreamじゃなくてostreamで見かけるけどね。
>>584 <algorithm>のnth_elementを工夫して使えばいいと思う。
要素数が奇数のとき
std::nth_element(score.begin(), score.begin() + score.size() / 2, score.end());
double m = score[score.size() / 2];
偶数のとき
std::vector<double>::iterator center_right = score.begin() + score.size() / 2;
std::nth_element(score.begin(), center_right, score.end());
std::nth_element(score.begin(), center_right - 1, center_right);
double m = center_right[0] + center_right[-1];
>>585 もし、それがCだと思っているなら、違うと否定しておく。
C++だよ一応念のため。
589 :
586 :2009/04/15(水) 06:04:09 ID:???
>>588 ああ、
質問者の質問の意図は
そう言う意味だったのか。
素で答えちまった。。。
標準関数について気になっていろいろ調べていたところ、 printfのような標準関数がstdio.hなどで宣言されているのはわかったのですが、自作した関数のように int ***(---) { ..... } と定義(?)されているのが見つかりません。 標準関数は宣言のみでできているということなのでしょうか? 違うなら、どこで定義されているのか教えてください。お願いします
>>590 ソースがある場合もあるし
コンパイルされたライブラリ(バイナリ)でどっかにある場合もある。
環境を書け。
OSがVistaで、コンパイラはMicrosoft Virtual C++ 2008 です
593 :
まちがって名前消しちゃいました。 :2009/04/18(土) 16:30:02 ID:fK1MoCdV
#include <stdio.h> #include <math.h> int main(void) { int i; double exp(double x); int x=-1.25*exp(-0.4*i)+1.25; for (i=0; i<=20; i++) { printf("%dです:",x); } return(0); } x=-1.25*exp(-0.4*i)+1.25 のiに0~20まで代入した値を出したいのですが 1ですと20回出るだけです。 何が違うのか教えてください。お願いします。
>>593 int x=-1.25*exp(-0.4*i)+1.25;
この一文でxは整数だから、小数点以下切り捨てで代入される。
なのでxの型を変更すべし。doubleとかに。
>>594 doubleでやってみたらできました!
本当にありがとうございました。
>>595 あと強いて言うなら
return(0);
は
return 0;
でいいんだよ。
また、for (i=0; i<=20; i++)
は for (i=0; i<=20; ++i)
の方が効率がよい。
(ただし「理論上わずか程度」ってぐらいだが。コンパイラの最適化もあるし。)
ふむふむ、勉強になります あと、この結果表示を縦並びにするのはどうすればいいですか?
>>597 縦並び?
どういうこと?
改行したいと言うことかい?
改行なら
"%dです:"
を
"%dです\n"
にすればよろしいかと思いますが。
599 :
まちがって名前消しちゃいました。 :2009/04/22(水) 11:19:13 ID:0/4eA6Ud
ちょっと知恵もしくは答えを教えてほしいプログラミングの問題があるんだ。 u,nは整数で 1000>u>1,1000>n>=3 x>0,y>0,z>0 d>=0 の条件下で d=u^n-max{x^n+y^n+z^n} このときdが最小となる(x,y,z)の組を求めよ ちょっとサンプルデータな u n d x y z 2 3 5 1 1 1 6 3 0 3 4 5 7 4 224 4 5 6 98 3 8 2 48 94 76 4 733 17 47 73 54 5 103717 13 47 47 123 3 0 6 51 120 456 3 0 6 51 120 もしかしたらデータずれてるかも
600 :
まちがって名前消しちゃいました。 :2009/04/22(水) 11:20:52 ID:0/4eA6Ud
で、d=・・・ってところのプログラミングがさっぱりなんです。 いろいろ考えたけど、どうしても規則性がみつけられなくて・・。 たのんます
VC++使ってるんですが、 int a = 12, b =100; int i = (printf("%d",a), a); みたいにすると、ディスプレイに12と表示されて、さらにiにはbと同じ値の100が入っていました これってCの規格通りなのでしょうか、それとも処理系の特性によるものなのでしょうか?
間違えました
>>600 の3行目は int i = (printf("%d",a), b); です
>>601 規格通り。
関数呼出の引数を並べるとき以外で、「式」の中に現れるカンマは、順次演算子というれっきとした演算子の1つ。
左から順に演算を行い、右側の値を結果とするというもの。
printf(), aを取り囲む括弧は(1 + 2) * 3などと同じように式を括るための括弧。
#include <stdio.h> void main() { printf("Hello, World!"); return 0; } すいません。Visual C++2008 を使ってこのコードで、 「デバッグなしで開始」とすると・・・ 1>------ ビルド開始: プロジェクト: test, 構成: Debug Win32 ------ 1>コンパイルしています... 1>cl : コマンド ライン error D8045 : C ファイル '.\test1.c' を /clr オプションと共にコンパイルできません 1>test - エラー 1、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== と出てしまいます。どうしたらエラー0になりますでしょうか?
>>605 プロジェクト作るときにWin32コンソールプロジェクトを選べ。
あとint main()な。
607 :
まちがって名前消しちゃいました。 :2009/05/01(金) 11:56:47 ID:BeV73NTB
PCはXPでcpad for LSI C-86使ってるんですが exitがよくわからないです プログラム #include <stdio.h> int main(void) { exit(1); } コンパイルメッセージ 関数exitは宣言されていないのでint型とみなす。
609 :
まちがって名前消しちゃいました。 :2009/05/06(水) 22:26:14 ID:zXBJqRNY
お前らごときがC言語なんか使うな オナニー言語でも使ってろw
borland c++ compiler 5.5において以下のプログラムをコンパイルした所エラーは出ないのですが、 windowsプロンプト上の実行結果に何も表示されません。 どなたか解決方法についてご教示願います。 #include<stdio.h> FILE *fp; char a; int s; int main(void) { fp = fopen( "test.txt", "r" ); while ((s=getc(fp)) != EOF) { if(s==0) printf("B"); } fclose(fp); return 0; }
追記 test.txtの内容は、2進数文字列です。
>>610 s=='0'とかs=='1'にしたいんじゃないの?
文字と数値の区別ついてる?
>>612 動きました。有難うございます。
文字を扱うのは初めてだったので、躓いていました。
なんでエラーになるのでしょうか? #include <iostream> class Test { private: Test *p; public: Test* GetP() { return p; } }; int main() { Test *t = new Test(); t->GetP() = NULL; return 0; }
Test*& GetP() {
ありがとう でも理解できひん なんでポインタの後に参照が!? 教えて
Test** GetP(){ return &p; } *(t->getp())=NULL;
メモリリークについては誰も突っ込まないのか?
621 :
まちがって名前消しちゃいました。 :2009/05/19(火) 09:50:03 ID:LMpDXf3y
何でエラーになってしまうのでしょうか? int na; /*身長(整数値)*/ double ba; /*標準体重(実数)*/ printf("身長を入力してください:"); scanf("%d", &na); (double)ba=(na-100)*0.9; /*キャスト*/ print("標準体重は%5.1fです。\n" ba); return(0);
>>621 baをキャストしてどうする。
途中計算をキャストしろ。
C言語の挿入ソートの比較回数について質問です. ↓は一応挿入ソートで正しくソーティングできています. void inssort(int data[], int n) { int i, j; for (i = 1; i < n; i++){ j = i; while(j >= 1 && data[j-1] > data[j]) { swap(&data[j], &data[j-1]); j--; } } } 大域変数compareがあるとして、どこにcompare++;を入れれば正確くに比較回数を測ることができますか? while関数の前におくと比較回数が固定になってしまいますし, while関数の中において,整列済みのデータをソートしようとすると比較回数0になってしまいます・・・orz
do{ scanf("%d",&va[i]); scanf("%d",&vb[i]); scanf("%d",&vc[i]); scanf("%d",&vx[va[i]][vb[i]][vc[i]]); printf("続けますか?(続ける1 終了する0)"); scanf("%d",&f); j++; i++; }while(f==1) for(i=0;i<j;i++){ printf("%d",vx[va[i]][vb[i]][vc[i]]); } こんな感じで、 vx[ この中に更にva[i]をいれる] ってできますか?
625 :
まちがって名前消しちゃいました。 :2009/05/21(木) 03:51:14 ID:QK+Npslk
「cの入門の入門」て本のP58 「自作プログラムを保存するディレクトリを作る」て項目がありまして、やってみたのですが C:\Documents and Settings\sela> C:\>mkdir Source サブディレクトリまたはファイル Source は既に存在します C:\>dir ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は ****-**** です 質問1 テキストには「サブディレクトリまたはファイル Source は既に存在します」との表示は無いのですが この表示がでるのは問題あるのでしょうか? 質問2 そして、C:¥>dirの後はずらずら表示された中に 2005/01/DD HH:MM <DIR> Sourceという1行がないとダメみたいなんすけど 上記の通り 「ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は ****-**** です」 どのようにすればいいのでしょうか? 宜しくお願い致しますm(__)m
626 :
まちがって名前消しちゃいました。 :2009/05/21(木) 04:38:49 ID:ftKzh7mB
>>625 それC言語と関係無いから、エラー出ても関係無いよ。
重要なことは、プログラムを打ち込んで実行できること。
MS-DOSは出来る必要がない。
627 :
まちがって名前消しちゃいました。 :2009/05/21(木) 04:43:36 ID:ftKzh7mB
>>625 BCC developerでもいれておけばいい。 ウェブで調べたら導入できる。
>>625 全然C言語の問題ではない。
だが簡単でいいから初歩のコマンドラインでの操作を
出来るようにしておいた方が、この後 色々やりやすいかと。
629 :
625 :2009/05/21(木) 13:09:48 ID:???
ありがとうございます。m(__)m 書籍名間違ってました。「cの入門の入門」誤 → 正「C入門の入門(翔泳社)」 BCC developerていうのを初めて聞きました。帰宅後に調べてみます。 ありがとうございました。m(__)m
>>623 比較回数って、ソートするべき値(data[j] と data[j-1] )の比較を何回やったかを知りたいんだよね。
だったら、whileの前に置いた比較回数固定が正しいんじゃないの。
そのソースでは、データ数が同じなら比較回数は変動しないよ。
頭からケツまで丁寧に全比較だもん。
すみません。 構造体の先頭アドレスから、その構造体の最初のメンバのアドレスを取得する方法はないでしょうか?
>>631 構造体のポインタとその最初のメンバのポインタの値は同じ。
>>632 ありがとう。
でも型が違うから、そのまま流用しようとすると当然エラーになる。…。
>>633 どういう風に流用するつもりなの?
乱暴な答えはキャストだけど。
>>634 重ね重ねありがとうございます。
単純にchar型でキャストすれば良かったのか…!
そもそもは、構造体の各々のメンバ(すべて同一サイズのchar型)に対して、
妙な値が入っていないか確認したかったのです。
ただ、メンバの数がかなり多くて、ひとつひとつメンバ名を書くのが手間でした。
なので、for文か何かでまわす方法が無いか探してました。
最初のメンバのポインタが指定できれば、あとは1メンバごとに
メンバのバイト数分インクリメントしていけば指定できるので。
「%5.2f とあったら表示する桁数は全部で(少数点も含めて)5桁 少数点以下は2桁です。1.26は1.26と表示されます。 全部で5桁なのでまだ1桁あまっています。」 とテキストに表示されてるのですが、 1.26は3桁なので2桁あまってると思うのですが、 「何故1桁あまる」のが正解なのか分かりません。 教えて下さい。
↑の質問した者です。 「1.26」の小数点も桁に含むから4桁と解釈するのでしょうか?
>>635 charでキャストはない。*charならありえるが。
>最初のメンバのポインタが指定できれば、あとは1メンバごとに
>メンバのバイト数分インクリメントしていけば指定できるので。
パディングがある可能性があるからそれはダメだ。
現状の
struct s{ char hoge[10]; char fuga[10]; ...
を
struct s{ char A[N][10];};
と変更すればいいと思うが。
今のデータ構造は二次元配列とみなせるんでしょ?
>>638 パディング…!
今のテーブルを2次元配列で宣言しなおし、
s.A[0]や、s.A[1]とメンバを指定すればいいということですか?
それならうまくいきそうです。
ですが…。この構造体、メンバ名を使っていろんなところで呼ばれているのです。
構造体を宣言しなおすとなると、結局ソース全部を手作業修正→ミス発生の可能性が高くなります。
大人しくメンバ名を書き並べて言ったほうが安全な気がしてきました。
アドバイスありがとう orz
test
映画ターミネーター見た? 始まりのところに、C言語ソースプログラム 映ってるよね。
float a,b; a=6.8; b=2.3; printf("%f", a * b * 2.0); 結果 31.280001 最後の1が気持ち悪いんですが なんでこうなってしまうんでしょうか? 実数の複雑な計算をする時は どう回避するんでしょう??
>>642 精度の問題。
>実数の複雑な計算をする時は
>どう回避するんでしょう??
完全な回避は無理。
擬似的に精度をむっちゃくちゃ上げてごまかすしかない。
とりあえず君の場合
float a,b;
を
double a,b;
と書き換えてみて。
644 :
642 :2009/06/15(月) 23:48:27 ID:???
>>643 ありがとうごさいます。
こういうものなんですね。
自分のコンパイラが壊れてるのかと不安でした。。
>>644 大丈夫、初心者のうちはコンパイラのせいなんてことはまずないから。
言語の仕様の問題。
どーかんがえてもコンパイラのせいだろ!と思っても突き詰めてみると
自分の知識不足だったりする。
・・・もっとも、さらに高度になってくると本当にコンパイラのせいだったり
するのだがね。
アクションゲームプログラミングって本を参考に プログラミングしようと思ってるんですけど ひとつ疑問が、 Directx SDKのバージョンが違うんですけど 最新版でも問題はありませんか?
>>646 アクションゲームプログラミングって本をしらないからなぁ。
みんな
古いバージョンの仕様に依存するコードなら大いに問題あり、
古いバージョンの仕様に依存しないコードなら全く問題ない
っていう通り一遍の解答以外はできないだろうな。
648 :
まちがって名前消しちゃいました。 :2009/07/27(月) 00:09:26 ID:FPCfIowr
a→b→a→a→c→d→b→c→c→d のようなリストがあるときに、a,b,c,dの出現回数を調べたいときは どうやるといいですか?
>>648 グローバル変数に
unsigned int a_count = 0;
unsigned int b_count = 0;
unsigned int c_count = 0;
unsigned int d_count = 0;
としておいて、見つける度にその数を増やす。
なれてきたらグローバル変数じゃなくし、
unsigned int count[4]={0,0,0,0};
とした方が楽かもしれないけど。
>>648 こいつはマルチなんで相手にしないように。
ビルドしようとしたら cl.exeを起動しようとしてエラーが発生しましたと出て、失敗しました。 何度やっても一部を除いてビルドできません、 原因分かりますか?
#include <stdio.h> int main() { char str[] = "AXMDOBERSDULLPQ"; char *ptr = str; while (*ptr) { *ptr = *ptr - ('A' - 'a'); ptr++; } printf("%s\n", str); return 0; } 参考書見て勉強しているんですが解説が無いのでわかりません。 whileを抜けるのは ptr++を続けていくうちに*ptrでは無くなった→ループ終了。 という解釈でいいですか? お願いします。
文字列の終わりには\0がついてるから
なるほど。 ありがとうございます。
本当に分かってる? 大丈夫? 君の言う > *ptrでは無くなった の意味は分かってるかい?
656 :
このプログラム作ってください!( >_ < ) :2009/08/11(火) 03:17:34 ID:3VO0IOXx
1. 以下のプログラムは、勝ち数と負け数を入力して勝率 (= 勝ち数 / ( 勝ち数 + 負け数) )を計算するプログラムである。 勝ち数、負け数に負の値が入力された場合は入力をやり直させ、 勝ち数+負け数が0 の場合は勝率計算が不能であることを表示する。 ただし、このプログラムはバグを含んでおり正しく動作しない。 デバックを行って正常動作するようにせよ。 修正したソースプログラムと実行結果を示すこと。
657 :
このプログラム作ってください!( >_ < ) :2009/08/11(火) 03:19:38 ID:3VO0IOXx
#include <stdio.h> int main(void){ int nwin, nlose; do printf("勝ち数を入力してください:"); scanf("%d",nwin); if (nwin<0) puts("負の値を入力しないでください!"); while(nwin<0); do printf("負け数を入力してください:"); scanf("%d",nlose); if (nwin<0) puts("負の値を入力しないでください!"); while(nlose<0) total = nwin + nlose; if (total = 0) puts("勝率を計算できません。"); else printf("勝率は%dです。\n",nwin/total ); return(0); }
658 :
このプログラム作ってください!( >_ < ) :2009/08/11(火) 03:20:18 ID:3VO0IOXx
2.半径(cm)と中心角(度)(いずれも整数値)を入力して扇形の面積を計算する プログラムを作成せよ。円周率の小数点以下桁数は任意に決めてもよい。 ただし、入力値に以下の処理を加えること。 ・半径に負の値が入力された場合、入力をやり直させる。 ・中心角の入力値は以下のように処理する。 i. 0~359の場合はそのまま使う。 ii. 負の値の場合、0か正の数になるまで繰り返し360を 加えた値を中心角とする。 (例: -30 -> 330, -450 -> 270 ) iii.360以上の場合、360で割った剰余を中心角とする。 3.正の整数を繰り返し入力し、0 か負の数が入力されたらそこで入力を打ち切り、 そこまでの合計と平均を計算するプログラムを作成せよ。 最後に入力した負の数は計算に入れないようにせよ。 また、平均は小数点以下まで算出せよ。 すいません、明日までにお願いできますか?
もっとヒネった問題だしてよ
662 :
652 :2009/08/12(水) 16:14:40 ID:???
>>655 おそらく理解できていると思います。
文字列の最後尾にあるのは\0→whileが0(偽)になったのでループ終了。
ということではないでしょうか?
663 :
655 :2009/08/12(水) 17:59:48 ID:???
>>662 ああ分かってるっぽいね。
それでOKです。
Cで作ったものはどのOSでも正常に動くんですか?
ポインタのポインタに入っている関数にはどうやってアクセスするのでしょうか? AAA a AAA* b AAA** c b=&a c=b c(ここがわかりません)d()
>>664 むしろ動かない。
Cで書いたプログラムはそのコンパイルされたPC上でのみ動く。
・・・だが実際にはちょっとくらい違うPCでも動いたりする。
例)同じWindows XPのSPの差など
動かない例は
例)Windows XP と Linuxなど
電卓とカレンダー作りができる程度の初心者です。 基礎学習になるようなプログラムを組みたいのですが、何かおすすめの題材はありますか? また、ゲーム作りに興味があるのですが、少し調べてみたところ基礎的な学習とは方向性が違うように感じ、 基礎が身に付くまでは汎用的な学習がしたいと考えているのでチャレンジするかどうか迷っています。 ゲーム作りはC言語の基礎学習になるのでしょうか?この点についてもアドバイスをもらえたら嬉しく思います。 よろしくお願いします。
>>669 親切に誘導していただき、どうもありがとうございます。
助かりました!
では、
>>668 の質問取り下げさせていただきます。
テンプレあるかワカランが c言語ってなにの初心者 なにからすべき?
トンクス とりあえずROMっとく
C言語でなにするの? あらかじめ文つくって全自動で友人とチャットをかってにやってくれたりできるの?
676 :
皐 :2009/10/27(火) 02:55:52 ID:???
{ do c = *p++ & 0xff; while (isspace(c)); return c; } ってどういう意味ですか? 教えてください!!
p が指し示すアドレスから、最初に出現する空白文字でない文字の値を返す
すいません 動的に確保したポインタの配列(2次元配列として使いたい)にデータを代入しようとするとwarningがでます。 #include <stdio.h> #include <stdlib.h> int main(void) { char **arr; int i,j; arr = malloc(3 * sizeof(char *)); for(i=0; i<3; i++) arr[i] = malloc(3 * sizeof(char)); strcpy(arr[0],"aa"); printf("%s\n",arr[0]); return 0; } a.c: In function ‘main’: a.c:12: 警告: incompatible implicit declaration of built-in function ‘strcpy’ この理由と回避策を教えていただきたいです
>>678 #include "string.h" が抜けてるぞ
#include <string.h> だった
681 :
まちがって名前消しちゃいました。 :2010/02/28(日) 14:02:33 ID:TxQW20L4
C言語はじめたいと思ってて本屋で教則本を買うつもりなんだが オススメはある? それともネットに書いてあることで充分?
682 :
まちがって名前消しちゃいました。 :2010/02/28(日) 18:04:53 ID:QdaXrY5s
>>678 12行目: 警告: incompatible implicit declaration
#include <string.h>
684 :
入門者 :2010/04/30(金) 17:51:39 ID:???
変数に代入するっていう文が判らない・・ たとえば、10という数値を変数に代入 この場合は「int」でいいのかな?
685 :
側近中の側近 ◆0351148456 :2010/04/30(金) 19:11:52 ID:nG26dHWY
>>684 (っ´▽`)っ
int i;
i=10;
686 :
側近中の側近 ◆0351148456 :2010/04/30(金) 19:13:31 ID:nG26dHWY
>>678 (っ´▽`)っ mallocしたらfreeするのを忘れずにね☆
ありがとう! ちなみに画面表示する が抜けてた #include<stdio.h> main() { int a = 1; printf("10\n",a); unsigned short b = 65000; printf("65000\n",b); return (0); } こうでいいのかな?
> printf("65000\n",b); ( ゚д゚ )
違うのか・・・・ どう書くの??
> printf("\65,000on",b); こう書くんだよ!!
> printf("\65,000 oz",b); このほうが読みやすいな!!
>>687 #include<stdio.h>
int main()
{
int a = 1;
unsigned short b = 65000;
printf("%d\n",a);
printf("%d\n",b);
return 0;
}
693 :
プログラミングがわからない(泣) :2010/05/05(水) 13:18:13 ID:luKjT0L8
誰か教えてくれ(;;) 1: 生徒データの入力 2: 平均身長の表示 3: 平均体重の表示 4: データ表の表示 5: データの全消去 0: プログラムの終了 入力された番号: 1 これは 1 人目の生徒です(5人まで) 名前を入力してください(10文字以内) 入力された名前: q 身長を入力してください 入力された身長: 134 体重を入力してください 入力された体重: 33 1: 生徒データの入力 2: 平均身長の表示 3: 平均体重の表示 4: データ表の表示 5: データの全消去 0: プログラムの終了 入力された番号: というようなものを実行するためのプログラミングはどうしたらいいんだ~
とりあえず、フローを書いてみたらいいと思うよ
696 :
sage :2010/05/31(月) 15:57:15 ID:q7RZC3SQ
初心者過ぎる質問で申し訳ないのですが putchar関数を使うとき putchar('C')と記述するのと putchar(C)と記述するのでは どんな違いがあるのでしょうか? どなたか教えてください。よろしくお願いします。
putchar('C') は、文字 'C' を出力する putchar(C) は、変数 C の内容を出力する
698 :
sage :2010/05/31(月) 16:12:01 ID:TEzFcJXQ
>>697 さん
なるほど、そういうことだったんですね。
どうもありがとうございました。
699 :
まちがって名前消しちゃいました。 :2010/05/31(月) 18:33:48 ID:56Yj9p3w
> putchar('C') は、'C'という定数の値を計算して 計算なんてしないだろ
701 :
まちがって名前消しちゃいました。 :2010/05/31(月) 19:03:26 ID:56Yj9p3w
ユニコードで書かれているか何で書かれているかにもよるが、 ソースファイルをコンパイラーが計算して固定された定数に したものを実行時に、さらにキャストするときに計算される。 引数は計算する為に渡される。 なんにもしないなら、計算をしないという計算を行ってから 出力先に渡される。2番目のCにしても、配列の何番目とかで 渡されればアドレス計算と値のキャストが行われる。 'C'という記述自体が、文字Cを固定値に変換する計算を前提 にしている。計算というと語弊があるなら、値を処理してと いうことだ。そこ引っ掛かるところなんだ。計算したんだよ。
> 計算をしないという計算 何の事かさっぱり分かんね
703 :
701 :2010/05/31(月) 20:52:41 ID:???
一般的に(void)putchar(ch);ではなく、int putchar(int c);と実装されるので、 文字定数は整数に演算されて型キャストされるて関数演算されるということだよ。 文字キャラクタが右から左に心太式に出力されるのではなく、演算処理される。 テキストソースのユニコードやアスキーコードから整数に計算されている。 putchar(ch)のような特殊な実装なら、値を計算しない(何もしない)という判断を 行って、putc関数演算後に標準出力に送ることも可能だということだ。
1. キャストも関数演算も計算ではない 2. そもそも 'C' は int 型
>>704 引数は特定のプラットホーム依存の文字セットの文字から整数に
値を変換されている。文字を出力しているのではなく、整数値を
出力しているんだろ。論理演算も数値演算もすべて処理は計算だ。
'C'という文字定数を解釈(計算)して整数値にしている。その為の
型宣言がある。
文字の値を標準出力の配列にputcで追加して、インデックスが指す
位置をプラス1してインクリメントしている。
>>705 1.
putchar() は何ら変換処理を行っていない
コーディングされた文字の文字コード値 (整数値) をそのまま標準出力に送っているだけ
疑うならソースコードをバイナリエディタで覗いて確認してみること
並びにコンパイラのアセンブリリスティングを確認してみること
2.
'C' は文字定数ではなく int 型の整数値
3.
標準出力の配列? インデックス? とやらはプログラミング上意識すべきではない
通常int型は32ビット(-2147483648~2147483647)なので埋め込みパッドが入り キャストされた数値なので、ファイルの文字とは異なるサイズの数値である。 入力ファィルと出力ファイルを見ているとキャストが起きているので変化して いないようにみえる。 int putchar(int c) { FILE *so = stdout; return (putc(c, so)); }
708 :
sage :2010/06/03(木) 13:28:32 ID:o+4HItrq
>>699 さん
亀レスですが、詳しくありがとうございます。
積分を行う関数をシンプソンの公式を用いて以下のように作りました。 double Integ( double (*f)(double),double a,double b){ int n = 10000; double z ; double h = (b-a)/(2.0*n); int X = 1; double S1 = 0.0; double S2 = 0.0; for(z=a+h ; z<=b-h ; z+=h){ if(X%2 == 1){ S1 += (*f)(z); } else{ S2 += (*f)(z); } X += 1; } I =(h/3.0)*( (*f)(a) + (*f)(b) + 4.0*Si1 + 2.0*Si2); return I; しかし、これはf(x)=1/xのような被積分関数の変数が一つの場合でしか動きません。 これを多変数の場合にも応用するにはどうすればいいでしょうか? 例えばf=2*x+x*y+zをxで積分するような場合です(y,zはxによらない)
710 :
709 :2010/06/06(日) 12:59:49 ID:???
ごめんなさい、スレ間違えました
711 :
sage :2010/06/07(月) 14:20:23 ID:BwG3F2cC
smp.txtというテキストファイルをデスクトップに作成し それを読み込むプログラムを作ったのですが、 #include <stdio.h> #include <stdlib.h> int main(void) { FILE*fin; char buf[256]; char file[80]; printf("入力ファイル名="); gets(file); fin=fopen(file,"r"); if(fin==NULL){ printf("%sをオープンできません\n",file); exit(1); } while(fgets(buf,256,fin)!=NULL){ printf("%s",buf); } fclose(fin); return 0; } これを実行し、入力ファイル名をsmp.txtにしてもテキストファイルが開けません 何が原因なんでしょうか? どなたか教えてください。よろしくお願いします。 プログラムはvisual studio 2005で作りました。
カレントディレクトリ
>>712 さん
カレントディレクトリ に色々言葉を足して検索したら解決できました。
ありがとうございました。
714 :
JK :2010/06/09(水) 12:38:39 ID:zuNTe9MO
C言語を最近習い始めた17歳のJKです 1000以下の素数を求めるの乗除を減らすプログラムを教えてください /* 1000以下の素数を求める(第5版) */ #include <stdio.h> int main(void) { int i, no, cnt = 0; int prime[500]; /* 素数を格納する配列 */ int ptr = 0; /* 既に得られた素数の個数 */ unsigned long counter = 0; prime[ptr++] = 2; //prime[0]=2; /* 2は素数である */ prime[ptr++] = 3; //prime[1]=3; ptr==2 /* 3も素数である */ for (no = 5; no <= 1000; no += 2) { int flag = 0; for (i = 1; counter++, prime[i] * prime[i] <= no; i++) { counter++; if (no % prime[i] == 0) { /* 割り切れると素数ではない */ flag = 1; break; /* それ以上の繰返しは不要 */ } } if (flag == 0) /* 最後まで割り切れなかった */ prime[ptr++] = no; /* 配列に登録 */ } for (i = 0; i < ptr; i++) { printf("%4d", prime[i]); cnt++; if(cnt % 15 == 0) putchar('\n'); } printf("\n\n乗除を行った回数:%lu\n", counter); return (0); }
インクルードファイルが開けないのですが・・・ 使用しているのはBCpadというものです
ビット演算子についての質問なのですが int a = 0x00005555; int b = 0x000000FF; int c; としたとき c = a & b; の実行結果が00000055 になり c = a | b; の実行結果が000055FF になるのですが、 どうしてc = a & b;の実行結果が 000000FFではなく00000055になるのでしょうか? どなたか教えてください。よろしくお願いします。
>>717 数値を2進法表記で考えてください。
それで判らなかったらもう一度質問してください。
質問お願いします. nm6919340 をみて,ポインタを勉強していたのですが,main関数ではない関数で,変数を操作する方法の例として,ポインタが挙げられていました. これは,グローバル関数でも同様のことができると思いますが,ポインタとグローバル変数の明確な違いを教えていただけると幸いです. (どうもピンと来ませんでした…)
>>719 「スコープ」 というものについて調べておく事。
一般に、グローバル変数は可読性の為になるべく使わない方がよい、と云われ
ている。
それは、グローバル変数はプログラム上のどの位置からも変更・参照できる為、
プログラムの規模が 1000 行、10000 行、100000 行と増大するにつれ、どこで
そのグローバル変数が使われているか把握しきれなくなりプログラムの整合性
が保ちきれなくなってくるから。
一方、変数を関数へポインタの引数として渡した場合、使用されるのはその関数
の内部のみと限定される為、プログラムの流れが追いやすくなる。
ちなみに、関数自体が 1000 行、10000 行と長くなってしまっている時は、関数内
での処理をもっと細かい単位の関数群に分割するとよい。
グローバル変数はなるべく使わない方向でコーディングする癖をつけておくと、他
の人がプログラムを読む場合や何年か経って自分で書いたプログラムの内容を
忘れた状態で読む場合に有意。
100 行程度の小さなプログラムでも、馬鹿にせずにきちんとコーディングする事が
大切。
なお、値を変更したい変数が 1 つしかない場合は、ポインタの引数を渡すよりも
呼び出し側で関数の戻り値を代入させた方が、やりとりする情報量が減って読み
やすいプログラムになる。
>>720 ありがとうございます!
やっぱり可読性の問題か.
>>718 2進法で考えたらわかりました。ありがとうございました。
どなたか教えてください。ずっと考えてたけど、答えがわかりませんorz。 <標準関数>文字列と削除文字列を入力し、文字列中から削除文字列を削除しなさい。 ※配列の使用は2つだけ。 例) 文字列入力→ABCDEFAABCDABC 削除文字列→ABC 結果文字列→DEFAD どなたか教えてください、お願いします。
>>723 書き間違えたorz
結果文字列→DEFG
int main(void) { char *str; str="abcdefghijklmnopqrstuvwxyz"; while( *str !='\0') { printf("%c",*str); str++; } return 0; } このプログラムを出力すると abcdefghijklmnopqrstuvwxyz と表示されるのですが このときcを@などに部分的に置き換えることは可能ですか?
>>726 while( *str !='\0')
{
if (*str=='c'){printf("@");str++;continue;}
printf("%c",*str);
str++;
}
今ポインタで引数を渡すことを勉強しています。 dt2[]の内容をdt1[]にコピーするという事をポインタ引数で戻す関数を使う という下記のプログラムのを実行すると、 #include <stdio.h> void array_copy(int *ary1,int *ary2,int len); int main(void) { int dt1[5],dt2[5]={50,20,80,30,90}; array_copy(dt1,dt2,5); printf("dt1[0]=%d dt2[0]=%d\n",dt1[0],dt2[0]); printf("dt1[4]=%d dt2[4]=%d\n",dt1[4],dt2[4]); return 0; } void array_copy(int *ary1,int *ary2,int len) { int i; for(i=0; i<len; i++){ *ary1 = *ary2; ++*ary1; ++*ary2; } } 実行結果が dt1[0]=55 dt2[0]=55 dt1[4]=-858993460 dt2[4]=90 となりうまく値を渡すことが出来ません。 なぜdt2[0]の値が関数に渡した時点で50から55になっているのでしょうか? また、dt2[4]の値がうまくコピーできないのは何故なのでしょうか? どなたかどうぞご助言お願いいたします。
>>728 ++*ary1;
++*ary2;
これがどんな動作をしているか確認して下さい。
>>729 ポインタの指示するアドレスにある値に加算をしてしまっていたようですね。
ご助言ありがとうございました。
fgets()関数とsscan()関数を使って fgets(inpBuf,sizeof(inpBuf),stdin); sscanf(inpBuf,"%d",&inpNum); printf("入力した数値:%d\n",inpNum); としたとき、数字ではなく文字列を入力すると マイナスの値が返ってくるのですか、何故なのでしょうか? 例えば kjhと入力すると-858993460と返ってきます。 だれか教えてください。お願いします。
>>732 その場合sscanf()は何もしていない。
単にinpNumに元々入っていた値がprintf()で出力されているだけ。
inpNumを初期化しておくこと、並びにsscanf()の戻り値をチェックすること。
>>733 親切に対策まで教えてくれてありがとうございます。
2次方程式ax2+bx+c = 0の係数a, b, cを入力し、解の判別(虚根、重根、実根)を行い、判別結果と解を出力 するプログラムを作成せよ。実際に、3種の解が得られる3組の係数を入力し、結果を示せ。 お願いします
>>735 それのどこが質問なの?
丸投げはプログラム板の宿題スレでやってくれ
737 :
期待の☆ :2011/01/14(金) 22:24:55 ID:yI00afVD
rand関数について質問させてください。 アルファベット大文字 26字、アルファベット小文字 26字、数字 9字 の合計62文字からランダムに一文字取り出す式を教えて下さい。 今日 rand関数を習ったばかりで よくわかりません。{(>_<)} 基本的な使い方は大丈夫です。
0から61(1から62)の範囲で変化する乱数を作る。
合計62文字の配列に文字を入れて、その配列のインデックスを乱数で決めて出力する。
> 特定の範囲で乱数を求めたいときにはa = rand() % 10とする方法も広く知られているが、
> 線形合同法は下位にあるビットほど質が悪い。
> そのため上記のコード例のような上位にあるビットを利用するコードが推奨されている。
http://ja.wikipedia.org/wiki/Rand 数字 9字 0はないのか・・・
739 :
まちがって名前消しちゃいました。 :2011/01/15(土) 17:29:11 ID:0EeTGqOI
ランレグス圧縮についてここまでできたのですが、 #include<stdio.h> int main(void){ char x1=0, x2=0; int x, count=0; while((x=getchar())!=EOF){ x2=x1; x1=x; if(x1==x2){ count++; }else{ if(count>1) printf("%d", count); printf("%c", x1); count=1; } } if(count>1) printf("%d", count); return 0; } これだと手入力でaaabbbだとa3b3と表示されます。 これをtxtファイルからaaabbbを読み込んでtxtファイルに出力してa3b3と表示できますか?
できます
#include <stdio.h> #define NUM 255 int main(void) { char str[NUM]; char encode[NUM]; int i,j,pos; int count; FILE *fp1; FILE *fp2; fp1 = fopen("a.txt", "r"); fp2 = fopen("b.txt", "w"); if(fp1 == NULL || fp2 == NULL) { printf("ファイルをオープンできませんでした。\n"); return 1; } else { printf("ファイルをオープンしました。\n"); } fscanf(fp1, "%s", str); for (i = 0, pos = 0; str[i] != '\0';) { for (j = i+1, count=1; str[j] != '\0' && str[i] == str[j]; j++) { count++; } encode[pos++] = str[i]; encode[pos++] = count + 0x30; i = j; } encode[pos] = '\0'; /* 圧縮文字列の表示 */ printf("圧縮した文字列:%s\n", encode); fprintf(fp2, "%s", encode); fclose(fp1); fclose(fp2); printf("ファイルをクローズしました。\n"); return 0; }
理解が浅いので教えてください。 char str[]="abcde"; で'd'を表示するには printf("%c",str[3]); ポインタでは printf("%c",*(str+3)); ですよね。 char str[2][6]="abcde","vwxyz"; の'w'をポインタで表示したい場合はどうしたらよいでしょうか。
>>742 まず、
printf("%c",str[3]);
と
printf("%c",*(str+3));
はまったく同じで、str[3] は *(str + 3) と書くのと一緒(これをシンタックスシュガーという)。
どちらもポインタ演算で、区別はない。
ひいては str[3] は 3[str] とも書けるし、*(3 + str) と書くのと一緒。
次に、
char str[2][6]="abcde","vwxyz";
はコンパイルエラー。正しくはこう。
char str[2][6]={"abcde","vwxyz"};
で、質問の答えは
str[1][1]
744 :
742 :2011/01/17(月) 09:53:02 ID:???
>>743 1次元配列の説明ものすごく勉強になりました。本当に感謝です。
いろいろ驚きです。
745 :
まちがって名前消しちゃいました。 :2011/01/23(日) 18:54:12 ID:CjsfQYcS
すいません。コンパイルしようと思ったらvcvers32が外部と内部で実行できません。って 出てきたんですけど・・・・どうすればいいんですか?
>>745 それC言語の話じゃないから、プログラム技術板の該当スレで質問したらいいと思うよ。
ビット演算が速いのか試したかったのですが結果は同じでした。
Celeron(初期CPU超古いですが) windowsXPsp3 minGWを使っております。
ビット演算の比較に適さないプログラムかもしれませんが、
ビット演算はほぼ速度に影響しないのが実情でしょうか?
#include <stdio.h>
#define AAAAA 1000
int main(void){
int i,j,num,n;
scanf("%s",&n);
for(i=0;i<AAAAA;i++){
for(j=0;j<AAAAA;j++){
num=16/2
printf("[%d][%d]\n",i,j);
}
}
scanf("%s",&n);
for(i=0;i<AAAAA;i++){
for(j=0;j<AAAAA;j++){
num=16
>>1 printf("[%d][%d]\n",i,j);
}
}
return 0;
}
748 :
747 :2011/01/30(日) 07:47:08 ID:???
文字列のポインタについて質問です。 char* a[5]; と宣言すると文字列五つ分のポインタができるとおもいますが、 この時点では文字列の長さがわからないのにどうやって宣言した文字列のメモリを確保しているんでしょうか?
>>747 それ、最適化されています。
まず、2 のべき乗で割られる割り算の場合は、ビットシフトに置き換えられます。
次に、コンパイル時に答えのわかる演算は、コンパイラが計算してしまいます。
最適化を防ぐには、volatile 修飾子をつけて宣言した変数を仲介させる必要があります。
volatile int ans, num = 16, num2 = 2;
...
ans = num / num2;
...
ans = num >> 1;
最適化されていないと、除算は CPU が実行できる演算の中で特に重い演算なので、まったく
違いが無いということは無いです。
ただし、除算やビットシフトに比べて printf() がとてつもなく重い処理をしているので、有意な差
を感じにくいかも知れません。
要するに、このような実験をする場合はループ内で printf() を使ってはいけません。
>>749 いやいやいや、確保していませんよ。
この宣言では a[0]、a[1]、a[2]、a[3]、a[4] の 5 つのポインタが作成されますが、
そのポインタ値がどこを指しているかは不定です。
勝手に文字列が確保されることは無いので、この 5 つのポインタを初期化や代入の前に使おう
とするとアクセスエラーになってプログラムが強制終了されるか、プログラムが想定外の動作を
したりするので気をつけてください。
なお、仮に、
char* a[5] = { "ab", "cde", "hijklmn", "opqrs", "tuvwxyz" };
と初期化された場合、文字列 "ab", "cde", "hijklmn", "opqrs", "tuvwxyz" はプログラムの特別
なアドレスに自動的に配置されます。
この自動確保されるメモリ領域は、大抵のコンパイラで標準では書き換え禁止メモリに配置され
るので、
a[1][0] = 'C';
などと文字列を書き換えようとするとアクセスエラーが発生してプログラムがクラッシュしますので
気をつけてください。
一方、char* a[5]; の時点でポインタは書き換え可能なスタックメモリに確保されているので、
a[3] = "OPQRS";
のように文字列 (正確には文字列へのポインタ) を代入する事は許されます。
>>750 詳しい説明をありがとうございます。
このプログラムのようにPrintffがあるとビット演算が埋もれて
しまう感じになるんですね。
コンパイラってすごいんですね。そういえば確かに最適化で
答えがわかるものは答えが出た状態でコンパイルされるって
聞いたことある気がします。
演算部分もちょっといじって、printfを外に出して、演算が終わっ
たときに表示するようにして試してみます。
すごく勉強になりました。ありがとうございます。
753 :
747 :2011/01/31(月) 18:49:08 ID:???
>>750 計算する数値を入力させ、printfを外したところ明確な速度差が出ました。
ビット演算てすごいですね。
また、printfの重さを痛感しました。
計算によってはビット演算を使うようにこれからは考えて利用したいと思います。
本当に丁寧にありがとうございました。
>>751 勘違いしてたみたいですね・・。
スッキリしました。
ありがとうございました
>>755 free()忘れはないですし、いいと思います。
念入りに書くのだったら、malloc() の返り値が NULL かどうかチェックして、
NULL, すなわち malloc() が失敗したときには、たとえばエラーメッセージを表示して中断する、とかするのもいいかもしれません。
>>755 です。
mallocのエラー処理はあった方がいいんですね。
線形リスト構造はややこしくてこんがらがっていましたが
ちょっと自信つきました。添削アドバイスありがとうございました^^
井include<stdio.h> int main(void) { int i,t; scanf("%d\n",t) printf("%d\n",i+t); return 0; } エラーがでます・・・何故でしょうか?
>>759 エラーが出る理由はエラーメッセージに書いてあるよ
a[100][100][100]みたいな配列を宣言すると、 メモリ不足かセグメンテーションフォルトになります。 メモリの制限を増やす方法ってありますか? コンパイラはgccでOSはwindows7です。 よろしくお願いします。
>>761 static 付けて宣言するか、malloc() 等で動的確保してください。
配列を使うところで、 #define N 17000 #define M 14 ... ... int a[N][M]; このN,Mをまだ大きくしたいのですが、これ以上大きくすると コンパイルはできるのですが実行できずクラッシュしてしまいます どうすれば大きな値に設定できるようになるのでしょうか いけめんなおにぃさま教えてくださいお願いします
>>764 ありがとうございます
static 使ったら少し余裕ができたのですが
a[2^30][30]
2^30*30=32212254720のメモリが必要でまだ足りないようです
これはスーパーコンピュータでもないと出来ないのでしょうか
>>765 64bit 対応コンパイラでコンパイルして 64bit OS で動かせば、仮想メモリの許す限り
動作するんじゃないかな (スワップすれば動作速度は遅いと思うけど)。
32bit コンパイラ & 32bit OS では、4GB か 2GB 程度しかメモリ使えないから、そのまま
では無理だね。
30GB ものデータに一度にアクセスして処理をする事はほとんど無いと思うから、使わない
データをテンポラリファイルに吐き出して必要になったらメモリに読み込むという機構を
実装すれば、32bit でも行けるとは思う。
面倒だけど。
>>766 32bitですしなんだか理解が出来そうにないので現状で満足することにします
ありがとうございました
#include <stdio.h> #define N 1000 int main() { int i,j,k,m,r; int ttt; int numC[6][3] = {{0,0,1},{0,1,0},{1,0,0},{0,1,1},{1,0,1},{1,1,0}}; int Hantei[30][20][6] = {0}; int Dousou_Hantei[20][20][6] = {0}; int topolgy[27][6] ={{0,0,0,0,0,1}, {0,0,0,0,1,0}, {0,0,0,1,0,0}, {0,0,0,1,0,1}, {0,0,0,1,1,0}, {0,0,0,1,1,1}, {0,0,1,0,0,0},{0,0,1,1,0,0}, {0,1,0,0,0,0}, {0,1,0,0,0,1}, {0,1,0,1,0,1}, {0,1,0,1,1,1}, {0,1,1,0,0,0}, {0,1,1,0,0,1}, {0,1,1,1,0,1}, {1,0,0,0,0,0}, {1,0,0,0,0,1}, {1,0,0,0,1,0}, {1,0,0,1,1,0}, {1,0,0,1,1,1},{1,0,1,0,0,0}, {1,0,1,0,1,0}, {1,0,1,1,1,0}, {1,1,1,0,0,0}, {1,1,1,0,0,1}, {1,1,1,0,1,0}}; int num_2[N]; //1の部分の成分だけを抜き出す for(j = 0; j < 27; j++){ ttt = 0; for(m = 0; m < 6; m++){ if(topolgy[j][m] == 1){ for(r = 0; r < 3; r++){ Hantei[j][ttt][r] = numC[m][r]; Dousou_Hantei[j][ttt][r] = numC[m][r]; }//r ttt++; }//if }//m num_2[j] = ttt; }//j //Hanteiを表示テスト for(i = 0; i < 27; i++){ for(j = 0;j < num_2[i]; j++){ for(k = 0;k < 3; k++){ printf("Hantei[%d][%d][%d]=%d %d ",i,j,k,Hantei[i][j][k],Dousou_Hantei[i][j][k]); }//k putchar('\n'); }//j putchar('\n'); }//i return(0); } HanteiとDousou_Hanteiを同じ値にしたいのですがなぜか、Hanteiの方に真逆の数値が出てきてしまいます どこが間違っているのでしょうかご指摘お願いします
自己解決しました
C言語はflashみたいにサイトに埋め込んで ブラウザ上で遊ぶみたいなゲームを作れるんでしょうか。
>>770 ActiveX書けば作れる(ただし深いWindowsの知識が要る)
ちなみにFlashもActiveX
>>771 プログラミングとか全く知らん状態でブラウザゲームとか色々作りたくて
Flexsdk+AS勉強しようかC勉強しようか悩んでたんですが
Cのほうが導入簡単、情報豊富、基本っぽいので
難しいだろうがCでいけるところまで頑張ってみようと思います。
早い御解答どうもありがとうです。
windows7での既存のパスにc\Borland\Bcc55\binのパスを追加する方法を教えてくださいませm(._.)m
>>773 それCじゃなくてWindowsの質問だから
Windows板かプログラム技術板の適当なスレに行くが吉
775 :
Perl忍者lvl2(ニュートラル) ◆M5ZWRnXOj6 :2011/02/23(水) 20:29:01.50 ID:GojfTE43
うんそうだね よかったね
>>773 それCだけどWindowsのCならコロンが抜けた質問だから、
ごみ箱以下の質問のようだ。それはここらヘンで質問を
行なうのがふさわしいが、しかし、回答できるスキルの
ある回答者が枯渇している。
778 :
まちがって名前消しちゃいました。 :2011/02/24(木) 21:15:41.83 ID:mWUynOo0
1,2,3,4,5,6,7,8,9,10・・・・と自然数を際限なく順々に表すコードって何かありますでしょうか? forを使う方法でしょうか?
781 :
まちがって名前消しちゃいました。 :2011/02/25(金) 02:02:49.99 ID:XqVwcjVY
>>779 ,780 なるほど・・・勉強になります。ありがとうございました
C言語とか関係ない?のかもしれませんがVisual C++を使ってプログラミングをしているときに カーソルを打った文字上にあわせると点滅?ではなく■のようになってしまい、抜かしてしまった文字を 入れるのがとても不便です。どうすればいいのでしょうか? 説明下手ですが、何卒宜しくお願いします。
>>782 よく分からないけどInsertキーの事?
プログラム技術板にVC++スレがあるからそっちで訊いた方がいいかも
>>782 >>783 の言うように、うっかりInsキーを押して、エディターが
挿入モードから上書きモードに変更されたのだと思う
785 :
782 :2011/03/04(金) 12:25:51.72 ID:???
>>783 >>784 どうやらInsertキーを押してしまっていたようです
教えていただきありがとうございます
786 :
まちがって名前消しちゃいました。 :2011/03/09(水) 14:58:55.67 ID:aAH8G0bv
C言語を使ってのGUIプログラムの作り方が学べる入門書がありましたら、お教えしてもらえないでしょうか? 手元にある書籍は独習C言語、C言語による最新アルゴリズム事典です。
788 :
まちがって名前消しちゃいました。 :2011/03/10(木) 07:17:03.98 ID:TOIeVChB
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
http://sky.geocities.jp/ttl_ttl_ttl_pic/ NASMでC言語を作る NASMで高度な設計書類とNASMの簡単な利用方法のサイトです
C言語のHEADの作り方 DLLファイルの作り方が書いてあります
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
int n = x とかいうのはnというメモリにxを格納するということでいいんですか?
>>789 逆です。
x というメモリ領域に記憶されているデータを n にコピーする、という意味です。
VBスレにも質問しましたが、こちらでも質問させていただきます。
現在VC++から変数の値をVBに渡してVBで処理するプログラムを作成しています。
VC++でのdll作成、読み込み
VBでのdll作成、読み込みはできるようになりました。
しかし以下のサイト
http://www.nextftp.com/swlabo/m5_cpp/hp_dll/dll_00.htm を参考にVC++でdllファイルを作成しても
VBではどうしても参照してくれません。参照しようとすると
ファイルアクセスが可能で、有効なアセンブリまたはCOMコンポートであることを確認して下さい。
と出ます。
VC++は数値計算をかじった程度の知識しかないので、これ以上はお手上げです。
何がどういけないのか教えてください。
792です。 すみません、もうひとつの質問スレに質問します。 お騒がせしました。
794 :
まちがって名前消しちゃいました。 :2011/05/29(日) 18:53:17.24 ID:TxdzeraO
コマンドプロンプトからコンパイルするときに、アクセスが拒否されました、 とでてしまいます。フラッシュメモリのデータでやっててダメだったので、 Cのところに移して再度やってもダメでした。 管理者としてコマンドプロンプトを実行もやってみましたが、同じです。 どうやったら読み込んでくれますか?
>>794 情報不足もいいところ
コンパイラの名前とバージョン
OSの名前とバージョン
ファイルシステムとフォルダ(ディレクトリ)のアクセス権
環境変数
実際に打ったコマンドライン
以上の詳細よろしく
10進数から2進数に変換させるプログラム教えてください できれば計算過程も表示させたいのですができるのでしょうか?
C言語を習い始めて思うが、自分の頭の中でイメージした仕様にC言語の文で表す事が出来ないんだけど、これって訓練で補えるの?それともセンス? 習い始めて3ヵ月です。
799 :
まちがって名前消しちゃいました。 :2011/06/01(水) 22:38:50.93 ID:eNJj9spN
visual c++ 2010 express 使ってるんですけど プログラムを実行するとコマンドプロントがすぐに消えてしまいます どういった対策をすればいいでしょうか?
データを入力して4次行列式を計算させるプログラムを作りたいんですがどなたか書いてもらえませんか? のってるサイトとかないですかね?
C言語初心者です。授業についていけないので独学を始めました。 以下は現在作成途中のソースなのですが AとBを足した数値が7.920000と表示されてしまいます。 実際は7.92のはずなんですが…原因がわかりません。 考えられる原因として何があるでしょうか? 本当に初心者なのでうまく伝えられず申し訳ないのですが 教えて頂けると幸いです。 #include <stdio.h> int main() { float a=2.34,b=5.58,c=6.765; printf("a = 2.34\nb = 5.58\nc = 6.765\n"); printf("(a + b)=%f",a+b); printf("何かキーを押してください"); printf("お疲れ様でした"); return 0; }
7.920000=7.92 別に間違ってはいないよ。
表示する桁数を変えたいってなら、 printf のマニュアル参照だな。 ただの "%f" だけでは小数点以下を何桁表示するかが指定できていない。 "%5.2f" みたいに、桁数を指定する書き方を調べるといいよ。
805 :
まちがって名前消しちゃいました。 :2011/06/07(火) 10:38:37.57 ID:dnBMdgI6
>>801 は
>>799 のあげ足を取ってるだけ。
>>799 は多分コマンドプロンプトを起動してない。
コンソールアプリを直にダブルクリック等で起動した場合は
conhost.exe とそのアプリだけが起動される。
807 :
まちがって名前消しちゃいました。 :2011/06/08(水) 00:29:26.93 ID:HthoJMzX
次のオーダー記法に関する問題が分かりません。。 自然数上の関数Sが、以下のように再帰的に定義されている。 このSについての次の問いに答えよ。 S(0)=1, S(n)=6T( [n/2] ) + 8n ( [ n/2 ] はn/2の切捨て) (1) S(n) = O(n^k)とはなるが、S(n) = O(n^(k-1))にはならない 自然数k>=2を示せ。 (2) 上の問いの答えkに対して、S(n)=O(n^k)となることを証明せよ。 (3) 上の問いに対する証明論法ではS(n)=O(n)の証明はできない。 どこで議論が破たんするかを示せ。 ご教授お願いします。
独学していたのですが、次の漸化式の正確な値を計算するプログラムがわかりません。 C_N=C_(N/2)+1 (N>=2の時) C_1=0 因みにこの問題はアルゴリズムの解析という章の章末問題で、 漸化式の他にはO記法等が記述されている章でした。 よろしくお願いいたします。
809 :
まちがって名前消しちゃいました。 :2011/06/09(木) 21:46:40.88 ID:16nLDsjd
総選挙に夢中になっていたらレポートが終わりませんでした>< きたりえ推しの皆様教えてください! 以下の処理を実現するための式を考えてみよう。(C言語) (1)xの下位ビットをyへ、yはshort型とし、下位4ビット以下は1をセットする。 (2)xの下位ビットをchar型変数xの上位4ビットへ、yの下位ビットをzの下位ビットへ代入する。
>>809 「下位ビット」という言葉の意味を明確にしてもらおうか
ファイル操作で、inputファイルから 203 210 221 200 201 153 255 100 123 のようにスペースで区切られているものを fscanfで読み込んで、それを加工した後に、outputファイルに再びスペースで区切った形で書き出したいのですが そのように書き出すためにはどういった操作をすればいいのでしょうか? fputsを使うと、スペースで区切られずに書き込まれてしまいますよね・・・?
>>811 細かい書式指定をするなら、fprintf() 使えばいいんじゃないのかな
#include <stdio.h> int main(void) { int a; int b; int c; int d; printf("1つ目の整数を入力せよ\n"); scanf("%d",&a); printf("2つ目の整数を入力せよ\n"); scanf("%d",&b); printf("3つ目の整数を入力せよ\n"); scanf("%d",&c); printf("4つ目の整数を入力せよ\n"); scanf("%d",&d); printf("【 %d , %d , %d , %d 】\n",a,b,c,d); if(a<=b&&a<=c&&a<=d) { printf("最小値は、%d\n",a); } else if(b<=a&&b<=c&&b<=d) { printf("最小値は、%d\n",b); } else(c<=a&&c<=b&&c<=d) { printf("最小値は、%d\n",c); } if(d<=a&&d<=b&&d<=c) { printf("最小値は、%d\n",d); } if(a>=b&&a>=c&&a>=d) { printf("最大値は、%d\n",a); } else if(b>=a&&b>=c&&b>=d) { printf("最大値は、%d\n",b); } else (c>=a&&c>=b&&c>=d); { printf("最大値は、%d\n",c); } if (d>=a&&d>=b&&d>=c) { printf("最大値は、%d\n",d); } printf("何かキーを押して下さい\n"); getch(); printf("END\n"); return 0; }
上記のソースを実行するとelse(c<=a&&c<=b&&c<=d)の部分を 「else(c<=a&&c<=b&&c<=d);」にしろと出ます。 教科書にはそんな記述がないのですが、「;」をつけるのが正しいのでしょうか? また、上記のソースの間違っているところがわかりません。 教えて頂けると嬉しいです。
else に条件は付けられないだろ。
816 :
まちがって名前消しちゃいました。 :2011/06/18(土) 00:35:37.79 ID:3FGF4+sV
X ++; X %= 4; ならば、 ++X%=4; と出来ると思うのですが、 X += 5; X %= 4; を一行に纏めることは出来ますでしょうか?
X = (X+5)%4;
> ++X%=4; できるか? これ
819 :
まちがって名前消しちゃいました。 :2011/06/22(水) 20:53:03.50 ID:xzD10Cxu
下のcodeで"-dog"は検索可能だが2つ目(-cat)が検索出来ません。 何が良くないのでしょうか? enum mode {dog=0,cat,}; struct table {int key; char *opt;}; static struct table opt1[] = { {.key=dog,.opt="-dog",},{.key=cat,.opt="-cat",}, }; ******** #include <search.h> int cmp(const void *m1, const void *m2){ struct table *mi1=(struct table *)m1; struct table *mi2=(struct table *)m2; return strcmp(mi1->opt, mi2->opt); } int main(int argc,char *argv[]){ struct table key; key.opt=argv[1]; lfind(&key,opt1,(size_t*)opt1,sizeof(struct table),(int(*)(const void*, const void*))cmp); return 0;}
>>819 lfind() の第 3 引数が間違っている。
第 3 引数には、「要素数を格納している変数へのポインタ」 を指定しなければならない。
(size_t*)opt1 なんて誤魔化してはいけない。
要素数の求め方は、sizeof(opt1) / sizeof(struct table)。
この結果を適当な変数 (例えば int num; ) に代入し、第 3 引数にポインタ演算子 (&) をつけて指定する。
正しいコードはここに。
http://codepad.org/pha78RbG あと、すぐに答えを得られないからといって、マルチポストをするのをやめる事。
回答する方もどこにレス付けていいかわからないし、無駄に大勢の目に触れてその時間を
奪う事になる。
失礼だろ?
以下ちょっかい。
> struct table {int key; char *opt;};
key の型が enum mode ではなく int なのが気になる。
> {.key=dog,.opt="-dog",},{.key=cat,.opt="-cat",},
最近のコンパイラはこれが通るのか・・・
> (int(*)(const void*, const void*))cmp
このキャストは要らない。
821 :
まちがって名前消しちゃいました。 :2011/07/03(日) 11:37:58.94 ID:grG1DO3n
最大値探索を行うプログラムです。?部分が分かりません。学校の演習で、再帰を使って実装します。 どなたか教えてください。 #include<stdio.h> int d[999]; int main(){ int i,n; int max(int i,int n); scanf("%d",&n); for(i=1;i<=n;i++){ scanf("%d",&d[i]); } for(i=1;i<=n;i++){ printf("%5d",d[i]); if(i%10 == 0){break;} } printf("\n最大値 : %d \n",max(1,n)); } int max(int i,int j){ int z,z1,z2,k; if( i==j ){ z = ?; }else{ k = (i+j)/2; z1 = ?; z2 = ?; if(z1>z2){ z = z1; }else{ z = z2; } } return z; }
>>821 十分テストしてないけど多分こう
z = d[i];
z1 = max(i, k);
z2 = max(k + 1, j);
825 :
まちがって名前消しちゃいました。 :2011/08/08(月) 22:06:07.55 ID:hGJCCoga
C言語初心者です。 int main(int argc, char *argv[]){というのはargcが引数の数を表していて、argvがその引数の内容であると知りました。 引数に数字を一つ渡して、それを60で割った余りをだすコードを作ろうとして、 int sam = argv[1]%60; としたのですが、「式には整数型、もしくは列挙型を使用する必要があります」と警告されました。 これはどうすればこの警告をなくすことができるのでしょうか?
>>825 整数型に変換すればいい
そもそもargvに数字が入ってるとは限らないんだが
プログラミングするにはパソコンでなにかインストールしなきゃならないの?やっぱり金かかる?
>>827 今は無料で大抵そろう。インストールは必要。
829 :
まちがって名前消しちゃいました。 :2011/09/06(火) 17:28:06.42 ID:JTMuNuTW
マルチ乙 配列渡してねーじゃん
831 :
まちがって名前消しちゃいました。 :2011/09/14(水) 22:19:44.64 ID:L/2Ssg7p
/ (___ ___) ヽ ./ ノ 人 ヽ ヽ __ ./ // ヽ ヽ .ヽ / ̄\ ./ ○ ヽ、 / (__) (_) ヽ/ ○ \ / \,,,--―――''''''''''''''''''''――-/ ヽ ..⌒‐-,,,,_ /:/ヽー―――-、,,__,,,,-―――:|| _,,;-‐''"⌒~~~ .ヽ/::||:::::::::: (●) (●) ||/ヽ く ::||::::::::::::::::: \___/ ||:::::::::ヽ ヽヽ:::::::::::::::::::. \/ ノ_/ 【ゴールデンレス】 このレスを見た人はコピペでもいいので 10分以内に3つのスレへ貼り付けてください。 そうすれば14日後好きな人から告白されるわ宝くじは当たるわ 出世しまくるわ体の悪い所全部治るわでえらい事です
よくゲームとかで字幕が流れてる時にボタン押すと字幕が全部表示されたりしますよね?ギャルゲーとかであるようなやつです。 あれってどういうプログラム組んでるのですか?
834 :
まちがって名前消しちゃいました。 :2011/10/02(日) 16:41:41.73 ID:+8kbX0rX
みみずん検索 違法の可能性
http://mimizun.com/index1.html 2ちゃんねるの固定ハンドルみみずんは、2ちゃんねるの過去ログを自らのサーバーに勝手に保存し、
それを無料でネット上に公開している。
この中には2ちゃんねるで既に削除されたはずの危険なスレッドや書き込みが多数残っており、
誰かが気づいてメールで対応しなければ削除されることはない。
更にみみずんはこのような過去ログをCD-Rに取り込み、有料で売っていたという。
>>833 遅れてすいません。
これをCでどうやって組んでるのかを知りたいのです
>>835 その「ゲームとかで字幕が流れてる時」の組み方によって変わるから
一概に言えない
仕掛けたタイマーのイベント発生の間隔を変えるとか、ボタン (?) の
入力のポーリングをして時間計って出力タイミングを変化させるとか、
やりかたはいろいろある
そういうことをするには C 標準の機能ではできず、OS やライブラリ
等の機能を頼ることになる
実際的なやり方は、こんなスレでこんな質問をするお前に理解できる
とは思えないし、そんなに困難な処理ではないので自分で思い付かな
いようなら自作しようと思うのはやめた方がいい
最大値の求め方について教えてください。 配列の最大値を求めたくて 下のプログラムを作ったのですが,うまく動作しません。 for( maa=1 , qxr = qxxr[0] ; maa < 10; maa++) { if( qxr < qxxr[maa] ) { qxr = qxxr[maa]; qxxxr = maa; } } printf("最大のq*rは%dのとき%f\n",qxxxr,qxr); 最大のq*rは0のとき0 と表示されるのですが間違っているところがわかれば教えてください。 配列は下のような感じです. qxxr[0]=40.800000 qxxr[1]=41.600000 qxxr[2]=0.000000 qxxr[3]=0.000000 qxxr[4]=40.000000 qxxr[5]=0.000000 qxxr[6]=0.000000 qxxr[7]=40.000000 qxxr[8]=0.000000 qxxr[9]=0.000000
さPC初心者が職業訓練所で半年勉強しただけでC言語ってとれる?
aのb乗はcを求めたいのだがforの中が違うらしい for (i=1; i<=b; i++) { c = c * a; } ぼっちだから聞く友達いないのでよろしく頼みます
cの初期値は?
forの前にやりました 実行したら16行目にエラーがあるらしいのでそこだけ書きました
そこだけ見てもおかしくないから、どっか別のとこのエラーが伝播している
はじめまして. 関数に与える引数を動的に変更したいのですがどうすればいいでしょうか. vprintfの第2引数va_listを動的に作成するようなイメージです. 具体的にはリスト構造で文字列や数値が入ったキューから,データ型に基づいて%dや%cを構築しつつ, 関数のコールスタックにデータを積み上げてvprintfを呼ぶようなことをしたいのです. 単純な表示のみであればprintfやstd::coutをキューの長さ分呼べばいいと思うのですが, 可変長引数で呼ぶ場合にどのようにすればいいかわからず困っています.
844 :
843 :2011/10/31(月) 22:04:40.82 ID:???
C++のメンバ関数へのポインタとインスタンスが分かっている前提として, メンバ関数のコールスタックをインラインアセンブラで直接積んでメンバ関数を呼ぶような方法でもいいです. アーキテクチャはx86_64gccかllvmです.
846 :
まちがって名前消しちゃいました。 :2011/11/01(火) 18:09:37.42 ID:/Wwxvwkw
5が出るまで数値を入力した時に 入力された数列を最大値と最小値を入れ替えて左から順に並べた状態にするプログラムの作り方を教えてください 配列で最大値と最小値だけを入れ替えることができないです
numbers[0]~[3]にばらばらな0~9までの整数を代入しているところ?
4つの整数を被らなくなるまで何度も乱数で作ってる 賢くも分かりやすくもない方法なのでむしろ自分で分かりやすいように直してみてはいかが
>>848 さんそこからの行です。いまいちよくわからない。
>>846 リストを使ってみてはどうかの?ソースが長くてすまんの皆の衆
struct pair{
unsigned int value;
struct pair*next;
};
struct pair*new(int arg){
struct pair*result=(struct pair*)malloc(sizeof(struct pair));
result->value=arg;
result->next=0;
return result;
}
void delete(struct pair*arg)
{if(arg->next!=NULL)delete(arg->next);free(arg);}
struct pair*find_max(struct pair*arg){struct pair*result;if(arg->next!=NULL){result=find_max(arg->next);if(result->value<arg->value){result=arg;}}else{result=arg;}return result;}
struct pair*find_min(struct pair*arg){struct pair*result;if(arg->next!=NULL){result=find_min(arg->next);if(arg->value<result->value){result=arg;}}else{result=arg;}return result;}
void print(struct pair*arg){fprintf(stdout,"%d ",arg->value);if(arg->next!=NULL)print(arg->next);}
int main(int argc,char**argv){
struct pair*head=NULL,*cuurent=NULL,*max=0,*min=0;
while(1) /*Loop of input*/
{
char buffer[256];
unsigned int input;
sprintf(buffer,"Input a number:");
fputs(buffer,stdout);
fgets(buffer,256,stdin); /*Receive user input*/
input=atoi(buffer);
if(head==NULL){
head=new(input); /*Allocated memory added at last */
current=head;
}
else{
current->next=new(input); /*Allocated memory added on top */
current=current->next;
}
if(input==5)break; /*Ended loop at input 5 */
}
max=find_max(head); /*Recursive find max index out */
min=find_min(head); /*Recursive find min index out */
min->value^=max->value; /* Swap the values between... */
max->value^=min->value; /* MAX */
min->value^=max->value; /* & MIN */
print(head); /*Recursive output to console */
delete(head); /*Recursive free the allocated memory */
return 0;
}
チェスを改造してオリジナルルールを追加してネット対戦をしたいのですが 通信対戦が可能な基本的なチェスができるソースコードどっかにありませんか?
853 :
まちがって名前消しちゃいました。 :2012/01/15(日) 21:59:16.66 ID:RjKVfO1x
kansu1(){ int i; for (i=1; i<=2;i++){ printf("kansu1のi=%d\n",i); } return; } main(){ int i; for (i=1; i<=5;i++){ printf("mainのi=%d \n",i); kansu1(); } } このプログラムの変数iをグローバル変数にするためには, int i; kansu1(){ for (i=1; i<=2;i++){ printf("kansu1のi=%d\n",i); } return; } main(){ for (i=1; i<=5;i++){ printf("mainのi=%d \n",i); kansu1(); } } であってますよね? グローバル変数にしたときの続行結果が mainのi=4 kansu1のi=1 kansu1のi=2 がループするような結果になります。 グローバル変数にすると,なぜこうなるのでしょうか?
kansu1が終了した時点でiに何が入っているか考えれば分かるよ
終端文字 \0 の意味がよくわかりません・・・・。 苦しんで覚えるC言語というサイトで勉強しているのですが、 #include <stdio.h> int main(void) { char str[6] = {'M','A','R','I','O','\0'}; printf("%s\n",str); return 0; } 実行結果:MARIO もしも文字列にEOSがなかった場合は、配列の先まで文字列として扱われるので、 偶然にどこかで0(EOS)が見つかるまでは、 延々と文字列が表示され続けることになり、とても困ります。 ↑これの意味がよくわからないです。
どなたかこの問題を解いて下さい… お願いします 三つのint型整数の最小値を返す関数min()を作成しなさい。ただし、二つのint型整数の小さい方の値 を返す関数minof()も作成し、min()はminof()を必ず2回呼ぶものとする
すみませんがあげさせて頂きます。
>>856 それそのまま問題の通りに書くだけじゃん
解くような問題か?
859 :
まちがって名前消しちゃいました。 :2012/11/10(土) 09:19:44.25 ID:R3wlFXNm
仕事でCが必要で勉強しようと思うんですが お勧めの本を教えてください
860 :
まちがって名前消しちゃいました。 :2012/11/11(日) 00:53:31.86 ID:nk6sceGT
課題がどうしても分からず困っています。分かる方おしえてください。 data.datを入力し構造体型の配列に格納する(データ件数は50件以下,EOFになるまで入力) 次に<CTRL>Dが押されるまで学生番号をキー入力し,その氏名と得点を表示する。 学生番号の探索には二分探索法を使う。学生番号が存在しない場合は、存在しないことを 示すメッセージを表示する。 [実行例] 学生番号を入力してください ←入力要求のメッセージ(scanfの前に毎回入れる) 1012 1012番Sonoda Mari 得点=42点 ←学生番号,氏名,得点を表示 学生番号を入力してください 1001 1001番Ando Ichiro 得点=73点 学生番号を入力してください 1016 1016番Nakai Kanji 得点=49点 学生番号を入力してください 1000 1000番なし 学生番号を入力してください(<CTRL>D=終了) <CTRL>D
861 :
まちがって名前消しちゃいました。 :2012/11/11(日) 00:55:35.88 ID:nk6sceGT
いちよ私が書いてみたものを載せます。 #include<stdio.h> #include<stdlib.h> int main(void) { struct GDATA { int bango; char sei[11],mei[11]; int tokuten; }; struct GDATA seiseki[50], tmp; int i,lo,hi,flg, kensuu, bango; FILE*fp; if((fp=fopen("data-a.dat","r"))==NULL) { printf("data-a.dat OPEN ERROR!\n"); exit(1); } for(kensuu=0;fscanf(fp,"%d%s%s%d",&tmp.bango, tmp.sei, tmp.mei, &tmp.tokuten)!= EOF;kensuu++) { seiseki[kensuu] = tmp; } printf("学生番号を入力してください\n"); while(scanf("%d", &bango)!= EOF) lo=0; hi=50 flg=0; while(flg==0&&lo<=hi) { i=(lo+hi)/2; if(bango!=seiseki[i].bango) { if(bango<seiseki[i])hi=i-1; elselo=i+1; } else flg=1; } if(flg==1)printf("%d番%s %s 得点=%d点\n",seiseki[i].bango,seiseki[i].sei,seiseki[i].mei,seiseki[i],mei); else printf("%d番なし\n",seiseki[i].bango); return 0; }
ナンバープレースのプログラムを作ろうとしているのですが意図していない数値が入ってしまいうまくいきません 作成途中のものですが原因を指摘してもらえないでしょうか #include <stdio.h> int main (void) { struct hyou { int a,b,c; int x; }; struct hyou data[3][3]; int i,j,cnt,l,r; int s; for(i = 0;i < 3;i++){ for(j = 0;j < 3;j++) { printf("[%d][%d]に値がある場合は1を無い場合は0を入力",i,j); scanf("%d",&data[i][j].x); if(data[i][j].x) { printf("[%d][%d]の値を入力",i,j); scanf("%d",&s); switch(s) { case '1': data[i][j].a = 1; data[i][j].b = 0; data[i][j].c = 0; break; case '2': data[i][j].a = 0; data[i][j].b = 1; data[i][j].c = 0; break; case '3': data[i][j].a = 0; data[i][j].b = 0; data[i][j].c = 1; } }else{ data[i][j].a =1; data[i][j].b =1; data[i][j].c =1; } } } return 0; }
あぼーん
ナンバーズの当たり番号を表示するプログラムを作りたいです どの様なアルゴリズを使えば良いのか教えてください
C言語を始めます。 プログラムなんて何もかじったこともないのですがおすすめの参考書ありますでしょうか?
まずはアセンブリから始めよう
867 :
まちがって名前消しちゃいました。 :2013/10/09(水) 12:51:10.66 ID:rZ7xdW8U
ヘッダファイルって必要なものしかインクルードしちゃいけないの? めんどくさいから標準的なやつは全部インクルードしちゃえばいいやんって 思うんだけど。 もちろん、どのヘッダを読むかで呼び出される関数が違うとかマクロになる とかするやつは考えるとしてさ。
868 :
まちがって名前消しちゃいました。 :2013/10/09(水) 16:19:52.43 ID:7FPOrtuM
>>867 インクルードの記述をみて、そのコードが何をしているのかを判断する材料にもなるので、
そういう意味では少ないほうがいいのかもしれません。
>>867 コンピューターの記憶装置がまだフロッピーディスクとかの頃、
使いもしないファイルをインクルードするとコンパイルするのに
結構無駄な時間がかかったんよ。今はその名残りかと思われ。