[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 04/25 21:15 / Filesize : 282 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

スレを勃てるまでもないC/C++の質問はここで 2



1 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 11:02:46 ]
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。

スレを勃てるまでもないC/C++の質問はここで
pc11.2ch.net/test/read.cgi/tech/1167476845/


175 名前:デフォルトの名無しさん [2007/06/07(木) 01:21:19 ]
catch(...)しているのに例外をcatchできないんですが、
原因は何が考えられるのでしょうか?
スタック破壊でcatchできなくなることあったりするのでしょうか?



176 名前:デフォルトの名無しさん mailto:sage [2007/06/07(木) 01:34:32 ]
コンパイラおよびコンパイル時のオプション指定にもよる。

177 名前:デフォルトの名無しさん mailto:sage [2007/06/07(木) 02:29:05 ]
案外、try{}の外で例外が発生していたりして。

再現性があり、デバッガ上で再現できて、
デバッガに、
例外が発生したらcatchされていても構わずブレークする
という機能があれば、それで例外の発生箇所をチェックしてみたらどうでしょう。

案外、別のスレッドだったりして。

178 名前:デフォルトの名無しさん mailto:sage [2007/06/07(木) 10:56:54 ]
C、及びC++の拡張子はそれぞれ何が標準ですか?
cだとcでc++だとcppでよいのでしょうか?
cxxとかもたまに見かけるのですが。
あとhppってどのようなときに使うのでしょうか?

179 名前:デフォルトの名無しさん mailto:sage [2007/06/07(木) 13:51:59 ]
>>178
> cだとcでc++だとcppでよいのでしょうか?

ok。

> あとhppってどのようなときに使うのでしょうか?

C++でしか使えないことを暗に示すとか、
.cに対する.cppと対称のほうがカッコイイとか。


180 名前:デフォルトの名無しさん [2007/06/07(木) 14:36:36 ]
ifの中にifは使えますか?

181 名前:デフォルトの名無しさん mailto:sage [2007/06/07(木) 14:42:13 ]
>>180
{ } の中には使えますが
( ) の中には使えません。

182 名前:デフォルトの名無しさん [2007/06/07(木) 17:42:52 ]
とある理由でオンライン対戦カードゲーム(オリジナル)を作る事に決めました。
それで質問なんですが、C++はホスト型の対戦ゲームを作るのには使えるのでしょうか?
ホストの人ににもう一人がIP接続してプレイする感じです。
対応していなければいけねい様なので・・・。

183 名前:デフォルトの名無しさん mailto:sage [2007/06/07(木) 17:43:52 ]
そういう質問をする時点で前途多難だな・・・
まあキミが希望することは可能



184 名前:デフォルトの名無しさん mailto:sage [2007/06/07(木) 18:52:00 ]
.NET remotingのTCPChannel使ってTCP接続でできる
ホスト側にスレッドを持たせてここの接続をそいつらで管理するようにすれば
マルチプレイも可能

185 名前:デフォルトの名無しさん mailto:sage [2007/06/07(木) 20:30:48 ]
>>182
#include <stdio.h>

int main(void)
{
printf("%c %c %c %c %c %c\n",110,117,114,117,112,111);
return 0;
}


186 名前:デフォルトの名無しさん mailto:sage [2007/06/07(木) 20:52:12 ]
>>185
unsigned long m = 0x00afdeb6 ;
puts(&m) ;


187 名前:デフォルトの名無しさん mailto:sage [2007/06/07(木) 22:35:08 ]
>>172-174
遅くなりましたが、ありがとうございます。
小生まだ大学生でも高専生でもありませんので宿題ではないのですが、個人的な趣味にしようとおもってCを勉強しています。
大学に行けば勉強できるのですけど、早くなれて自分で簡単なゲームぐらいは作れるようにしたいので簡単なプログラムでも書いてコーディングの練習をしてみようかなと思ってやってます。
一応、フローチャートは書いておいたのですが、どうもコーディングの技術がないようで未だにポインタとか変数の型とかifやforの()内の構文なんかがまだ理解できてないみたいです。

これからも精進していきますが、また質問などするばあいもあるとおもいますのでその時はよろしくおねがいします。


