トップページ⇒tech
1001コメント273KB

C言語なら俺に聞け! Part 112

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2005/08/08(月) 01:32:01
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。

エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/

C言語なら俺に聞け! Part 111
http://pc8.2ch.net/test/read.cgi/tech/1121657911/

他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
0798デフォルトの名無しさん2005/08/25(木) 15:37:49
void
0799デフォルトの名無しさん2005/08/25(木) 15:45:15
>>795
そういうページがあるのを初めて知ったw
過去ログにまとまってるリンクも便利だね。
>>793ではないが、ありがトン
0800デフォルトの名無しさん2005/08/25(木) 16:03:04
>>797
>>795読んでますか?
0801デフォルトの名無しさん2005/08/25(木) 17:13:51
>>793
>>795+推薦図書スレ行ってこい
そこのお勧め本使ってそれなりに勉強してる最中の俺ガイル
0802デフォルトの名無しさん2005/08/25(木) 20:13:14
個人的には日下部先生の本がお薦め
08037932005/08/25(木) 21:19:12
すいません、なぜか795飛ばしてましたorz
柴田望洋氏の本を図書館で借りてみました
過去ログも見てみます
0804デフォルトの名無しさん2005/08/25(木) 22:05:18
>>802はネタ
0805デフォルトの名無しさん2005/08/25(木) 23:14:37
漢字とか2バイト文字ってどう実現させればいいんでしょうか
0806デフォルトの名無しさん2005/08/25(木) 23:15:27
メモリに2バイト格納すればいいと思うよ。
0807デフォルトの名無しさん2005/08/25(木) 23:19:03
DOSだとアルファベットをscanfとかで配列や動的に確保した変数に代入できますが、
漢字とかひらがなとか入力できないんでどうすればできるのかなぁと
0808デフォルトの名無しさん2005/08/25(木) 23:28:17
できますがなにか。
0809デフォルトの名無しさん2005/08/25(木) 23:50:27
コマンドプロンプトの設定を替えればできるのかな。
0810デフォルトの名無しさん2005/08/25(木) 23:53:29
全角/半角じゃ入力が切り替わらないって問題?
0811デフォルトの名無しさん2005/08/25(木) 23:54:28
Alt+全角
どいつもこいつも小出しにしやがって
0812デフォルトの名無しさん2005/08/25(木) 23:54:52
そうです。すみません説明不足で
0813デフォルトの名無しさん2005/08/26(金) 00:33:18
重複してたらすいません、コンパイルするさいに
エラーE2209 インクルードファイルをオープンできない、といわれました
borland c++ 5.5 ってコンパイラーを使ってます。

誰か教えていただけませんか?
0814デフォルトの名無しさん2005/08/26(金) 00:34:36
セットアップを死ぬほどやれ
08158132005/08/26(金) 00:43:13
w やっぱそうですよね、
cの本についてるCDと同じ名前だったのでc++の本についていた付録CDをつかったんですけど、
それは関係ありませんよね?

コンパイルするとき bcc32 ***.c ってやってるんですけど
cのときとc++のときってコンパイルの仕方が違ったりするのですか?

超初心者ですいません、あと環境設定ってのはなんですか?
0816デフォルトの名無しさん2005/08/26(金) 00:44:26
ググれ。
08178132005/08/26(金) 00:45:41
らじゃ
0818デフォルトの名無しさん2005/08/26(金) 00:46:56
readme嫁
08198132005/08/26(金) 00:50:33
そのreadmeがcにも適応してるのかどうかわかんなくて
cをコンパイルするときでもbcc32でいいんですか?
c++のコンパイラでもcはコンパイルできるって書いてあったのでやってたんですけど
0820デフォルトの名無しさん2005/08/26(金) 00:51:43
とりあえず全てのマニュアルを嫁
08218132005/08/26(金) 00:52:36
了解
0822デフォルトの名無しさん2005/08/26(金) 00:52:45
いっとくけど、マニュアルも読まない
自分では調べない
自分で解決しようとせずになんでも人に聞く

