C言語なら俺に聞け(入門篇) ぱぁと2〜
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2006/07/25(火) 18:07:43前スレ
C言語なら俺に聞け(入門篇)
http://pc8.2ch.net/test/read.cgi/tech/1146700389/
0002デフォルトの名無しさん
2006/07/25(火) 19:32:50ただ俺だけなんだがなんでだろう?
0003デフォルトの名無しさん
2006/07/25(火) 20:57:570004デフォルトの名無しさん
2006/07/25(火) 21:38:52ドッペルゲンガーかもしれん・・・・・
今のうちに出来ることをやっておいた方がいい。
0005デフォルトの名無しさん
2006/07/25(火) 21:39:32オヤシロサマの祟りじゃ〜
0006デフォルトの名無しさん
2006/07/26(水) 11:15:26疲れてるんだよきっと。
0007デフォルトの名無しさん
2006/07/26(水) 12:03:25っていうエラーが出るんですけど、どうしたらいいんでしょうか・・・
ボーランドのコンパイラで、例のhello〜っていうプログラムも実行できずにいます><
超初心者ですみません><
0008デフォルトの名無しさん
2006/07/26(水) 12:37:06入門以前の事だろそれは
出て行け
二度と来るな
0009デフォルトの名無しさん
2006/07/26(水) 12:50:360010デフォルトの名無しさん
2006/07/26(水) 13:45:560011デフォルトの名無しさん
2006/07/26(水) 13:53:52�@モーターへの出力命令の与え方
�Agoto文の使い方
�B作図の仕方
何度調べてもわかりませんでした。
知っている方、教えて下さい。
0012デフォルトの名無しさん
2006/07/26(水) 14:18:26入門以後の事だろそれは
出て行け
二度と来るな
0013デフォルトの名無しさん
2006/07/26(水) 14:27:48失礼しました
0014デフォルトの名無しさん
2006/07/26(水) 23:20:40�@ Cの話じゃない
ハードの構成に依存する
�A goto <ラベル>
�B Cの話じゃない
紙に鉛筆などで好きに書け
0015M
2006/07/29(土) 15:05:062.float型ポイント変数aにfloat型変数numberのアドレスを代入する。
3.ポインタ変数aが指すオブジェクトの値を1インクリメントする。
4.文字型配列aに格納されてる文字列をプリントする。
C言語でどうやってプログラムするんですか?(><)
0016デフォルトの名無しさん
2006/07/29(土) 15:30:30duble * dPtr;
// 2.
float * a = & number;
// 3.
* a += 1;
// 4.
printf("%s", a);
0017M
2006/07/29(土) 15:33:010018デフォルトの名無しさん
2006/07/29(土) 17:13:177円とかそういう落ちではなく、、
7回改行とか7文字分空白を空けるのかと思ったんだが。。
cmdじゃ効果無いかな・・
0019デフォルトの名無しさん
2006/07/29(土) 18:07:307の値を持つ文字のこと。ASCIIではBELと定義されいるので、一般的にコンソールに出力すればベルが鳴る。
#そういう意味においては、"\a"と等価。
0020デフォルトの名無しさん
2006/07/29(土) 18:46:10だからエラーの時プープーて鳴るのか。
(2つ書いたから)
なるほど、、トンクス>>19
0021デフォルトの名無しさん
2006/07/29(土) 23:51:43あれって、0を返すのと他の数値を返すのとではどう違うんですか?
プログラムを実行しても何も変わらないので、疑問に思いました。
どなたか教えてくれれば、幸いです。
0022デフォルトの名無しさん
2006/07/30(日) 00:05:12おそらく0と-1だったら向こう側ではエラーの有無をチェックしているのでは?
返す値によって何がどう違うかは戻り値の目的による。
0023デフォルトの名無しさん
2006/07/30(日) 00:05:46例えば、system 関数でそのプログラムを実行した時に
system の戻り値が変わったりする(でも、どうなるかは環境依存か)。
あとはシェルで実行した時に
プログラムの成功/失敗の判定に影響したり(これも環境依存か)。
まあ、環境依存だが、そんなところだ。
002421
2006/07/30(日) 00:08:10入門書を読んでも書いてなかったので。
ネットでも調べてみます。
0025デフォルトの名無しさん
2006/07/30(日) 00:11:16エラーで終わらせるのなら、exit()でないといかんか。。
0026デフォルトの名無しさん
2006/07/30(日) 00:19:29何も書かずに自分で勝手にやれってことですけどw
0027T
2006/07/30(日) 00:29:550028デフォルトの名無しさん
2006/07/30(日) 00:29:57002928
2006/07/30(日) 00:33:33>>27
こんなのあったけど
ttp://www.plustarnet.com/aspil/Programming/
つかググれよ
つ「DirectX C言語 ゲーム プログラム」
これで3個目に出たぞ
0030デフォルトの名無しさん
2006/07/30(日) 00:38:48遅いのにJavaが全盛なのが理解出来た。
Cで組める香具師って絶滅種?
0031デフォルトの名無しさん
2006/07/30(日) 00:39:48初心者が手軽に手を出すからじゃね?
0032デフォルトの名無しさん
2006/07/30(日) 00:47:20ただな・・・仕事で使うんじゃないならJavaに利用価値があんまりないんだよ
003328
2006/07/30(日) 00:56:260034デフォルトの名無しさん
2006/07/30(日) 12:50:100035デフォルトの名無しさん
2006/07/30(日) 14:19:04以下のやつの結果が表示されないのですけれど
どうすればよいのかご教授ください
#include <stdio.h>
int main()
{
int a;
a=10;
printf("変数aには%dが代入されています。", a);
return 0;
}
0036デフォルトの名無しさん
2006/07/30(日) 14:36:240037デフォルトの名無しさん
2006/07/30(日) 14:36:52結果というのが何を指すか分からないが、
「変数aには10が代入されています。」
と表示されないということか?
まず、環境を書け。俺は表示された。
0038デフォルトの名無しさん
2006/07/30(日) 14:54:06printfの後にfflush(stdout);を入れてみてもだめなのか?
0040デフォルトの名無しさん
2006/07/30(日) 14:59:17004135
2006/07/30(日) 15:03:50int main()
{
int a;
a=10;
printf fflush(stdout);("変数aには%dが代入されています。", a);
return 0;
}
こんな感じやってみたのですが
だめでした.....
0042デフォルトの名無しさん
2006/07/30(日) 15:07:30おいおいw
それじゃコンパイル通らないんじゃ?
こうだろ?
#include <stdio.h>
int main()
{
int a;
a=10;
printf("変数aには%dが代入されています。", a);
fflush(stdout);
return 0;
}
0043デフォルトの名無しさん
2006/07/30(日) 15:10:09エクスプローラで実行ファイルダブルクリックなのかな?orz
004435
2006/07/30(日) 15:10:51コマンドプロントは閉じていないと思われます。
その代わりプロントタイプ宣言のない関数printfの呼び出し
という警告がでていますが.....
0045デフォルトの名無しさん
2006/07/30(日) 15:13:08stdio.hをインクルードしてるし、警告も出ない
0047デフォルトの名無しさん
2006/07/30(日) 15:17:350049デフォルトの名無しさん
2006/07/30(日) 15:26:24ちゃんとbcc55のインストール手順に従ってインストールした?
bcc55を展開したディレクトリのreadme.txtに書いてあるはず
たぶんbcc32.cfgとilink32.cfgの設定を忘れてると思う
0050デフォルトの名無しさん
2006/07/30(日) 15:34:06実行ファイルの有無で一目瞭然だ
その可能性もあるなんて状況がいまいち分からん
0052デフォルトの名無しさん
2006/07/30(日) 15:40:10二次方程式ax^2+bx+c=0 の根を求めるプログラムを作成せよ。
ここまでは思いついたのですが,あと,どのようにすれば良いですか?
#include <stdio.h>
#include <math.h>
double d, x1,x2; int a,b,c;
x1=(-1*b+sqrt(d))/(2*a);
x2=(-1*b-sqrt(d))/(2*a);
この間に何を入れれば良いのでしょうか?
0053デフォルトの名無しさん
2006/07/30(日) 15:51:080054デフォルトの名無しさん
2006/07/30(日) 15:51:16根の公式知ってるなら難しくはないと思われ
a=1;
b=3;
c=2;
d=b*b-4*a*c;
でも虚数解の場合はいらないのかい?
0055デフォルトの名無しさん
2006/07/30(日) 15:58:24はい。虚数解の場合は良いと思います。ただし,a≠0の場合です。
#include <stdio.h>
#include <math.h>
main(){
double d, x1,x2; int a,b,c;
a=1;
b=3;
c=2;
d=b*b-4*a*c;
x1=(-1*b+sqrt(d))/(2*a);
x2=(-1*b-sqrt(d))/(2*a);
}
こうですか?
0056デフォルトの名無しさん
2006/07/30(日) 15:58:38課題なら宿題スレに行けばたぶん完全なプログラムを書いてくれるよ
でも、その課題はさんざん既出な気がするよ
0057デフォルトの名無しさん
2006/07/30(日) 16:00:33基本的にはOK
でも、求めたx1とx2の値を表示する文が最後にほしいかな
0058デフォルトの名無しさん
2006/07/30(日) 16:22:08ありがとうございます。
具体的にx1とx2の値を表示する文とはどのように表現すれば良いのですか?
a,b,cの値をそれぞれ式に代入することですか?
0059デフォルトの名無しさん
2006/07/30(日) 16:29:22printf("ax^2+bx+c=0,a=%lg,b=%lg,c=%lg -> x1=%lg,x2=%lg\n",a,b,c,x1,x2);
をreturn文の前に入れておけば?
ってなんだこりゃー
int a,b,c;
は
double a,b,c;
にするべきかと
0060デフォルトの名無しさん
2006/07/30(日) 16:33:020061デフォルトの名無しさん
2006/07/30(日) 16:39:19return文が無かった
x1とx2への代入文の次に>>59のprintfを入れておいて
0062デフォルトの名無しさん
2006/07/30(日) 16:41:25http://ex16.2ch.net/test/read.cgi/news4vip/1154167137/
まとめ
http://vanbl.blog.shinobi.jp/
現在新しい専ブラを開発中ですプログラミングに詳しい方
>>1にアドバイスをお願いします
0063デフォルトの名無しさん
2006/07/30(日) 16:42:51#include <stdio.h>
#include <math.h>
main(){
double d, x1,x2; double a,b,c;
a=1;
b=3;
c=2;
d=b*b-4*a*c;
x1=(-1*b+sqrt(d))/(2*a);
x2=(-1*b-sqrt(d))/(2*a);
printf("ax^2+bx+c=0,a=%lg,b=%lg,c=%lg -> x1=%lg,x2=%lg\n",a,b,c,x1,x2);
}
0064デフォルトの名無しさん
2006/07/30(日) 16:46:15まあ警告は出るけどそんなものでしょ
mainは暗黙のうちにintを返す関数とみなされてるから
最後にreturn 0;でも書いておけば警告も無くなると思う
実際実行してみれ
0065デフォルトの名無しさん
2006/07/30(日) 16:50:19ありがとうございます。
助かりました。
0066デフォルトの名無しさん
2006/07/30(日) 19:48:03#includ <math.h>
int main()
{
double a, b, c, d, x1, x2;
scanf("%d", &a);
scanf("%d", &b);
scanf("%d", &c);
d = b * b - 4 * a * c;
if (0 > d)
{
return ー1;
}
0067デフォルトの名無しさん
2006/07/30(日) 19:49:48else
{
*x1 = (-b + sqrt(d)) / (2 * a);
*x2 = (-b - sqrt(d)) / (2 * a);
printf("x1 = %f\n", x1);
printf("x2 = %f\n", x2);
}
return 0;
}
多分どこか間違ってると思う。
ってか、宿題ってこんなものでるんだ。f^_^;
知らなかった。
0068デフォルトの名無しさん
2006/07/30(日) 20:04:38まともに動かないだろ。
0069デフォルトの名無しさん
2006/07/30(日) 20:16:48#includ > #include
return ー1 > return 1
scanf("%d", &a); 以下double型で宣言されている変数に対して %d > %lf
0070デフォルトの名無しさん
2006/07/30(日) 20:18:41全角文字はタブー
0071デフォルトの名無しさん
2006/07/30(日) 21:05:15ご指摘ありがとうございます!!
0072デフォルトの名無しさん
2006/07/30(日) 21:08:480073デフォルトの名無しさん
2006/07/30(日) 21:21:24#include <stdio.h>
#include <math.h>
int main()
{
double a, b, c, d, x1, x2;
scanf("%d", &a);
scanf("%d", &b);
scanf("%d", &c);
d = b * b - 4 * a * c;
if (0 > d)
{
return 1;
}
else
{
*x1 = (-b + sqrt(d)) / (2 * a);
*x2 = (-b - sqrt(d)) / (2 * a);
printf("x1 = %f\n", x1);
printf("x2 = %f\n", x2);
}
return 0;
}
0074デフォルトの名無しさん
2006/07/30(日) 21:24:12ですかって、自分でコンパイルして実行してみたの?
else { } 不要、*x1 *x2 前の * も不要
0075デフォルトの名無しさん
2006/07/30(日) 21:27:07scanf("%d", &a); < %d を変えていないからエラーが起こる
0076デフォルトの名無しさん
2006/07/30(日) 21:41:40明日,学校で実行してみます。ご指摘ありがとうございました。
0077デフォルトの名無しさん
2006/07/30(日) 21:49:13自分のコンピュータにコンパイラを入れてやれいw
0078デフォルトの名無しさん
2006/07/30(日) 22:13:25#include <stdio.h>
#include <math.h>
int main(){
double a,b,c,d,x1,x2;
scanf("%lf",&a);
scanf("%lf",&b);
scanf("%lf",&c);
d=b*b-4*a*c;
if(0>d) {return 1;}
x1=(-1*b+sqrt(d))/(2*a);
x2=(-1*b-sqrt(d))/(2*a);
printf("x1=%f\n",x1);
printf("x2=%f\n",x2);
return 0;
}
0079デフォルトの名無しさん
2006/07/30(日) 22:36:03おまえ何回か宿題スレにいたやつじゃないだろうな?
0080デフォルトの名無しさん
2006/07/30(日) 22:37:13complex<double> x と書けば、実数部と虚数部がそれぞれdouble型として定義されますよね?
その後、それぞれに任意の値を代入するために、どのようにして各部にアクセスすれば
良いのでしょうか?
x.real、x.imagというようにしてもコンパイルエラーがでました。
↓エラーの内容
「メンバー関数は呼び出すかそのアドレスをとらなければならない」
0081デフォルトの名無しさん
2006/07/30(日) 22:50:34C++ はスレ違い。
0083デフォルトの名無しさん
2006/07/31(月) 12:01:09int main()
{
printf("Hello");
return 0;
}
こんな初歩的なプログラムでヘッダファイルの#include<stdio.h>を消して実行してみたら普通に実行できたんだけど・・・
普通に実行できるならヘッダファイルいらなくね?という疑問です。
0084デフォルトの名無しさん
2006/07/31(月) 12:08:58普通に動くんだからブレーキなんて外しちゃってもよくね?
0085デフォルトの名無しさん
2006/07/31(月) 12:11:36でもなんか納得いかない。
「普通に動くけど、ないとダメな安全装置」って感じなのかな?
0086デフォルトの名無しさん
2006/07/31(月) 12:12:36{
double d = fabs(-1.5);
printf("%lf\n", d);
return 0;
}
とやってみるとわかる。 ヘッダー有り無しで挙動違うから。
0087デフォルトの名無しさん
2006/07/31(月) 12:16:09printf()ならインクルードファイルなしでも動くけど、
ファイル操作もできなければ数学関数(sinなど)も使えない状態だね。
つまり、たまたま使える関数だけしか使わないのでない限り、標準インクルードファイルは必要。
単に、環境設定に失敗しているだけだろうから、使っている処理系関連のスレで聞いて味噌。
0088デフォルトの名無しさん
2006/07/31(月) 12:47:10プログラム自体が動かなすorz
逆にさ、#include<stdio.h>がないと正常に動作しねーよ!っていうプログラムって何か無いかな?
例をみないと理解できないよ...
0089デフォルトの名無しさん
2006/07/31(月) 12:50:43関数()の中身がプロトタイプ宣言されていないとintとみなされ、
戻り値の型もintと見なされるので、それでは都合の悪いプログラム
ならなんでもいいだろう。
int main(void)
{
}
0090デフォルトの名無しさん
2006/07/31(月) 12:51:54printf("%f", sin(0.5)); とかね。
プロトタイプ宣言がないと、-1, 0, 1のどれかしか表示されないはず。
0091デフォルトの名無しさん
2006/07/31(月) 12:56:39int main(){
int i,j;
for(i=1; i<=1000; i++)
j=i+j;
printf("%d \n",j);
return 0;
}
これやって表示される結果の数を教えてください。
0092デフォルトの名無しさん
2006/07/31(月) 13:01:300093デフォルトの名無しさん
2006/07/31(月) 13:02:43お願いします。
0094デフォルトの名無しさん
2006/07/31(月) 13:05:05だがろくでも無い結果になるのはすぐに分かる
jを初期化してないからな
0095デフォルトの名無しさん
2006/07/31(月) 13:05:510096デフォルトの名無しさん
2006/07/31(月) 13:09:48かな
0097デフォルトの名無しさん
2006/07/31(月) 13:41:03gcc だと math.h の関数の型は
math.h なしでもちゃんと認識される。
0098デフォルトの名無しさん
2006/07/31(月) 14:05:45暗黙の変換で int 化しないの? (特に引数側
微妙に拡張機能っぽいけど…
# プリプロセスの段階 or PASS1 の段階で math.h に含まれるシンボル比較してるんかな?
0099デフォルトの名無しさん
2006/07/31(月) 14:10:27あ、初期化してなかった^^;
ありがとうございました。
0100デフォルトの名無しさん
2006/07/31(月) 16:14:22微妙も何も、紛う方無く拡張機能
0101デフォルトの名無しさん
2006/07/31(月) 21:45:200102デフォルトの名無しさん
2006/07/31(月) 22:11:08なんとなくはわかるし、コードを書くうえでも別に困りませんけど、参考として知りたいんです。
ぐぐっても「川の流れのようなものです」とか抽象的な解説しか出てきませんでした。
0103デフォルトの名無しさん
2006/07/31(月) 22:16:49半分に割った竹の筒の中をバイト列がさらさらと流れます
0104デフォルトの名無しさん
2006/07/31(月) 22:20:23その竹筒は実際はなんなんですか?メモリ領域ですか?
0105デフォルトの名無しさん
2006/07/31(月) 22:22:15http://l.huu.cc
管理人が質問に何百行も答えてるww
0106104
2006/07/31(月) 22:37:130107デフォルトの名無しさん
2006/07/31(月) 22:39:21あくまで概念です
実際はシステムが適当にバッファリングして
適当にフラッシュしてディスクに書き込みます
0108104
2006/07/31(月) 22:47:000109104
2006/07/31(月) 23:12:51ttp://www.rupan.net/uploader/download/1154355021441513.8jmkZu
↑こういう理解でよろしいんでしょうか?
0110デフォルトの名無しさん
2006/08/01(火) 00:07:32FILEやsize_tを使うもの。
それかコンパイラ変えろ。
0111デフォルトの名無しさん
2006/08/01(火) 00:12:07オレは基本的に警告は出ないようにすべきだと思っているので気持ち悪い。
おまいら警告が出ても平気なのか?
0112デフォルトの名無しさん
2006/08/01(火) 00:15:580113デフォルトの名無しさん
2006/08/01(火) 02:35:060114デフォルトの名無しさん
2006/08/01(火) 05:28:57総和を求めるプログラムをよろしくお願いします^^
0115デフォルトの名無しさん
2006/08/01(火) 05:54:10ttp://www004.upp.so-net.ne.jp/abcde/program/touhi.c
0116デフォルトの名無しさん
2006/08/01(火) 21:52:12普通のCとVCって何か違うんでしょうか?
今日、「Cはやったことがあります」と言ったら、「やってもらうのはVCだからねえ・・・」と反応されました。
両者に違いがあるってことですか?
0117デフォルトの名無しさん
2006/08/01(火) 21:53:43ぜんぜんとは言わんが、明らかに名前からして違うやろ・・・
CはVC++の基本部分はあるけど
0118デフォルトの名無しさん
2006/08/01(火) 22:04:20えっ・・・具体的に何が違うんでしょうか?
調べたけど何が違うんだかわからないんです。
0119デフォルトの名無しさん
2006/08/01(火) 22:19:13だいたい、CとC++ってところで既に違うのだが
調べたって何をどうやって?実際に使ってみれば違いなんて分かるだろ
人に聞いて、言葉だけじゃ自分が理解できないことなんていくらでもあるだろ
論より証拠、自分で試せ
0120デフォルトの名無しさん
2006/08/01(火) 22:25:25スレタイ100回読んで出直せ
0121デフォルトの名無しさん
2006/08/01(火) 22:28:52オマエガナー
0122デフォルトの名無しさん
2006/08/01(火) 22:29:13で検索したら説明サイトがあったぞ
0123デフォルトの名無しさん
2006/08/01(火) 22:32:18★初心者にVisual C++を教えるスレ★ Part23
http://pc8.2ch.net/test/read.cgi/tech/1140711893/
とにかく使え。それからVCなんて言語は俺は知らん
C言語で得た知識は使えるが、C++の言語の仕様について
新たに勉強する必要もある。オブジェクト指向についても理解できないと
後々苦労するけどな
0124デフォルトの名無しさん
2006/08/01(火) 22:58:15VCとはVisual C++の略称だが、
Visual C++とは、MicrosoftのC/C++コンパイラとIDEその他のツールなどをセットにした製品のこと。
そして、「Visual C++が使える」と言えば、ATLやMFCなどのVC特有のライブラリ・独自機能を使えると言う意味合いが強い。
0125デフォルトの名無しさん
2006/08/03(木) 00:11:57もげー
0126デフォルトの名無しさん
2006/08/04(金) 02:47:37ただし両者の知識量には数十から数百倍の隔りがある。
0127デフォルトの名無しさん
2006/08/05(土) 10:59:340128fg
2006/08/05(土) 12:16:39pがさしている節を消すには
その前のポインタをpのポインタがさす節にすればいいのだけど
pがさしている節の前の節をpであらわすのはどうすればいいのですか?
0129デフォルトの名無しさん
2006/08/05(土) 13:25:490130デフォルトの名無しさん
2006/08/05(土) 14:17:2910進数から2進数に変換するプログラム作ったのですがエラーが出てしまいます。
どこがエラーか考えてもわからないのでヒントをください。
#include<stdio.h>
void main(void){
int x;
int *y;
y=&x;
scanf("%d",&x);
while(x>0){
y++;
*y=x%2;
x=x/2;
}
while(y!=&x){
printf("%d",*y);
y--;
}
}
0131デフォルトの名無しさん
2006/08/05(土) 14:18:590132130
2006/08/05(土) 14:19:24エラーがでてしまいます(>_<)
0133デフォルトの名無しさん
2006/08/05(土) 14:20:56と出ます(><)
0134デフォルトの名無しさん
2006/08/05(土) 14:23:50xのいる位置を間借りしてるから、最初のループでメモリぶっ壊しまくり。
int *y;
y=&x;
を
int y[128];
にでもしたら。
ついでに
while(y!=&x){
は終了条件として使い物にならなくなるので、
yを書き進めた回数は別の変数にカウントしなさいな。
0135デフォルトの名無しさん
2006/08/05(土) 16:18:38未だにようわからんorz
0136デフォルトの名無しさん
2006/08/05(土) 16:24:440137デフォルトの名無しさん
2006/08/05(土) 16:35:020138デフォルトの名無しさん
2006/08/05(土) 16:49:31printf()系の書式指定の話なら、そのまま「%7.3f」と出力される。
これが"%7.3f"ならば、小数部3桁固定、全体最低7桁(カラム)で出力される。
従って、>136は二重に間違い。
0139デフォルトの名無しさん
2006/08/05(土) 16:50:25素で間違えてる可能性があるから、怖いといえば怖い。
0140デフォルトの名無しさん
2006/08/05(土) 18:41:49リスナークラスみたいなのをCで実装するとしたらどうすればいいの?
関数ポインタ使うのが一般的?
0141デフォルトの名無しさん
2006/08/05(土) 18:45:22リスナーとは違うけど、qsortや、bsearchでファンクションポインタを渡しているアレ。
0142デフォルトの名無しさん
2006/08/07(月) 11:26:31・次の要素が p となる要素 q を自前で探す。
for (q=...; q!=p; q=q->next) ;
・逆連結なリスト構造(= deque) にする。
struct foo { struct foo* prev; void* element; };
・双方向リストにする。
struct bar { struct bar* prev; struct bar* next; void* element; };
好きなの選べ
0143デフォルトの名無しさん
2006/08/07(月) 11:30:07for (q=...; q->next != p; q=q->next) ;
だわ
0144初心者
2006/08/07(月) 14:46:50二つの数列がある。A数列の一部数をB列に入れて新しい数列を作るつもりで
例:
char hh[8]="sdfsddf";
char kk[6];
kkにhhの3,4,1,5,6番目の文字を入れる方法は??
入れる文字は無関係、順番が重要!!
0145デフォルトの名無しさん
2006/08/07(月) 14:48:38sprintf(kk, "%.2s%c%.2s", & hh[3], hh[1], & hh[5]);
0146初心者
2006/08/07(月) 15:04:28早く返事してありがとうございました!
試します。
0147デフォルトの名無しさん
2006/08/07(月) 20:26:170148デフォルトの名無しさん
2006/08/07(月) 22:38:39デバックしてみると、printf関数で読点「、」など特定の文字が入ってるとエラーになるようです。
原因と解決策わかる方お願いしますm(__)m
環境ですが
OS:Vine Linux 3.3.2-0v18
コンパイラ:GCC 3.3.2 20031218
ファイル形式:EUC-JP となっております。
0149デフォルトの名無しさん
2006/08/08(火) 00:16:55サンプルとはいったい何のこと?
0150デフォルトの名無しさん
2006/08/08(火) 02:36:21情報を小出しにするのはアカンよ
0151デフォルトの名無しさん
2006/08/08(火) 22:39:440152デフォルトの名無しさん
2006/08/08(火) 22:55:35#既にあるかどうかはしらね。
0153デフォルトの名無しさん
2006/08/09(水) 00:52:36しかし妙なものを欲しがるな。
0154デフォルトの名無しさん
2006/08/09(水) 02:06:40自分はC言語の初心者なんですが、演習問題や
プログラムをやって力をつけたいと思ってます。
自分で調べて柴田望洋さんの「解きながら学ぶC言語」
がいいかなと思いましたが他にもお勧めの書籍ありますか?
わかりやすく丁寧に書かれている本を探しているのですが‥
0155デフォルトの名無しさん
2006/08/09(水) 10:39:46「プログラミング言語C(第2版)」(B. W. カーニハン, D. M. リッチー著)
共立出版
0156デフォルトの名無しさん
2006/08/09(水) 20:02:13まあ漏れはあるけど一通りやってみて、ANSI Cとかの本に手をつけてみるといいと思うよ。
手っ取り早くならいきなりANSI Cでもいいけど多分何回で理解出来ないと思う。
はじめてのCだけで、終わるのは勧めない。
そもそもeucで句読点がどんなコードで表現されるか調べてみればいいのに。
0157デフォルトの名無しさん
2006/08/09(水) 20:54:35ありがとうございます!
すぐに本屋で買ってきてしっかり勉強します。
0158デフォルトの名無しさん
2006/08/11(金) 21:20:18あるセルの周りにある値が1のセルを数えようと思ってるんですけど
field[50][50]でボード作っていてsumに数えた値をいれるとして
for(i=0;i<50;i++){
for(j=0;j<50;j++){
if(i!=0&&j!=0) if(field[i-1][j-1]==1)sum++;
if(i!=0) if(field[i-1][j]==1)sum++;
if(j!=50&&i!=0) if(field[i-1][j+1]==1)sum++;
if(j!=0) if(field[i][j-1]==1)sum++;
if(j!=50) if(field[i][j+1]==1)sum++;
if(i!=50&&j!=0) if(field[i+1][j-1]==1)sum++;
if(i!=50) if(field[i+1][j]==1)sum++;
if(j!=50&&i!=50) if(field[i+1][j+1]==1)sum++;
}}
でやると端のセルだけうまく数えられません
だれかアドバイスください
0159デフォルトの名無しさん
2006/08/11(金) 22:05:230160デフォルトの名無しさん
2006/08/11(金) 23:08:51値が1のセルの内、周りにその「あるセル」がある場合のみ、数えればいいんでない?
0161デフォルトの名無しさん
2006/08/12(土) 04:56:50int func(int *x)
{
x = (int *)malloc(100);
return 0;
}
int main()
{
int *x = NULL;
func(x);
return 0;
}
funcでメモリ確保して、ポインタを引数で返したいのですが、
上だとうまくいきません。
どうやったらいいのでしょうか?
0162デフォルトの名無しさん
2006/08/12(土) 05:19:52{
*x = ...
}
0163デフォルトの名無しさん
2006/08/12(土) 05:24:57mainでx=func()
0164デフォルトの名無しさん
2006/08/12(土) 05:34:11うまくいきません。
>>163
戻り値でなく引数でほしいのですが・・・
0165デフォルトの名無しさん
2006/08/12(土) 05:39:300166デフォルトの名無しさん
2006/08/12(土) 05:47:59こうですか?
int func(int **x)
{
*x = (int *)malloc(100);
return 0;
}
int main()
{
int **x = NULL;
func(x);
return 0;
}
これだとビルドはできますが、実行するとmallocで死にます。
0167デフォルトの名無しさん
2006/08/12(土) 06:00:03Cは常に値渡し。
0168デフォルトの名無しさん
2006/08/12(土) 06:01:52でも、もしC++なら、mallocじゃなくてnewにしようね。
0169デフォルトの名無しさん
2006/08/12(土) 06:30:20int **xにしたら、*xはどこを指しているんだ?ちゃんと初期化してから
渡さないとまた未定義の動作だぞ。
0170デフォルトの名無しさん
2006/08/12(土) 07:24:03初期化して渡せば大丈夫だと?
どんな値で初期化するんだ?
引数に渡される値を変更するなら
最初から>>167みたいな使い方以外に無いだろうに。
標準関数のstrtol等だって、普通にそういう使われ方されてるだろ。
0171デフォルトの名無しさん
2006/08/12(土) 07:36:40聞いてるんじゃないか?まあint **x = malloc(25 * sizeof(int *));
のような物なら意味がありそうだが。
0172デフォルトの名無しさん
2006/08/12(土) 08:03:07元の質問が>>161だろ?
で、さらに>>164と言ってるんだから
引数に渡した呼び出し側の変数の値を変更したい、としか
俺には見えないけどね(Cでは出来ないけど)。
それが偶然ポインタ変数だから、ポインタのポインタを使うというだけ。
だいたい、
int **x = malloc(100); // 引数とは別の変数を宣言した上で代入?
なんてコード、main()内にもfunc()内にも出てこないけど、
どこから出たんだい?
100という数字の意味なんて、>>161以外知らないし。
0173デフォルトの名無しさん
2006/08/12(土) 08:04:47お前は一体何を言ってるのだ?
0174デフォルトの名無しさん
2006/08/12(土) 08:06:10int *x;
func(&x);
まで書かないと、馬鹿がたかってくるようだぞ。
0175デフォルトの名無しさん
2006/08/12(土) 11:25:47*x(**x[NULL]のアドレスが指してる*x型の場所) = 右辺; ← ×
NULLという数値(アドレス)を参照or間接代入するのは危険です
JavaでいうNullExceptionと同じです
なので>>174のように書いてください
0176デフォルトの名無しさん
2006/08/12(土) 17:33:07英語習ったけど、ネィティブの言い回し知らないから書けないって状態。
0177デフォルトの名無しさん
2006/08/12(土) 17:39:54書けない理由はそこには無い
0178デフォルトの名無しさん
2006/08/12(土) 19:08:51多少は知っておくべきだろうしなー
配列とポインタについてくらいは、それなりに理解しておかないと
そっちの勉強だって先に進められなくね?
0179デフォルトの名無しさん
2006/08/12(土) 20:02:39なにがしたいのかイマイチわかってないが、リストからpを消してつなぎかえる
だけなら必ずしもprevのポインタを構造体に用意する必要はない。
q0がリストの先頭として、
for (q = q0; q && q != p && q->next != p; q = q->next);
if (q) {
q->next = q->next->next;
free (p);
}
q!=pはq0がpであるときの用心。
0180デフォルトの名無しさん
2006/08/12(土) 22:07:09fopenの記述以外に、更にどこか変わったんですか?(2003ユーザです)
//C言語の話です。。
0181デフォルトの名無しさん
2006/08/12(土) 22:08:540182179
2006/08/12(土) 22:52:54if (q) {
if(q->next) q->next = q->next->next;
free (p);
}
に訂正しときます。
0183デフォルトの名無しさん
2006/08/12(土) 23:44:03すでに議論は終わってるけど、ひょっとして混乱してるといけないので清書。
void
func (x)
int **x;
{
*x = (int*) malloc(sizeof(int)*100);
return;
}
int
main()
{
int *hoge;
func(&hoge);
return 0;
}
0184デフォルトの名無しさん
2006/08/12(土) 23:49:20つまんないよ
0185デフォルトの名無しさん
2006/08/13(日) 00:04:390186161
2006/08/13(日) 00:40:35今、帰省中のため、ビルドして確認できませんが、とても勉強になりました。
int
0187161
2006/08/13(日) 00:41:58今、帰省中のため、ビルドして確認できませんが、とても勉強になりました。
int *x
0188デフォルトの名無しさん
2006/08/13(日) 00:53:420189デフォルトの名無しさん
2006/08/13(日) 01:46:58int **x;
懐かしすぎてなんか泣けてきた。
0190183
2006/08/13(日) 02:35:31func(struct hoge1 x, struct hoge1 *y, struct hoge2 *hage1, struct hoge2 hage2, struct hoge1 z)
より
func(x,y,hage1,hage2)
struct hoge1 x, *y, z;
struct hoge2 *hage1, hage2;
のほうがいいかんじ。
で、引数少ない場合でもこう書いてます。
上の書き方で、改行を入れるのが普通だね。
0192デフォルトの名無しさん
2006/08/13(日) 02:40:01今でもこれで書く人っているんだなあ。
自分じゃようやらんが、言ってることはまあ同意。
(プロトタイプを書いとけば大丈夫なのか?)
0194デフォルトの名無しさん
2006/08/13(日) 03:09:08Rubyは今でもK&Rですよ。
以前、ANSIスタイルにしろといちゃもんつけてた人がいましたが、
華麗に却下されました。
0195デフォルトの名無しさん
2006/08/13(日) 03:14:540196デフォルトの名無しさん
2006/08/13(日) 05:04:40struct hoge1 x,
struct hoge1 *y,
struct hoge2 *hage1,
struct hoge2 hage2,
struct hoge1 z)
で十分。
右にコメントも入れられるし。
0197デフォルトの名無しさん
2006/08/13(日) 09:46:49register int argc;
register char **argv;
{
/***/
return 0;
}
たしかカルガリーコーパスのソースってこんな感じだった気がする。
0198デフォルトの名無しさん
2006/08/13(日) 10:10:08float foo;
{
printf("%s\n", sizeof(foo) != sizeof(float) ? "differ" : "identical");
}
と書くと、differと出力されるコンパイラもあった。
0199デフォルトの名無しさん
2006/08/13(日) 14:16:490200デフォルトの名無しさん
2006/08/15(火) 12:14:21昔のSunOSのccがそうだったかもしらん。
要は、スタックにfloatを積む手段がないからだな。
どうせならエラーにしてくれれば良さそうなのにね。
0201デフォルトの名無しさん
2006/08/15(火) 15:23:250202デフォルトの名無しさん
2006/08/15(火) 15:35:46でもインクルードはしておいた方がいい。
0203デフォルトの名無しさん
2006/08/16(水) 00:13:59無くても動くのですね・・
0204デフォルトの名無しさん
2006/08/16(水) 02:23:400205デフォルトの名無しさん
2006/08/16(水) 10:40:13A「局部が隠れれば何とかなる。でも着ておいた方がいい。」
0206デフォルトの名無しさん
2006/08/16(水) 10:49:44どうも有難うございます。。
局部が隠れれば何とかなるんですね・・
0207デフォルトの名無しさん
2006/08/16(水) 11:08:470208デフォルトの名無しさん
2006/08/16(水) 13:00:430209デフォルトの名無しさん
2006/08/16(水) 15:11:06register int argc;
register char **argv;
{
/***/
return 0;
}
この書き方だとVC2005でエラーにならない?
0210デフォルトの名無しさん
2006/08/16(水) 23:32:24つまり、foo は float と書いてるけど
int (おそらく2バイトな環境だよね?)になるってことか?
0211デフォルトの名無しさん
2006/08/17(木) 01:00:49ビット数を考慮したプログラミングすればいいだけだが。
Cってアセンブラに近いからアーキテクチャ知らないと困ることに成るね。
厳密にはコンパイラの仕様つーかどういうコードを吐くかぐらいは考慮しないと嵌る。
元々、OS作るために作られた泥臭い言語だしな。
0212デフォルトの名無しさん
2006/08/17(木) 01:05:10全然そんなこと無い
0213200
2006/08/17(木) 01:14:04いや、SunOSの場合はdoubleと認識していたようだ。
呼び出し側でfunc((float) 3);としてもdoubleの値が積まれるから、
関数側でもdoubleで受ける必要があるんだろうね。
0214デフォルトの名無しさん
2006/08/17(木) 01:21:44VCのせいっつーか、その書き方はプロトタイプ宣言のなかったANSI以前のCのものなんで、
C89以降のコンパイラに対応していたものがあったのは移行期間に対する配慮って奴で、
言ってしまえば単なるお義理。
現在のC、ましてやC++コンパイラでエラーが出てもコンパイラたんのせいじゃないと思われ。
0215デフォルトの名無しさん
2006/08/17(木) 01:38:180216デフォルトの名無しさん
2006/08/17(木) 01:44:520217デフォルトの名無しさん
2006/08/17(木) 02:06:11C++ならエラーにならなくちゃいけないけど。
0218デフォルトの名無しさん
2006/08/17(木) 02:26:330219デフォルトの名無しさん
2006/08/17(木) 02:33:370220デフォルトの名無しさん
2006/08/17(木) 02:35:14{
return 0;
}
むしろこれなら通るな
だからどうだってわけじゃないが
0221デフォルトの名無しさん
2006/08/17(木) 08:26:22C++では、そのように関数の定義時にも、仮引数名の省略が可能。
0222デフォルトの名無しさん
2006/08/17(木) 17:26:30あー、なるほど。
0223デフォルトの名無しさん
2006/08/17(木) 21:49:521>------ ビルド開始: プロジェクト: register, 構成: Debug Win32 ------
1>コンパイルしています...
1>register.c
1>リンクしています...
1>マニフェストを埋め込んでいます...
1>ビルドログは "file://c:\src\tmp\register\Debug\BuildLog.htm" に保存されました。
1>register - エラー 0、警告 0
========== ビルド: 1 正常終了、0 失敗、0 更新、0 スキップ ==========
釣られた?
0224デフォルトの名無しさん
2006/08/17(木) 22:32:42ftp://ftp.cpsc.ucalgary.ca/pub/projects/text.compression.corpus/
で、>>197>>209はオリジナルと比べてお行儀が良すぎる。
ftp://ftp.cpsc.ucalgary.ca/pub/projects/text.compression.corpus/progc
0225デフォルトの名無しさん
2006/08/17(木) 23:40:27.cppにすると通らないよ。
.cならCの文法で通る。
0226デフォルトの名無しさん
2006/08/18(金) 01:15:13registerは釣り要素だったのねん
0227デフォルトの名無しさん
2006/08/20(日) 02:00:04最近Cをはじめて、webとかで公開されてるコード
漁って学習してたんですが、↓のコードの書きかたって
microsoftのコンパイラでビルドできます?
void LogToFile (char *, char *);
というかchar *の部分がよく分からないです・・・
0228デフォルトの名無しさん
2006/08/20(日) 02:17:14>microsoftのコンパイラでビルドできます?
できる。
>というかchar *の部分がよく分からないです・・・
仮引数名を省略した書き方。
自分で関数宣言する場合は、この書き方はお勧めできない。(宣言と定義(実装)は、コピペするほうがいい)
0229デフォルトの名無しさん
2006/08/22(火) 23:55:39聞きますが、どうやって調べたらいいんですか。
例えば、一つ例を教えて下さい。
画像処理について。
0230デフォルトの名無しさん
2006/08/23(水) 00:24:260231デフォルトの名無しさん
2006/08/23(水) 01:17:130232デフォルトの名無しさん
2006/08/23(水) 01:21:290233デフォルトの名無しさん
2006/08/23(水) 08:23:53ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2619.txt
↑のプログラムなんですけど
if(strcmp(buff,"text") == 0)
ってのが真にならないので困ってます。
ナル文字の前に絶対に10"ロ"ってのが入るんですけど
これが原因と思うんですけどコレなんでしょうか?
Script.txtの中はこんな感じです。
text
「誰もが自分の選んだ運命や偶然与えられた運命に満足せず、
他の道を歩んだ人々を羨むのはどういうわけだろう。」
.
0234233
2006/08/23(水) 08:26:000235デフォルトの名無しさん
2006/08/23(水) 08:41:24fgets()は行末の改行を落とさない。
従って、自分でそれを取り除くか、ファイル末尾の問題がないなら"text\n"と比較すればよい。
0236233
2006/08/23(水) 08:51:25ありがとうございます。後者の方法で上手くいきました。
あと自分で取り除くって言うのは具体的にはどうやるんでしょうか?
改行の部分にナル文字を代入するとかでいいんでしょうか?
0237デフォルトの名無しさん
2006/08/23(水) 09:00:36画像処理しているソフトを探す。
オープンソースかどうか調べる。
C言語のソース発見。ウマー!
0238デフォルトの名無しさん
2006/08/23(水) 12:38:53わろすw
0239デフォルトの名無しさん
2006/08/23(水) 16:11:100240デフォルトの名無しさん
2006/08/23(水) 16:38:39おいてある場所に作成されると思うんですけど、別のフォルダ
に出力したいときはどんな風に書けばよいのでしょうか?
例えば下のようなtest.txtファイルを出力する場合です。
fp = fopen("test.txt", "w");
知っている方がいたら教えてください。
0241デフォルトの名無しさん
2006/08/23(水) 16:45:27fp = fopen("subdir\\test.txt", "w");
0242240
2006/08/23(水) 17:08:53ありがとうございました!
0243デフォルトの名無しさん
2006/08/24(木) 08:25:15fgets()の後に
char * p = strchr(buff, '\n');
if (p) * p = '\0';
0244デフォルトの名無しさん
2006/08/25(金) 15:08:24なぜなんでしょう。よろしくお願いします。
#include <stdio.h>
int main(void) {
char *a = "abcde";
char b[3] = "fgh";
while (a != "\0") {
printf("%s\n", a);
*a++;
}
}
0245デフォルトの名無しさん
2006/08/25(金) 15:51:32whileの条件がおかしいので、プログラムが暴走している。
while (*a != '\0')
0246デフォルトの名無しさん
2006/08/25(金) 15:59:11while (a != "\0")だが、
a ...文字列abcde\0の先頭アドレス
”\0" ...文字列\0\0の先頭アドレス
中身じゃなくてアドレスを比較してるよ
だから>>245
こんな指摘の仕方はダメデスカ?
0247デフォルトの名無しさん
2006/08/25(金) 16:16:36ありがとうございました。
aはアドレスなんですね。*aがそれの指す文字列と。
"\0"はアドレスになるんですか?あ、本当だ。
*a != "\0"
でやったら、
array.c:5: warning: comparison between pointer and integer
て出ました。だんだん分かってきたかなぁ。
一度分かったと思ってもすぐ分かんなくなるのがCのポインタ;(^^);
0248デフォルトの名無しさん
2006/08/25(金) 21:34:53教えてください。a.cというプログラムの中でb.cという
プログラムを実行したい、という感じなのですが…
0249デフォルトの名無しさん
2006/08/25(金) 21:41:10eval 相当@perl のことなのかな…
system() / exec() あたりだと思うけど
0250248
2006/08/25(金) 21:55:49ありがとうございます。
systemを使うのは何となく分かってるんですけど
実行したいプログラム、b.cというファイルを
どこにどうやって書けばいいのかがわからないのです。。
0251デフォルトの名無しさん
2006/08/25(金) 21:56:40そこまでのことではなく、b.cに書いた関数をa.cの中から呼び出したいとかもっと単純ななことでは?
0252デフォルトの名無しさん
2006/08/25(金) 22:17:11入門書を一冊読んだ方がいい気がする
0253デフォルトの名無しさん
2006/08/26(土) 00:00:24英語だっていきなり文法覚えても使えない。
こういう時はこう表現とか体系的に覚えないと役に立たない。
b.cが正しいかどうかチェックして実行しないと権限とられるよ。
一度分かったと思ってもすぐ分かんなくなる=分かったと思い込んでるだけ。
ちょっと応用やってみれば分からなくなるから、分かってないのはすぐ分かる。
null=ナル?
0254デフォルトの名無しさん
2006/08/26(土) 01:18:56お勧めの本を教えてください。
書店に行ってもたくさんありすぎてどれを選べばよいのか分かりません。
0255デフォルトの名無しさん
2006/08/26(土) 01:37:440256デフォルトの名無しさん
2006/08/26(土) 15:06:17ちょっと読んでみて、理解しやすい本を選べばいいと思うよ。
何冊か読んでみて、書評付きでここに晒してどうよと訊くと、いろいろ突っ込み入っていいかとおもう。
まあ全部買えとも言われるだろうけど(w
近所の図書館でもC言語の本ぐらいあると思うから、借りてきてじっくり読んでみるのもいい。
結局は、たくさん本を読めばそれだけ知識が得られるので、1冊でC言語は完璧みたいなのは期待し過ぎ。
東大生の頭で理解しやすい内容の書籍と、私立大生の頭で理解しやすい内容の書籍は違うし。
それぞれ、しょーもない説明にページ割き杉とか、難しくて理解出来ないとか感じ方も違う。
0257デフォルトの名無しさん
2006/08/26(土) 16:32:41これなんかどう?
http://www.amazon.co.jp/gp/product/4839920648/250-9356983-8673052?v=glance&n=465392
0258デフォルトの名無しさん
2006/08/26(土) 17:53:33コンパイルしてEXE作って実行すると
コマンドプロンプトが出てくるんだが
一瞬しか出てこない
この文章でわかったら教えてください
0259デフォルトの名無しさん
2006/08/26(土) 17:56:02#include<conio.h>
って書いてmain関数の最後のほうに
getch();
とでも書いてみては?
0260デフォルトの名無しさん
2006/08/26(土) 17:57:10>>259�d
もしできなかったらもう一度来ていい?
0261デフォルトの名無しさん
2006/08/26(土) 17:58:160262デフォルトの名無しさん
2006/08/26(土) 18:04:03void main()
{
printf( "好きなことを書きましょう" );
}
サイトに書いてあったやつでこんな感じでやったら
コンパイルのときエラーが返って来る
どこが違うかわかる?
0263デフォルトの名無しさん
2006/08/26(土) 18:05:30コンソールアプリをGUIから実行してるとかそういうこと?
コマンドライン立ち上げてコマンドから叩いて実行するとか、
テスト用bat書いて、実行後にpauseさせるとかって手もあるよ。
こっちなら王道っつーか、再コンパイルイラネーよ。
0264デフォルトの名無しさん
2006/08/26(土) 18:07:08俺がやってる環境書く
0265デフォルトの名無しさん
2006/08/26(土) 18:08:11printfの前の空白が全角スペースとか。
0266デフォルトの名無しさん
2006/08/26(土) 18:08:43と
Borlandの組み合わせでやってる
0267デフォルトの名無しさん
2006/08/26(土) 18:09:45�dエラー起きなかった
0268デフォルトの名無しさん
2006/08/26(土) 18:10:55void main()
{
printf( "好きなことを書きましょう" );
}
今こんな感じなんだが
一瞬しか出ない
どこに手を加えれば?
0269デフォルトの名無しさん
2006/08/26(土) 18:14:00長くコマンドプロンプトを表示するためには
0270デフォルトの名無しさん
2006/08/26(土) 18:19:39ダブルクリックして実行するのではなく、
コマンドプロンプトの中で実行させろ。
0271デフォルトの名無しさん
2006/08/26(土) 18:22:14おまいさん、もうちっと考えてから書き込んだ方が良いぞ。
あと、プログラミングってのは、自分だけでどれだけ調べて試行錯誤したか、で
先行きが決まると言っても良い。
あとは、Cを使うなら、IDE環境使わずにコマンドラインに慣れた方が、
いろいろと理解が深まるぞ。
ちなみに、getch()するなら、こんな感じ。
俺もbcc32使いなんで、bcc32で確認済み。
#include <stdio.h>
#include <conio.h>
void main()
{
printf( "好きなことを書きましょう" );
getch();
}
まぁがんがれ。
0272デフォルトの名無しさん
2006/08/26(土) 19:11:29返事遅れてすまん
ありが�d
がんがってみるよ
0273デフォルトの名無しさん
2006/08/26(土) 19:12:53コマンドプロンプトからの実行が前提のアプリなんざ
windowsでは受け入れられない現実
0274デフォルトの名無しさん
2006/08/26(土) 19:15:11っていれてもいれなくてもいいんですか?
0275デフォルトの名無しさん
2006/08/26(土) 19:18:01なので宣言が書かれているのヘッダファイルはincludeすべき
毎回面倒でPCスペックにも自身あるなら全てincliudeするようなヘッダファイル書いて毎回
使っても俺はいいと思う
0276デフォルトの名無しさん
2006/08/26(土) 19:21:09おkわかりました
0277デフォルトの名無しさん
2006/08/26(土) 21:27:14人に受けれられなくても、自分用ツールには十分さ。
0278デフォルトの名無しさん
2006/08/27(日) 00:45:49大学の講義で習ったのはそんなのばっかりだったな。
WindowsじゃなくてMacだったけど。
0279デフォルトの名無しさん
2006/08/27(日) 01:14:58まあ、本末転倒な上にスレ違いではあるが。
0280デフォルトの名無しさん
2006/08/27(日) 01:25:31プログラム末尾に
scanf("%s", &str);
って書けばいいんじゃない?
0281デフォルトの名無しさん
2006/08/27(日) 01:28:29getch()が簡単でいいだろう。
それだとstr用意する必要とかあるし。
0282デフォルトの名無しさん
2006/08/27(日) 02:23:45あれは面倒だな。
0283デフォルトの名無しさん
2006/08/27(日) 03:27:44何かキーを押すまで勝手に止まってくれるはず
0284デフォルトの名無しさん
2006/08/27(日) 10:02:24まあコンパイラがCUIなんだから、CUI使えないとあとで困るけどな。
0285デフォルトの名無しさん
2006/08/27(日) 10:07:100286266
2006/08/27(日) 18:43:22#include <conio.h>
void main()
{
int count;
for (count=0;count<4;count++)
{printf("countは今%dです。\n",count);}
if (count==4)
{printf("正解4でした。\n");}
else if (count==5)
{printf("正解は5でした。\n");}
else
{("4でも5でもありませんでした。\n");}
getch();
}
ifの文が反映されない。
0287286
2006/08/27(日) 18:46:38すいません。
0288デフォルトの名無しさん
2006/08/27(日) 18:55:150289デフォルトの名無しさん
2006/08/27(日) 20:10:06>>266 前後を見てみれば、自己解決出来てよかったなって感じになるぞ。w
少しは成長しているみたいだからな。w
>>286
書き込む前によく考えれば解る範囲だったってこったな。
だから俺が >271 で言ったろ?
もうちっと落ち着いて、考えてから書き込めって。w
0290デフォルトの名無しさん
2006/08/27(日) 20:34:020291デフォルトの名無しさん
2006/08/27(日) 20:46:160292デフォルトの名無しさん
2006/08/27(日) 20:53:100293デフォルトの名無しさん
2006/08/27(日) 21:21:17Cpad使って、明解C言語学習しようと思ってます。
Cpadでコンパイル?すると、以下のファイルが生成されます。
hello.cpp
hello.obj
hello.tds
hello.exe
各ファイルの説明お願いいたします。
ぐぐっても分からないでした。
しかもexe実行しようとダブルクリックしても
コマンドライン?がすぐ消えます。
make&実行できちんと表示されるのになぜでしょう?
0294266
2006/08/27(日) 21:59:490295デフォルトの名無しさん
2006/08/27(日) 22:15:49hello.cpp:あなたが書いたソースファイル。
hello.obj:コンパイラが生成した、CPUへの命令が入っているファイル。オブジェクトファイルという。これ単独では実行できない。
hello.tds:中間ファイルなので、無視してよい。
hello.exe:hello.objをごにょごにょして作られた実行可能なファイル。
>コマンドライン?がすぐ消えます。
exploreでダブルクリックして起動すると、まずcmd.exeが立ち上がり、その中でhello.exeが動く。
hello.exeが終了すると、cmd.exeも終わってしまうので、すぐに消えたように見える。
これはこういうものなので、まずcmd.exeを起動してから、コマンドラインでhello.exeを実行するがよろし。
0296デフォルトの名無しさん
2006/08/27(日) 22:27:050297デフォルトの名無しさん
2006/08/27(日) 22:33:42分かりやすい解説大変ありがとうございます。
コマンドラインから実行したらできました。感動です。
0298デフォルトの名無しさん
2006/08/27(日) 22:38:08>>1に入れとくといいかもしれん。
0299デフォルトの名無しさん
2006/08/31(木) 17:10:30#include <math.h>
#define PI 3.14159265358979323846264
void main(void)
{
double rad=0.0, deg=0.0; //角度
double m11=14.0, m20=14.0, m02=18.0; //モーメント変数
//慣性主軸の計算
rad = 0.5 * atan2(2 * m11, m20 - m02);
deg = rad * 180 / PI;
printf("慣性主軸θ=%f\n", deg);
}
答えが40.9になるはずなんですがどうしてもなりません。
どこがどう違うのか誰か教えてくれませんか。
お願いします。
0300デフォルトの名無しさん
2006/08/31(木) 17:58:490301デフォルトの名無しさん
2006/08/31(木) 20:03:080302デフォルトの名無しさん
2006/09/01(金) 00:13:11無知を晒さなくていいよ。
>>299
釣り?
40.9度になるところ何度になったかを書いてないから阿呆が沸いたじゃないか。
#しかも-40.9度だし。
マジレスしておくと、atan2()は引き数を象限を決めるために使われるので、
そのソースだと第二象限になるように角度が決定される。
つまり、atan(-7)は約-81度を返すがatan2(28, -4)は約+98度を返す。
従って、その半分を求めると-40.9度になるところが約49度になってしまっている。
m20 - m02がm02 - m20ならatan()でもatan2()でも第一象限だから等しく40.9度になるんだけどね。
0303デフォルトの名無しさん
2006/09/01(金) 02:40:38お返事頂きありがとうございました。
頑張ります。
0304デフォルトの名無しさん
2006/09/03(日) 12:38:01引数としてファイル名とファイルポインタを受け取り、
その入力ファイルにある処理を行ったものを出力ファイルに書き込む、
というプログラムを作っているのですが、
出力ファイル名を"out_ファイル名"とするためにstrcat関数を使って
strcat(outfile,name) //outfile="out_",nameは入力ファイル名
としてfopenで開こうとするとセグメンテーションエラーが起きてしまいます。
どうすれば出力ファイル名を"out_ファイル名"とすることができるでしょうか?
どなたか分かる方教えて下さい。お願いします。
0305デフォルトの名無しさん
2006/09/03(日) 12:40:00以下が作成中のコードです。
void vis(char *name,FILE *fin)
{
FILE *fout;
int c, i;
char buf[BUFSIZ], *outfile="out_";
strcat(outfile,name);
printf("%s\n",outfile);
if((fout=fopen(outfile,"w"))==NULL){
printf("cannot open file!\n");
}
do{
for(i=0; (c=getc(fin)) != EOF ;){
if(!isprint(c)){
fprintf(fout,"\\X%X",c);
break;
}
buf[i++]=c;
if(i >= BUFSIZ)
break;
}
if(i >= MINLEN)
fprintf(fout,"%.*s\n",i, buf);
}while (c != EOF);
fclose(fout);
}
0306デフォルトの名無しさん
2006/09/03(日) 13:01:35これだとoutfileのchar配列が out_\0 分しか確保されないから文字追加できないよ
char outfile[適当な長さ]; にして
strcpy( outfile, "out_" );
strcat( outfile, name );
とかにしてみれば?
0307デフォルトの名無しさん
2006/09/03(日) 13:07:30早速のアドバイスありがとうございます。
char *outfile="out_"
と宣言した時点でoutfileは5文字分以上は追加できないんですね。
すごく初歩的なミスでした。
ありがとうございました。
0308デフォルトの名無しさん
2006/09/03(日) 13:15:43Win32APIや.NET Frameworkを使って
「どのプロセス」が「どのファイル」に変更を加えたか(アクセスしたか)を
取得する方法はあるのでしょうか?
ReadDirectoryChangesWを使うことでファイルに変更が加えられたことは分かるのですが,
どのプロセスが変更を加えたかがわかりません.
どなたかご教授お願いします.
0309デフォルトの名無しさん
2006/09/03(日) 14:51:12多分フックしろって答えが返ってきそうだけど。
0310デフォルトの名無しさん
2006/09/03(日) 20:43:10vis関数(入力ファイル中の表示可能文字列のみを出力ファイルにコピーする関数)で、出力ファイルにコピーする際に指定した桁数で行を折り返して表示するオプションを付けたいのですがどうもうまくいきません。
以下のように変数jとWIDTHを追加してみたのですが指定したWIDTHの長さで折り返しされません。
表示する際にjがWIDTH以上になると改行を入力するようにしてみましたがこのやり方はよくないのでしょうか?
do{
for(i=0,j=0;(c=getc(fin)) != EOF ;){
if(!isprint(c)){
break;
}
buf[i++]=c;
if(i >= BUFSIZ)
break;
}
if(j >= WIDTH){ //ここからが変更した点です
fprintf(fout,"\n"); //j >= WIDTHなら改行
j=0; //j=0に初期化
}
else{
fprintf(fout,"%.*s\n",i, buf); //j < WIDTHなら表示
j++; //jをインクリメント
}
}while (c != EOF);
fclose(fout);
}
0311デフォルトの名無しさん
2006/09/03(日) 23:59:340312308
2006/09/04(月) 11:43:16ありがとうございます.行ってみます
0313デフォルトの名無しさん
2006/09/05(火) 00:36:53>>302
第二象限を求めているため答えが間違っている事はわかりました。
そこで質問なんですが、-40.9度にプログラムを修正したい場合は
どのようにしたらいいんでしょうか。
教えて下さい。
宜しくお願いします。
0314デフォルトの名無しさん
2006/09/05(火) 00:56:53atan2()をやめてatan()を使ったら?
#勿論、atan2()がやってくれるような例外処理は自前でやる必要があるけど。
0315デフォルトの名無しさん
2006/09/05(火) 03:15:59角度の範囲を 0°≦ θ ≦ 90° にするか
-90°≦ θ ≦ 0° にするかの違いだけじゃないの?
0316デフォルトの名無しさん
2006/09/05(火) 04:49:130317デフォルトの名無しさん
2006/09/05(火) 04:56:27-40.9°と 49.1°は両方とも慣性主軸っつー話では。
0318デフォルトの名無しさん
2006/09/07(木) 00:48:02関数change()で配列a[0]とb[0]のアドレスを交換してるのですが
main()の方に戻ってくるとアドレスが交換されていません。
関数の中で引数を変更したいときはポインタを使えばいいと思ったのですが
どうも使い方が違うようで正しい結果がでないです。
どうすればいいですか?
main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int b[10]={11,12,13,14,15,16,17,18,19,20};
int *u = a;
int *v = b;
int i;
change(u,v);
for(i=0; i<10; i++, u++, v++){
printf("a[%d]:%d ",i , *u);
printf("b[%d]:%d\n",i , *v);
}
}
void change(int *val1, int *val2){
int *temp;
temp = val1;
val1 = val2;
val2 = temp;
}
0319デフォルトの名無しさん
2006/09/07(木) 00:54:19>>161-
0320デフォルトの名無しさん
2006/09/07(木) 10:19:270321デフォルトの名無しさん
2006/09/07(木) 10:36:581弦でなくて?
0322デフォルトの名無しさん
2006/09/07(木) 12:39:05int* pt
memcpy(pt,strlen(゙hoge゙),sizeof(int))
でptに4を渡したいのですが…
一度適当な変数に退避させないと駄目ですか??
0323デフォルトの名無しさん
2006/09/07(木) 13:01:15*pt = strlen("hoge");
で駄目なのか?
0324デフォルトの名無しさん
2006/09/07(木) 14:44:43爪切れ
0325デフォルトの名無しさん
2006/09/07(木) 18:48:38あっ、そうですね。
何で気がつかなかったんだろう…
0326デフォルトの名無しさん
2006/09/07(木) 23:25:47あっ、そうですね。
何で気がつかなかったんだろう…
0327デフォルトの名無しさん
2006/09/08(金) 00:59:05やはり、外部変数あたりを使わなければそういうことは出来ないのですかねぇ〜?
0328デフォルトの名無しさん
2006/09/08(金) 01:22:190329デフォルトの名無しさん
2006/09/08(金) 02:22:15そこでstaticやらグローバルやら使い始めたら、大抵ドツボだぞ。
0330デフォルトの名無しさん
2006/09/08(金) 02:27:42構造体と引数を関数で渡して、
両方の値を更新して返したいのですけど、
その場合は具体的にどんな風にやれば出来ますか?
0331デフォルトの名無しさん
2006/09/08(金) 02:30:09{
pDest->Value = 0;
*pArg = 10;
}
とか。
片方は普通に返り値で返してもいいよ。
0332デフォルトの名無しさん
2006/09/08(金) 02:32:20最終的にそのアドレスに入っている数値を関数の中で更新すればいいわけですね?
なるほど、
これで再び暇プログラムに移れます
ありがとうございました
0333デフォルトの名無しさん
2006/09/08(金) 05:29:45ビーケーワン:明解C言語 新版
http://www.bk1.co.jp/product/2655216
でも買って勉強しろ。定番の本だ。
0334デフォルトの名無しさん
2006/09/08(金) 17:33:350335デフォルトの名無しさん
2006/09/09(土) 00:20:440336デフォルトの名無しさん
2006/09/09(土) 01:29:39本自体はそんなに悪くはないが、作者の自信と内容が全く釣り合っていない。
0337デフォルトの名無しさん
2006/09/09(土) 02:31:39自分が底脳なことに気がつかない人が読む本なのかな
あぶなないオーラまんさい
よーがー
0338デフォルトの名無しさん
2006/09/09(土) 02:46:100339デフォルトの名無しさん
2006/09/09(土) 02:49:37もう2ちゃんねらーなんでしょ?
信者も多いし。
0340デフォルトの名無しさん
2006/09/10(日) 14:24:41妙な粘着コラムを1ページ以上とか書いてた人だったっけ?
どっかで読んで引いた記憶が残ってる。
それだけ言っといてfalseをフェイルスとか呼ぶ人だったってオチが
ついたりしたら、大層面白いんだが。
0341デフォルトの名無しさん
2006/09/10(日) 17:50:09そうか?
0342デフォルトの名無しさん
2006/09/10(日) 23:04:440343デフォルトの名無しさん
2006/09/11(月) 02:08:030344デフォルトの名無しさん
2006/09/11(月) 04:43:35warning はウォーニングだという指摘を素直に受け入れられない奴も異常だな。
0345デフォルトの名無しさん
2006/09/11(月) 04:50:19ロケール/ロカールはロゥキャルだよな。
0346デフォルトの名無しさん
2006/09/11(月) 05:04:18ロケールにしてるんじゃないのか?
0347デフォルトの名無しさん
2006/09/11(月) 05:30:20この指摘を素直に受け入れられないとしたら、異常だよ。
0348デフォルトの名無しさん
2006/09/11(月) 05:42:370349デフォルトの名無しさん
2006/09/11(月) 05:51:20カタカナで書くと両方「ローカル」になって区別がつかない。
そのために後者を「ロケール」と書いて区別がつくようにしている。
化学の世界でも allyl と aryl が両方「アリル」になって区別がつかないから
後者を「アリール」と書くようにしている。
カタカナ語にはいろいろな制約と慣習があるから、
英語の発音通りになるとは限らない。
warning に関しては "war" は「ウォー」 "warm" は「ウォーム」 と書かれるし、
「ウォーニング」としたところで別に区別がつかない別の語があるわけでもないので、
「ウォーニング」にするのが妥当。
0350デフォルトの名無しさん
2006/09/11(月) 09:20:01VCで非Windowsってのがよくわからんのだが、
どんな環境想定してるのさ。
POSIXならsleep()があるし、Linuxならnanosleep()とかも使えるはず。
0351デフォルトの名無しさん
2006/09/11(月) 10:22:42かつ、ワーニングと言っている人がいても
キレたりいちいち注意したりして話を腰を折るようなまねをしないのが正解
0352デフォルトの名無しさん
2006/09/11(月) 10:34:570353デフォルトの名無しさん
2006/09/11(月) 10:49:37>local と locale は英語だと区別がつく発音だが、
>カタカナで書くと両方「ローカル」になって区別がつかない。
馬鹿じゃないの?カタカナで書けばロゥキャルだってば。
0354デフォルトの名無しさん
2006/09/11(月) 10:51:50ろーまじ読みして ろーかる ろーかれ
0355デフォルトの名無しさん
2006/09/11(月) 10:54:180356デフォルトの名無しさん
2006/09/11(月) 12:14:16VC を使ってのコマンドプロンプトでのプログラムです。 (Windows マシン上で)
Sleep() が使えないので悩んでいます。
0357デフォルトの名無しさん
2006/09/11(月) 12:25:370358デフォルトの名無しさん
2006/09/11(月) 12:32:28VCのコマンドラインプロジェクト って
・CRT0 のエントリが main()
・user32/GDI その他もろもろの WinAPI ライブラリ指定が デフォではずれる
ぐらいで、Win32プロジェクトとの差は無かったハズ
0359デフォルトの名無しさん
2006/09/11(月) 12:33:240360デフォルトの名無しさん
2006/09/11(月) 12:44:240361デフォルトの名無しさん
2006/09/12(火) 01:51:29長くてすみません、この{}について質問ですが
先ず最初の "{"intの左横の括弧は, 最後の"}"0;の右に掛かるのでしょうか?(括りに)
そしてifの左のの括弧はreturnの右に掛かるのでしょうか?(括り)
そしてprinftの左の括弧は、;}の右の括弧に掛かるのでしょうか?(括り)
たいへん解り辛くて、もしわけありません、何卒ご助言お願い致します。
この{}の括り方がいまいち解らず困っています。
0362デフォルトの名無しさん
2006/09/12(火) 01:58:00{
int y;
for(y = 1900; y <= 2000; y++)
{
if ((y%4 == 0 && y%100 != 0 )||y%400 == 0)
{
printf("%d\n", y);
}
}
return 0;
}
みたまんまや。
左右そろってるのが組になってる。
0363361
2006/09/12(火) 02:03:54main()
{
int y;
for(y = 1900; y <= 2000; y++)
{
if ((y%4 == 0 && y%100 != 0 )||y%400 == 0)
{
printf("%d\n", y);
}
}
return 0;
}
参考書にもそう書いてありますが
この{}の法則が解りません・・・
この"}"括りの方がです。
0364361
2006/09/12(火) 02:08:04{A-1{B-2{C-3}D-4}E-5}
0365361
2006/09/12(火) 02:12:36{A-1
{B-2
{C-3
}D-4
}E-5
}
こうではないんでしょうか?
0366デフォルトの名無しさん
2006/09/12(火) 02:14:13法則って…斜め上で悩んでるなぁ。w
>{A-1{B-2{C-3}D-4}E-5}
そそ。
開始された '{'は、必ず '}'によって閉じられる。
どっちか欠けるとエラーになるからね。
'{''}'で開始・終了される部分ってのは、意味上のブロック。
日本語で言う段落と言っても良い。
特に命令文によって開始されない '{''}'のくくりはまさにブロックという意味合い。
関数は必ず括られると覚えて良い。
if文やfor文も、続く処理の部分が複数行に渡るなら括る必要がある。
単文なら括らなくても良いって例外もあるが、原則括るつもりで居る方がベター。
ブロック化する意味は他にもあるが、基本的にこれだけ解っていれば先に進めるはず。
0367デフォルトの名無しさん
2006/09/12(火) 02:14:57main() は { から...
for() は { から...
if () は { から...
} まで if () を適用
} まで for() を適用
} まで main() を適用
0368366
2006/09/12(火) 02:16:12そうはならないな。
A-1がif文とするなら、
if ( expr ) {
…
}
であって、先頭に括弧が来ちゃったら
{ if(expr) {
}
}
こうなる。
if ( expr ) { }
この場合の括弧は、if文中の式が成立しないと実行されない。
0369361
2006/09/12(火) 02:30:54何か考えれば考える程、混乱してきましたorz
頭冷やしてきます、皆さんはこういうので迷いませんでしたか?
0370デフォルトの名無しさん
2006/09/12(火) 02:36:5320年もコード書いてきて、一度も迷ったことないな。w
文法で悩むなんて無意味な行為だ。
こう書かないと動作しないっていうsyntaxなレベルの話なんだから、
これは体で覚えてしまわないといけない範囲の話。
0371361
2006/09/12(火) 02:41:54他にも1904〜2000まで出力されるのが
括弧の{}の付け方で2001が出力出たりとか
もうやってて何が何だかわからなくなりました
マジレスシャワー浴びてきます。
0372デフォルトの名無しさん
2006/09/12(火) 03:17:240373デフォルトの名無しさん
2006/09/12(火) 04:26:500374デフォルトの名無しさん
2006/09/12(火) 04:39:360375デフォルトの名無しさん
2006/09/12(火) 09:00:55{ } の中が単文だから、なおさら不可解だ。
0376デフォルトの名無しさん
2006/09/12(火) 09:06:18main() {
for() { }
if { }
printf();
}
混乱の仕方が半端じゃないな。
数学の ( ) と同じようなものなのにね。
A * (1 + B * ( 1 + C * ( ) ) )
A -> main
B -> for
C -> if
0377デフォルトの名無しさん
2006/09/12(火) 18:51:160378デフォルトの名無しさん
2006/09/12(火) 19:03:06(main (…)
(for (…)
(…
…)
)
(if (…)
(printf(…))
)
)
0379デフォルトの名無しさん
2006/09/12(火) 19:07:280380デフォルトの名無しさん
2006/09/12(火) 19:57:350381361
2006/09/12(火) 20:14:36何回か読み返してみて何となく納得と言うか整理が多少できました。
でも、疑問も又浮かびました>>371で書いた通り
>>376さんの書いた様な文法にしたら(直ぐに括弧閉じ)
main() {
for() { }
if { }
printf();
}
エラーは起こらず2001が出力されました、何故上の様に
関数(){}の様に直ぐに括弧を閉じたらいけないのでしょうか?
入門書にもこう書かれています
main(){
処理
}
関数名1(){
関数の処理
}
関数2(){
関数の処理
}
と直ぐに括弧閉じになってます、たぶんこれが混乱の原因かと・・・
>>362さんみたいに最初に付けた括弧は最後に括るではないのでしょうか?
0382デフォルトの名無しさん
2006/09/12(火) 20:32:27括弧のくくる個所で、やりたいことの範囲を制御してるのさ。
# 改行位置やスペースの数は全く関係ないぞ。 念のため
for() { }
if () { }
printf();
廻りきってから(最終的に i=2001)
条件判断して(成り立ってもなにもせず)
iを表示
for() {
if () {
printf();
}
}
廻りながら (現在のiの値について)条件判断して 成立すれば iを表示
0383361
2006/09/12(火) 20:56:14解った様な解らない様なきがしますが
何となく謎が解けてきている感じがします
助言ありがとうです、皆さんすごい参考になります。
0384361
2006/09/12(火) 20:59:44逆に解らなくなって、すんまそ
初心者なのであまり余計な事は考えないように
してやっていきたいと思います。
0385デフォルトの名無しさん
2006/09/12(火) 22:28:45と出てしまうのですがどうすれば直るのでしょうか教えてください
0386デフォルトの名無しさん
2006/09/12(火) 22:38:560387デフォルトの名無しさん
2006/09/12(火) 22:49:28そいつはちゃんと環境とか書いてたしな。
ものわかりは悪かったけど。
0388デフォルトの名無しさん
2006/09/12(火) 22:50:12インクルードファイルが見えないんだろうから、
見えるようにコンパイラにオプション指定すればよい。
0389デフォルトの名無しさん
2006/09/12(火) 22:58:25スレしてくれた皆様有難う御座いました
0390デフォルトの名無しさん
2006/09/12(火) 23:05:41先生怒らないから正直に手を挙げなさーい
0391デフォルトの名無しさん
2006/09/13(水) 00:04:270392デフォルトの名無しさん
2006/09/13(水) 02:37:580393デフォルトの名無しさん
2006/09/13(水) 05:11:10いきなり応用に逝くから嵌る。最初は基本に忠実に一通りやってみればいいのに。
最初から答えを求めるアフォ並みの思考だよな。答えに到達する過程を養うのが重要なのに。
既知の答えを求めていたのでは、未知の問題への解決能力が育たない。
0394デフォルトの名無しさん
2006/09/13(水) 09:00:28馬鹿っていうなよwwwかわいそうだろwwwせめて
鹿くらいにしとけ
!
0395デフォルトの名無しさん
2006/09/14(木) 01:46:390396デフォルトの名無しさん
2006/09/14(木) 05:32:430397デフォルトの名無しさん
2006/09/14(木) 05:46:04カ゚ッ?
0398デフォルトの名無しさん
2006/09/16(土) 20:49:44#include <stdio.h>
main () {
int i = 5;
printf("数値: %d", 5);
return 0;
}
何故か , の後に5を入れるとエラーを起こしてしまいます。
, の後にiを入れれば成功しますが、i=5と宣言してありますが
何処に誤りがあるのでしょうか?
0399デフォルトの名無しさん
2006/09/16(土) 20:55:200400デフォルトの名無しさん
2006/09/16(土) 20:58:190401デフォルトの名無しさん
2006/09/16(土) 21:04:59だからエラーメッセージを晒してもらえばはっきりする。
0402デフォルトの名無しさん
2006/09/16(土) 21:05:28Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
0403デフォルトの名無しさん
2006/09/16(土) 21:06:470404デフォルトの名無しさん
2006/09/16(土) 21:08:51無視してやることも可能。
0405デフォルトの名無しさん
2006/09/16(土) 21:08:550406デフォルトの名無しさん
2006/09/16(土) 21:11:450407デフォルトの名無しさん
2006/09/16(土) 21:18:370408デフォルトの名無しさん
2006/09/16(土) 22:17:120409デフォルトの名無しさん
2006/09/16(土) 23:05:11いまいち、何故警告が出たかわかりません、あと無視してもいいでしょうか?
もし、“5”と言うか数字を代入した場合、どういう文法にすればいいか
ご示唆下されば、ありがたいです、宜しくお願い致します。
0410デフォルトの名無しさん
2006/09/16(土) 23:08:520411デフォルトの名無しさん
2006/09/16(土) 23:14:30警告に基本的に無視すべきではない。
そのプログラムに対して出た警告は読んで字の如く。
今回の解決法は、そもそも使わない変数を宣言しないこと。
#include <stdio.h>
main () {
printf("数値: %d", 5);
return 0;
}
0412デフォルトの名無しさん
2006/09/16(土) 23:19:00ありがとうございました、本にはこの事にいつては載ってなかったので
ネットで探していました、やっと解決しました。
0413デフォルトの名無しさん
2006/09/16(土) 23:31:14読んで理解して欲しいもんだ。
0414デフォルトの名無しさん
2006/09/16(土) 23:34:240415デフォルトの名無しさん
2006/09/17(日) 01:04:15#include <stdio.h>
main(){
int d2 = 123;
int d1 = 5;
float f = 0.0001;
char c = 'a';
char str[] = "abc";
printf("実数f %1.4f, 文字c %c 文字列str %s" ,f,c,str);
printf("%10d:%5s",d1,str);
printf("%010d",d2);
printf("Hello!\nWorld!");
return 0;
}
とやると
コマンドプロンプト画面
C:\source>1-File
実数f 0.0001, 文字c a 文字列str abc 5: abc0000000123Hello!
World!
と表示されてしまいます、“5: abc0000000123
Hello!
World!”
と〜123の下に改行したいのですが、どうすれば改行できるか悩んでいます
もしくは、、“5: abc0000000123”の下を改行してみたいです
どの様なソースを書けば良いかわかりません
ご助言お願い致します。
0416デフォルトの名無しさん
2006/09/17(日) 01:12:430417デフォルトの名無しさん
2006/09/17(日) 01:18:51ありがとうございました!!
あと、もう一つだけ質問があります
実数f 0.0001, 文字c a 文字列str abc 5: abc0000000123 Hello! World!と
↑
ここを一桝空けたい場合は
どうすればいいでしょうか?
0418デフォルトの名無しさん
2006/09/17(日) 01:21:550419デフォルトの名無しさん
2006/09/17(日) 01:31:34自分の言い方まちがっていました。
今まで通りだと、5: abc0000000123Hello!World! と
繋がってしまうので一個分スペース空けて
5: abc0000000123 Hello! World! のようにしたいです。
0420デフォルトの名無しさん
2006/09/17(日) 01:44:260421デフォルトの名無しさん
2006/09/17(日) 01:48:03これで先に進めます
0422デフォルトの名無しさん
2006/09/17(日) 02:58:53コマンドプロンプト画面で結果に3を出したいのですが
どうやっても結果が0しかでません、ソースの誤りを指摘お願い致します。
#include <stdio.h>
main(){
int player=0;
printf("【ジャンケンゲーム】\n");
printf("ジャンケン・・・(グー:1 チョキ:2 パー:3を入力))>");
scanf("プレイヤーは %d",&player);
printf("プレイヤーは %d", player);
return 0;
}
こうすれば、1,2,3のどれかが出るはずなんですが
0しか出ません。
0423デフォルトの名無しさん
2006/09/17(日) 03:05:460424デフォルトの名無しさん
2006/09/17(日) 03:09:02ありがとうございます。
自分もそうおもったのですが・・・
入門書だとint player=o; になっていて3になると・・・・
0425デフォルトの名無しさん
2006/09/17(日) 03:18:58何も入力しなきゃ、playerの初期値が表示されるのが当たり前。
0426デフォルトの名無しさん
2006/09/17(日) 03:19:490427デフォルトの名無しさん
2006/09/17(日) 03:35:37main(){
int player;
printf("【ジャンケンゲーム】\n");
printf("ジャンケン・・・(グー:1 チョキ:2 パー:3を入力))>");
scanf("%d",&player);
printf("プレイヤーは %d",player );
return 0;
}
こんな簡単な手直しに時間掛かった
樹海逝ってくる(´;ω;`)
0428デフォルトの名無しさん
2006/09/17(日) 03:45:09マジで俺も気が付かなかったんだ。ごめんな。
0429デフォルトの名無しさん
2006/09/17(日) 04:13:40scanf中の"プレイヤーは %d"は入力として、
プレイヤーは3
のように、まず「プレイヤーは」という文字列が入力され、
その後に0個以上の空白文字が入り、
その後に整数が来ることを期待して処理しようとする。
整数だけを入力すると「プレイヤーは」がないため、そこで処理を止めてしまう。
その場合、playerへの操作は行われないため、playerの値はscanf後も初期値の0になる。
playerへの操作が行われていればscanf("プレイヤーは %d",&player);は1(1個処理した意)を返すし、
行われなければ0を返すので、scanfが返す値をチェックすればうまくscanfが動いたかどうか分かる。
詳しいことはscanfのリファレンスを参照のこと。
>>422が本来やりたかったと思われることは>>427のように%dだけを与えればできる。
0430デフォルトの名無しさん
2006/09/17(日) 06:35:190431デフォルトの名無しさん
2006/09/17(日) 08:10:15コマンドプロンプトに「Hello World」と表示されるけど、
このコマンドプロンプトの「Hello World」を、
printf("Hellow World");のプログラムのcharのポインタとかに渡すことってできますか?
system("dir");とかで、コマンドプロンプと上に表示されたファイル名を取得したいのです。
0432デフォルトの名無しさん
2006/09/17(日) 08:19:180433デフォルトの名無しさん
2006/09/17(日) 08:24:33system関数では実行したコマンドの標準出力を呼び出した側で得ることはできないので、
"dir > tempfile"のように一時ファイルに結果を保存しておいて、
あとから一時ファイルを開いて結果を取り出す方法をとればいいと思う。
一時ファイルを作りたくないのなら、popen関数を使って、
popen("dir", "r")でdirの標準出力を得るファイルポインタを開ける。
0434デフォルトの名無しさん
2006/09/17(日) 08:27:47>>432
質問の最後の1行がなければ意味が分からなかった
0435431
2006/09/17(日) 08:32:04なるほどなるほど。
0436デフォルトの名無しさん
2006/09/17(日) 08:55:55なるほどエスパー振りには感心するけど、指導方針としては
どうだろう?
オレの見立てだと431はコマンドの出力を取りたいわけじゃなくて、
プログラムでファイルの一覧を見たいんじゃなかろうか?
0437デフォルトの名無しさん
2006/09/17(日) 09:41:49うーん
431は表示されるもの一般を取り込みたい、と取ったんだが。
それがHello Worldであれ、dirの出力であれ。
最初の4行が無かったら、436の言うようにファイルの一覧が欲しいと思ったかもしれない。
誤読してしまったかな?
>>431
もし、ファイルの一覧が欲しいなら、opendir,readdir,closedir関数を使えば、
コマンド呼び出しに頼らずにできる。
例えば、カレントディレクトリのファイル名の一覧を表示するなら、
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
void main(void)
{
DIR *dir = opendir(".");
struct dirent *dp;
while ((dp = readdir(dir)) != NULL) {
printf("%s\n", dp->d_name);
}
closedir(dir);
}
Windows限定の方法もあるが、こちらの方が可搬性はあると思う。
0438デフォルトの名無しさん
2006/09/17(日) 09:55:20で、確か、opendir系はMS系(VC++等)には無かったような。
0439431
2006/09/17(日) 10:01:56説明が下手でごめんなさい……。
ファイル一覧を取り込む方法を知りたくて、
コマンドを利用して一覧を得るというアホな方法だけを考えてしまったんです。
>>437
2度も考えさせてしまって申し訳ない。
こちらのが単独で使えて良いっぽいですね。
ありがとう!
0441デフォルトの名無しさん
2006/09/17(日) 10:24:03俺が誤読しちゃったのね。
説明の取り違えなんてよくあること、気にしない気にしない。
>>438
POSIX準拠の関数だからといってあるとは限らないのか……
Windows APIを使って437と同じことをしたいときは、こんな感じ?
#include <stdio.h>
#include <windows.h>
void main(void)
{
WIN32_FIND_DATA fd;
HANDLE h = FindFirstFileEx("*", FindExInfoStandard, &fd, FindExSearchNameMatch, NULL, 0);
do {
printf("%s\n", fd.cFileName);
} while (FindNextFile(h, &fd));
FindClose(h);
}
0442デフォルトの名無しさん
2006/09/17(日) 10:31:350443デフォルトの名無しさん
2006/09/17(日) 12:42:340444デフォルトの名無しさん
2006/09/17(日) 13:37:14gccはデフォルトでしっかり怒ってくれる。
0445デフォルトの名無しさん
2006/09/17(日) 16:14:14文字コードも環境によるし。
0446デフォルトの名無しさん
2006/09/17(日) 16:16:18その場合、末尾の}に着いたところでreturn 0;があると扱われる。
0447デフォルトの名無しさん
2006/09/18(月) 02:01:34書いてみたんですが、コンパイルで警告がでてしまいます。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/*class*/
typedef struct Car{
/*field*/
/*略*/
/*public method*/
void (*show)(struct Car *);
void (*repaint)(struct Car *, enum Color);
}Car;
/*implementation*/
Car_showImpl(struct Car *car)
{
/*略*/
}
Car_repaintImpl(struct Car * car, enum Color color)
{
/*略*/
}
0448デフォルトの名無しさん
2006/09/18(月) 02:03:09{
Car *car = malloc(sizeof(Car));
/*略*/
/*メソッドの登録*/
car->show = Car_showImpl; /*この二行に警告が出る*/
car->repaint = Car_repaintImpl;
}
void delete_Car(Car *car)
{
free(car);
}
int main(int argc, char *argv)
{
Car *car;
enum Color color=black;
car = new_Car("Honda Fit",1234,30.0);
car->show(car);
car->repaint(car,color);
car->show(car);
}
0449デフォルトの名無しさん
2006/09/18(月) 02:04:16$ gcc -o test5 test5.c
test5.c: In function ‘new_Car’:
test5.c:98: 警告: assignment from incompatible pointer type
test5.c:99: 警告: assignment from incompatible pointer type
処理系:Linux gcc 4.1.1
関数ポインタの型が違うから警告が出てるようなのですが、ソースを見る
限り型は一致しているように見えます。実行は見た目、正常に行われるんですが
、できる限り警告は取り除きたいものです。もし警告の原因をご存じの方がいら
っしゃいましたら、ご意見を下さい。
0450デフォルトの名無しさん
2006/09/18(月) 02:41:57あと、そのやり方では、メソッドの呼出がC++のメンバ関数の呼出と同じ見た目になるけど、
メモリの使い方に無駄ができるから個人的にはお勧めできない。
0451449
2006/09/18(月) 03:11:22すいません。voidを付けるのを見落としていました...orz
car->show(car);
ではなく
Car_show(car);
みたいに記述する方が確かに、オブジェクトのサイズが小さくなりますね。
CでC++っぽい書き方をすると面白いかなみたいな勢いで作っていました。
疑問が解決したので、ありがとうございました。
0452fusian
2006/09/18(月) 10:11:39void main()
{
printf( "%c" , 0xC1 );printf( "%c" , 0xDD );printf( "%c" , 0xCE );printf( "%c" , 0xDF );
}
0453デフォルトの名無しさん
2006/09/18(月) 10:32:27getc=char, getw=16bit,get?=32bit
みたいな。
0454デフォルトの名無しさん
2006/09/18(月) 10:47:20非標準なら、getw()はある。MS系(DOS系?)ライブラリにはしばしば収録されている。
まぁ、fread()使えば事が足りるから普通は必要ないな。
0455デフォルトの名無しさん
2006/09/18(月) 11:56:11バッファの中身を見ても数値が入ってないんです。どうして?
0456デフォルトの名無しさん
2006/09/18(月) 12:03:08世界中のプログラマが使ってるライブラリの関数だし、それが間違っ
てることはまず無いから。
0457デフォルトの名無しさん
2006/09/18(月) 12:24:250458デフォルトの名無しさん
2006/09/18(月) 12:42:500459デフォルトの名無しさん
2006/09/18(月) 18:34:26ライブラリやコンパイラを疑う前に自分のコードを疑った方がいいのは確か。
0460デフォルトの名無しさん
2006/09/18(月) 19:28:52書いたソース張れば? 該当部分なんて数行だろ。
見れば何が悪いのか誰か教えてくれるよ。
0461デフォルトの名無しさん
2006/09/18(月) 21:24:170462デフォルトの名無しさん
2006/09/19(火) 02:43:460463デフォルトの名無しさん
2006/09/19(火) 03:00:120464デフォルトの名無しさん
2006/09/19(火) 03:18:560465デフォルトの名無しさん
2006/09/19(火) 07:37:31int i;
fread(&i, sizeof int, 1, fp);
だな。
0466デフォルトの名無しさん
2006/09/20(水) 02:23:00C:\aaa>bcc32 bbb12-2.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
bbb12-2.c:
エラー E2040 bbb12-2.c 3: 宣言が正しく終了していない
*** 1 errors in Compile ***
#include <stdio.h>
switch(computer){
case1: printf("グー");
break;
case2: printf("チョキ");
break;
case3: printf("パー");
break;
default: break;
return 0;
}
最後に閉じてありますが、こう表示されてしまいます。
0467デフォルトの名無しさん
2006/09/20(水) 02:27:19main()の中に書いてない。
0468デフォルトの名無しさん
2006/09/20(水) 02:32:09ご教授、ありがとうございます。
#include <stdio.h>
main(){
switch(computer){
case1: printf("グー");
break;
case2: printf("チョキ");
break;
case3: printf("パー");
break;
default: break;
}
return 0;
}
このように書いても、次はこうエラーが出てしまいます。
C:\aaa>bcc32 bbb12-2.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
bbb12-2.c:
エラー E2451 bbb12-2.c 4: 未定義のシンボル computer(関数 main )
*** 1 errors in Compile ***
0469デフォルトの名無しさん
2006/09/20(水) 02:39:11computerという変数を宣言・定義してないから。
0470デフォルトの名無しさん
2006/09/20(水) 02:47:47やはりエラーが出てしまいます。
#include <stdio.h>
main(){
int = computer;
switch(computer){
case1: printf("グー");
break;
case2: printf("チョキ");
break;
case3: printf("パー");
break;
default: break;
}
return 0;
}
C:\aaa>bcc32 bbb12-2.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
bbb12-2.c:
エラー E2040 bbb12-2.c 4: 宣言が正しく終了していない(関数 main )
エラー E2451 bbb12-2.c 6: 未定義のシンボル computer(関数 main )
*** 2 errors in Compile ***
どうしても、わからないので、訂正ソースを書いて戴ければ幸いです。。。。
0471デフォルトの名無しさん
2006/09/20(水) 02:51:06main(){
int computer = 1;
switch(computer){
case1: printf("グー");
break;
case2: printf("チョキ");
break;
case3: printf("パー");
break;
default: break;
}
return 0;
}
つーかcomputerはどっから出てきたんだ。
0472デフォルトの名無しさん
2006/09/20(水) 03:02:44computerは型の名前ですから書きました。
何故 int computer = 1; だけではいけないのでしょうか?
最初に int を宣言してますね・・・>>471さんの訂正文だと。
実行すると必ずグーしかでなのですが、グー以外はでないのでしょうか?
質問ばかりで、すみません。
0473デフォルトの名無しさん
2006/09/20(水) 03:08:41まず
int computer;
は、int型の変数を宣言している。
変数名はcomputer。
これで以降intの入れ物の名前としてcomputerが使用可能になる。
int computer = 1;
で、宣言と同時に1を代入している。
これでcomputerの中身は1が入ってることになる。
int computer;
computer = 1;
でもいい。
この場合は宣言と代入の手続きが分かれてることになる。
0474デフォルトの名無しさん
2006/09/20(水) 03:13:52switch()は、与えられた値に対応したcase以下の命令を実行する文。
ここではcomputerの中身は1だから、case1の直下にある
printf("グー");
break;
が実行されることになる。
breakでswitchからは抜けて、return 0;でmain()からも抜けて、プログラム終了。
グー以外が欲しいなら、
computer = 2;
ないしは
computer = 3;
を入れる必要がある。
=2ならcase2:に対応したチョキが、
=3ならcase3:に対応したパーが出るだろう。
試してみると良い。
ラスト、もしコンピュータにグーチョキパーのいずれかをデタラメに出させたいなら、
乱数という概念を覚える必要がある。読んで字のまま、呼び出すたびにデタラメな数を返してよこす
関数が、C言語にはある。
computer = (((unsigned int)rand()) % 3) + 1;
理屈はわからなくていいので、とりあえずやってみて欲しい。
グーチョキパー、少なくとも直接代入した覚えのないものが出るかもしれない。
0475デフォルトの名無しさん
2006/09/20(水) 03:19:19夜分、遅く変な質問してすみませんですた。
0476デフォルトの名無しさん
2006/09/20(水) 03:20:56rand() でコンパイルエラーが出るなら、ソースの先頭に
#include <math.h>
を追加すること。
また、何度実行しても同じ結果(グーチョキパーのうちの同じ手)が返ってきて、
不思議に思うかもしれない。
これはrand()が寄越すのは実は乱数っぽいだけの規則性のある数字でしかないからで、
これをちゃんとした乱数っぽく使うためには、少し工夫が必要になる。
rand()を呼び出す前に、
srand(100);
というおまじないを入れてみて欲しい。
多分結果が変わるはずだ(三分の一の確率で変わらないかもしれないが)。
srand()はrand()が作る乱数のタネとなる値を与える関数で、ここにある程度
デタラメな値を最初に与えることで、rand()がそれなりに信用できる乱数を返せる様になる。
これが本当に最後。
ソース先頭に
#include <time.h>
を追加して、rand()の前のsrand()を
srand((unsigned int)time(NULL));
にして欲しい。
実行した時の時間を乱数のタネとすることで、実行するたびに異なる手を出すじゃんけんプログラムになる。
こんなとこでどうだろか。
0477デフォルトの名無しさん
2006/09/20(水) 03:34:13rand()を使えば適当な数字がでます、そこで% 3) + 1; を使う
ですが、同じ数字しかでない?から時間をずらす time を使うって
大まか解釈して宜しいでしょうか?
srand(100); この括弧内の100が解らないのですが、取り敢えずやってみます。
0478デフォルトの名無しさん
2006/09/20(水) 03:59:44これは俺が適当に入れた、完全に適当な値。
10でも100でも1000でも119でもなんでもいい。
ただ、それらのデタラメな値でも、毎回同じ値を入れてると、
次に取り出される値もやっぱり同じ値になる。
timeを使ったのは、起動時の時間の端数は概ねバラついているもので、
乱数のタネとして使いやすいから。
実際、起動するたびに違う答えを返すようになったと思う。
それを期待したわけだと。
0479デフォルトの名無しさん
2006/09/20(水) 04:01:220480デフォルトの名無しさん
2006/09/20(水) 04:12:010481デフォルトの名無しさん
2006/09/20(水) 04:57:45才能無いから辞めたほうがいいんでないか?
0482デフォルトの名無しさん
2006/09/20(水) 05:15:150483デフォルトの名無しさん
2006/09/20(水) 05:24:270484デフォルトの名無しさん
2006/09/20(水) 06:26:430485デフォルトの名無しさん
2006/09/20(水) 07:43:520486デフォルトの名無しさん
2006/09/20(水) 07:50:53文字列をprintf関数で、画面に出力することは
出来るんでしょうか?
具体的に説明すると、scanf("%d",&s);となっているところに
文字列をキーボードから入力したとして
変数sに代入されなかったその文字列を、表示できるのか?
ということです。
くだらない質問だとは思いますが、どなたか教えて下されば
幸いです。
0487デフォルトの名無しさん
2006/09/20(水) 09:31:430488デフォルトの名無しさん
2006/09/20(水) 09:32:34#include <stdio.h>
int main(void)
{
int s;
char x[100];
int n;
n = scanf("%d", &s);
if (n == 1) {
printf("success:%d\n", s);
} else if (n != EOF) {
scanf("%99s", x);
printf("failed:%s\n", x);
} else {
printf("no input\n");
}
return 0;
}
さらに入力が残っているときはそのまま。
0489デフォルトの名無しさん
2006/09/20(水) 14:01:44以下のソースをコンパイルして実行に移したのですが、
画面に表示される月収の値だけ、まともに出てきません。
どうしたら、ちゃんと計算してくれるのでしょうか?
どうか、ご教授願います。
#define NITTOU 10130
#define MONTH 30
#include<stdio.h>
int main( int argc, char* argv[])
{
int a, b, c, d, e;
a = 8000;
printf( "日当は%d円です\n", a);
b = 1730;
printf( "交通費は%d円です\n",b );
c = a + b;
printf( "合計%d円です\n",c );
d = (a * 0.05) + a + b;
printf( "消費税含め日当は%d円です\n", d );
e = d * MONTH;
printf( "月収は%d円です\n", e );
return 0;
}
0490デフォルトの名無しさん
2006/09/20(水) 14:35:29期待してるのはどういう金額で、実行するとなんて表示されるの?
0491489
2006/09/20(水) 14:58:36レスありがとうございます。
実行すると以下の分が表示されます。
日当は8000円です。
交通費は1730円です。
合計9730円です。
消費税含め日当は10130円です。
月収は-23780円です。 ← ここがおかしい
以上
月収の期待値は、303900円と欲しいんですが、
-23780円となってしまいます。
どこがおかしいか指摘してください。お願いします。
0492デフォルトの名無しさん
2006/09/20(水) 15:08:26たぶん、intが2バイトの処理系
だから、303900はオーバーフローして、-23780になる
ためしに、short=2バイトの処理系で、
そのプログラムをint→shortにしてコンパイル、実行したら、その結果になった
0493デフォルトの名無しさん
2006/09/20(水) 15:08:41俺の環境じゃなんねーよ?
コピペそのままでbcc32でコンパイルしたけど。
C:\c\てすつ>test00
日当は8000円です
交通費は1730円です
合計9730円です
消費税含め日当は10130円です
月収は303900円です
0494デフォルトの名無しさん
2006/09/20(水) 15:26:45sizeof(long)の値を見てみて2より大きいようなら、
intをlongに変更すれば幸せになれるかもしれん。
0495489
2006/09/20(水) 16:23:02>>492
>>493
>>494
ご指摘ありがとうございます。
ご指摘どおり、データ型をintからlongまたはshortへ変更し、
それぞれ試したんですが、実行結果は変わりませんでした orz
ちなみに8バイト処理(私が知る限り最高の数値)
のdoubleも試した結果、何故かすべての戻り値が0に
返されました。
ちなみに今、使用しているコンパイラは LSI C-86 ver3.30試食版です。
コンピュータの融通の利かなさに、ほとほと困り果てています。
0496デフォルトの名無しさん
2006/09/20(水) 17:14:11LSI C-86試食版は16ビットコンパイラでいろいろ制限が多いから、
もし導入に問題が無いならBCCとかに移行したほうがいいかも。
16ビット環境なんだったら仕方ないが。
でも、LSI C-86でもlongのサイズは4バイトだった気がするけど。確認していないが。
あと、doubleを試して全部0になったのは、
たぶんprintfの書式指定を%dのままにしているからのような気がする。
0497デフォルトの名無しさん
2006/09/20(水) 17:40:27doubleで0が出るのはここの一番下が原因なのかもしれない。
-lmathlibを指定していないときのsoubleの表示がどうなるのか分からないが。
0498デフォルトの名無しさん
2006/09/20(水) 17:53:1316ビットでやりたいなら
ttp://bdn.borland.com/museum/
ここにある TurboC の方が良くね?
0499489
2006/09/20(水) 19:27:49まだ、解決には至ってませんが、なんとかがんばろうと思います。
また、機会があればご教授ください。
たくさんのご意見、ご指摘ありがとうございました。
0500489
2006/09/20(水) 19:40:21>>496さんのおっしゃるとおり、書式指定が間違っていたようですorz
かなりうれしいです!ありがとうございました!!
0501デフォルトの名無しさん
2006/09/20(水) 20:10:35ってやるのって何か馬鹿っぽくね?
普通に srand(rand()); ってやったほうが簡単じゃね?
0502デフォルトの名無しさん
2006/09/20(水) 20:29:12C言語以外の事で悩むことが多くて、結局Quick-C買ったな。
今はネットで情報探せるから、多少ましになってるかもしれんが。
>>501
srand無しでのrand()は、常に同じシーケンスの値を返す可能性がある。
よって、srand(rand())した後のrand()も同じシーケンスの値を返す可能性がある。
……srandのseedに同じ値を渡したとき、同じシーケンスを生成って保証されていたっけ?
0503デフォルトの名無しさん
2006/09/20(水) 20:34:58それでは無意味。
srand(rand());とすると、内側のrandの呼出時にはまだsrandが呼ばれていない。
srandが1度も呼び出されないままrandが呼ばれるた場合、
randは、予めsrand(1)を行っていた場合と同じ値を返すようにならなければならないと定められている。
だから内側のrandは結局毎回同じ値を返すことになるので、
それではsrandに定数を与えて乱数列を初期化するのと同じことになってしまう。
0504デフォルトの名無しさん
2006/09/20(水) 21:04:360505デフォルトの名無しさん
2006/09/20(水) 21:42:13とあるプログラムを書いているのですが
メモリ使用量が増え続けるのです。
動的変数は使っていません。
考えられる原因を教えてください。
0506デフォルトの名無しさん
2006/09/20(水) 21:44:470507デフォルトの名無しさん
2006/09/20(水) 21:50:100508デフォルトの名無しさん
2006/09/20(水) 21:52:19ほんとか?
0509デフォルトの名無しさん
2006/09/20(水) 21:56:55外部変数と自動変数しか使っていないのですが
0510デフォルトの名無しさん
2006/09/20(水) 22:00:060511デフォルトの名無しさん
2006/09/20(水) 22:05:57現象が再現されるぎりぎりまでコードを絞ったら
何か分かるんじゃないか?
0512デフォルトの名無しさん
2006/09/20(水) 22:07:12今作っているプログラムを起動するとメモリ使用量が増えます。
0513デフォルトの名無しさん
2006/09/20(水) 22:12:260514デフォルトの名無しさん
2006/09/20(水) 22:13:22どのモードでも使用率が増えてしまいます
0515デフォルトの名無しさん
2006/09/20(水) 22:15:33まだ増え続けていたんですがそこで終了しました
0516デフォルトの名無しさん
2006/09/20(水) 22:17:15エスパー期待するにしてもせめてもう少し解るように書いてくれよ。
0517デフォルトの名無しさん
2006/09/20(水) 22:20:060518デフォルトの名無しさん
2006/09/20(水) 22:24:00While文でエラーが出るまでまわしてますけど・・・
0519デフォルトの名無しさん
2006/09/20(水) 22:28:02http://game9.2ch.net/test/read.cgi/quiz/1153486251/
★ウミガメのスープ★@クイズ・雑学板 ★雑談スレ2
http://game9.2ch.net/test/read.cgi/quiz/1113148299/
0520デフォルトの名無しさん
2006/09/20(水) 22:30:59�@そもそも何のゲームなのか?
�Aモードとは?
0521デフォルトの名無しさん
2006/09/20(水) 22:32:430522デフォルトの名無しさん
2006/09/20(水) 22:36:15今作っているEXEファイルがあります。
そのEXEファイルを起動し、タスクマネージャーでプロセスを見るとメモリ使用率が1〜6MB/sの速さで増えます。
EXEファイルは音ゲーです。
TITLE・MAIN・ENDを1・2・3の定数にして別に変数xを用意し
switch(x){
case TITLE:
*************
break;
case MAIN:
*************
break;
case END:
*************
break;
}
のようになっています
0523デフォルトの名無しさん
2006/09/20(水) 22:36:490524デフォルトの名無しさん
2006/09/20(水) 22:39:410525デフォルトの名無しさん
2006/09/20(水) 22:41:01まだCをはじめたばかりなので存在を知りませんでした。
0526デフォルトの名無しさん
2006/09/20(水) 22:43:000527デフォルトの名無しさん
2006/09/20(水) 22:44:200528デフォルトの名無しさん
2006/09/20(水) 22:47:26開放ルーチン呼んでないんじゃないのか?
それにしても、はじめたばかりでexeが1.2MBってのはでかいな。
何かあるのかもね
0529デフォルトの名無しさん
2006/09/20(水) 22:58:06メモリ確保はint/char/float/stringで変数を宣言したくらいです。
構造体変数 abc があるんですけどそれが配列でabc[1000]にしてあります。
ほかにchar efg[100][30];などもあるんですけど原因はここら辺でしょうか?
0530デフォルトの名無しさん
2006/09/20(水) 23:05:35delete無しでnewしまくり、とか。
0531デフォルトの名無しさん
2006/09/20(水) 23:14:070532デフォルトの名無しさん
2006/09/20(水) 23:16:06stringがある時点で本当にC言語か?
0533デフォルトの名無しさん
2006/09/20(水) 23:16:490534デフォルトの名無しさん
2006/09/20(水) 23:17:310535デフォルトの名無しさん
2006/09/20(水) 23:18:59音を鳴らすのはDXライブラリのPlaySoundMemを使っています
0536デフォルトの名無しさん
2006/09/20(水) 23:19:460537デフォルトの名無しさん
2006/09/20(水) 23:20:500538デフォルトの名無しさん
2006/09/20(水) 23:22:010539デフォルトの名無しさん
2006/09/20(水) 23:24:35C++で何かのライブラリ使ってんの?
いずれにせよここで聞いてても答えは分らないと思うよ。
基本的な文法ミスとかじゃなくて、組み上げる上でのスキルが
そもそも足りてない感じだから。
いきなり1.2MBなんてでかいプログラムじゃなくて、
Hello Worldからやり直した方が吉
0540デフォルトの名無しさん
2006/09/20(水) 23:24:590541デフォルトの名無しさん
2006/09/20(水) 23:27:08言ってるの。走る前にしっかり歩けるように勉強した方がいい。
0542デフォルトの名無しさん
2006/09/20(水) 23:28:310543デフォルトの名無しさん
2006/09/20(水) 23:34:050544デフォルトの名無しさん
2006/09/20(水) 23:37:400545デフォルトの名無しさん
2006/09/20(水) 23:38:320546デフォルトの名無しさん
2006/09/20(水) 23:43:43このレベルか?
ttp://www.nhk.or.jp/rika3/ja/frame.html
0547デフォルトの名無しさん
2006/09/21(木) 00:05:050548デフォルトの名無しさん
2006/09/21(木) 00:07:360549デフォルトの名無しさん
2006/09/21(木) 00:09:240550デフォルトの名無しさん
2006/09/21(木) 00:10:370551デフォルトの名無しさん
2006/09/21(木) 00:29:470552デフォルトの名無しさん
2006/09/21(木) 00:30:50スコープを抜けても自動変数が破棄されなかったのでやむを得ずすべてグローバル変数にしました。
0553デフォルトの名無しさん
2006/09/21(木) 00:47:54そんなのグローバル変数を使う止むを得ない理由にはならんぞ
0554デフォルトの名無しさん
2006/09/21(木) 00:52:110555デフォルトの名無しさん
2006/09/21(木) 00:53:44そしてグローバル変数にすれば問題なくなるとは如何に。
0556デフォルトの名無しさん
2006/09/21(木) 00:56:47{
char *p = malloc(1024);
}
0557デフォルトの名無しさん
2006/09/21(木) 00:57:210558デフォルトの名無しさん
2006/09/21(木) 00:58:25何日動くか耐久ベンチやろうぜ(w
0559デフォルトの名無しさん
2006/09/21(木) 00:59:08スコープ内で割り当てた自動変数から辿れる領域が
そのままになってるんじゃないのか?
0560デフォルトの名無しさん
2006/09/21(木) 00:59:30int foo()
{
char *p = malloc(1024);
}
でさえついていけなくなりました
0561デフォルトの名無しさん
2006/09/21(木) 01:01:32何か必要でしょうか?
0562デフォルトの名無しさん
2006/09/21(木) 01:02:52void main (void)
{
int year;
printf("how old are you?\n");
scanf("%d",&year);
switch {
case1: year<30
printf("you are young");
break;
case2: year>=30&&year<60
printf("chuunenn.");
break;
case2: year>=59&&year<100
printf("otoshiyori.");
break;
default: year>=100
printf("you are lying! aren't you??!!.\n");
}
printf("The program end.Thank you for answer.\n")
}
0563デフォルトの名無しさん
2006/09/21(木) 01:02:550564デフォルトの名無しさん
2006/09/21(木) 01:04:370565デフォルトの名無しさん
2006/09/21(木) 01:06:51開放ルーチンが必要なことがよくわかりました
ありがとうございました
0566デフォルトの名無しさん
2006/09/21(木) 01:07:00あんたに必要なのはCの制御構文の再勉強だ
switch文はそんな書き方はしないし、
たぶんやりたいことはswitch文でなく、
if...else if...elseでできる。
0567デフォルトの名無しさん
2006/09/21(木) 01:07:44ω
0568デフォルトの名無しさん
2006/09/21(木) 01:08:27萎え
0569デフォルトの名無しさん
2006/09/21(木) 04:08:19( ) ゛
゛/ω\
__[警]
( ) ('A`) !?
( )Vノ )
| | | |
0570デフォルトの名無しさん
2006/09/21(木) 06:13:19⌒`γ´⌒`ヽ( E) グッジョブ
( .人 .人 γ ノ
ミ(こノこノ `ー´
)にノこ(
0571デフォルトの名無しさん
2006/09/21(木) 17:08:190572デフォルトの名無しさん
2006/09/21(木) 17:30:35VC++とBccとLSI-C全て試したのですが、できませんでした。
config.ntファイルも編集したのですが、動きませんでした。
私の環境ではエスケープシーケンスを使うのは無理なのでしょうか?
0573デフォルトの名無しさん
2006/09/21(木) 17:37:01ansi.sys入れてもだめか。
0574デフォルトの名無しさん
2006/09/21(木) 17:38:48諦めろ。NT系ではエスケープシーケンスを使うのは限りなく無理。
勿論代わりの方法がWindows APIに関数として用意されている。
ttp://www.kumei.ne.jp/c_lang/intro/no_58.htm
0575572
2006/09/21(木) 17:43:05本に従って、config.ntファイルに
device=%SystemRoot%\system32\ansi.sys
dosonly
を追加したんですが、
printf("\x1B[2J"); を試してみたら、
変な記号が出ただけでした…
0576デフォルトの名無しさん
2006/09/21(木) 17:47:17LSI-Cでやったか?
NTでansi.sysのエスケープシーケンスが使えるのは、
16bit DOSアプリケーションだけだぞ。
0577デフォルトの名無しさん
2006/09/21(木) 17:50:430578デフォルトの名無しさん
2006/09/21(木) 17:52:44LSI-Cでもやったのですが、
←[2J と出ただけでした(泣)
0579デフォルトの名無しさん
2006/09/21(木) 17:54:15画面制御が簡単に使えるからとりあえずそっち使っとけば?
conio.h 読めばすぐ解るよ。
0580デフォルトの名無しさん
2006/09/21(木) 19:09:35>>579の方法なら、
ESC[2J(画面消去)はclrscr()で一発
0581572
2006/09/21(木) 22:02:47画面消去はsystem("cls")で対応していたのですが、
今読んでいる本でエスケープシーケンスが多用されていたので…
0582デフォルトの名無しさん
2006/09/22(金) 00:11:34#include <time.h>
#include <stdlib.h>
main(){
int player = 0, computer;
srand(time(NULL));
printf("【ジャンケンゲーム】\n");
printf("ジャンケンゲーム・・・(グー:1 チョキ:2 パー:3を入力) > ");
scanf("%d", &player);
computer = rand()%3 + 1;
printf("コンピュターは");
if(computer == 1) {printf("グー");}
else if(computer = 2) {printf("チョキ");}
else {printf("パー");}
printf("! ");
if(computer == player){printf("あいこ\n");}
else if(player == 1 && computer == 2) {printf("プレイヤーの勝ち\n");}
else if(player == 2 && computer == 3) {printf("プレイヤーの勝ち\n");}
else if(player == 3 && computer == 1) {printf("プレイヤーの勝ち\n");}
return 0;
}
0583デフォルトの名無しさん
2006/09/22(金) 00:12:200584デフォルトの名無しさん
2006/09/22(金) 00:13:26Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
janken.c:
警告 W8060 janken.c 23: おそらく不正な代入(関数 main )
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
と警告が表示されますが無視して、実行しても構わないのでしょうか?
もし、違っている部分が有れば、どの箇所に誤りがあるか、ご指摘頂けると幸いです。
0585デフォルトの名無しさん
2006/09/22(金) 00:13:590586デフォルトの名無しさん
2006/09/22(金) 00:15:12警告文は読める?
0587デフォルトの名無しさん
2006/09/22(金) 00:19:25何が違っているのかわかりません。
本の通りにやっていrのですが・・・
0588デフォルトの名無しさん
2006/09/22(金) 00:21:31もう一度一文字ずつよく見ろカスが
0589デフォルトの名無しさん
2006/09/22(金) 00:23:37自分の不注意でした。
0590デフォルトの名無しさん
2006/09/22(金) 00:35:11まずはあれだ、警告文を良く見る癖をつけようぜ。
「代入」って単語について1秒でも気をつけれていればすぐに解決するはず。
0591デフォルトの名無しさん
2006/09/22(金) 00:55:550592デフォルトの名無しさん
2006/09/22(金) 12:20:39#define PI 3.141592654
sin(PI);の値に0が出てこないのですがパソコンが壊れているのでしょうか?
もしよろしければ解決方などのアドバイスをお願いします。m(_ _)m
0593デフォルトの名無しさん
2006/09/22(金) 12:23:230594デフォルトの名無しさん
2006/09/22(金) 13:39:20πと3.141592654との誤差があるので、sin(PI)は0にはなりません。
#多分、-1e-10程度になったのではないかと思いますが。
環境にも拠りますが、math.hにかなり正確なM_PIが定義されていると思うのでその値で試してみてください。
恐らく、1e-15程度に0に近い数値になるはずです。
0595デフォルトの名無しさん
2006/09/22(金) 14:48:47void spi_tx(USHORT adrs, USHORT data) {
USHORT tx_stream;
while ((*(UINT *)McBSP0_SPCR&0x00020000)==0); // wait until tx ready
tx_stream=(adrs&0x0f)<<9;
tx_stream=tx_stream|(data&0x01ff);
*(USHORT *)McBSP0_DXR=tx_stream;
}
*(USHORT *)や(*(UINT *))みたいな部分は一体なにをやってるのでしょうか?もし、参考になるような
サイトがありましたら、ついでにお教え願います。
0596デフォルトの名無しさん
2006/09/22(金) 14:53:31キャスト演算子と間接参照演算子など。
0597595
2006/09/22(金) 15:19:370598デフォルトの名無しさん
2006/09/22(金) 15:21:190599デフォルトの名無しさん
2006/09/22(金) 16:00:190600デフォルトの名無しさん
2006/09/22(金) 16:03:33#define McBSP0_SPCR xxx
だけじゃなくて
#define McBSP0_SPCR_DATA (*(volatile UINT *)McBSP0_SPCR)
みたいなのを用意して
見た目グローバル変数みたいにするけどな。
0601デフォルトの名無しさん
2006/09/22(金) 17:29:21誤差だったんですね!
教えて頂きありがとうございました。
0602デフォルトの名無しさん
2006/09/22(金) 17:33:560603デフォルトの名無しさん
2006/09/22(金) 22:30:52#define PI 3.141592653589793
この桁まで定義すれば充分。
逆に、これより少ない桁数だと不十分。
0604デフォルトの名無しさん
2006/09/22(金) 23:16:400606デフォルトの名無しさん
2006/09/23(土) 14:49:160607デフォルトの名無しさん
2006/09/23(土) 18:40:30あぁ整数をポインタとして扱ってるぽいな
と普通思うから
0608デフォルトの名無しさん
2006/09/25(月) 12:57:22int REsize(char *x)
{
return ( sizeof(x) );
}
int main(void)
{
char buf[256];
printf("%d\n",REsize(buf));
return 0;
}
これを実行すると
4
となります。bufの配列長を戻したいときにはどうすればいいのですか?
0609(^-^) ◆MONSOON/qo
2006/09/25(月) 13:24:31char型ポインタのサイズ( 32bit )をかえしているとおもわれ
0610デフォルトの名無しさん
2006/09/25(月) 13:49:31REsize()はcharへのポインタのサイズを返す関数なので意図したものは返らない。
int main(void)
{
char buf[256];
printf("%d\n", sizeof(buf));
return 0;
}
としない理由は何?
0611デフォルトの名無しさん
2006/09/25(月) 13:51:18REsizeの中では、bufの大きさを知ることは不可能。
たとえばfgetsのように大きさを別途渡すのが、Cでは一般的。
0612デフォルトの名無しさん
2006/09/25(月) 13:56:26main関数で定義した配列長を、外部関数から戻り値として戻せるのかなと思い質問させていただきました。
>>611
配列長は配列長で別に引数として渡すことにします。どうもありがとうございます。
0613(^-^) ◆MONSOON/qo
2006/09/25(月) 14:02:44ポインタだけからでも多分出来るよ
sizeofの動作を調べればいい
bufには変数の型が記録されているはず
それを自力で取得するんだ
0614(^-^) ◆MONSOON/qo
2006/09/25(月) 14:08:280615デフォルトの名無しさん
2006/09/25(月) 14:16:28C++ならtypeidが使えるが、Cでは基本無理。
0616デフォルトの名無しさん
2006/09/25(月) 14:16:55Cではどこにも記録されないのが原則。
デバッガを使うのでもない限り不要だから。
sizeofは定数を返す、つまりコンパイル時に値が決まるのが原則。
C99の可変長配列は例外だが、sizeofの結果はソースコード上の型で決まることに変わりはないので、
608のコードではやはり4が返ることに変わりはない。
0617デフォルトの名無しさん
2006/09/25(月) 14:19:21608のREsizeの中でtypeid (x)を使っても、
それはtypeid (char*)と同じことになるので、
sizeofと全く状況は変わらない。
C++ならむしろRangeとして参照を受け渡すようにすれば、boost::sizeが使える。
0618(^-^) ◆MONSOON/qo
2006/09/25(月) 14:20:41コンパイル時の型チェックが済めば型は記録されないって事か
0619デフォルトの名無しさん
2006/09/25(月) 16:16:57そういうこと。
0620デフォルトの名無しさん
2006/09/25(月) 18:31:59#include <stdio.h>
#include <time.h>
#include <stdlib.h>
main(){
int player,computer;
int limit = 5; //5の繰り返し
int i;
printf("【%d回勝負ジャンケンゲーム】\n",limit);
srand(time(NULL));
for(i = 0; 1<limit; i++){
printf("ジャンケンゲ・・・(グー:1 チョキ;2 パー:3を入力) > ");
player = 0;
scanf("%d", &player);
while(getchar() != '\n') {}
computer = rand()%3 + 1;
printf("コンピュターは");
if(computer == 1) {printf("グー");}
else if(computer == 2) {printf("チョキ");}
else{printf("パー");}
printf("! ");
if(computer == player) {printf("あいこ\n");}
else if(player == 1 && computer == 2) {printf("プライヤーの勝ち\n");}
else if(player == 2 && computer == 3) {printf("プレイヤーの勝ち\n");}
else if(player == 3 && computer == 1) {printf("プレイヤーの勝ち\n");}
else {printf("コンピュターの勝ち\n");}
}
return 0;
}
0621デフォルトの名無しさん
2006/09/25(月) 18:33:11Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
3-1.c:
警告 W8004 3-1.c 34: 'i' に代入した値は使われていない(関数 mai
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
表示されてしまます、34行目の何が違うかわかりません
0622デフォルトの名無しさん
2006/09/25(月) 18:43:00↓
for(i = 0; i<limit; i++){
0623デフォルトの名無しさん
2006/09/25(月) 19:10:12こんなミスよくわかりますね
0624デフォルトの名無しさん
2006/09/25(月) 21:04:57main(){
int player;
int i;
for(i = 0; i<5; i++ )
{scanf("%d",&player);
printf("%d 回目 %d\n", i+1, player);}
return 0;
}
3
1 回目 3
100
2 回目 100
6
3 回目 6
5
4 回目 5
345
5 回目 345
このソースを実行すると、ちゃんと成功しますが疑問があります。
0625デフォルトの名無しさん
2006/09/25(月) 21:06:11%d\n には3を入力すると結果3が出ますが
最初の1回目となる %d には何故1と入力していないのに
勝手に1回目と表示されるのでしょうか?仕組みがわかりません
例3 ←3を入力
1 回目 3
↑
何故、1と入力していないのに、1が出るんでしょうか?
もう一つの疑問が i+1 と言う部分です
これはこのソースの意味上、どういう意味(役割)あるのでしょうか?
0626デフォルトの名無しさん
2006/09/25(月) 21:09:470627(^-^) ◆MONSOON/qo
2006/09/25(月) 21:16:10これ動かしてみて
#include <stdio.h>
main(){
int i;
for(i = 0; i<20; i++ ){
printf("%d×%dは%dです\n",i,i,i*i);
}
}
0628デフォルトの名無しさん
2006/09/25(月) 21:19:58>>627さんのソースで入力してみたら
3は3、1は1と言うような結果出ましたが・・・
0629デフォルトの名無しさん
2006/09/25(月) 21:22:30もうだいぶ自分の力では無理だということに気づきました。
C言語の参考書などで、もうcpadなどもすべて入っているものはありませんか??
0630デフォルトの名無しさん
2006/09/25(月) 21:22:41ジャンケンゲーム・・・・(グー:1 チョキ:2 パー:3を入力) > 3
プレイヤーは 3
【ジャンケンゲーム】
ジャンケンゲーム・・・・(グー:1 チョキ:2 パー:3を入力) > 1
プレイヤーは 1
0631(^-^) ◆MONSOON/qo
2006/09/25(月) 21:22:531 × 1 は 1 って出なかった?
そして19までくりかえさなかった?
0632デフォルトの名無しさん
2006/09/25(月) 21:24:21fseek ファイルサイズでググると見つかるかも
0634デフォルトの名無しさん
2006/09/25(月) 21:31:06先ずは日本語から。
0635(^-^) ◆MONSOON/qo
2006/09/25(月) 21:33:06for(i = 0; i<5; i++ )
の意味は、0から5未満までiを動かすということ。
printf("%d \n", i+1 );
の意味はi+1を整数出力( %d ) して改行(\n) するということ。
0636デフォルトの名無しさん
2006/09/25(月) 21:40:07>>printf("%d \n", i+1 );
の意味はi+1を整数出力( %d ) して改行(\n) するということ。
これの意味がいまいちわかりません、
i+1 が %d \n に代入されるんですよね?
それで何故、1 回目 3
↑
の1がでるのでしょうか?
0637デフォルトの名無しさん
2006/09/25(月) 21:42:46ループの最初は
i=0
だろ
0638デフォルトの名無しさん
2006/09/25(月) 21:42:470639デフォルトの名無しさん
2006/09/25(月) 21:44:49もう一回参考書などを読み直して出直して来ます
0640(^-^) ◆MONSOON/qo
2006/09/25(月) 21:45:12printf("%d 回目 %d\n", i+1, j)の意味は
%d( i+1で置き換わる) 回目 %d( jで置き換わる) \n(改行する)
が出力される
printf("%d 回目\n\n %d", i+1, j)だと
i+1のあとに2つ改行してからjが出力される
0641(^-^) ◆MONSOON/qo
2006/09/25(月) 21:46:45printfの構文とforの構文がわかっていないとおもわれ
0642デフォルトの名無しさん
2006/09/25(月) 21:51:16ありがとうございます。
たぶん、forとprintfが混乱してるかもしれません
自分の認識だと、簡単に言えばfor文は繰り返し
printf文は文字を出力です・・・
0643デフォルトの名無しさん
2006/09/25(月) 21:56:02こいつのせいでスレの密度が薄まる薄まる
0644デフォルトの名無しさん
2006/09/25(月) 22:16:26自分は
#deifine LAMP_RED (*(unsigned char *)0x8888)
#define LAMP_ON 1
#defrine LAMP_OFF 0
LAMP_RED = LAMP_ON;
のように書くのですが、
#deifine LAMP_RED (*(unsigned char *)0x8888)
#defrine LAMP_RED_ON ( LAMP_RED = 1; )
#define LAMP_RED_OFF ( LAMP_RED = 0; )
LAMP_RED_ON;
と書く人がいるようです。いきなり関数の中にマクロが出てくるのが気持ちが悪いのですが。
どっちが一般的で正しいのでしょうか?
0645デフォルトの名無しさん
2006/09/25(月) 22:24:59LAMP_RED_ON();
0646デフォルトの名無しさん
2006/09/25(月) 22:25:46質問するスレを間違えてるんじゃねえのか。
0647デフォルトの名無しさん
2006/09/25(月) 22:30:310649デフォルトの名無しさん
2006/09/25(月) 23:48:12を
array[0] = "AAA"
array[1] = "BBB"
array[2] = "CCC"
みたいに配列に入れるにはどうすれば
よいですか?
標準関数だと、途中のNUL文字が邪魔でうまく
値をとれません。
0650デフォルトの名無しさん
2006/09/26(火) 00:01:40char tmp[] = "AAA\0BBB\0CCC";
size_t n=0;
int i=0;
while(n > sizeof(tmp))
{
array[i] = &tmp[n];
n += strlen(&tmp[n])+1;
++i;
}
とかじゃ駄目かね。
0651デフォルトの名無しさん
2006/09/26(火) 00:02:26while(n < sizeof(tmp))
だ。すまん。
0652デフォルトの名無しさん
2006/09/26(火) 00:35:18ありがとうございました。
やりたいことができました。
0653デフォルトの名無しさん
2006/09/26(火) 02:26:170654デフォルトの名無しさん
2006/09/26(火) 08:11:44使用できるのでしょうか?
例えば、100万×10=1000万要素の二次元配列を使用することは
可能ですか?
PCのメモリは512です。
どうぞよろしくお願いします。
0655デフォルトの名無しさん
2006/09/26(火) 08:38:220656デフォルトの名無しさん
2006/09/26(火) 08:48:210657デフォルトの名無しさん
2006/09/26(火) 09:02:16それほど大きなメモリは動的確保するのが一般的。
ただし静的あるいは大域変数ならそれ位の要素があっても平気だと思う。
自動変数でも、スタックをかなり大きくとれば平気なはず。
だが、それでも動的確保するのが一般的。
それ程の量のメモリを使うとなると、メモリ確保できなかった場合をまじめに考える必要が出てきる。
動的確保以外では、メモリ確保できなかった場合、プログラム内からは殆どと言って良いほど何もできない。
動的確保なら比較的自由にエラー処理を行える。そのためもあって動的確保が好まれている。
0658デフォルトの名無しさん
2006/09/26(火) 09:59:09適当いってんじゃねー、タコ
0659デフォルトの名無しさん
2006/09/26(火) 10:49:32うるせーぬるぽ
0660デフォルトの名無しさん
2006/09/26(火) 12:07:470661デフォルトの名無しさん
2006/09/26(火) 13:14:25処理の最終段階でメモリが足りませんでしたって終了してしまって、時間だけを無駄に消費させるプログラムを書くプログラマはクズだと思う。
DOSで全メモリを自由に使えた時代は良かった。
0662デフォルトの名無しさん
2006/09/26(火) 13:18:550663デフォルトの名無しさん
2006/09/26(火) 13:19:350664デフォルトの名無しさん
2006/09/26(火) 13:26:160665デフォルトの名無しさん
2006/09/26(火) 14:10:33DOSに仮想記憶ってあったっけ?
動的確保でフラグメントされるって何?
動的確保だと必ず細切れ確保しなきゃいけないとでも思ってるの?
0666デフォルトの名無しさん
2006/09/26(火) 14:31:480667デフォルトの名無しさん
2006/09/26(火) 18:00:25BCC Developerを使っています。
#include <stdio.h>
int main(void)
{
printf("Hello, world");
return 0;
}
なのですが・・・。
エラー E2268 c:\gengo\aki\a\w.cpp 8: 未定義の関数 'printf' を呼び出した(関数 main() )
*** 2 errors in Compile ***
** error 1 ** deleting Debug\w.obj
と出てしまいます。お願いします。
Compile End !! (Elapsed time 0:00.093)
0668(^-^) ◆MONSOON/qo
2006/09/26(火) 18:16:39↓は動きますか?
#include <iostream.h>
int main(void)
{
cout << "Hello, world!\n";
return 0;
}
0669デフォルトの名無しさん
2006/09/26(火) 18:23:51氏ね
0670デフォルトの名無しさん
2006/09/26(火) 18:28:56それをCで表現しろ
0671デフォルトの名無しさん
2006/09/26(火) 18:35:28すっきり。
0672デフォルトの名無しさん
2006/09/26(火) 18:36:38スレ違い。
0673デフォルトの名無しさん
2006/09/26(火) 18:47:18int main(void)
{
int a,b=2;
a=b++;
printf("a=%d\nb=%d\n",a,b);
return 0;
}
実行結果
a=2
b=3
このソースなのですがエラーとかは出ませんが、
=と++の演算子の優先順位に疑問があります。
参考書には++の方が=よりも優先順位が高いとなっているのですが、
そうするとこの場合まずb++を処理してその値をaに代入することになり、
a=3
b=3
になると思うのですが結果は違いますよね?
この場合はどのように考えればいいのでしょうか?
詳しい方お教え下さい。よろしくお願いいたします。
}
0674デフォルトの名無しさん
2006/09/26(火) 18:59:35後置インクリメント演算子は、結果としてインクリメント前の値を返す。
従って、疑問の余地なくこの場合は2となる。
0675デフォルトの名無しさん
2006/09/26(火) 19:07:14嘘を言わないように。
0676デフォルトの名無しさん
2006/09/26(火) 19:08:44Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
c:\gengo\aki\q\e.cpp:
エラー E2209 c:\gengo\aki\q\e.cpp 1: インクルードファイル 'iostream.h' をオープンできない
エラー E2451 c:\gengo\aki\q\e.cpp 6: 未定義のシンボル cout(関数 main() )
*** 2 errors in Compile ***
** error 1 ** deleting Debug\e.obj
Compile End !! (Elapsed time 0:00.094)
と出でしまいました。
スレ違いだったらすいません。
0677デフォルトの名無しさん
2006/09/26(火) 19:09:030678デフォルトの名無しさん
2006/09/26(火) 19:14:52どこが嘘?
もしかして:675=無知故に釣りに失敗した673?
0679デフォルトの名無しさん
2006/09/26(火) 19:16:38なんで?>>674はあってるだろ?何か見落としてるかな…
0680デフォルトの名無しさん
2006/09/26(火) 19:16:42優先順位はあってるでしょ。
a = b++
は、
a = (b++)
であって、
(a = b)++
ではないのだから。
0681(^-^) ◆MONSOON/qo
2006/09/26(火) 19:16:52もう一度、ボーランドC++5.5のインストールした方がいいかもしれないです
一度、c:\bcc5.5っていうフォルダを削除して再インストールしてみてください
直リン
ftp://ftp.borland.co.jp/pub/cppbuild/freecommandlinetools2.exe
ftp://ftp.borland.co.jp/pub/cppbuild/freecommandlinetools_update.exe
http://www.cmagazine.jp/download/setbcc15b.exe
0682デフォルトの名無しさん
2006/09/26(火) 19:28:530683673
2006/09/26(火) 19:31:47最近はじめたばかりなので言ってることがおかしかったらすいません。
>>674
これは後置インクリメントが先に処理されてもっていう意味でしょうか?
値を返した後に+1するっていうことですか?
>>680
優先順位があっているならば、b++の段階でbに+1されるのではないのですか?
そもそもこの考え方がおかしいのかな?
0684デフォルトの名無しさん
2006/09/26(火) 19:34:14お前この前からいい加減にしたらどうだ。
iostream.hの名前自体が現在使用を勧められるものじゃないだろが。
>>676
多分
#include <iostream.h>を
#include <iostream>にするだけで通るぞ。
iostream.h のファイル名は古い仕様のC++のもので、
今現在も使用可能な場合があるのは、単にベンダ側が
過去に配慮しているってだけ。
使えなくても怒られた義理じゃない。
#include <iostream>も通らない様なら、includeのパスの問題だろうが。
元のソースコードはいつのものだ?
0685デフォルトの名無しさん
2006/09/26(火) 19:34:35・優先順位はあっている
・後置インクリメントは結果としてインクリメント前の値を返す
よって、a = 2, b = 3になる。
0686デフォルトの名無しさん
2006/09/26(火) 19:36:58>これは後置インクリメントが先に処理されてもっていう意味でしょうか?
>値を返した後に+1するっていうことですか?
Yes
>優先順位があっているならば、b++の段階でbに+1されるのではないのですか?
No
そうしたいなら、 a=++b とする。
>そもそもこの考え方がおかしいのかな?
Yes
前置と後置の違いを勉強してきなされ。
0688デフォルトの名無しさん
2006/09/26(火) 19:37:17後置インクリメントはそうしたものです。
つまり a = b++; と書いた場合、a = b, b++; と等価です。
#仮に、インクリメント後の値を返すとしたら前置インクリメントと同じになっちゃいますね。
0689デフォルトの名無しさん
2006/09/26(火) 19:38:00いや、それで合ってる。
=より先に++が処理されているし、b++の時点でbには+1されているが、
b++が返すのはbのインクリメント前の値なので、
a=b++は
b++;
a = b;
じゃなくって、概ね
int c = b;
++b;
a = c;
に等しくなる。
0690デフォルトの名無しさん
2006/09/26(火) 19:39:43スレ違いですから。
0691デフォルトの名無しさん
2006/09/26(火) 20:23:05obtained, the value of the operand is incremented.
0692673
2006/09/26(火) 20:49:14>>686
>>688
>>689
>>691
疑問に思っていたことが解消できました。
感謝感謝です。みなさまありがとうございました。
0693デフォルトの名無しさん
2006/09/26(火) 21:49:40'min'は前方で暗黙的に `int' を返すと宣言されました
とエラーがでるのですが原因はなんなんでしょうか?
int同士で割ってもdouble型に代入したら型はdoubleでprintfできたので
宣言とかの問題ではないとは思うのですが、、、
double Word_Spam(int ngood, int nbad, int good, int bad)
{
double f;
double b,g;
b = bad/nbad;
g = good/ngood;
f = min(1.0, b)/(min(1.0, g)+min(1.0, b));
return f;
}
double min(double a, double b)
{
if(a < b){
return a;
}
else{
return b;
}
}
0694デフォルトの名無しさん
2006/09/26(火) 21:55:18すみません、自分でなんとかできそうです。。。。たぶん
0695デフォルトの名無しさん
2006/09/26(火) 23:01:05質問自体はいいとして、 b = bad / nbad;は拙いだろう。
0696デフォルトの名無しさん
2006/09/26(火) 23:15:58nbad,ngoodが0だと、やばい
あと、関数の宣言の仕方が逆でWord_Spam()の中で
min()を呼び出してるから、まだmin()関数の場所がWord_Spam()内
ではわかってない。
ま、プロトタイプ宣言をヘッダなり、main()の前に書けば良いと思う。
0697デフォルトの名無しさん
2006/09/27(水) 00:11:49main(){
int d;
do {printf("数値を入力>"); scanf("%d", &d);}
while (d !=!);
return 0;
}
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
ccc4.c:
エラー E2188 ccc4.c 7: 式の構文エラー(関数 main )
*** 1 errors in Compile ***
エラーが出ますが、自分では何がいけないのか検討もつきません
ご指摘お願いします。
0698デフォルトの名無しさん
2006/09/27(水) 00:14:090699デフォルトの名無しさん
2006/09/27(水) 01:04:590の可能性はないとふんでたんですが、よく考えたらありました。。。。
ありがとうございます。関数を呼ぶ前にngood,nbadは0なら+1するようにしました。
>>695
最終的にこうなりましたが、やっぱり拙いでしょうか?
b = (double)(bad)/(double)(nbad);
g = (double)(good)/(double)(ngood);
0700デフォルトの名無しさん
2006/09/27(水) 01:19:52一応こう書けばすむことを知った上で、後はご自由に。
double b = (double) bad / nbad == 0 ? 1 : nbad; // 0チェックはこっちでやった方が親切
double g = (double) good / ngood == 0 ? 1 : ngood; // その辺も、お好みでどうぞ
double min_b_1 = min(1, b); // 同じ関数を全く同じ条件で2度呼ぶのは一応避けてみた
double min_g_1 = min(1, g); // そうなると立場上、こちらも合わせることに
return min_b_1 / min_g_1 + min_b_1; // fは必ずしも要らない
0701デフォルトの名無しさん
2006/09/27(水) 01:34:340702デフォルトの名無しさん
2006/09/27(水) 01:58:23実際動かしてみましたが
((double) bad / nbad == 0) ? 1 : nbad
とはならずに
(double)(bad)/(nbad == 0 ? 1 : nbad);
になりますね!
0で割るとオーバーフローで落ちること以外になにか致命的なことが起こる可能性
はありますか?(メモリを確保していないとき並にまずいことなど)
検索すればすぐにでてくると思ったのですが案外なかったです。。。
0703デフォルトの名無しさん
2006/09/27(水) 02:08:28このプログラムは正確な確率を求めるものではないので大丈夫だと思ってます。
nbadなどの値は徐々に増えていくのですが
例えばbad/nbad=200/4000が200/4001になっても確率はそれほど変わらないからです。
0704デフォルトの名無しさん
2006/09/27(水) 02:25:29これはなんだ。AAか。
冗談はさておき、そこは多分
d != 1
あたりなんじゃないかとエスパー予想。
0705デフォルトの名無しさん
2006/09/28(木) 02:34:18出力しているのですが、そうすると、同じプログラムを二本同時に
動かすと、ややこしいことになります。
なので、フォルダ名は今まで通り固定しても、ファイル名は実行した
プログラムごとに名前を変えたいのですが、こういう場合、決して
重複しないようにファイル名を作り出す方法って、どういうのが
ありますか?日時やプロセスのIDなどを利用するのが良いでしょうか?
それとも、もっとスマートな方法がありますか?
0706デフォルトの名無しさん
2006/09/28(木) 03:24:350707デフォルトの名無しさん
2006/09/28(木) 06:41:22ファイル名に脈絡の無いゴミ文字が入るのは微妙っちゃ微妙かもかな。
0708デフォルトの名無しさん
2006/09/28(木) 08:40:390709デフォルトの名無しさん
2006/09/28(木) 08:49:480710デフォルトの名無しさん
2006/09/28(木) 09:11:17おお、こんな便利な関数があったとは!
ありがとうございました。
0711デフォルトの名無しさん
2006/09/28(木) 09:54:22ユニックスならシスログ
に出した方が汎用性があって監視とかも楽だよ。
0712デフォルトの名無しさん
2006/09/28(木) 11:27:17ユニックスってのを入れるんですか?
0713デフォルトの名無しさん
2006/09/28(木) 11:32:06Visual C++ 2005を検索してDLしろ。
0715デフォルトの名無しさん
2006/09/28(木) 12:34:32ttp://bdn.borland.com/museum/
Turbo C 2.01
0716デフォルトの名無しさん
2006/09/28(木) 12:36:000717デフォルトの名無しさん
2006/09/28(木) 13:11:550718デフォルトの名無しさん
2006/09/28(木) 14:04:50int a=10;
int *pa=&a;
int *pp;
というのがあったとして
ppに&aを入れたいんですが、paを経由して入れるにはどうすればいいですか?
0719デフォルトの名無しさん
2006/09/28(木) 14:07:400720(^-^) ◆MONSOON/qo
2006/09/28(木) 14:13:59初心者にはBCCの方がいいよ
コンパイル速度が速いし複雑さが少ない
0721デフォルトの名無しさん
2006/09/28(木) 14:14:25ありがとうございました
0722デフォルトの名無しさん
2006/09/28(木) 14:25:040723デフォルトの名無しさん
2006/09/28(木) 14:27:44数あてゲーム程度のプログラムなのに
数万行ものコード書いてくるヤツを。
0724デフォルトの名無しさん
2006/09/28(木) 14:27:510725デフォルトの名無しさん
2006/09/28(木) 14:30:03IDE付きだからすぐ使える。
ttp://bdn.borland.com/museum/
ここにあるよ。
0726デフォルトの名無しさん
2006/09/28(木) 14:43:30こりゃ使いやすいや!
0727デフォルトの名無しさん
2006/09/28(木) 15:02:590728デフォルトの名無しさん
2006/09/28(木) 15:10:45その数万行が全部 main() の中に書いてあるんだぜ?
0729デフォルトの名無しさん
2006/09/28(木) 17:28:36もはや初心者とか中級者とか上級者で分類できねーYO
おまいがその凝り性を良い方向へ導け
0730デフォルトの名無しさん
2006/09/28(木) 19:47:14ヒンズースクワットしながらピロシキでも焼いてるのか。
0731デフォルトの名無しさん
2006/09/28(木) 20:29:40整数の割り算をすると答えに小数点以下が表示されない・・・・
(5÷4 = 1.0 と表示されてしまう)
�@ 関数の宣言は、 double = ans ; と宣言してるし。
�A 表示の部分は printf("%f\n")で、小数点の表示に対応できるようにしているんですけど。
0732デフォルトの名無しさん
2006/09/28(木) 20:39:110733デフォルトの名無しさん
2006/09/28(木) 20:54:37#include <stdio.h>
double divine( double a, double b ) {
return ( a / b );
}
int main() {
printf( "%f\n", divine( 4, 5 ) );
return 0;
}
俺が昔消防の頃、割り算が面倒で、N88BASICでツール作ったことがあったが、
剰余の計算方法が解らず「余り」が出せなくて、結局自分で宿題をやった記憶がある。w
0734(^-^) ◆MONSOON/qo
2006/09/28(木) 21:01:39ans = (double)5/4;
ans = (5+0.0)/4;
と書けばOK
ansがdoubleでも自動では変換されない
0735デフォルトの名無しさん
2006/09/28(木) 22:09:500736(^-^) ◆MONSOON/qo
2006/09/28(木) 22:26:01int a=5, b=4;のときは
ans = (a+0.0)/b; と書くしかないよ
0737デフォルトの名無しさん
2006/09/28(木) 22:30:220738デフォルトの名無しさん
2006/09/28(木) 22:46:400739デフォルトの名無しさん
2006/09/28(木) 23:13:45スクリプト系の言語ならいざ知らず、Cなら後者はナンセンス。
>>736
そんなことはない。
0740デフォルトの名無しさん
2006/09/28(木) 23:24:36まともな人間ならこれだな
0741(^-^) ◆MONSOON/qo
2006/09/28(木) 23:25:22ans = a.0 / b;は駄目だよ?
0742デフォルトの名無しさん
2006/09/28(木) 23:38:29だから結局double型へのキャストがCでは一番まともな方法。
0743デフォルトの名無しさん
2006/09/29(金) 00:01:130744デフォルトの名無しさん
2006/09/29(金) 00:29:07最近の処理系ではtime_tを64ビットにしたり、
当面の回避策としてtime64_tなる64ビットの方を用意していたりするものが徐々に増えている。
0745デフォルトの名無しさん
2006/09/29(金) 01:52:050746デフォルトの名無しさん
2006/09/29(金) 02:48:36とりあえず漏れらの生きてる間には起きないだろうから安心しれ。
0747デフォルトの名無しさん
2006/09/29(金) 08:31:020748デフォルトの名無しさん
2006/09/29(金) 19:32:15なぜですか?(使ってるのはVCですが、他の環境でもこうなん
でしょうか?)
0749デフォルトの名無しさん
2006/09/29(金) 19:44:300750デフォルトの名無しさん
2006/09/29(金) 20:54:29マクロ等で置換される可能性があり、通常ユーザは使ってはいけない。
VCのライブラリが同じ定義をアンダースコア付きと無しで
同じ様な名前の関数を二重に持っている様に見えるのは、
大抵の場合マルチバイト文字列前提とUNICODE文字列前提で
使用する関数を切り替えたり、バッファオーバーフロー対策を施していたりといった
機能上の違いを使い分けるためだったり、色々。
MSDN見れば大抵対応が載ってるから、読め。
あと微妙にスレ違いな。
お前さん、機種依存環境依存の問題とC言語の問題の区別がついてないっぽいから
基本VCのスレか、環境依存OKなC/C++室スレに常駐しれ。
0751デフォルトの名無しさん
2006/09/29(金) 21:17:120752デフォルトの名無しさん
2006/09/29(金) 22:44:23ISOだかANSIだかで処理系依存のものには_を付けることが推奨(?)されたため
_付きのが用意され、そちらを使うのが推奨されるようになった。
が、互換性のため、昔の名前のままのも残されている。
0753デフォルトの名無しさん
2006/09/29(金) 23:18:380754デフォルトの名無しさん
2006/09/29(金) 23:26:16日本語106キーボードでは、Shift+ろ(右Shiftのすぐ左)
101キーボードでは、Shift+-(0のすぐ右)
0755デフォルトの名無しさん
2006/09/29(金) 23:58:240756デフォルトの名無しさん
2006/10/01(日) 00:07:15他スレから誘導されてきました。
俺はC言語全くの初心者です。
勉強しようと思って本は買いました。
ついでに何かソフトも買ってキーボードを叩きながら覚えようと思うのですが・・・
何かお薦めのソフトはありますか?
教えて君で申し訳ないのですが。。。教えてください。
0757デフォルトの名無しさん
2006/10/01(日) 00:09:47誘導された旨を知っているから、とりあえず>>756はマルチじゃないと言っておく
さて、次の一文が論理的推論が間違っているように思うのだが
> ソフトも買ってキーボードを叩きながら覚えようと思うのですが・・・何かお薦めのソフトはありますか?
つまり「お勧めのソフトを買って、キーボードを叩きながら覚えよう」としているのだろうか?
C言語を覚える手段を「キーボードを叩きながら」と明言しているにも関わらず、なぜソフトを要求する?
0758デフォルトの名無しさん
2006/10/01(日) 00:18:04そうすれば一回り大きくなって帰ってきて
「stdio.hがインクルードできません」
「__WinMain がリンクできません」
等の質問でスレを活性化してくれるさ
0759756
2006/10/01(日) 00:28:14レスありがとうです。
>>757
俺の文章の書き方がおかしかったのかな。
申し訳ないっす。
学習ソフトとか初心者用のソフトとかそんな感じのが市販されているのであれば、
それを買って実際にプログラムを動かしながら覚えてみたいってことです。
こんなんでわかるかな・・・?
>>758
そのBCCとかVC2005EEとかは普通にビックとかヨドバシに売ってます?
明日行ってみよう。。。
0760デフォルトの名無しさん
2006/10/01(日) 00:36:31学習ソフトか…
プログラミング言語の学習ソフトなんてあるのかな?
とりあえず俺は見たことも無いし使ったことも無いのでアテになりません
プログラミングの基本はもう「馴れ」しかないから、サンプルコードを惜しまず手を使って書いて悩めばそれで十分でそ
BCCとVC2005EEは無料で落とせる
BCC:borland フリー Cコンパイラ でググってみたり
VC2005EE:Visual C++ 2005 express でググってみたり
他にDMCとかもあるけど…うん、アレはあれでいいかも(古いままかも)
DMC:Digital Mars C++ compiler
他のもあるけど、最初は道があったほうがらくだよね。
VC2005はマシンスペックが結構必要になる、ついでに登録必要のはず。
BCCはまぁ、コンパイラだけだったと思うからそれほど必要じゃないね、でも登録必要。
DMCは最近使って無いから忘れた…マジで古いC++(#include <iostream.h>とかやらにゃならん)かも。
0761デフォルトの名無しさん
2006/10/01(日) 01:15:33ttp://www.microsoft.com/japan/msdn/vstudio/express/visualc/
学習用に割り切るならBCCも悪くは無いが、いかんせんマイナーだ。
0762デフォルトの名無しさん
2006/10/01(日) 04:03:49このスレで質問させていただきます。
問い:コンピュータの整数は、ある数までしか表現できない。
その数を上回ると負の数になってしまう。
最大公約数を求めるプログラムを使って、データを少しずつ大きくしていき、
どの数まで正しく表現できるか調べる場合、どのようにすればよいか。
という問題なのですが、どのようにすればいいんでしょうか?
お願いしますm(__)m
0763(^-^) ◆MONSOON/qo
2006/10/01(日) 04:21:35char , short int ,int ,long , doubleとかの型が不明なときに
アルゴリズムで型を判定する問題ですか?
0764デフォルトの名無しさん
2006/10/01(日) 04:34:57型はint型です。
先日プログラムの勉強を始めたばかりの初心者なので…
最大公約数を求めるプログラムを書いた方が良いでしょうか?
0765(^-^) ◆MONSOON/qo
2006/10/01(日) 05:01:53なぜ最大公約数を求めるプログラムが必要なのかわかりません
0766デフォルトの名無しさん
2006/10/01(日) 05:33:46>最大公約数を求めるプログラムを使って、データを少しずつ大きくしていき、
>どの数まで正しく表現できるか調べる場合、どのようにすればよいか。
ていう前提なんだから、先生に聞けよ、そんなことは。
要はユークリッドの互除法でも使えって話しなんだろ。
0767デフォルトの名無しさん
2006/10/01(日) 08:01:12最大公約数を求めるプログラムの実装に依存するが、
#include <stdio.h>
int gcd(int a,int b){
if(!a || !b) return 0;
while(a!=b) if(a<b) b-=a; else a-=b;
return a;
}
int main(){
int i,j=0;
while(0<=gcd(j,j)) i=j++;
printf("%d\n",i);
return 0;
}
0768デフォルトの名無しさん
2006/10/01(日) 08:04:53#include <stdio.h>
#include <limits.h>
int main(){
printf("%d\n",INT_MAX);
return 0;
}
#include <stdio.h>
int main(){
int i,j=0;
while(0<=j) i=j++;
printf("%d\n",i);
return 0;
}
本当に「最大公約数を求めるプログラムを使う」問題か確認するよろし
0769デフォルトの名無しさん
2006/10/01(日) 09:42:11自分で考えたプログラムすら晒さないし。
C/C++の宿題を片付けます 74代目
http://pc8.2ch.net/test/read.cgi/tech/1158844912/l50
まあ単位落としてまじめに勉強してくれ。つーか友達に訊けよ。友達居ないのか?
0770762
2006/10/01(日) 13:00:12もう少し自分で考えてみますm(__)m
先週から独学で始めたばかりで、周りにプログラムに詳しい人がいなくて
ここで聞いたのですが…
ご迷惑おかけしました。
0771デフォルトの名無しさん
2006/10/01(日) 13:04:18つーか実際にここでもいいのかもしれないが、
宿題スレの方が気の利いた答えが貰えると思う。
めげずにまた来ておくれ。
0772デフォルトの名無しさん
2006/10/01(日) 13:57:3316進数で表すと何故か必ず13ffb8となってしまいます。何がいけないんでしょうか
#include<stdio.h>
int main(void)
{
int m;
printf("整数mの値を入力して下さい");
scanf("%d", &m);
printf("mの値は%d進数で10,8進数で%o,16進数で%xです。\n", m);
return(0);
}
0773デフォルトの名無しさん
2006/10/01(日) 14:00:500774デフォルトの名無しさん
2006/10/01(日) 14:01:18, m, m, m);
0775デフォルトの名無しさん
2006/10/01(日) 14:03:09本当だ!!即レスありがとうございます
0776デフォルトの名無しさん
2006/10/01(日) 15:28:130777デフォルトの名無しさん
2006/10/01(日) 15:37:110778デフォルトの名無しさん
2006/10/01(日) 15:42:540779772
2006/10/01(日) 16:12:59そこはすぐに気付きました。ハズカシス。何度も質問して申し訳ないのですが
下記のプログラムで名前に2文字以上入力してもはじめの1文字しか表示されず、
%dの値が勝手に「1」になってしまいます。名前に1文字しか入力しなかった場合は問題なく動きます
これは何がいけないんでしょうか
#include<stdio.h>
int main(void)
{
int birth;
char name;
printf("名前を入力して下さい");
scanf("%c", &name);
printf("%cさん、生まれた月を入力して下さい", name);
scanf("%d", &birth);
printf("%d月生まれですね\n", birth);
return(0);
}
0780(^-^) ◆MONSOON/qo
2006/10/01(日) 16:15:52printf("名前を入力して下さい");
scanf("%s", name);
でいいのでは
0782デフォルトの名無しさん
2006/10/01(日) 16:27:20(´∩ω∩`)
0783デフォルトの名無しさん
2006/10/01(日) 16:28:280784デフォルトの名無しさん
2006/10/01(日) 16:53:22そう書きたいなら
scanf("%99s", name);
寿限無を入力されたら困ったことになるよ
0785デフォルトの名無しさん
2006/10/01(日) 17:02:580786デフォルトの名無しさん
2006/10/01(日) 17:04:00プログラムここに載せようとしたら長すぎて載せられなかったから下のURLにうpしたし見てくれないか?
間違ってるとこあったら教えてくれ〜。
http://walatte.web.fc2.com/jikoku.JPG
0787デフォルトの名無しさん
2006/10/01(日) 17:34:281足せ1
0788デフォルトの名無しさん
2006/10/01(日) 17:37:170789デフォルトの名無しさん
2006/10/01(日) 17:41:33ありがとう、1足して使うよ(^o^)/
0790731です
2006/10/01(日) 18:33:40三人とも正解でした!
0791790です
2006/10/01(日) 18:36:22三人 → 四人でした。
0792デフォルトの名無しさん
2006/10/01(日) 19:01:45ソースはもう少しきれいに書きましょう。
0793デフォルトの名無しさん
2006/10/01(日) 19:03:020794デフォルトの名無しさん
2006/10/01(日) 19:10:39不必要なコメントはそれこそ可読性を落とすゴミ以外何者でも無いし
ただ、コメントがどうしても必要な場合があって、
それはたとえば
1 専門家の考えるような概念が直接取り入れられている(FFTやWavelet、LZ法など)
2 ソースコードを読む時間を省くため
→その割にはコメント読まなきゃいけなかったりする
3 実はゴリゴリ書いていて、コメント無しじゃ何を意味してるのか汲み取れないシロウトコード
→コメントを書く以前の作業に戻らなきゃならない
こんな風になる。もっと多くの事項もあるけれど、たいていこれらに集約される。
で、分かったこと。
1番以外はコメント書く必要が無い。
そして1番はそれほど多くない。
したがって、2番や3番などの場合以外でコメントを必要とする場面が少ない。
で、コメントがいらなくなっていくわけですか。
もう何言ってるのかわからないのでやめときます //スルーsage
0795デフォルトの名無しさん
2006/10/01(日) 19:25:00参照とはどういう意味なのでしょうか?
違う物に喩えてお願いします。
0796デフォルトの名無しさん
2006/10/01(日) 19:40:12んー、もうちょい具体的に分からないところをあげるといい
0797デフォルトの名無しさん
2006/10/01(日) 19:46:03よく、最初に〜を参照するとか本には書かれていますが
その参照の意味がわかりません
何を比較して照らし合わせているのでしょうか?
0798デフォルトの名無しさん
2006/10/01(日) 19:50:12他のものと照らし合わせてみること。
「第一章を―せよ」「―項目」
比較はしていないな。
0799デフォルトの名無しさん
2006/10/01(日) 20:25:27さんくす・・・
0800756&759
2006/10/01(日) 22:03:10レスが遅れてしまい、ホントに申し訳ないっす(汗
今とりあえずborlandをダウンロードしてインストールしてます。
>>757,758も>>760もご指導ありがとうございました。
とりあえず自分で色々と格闘してみます。
わからないことがあったらまた来ますんで、
その時は、ご迷惑かもですがよろしくです。
0801(^-^) ◆MONSOON/qo
2006/10/01(日) 23:22:37Bcc developerがお勧めですよ
0802デフォルトの名無しさん
2006/10/01(日) 23:27:23C言語の簡単なアプリケーションのソースをサイトからもらってきて実行したら、
「resource.hが開けません。」と、エラーが出ました。
これは何故出るんですか?
ググってみたら「resource.h→メモ帳で新たに作り、define文をコピーして保存する。」と書いてあったのですが、よく意味が分かりません。
もしかして、アプリケーションを作って実行する時って"Cのプログラムを書いたファイル"だけじゃなくて他にも"そのresourceとか言うのを書いたファイル"とかが要るんですか?
0803デフォルトの名無しさん
2006/10/02(月) 00:06:27int main(void)
#define NUM 3
{
int i,j;
char ch;
char test[NUM][100];
printf("文字列を3つ入力してください。\n");
for(i=0;i<NUM;i++){
printf("%dつ目\n",i+1);
scanf("%s",test[i]);
}
for(i=0;i<NUM;i++){
printf("%s\n",test[i]);
}
printf("縦書きにしますか?yかnを入力して下さい。\n");
ch=getchar();
if(ch=='y'||ch=='Y'){
for(i=0;i<NUM;i++){
for(j=0;test[i][j]!='\0';j++){
printf("%c\n",test[i][j]);
}
}
}
return 0;
}つい数日前にC言語の勉強を始めたものです。
上に上げたコードなのですが、コンパイル後に実行しても
なぜかch=getchar();以降の部分がうまく処理されていません。
(キーボードからの入力待ちにならずにプログラムが終了する)
これはなぜなんでしょうか?
0804デフォルトの名無しさん
2006/10/02(月) 00:12:020805デフォルトの名無しさん
2006/10/02(月) 00:49:10文字コードなんて関係ない
scanf()で、入力していくと、ストリームにEnterキー押したときの
改行文字'\n'が残ってる。
そんでgetchar()はその'\n'を読み込んでしまうため次のif文で否定される
あと、getchar()の戻り値はint型
0806デフォルトの名無しさん
2006/10/02(月) 01:04:02なんの本だっけ?
0807デフォルトの名無しさん
2006/10/02(月) 01:07:08おまえがヒントだけでは理解できない人間だというのは良くわかったよ。
0808803
2006/10/02(月) 01:07:34レスありがとうございます。
ストリームというのが何なのかまだ理解できていませんが、
getchar()より上の部分で使っているscanf()が悪さをしているということですね。
あとgetchar();についてですが、私の持っている参考書には1文字をキーボードから
入力する際に使うようにかかれており、char型の変数=getchar();と書かれていたのですが
これが間違っているということですね。
勉強になりました。ありがとうございました。
0809デフォルトの名無しさん
2006/10/02(月) 01:17:17"Cのプログラムを書いたファイル"だけじゃなくて他にも"そのresourceとか言うのを書いたファイル"を読み込むように書いたCのプログラムは
"Cのプログラムを書いたファイル"だけじゃなくて他にも"そのresourceとか言うのを書いたファイル"が必要になります。
0810デフォルトの名無しさん
2006/10/02(月) 04:31:10でも他人との理解度が違うので、他人が書いたプログラムのコメントなんて糞の役にも立たないというのが現実。
結局、作った香具師に訊くか、自分で解析するしかなくなる。
まあ実際の案件では、事前に十分に研修なりで理解度の意識統一をしておくのが吉。
インデントつーか書式に付いても個人差があるから、タブ字下げかスペースなら何文字とか統一すべき。
0811デフォルトの名無しさん
2006/10/02(月) 20:42:16「実行」って具体的に何をしたん?
0812デフォルトの名無しさん
2006/10/02(月) 23:05:05文意から察するとコンパイルかけたっぽいが…
>>802 もしかして Windows の窓を作るサンプルじゃないか?
つか猫?
0813デフォルトの名無しさん
2006/10/02(月) 23:58:13for(i=0;i<NUM;i++){
printf("%dつ目\n",i+1);
scanf("%s",test[i]);
}
fflush(stdin);
と、fflushで処理するのは邪道なの?
0814デフォルトの名無しさん
2006/10/03(火) 00:03:43fflushは書き込み可能なストリーム用
0815デフォルトの名無しさん
2006/10/03(火) 00:08:44未定義動作であることは確か。
0816813
2006/10/03(火) 00:13:23ま、素直にfgets使うわ。
0817デフォルトの名無しさん
2006/10/03(火) 20:05:24意味が…「abc」は「agc」よりも前なので小さいと説明がされていますが
よくわかりません、他にも「4」「12」では「12」が先に来るから「4」が大きい
と説明されてます。
0818デフォルトの名無しさん
2006/10/03(火) 20:09:43あいうえお順、ABC順。
0819デフォルトの名無しさん
2006/10/03(火) 20:12:47>「4」「12」では「12」が先に来るから「4」が大きい
は理解できません
0820デフォルトの名無しさん
2006/10/03(火) 20:15:2512 と 4 は じゅうに と よん を比較しているのではなくて、
いち と よん を比較して(この段階で いち のほうが小さいから 集合[12] は先)
同じなら
に と (無し) を比較する
abc と agc は
エー と エー (同じ
ビー と ジー (b の方が若いから 集合[abc] のほうが先
0821デフォルトの名無しさん
2006/10/03(火) 20:20:07使われてるエンコード上で文字コードが若い順/古い順ってことになる
0822デフォルトの名無しさん
2006/10/03(火) 20:20:16イメージは掴めました、ありがとうございました。
0823817
2006/10/03(火) 20:32:50int i;
char str1[] = "abc";
char str2[] = "def";
i = strcmp(str1, str2);
変数iには-3が代入されました。
と参考書にありますが、何処でどうしたら
-3が出てきて代入されるのか検討もつきません。
ご指導御願いたします
0824デフォルトの名無しさん
2006/10/03(火) 20:42:18きっとstrcmpにstr1とstr2を渡したら戻り値が-3となって、i に代入されたのです
0825デフォルトの名無しさん
2006/10/03(火) 20:44:05「文字コード」について調べるといいよ。
それと、ちょっとその参考書名を晒してくれんか。
0826デフォルトの名無しさん
2006/10/03(火) 20:44:55もちろん見当をつける必要もありません。
規格ではstrcmpはゼロより小さい、等しい、大きい整数を返せばよいことになっています。
それが-3だろうが-127だろうが何も問題ありません。
0827デフォルトの名無しさん
2006/10/03(火) 20:45:43・負:s1の方がs2より、辞書順で先にあらわれる=s1<s2
・0:s1とs2が等しい=s1==s2
・正:s1の方がs2より、辞書順で後にあらわれる=s1>s2
戻り値の符号以外の意味は規定されていないようです。
なので正か負か、0か”だけ”を判断すべき、と分かります
0828817
2006/10/03(火) 20:47:18文字列を数値に変換する関数atoiについてなのですが
"atoi(文字列)
引数に指定した文字列を数値に変換した値を返します
char str[] = "123";
文字列strは「123」です。これは数値の123ではありませんので
数値に見なしてプラス1をした値を得たくても[str + 1]とはできません
このような時、atoi関数を使います。
int i;
char str[] = "123";
i = atoi(str) + 1;
変数は124になります。"
と参考書にはかいてあります。
>>引数に指定した文字列を数値に変換した値を返します。
と言うのの返しますと言うのが、いまいち難しいです。
次に
>>数値に見なしてプラス1をした値を得たくても[str + 1]とはできません
の意味が解りません・・・何故、プラス1が出てくるのか・・・。
0829デフォルトの名無しさん
2006/10/03(火) 20:50:06そうですか。
> の意味が解りません・・・何故、プラス1が出てくるのか・・・。
わかりませんか。そうですか。
0830817
2006/10/03(火) 20:50:21ご返答、ありがとうございます。
>>きっとstrcmpにstr1とstr2を渡したら戻り値が-3となって、i に代入されたのです
簡単に比喩で喩えると、どういう事でしょうかね?ご迷惑、申し訳ありません。
参考書は"10日で覚えるC言語"です。
0831デフォルトの名無しさん
2006/10/03(火) 20:52:23お礼は。
参考書名は。
お前の質問の前に、まず、
ここはお前のなんだと思ってるのか、教えてくれるか?
それとも殺して欲しいのか?
0832デフォルトの名無しさん
2006/10/03(火) 20:53:11strcmp の決まりごとは >>827 まで。
-3返すコンパイラもあれば、-1返すのもある。
0833デフォルトの名無しさん
2006/10/03(火) 20:55:51まず投稿する前に自分に言ってみたか?
何を伝えたいのか全くわからんよ
>>828
理解するのとは別に難しいならなれるしかない。
理解はしているか?
> >>数値に見なしてプラス1をした値を得たくても[str + 1]とはできません
> の意味が解りません・・・何故、プラス1が出てくるのか・・・。
俺にも作者の意図は分からない、
str+1 は 123+1でないことがわかればいい
詳しいことはもっと本を読むべし
0834817
2006/10/03(火) 20:56:11混乱してて自分でもよく解らなくなっています、一旦散歩でもして
頭冷やしてきます、ありがとうございました。m(__)m
0835デフォルトの名無しさん
2006/10/03(火) 21:01:11おまえは、まず>>833をやっつけてみろ。
ウザイ虫は潰してから集中するもんだろ。
0836デフォルトの名無しさん
2006/10/03(火) 21:01:55著者自身が解ってない人かもしれん。
使うなとは言わんが、あまり書いてあることを真に受けない方がいい。
とりあえず一通り目を通してから、
テンプレにあるような解説サイトなんかも見てみるべき。
0838デフォルトの名無しさん
2006/10/03(火) 21:28:59始めからその態度でいればよかったんじゃないか。
どこに行っても相手にされずに、行くところがなくなったらまた戻って来いよ。
0839デフォルトの名無しさん
2006/10/03(火) 21:53:24>>827
文字列と数値が違うものだってことは分かってる?
詳しいこと話しても理解出来ないだろうから簡単に説明するけど、
「数値」っていうのは、「数値」同士で足したり引いたり出来るモノ。
「文字列」ってのは、読んで字のごとく「文字」がならんで文章やデータを表したものだ。
"66" は文字列を表していて、数値ではない。数値じゃないから足したり引いたりってことは出来ない。
でも、atoi("66") とすると、文字列が表した66という数値が返ってくる。敢えて誤解を恐れずに言うと、
atoi("66") が66という数値。だから足したり出来るわけ。
66 + 1 // 数値 + 数値なので、結果は67
atoi("66") + 1 // 数値 + 数値なので、結果は67
"66" + 1 // 文字列 + 数値なので、間違い。67にはならない。
// (厳密には間違いではないが…。)
0840827
2006/10/03(火) 21:58:430841デフォルトの名無しさん
2006/10/03(火) 22:01:560842デフォルトの名無しさん
2006/10/03(火) 22:03:46827→817
0843827
2006/10/03(火) 22:09:46おお!これで悶々が解決しました気がします!!
サンクスでした!!!散歩した甲斐がありました。
0844827
2006/10/03(火) 22:11:46最後に質問なのですが、
>>"66" は文字列を表していて、数値ではない
と言う事ですが、"6"なら数値ですよね?
要は連なっていれば文字列と言う事でしょうか?
0845デフォルトの名無しさん
2006/10/03(火) 22:13:44"6"も文字列( {'6',0} という配列をちぢめて書いたもの)
まぁ、>>839さんのを何度もよんでみることです
0846827
2006/10/03(火) 22:18:08返答、ありがとうございます。
では、数値が何か(どういうものか疑問が又湧いてきます)
とにかくじっくり読んでみて数値と文字列の違いを理解したいと
思います。
0847デフォルトの名無しさん
2006/10/03(火) 22:21:290848デフォルトの名無しさん
2006/10/03(火) 22:26:04「1」ってかいてあったら、数値の1であるかもしれないし、文字の1かもしれないし、関数名の一部かもしれない
そこでコンパイラさんに「いまからint型の数値の1を書くからね」ということを教えたり、
「いまから文字列の abc を書くからね」と教えたりする必要が出てくる
一番なのは、話し言葉のようにコンパイラさんに全部伝えることだけれども、それではコーディングに支障がでる
そこで、(ある文脈における)”特別な書き方”をすることで、コンパイラさんに分かってもらわなきゃならなくなってくる
”int型の数値"として 1 を書いた場合、この”1”をint型のリテラルと呼ぶことにする
リテラルは「型とその実体」を表すものとしてプログラム中にしばしば現れる
int型のリテラルは 1I (たぶん)だったり、long型のリテラルは 1L だったりする
文字のリテラルは 'A' のようにシングルクォートで囲んでみたりできる
蛇足だが、文字のリテラルの”型”は char型 なので、文字リテラルが書いてあるところにはchar型に適合可能な型が変わりに入れられる
文字列のリテラルはchar型の配列+null終端文字を表す
C++にいたっては配列のリテラルが存在しているので、"abc"は{'a','b','c',0}に同一である
らしい
0849デフォルトの名無しさん
2006/10/04(水) 00:58:44Cというかコンパイラは、1やAを指定によりどう扱うかを決めてマシン語に変換してるだけ。
うまく動かないときにはイライラするけど、冷静にCPUやコンパイラの気持ちに成って考えてみるのが吉。
自分は絶対悪くない、C言語やコンパイルが悪いとか妄想しちゃう香具師はプログラム作成に向いてないよ。
漏れは他人のプログラムを解読するとイライラするのでプログラマに成るのは諦めた。
0850デフォルトの名無しさん
2006/10/04(水) 01:30:38気持ちは痛いほどわかるが、なら何故この板に居るw
0851デフォルトの名無しさん
2006/10/04(水) 01:31:370852デフォルトの名無しさん
2006/10/04(水) 01:36:40こんな簡単なのにね〜
0853デフォルトの名無しさん
2006/10/04(水) 02:16:50できない子って頭が悪い(=知能指数とかが低い)訳じゃなくて、十分な理解ができてないだけ。
0854デフォルトの名無しさん
2006/10/04(水) 03:28:56あの野郎しめてやって下さいよ
0855デフォルトの名無しさん
2006/10/04(水) 03:42:45fscanfを使わないで指定されたデータファイルから
データを読み込みデータ件数、最大データ長、最大値、最小値
を出力するプログラムはどうするのですか?
自分はfgetcを使うと思ってるのですが
お願いします教えてください
0856デフォルトの名無しさん
2006/10/04(水) 03:44:290857デフォルトの名無しさん
2006/10/04(水) 05:56:11i=5で初期化したあとiを使ってないよな。
変数に数値を代入したあと使っていない旨の警告がでたような
0858デフォルトの名無しさん
2006/10/04(水) 06:00:17400位のレスよんでたのに何をとちくるったのかレスしてしまった。
俺テラハズカシスorz
どんだけ亀なんだと
0859デフォルトの名無しさん
2006/10/04(水) 06:02:05吊ってくるノシ
0860デフォルトの名無しさん
2006/10/04(水) 17:04:310861デフォルトの名無しさん
2006/10/04(水) 17:10:322進数16桁の加減算プログラムをmain関数で作成するのですが、
加算はできたのですが、減算のプログラムがイマイチできません。
加算のプログラムに追加しなければいけない、プログラムはなんでしょうか?
桁上がりを考慮したプログラムです。
どなたかわかりませんか?
0862デフォルトの名無しさん
2006/10/04(水) 17:12:490863デフォルトの名無しさん
2006/10/04(水) 17:13:260865デフォルトの名無しさん
2006/10/04(水) 17:16:59加算用を使えばいい。
0866デフォルトの名無しさん
2006/10/04(水) 17:18:270867デフォルトの名無しさん
2006/10/04(水) 17:19:210868デフォルトの名無しさん
2006/10/04(水) 18:45:322の補数を使うのが分かってるなら、引く数を2の補数にして
加算ルーチンに入れればOK
2の補数が分からないのなら、全ビット反転して1足せばよい。
1足すのは加算があるから問題ないでしょ
0869デフォルトの名無しさん
2006/10/04(水) 19:48:300870デフォルトの名無しさん
2006/10/08(日) 11:37:17マイクロソフトのは登録(クレカ決済?)が必要でした。orz
0871デフォルトの名無しさん
2006/10/08(日) 11:40:03Cだけで作るのは難しいんで内科医?
0872デフォルトの名無しさん
2006/10/08(日) 11:59:060873(^-^) ◆MONSOON/qo
2006/10/08(日) 12:12:38C# ( ++++ )
から一気にC*(乗法)か
進化だな
0874デフォルトの名無しさん
2006/10/08(日) 13:40:390875デフォルトの名無しさん
2006/10/08(日) 16:25:300876デフォルトの名無しさん
2006/10/08(日) 16:50:320877デフォルトの名無しさん
2006/10/08(日) 18:10:46malloc()やrealloc()でメモリを確保するじゃないですか
その後free()で開放するとき、バッファのサイズを指定せずに
どうやって正確にメモリを開放しているのでしょうか?
特殊な変数にでも値を保存しているんですか?
0878デフォルトの名無しさん
2006/10/08(日) 18:12:52大抵の処理系は、malloc()系の関数で領域を確保する際に、その領域の直前に
サイズを記憶している。
0879デフォルトの名無しさん
2006/10/08(日) 18:15:28早い回答ありがとうございます。
0880デフォルトの名無しさん
2006/10/08(日) 18:15:46もちろん未定義の動作となるので実行は自分の責任で。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *i = malloc(16384);
printf("%d\n", *(i - 1));
free(i);
return 0;
}
0881デフォルトの名無しさん
2006/10/08(日) 23:30:12Cにおいて、文字リテラルはchar型ではなくint型だ。
# C++ではchar型だがな
0882デフォルトの名無しさん
2006/10/09(月) 01:01:42Windowsのテキストモードの改行コードって何か教えてください
0883デフォルトの名無しさん
2006/10/09(月) 01:30:460884デフォルトの名無しさん
2006/10/09(月) 01:44:080885デフォルトの名無しさん
2006/10/09(月) 01:53:39書くの面倒だし。
テキストモードが存在する理由をあなたが書いてあげてください。
0886デフォルトの名無しさん
2006/10/09(月) 02:33:03いや、その、なんだ・・・ねぇ
0887デフォルトの名無しさん
2006/10/09(月) 03:28:09寧ろ、
\r\n
かと。
0888デフォルトの名無しさん
2006/10/09(月) 03:39:50ウインドウズだから¥のほうが親切なんじゃないの?
大文字なのはわざとです。
0889デフォルトの名無しさん
2006/10/09(月) 03:41:42読み替えて。
0890デフォルトの名無しさん
2006/10/09(月) 03:56:12#include <stdlib.h>
main () {
FILE *fp;//ファイルポインタ
char c;//読み込んだ文字を格納する
char str[8]; //読み込んだ文字列を格納する
//ファイルを1文字ずつ読み込む
if((fp = fopen("test.txt", "r")) == NULL)
{//ファイルがオープンできなかった場合の処理 printf("ファイルオープンエラー\n");
exit(1); //強制終了する}
while((c = fgetc(fp)) != EOF) {printf("%c", c);}
fclose(fp);
//ファイルをまとめて読み込む
if((fp = fopen("test.txt", "r")) == NULL)
{printf("ファイルオープンエラー\n"); exit(1);}
while(fgets(str, 7, fp)) {printf("%s", str);}
fclose(fp);
return 0;
}
0891デフォルトの名無しさん
2006/10/09(月) 03:57:43エラー E2134 5-01.c 28: 複合文に } がない(関数 main )
警告 W8070 5-01.c 28: 関数は値を返すべき(関数 main )
*** 1 errors in Compile ***
と出てしまいます、"{}"の括弧数は足りているはずです。
ご指導、お願い致します。
0892890-891
2006/10/09(月) 04:03:32#include <stdio.h>
#include <stdlib.h>
main(){
FILE *fp; //ファイルポインタ
char c; //読み込んだ文字を格納する
char str[8]; //読み込んだ文字列を格納
//ファイルを一文字ずつ読み込む
if((fp = fopen("test.txt","r")) == NULL)
{//ファイルがオープンできなかった場合の処理 printf("ファイルオープンエラー\n");
exit(1); //強制終了する}
while((c = fgetc(fp)) != EOF) {printf("%c",c);}
fclose(fp);
//ファイルを纏めて読み込む
if((fp = fopen("test.txt","r")) == NULL)
{printf("ファイルオープンエラー\n"); exit(1);}
while(fgets(str,7,fp)) {printf("%s",str);}
fclose(fp);
}
return 0;
}
0893890-891
2006/10/09(月) 04:07:10●ファイルは、通常、自分でエディタやその他の専用ソフトから作成したり、中を読んだ
りコピーしたりできます。C言語では、ファイルを扱う関数が用意されているので、プロ
グラムからでもファイルの中身を読んだりファイルを作成することができます。ファイル
の中身を読み込むことをファイル入力、ファイルへデータを書き出すことをファイル出力
と言います。
●ファイルは、通常、自分でエディタやその他の専用ソフトから作成したり、中を読んだ
りコピーしたりできます。C言語では、ファイルを扱う関数が用意されているので、プロ
グラムからでもファイルの中身を読んだりファイルを作成することができます。ファイル
の中身を読み込むことをファイル入力、ファイルへデータを書き出すことをファイル出力
と言います。
でも、上のように表示されません、こう表示されるだけです。
C:\source>そのファイル名
だけの入力待ちになってしまいます。
0894デフォルトの名無しさん
2006/10/09(月) 04:10:57{//ファイルがオープンできなかった場合の処理 printf("ファイルオープンエラー\n");
exit(1); //強制終了する}
この書き方がおかしすぎでしょ
0895(^-^) ◆MONSOON/qo
2006/10/09(月) 04:11:22↓
//強制終了する
}
0896デフォルトの名無しさん
2006/10/09(月) 04:13:170897890-891
2006/10/09(月) 04:14:53#include <stdlib.h>
main () {
FILE *fp;//ファイルポインタ
char c;//読み込んだ文字を格納する
char str[8]; //読み込んだ文字列を格納する
//ファイルを1文字ずつ読み込む
if((fp = fopen("test.txt", "r")) == NULL) {
//ファイルがオープンできなかった場合の処理
printf("ファイルオープンエラー\n");
exit(1); //強制終了する
}
while((c = fgetc(fp)) != EOF){
printf("%c", c);
}
fclose(fp);
//ファイルをまとめて読み込む
if((fp = fopen("test.txt", "r")) == NULL) {
printf("ファイルオープンエラー\n");
exit(1);
}
while(fgets(str, 7, fp)){
printf("%s", str);
}
fclose(fp);
return 0;
}
こうすれば、>>893の文章が表示されます。{}括弧をずらしたらエラーがでるんでしょうか?
0898デフォルトの名無しさん
2006/10/09(月) 04:16:52//は行末までコメント。大事なものがコメントアウトされて内科医?
>>893
DOSプロンプトの使い方なら鼬害。
プログラミングの話なら具体的にどうぞ。
0899890-891
2006/10/09(月) 04:17:41>>895
何故、そのようにしなければいけないんでしょうか?
強制終了と言うコメントを消して
if((fp = fopen("test.txt", "r")) == NULL)
{ printf("ファイルオープンエラー\n"); exit(1); }
とすれば宜しいんでしょうか?
0900890-891
2006/10/09(月) 04:22:24????
と言うと、コメントが{}の中に入る場合は、
//強制終了する}
↓
//強制終了する
}
ようにずらせばいいのでしょうか?
>>896
コメント消して、こうしたら成功しました。
0901デフォルトの名無しさん
2006/10/09(月) 04:22:52そもそもCの仕様に//でのコメントは無かったような
0902890-891
2006/10/09(月) 04:23:14#include <stdlib.h>
main(){
FILE *fp; //ファイルポインタ
char c; //読み込んだ文字を格納する
char str[8]; //読み込んだ文字列を格納
//ファイルを一文字ずつ読み込む
if((fp = fopen("test.txt","r")) == NULL)
{ printf("ファイルオープンエラー\n"); exit(1);}
while((c = fgetc(fp)) != EOF) {printf("%c",c);}
fclose(fp);
//ファイルを纏めて読み込む
if((fp = fopen("test.txt","r")) == NULL)
{printf("ファイルオープンエラー\n"); exit(1);}
while(fgets(str,7,fp)) {printf("%s",str);}
fclose(fp);
return 0;
}
やはりコメントを消すか、{}ずをらすかしなければいけないようですね。
0903デフォルトの名無しさん
2006/10/09(月) 04:25:45/* 強制終了する */ }
これなら通るだろ。
0904890-891
2006/10/09(月) 04:29:060905デフォルトの名無しさん
2006/10/09(月) 04:33:420906890-891
2006/10/09(月) 04:43:08違うコンバータの事でしょうか?
もう一つ質問ですが
"%c"とは文字Cの事ですよね?
夜分遅くお騒がせひて、すみません。
0907デフォルトの名無しさん
2006/10/09(月) 04:48:380908デフォルトの名無しさん
2006/10/09(月) 04:49:50文字Cというより、先のソースコードではcを文字として。
0909890ー891
2006/10/09(月) 04:50:440910デフォルトの名無しさん
2006/10/09(月) 04:57:01cの値が同じでも表示が変わるでしょう。
VSを使えば、実行中のcの値がエディタ上で見られるので、
そのあたりの理解が早いと思う。
先の書き込みを見る限り、今お使いのコンパイラはそれほど
わかりやすいエラー内容を表示しないようですし、
VSを使ったほうがいいんじゃないかと思いました。
0911890ー891
2006/10/09(月) 05:06:21是非、ぐぐってみます。
0912(^-^) ◆MONSOON/qo
2006/10/09(月) 05:38:20始めて使ってみたけど
0913デフォルトの名無しさん
2006/10/09(月) 06:09:27これは最も有名ななぞなぞの一つだ
答えの設定はご存知の通り「フライパン」
この答えをどうボケたら面白くなるのだろうか
普通に食べられないパンを言う
解:腐ったパン
フライパンを間違えてみる
解:ナベ
別のパンと付くものにしてみる
解:パンツ
下ネタにしてみる
解:うんこパン
「食べられない」を間違える
解:フランスパン
「なぞなぞ」を「質問」と間違えてみる
解:コロネが苦手です
すべて間違える
解:乳輪大納言
0914デフォルトの名無しさん
2006/10/09(月) 06:12:04すまない
0915デフォルトの名無しさん
2006/10/09(月) 06:28:32これは最も有名ななぞなぞの一つだ
答えの設定はご存知の通り「フライパン」
この答えをどうボケたら面白くなるのだろうか
0916(^-^) ◆MONSOON/qo
2006/10/09(月) 06:55:56昨日、nビット目が1かどうか調べる方法を聞いたんですが
それについて質問なんですけど
(x>>j)&1と書くところを間違えて(x<<j)&1 (xはchar型、jは8未満)と書いてコンパイルしてしまいました
とりあえずは動いたのですが正しい式にすると実行時にエラーで止まってしまいます
なぜでしょうか?
0917(^-^) ◆MONSOON/qo
2006/10/09(月) 07:15:57char型とint型を間違えていました
0918デフォルトの名無しさん
2006/10/09(月) 09:17:01この板的な反応を返す
解:スレ違いだボケ、氏ね
0919デフォルトの名無しさん
2006/10/09(月) 09:26:58本当に(ry
0920デフォルトの名無しさん
2006/10/09(月) 14:05:140921デフォルトの名無しさん
2006/10/09(月) 14:21:300922デフォルトの名無しさん
2006/10/09(月) 14:44:19ここまで
*/
0923デフォルトの名無しさん
2006/10/09(月) 14:59:240924デフォルトの名無しさん
2006/10/10(火) 07:36:39同じ問題を3次元で解くのに、3次元配列つかったら上手くいきません。
コンパイルはするのですが、プログラムが作動しません。
何かいい手はないですか?
0925デフォルトの名無しさん
2006/10/10(火) 07:39:59簡易電卓プログラムを作成せよ。
というプログラムなんですが・・・
よろしくお願いします。
0926デフォルトの名無しさん
2006/10/10(火) 08:21:29いえいえこちらこそよろしくお願いします^^
0927デフォルトの名無しさん
2006/10/10(火) 09:38:02C/C++の宿題を片付けます 74代目
http://pc8.2ch.net/test/read.cgi/tech/1158844912/l50
0928デフォルトの名無しさん
2006/10/10(火) 23:54:400929デフォルトの名無しさん
2006/10/11(水) 00:05:350930デフォルトの名無しさん
2006/10/11(水) 04:06:33#include <stdlib.h>
main(){
//ファイル改行数を数える
FILE *fp; //ファイルポインタ
char filename[256]; //ファイル名
char c;//読み込んだ文字
int total = 0; //改行文字をカウントする変数
//ファイル名決定
printf("ファイル名を入力して下さい > ");
gets(filename);
//ファイルオープン
if((fp = fopen(filename,"r")) == NULL);
{printf("ファイルオープンエラー\n"); exit(1);}
//ファイル読み込み
while((c == fgetc(fp)) != EOF)
{if(C == '\n') {total++;}}
fclose(fp);
printf("行数 %d\n", total+1);
return 0;
}
エラー E2451 5-2.c 22: 未定義のシンボル C(関数 main )
*** 1 errors in Compile ***
これで何故かエラーがでます、ご指導宜しくお願い致します。
0931デフォルトの名無しさん
2006/10/11(水) 04:07:40此処に書いたら、Cが大きくなってるのにきづきました
0932デフォルトの名無しさん
2006/10/11(水) 04:13:45これを実行すると
ファイル名を入力して下さい > janken
ファイルオープンエラー
とエラーをおこしてしまいます
ディレクトリ内にエディッタがあるにもかかわらずです
ソースに誤りがあるのでしょうか?是非、ご指導お願い致します
0933デフォルトの名無しさん
2006/10/11(水) 04:56:32char c;//読み込んだ文字 → int c;//読み込んだ文字
if((fp = fopen(filename,"r")) == NULL); → if((fp = fopen(filename,"r")) == NULL)
while((c == fgetc(fp)) != EOF) → while((c = fgetc(fp)) != EOF)
一行一行何をやってるのか考えながらコーディングすれば間違いは減らせる。
あと、getsを使う癖をつけてはいけない。必ずfgetsを使うように。
0934デフォルトの名無しさん
2006/10/11(水) 04:58:18???
本当にファイルがあるか証明出来る?
0935932
2006/10/11(水) 05:05:46ありがとうございます。
微妙な変化にきづきませんでした。
やはり書き直しても、
ファイル名を入力して下さい > janken
ファイルオープンエラー
になってしまいます・・・
>>934
証明はできません、すみません
エラーって事は、やはりないんですかね?
0936デフォルトの名無しさん
2006/10/11(水) 05:15:06エラーメッセージからみてBCCだと思うのでWindowsと思うが、
5-2.exeがあるディレクトリがカレントディレクトリになっているとして、
dir janken
で、ファイルがない旨表示されればファイルはそのディレクトリには無い。
0937デフォルトの名無しさん
2006/10/11(水) 05:16:100938デフォルトの名無しさん
2006/10/11(水) 05:19:350939デフォルトの名無しさん
2006/10/11(水) 05:20:43BCCです。だとすると、もしかしたらそこにないのかも?しれません
もう一度、考えてみます
>>937
閉じています
黎明までつきあって頂き、ありがとうでした。
0940デフォルトの名無しさん
2006/10/11(水) 05:22:34普通のメモ帳使っています。
0941デフォルトの名無しさん
2006/10/11(水) 05:31:500942デフォルトの名無しさん
2006/10/11(水) 05:33:190943デフォルトの名無しさん
2006/10/11(水) 05:35:030944デフォルトの名無しさん
2006/10/11(水) 05:40:02電源落としてしまったので、起きたらやってみます
0945デフォルトの名無しさん
2006/10/11(水) 08:05:440946デフォルトの名無しさん
2006/10/11(水) 08:21:490947デフォルトの名無しさん
2006/10/11(水) 11:50:48jpeg画像になったと思うやつもいるしな。。
0948デフォルトの名無しさん
2006/10/12(木) 02:48:17これが読めない
0949デフォルトの名無しさん
2006/10/12(木) 03:08:140950デフォルトの名無しさん
2006/10/12(木) 03:28:19プロンプトで正確に表示されました。
C:\aaa>5-2
ファイル名を入力して下さい > janken.c
行数 35
そこでジャンケンエディッタとの行数が合いません・・・
何度数えても・・・
0951デフォルトの名無しさん
2006/10/12(木) 03:29:11#include <time.h>
#include <stdlib.h>
main(){
int player = 0, computer;
srand(time(NULL));
printf("【ジャンケンゲーム】\n");
//プレイヤーの手を入力
printf("ジャンケンゲーム・・・(グー:1 チョキ:2 パー:3を入力) > ");
scanf("%d", &player);
computer = rand()%3 + 1;
printf("コンピュターは");
if(computer == 1) {printf("グー");}
else if(computer == 2) {printf("チョキ");}
else {printf("パー");}
printf("! ");
if(computer == player){printf("あいこ\n");}
else if(player == 1 && computer == 2) {printf("プレイヤーの勝ち\n");}
else if(player == 2 && computer == 3) {printf("プレイヤーの勝ち\n");}
else if(player == 3 && computer == 1) {printf("プレイヤーの勝ち\n");}
else{printf("コンピュターの勝ち\n");}
return 0;
}
janken.cです。
0952デフォルトの名無しさん
2006/10/12(木) 03:30:58その説明がいまいちつかめません。
ファイルの行数の数え方
【ファイル1】
aaa(改行文字)
bbbb(改行文字)
【ファイル2】
aaa(改行文字)
bbbb(改行文字)
(EOF)
ファイル1の行数は2、ファイル2の行数は3になります。
つまりファイルの行数をカウントするには、ファイルの中に出てくる
改行文字の数を数えて、それに1を足した数字を算出します。
ファイルの中身はfgetc関数を使って1文字づつ読み込みます。
※参考書より文章抜粋
これらの意味が、よくわかりませんので、教授お願い致します。
0953デフォルトの名無しさん
2006/10/12(木) 03:34:58これの意味が掴めないんです。
0954デフォルトの名無しさん
2006/10/12(木) 03:39:16EOFは改行文字ではないので、EOFを改行文字と数えるかどうかで
結果が異なる。通常はファイル1もファイル2も2行。
0955(^-^) ◆MONSOON/qo
2006/10/12(木) 03:47:23しかしNULLが返ってくるのは違う?
0956デフォルトの名無しさん
2006/10/12(木) 03:48:51もしかしてNUL文字の事を言っているならお門違い。
0957デフォルトの名無しさん
2006/10/12(木) 03:50:09通常なら数えなくてもいいみたいですね。
ありがとうございます。
>>>改行文字の数を数えて、それに1を足した数字を算出します。
これが、どう考えてもわかりません
0958デフォルトの名無しさん
2006/10/12(木) 03:51:43それは最後の行が改行文字で終わってないファイルの時だろ。
面倒だからfgets()で読めよ。
0959デフォルトの名無しさん
2006/10/12(木) 03:59:36fgets()を使い読めよばいいのですね
わかりました。
0960デフォルトの名無しさん
2006/10/12(木) 04:01:52C:\aaa>5-2
ファイル名を入力して下さい > janken.c
行数 35
と算出された行数です、たぶん改行が関係してると
自分なりに解釈していますが・・・
0961デフォルトの名無しさん
2006/10/12(木) 04:06:31各改行が一個文なので、total + 1 と解釈しています。
0962デフォルトの名無しさん
2006/10/12(木) 04:11:01単に一番下の } の後に無駄に改行入れてるだけでは?
0963デフォルトの名無しさん
2006/10/12(木) 04:17:42う〜ん、こっちだと35になるのですが・・・
やはりムダによみこまれているのですかね
0964デフォルトの名無しさん
2006/10/12(木) 04:23:09すみません、30でした。こっちのミスでした。
他にも、この
fclose(fp);
printf("行数 %d\n", total+1);
の total+1 が説明を読んでも理解し難いです
このtotal+1が何をさしてるのかが
0965デフォルトの名無しさん
2006/10/12(木) 04:45:55>>>改行文字の数を数えて、それに1を足した数字を算出します。
信じられないならtotal自体の値をprintf(totalの値: %d\n,total);とでもして表示汁
で、その値が実際調べるファイルの行数より1少ないなら、少なくとも君の環境(&その本の著者の環境)では
正しい行数を表示するにはtotalに(つまり改行文字の数に)1足さなければならない証左になる
0966デフォルトの名無しさん
2006/10/12(木) 04:47:050967デフォルトの名無しさん
2006/10/12(木) 05:12:10はい、では改行で+1が必要なのは>>961で書いた解釈で
宜しいみたいですね。
ちょっと、混乱して {totl++;} と混同している部分もあるみたいです
質問ばかりで、申し訳ありませんが、int total = 0 にするのは
{total++;} でインクリメントするのと関係あるからでしょうか?
もしくは、単に初期化という意味なのでしょうか?
参考書には詳しく説明はされていません、明日にでも本屋行って
わかりやすいのを買ってきます、余談ですが。
0968デフォルトの名無しさん
2006/10/12(木) 05:29:26についてはわかりますた、インクリメントの++ と整理が
ついたみたいです
0969デフォルトの名無しさん
2006/10/12(木) 05:44:01と言う理由が難しい、自分が一番わからないのはそこだと思いました
とにかく混乱してるみたいなので、書いてもらった事を参考に
改めて考えたいと思います、スレを占領して申し訳ないです。
0970デフォルトの名無しさん
2006/10/12(木) 05:48:16ってhelloっていう新しい関数使って
こんにちは。って表示して改行したいんだが
できん・・・
void なんちゃら(int no)
とか
int なちゃら(void)
はできるんだが
両方voidになるとわからん・・・;;;
さらに新しい関数を作ったほうがいいのかなぁ・・・
たすけてくれー
0971デフォルトの名無しさん
2006/10/12(木) 06:23:14#include <stdio.h>
void hello(void)
{
printf(" ヘ_ヘ\n");
printf("ミ・・ ミ\n");
printf("( )〜\n");
}
int main(void)
{
hello();
}
0972デフォルトの名無しさん
2006/10/12(木) 06:26:440973(^-^) ◆MONSOON/qo
2006/10/12(木) 06:33:42終端までいくと自動で終了しますから
プログラムの途中で終了するときは入れてみてください
0974デフォルトの名無しさん
2006/10/12(木) 06:58:36ってかそうだよな
無駄にprintfとかつかってしまった・・・
ありがとう。
0975デフォルトの名無しさん
2006/10/12(木) 06:59:41終端で自動で終了することと返り値なしであるように書いてもmainでは警告しないこととは別の話
0976デフォルトの名無しさん
2006/10/12(木) 07:33:050977デフォルトの名無しさん
2006/10/12(木) 07:42:17C++だけでなくC99でもmainのreturnは省略できる。
もちろんmain関数の終わりでreturn 0;扱い。
gccはC99対応しているから、デフォルトで警告を出さないのも不思議ではない。
0978(^-^) ◆MONSOON/qo
2006/10/12(木) 07:44:29int main
を統一的に扱うにはReturnを入れない方がいい
0979デフォルトの名無しさん
2006/10/12(木) 08:04:380980デフォルトの名無しさん
2006/10/12(木) 08:32:540981デフォルトの名無しさん
2006/10/12(木) 09:01:19void型のものは「関数」とは呼ばない。
0982デフォルトの名無しさん
2006/10/12(木) 09:21:12てか、そうだとすると関数って何ナノ?
0983デフォルトの名無しさん
2006/10/12(木) 10:49:00(C++規格3.6.1.2)(C99規格5.1.2.2.1.1)
int main() 内の return 文は exit() を呼ぶ
(C++規格3.6.1.5)(C99規格5.1.2.2.3.1)
int main() の末尾までに return 文に出会わなければ return 0; と同じ結果になる
(C++規格3.6.1.5)(C99規格5.1.2.2.3.1)
→ 結果として exit(0) が呼ばれる
main() の返値が int と互換性がない場合、それは規格上の終了ステータスとしては扱われない
(C99規格5.1.2.2.3.1)
よって ◆MONSOON/qo は肉蝿
0984デフォルトの名無しさん
2006/10/12(木) 11:04:18しかし肉蝿ってなんて読むんだ。ニクフライ?
0985デフォルトの名無しさん
2006/10/12(木) 11:22:230986デフォルトの名無しさん
2006/10/12(木) 14:55:31basicでも使ってろクズ。
0987デフォルトの名無しさん
2006/10/12(木) 16:52:160988デフォルトの名無しさん
2006/10/12(木) 18:49:120989デフォルトの名無しさん
2006/10/12(木) 20:39:02一応つっこむがC99: int main(void)とC++: int main()も受け付けることになっているだろ。
無論C++はそこからint main(void)も良いということになるが。
0990デフォルトの名無しさん
2006/10/13(金) 01:36:180991デフォルトの名無しさん
2006/10/13(金) 01:42:380992デフォルトの名無しさん
2006/10/13(金) 02:06:53俺なんかに頼らず俺に聞いてくれ
0993デフォルトの名無しさん
2006/10/13(金) 03:36:08昨夜は助言、ありがとうございます。
実行したした結果、printf(totalの値: %d\n,total); だと
ファイル名を入力して下さい > janken.c
totalの値: 30
printf(totalの値: %d\n,total + 1); だと
ファイル名を入力して下さい > janken.c
totalの値: 31
と表示されました、又疑問なのですが
何故、自分の環境だとt
totatに(つまり改行文字の数に)1足さなければならないのでしょうか?
>>958にかいてあるからでしょうか?
もう一つは、
ファイルの行数の数え方
【ファイル1】
aaa(改行文字)
bbbb(改行文字)
【ファイル2】
aaa(改行文字)
bbbb(改行文字)
(EOF)
ファイル1の行数は2、ファイル2の行数は3になります。
で、ファイル2の行数は3とは、(EOF) を数えないで
その +1 だから3になるからでしょうか?
0994デフォルトの名無しさん
2006/10/13(金) 03:49:41ファイル2のみ終端文字が入ってるなら、それを1行と数えて
3になるのは正しい動作に思えるが、納得いかんかね。
0995デフォルトの名無しさん
2006/10/13(金) 03:56:57>>954をみると改行文字ではなみたいなので
先ほどから出ている環境設定の違いの +1 を
使うのかと思いました。
では、EOFを改行文字として1文字文と数えるのでしょうか?
0996デフォルトの名無しさん
2006/10/13(金) 04:09:150997デフォルトの名無しさん
2006/10/13(金) 04:14:50aaa(改行文字)
bbbb(改行文字)
ぬるぽ(改行文字なしで終端)
これは3行だべ?
終端文字しかない行をカウントしたくないなら、それはそれでちゃんと処理してやる必要がある。
が、それだけの問題だと思われ。
0998デフォルトの名無しさん
2006/10/13(金) 04:19:14一行目\r\n
\x1A[EOF]
(2)
一行目\r\n
[EOF]
(3)
一行目[EOF]
まあWindowsでテキストモードで扱うなら、これだけ種類がある罠
0999デフォルトの名無しさん
2006/10/13(金) 04:24:51それはfgets()でうまく処理できるべ。
1000デフォルトの名無しさん
2006/10/13(金) 04:25:00>>997
では、最後に行がなくてもカウントしてもいいのですね
では>>993で述べた、
>>何故、自分の環境だとtotatに(つまり改行文字の数に)1足さなければならないのでしょうか?
で、何故自分の環境だと1を足さなければならないのかが
他の参考書などを調べましたが解決しません・・・・
理由は改行文字で終わってないなら 1を足さなければならないからですかね?
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。