188 名前:デフォルトの名無しさん mailto:sage [2007/06/07(木) 22:40:06 ]
>>187で書いておいていきなりなのですが、さきほどマジックナンバーの意味がわからずwikiで調べてみましたがよく意味がわかりませんでした。
マジックナンバーとは、私の書いたコードでいえば26や255にあたるものと考えてもいいのでしょうか?

また、その場合マジックナンバーを使わないとはどういうことでしょうか?
たとえば、26に初期化した整数型の変数をとってそれを利用しろということでしょうか?

189 名前:デフォルトの名無しさん mailto:sage [2007/06/07(木) 23:06:08 ]
>>188
一番悪い例は、65だな。

190 名前:デフォルトの名無しさん [2007/06/07(木) 23:09:19 ]
当方vistaユーザーなのですが、
C言語を使ったプログラムのコンパイルができず困っております。
.c→.obj→.exe という手順なのはわかるのですが・・・。コンパイルをするためのソフトウェアがあるようですが・・・
なくてもできる という書き込みも目にしました。
フリーソフトをDLして挑戦してみたもののどこかでミスが発生し失敗してしまいます。

大変無知な質問で申し訳ないのですが、どなたかご教授いただけないでしょうか。

191 名前:デフォルトの名無しさん mailto:sage [2007/06/07(木) 23:14:16 ]
そのフリーソフトは何?

> なくてもできる
それはエスパー解釈すると.cファイルを書くためのエディタなどのことだと思われる
コンパイルするソフトウェア(コンパイラ)は必須
使わないとすれば、それは人間が頭でそれに相当する作業を行うとき

どこかってどこ?なんかメッセージとか表示されないの?

192 名前:デフォルトの名無しさん mailto:sage [2007/06/07(木) 23:23:46 ]
>>190
よく分らないがCPadでも使っとけ、10分ではじめるBCCを読めば初心者でも
何とかなると思う。
ttp://hp.vector.co.jp/authors/VA017148/pages/cpad.html
Borland C++Compiler 5.5.1をダウンロードする場所が変わったから注意
ttp://www.codegear.com/jp/downloads/free/cppbuilder

193 名前:デフォルトの名無しさん [2007/06/07(木) 23:51:09 ]
>>188
マジックナンバーってのはコード中に直接数字を書くことだね。
マクロや const int を使って文字にした方がいい。
値の意味がわかるようにするのと数字の値は変えたくなることが
多いのでいっぺんに変えられるようにってことで。



194 名前:190 [2007/06/08(金) 00:01:38 ]
みなさんレス感謝。

>>192
インストールも異常なく終わりました。
有難うございます。

195 名前:デフォルトの名無しさん [2007/06/08(金) 00:20:53 ]
現在VC6.0でsubst相当のことをやろうとしているのですがDefineDosDeviceを
使えばできそうだというとこまではわかったのですがドライブの解除時に
そのドライブを使用していたら(エクスプローラで開いている等)
エラーメッセージを出すということをしたいのですが
探し方が悪いのかよい方法が見つかりません。

申し訳ありませんがどなたか教えていただけないでしょうか?お願いします。

196 名前:デフォルトの名無しさん [2007/06/08(金) 00:51:51 ]
大域変数の配列A[k]の2次元版
例えばA[i,j] = 2 みたいに値を入れていく表みたいなものってCではどう書けばいいのですか?

197 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 00:59:23 ]
A[i][j] = 2;

198 名前:デフォルトの名無しさん [2007/06/08(金) 01:28:42 ]
>>197
ありがとうございます!

199 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 07:40:15 ]
>>187
> 小生まだ大学生でも高専生でもありませんので宿題ではないのですが、個人的な趣味にしようとおもってCを勉強しています。

ごめんな。学校の宿題をネットで片付けようとする輩が多いもんで、つい。

> 大学に行けば勉強できるのですけど

進学先は慎重に選ぼう。
2chのプログラマ板の悲惨な住人達のようにならないように。

プログラムも書く○○の専門の職業
というのはいいけれども、
プログラムを書くのが専門の職業
というのは、地獄です。

> どうもコーディングの技術がないようで未だにポインタとか変数の型とかifやforの()内の構文なんかがまだ理解できてないみたいです。