こんなやつには、プログラミングはできない
08238132005/08/26(金) 00:58:00
そーですね、甘えてました。
自分でなんとかします
0824デフォルトの名無しさん2005/08/26(金) 01:27:30
つーか、スレ違いだって気づけ。
0825デフォルトの名無しさん2005/08/26(金) 04:11:02
すみません。
どこのスレに書き込んでいいのか分からなかったので
とりあえずここに書かせてください。

試験なんかに使うマークリーダー用のデータ読み取りプログラムというのは
どういった言語で構築するのでしょうか?
ちなみに、仕様はCSVファイルのデータをマークリーダー(読み取り機)で
読み込んで正否などを打ち出すらしいのですが...
0826デフォルトの名無しさん2005/08/26(金) 04:16:31
>>825
とりあえずはすれたてるまでもない質問スレでやれ
CSVにはどんなデータが入っていてリーダーはどの機種で
OSや予算や使える言語も最低限書くこと
0827デフォルトの名無しさん2005/08/26(金) 04:28:55
即レス感謝します。
でも、どんな言語で作るのかを聞きたいのに
使える言語も最低限書くことと言うのは、どういう意味ですか?

因みに
OS Win
予算 数100万
CSVの中には 試験に必要な「個人情報」と答案用フォームに書き込まれた「解答番号」です。
リーダーの機種名は 不明です。
0828デフォルトの名無しさん2005/08/26(金) 04:32:47
>>827
頼むからここを荒らすな。
スレ違いつーか、鼬害なんだから。
0829デフォルトの名無しさん2005/08/26(金) 04:41:39
そうですか。
失礼しました。

0830デフォルトの名無しさん2005/08/26(金) 04:48:59
ループの展開をするマクロを書きたいのですが,どのように書けば良いのでしょうか?

例えば,

c = a[i][j + 0] + b[i][j + 0];
c = a[i][j + 1] + b[i][j + 1];
c = a[i][j + 2] + b[i][j + 2];
c = a[i][j + 3] + b[i][j + 3];

見たいに書く代わりに,

LOOP_4(c = ....);

みたいにかける LOOP_4 のような物が欲しいです.

こういうのって割と需要ありそうなんですが,検索してもなかなか見つかりま
せん.識者の方,アドバイスお願いします.
0831デフォルトの名無しさん2005/08/26(金) 04:52:30
>>830
ループじゃいかんのけ?
0832デフォルトの名無しさん2005/08/26(金) 05:19:12
インライン?行数稼ぎ?
0833デフォルトの名無しさん2005/08/26(金) 05:40:28
boost preprocessor を使うのはどうだろ。

#include<boost/preprocessor.hpp>

#define GEN(z,k,_)  c = a[i][j + k] + b[i][j + k]; 
BOOST_PP_REPEAT(4,GEN,_)

こんな感じ
0834デフォルトの名無しさん2005/08/26(金) 05:47:38
>>830
普通にfor文のループで書くしかない
わけのわからんマクロ作ったらタコ殴りの刑
0835デフォルトの名無しさん2005/08/26(金) 05:55:13
訳あって明示的にインライン化したいんです.

>>833
ありがとうございます.できれば C でやりたいんですが,やっぱり無理なんでしょうか.
0836デフォルトの名無しさん2005/08/26(金) 05:56:35
無理
0837デフォルトの名無しさん2005/08/26(金) 05:57:02
ループのアンロールでしょ?
高速化の随分と最後の方にやるモノではあるのだが、
使わないこともない技術だ。
08388332005/08/26(金) 05:57:52
preprocessorしか使ってないはずだからCでも使えると思いますよ
一応手元のgcc,vc,dmcでは問題無かったです。
0839デフォルトの名無しさん2005/08/26(金) 06:03:13
>>838
おお.

Boost == C++ ってイメージがあったので試さずに書いてしまいました.
ありがとうございました.
0840デフォルトの名無しさん2005/08/26(金) 08:18:55
つーか、ループアンロールならコンパイラにやらせればいいじゃん。
0841デフォルトの名無しさん2005/08/26(金) 11:51:19
/*10個の英字を読み取り、その中からアルファベット順に並べたとき
  一番最初にくる文字を表示するプログラム*/