たとえば英語の勉強では、
文法を理解しさえすればネイティブの人達のような文章が書けるというわけではなくて、
文法を学びつつ、例文をたくさん読んで、使い方を覚えるよね。

プログラム言語も同じで、他人の書いたプログラムを読んで、使い方を覚えたほうがいいです。
今なら、オープンソースのソフトがネットでたくさん公開されているので、それらを見るのがいいです。


200 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 08:01:35 ]
>>188
マジックナンバーを使わないというのは、

たとえば、
for(a=0; a<26; a++) {
ならば、
for(a=0; a< ('Z'-'A'+1); a++) {
と書いたほうがいい。

AからZまでの文字数は変ることはないので、
for(a=0; a<26; a++) { /* AからZまでは26文字*/
これでも十分だけどね。

意味としては AからZまで(Zを含む)走査するということなので、
for(a='A'-'A' ; a<='Z'-'A'; a++) {
と書いたほうが、意味がわかりやすいけど、ごちゃごちゃしてしまうね。

このプログラムの場合、26ならば簡単に見当がついて誤解もないだろうれど、
65は、すぐにはわからない。
if( s[a] == b+65 )
は、
if( s[a] == b+'A' )
と書いたほうがいい。

数字を直に書くと、他の人にわからないだけではなく、
時間がたつと、書いた本人でさえもわからなくなってしまうから。

(続く)

201 名前:200 mailto:sage [2007/06/08(金) 08:18:24 ]
(続き)
配列の大きさは、後から変更することもあるため、直接数字を使うのは避ける。
というのも、複数箇所を漏れ無く変更するのは面倒だしミスしやすい。

たとえば、
#define TEXT_IN_BUFFER 256
としておき、
char s[TEXT_IN_BUFFER] ;
fgets(s,TEXT_IN_BUFFER,fp);
for( a=0 ; a<TEXT_IN_BUFFER ; a++ ){
のようにする・・・というのは昔から本に書かれているけれども、
最近のCコンパイラならば、もっと良い方法がある。

配列宣言にはスコープがあるけれども、
マクロにはスコープがないので、
const int TEXT_IN_BUFFER 256 ;
char s[TEXT_IN_BUFFER] ;
のようにする。

しかしそれではやはり煩雑だし、
TEXT_IN_BUFFERとsが生き別れになる事故もあるので、
#define SIZE_OF_ARRAY(x) (sizeof(x)/sizeof(x[0]))
としておき、
const int TEXT_IN_BUFFER 256 ;
char s[TEXT_IN_BUFFER] ;
fgets(s,SIZE_OF_ARRAY(s),fp);
for( a=0 ; a<SIZE_OF_ARRAY(s) ; a++ ){
のようにする。

この場合は、TEXT_IN_BUFFERを、ローカルスコープにするのであれば、
char s[256] ;
と直に書いても、悪くない。

202 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 08:20:03 ]
>>195
それは、
C言語限定の話ではなく、
また、
Windows限定の話なので、

C言語のスレではなく、
Win32APIのスレで質問したほうがいいよ。


203 名前:195 [2007/06/08(金) 08:32:37 ]
>>202
ありがとうございます。
Win32APIのスレで改めて質問してみます。



204 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 09:36:54 ]
可変長引数をパラメタに持つ関数をラップしたいのですが、
可変長の引数を伝播することができません。
なにか簡単な方法ありますか?

va_listをパラメタに持つ関数だったらかんたんだったんですが…。

void FunctionA(int, ...);
void FunctionAwrap(int,...);

205 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 11:01:42 ]
>>204
移植性なくていいなら、↓みたいな感じ。

void FunctionAwrap(int,...) {
struct {
int mem[可変数引数の予想されうる最大値] ;
} arg ;

va_start(v, n) ;
int* pFirst = &va_arg(v, int) ;
for (int i=1; i<n; i++) {
&va_arg(v, int) ;
}
int* pNextOfLast = &va_arg(v, int) ;
va_end(v) ;

memcpy(&arg, &n+1, pNextOfLast-pFirst) ;

return aa(n, arg) ;
}

スタックの進む方向
引数をスタックに積む順序
が違うと、ヤバい。

206 名前:205 mailto:sage [2007/06/08(金) 11:05:41 ]
ごめん、バグってた。

void FunctionAwrap(int,...) {
struct {
char mem[可変数引数の予想されうる最大値] ;
} arg ;

va_start(v, n) ;
char * pFirst = (char*)&va_arg(v, int) ;
for (int i=1; i<n; i++) {
&va_arg(v, int) ;
}
char * pNextOfLast = (char*)&va_arg(v, int) ;
va_end(v) ;

memcpy(&arg, &n+1, pNextOfLast-pFirst) ;

return aa(n, arg) ;
}

207 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 12:48:17 ]
C++の統合開発環境でフリーソフトで使いやすいのって、何かありますか?
eclipseは重いので軽いのを教えてくださいm(__)m

208 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 13:07:33 ]
統合開発環境は、どうしても重い。
軽快さを求めるなら、スタンドアローンのエディタやデバッガを使えばいい。

209 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 13:11:33 ]
>>207
GCC & Code::Blocks
GCC & Cygwin/MinGW
GCC & Dev C++

210 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 14:02:13 ]
>>207
フリーソフトというけど、どういう意味の?

無料というだけの意味なら、
マイクロソフトのVisual Studio 2005 Express Edition
あたりはどうよ。

211 名前:205 mailto:sage [2007/06/08(金) 16:25:37 ]
場合によっては、こういうのでもいいかも。

int printf_w(const char* format, ...) {
struct {
char mem[100] ;
} arg ;
memcpy(arg.mem, &format+1, sizeof(arg)) ;

return printf(format, arg) ;
}

これは、スタックの中身がsizeof(arg)未満だと、ヤバい。

手抜きな対策としては、
main()内の最初のほうで、
char mem[100] ;
と書いて、そこでスタックを100バイト消費させてしまう。

212 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 16:40:34 ]
>>206
同じ「移植性が無くてよい」の条件なら
void myprintf(const char *fmt, ...) {
 typedef struct {
  char mem[可変数引数の予想されうる最大値] ;
 } args ;
 va_list ap;
 va_start(ap, fmt);
 printf(fmt, *va_arg(ap, args));
 va_end(ap);
}
くらいで充分だろ。

213 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 18:23:34 ]
>>208-210
レスありがとうございます。
フリーソフトというのは単に無料という程度のことです。

ノートパソコンを膝に抱えてプログラミングするのが好きなんですが
eclipseなんかだと簡単に固まるんですね。
紹介されたものも含めてもう少し考えてみます。

ありがとうございましたm(__)m



214 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 18:46:23 ]
ノートPCなら尚のことテキスト環境で使ったほうが楽そうだが。
#マウスに頼らないで済む→膝の上でも安定。

215 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 18:56:33 ]
VC使いだけど、あんまりマウス使わないよ。

キーボードだけでも、けっこう行けます。

216 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 19:24:53 ]
>>212
無駄なコピーが1回減ってウマーだね。
×printf(fmt, *va_arg(ap, args));
○printf(fmt, va_arg(ap, args));


217 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 19:26:37 ]
>>200-201
回答ありがとうございます。
>>200のほうはきっちり理解できました、間違ったコードを書かないように気をつけるより、どう間違えてもコードがおかしくならない様にするのと、
他人がもし自分のコードをみたときのためにマジックナンバーは使わないほうがいいということは理解できました。

ところでですが、>>201をみてわからなかった#difineやconstやsizeof()の構文を勉強してみましたが、「しかしそれでは煩雑だし」云々以降のコードは、

SIZE_OF_ARRAY(x)と書けば、配列xの最大の数から最低単位の数で割り配列の中にいくら要素が入っているかチェックしてその数を返す。
絶対に変更できないint型変数、TEXT_IN_BUFFERをつくり256を代入する。
要素をTEXT_IN_BUFFER個もつchar型配列sをつくる。
fpで指定されたポイントから一行分かsの要素の数だけ文字を読み取りs[0]から順番に代入していく。
aを0に初期化して、aがsの要素の数未満の間、aをインクリメントしながら{以下を繰り返す。

と読んでいいでしょうか?
なんだか、数学の問題集なんかで自分の思いもよらない解法で問題を解いているのを見るようで感動しました。
自分もこういうソースをかけるように精進します。

218 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 19:45:28 ]
>>217