#include <stdio.h>

int main(void)
{
int i;
char ch1, ch2;

printf("英字を10個入力してください\n");
ch1 = getchar();

for(i = 0; i < 10; i++){
printf("%d", i); /*動作確認のため*/
ch2 = getchar();
if(ch1 > ch2){ch1 = ch2;}
}

printf("%c", ch1);

return 0;
}

ループの中で1つ文字を読み込むときにi++が2回行われているようなんですが
どうしてでしょうか?
0842デフォルトの名無しさん2005/08/26(金) 11:59:29
>>841
改行コードでも入力されたんだろ。
詳しく知りたいなら初心者スレにでも行ってくれ。
0843デフォルトの名無しさんNGNG
>>841
英字10って言ってるけど、それだと11個入力しないといけないんじゃない。
0844デフォルトの名無しさん2005/08/26(金) 12:23:41
>>842
わかりました。そっちに行ってみます。

>>843
本当だ!気がつかなかった…ありがとう(^ω^)
0845デフォルトの名無しさん2005/08/26(金) 12:25:28
圧倒的に生産性の高いC++を使わずに
未だにCに拘っている方がいるのはなぜですか?
0846デフォルトの名無しさん2005/08/26(金) 12:38:33
・環境による制限がある
 ・C++ コンパイラがない
 ・C++ だとバイナリがかさばって、サイズがヤバい
 ・最適化能力の上な C でないと速度が少し気になる

・使用可能者の数が多い
 ・新人教育の手間が省ける
 ・比較的多くの人が保守可能

・怠慢、理解力不足
 ・言語学習に時間を割くより娯楽に割く
 ・C++ が理解できなかった
0847デフォルトの名無しさん2005/08/26(金) 12:38:53
C++はCが進化したものと考えてるからだよっ、きっと!
0848デフォルトの名無しさん2005/08/26(金) 12:40:07
>>845
おそらくこんなところじゃないかと思う。
C++コンパイラがない。
今更新しい言語を学ぶ気にはならない。
Better Cとして使えることを知らない。あるいはBetter CでもCより実行速度が遅いと思い込んでいる。
08498472005/08/26(金) 12:41:26
意味不明なこと書いちゃったよ
『拘っている』って字が読めてなかった
0850デフォルトの名無しさん2005/08/26(金) 12:59:41
・CのAPIしか用意されていない環境に、OOなクラスライブラリを構築するのが面倒
・printfの方がいい
0851デフォルトの名無しさん2005/08/26(金) 13:12:55
>>850
それはC++を使わない積極的な理由にならない。
つーか、>850自信が>846や>848の最後の行に該当するんジャマイカ。
0852デフォルトの名無しさん2005/08/26(金) 13:14:56
coutのほうが楽じゃん。書くの
0853≠8502005/08/26(金) 13:18:56
>>852
printf("例えばこんなところに(%d, %d)座標が入ってたり\n\t制御コードが入るとね\n", -1, 2);
0854デフォルトの名無しさん2005/08/26(金) 13:29:21
cout << "例えばこんなところに(" << -1 << ", " << 2 << ")座標が入ってたり\n\t制御コードが入るとね\n";
0855デフォルトの名無しさん2005/08/26(金) 13:46:36
printf の勝ちだな。
0856デフォルトの名無しさん2005/08/26(金) 13:55:17
別にC++はprintfを禁止してはいない。
stringに慣れてしまうと一々文字列編集でstr系の処理で配列の上限値を意識するのが面倒になる
0857デフォルトの名無しさん2005/08/26(金) 14:01:57
>>845
にゅうが使えない という環境も

いや、使えないことは無いんだけど自分でにゅう作るのもしんどいし
にゅう無いとC++使っててもなんか損した気分になるからなぁ
0858デフォルトの名無しさん2005/08/26(金) 14:22:34
ルーシー...
0859デフォルトの名無しさん2005/08/26(金) 14:29:26
るー
うー
0860デフォルトの名無しさん2005/08/26(金) 15:00:45
newの使えないC++ってなんだよ
0861デフォルトの名無しさん2005/08/26(金) 15:10:51
>>860
にゅうが使えない/使いにくい/使いたくない環境もあるということです。