>>201のは、該当行だけ抜き出したものだと思う。

しかも間違ってる。
×const int TEXT_IN_BUFFER 256 ;
○const int TEXT_IN_BUFFER = 256 ;

プログラムには明確な正解はなく、人によって考え方も違う。
ある程度の失敗経験がないと理解しにくいこともあるので、
プロでなければ、あんまり気にしなくていいと思う。

219 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 00:02:08 ]
#ifdef 0 〜 #endif
で囲まれたコードを消してくれる整形ツールの様な物はありますか?

220 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 00:12:31 ]
配布されてるものでは知らないけど
それくらいのプログラムならすぐ作れるでそ

221 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 00:17:31 ]
>>219,>>220
いま、俺、まさにそんな類のことができるツール書いてるとこなんだけど、マジメにやってたら結構面倒。

222 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 00:20:08 ]
>>219
よかったな。
>>221が作ってくれてるってさ。

223 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 00:27:45 ]
>>220
作るのはメンドイので既に有る物を使おうと思ってました。
ググったんですが中々見つからなくて・・
もうちょっと探してみます。



224 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 00:51:38 ]
>>223
見つけたら是非、教えてくれ。そしたら俺も幸せになれるかもしれん。

225 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 00:58:00 ]
そういえばプリプロセッサじゃだめなの?

226 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 01:06:28 ]
>>225
インクルードされちゃうし、その他モロモロも全部展開されちゃう。
・・・って、Cプリプロセッサってモノによってはいろいろオプションが
あるし用途によってはそれで事足りるかもね。

俺が、いま作ってるのも実のところ拡張Cプリプロセッサだし。

227 名前:219,223 mailto:sage [2007/06/09(土) 03:38:15 ]
>>224
幾つか見つけましたがコレでやりたいことはできました。
ttp://www.geocities.jp/makikoh76425/TransferCLang.htm

228 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 07:27:21 ]
chraの四則演算はSSEを使えば16倍速くなるのですか?

229 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 08:08:26 ]
>>227
d。でも、よりによってGUIかよ。俺の用途にはちとマッチしねぇ。

230 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 08:18:32 ]
>>228
chraってなんですか?

231 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 09:41:08 ]
>>229
GUIだからといって人間が毎回ちまちまと操作しなきゃいけないってことはない。

CUIでラップしてやりゃぁいいじゃないか。
いちいち画面にウィンドウが出るのが・・・とか言うのは、Windowsプログラマとしては無知すぎるぞ。

232 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 09:41:29 ]
>>230
お前もしかしてチラ(chra)知らんのか?

233 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 12:09:30 ]
ここでチラの話はやめようや…
また荒れそうだし



234 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 14:42:53 ]
つ keyword.livedoor.com/w/Chra

235 名前:デフォルトの名無しさん mailto:sage [2007/06/10(日) 16:03:03 ]
最近のチラシは両面印刷で書くとこないんだよな

236 名前:デフォルトの名無しさん mailto:sage [2007/06/10(日) 18:42:34 ]
basic_streamの拡張のうまい方法なんか説明したサイトか書籍しりませんか?
マルチスレッド対応とかにしたいんですけどいまいちあの3文字、4文字の
なんの意味か不明な記号列に苦しめられてます。

237 名前:デフォルトの名無しさん [2007/06/12(火) 01:12:37 ]
#define STR_SIZE 157

char str1[STR_SIZE];

scanf("%文字数s",str1); 

printf("%d\n",(strlen(str1))
        
OS:XP C言語の質問なんですが
scanfの文字数の部分に#defineで定義した記号定数名を入れると入力した文字数が1と表示されてしまいます
しかし直接、数値を指定してやるとちゃんとした文字数が表示されます
ここには記号定数名は使えないってことでしょうか?
そうだとちょっと不便ですね
何か良い方法ありませんか?

238 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 01:22:31 ]
>#define STR_SIZE 157
>
>char str1[STR_SIZE];

なんだよ、その超中途半端なサイズはw

239 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 01:27:36 ]
>>238
問題文(含コード&リンク):
長さ157以下の英数字,空白の並びからなる文字列を二つ入力し,
それぞれをa1, a2とする. a1が"abc",a2が"ab"の場合のように,
a2の先頭部分がa1の先頭部分に含まれるときは1を,そうでないときは0を値として
返す関数 int match(char *a1, char *a2);を作成しなさい.
配列宣言を除きすべてポインタを用いて処理すること.
文字列は157文字以下が入力されるものとし,文字列の長さに関するエラー処理を
する必要はない.
計算の手順としては,文字列の先頭から一文字ずつ一致するかどうかを比較する.
a2にあたる文字列中の比較対象となった文字が'\0'であれば,a2はa1に包含された
ものとして扱う.これ以外で比較時に,一文字でも一致しない場合があれば
包含されていないとして扱う.
この関数をもちいて,2つの文字列を与えたとき,一つ目の文字列の中に二つ目の
文字列が含まれている場合(この場合先頭が必ずしも一致していなくてもよいものとする)
には "一致"をさもなければ"不一致"を出力するプログラムを作成しなさい.


240 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 02:54:09 ]
今、sizeofについて勉強しているんですが、
参考書通りに入力してもエラーになってしまいます。
皆様、どうかご助力願えないでしょうか?
開発環境はBorland C++ Compiler 5.5です。
#include <stdio.h>

int main(void)
{
int a=1,b=0;

printf("short int型のサイズは%dバイトです。\n",
sizeof(short int));
printf("int型のサイズは%dバイトです。\n",sizeof(int));
printf("long int型のサイズは%dバイトです。\n",sizeof(long int));
printf("float型のサイズは%dバイトです。\n",sizeof(float));
printf("double型のサイズは%dバイトです。\n",sizeof(double));
printf("long double型のサイズは%dバイトです。\n",
sizeof(long double));
printf("変数aのサイズは%dバイトです。\n",sizeof(a));
printf("式a+bのサイズは%dバイトです。\n",sizeof(a+b));
return 0;
}


241 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 03:00:02 ]
>>240
エラー内容も書けよ。

242 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 03:09:35 ]
>>241
エラー内容も書いてくださいませ と言うように

243 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 03:29:58 ]
申し訳ありません。
エラー内容は、
警告 W8004 sample5.c 21: 'b' に代入した値は使われていない(関数 main )
警告 W8004 sample5.c 21: 'a' に代入した値は使われていない(関数 main )
です。以後気をつけます。すみませんでした。



244 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 03:38:00 ]
>>243
それは警告であってエラーではない。
int型のa,bに値を入れてるけど、その値を参照してないからコンパイラが
警告だしてるだけ。動作に問題は無い。

245 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 03:44:53 ]
>>244さん、ありがとうございます。
確かに実行してみたら正常に動作しました!
こんな時間に助けていただきありがとうございました!

246 名前:デフォルトの名無しさん [2007/06/12(火) 18:39:49 ]
>>126>164
すみません、遅くなりました。ネットカフェでしかネットに繋げなかったので申し訳ありません。
回答ありがとうございます。

「何が」閉じるのが早いの?
どうやって実行しているの?

コンパイラです。ソースファイルをドラックして実行しているのですが、エラーなどの文がスラスラ流れるように出て
すぐ閉じてしまうので、エラーなどの文が読めません。
仕方なく「pauseキー」を押して止めたりしてるのですが、これが至難の技で・・。
コンパイラをクリックして起動させても、同じくすぐに閉じてしまいます。できあがった実行ファイルも・・。
解決策があるようなので、少し安心したりしています。よろしければ教えて下さい。

上にも質問させて頂いたの事なんですが

#include<stdio.h>
#include<float.h>

int main()

{
double what;
what=3.14159265358979;

printf("もう少し詳しい値は%20.18fです\n",what);

return 0;
}
の結果は3.141592653589790007になるんだけど、最後の「7」はバグなんですか?

なにぞとよろしくお願いします。(泣)

247 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 18:54:28 ]
丸め誤差

248 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 18:58:46 ]
>>123の質問の次のレスは読んでないのか。