Cやアセンブラなら東京ドーム4杯分に感じる512kbのメモリ空間も
C++だと途端に広島市民球場に見えるということです。
0862デフォルトの名無しさん2005/08/26(金) 15:14:50
じゃあ better C として使えばいいじゃない。
C++を完全に手放す理由にはならんだろ。もしかして
int main(){ return 0; }
のプログラムでも使用メモリって両者でけっこう違ったりするもんなのか?

っていうか広島市民球場を馬鹿にするな
0863デフォルトの名無しさん2005/08/26(金) 15:18:15
>>862
そうです。でも、BetterCとして使うのは、なんとなくもったいないというか
そういう感じがするだけです。

広島市民球場でも、まあ、野球やろうと思えば 出来ないこともないですし
0864デフォルトの名無しさん2005/08/26(金) 15:22:09
広島市民球場も廃れ、いずれはでっかく新しいのになるんだ
立てるだの立てないだのぐだぐだしてる時期にあるだけで、
いずれは時代も流れて行くものなのでつ Cも廃れる日が来るのでしょうね
0865デフォルトの名無しさん2005/08/26(金) 15:32:58
>>863
もったいないってなんだよ。コンパイラの値段が高い、という話ならわかる。

むしろ better C のほうがメモリ節約になる例↓
int main()
{
 if(getchar()=='A')return 0;
 char str[256]; //↑でAが入力されればこの配列が確保されることはない
 gets(str);
 return 0;
}
0866デフォルトの名無しさん2005/08/26(金) 15:33:22
betterCとして使う場合、使っちゃいけないC++の機能などをコーディング規約として決めるのなら良いが、
そうでなければCっぽいコードとC++っぽいコードが混在してわけわからんコードになる。
規約作ってまでbetterCに拘ることもないかなと。
0867デフォルトの名無しさん2005/08/26(金) 15:40:54
>>865
charのコンストラクタが走る事はないと思うが、スタックを消費しない事は
規約で決まってたんだっけ?
0868デフォルトの名無しさん2005/08/26(金) 15:42:26
>>858
ワロタ
0869デフォルトの名無しさん2005/08/26(金) 15:49:07
>>866
別に「使っちゃいけない」機能があるわけじゃないだろ。
「使うことは推奨しない」だけで。別にそれで致命的なエラーが発生するわけでもあるまいし。
そんなガチガチに縛る必要ないから、規約だって簡易的なもので済むんじゃねーの。

>>867
あ、そこは見落としてた。どうなんだろ。
0870デフォルトの名無しさんNGNG
>>869
>あ、そこは見落としてた。どうなんだろ。

VC++だと、関数の途中で変数を宣言しても、スタックの節約にはならないね。
0871デフォルトの名無しさん2005/08/26(金) 16:31:18
>>869
うん。それなら広島市民球場よりは広く便利に使えそうだ。
ベターCとしてのC++仕様簡易規約みたいなのをでっちあげるのも
楽しそうだな。

スタックは、多少消費しても暗算で計算できる範囲内なら
まあ問題ないかな
0872デフォルトの名無しさん2005/08/26(金) 16:56:59
C++がCよりタイトなコードを吐く例。
・static inline int min(int a, int b) {return a < b ? a : b;}
Cだとマクロを持ち出す必要がある。
で、マクロなら型違いを吸収できるわけだがそれならそれで、
C++にはテンプレートがある。
しかも、適切なオペレータが用意されていれば構造体でも同じ(テンプレート)関数で済む。
Cだとオペレータを用意することもできなければ同じマクロで実装することもできない。
08737492005/08/26(金) 17:03:07
煽られたので、boostに走ってみることにすますた。
Cygwin上で bjam --without-test --without-python -sTOOLS=gcc install 中。
つーことで、わかんなかったらboostスレ逝ってみまつ。
0874デフォルトの名無しさん2005/08/26(金) 17:10:03
>>749
何もいきなりboostに走らんでもw
まぁ、がんがれ。
0875デフォルトの名無しさんNGNG
>>851-855
吉田弘一郎もC++は書式付出力が使いにくいから実用的な言語でないとかなんとか書いてたな。
おれもstream系は使いにくいと思うけど、なにもそれを持って全否定することはないじゃないかと
思った。
0876デフォルトの名無しさん2005/08/26(金) 17:21:01
新しく作ったライブラリAには関数Bがあって、関数Bは標準関数の
strlenやstrcpyを使っているとします。
この時、あるプログラムで関数Bとstrlenやstrcpyを使っている場合、
リンク時にstrlenやstrcpyのコード(?)が重複してプログラムに置かれたりは
しないのでしょうか?
0877デフォルトの名無しさん2005/08/26(金) 17:26:13
>876
しない。
0878デフォルトの名無しさん2005/08/26(金) 17:35:35
OK
0879デフォルトの名無しさん2005/08/26(金) 20:55:54
>>853
double a, b;
printf("例えばこんなところに(%d, %d)座標が入ってたり\n\t制御コードが入るとね\n", a, b);
0880デフォルトの名無しさん2005/08/26(金) 21:58:42
>>875
氏の言語に対する罵倒は、一種の愛情表現ですから。
0881デフォルトの名無しさん2005/08/26(金) 22:23:21
>880
ってえことは、COBOLさいこー、FORTRANまんせーってことですな。
0882デフォルトの名無しさん2005/08/26(金) 22:41:27
printfは、美しくないと思うが、Cプログラマーは、美しいと思うものなのか?
ライブラリ作るとき、もうちょっとキレイなインターフェースを考えられなかったのかな。

世界で一番有名になってしまったこのprintfのおかげで、世の中、
発想がprintfしてるインターフェース設計が多すぎ
0883デフォルトの名無しさん2005/08/26(金) 22:46:48
cin/coutは後発のどんな言語も真似なかった糞設計なライブラリ
0884デフォルトの名無しさん2005/08/26(金) 22:50:47
Cのprintfはいいけど
Javaのprintfを見て、Javaを使うのを止めた
0885デフォルトの名無しさん2005/08/26(金) 23:07:27
>>882
型チェックが効かないってのは痛いけど、見た目は美しいと思うんだが。
0886デフォルトの名無しさん2005/08/26(金) 23:10:58
printf() 美しい.....
0887デフォルトの名無しさん2005/08/26(金) 23:20:06
>>884
Javaやってないから何なのかと思って調べてみたら
printfが標準で無いのか

不便すぎるな
0888デフォルトの名無しさん2005/08/26(金) 23:25:46
>>887
標準にあるよ。
0889デフォルトの名無しさん2005/08/26(金) 23:29:10
>>888
J2SE5から実装されたのか、スマンカッタ
0890デフォルトの名無しさん2005/08/26(金) 23:29:55
吉田弘一郎が極めるjavaを書いた時点ではなった。
くそみそ書いてた。
0891デフォルトの名無しさん2005/08/26(金) 23:34:42
なぜに、みんなそんなに printf が好きなん?
0892デフォルトの名無しさん2005/08/26(金) 23:36:59
>>882
まずは >>882 が考えている「美しいインターフェース」を持った
ライブラリとはどんなものかを伺おうじゃないか・・・
0893デフォルトの名無しさん2005/08/26(金) 23:42:26
入門書でコンソール組むときに腐るほど使ったので染み付いてしまいました。
0894デフォルトの名無しさん2005/08/26(金) 23:44:25
Cのprintfは何となく好きです
便利さならphpとかのprintがいいと思うけど
0895デフォルトの名無しさん2005/08/26(金) 23:44:33
x = 10; y = 20
puts "rubyは気絶するほど美しい(#{x},#{y})"
0896デフォルトの名無しさん2005/08/26(金) 23:47:54
printf の書式指定文字列を sprintf で作成したりするようになると、
printf の偉大さが身にしみてくるんだな、これが。
0897デフォルトの名無しさん2005/08/26(金) 23:48:13
std::cout << boost::format("x = %1, y = %2") % x % y << std::endl;
■ このスレッドは過去ログ倉庫に格納されています