249 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 19:39:34 ]
自分はJavaをやろうとしたのですが、教本がちんぷんかんぷんだったので、
プログラミング言語の雰囲気だけ知っておこうと思い、Cの本を読み漁りました。
おかげでつまづいていた部分は何とか理解できたのですが、
ポインタの部分でつまづき、Cの理解を半ばにJavaに移行しようか、迷っています。
他言語に移る前提ならポインタ等C特有の概念の理解を飛ばしてもOKでしょうか?

後学のためになるなら喜んで労力を払いたいのですが、
なにぶんCを先達の方々のように使いこなせる自信がありません…

250 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 19:45:56 ]
> ポインタ等C特有の概念
( ゚д゚)ポカーン

251 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 19:54:16 ]
>>250
そうだな。ポインタなんて Pascal、PL/M、C++ にもあるもんな。

>>249
ここで訊くことじゃないと思うんだが。
まあ Java に戻ればいいんじゃね?

252 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 20:01:05 ]
いきなり無知を晒してしまって恐縮ですorz
いっそう自信を無くしたのでCは諦めます(-_-;)

253 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 20:06:17 ]
ポインタ演算を除けばJavaの参照みたいなもんだろ



254 名前:デフォルトの名無しさん [2007/06/12(火) 23:06:31 ]
Visual C++2005 を使い始めました。
フォームにピクチャーボックス1つとボタンを2つ配置しました。
1つ目のボタン(開始)をクリックすると、
ピクチャーボックスにグラフのようなものを書くようなプログラム
をつくりました。
ここまでは上手く動作しています。
次に、2つめのボタン(停止)で、
グラフの描写(For文で繰り返しているため時間がかかります)
を途中で一時停止させたいのですが、
グラフをすべて書き終えるまで、ボタンが押せる状態になりません。
どのような方法を使えばいいのか教えてください。
よろしくお願いします。
分かりにくくてすみません。

255 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 23:17:07 ]
C/C++の問題じゃない。
Win32ApiだかMFCだか.NETだか分からないがソッチのスレのが良いかと。

とりあえずWin32APIかMFCなら、デフォルトのWindowProcじゃなくて、
自分で回してるfor文中でイベントの取得と処理をやることになると思われ。


256 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 23:37:32 ]
エスパーするとスッドレを使うべし

257 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 23:45:06 ]
x68k環境用(ぶっちゃけいうとTI-89)でC++使うと
コンパイラがどんなに頑張ってもstd::cout << "Hello, World!" << std::endl;
だけで5kbytesになるって本当ですか?
ちなみにC(TIGCC)のprintf("Hello, World!\n")だと700bytes程でした

258 名前:254 mailto:sage [2007/06/12(火) 23:46:09 ]
>>255
アドバイスありがとうございます。
ちなみに、プロジェクトの種類はCLR
テンプレートはWindowsフォームアプリケーション
を使っています。
スレを汚してしまい、すみませんでした。

>>256
ありがとうございます。
少し、スッドレの勉強をしてみます。



259 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 10:55:25 ]
>>257
x68kて…w
誰も知らないだろ。
サイズがでかくなるのは最適化が弱いだけじゃね?

260 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 11:12:26 ]
>>257
それは、全てスタティックリンクされているのか?
printf()の実装だけで、軽く数十キロバイトにはなるはずだぞ。

261 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 13:14:50 ]
リアルタイムで動くゲーム作ってます
マルチスレッドについて教えてください
それ使うと全体の実行速度は速くなりますか?
もし速くなるならたくさん使えば使うほど速くなりますか?

262 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 14:36:54 ]
>>261
すでにCPU100%使ってるなら、さほど変わらないだろう
別にマルチスレッドにしたからって、CPUの限界を超えられる訳じゃない

ja.wikipedia.org/wiki/%E3%83%9E%E3%83%AB%E3%83%81%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89

263 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 15:31:58 ]
>>237
> scanfの文字数の部分に#defineで定義した記号定数名を入れ

具体的に、ソースコードの該当箇所をコピペして見せて。
(コピペだよ。打ち直したりしちゃダメだよ。)

> 文字列は157文字以下が入力されるものとし

それなら、
char str1[157] ;
というのは間違い。
char str1[157+1] ;
とすること。
文字列には、文字列の終わりを示すための特殊な文字'\0'が必要だから。

もしかしたら、一見正しく動いているように見えても、トンデモナイ大間違い。




264 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 15:33:26 ]
>>243
エラーや警告のメッセージが出たら、ちゃんと読もうよ。

読まない人がほんとうに多い。
メッセージを読まないのは、パソコンのドシロウトだけにしてくれ。

265 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 15:36:39 ]
え?
「メッセージを読まないのは、パソコンのドシロウトだけ」、だろ

266 名前:126 mailto:sage [2007/06/13(水) 15:55:26 ]
>>246
どうやら察しの悪い人のようなので、諦めて、答えを書くよ。

単体のコンパイラやなどのCUIの実行ファイルを、
エクスプローラ上でダブルクリック(設定によってはクリックか)して実行すると、
プログラムが終了し次第、ウィンドウが閉じられてしまうのは、
Windowsの(エクスプローラの)仕様です。

コマンドプロンプトを開いて、
そこからコンパイラや、作ったプログラムを実行させればいい。

それでも、あっという間にスクロールして見えなくなるので、
コマンドプロンプトのウィンドウの左上のアイコンを右クリックして出てくるメニューから、
プロパティを開いて、タブのレイアウトで、画面バッファのサイズの高さを、数百くらいにするといい。

> 最後の「7」はバグなんですか?

コンピュータで小数がどのように扱われるのか勉強しよう。


267 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 16:03:41 ]
>>249
C言語のポインタくらいで、つまずくようでは、先が思いやられる。

世の中には、C言語のポインタで つまずく人が大勢いるが、
決して、C言語のポインタが難解なのではない。

その本が前提としている知識を持ち合わせていないため、本に書かれていることが理解不能
とか、
その本の説明が悪くて、著者本人か、すでに理解している人にしか、理解不能

いずれにしても、本のチョイスの問題です。
前提知識がないのであれば、それを学ぶために別の本を予め読むのも含めてね。

それから、本に書いてあることを読んだだけでは、はっきりとは理解できないこともあるので、
実際にプログラムを書いて、デバッガ上でステップ実行して確かめるのも大切なことです。

268 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 16:05:39 ]
>>254
スレ違い。

ちなみに、
ボタンの押下に対するハンドラは、速やかに制御を返すべき。
時間のかかる処理を、そのコンテキストでやってはいけない。

269 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 16:09:24 ]
>>257
本当かどうか、自分で試してみればいいじゃないか。

まぁたぶん本当だろうね。
C++のストリームのライブラリがスタティックリンクされれば、
mainにたった1行でも、かなりのサイズになる。

>>261
スレッドの話はスレ違い。

C/C++は基本的にスレッドの面倒を見ません。
マルチスレッド対応といっても、複数のスレッドからライブラリ関数を呼ぶことができるようになっているだけです。

だから、OSのスレッドの機能の勉強をしてください。

270 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 16:31:45 ]
>>262,>>269
申し訳ない
出直してくる

271 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 21:03:47 ]
みんなガンバレ!

言葉はキツいが諸先輩方は応援してるぞ。

272 名前:デフォルトの名無しさん [2007/06/14(木) 00:19:17 ]
getchar();で入力された英字の他に改行コードも一緒にラインバッファに保存され
次の入力で改行コードが返されてしまう問題で、ラインバッファに保存されてる改行コードをクリアする方法
はありませんか?

for(i=0;i<10;i++){

ch = getchar();

printf("%c\n",ch);

ch = 改行コードをクリア

}

こんな感じで
とりあえず今は下のような感じで対処してるのですが、他に方法があったらお願いします
ちなみに入力関数はgetchar();のみしか使用できません

for(i=0;i<10;i++){

ch = getchar();

printf("%c\n",ch);

ch2 = getchar();

}

273 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 01:18:02 ]
無理



274 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 01:37:04 ]
>>272
いまどき、CUIでインタラクティブなプログラムを作るのに慣れたところで、大して役に立たないと思うが・・・

自分なら、とりあえず、こうする。

for(i=0;i<10;i++){

do {
ch = getchar();
} while ((ch == '\r')||(ch == '\n')) ;

printf("%c\n",ch);

}


275 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 11:01:35 ]
>>272 >>274
言わないと気づかないだろうたからあえて言うが、無駄な改行はやめてくれ。
見づらい。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<282KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef