1 :
デフォルトの名無しさん :
2011/05/30(月) 06:21:04.32
2 :
デフォルトの名無しさん :2011/05/30(月) 07:44:54.02
糞スレ
4 :
992 :2011/05/30(月) 10:38:42.31
前スレの >994 ありがとうございます 参考にします
>>5 ヘボが書いたものは長大で遅くてバグだらけ
出来る人が書いたものを使ったほうが早くなるのは当然
大前提として、プログラミング言語の実行速度の 性能差は高々定数倍。 アルゴリズムの選択を間違えるとオーダーで遅くなる場合があるから そういうこともある。
同じ奴が書いて比較しないと意味ないだろう
それだとコンパイラ次第じゃね? 個人的にはiccよりJavaが速かったことは無いわ。
関数の途中でエラーが出たらmain関数に処理を戻したいんですがreturn文以外に方法ないですか?
>>10 longjumpと言う手もないではないのですが、
ろくなもんじゃないので大人しくreturnで済ますのが無難です。
関数ポインタの利点、使い道を教えてください プロトタイプ宣言すれば別のファイルからでも関数呼び出せますよね? ポインタを使う意味ってなんですか
テーブルjmpとか知ってる?
>>13 関数ポインタを使えば、関数の名前を知らなくても関数を呼び出せるでしょ。
例えば GUI ライブラリなんかで、ボタンを押した時の処理を指定する時に
関数ポインタが無いと困る。
GUI ライブラリの側で予めコールバック関数の名前を決めておいて、
ライブラリのユーザはその名前で関数を作るという事も出来るけど、
その方法だと、同じボタンを複数作りたい時に破綻する。
コールバック関数だと、わかりにくいのでは?
つ[qsort()]
つ bsearch()
たまにはsignalの事も思い出してあげてください
C言語入門〜みたいな本をよんで一応基本的な書き方は覚えたんですが次にどんな事を学習していけばいいのかがわからず困っています。 なにかおすすめな参考書でも教えていただけないでしょうか。
22 :
デフォルトの名無しさん :2011/05/31(火) 21:10:12.25
文字列において改間は何コードになるんですか? 例えばbig appleという文字列がありますよね? gとaの間の文字は何ですか?
>>22 スペースキーを押したらスペース、タブキーを押したらタブ
25 :
デフォルトの名無しさん :2011/05/31(火) 22:20:41.99
>>21 自分で何か作るとよい。
「C言語 入門書の次に読む本 [改訂新版]」
「C言語によるオブジェクト指向プログラミング入門」
おすすめです。
>>23 >>27 教えていただきありがとうございます。
アルゴリズムの本はもっているのでそれを読みつつ紹介してもらったので勉強をしようと思います。
>>22 http://bellard.org/jslinux/ で
#include <tcclib.h>
main()
{
putchar(' ');
printf("%d", (int)' ');
}
をクリップボードに貼りつけて
tcc /dev/clipboard
でコンパイルして
./a.out
で実行したら
32
ってでた
キャストすんなボケが
キャストしなくてもintだろw
ビットシフトで1がいっぱいになっちゃいます どうすればいいですか
出ちゃう〜ってかw
c言語始めて一週間の初心者ですが、質問です。 キーボードからの小数の入力を受け付け→その値を出力 というコードを書いていましたが、出力結果が必ず0.000000になってしまいます。 解決方法が全く分かりません。協力お願いします。 #include <stdio.h> int main(void) { double num; printf("小数を入力してください。\n"); scanf("%1f", &num); printf("%fが入力されました。\n", num); return 0; }
1f → lf
scanf("%1f", &num); ↓ scanf("%lf", &num);
>>36 〜37
解決しました。lと1読み間違えてましたw
ありがとうございました。
>>38 こういう理不尽なバグを回避するためにフォント選んだ方がいいよ。
1とl、0とOの区別が付かないフォントもあるでの。
void型の関数でreturnするのは変ですか? 戻り値に注目しないにしてもintでreturn 0するほうが書き方としてはいいですか?
#include<stdio.h> main() { bool i=1; if(i==1) puts("ok"); else puts("no"); } エラーでるんですけどなんでか教えてください
>>41 エラーメッセージも読めない奴に教える意味は無い
#include <stdbool.h> と int main() あたりで
せっかくコンパイラが丁寧にエラー内容を教えてくれてるのに 無視して 2ch に聞きに来るとかコンパイラが可哀想過ぎる 人としてどうなのよ
>>40 誰も書き込んでないから返事してやるよ
別に変じゃないとおもうぞ ってか俺もvoid型でもreturn いれている
まぁ人によってはいらないっていうヤツもいるだろうが、
そこで関数を終了し、処理を返しているってはっきり記述できるし
特定条件下で途中で処理返す時もreturn書くなら、終わりにも書いた方が自然だろ。
int型で return 0とかにするかは勝手にしろ。
いろいろ言語の細かいところに行くとどっちがいいとかあるかもしらんだが
そんな事で一々悩むつもりない。
自分だけで使うなら自分がわかればいい。
void型の関数にどうやってreturnするん? return ()とか?
関数の途中で、打ち切って戻る時?
ビターン
c言語のエディタでお勧めはなんですか? ・あるといい 関数にプルダウンでアクセスできる
プログラムの実行中に開けていたファイルが開けなくなったんだけども 何が原因なんですかね。
すみません。解決しました。 前の関数の中のファイルがとじられてなかった
>>51 道具に使われることは考えないほうがいいよ
>>51 環境を書いてないね。
Windowsならvimで、linuxならvimかな。
BSDやmacもvimでいいとおもう。
あるフォルダ内に置いたCで作られた実行ファイルから取得できる そのフォルダ内の情報ってどういうのがありますか?
よーわからんけど、実行された時のフルパスを使えばいいんでないかい
よー判らんけど、ファイルシステムのことはAPI使わんと判らんよ。
59 :
デフォルトの名無しさん :2011/06/03(金) 22:36:14.22
出力結果をテキストファイルに出すコマンドて何でしたっけ? fprintfとかじゃなくて、結果を丸ごとテキストファイルに出力したいです。 プログラムはprogram.c 出力させたい空のファイルをprogram.txt とします。
61 :
デフォルトの名無しさん :2011/06/03(金) 22:42:47.62
>>60 program.c program.txt >ですか?
良く分かりません・・・すいません。
残念 コマンドではなくリダイレクトでしたあばばばばあばbっばばばばばb
64 :
デフォルトの名無しさん :2011/06/03(金) 22:56:27.13
シェルスクリプトのコマンドが知りたいだけなのに 検索でfprintf引っかかり・・・うざすぎワロタ
コマンドプロンプト リダイレクトでぐぐれ
66 :
51 :2011/06/03(金) 23:01:48.02
>>51 環境を書いてないね。
Windows だったら xyzzy の一択。これ、Linux や *BSD に移植してくれないかなあ。
mac のことはよく知らない。
68 :
デフォルトの名無しさん :2011/06/04(土) 00:33:20.75
`;:゙;`;・(゚ε゚ )ブッ!! なんだこのスレ・・・ C言語の前に日本語勉強汁!!
>>70 エディタ内のカットバッファをGUIのクリップボードと分離して独立して扱えるのはemacsより気が利いているかもしれない。
emacsと違って、単にエディタだから単純には較べられないけどね。
emacs とその眷属は操作体系のデザインが悪いから好きじゃないな。 vi 類の方がまだマシ。
宗教談義はそのへんでやめましょう
static変数/static関数はヘッダファイルに記述しないのが一般的なのですか? →つまり、ヘッダファイルはpublicなものしか書かないのが普通?
static使ってるとそのオブジェクトを複数生成するのが不可能になるから オブジェクト指向という考え方からすると使うべきじゃないね
>>75 ヘッダーファイルは複数の c のモジュール(コンパイル単位)で参照されるものだから、一つのコンパイル単位で完結する性質の static 変数/static 関数を記述する場所ではない。
78 :
デフォルトの名無しさん :2011/06/04(土) 19:03:13.26
strlenにchar*型と配列を入れるときなのですが 後者の場合正しく出ないんです・・・ 何故ですか?
ちゃんと'\0'で終わってる? 配列のサイズと文字数が一緒になってたりしない?
あなたが低脳だからです
81 :
75 :2011/06/04(土) 19:40:52.49
>>76 >static使ってるとそのオブジェクトを複数生成するのが不可能になるから
これは、どういう意味ですか?
>>77 つまり、staticはヘッダファイルに書くべきじゃないってことですか?
82 :
77 :2011/06/04(土) 20:32:07.19
>>81 通常の使い方では static な変数/関数をヘッダに書くことはないと思います。
というか、
>>77 で述べたとおりで、思いつかないのです。
83 :
デフォルトの名無しさん :2011/06/04(土) 21:24:26.19
>.79 fgetsで読み込んだ場合 例えば abc def をchar*pがさすとき strlen(p)はどうなりますか?
7か8じゃね?
>>83 自分でやってみて、それが思った事と違うなら相談してみたら?
86 :
デフォルトの名無しさん :2011/06/04(土) 21:39:32.12
>>85 DFASD
sdfsd
dsd
fd
テキストファイルです
上から順番に
7
7
5
2
です。
全く分かりません・・・解析してください。
>>86 読み込むテキストファイルの改行コードが CR+LF
fopen するときにバイナリモードで開いている
改行が\r\nなんだろうな 改行が二文字でカウントされてるんだよ
>>86 それじゃ分からない。ソースを一緒に晒してみて
90 :
デフォルトの名無しさん :2011/06/04(土) 21:48:41.97
>>88 あぁなるほど。たぶんそれですね。
ただナル文字って配列の場合でもchar*の場合でも
strlenでは無視されるんですよね。助かります。
C言語を始めよう!とLSIC-86試食版を使ってプログラムを打っていたのですが 突然コマンドを実行すると「コンパイル開始」の表示のままで止まるようになりました。 それまではきちんとプログラムが再生されていたのですが… また、コマンドを実行する度「C言語を始めよう!」のフォルダ内に TMPファイル(0バイト)が作成されるようになりました。 どのようにすれば元通りになるでしょうか?
>>75 ヘッダファイルとは何か?
それが問いの答えになる。
調べてみよう。
>>91 状況がよくわかりません。参考にした資料/URL を教えてください。
あと、今日日、LSI-C はちょっと古すぎます。別のコンパイラのほうがいいでしょう。gcc とか visual c++ とか、ちょっとふるいけれども borland c++5.5.1 とか。
せめて Turbo C 2.01 使えよ。 開発環境も付属だからそのまま使えるぞ。 試食版みたいな変な制限もないし。
>>94 レスありがとうございます。
今Turbo C 2.01について調べていたのですが、
これは日本語でも使えるのでしょうか?
英語のサイトが多くて導入が難しそうに見えたので…
>>95 了解。
で、プログラムの「再生」という言い回しは普通しないので、状況が伝わってきません。
コンパイルはうまくいっていますか?
コンパイルの結果生成した .exe ファイルが実行できないということですか?
関数の中で変数を使う場合、関数の前半で変数が定義されてる場合 関数を呼び出すほど変数のメモリを食うのですか?
>>97 すみません、初心者なもので言葉が結構足りてなさそうですね…申し訳ないです。
コンパイルは開始と終了がきちんと出てますので、成功しています。
ただコマンドを実行すると開始表示をしたままで止まってしまいますので
まさしく仰られている通りの状態かと思います。
>>98 最適化すると変数でメモリを食わなくなることがある
>>95 Visual C++ 2010 Expressじゃだめなん?
僕も、Visual C++ 2010 Express でいいと思います。もしくはCygwinのgccをおすすめします。
>>95 のリンクの人は現役のプログラマとは思えません。LSI-Cってwww
書かれていることが古く、ソースも下手クソ。参考にしないほうがいいです。
初心者は日本語とか手を出さない方が良いんじゃね? ASCIIオンリーで一通りやってみたら? 日本語だってローマ字を使えば書けるんだし。
>>101 >>102 実はスペックが足りないのか原因がよくわからないのですが、
DLが何度やっても完了されないのでそちらの利用を諦めたんです…
>>100 そういうことを聞いてるんじゃなくて・・一般的な話です。
>>105 最適化なしだとスタックに変数が割り当てられるといって欲しいのかな?
コンパイラ依存の...
初心者の前の入門スレなのに、どうでもいい知識はまじでいらん。
じゃあ、 Borland C++ Compiler 5.5 か LCC-Win32 辺りが良いんじゃね? 後者はタダでは商用不可なんで注意な。個人使用なら無償だが。
タダでは商用不可ってどういう意味だ?
tccで十分ですよ
わざわざ廃れた処理系を提示して、言語以前の段階で挫折させようとしているとしか思えない
cygwinは端末のウインドウがとりあえず開いてエラーとかハプニングで 閉じる事がないから使いやすい。誤ったコマンドライン入れたらバグ起こすけど。 初心者はcygwinかvisualstudioがいいんじゃないかな? エディタはメモ帳かtredpadで。
王道だな
一番良いのは Vine Linux をフルインストールすることだな。 これなら間違いはない。
それなら最初からDosで勉強したほうがいいだろ。
本当にCを理解したいなら、アセンブラをやるべきだろ。
Dosで勉強?どこかをサイバー攻撃しろと?
>>99 コマンドを実行するってのは出来上がったexeを実行してるってことだろうか。
なら、永久ループしてるとか入力待ちで止まってるとかじゃないのかな
123 :
118 :2011/06/05(日) 02:02:44.13
>>120 違う。Dos攻撃のことじゃない。
OSのMS-DOSで勉強したらいいんじゃねってことだよ。
denial operating system... ログインは出来ない
MS-DOS は日本語の表示ができないから質問者の意図に沿わない。
できないんだ
とりあえず、Windows でやりないなら何とかして Visual C++ を入れるべきだな。 前バージョンの 2008 でもいいし。 インストールはVCの該当スレで助けてもらって、 スタートラインに立てたらまたこっち来ればいいよ。
129 :
デフォルトの名無しさん :2011/06/05(日) 02:22:30.06
おまいら「スルーする」ということができないのか アスペか?
他人を気軽にアスペと呼んじゃう人が増えたよね そっちの方が心配だわ・・・
132 :
125 :2011/06/05(日) 02:29:06.82
クリック一回で二つの実行ファイルを別々のdos画面で同時に実行させたいんだけど どうやってもできない。 バッチファイルとか作ったりしたけどやっぱりできない。 誰か知恵を貸してくれ。
>>133 --- test.cmd ---
start cmd.exe /c foo.exe
start cmd.exe /c bar.exe
135 :
デフォルトの名無しさん :2011/06/05(日) 11:36:52.28
↓のように色んな型の変数を引数に取って、その型のサイズを表示する関数を作りたいんですけどどうすればいいですかね。 void show_size(『ここに任意の型の変数が取れるようにしたい』) { printf("%d", sizeof [引数に入れた変数]); } 『 』に何て書けばいいのか調べてるんですが全然分からなくて・・・誰か教えてください。
>>135 C言語だと関数では無理
マクロならそれっぽいのは可能
#define show_size(variable) printf("%d", sizeof(vairable))
137 :
75 :2011/06/05(日) 12:07:10.26
>>115 tredpad?
間違っていたらすいません。
treepadのことですか
>>138 terapad の typo だと思うよ。
142 :
デフォルトの名無しさん :2011/06/05(日) 15:42:50.59
>>136 ありがとうございます!!
マクロって便利ですね。
143 :
デフォルトの名無しさん :2011/06/05(日) 16:43:02.63
バブルソートでデータを並べ替えるプログラムを作りたいのですが 番号 成績 2001 85 2003 92 2002 90 → 2002 90 2003 92 2001 85 成績を並べ替えることはできるのですが番号を一緒に並べ替えることが出来ません・・・どなたか教えて頂けないでしょうか
成績を入れ替えるときに一緒に番号も入れ替えればいいだけ
145 :
デフォルトの名無しさん :2011/06/05(日) 16:50:44.12
これじゃ分かりにくいかな・・・ 2001 90 2002 92 2002 92 → 2001 90 2003 85 2003 85 訂正します、すみません
そういう用途のために構造体ってのがあるんだよ。
148 :
デフォルトの名無しさん :2011/06/05(日) 17:54:31.97
普通に規格票 PDF 版ならノート PC に入れても重量増加 0g 金ない人は K&R
そのHPを印刷すればいいじゃん。
>>148 K&Rがよさそうだったのでいろいろ見てみます
>>149 印刷するには量が多いし、すぐにボロボロになってしまいそうなので
どう見ても宣伝乙
>>150 HTMLのファイルをPCにコピーすれば良いんじゃない?
紙ベースのドキュメントはそろそろ止めましょう
>>152 当方大学生でして、どうでもいい講義中に勉強するために何かあればな、と思いまして
もちろんノートPCはもってないです
糞だな
>>154 何を目指してるか知らないから、どこまで本気か分からないが、
プログラムを学ぼうとするなら、PC位は自分のツールとして使える様になってないと
ノートPC(笑)なんて持ってないだろ普通w
俺は15年ほど前、工学部の学生だったころ、自腹で20万のノートPC買ったぞ。 今なら4、5万で買えるだろ・・・
なんか誤解?してCとかやろうとしてる人が増えたね。
いまどきノートPC持ってない大学生の方が珍しくないか?
Core i3とi5が出てCore2Duoが型遅れになったから中古を投げ売りしてるな HDDを換装してWindows7を入れればまだまだ使える
ラップトップなんて選ばないだろ。情弱じゃあるまいし。
だよね。今やるならJAVAじゃん?なんでC?
>>163 Cも書けないようだとプログラマとしての素養が疑われる。
Java = 土方
unsigned intより大きい整数を扱いたいとき long intを使わないとしたら、どのようにすればいいですか?
>>167 自前で大きい整数を扱えるような関数等を作る
ノートPC使わない(笑)って・・・家から出たりしないのか?
ノートPC買えないって話らしいけど。
struct int80_t{int32_t a;uint32_t b,c;}; を用意したとして 効率とかどうでもいいんで簡単な四則演算アルゴリズムを紹介して
>>169 普段は紙と鉛筆で問題をとく物理屋なんだよ言わせるな恥ずかしい
なら、まず消しゴムを買わないとな
>>169 わざわざパソコンするために出かけるのか
ビットシフトしたら1がいっぱいになりました どうすればいいですか
◆QZaw55cn4cはカス
多倍長数はGNPとかいうやつでいい。
GMPだ
GIMP か。
182 :
デフォルトの名無しさん :2011/06/06(月) 02:17:21.38
低燃費はGNPじゃなくTNPだぞ
scanfて手入れでボウリングのスコアを計算するプログラムを教えて頂けますか?
*(a + 1) + 1 // aはint型の配列 この式が返す値の型はaの次元数によらず 一定ですか?
いや一定でしょ
>>186 本にa[n]は*(a+n)の糖衣構文って書いてあったのですが、これだけだと正しくないですよね。
aがintなら、それで糖衣でしょ。
>>187 ,188
次元数が違うってこういうことじゃないの?
int a[1];
int b[1][1];
191 :
184 :2011/06/06(月) 11:27:32.21
>>190 188=184です。次元数とはそういう意味です。
>>189 188に書いた糖衣構文はaの型がint以外でも成立します。問題はaの型ではないです。
aがintの配列なら、どこまでいっても、中の値にどんな演算をしようと、中身の型はintだろ。 それはポインタでたどっても同じだろ。なにが聞きたいんだ??
>>191 やっぱそうだよな、おまえら次元数の意味勘違いしてるのかと思った
int a[2][2];で
*(a + 1) + 1
したら型はint *だろ
>問題はaの型ではないです。 そっか。配列名はアドレスだからね(塚、変数名は全部アドレスでしょ)。 インクリメントすれば、その変数の型分アドレスがインクリメントされるだけじゃんww そのアドレスの中身は、n番目の配列の中身と同じ。当たり前じゃんw
196 :
184 :2011/06/06(月) 11:59:30.79
197 :
184 :2011/06/06(月) 12:03:13.33
>>195 猫Cかポインタ完全制覇かエキスパートCか
基本から学ぶC言語のどれかだったと思います。
バカが理解できてないくせに教科書に文句つけるとかw
>>196 多次元配列においてもその糖衣構文には合致してるよ
お前が型の扱いを理解できてないだけで
疑問をもって解決すれば、理解は深まる。
3["abcde"]も、*(3+"abcde")の糖衣構文だね。
mallocとかで確保した領域のサイズをあとから知る方法ってありますか? やはり、自分で覚えておくしかないんでしょうか?
>>202 初心者は、stringやvectorでいいだろ。C++だがこっちのほうが簡単。
スレタイ読み返せ
>>202 環境依存だと思うが、規格票にはサイズを後から知る方法はどこにも見当たらない
ISO/IEC 9899:1999
>>202 自分が要求したサイズ+アルファがあるのです
どのくらい空き容量あれば どのくらいの程度のプログラムを どのくらい同時実行できるのかな・・・ さっき永遠に+1した数を表示し続ける奴をどんどん動かしてみたけど 5つぐらい動かしたところでタスクバーに動いているプログラムの表示がちょっとだけ追いつかなくなったのを見て 怖くなってすぐやめた。
動かすものによるとしか。
そうですか・・・ では動かすプログラムが最大でどの位メモリ使うのか 知る方法とかありませんかね?
静的な変数だけだとするとlinkerの吐くmapでだいたいわかるかな
cygwinを使っています。プログラムを作って 任意のファイルを読み込めるようにmain()関数が引数を取るように int main(int argc, char *argv[]) としたのですが、今まで上手く読み込めてたのに、ちょっとコマンドライン をいじってしまってコンパイルされるものの実行できなくなりました。 実行した瞬間にコマンドラインが改行されるだけになりました・・・ どうしたらいいでしょう?
>>212 任意のファイルから数字を読み込んで足し算を標準出力するという
プログラムが今まで出来たのに、コマンドラインいじって、できな
くなった。ちなみに同じプログラム。コンパイルはエラーなし。
もしかして: プログラム名がtest.
>> とか < とかコマンドライン入れまくってちょっとcygwinおかしくなったのかな? とにかく引数が取れない・・・
またcygwin(笑w)かよ。 もうこれは有罪だろ。
217 :
211 :2011/06/06(月) 18:03:59.07
すいません、できました・・ 実行ファイル名はsample.txtです。sample.datでもいいです。 ただa sample.txtやa sample.datだと無理です。以前はこれでいけました。 a.exe samle.txt ならいけます。 何故でしょうか?高度すぎてわかりません。
引数採るコマンドは動くのか?
環境変数の PATHEXT だな。 これいじったんだろ。
220 :
デフォルトの名無しさん :2011/06/06(月) 18:40:12.66
>>219 どういうことですか?
というかリダイレクトのコマンドが>だか>>だか<だを
色々コマンドラインにファイル名と読み込みファイル
とあわせて打ち込んだりしたからおかしくなったと思
うけど直し方分からないwwww
>>220 そんな思い込みは捨ててさっさといわれたことをやれ
a.exe < sample.txt > output.txt 入力リダイレクトではa.exeは上書きされないが、 出力リダイレクトであるoutput.txtは実行のたびに上書きされる。 おそらくこれらの順番がめちゃくちゃになったんだろ。 もう一度コンパイルとsample.txtを用意してやり直すべし。
223 :
デフォルトの名無しさん :2011/06/06(月) 19:12:04.44
>>222 頭良すぎ。
何でそんなすぐ原因わかるんだよ・・・
とりあえずリカバリーします。
リカバリーしてcygwinダウンロードしなおす。
まず日本語の勉強から始めるべきだと思うわめ。
#include <stdio.h> int main() { float a=7,b=3; printf("x = 7\ny = 3\n"); printf("(1)""x / y = %.2f\n",a/b); printf("(2)""x + y / 2 = %.0f\n",(a+b)/2); printf("(3)""x ++ * y = %.0f\n",a++*b); printf("(4)""x == y "" →7 == 3 =等しくない\n",a==b); printf("(5)""x > y = 7 > 3\n",a>b); printf("(6)""x % y = %.2f\n",a%b); printf("(7)""(double) x / y = %f\n",(double)7/3); printf("(8)""++ x * y = %.0f\n",++a*b); printf("(9)""! ( x ! = y ) ""→ ! (7 ! = 3 ) = 等しくない\n"); printf("(10)"" x / y ! = 2 ""→7 / 3 ! = %.0f\n",a/b); printf("何かキーを押してください\n"); getch(); printf("END\n"); return 0; }
>>225 文章が長いので分けました。連投失礼します。
>>225 のprintf("(6)""x % y = %.2f\n",a%b); についてお聞きしたいのですが
x%yの計算結果を表示させたいのですが、何度コンパイルしても
""で閉じた以降の「a%d」でエラーが出ます。
この書き方は間違っているのでしょうか?色々調べて見ても
よくわかりませんでしたのでこちらに来ました。
是非お教えいただきたいです…
floatで%はダメッ!
""で閉じた以降の「a% b 」でした…。 書き間違い失礼しました。
つ fmod
230 :
デフォルトの名無しさん :2011/06/06(月) 19:38:11.25
>>222 <なのか>なのかはっきりしてくれww
余計におかしくなる
直ったwwwwwwwwwwwwwwwwwwwwww cygwinすげぇwwwww
配列とハッシュの違いが分かりません。 データに即座にアクセスできるという点で一緒じゃないんですか?
>>232 辞書を引く時に、200ページ目に書いてあるよというのが配列
辞書を引く時に、「か」の項に書いてあるよというのがハッシュ
ネロに道連れにされて死んだのがパトラッシュ
PHPだと配列=ハッシュ
>>227 ということは新たにintで数を宣言したほうがいいですかね?
それ以前に、printf()系のフォーマット文字列に生の%はダメ。
!( x ! = y ) の式の真偽を判断するソースコードを書きたいのですが どのように書くのが良いでしょうか? ちなみにxとyの数値はプレイヤーが入力するのではなく 決められた数値となっています。
printf("%d\n",!( x ! = y ));
x==yじゃだめなのか
ファイルポインタからファイルディスクリプタを取り出すAPI ってなかったっけ? 逆ならあったんだけど
>>242 fileno()じゃないの?
つーか、寧ろ逆方向こそ知らない。
ハッシュってC言語なら何で実現するの? ヘッダとかマクロもわからん・・
>>244 逆はfdopen()とかじゃね?
Winにあんのかは知らないけど。
パソコンから入力した時間(10:20:30 のような)を 合計秒数に変換するプログラムを書きたいのですが 60秒を掛けていかないといけないから普通の加算じゃできませんよね? どのように書けばよいでしょうか…
60掛けてから足せばいいだろ・・・・・・・
:で分割して 3600かけて 60かけて
>>248 です。
皆さんレスありがとうございました。
私が色々勘違いしていたようです…お陰様で解決いたしました。
ちなみに上に書いたのと正反対の
パソコンから入力した秒数(1234567)を
1年2日3時間45分67秒 のように表記するソースコードを書きたいのですが
この場合どうしたらよいでしょうか。
ちなみにソースはつくり掛けですがこんな感じです。 #include <stdio.h> int main(void) { int a,b,c,d,e,f,g; printf("秒単位の時間を入力してください。(7桁以上)\n"); scanf("%d %d %d %d %d %d %d\n",&a); printf("%d年 %d日 %d時間 %d分 %d秒\n",a,b,c,d,e,f,g); printf("何かキーを押して下さい\n"); getch(); printf("END\n"); return 0; }
>>254 1分は60秒
1時間は3600秒
1日は86400秒
1年は31536000秒
あとはわかるな?
257 :
デフォルトの名無しさん :2011/06/07(火) 23:51:48.59
>>255 その程度のことしかいえないなら黙ってろ
本当はできないくせに
それが人にものを訊ねる態度じゃねーよな。
>>254 >>254 #include <stdio.h>
int main(void)
{
int a[5],b[5]={365*24*60*60,24*60*60,60*60,60,1};
int t,i;
printf("秒単位の時間を入力してください。(7桁以上)\n");
scanf("%d",&t);
for (i=1;i<5;i++) {
a[i]=t/b[i];
t%=b[i];
}
printf("%d年 %d日 %d時間 %d分 %d秒\n",a[0],a[1],a[2],a[3],a[4]);
printf("何かキーを押して下さい\n");
getch();
printf("END\n");
return 0;
}
261 :
デフォルトの名無しさん :2011/06/08(水) 03:36:00.39
次のオーダー記法に関する問題が分かりません。。 自然数上の関数Sが、以下のように再帰的に定義されている。 このSについての次の問いに答えよ。 S(0)=1, S(n)=6T( [n/2] ) + 8n ( [ n/2 ] はn/2の切捨て) (1) S(n) = O(n^k)とはなるが、S(n) = O(n^(k-1))にはならない 自然数k>=2を示せ。 (2) 上の問いの答えkに対して、S(n)=O(n^k)となることを証明せよ。 (3) 上の問いに対する証明論法ではS(n)=O(n)の証明はできない。 どこで議論が破たんするかを示せ。 ご教授お願いします。
ほっほっ
Tが何なのか??これ全文?
265 :
デフォルトの名無しさん :2011/06/08(水) 11:31:33.33
可変引数ってのは何者なんですか? 何の役に立つのですか?
printfは可変
>>265 例えばprintf()のことを聞いている?
それならそれがそのまま答えだ。
ふっほっ
そのまま vsprintf に丸投げ後、対象バッファ加工して出力とかはやるけど (必要に応じてパースし) va_arg() で逐次取り出すようなコードは書いたことないな
ほっほっ
C言語初心者でこのスレを見ながら勉強しています。
今スレを見ていてふと気になったんですが
>>259 に書いてあるコードの
for (i=1;i<5;i++) {
a[i]=t/b[i];
t%=b[i];
の部分、forの中身の意味が解りません。(計算的にも)
訳すとこれはどういうことなのでしょうか?
また、int a[5],b[5]={365*24*60*60,24*60*60,60*60,60,1};の部分も
なぜ「b」が必要なのでしょうか、aだけではダメなのでしょうか?
ふっふっ
>>271 年、月、日、時、分、秒でそれぞれ掛ける数を事前に求めてテーブルを作っている。
ループと配列を使う>259の遣り方が判り難いなら、単純に計算式を6セット並べればいいよ。
274 :
271 :2011/06/08(水) 23:14:15.38
>>273 計算式ということは普通に
printfなどの関数でも同じことができるということですか?
関数内関数オブジェクトはOKなのに関数内関数はダメなのってどういう意味があるんですか?
それってC++の話?
デタッチ属性のついたスレッドにpthread_kill(0)送ると、スレッドが終了してる場合にセグメンテーション違反で落ちることがあるんだが、代替手段てない?
>>277 入門の範囲を超えてます。該当環境または環境依存OKのスレへどうぞ。
>>274 printf()では掛け算はできません。
279 :
デフォルトの名無しさん :2011/06/09(木) 00:17:46.34
訂正です。 次のオーダー記法に関する問題が分かりません。。 自然数上の関数Sが、以下のように再帰的に定義されている。 このSについての次の問いに答えよ。 S(0)=1, S(n)=6S( [n/2] ) + 8n ( [ n/2 ] はn/2の切捨て) (1) S(n) = O(n^k)とはなるが、S(n) = O(n^(k-1))にはならない 自然数k>=2を示せ。 (2) 上の問いの答えkに対して、S(n)=O(n^k)となることを証明せよ。 (3) 上の問いに対する証明論法ではS(n)=O(n)の証明はできない。 どこで議論が破たんするかを示せ。 ご教授お願いします。
printf("=_%d\n", printf("_%d_",3) * printf("_*_%d_",5));
どや顔で書いたんだろうな
>>280 どう見ても、printf()の戻り値を掛けてますね。
まさかとは思いますが、それでprintf()で掛け算ができるといいたいわけじゃありませんよね?
printf()で掛け算ができないの意味がわからん 掛け算の式を引数にすることもできるだろ
287 :
デフォルトの名無しさん :2011/06/09(木) 12:14:06.46
>>271 1234567秒=0年14日6時間56分7秒
1234567=0*(365*24*60*60)+14*(24*60*60)+6*(60*60)+56*60+7
1234567=0*(365*24*60*60)
+14*(24*60*60)
+6*(60*60)
+56*60
+7
天才現る!!!!
ごめんなしあ
◆QZaw55cn4cって糞だよなぁ
成りすましたいときはコテ外すからな。バレてないと思っているのがまた萎える。 …とレスすると、 ↓ 成りすましということにしておけば… ↓ 以下自演ループ だもんな。本当に役に立たないだけのクズだ。
「QZさんよりいいコード書けるの?」が来るぞw
>>293 成りすましということにしておきたいのですね。
ヘ _ ヘ
ミ ・ ・ ミ
( )〜
--------------------------------------
◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ
AA使い始めたら、本格的に終了
ついにAA荒らしになったかw
よくQZって見るけどすごい人なんですか?
すごい頭の悪いキチガイ
おまいらキチガイはスルーしろよ、アスペが
アスペの◆QZaw55cn4cがまたほざきだしたな
この叩くレスの多さ、速さがたまらんね。 酉割れてるけど、それでもがんばるの?
QZaw55cn4cは糞
よっぽど痛い目にあわせられたんだろう。
なんだ◆QZaw55cn4cか
307 :
デフォルトの名無しさん :2011/06/09(木) 21:09:20.39
308 :
トリ :2011/06/09(木) 21:10:20.03
痛すぎ
>>308 その発想はなかったわwwwwwww
神wwwwwもっと評価されるべき!!!111wwwww
311 :
デフォルトの名無しさん :2011/06/09(木) 21:43:17.35
緊急です・・・教えてください!!! 以下の処理を実現するための式を考えてみよう。(C言語) (1)xの下位ビットをyへ、yはshort型とし、下位4ビット以下は1をセットする。 (2)xの下位ビットをchar型変数xの上位4ビットへ、yの下位ビットをzの下位ビットへ代入する。
>>311 問題文省略しすぎ
(1)(2)に出てくるxの型は?下位ビットが曖昧
(2)にはxが出てくるけど、あってる?あと変数の型も明記してください。
314 :
デフォルトの名無しさん :2011/06/09(木) 21:55:08.41
>>313 すみません・・・問題文にこれだけしか書いてないのです><
316 :
デフォルトの名無しさん :2011/06/09(木) 22:08:13.98
>>314 問題文って言うか、前後にどういう説明があって、この問題が出されているの?
(2)には2カ所xが出るけど、この問題文の前には、何かの説明があるんでしょ?
318 :
デフォルトの名無しさん :2011/06/09(木) 22:15:23.19
●ビット操作1【マスク処理:特定ビットをフィルタリング】 y=x&0x0f; ←xの下位4ビットをyへ、それ以外のビットは0 ●ビット操作2【特定ビットをセット】 y|=4; ←yのビット2を1にセット ●ビット操作3【特定ビットをクリア】 y&=~8; ←yのビット3を0クリア 以下の処理を実現するための式を考えてみよう。(C言語) (1)xの下位ビットをyへ、yはshort型とし、下位4ビット以下は1をセットする。 (2)xの下位ビットをchar型変数xの上位4ビットへ、yの下位ビットをzの下位ビットへ代入する。
>318 問題の体をなしていないって突き返すのが、正解では? >(1)xの下位ビットをyへ、 ・「下位ビット」とは何を指す?yへどうする? >yはshort型とし、下位4ビット以下は1をセットする。 「下位4ビット以下」って何を指す?4ビットより下位は、とかならまだ分かるけど、どうしてほしいか不明。 >(2)xの下位ビットをchar型変数xの上位4ビットへ、yの下位ビットをzの下位ビットへ代入する。 これも「下位ビット」が何を指すのか不明。
>>311 (1)
y=(x&0xffff)|0x0f;
(2)
x=(x&0xf)<<2;
z=y&0xff;
脳内補完して書いた。
(2)の中の、char型変数xって、もしかしてzの間違いじゃない?
322 :
デフォルトの名無しさん :2011/06/10(金) 01:19:19.41
リンクするためのメイクファイルを作成したいのですが 記述方法がわかりません。 詳しくのってるサイトなど教えてもらえませんでしょうか? またリンクするためのメイクファイルというのは 生成された oファイル分必要なのでしょうか?
◆QZaw55cn4cはなんでメ欄ばっか使うの?クズだから?
hoge.exe: gcc main.o lib.o -o hoge.exe こういう話なんだろうか…?
>>322 コンパイラ、リンカによってコマンドが違う
makefile 一つでターゲットの数100でも200でもいける
#include <stdio.h> unsigned str_length(const char str[]) { unsigned len = 0; while (str[len]) len++; return (len); } int main (void) { char st[100]; printf("文字列を入力してください:"); scanf("%s",st); printf("文字列%sの長さは%uです。\n",st,str_length(st)); return 0; } 本に載っていたプログラムです。なぜintではなくunsignedでわざわざ書かれているのでしょうか?
符号付き整数だとまずいと思ったんじゃないの?
unsigned って、型じゃないよね。unsigned int の間違いか?コンパイルできるのか? と思ったけど、コンパイルできた。いいのか?w
>>328 unsigned は unsigned intなんだよ
省略は int な。 main(); が int なのと同様。
>>326 まあ好意的に解釈するなら、intでは表しきれないほど長い文字列で
オーバーフローしないようにしているとか……?
もし非負であるというlenの条件を型に組み込もうとして
unsignedにしたのであれば、それはCではやめたほうがいい発想だと思う
unsignedは暗黙の型変換絡みで直感的でない挙動を示すことがあるので、
多くの場合はintを使うのがよい
標準strlen()の返り値はsize_tでsize_tは符号なしだから、そのに合わ せたんじゃ?
intが一番速く動作するよ
unsigned == unsigned int == int unsigned signed == int == signed int == int signed short == signed short == short signed == signed short int == signed int short == ...
signed char == char != unsigned char || signed char != char == unsigned char
争いは同レベルの者でしか起きない
ま、言語仕様を見る限り、unsignedは型修飾子であって、
>>326 のような書き方は邪道ですね。
型修飾子としてのunsignedを仮定すると ならユーザ定義の構造体Aに対してtypedef hoge := unsigned Aとかできるのだろうか? どういうセマンティックになるのか?あるAが体を成していると考えたときに和算に対するinvである-を除いた代数が想定されるのか それをわざわざ言語に組み込む程、用途は多いのだろうか 疑問は尽きない
ANSIによると、signed、unsignedが追加されたのは整数型とある
例えばstatic foo;と書けばstatic int foo;と書いた事になるのと同じことだ。気にするな。
省略がいいとは限らんけどね
6.2.5 Types 6 For each of the signed integer types, there is a corresponding (but different) unsigned integer type (designated with the keyword unsigned) that uses the same amount of storage (including sign information) and has the same alignment requirements. The type _Bool and the unsigned integer types that correspond to the standard signed integer types are the standard unsigned integer types. The unsigned integer types that correspond to the extended signed integer types are the extended unsigned integer types. The standard and extended unsigned integer types are collectively called unsigned integer types.30) ISO/IEC9899:1999にこう書いてあるんだからunsignedでいいだろ 何を揉めているんだ
?? 符号付き整数型には、キーワードunsignedで指定された、それぞれに対応する符号無し整数型がある・・・とあるだけだが?
省略したら int ってのは基本だろJK
>>333 直感的でない挙動って具体的に何さ?
符号の有無は最上位ビットを「最終的にどう解釈させるか?」でしかないのであって、
四則演算やビット処理にしたって、内部の処理内容は符合に関わらず同じだろう。
じゃこれか 6.7.2 Type specifiers 2 At least one type specifier shall be given in the declaration specifiers in each declaration, and in the specifier-qualifier list in each struct declaration and type name. Each list of type specifiers shall be one of the following sets (delimited by commas, when there is more than one set on a line); the type specifiers may occur in any order, possibly intermixed with the other declaration specifiers. ? void ? char ? signed char ? unsigned char ? short, signed short, short int, or signed short int ? unsigned short, or unsigned short int ? int, signed, or signed int ? unsigned, or unsigned int ←★ここ ? long, signed long, long int, or signed long int ? unsigned long, or unsigned long int ? long long, signed long long, long long int, or signed long long int ? unsigned long long, or unsigned long long int 以下省略
うほっ
6.7.2 型指定子 それぞれの宣言の宣言指定子列の中で、又はそれぞれの構造体宣言及び型名の型指定子型修飾子並び の中で、少なくとも一つの型指定子を指定しなければならない。型指定子の並びは、次に示すものの いずれか一つでなければならない(1行に二つ以上の組がある場合、コンマで区切ってある。)。 型指定子は、いかなる順序で現れてもよく、更に、他の宣言指定子と混合してもよい。 - void - char - signed char - unsigned signed char - short, signed short, short int, signed short int - unsigned short, unsigned short int - int, signed, signed int - unsigned, unsigned int - long, signed long, long int, signed long int ・ ・ ・ 混合してもいいし、順序もどーでもいいのかww
んなツマンナイ話題より わくわくする様なコードを引き出す効率ネタを振ってくれよ
356 :
デフォルトの名無しさん :2011/06/10(金) 22:09:25.80
データ検索でハッシュ法よりはやい方法ありますか? また大学1年ですがハッシュを知ってる僕って進度速いほうでしょうか? 皆まだ関数だの制御だの基本文法に慣れてない人が7割くらいです。
状況によりけり
C言語と相性の良いグラフィックライブラリ教えてください。
OpenGL
>>356 qsort()してからbsearch()するとか
>>362 状況にもよるかもしれんけど、一般的にはバイナリサーチよりハッシュのほうが速いと思う。
ハッシュを混ぜて速度を語ると 探索処理をどこまで事前に済ませておけるかに成るから本質的じゃないっすよ
キーを配列添字にして、値を保存し、キーを使ってアクセス
Javaのコレクション・フレームワークみたいなものって、Cには無いんですか?C++ならありますか?
サンクスコ
八種法って、コリコリした場合の回避方法もセットで実装しないと使い物にならないんじゃないの?
メモリは無限にあるものだから 1対1対応のハッシュにすればコリコリしない!
ハッシュは考えることが多くてメンドクサいの ハッシュ関数どうしようとかコリったらどうしようとか再ハッシュの閾値とか 適当に線形検索とかでやっちゃってもいいと思うの
わざわざ自作するからでしょ・・・
実際、データ件数が少なければ、線形で十分だよね。
バイナリサーチもそこらのPGに作らせると高確率でバグってるって話題あったな。
時間と人件費をかけてバグを実装するのか・・・
次の方の仕事を用意してると言って下さい。
今は、バグバグがはやりなんじゃあ
バグを入れることによって次の仕事が発生する まさに自足自給
MSの悪口は許さんぞ。
QZaw55cn4cはクズ
>>351 intと混在するケース
unsigned u = 0;
if (-1 < u) {
printf("出力されない");
}
意味的には (unsigned)-1 < 0 だと気づかないとハマる
この辺を考慮してだと思うが、C FAQでは
>オーバーフローの時の性質の明確なことが大事で負の値が不 要なら、
>対応する符号なしの整数を使え(ただし符号付と符号なしの 整数の混在には注意すること)。
としている
>>383 それ挙動がおかしいんじゃなくて、使い方がおかしいだけじゃんかよ。
負数との比較が出てくるならちゃんとint使わなきゃダメに決まってる。
ハマらない書き方ってのがイガイと難しいからね
>>384 挙動がおかしいかどうかを議論する気はない
しかしCリファレンスマニュアルでも触れられてるような落とし穴ポイントだから
普通は「直感的でない」と言われるような部分だと思う
constの正確な書き方を教えろ
const 意識して使ったことないなあ
正確な書き方って言われても付ける場所によって意味が変わったり変わらなかったりするけど const int * const int *const int *const int const * int const *const お好きなものをどうぞ?
>>386 暗黙の型変換では、式での最上位の型に自動的に拡張される。優先順位は、
long double > double > float > unsigned long int > long int > unsigned int > int
である。つまり
>>383 の例ならば、
int < unsigned int
なので、左項が自動的に上位のunsigned intに拡張され、
unsigned int < unsigned int
と内部的に処理される。
>>389 const int * hoge;
const int * const hoge;
int * const hoge;
int const * hoge;
int const * const hoge;
とすると分かりやすいと思う
* の左側にconstがあるものは *hoge がconst
* の右側にconstがあるものは hoge がconst
>>391 それ
わざと解かりにくくしてオマエが喜んでるだけだろ
393 :
デフォルトの名無しさん :2011/06/11(土) 12:28:04.59
1兆個の数字を大小に並び替えるって、リストなら1時間くらいかかりそうだが ハッシュだと3分くらいでできると思うんだがどうでしょう?
395 :
デフォルトの名無しさん :2011/06/11(土) 12:29:45.84
何をお願いしてるんだろう?
馬鹿には頼んでいません
398 :
デフォルトの名無しさん :2011/06/11(土) 12:40:37.08
解説してください
いやです
>>394 1兆だから桁数は平均7だろ。
リストのデータに達する時間をTとしたらハッシュの場合(7/500000000000)T
500000000000/7倍ハッシュのほうが速いってことでOKですか?
なぜ桁数が関係してくるんだろう?
>>401 桁ごとに線形リスト作ってるから。
あれ違うっけ?
そうだよばかども
ハッシュは文字列以外にしか有効じゃないのかな?
1兆個の整数を3分でソートできるアルゴリズムがあると聞いて
え?w3分じゃ速いんですか?
ハッシュっていうと考え方だけの話で 実装の仕方によって性能はちがうんだと思ってたんだが 間違ってる?
1兆舐めすぎだろ1つ4バイトだとして 4 000 000 000 000バイト = 3 725.2903 ギガバイト のデータを3分でソートしちゃうの?
周波数を指定して音を鳴らしたいのですがBeepだと特定の環境ではマザーボードから音が出てしまうの ヘッドホンで聞ける音として出したいのですがそういう関数はございますか?
ございません
winAPI
そちらで効いてきます 誘導ありがとうございます
>>407 それ言い出すと、どんなアルゴリズムでもそうだからな。
大まかな話なら「ハッシュはO(1)でバイナリサーチはO(log2N)でハッシュのほうが速い」でいいよ。
質問がありますのでお願いします。 少々理由があってプログラムの勉強(C言語)を1からやらなければならなくなりました。 そこで質問ですが、C言語を学ぶ上で数学の知識は必要でしょうか?確か高校レベルな数学知識が必要だった気がしたのですがどの辺りを学べばいいかアドバイスお願いします
C言語だけなら要らない C言語で暗号を扱いたいなら暗号の知識がいるし C言語で3Dを扱いたいなら3Dの知識がいるし C言語で数学の計算をしたいなら数学の知識がいるというだけ
あ?プログラミング自体が数学だボケ 大学からやり直せ
数学的帰納法が分かっていれば再帰処理が書きやすくなるかも
算数レベルの知識しか無かった当時小学生の俺でもC言語は使えていたから C言語を学ぶのに数学の知識が要らないのは確かである プログラミング自体が数学だということが問題なのではない
>>421 こういう馬鹿にならないためにも本をいっぱい読もう
終わり
数学の知識が必要だと言われたとして、Cを勉強せずに、まず数学の復習からはじめるんだろうか、この人・・
天才なのか、「使える」の基準が著しく低いのか不明だ
論理的思考を抽象的な意味で数学だと言うなら、必要だということになるかもしれないが、 むしろ日本語の読解力のほうが必要な気がする
英語の本で勉強するの? まぁ別にそれでもいいよ
実に不思議な質問だ
数学は必要なくても 高校数学くらいさくさく理解できる程度の知能は必要
勉強し始めてみればいいだけだよね 躓くならそこで立ち止まって他の必要なことを勉強すればいい
構造体の中の、char 型ポインタのアドレスについて教えてください 下記のプログラムを実行すると Address 1 の値とAddress 2 の値が同じになってしまいます。 脳内では、例えばAddress 1 が0x0000h だとすると、Address 2は0x0005h と表示したいのですが、頭が悪くてできません。宜しくオナガイシマス。 #include <stdio.h> typedef struct _IplImage { int nSize; char *imageData; } IplImage; int main() { char *p; IplImage image = {10, "abcdefghijklnmopqrstuvwxyz"}; IplImage *pIplImage; pIplImage = ℑ p = &pIplImage->imageData[0]; printf("Address 1 = %x\n", &p); printf("Value = %s\n", p); p = &pIplImage->imageData[5]; printf("Address 2 = %x\n", &p); printf("Value = %s\n", p); return 0; }
&pじゃなくてpを表示させないと
>pIplImage = ? ってなんだw
>>432 欲しいのは「pが指しているアドレス」じゃないの?
だったら&pじゃなくてpだよ。
&image;でℑが出るとは知らなかったな
ℑ
Wao! できました、皆さんありがとう pIplImage = ℑ ですが、偶然ですなんでだろう^^ "pIplImage = ℑ"
面白いですね^^ pIplImage = ℑ ピー アイ(大文字) ピー エル アイ(大文字) エム エー ジー イー 半角スペース イコール 半角スペース アンパサンド アイ エム エー ジー イー セミコロン です
断る。
& h e l l i p ; ↓ …
444 :
デフォルトの名無しさん :2011/06/12(日) 14:44:26.72
今日、栄のジュンク堂書店いってくる(´・(エ)・`)
445 :
417 :2011/06/12(日) 15:40:35.12
アドバイスありがとうございます。こちらが勘違いしていたみたいです
C言語なら俺に聞けの「俺」って誰ですか?
俺だよ、俺。 教えてやるから、金振り込んでくれよ。
いやいや俺だよ、俺
昔はまなちゃんが教えてくれるスレとかお姉さんが教えてくれるスレとかあったな。
単発ネタならよかったんだが、しつこい奴もいたな
mainの中にstrftime()をif分岐で3パターン作っています(1なら標準、2ならグリニッジ、3ならstrftimeで取得)。 このとき、strftimeの%Yを書く部分をfgetsで取得したキーボードからの文字列で動作させているのですが、 VC6.0で起動させたところ、if文に入れなければ動作しますが、if文の中に入れて動かすとエラーでプログラムが強制終了されます。 何の原因が考えられるでしょうか?
日本語がとっちらかっている。おそらくコードもとっちらかっているのだろう。
◆QZaw55cn4cはクズ
ほっほっ
ふっほっ
(「・ω・)「 ガオー
ぶはっ!選ぶはっ!
>>452 VC6.0は標準C++と変数のスコープが違っていただろ
その当たりのバグじゃないのか?
(゚σ ゚)ホジホジ
おい!web上で使えるSVNのサービスってないのか。あったら教えてください
googlecodeとかってこと?
463 :
デフォルトの名無しさん :2011/06/13(月) 23:01:23.46
C言語をはじめたばかりであまりわからないのですが、 ビットシフトはなんの役に立つのでしょうか?
*2 /2 はビットシフトで置き換えられる。
githubのsvn版みたいのないすか
>>463 bmpファイルをfopenで直接読み込んで色データを取り出したいときとか
GoogleCode、SourceForgeなどなど
468 :
デフォルトの名無しさん :2011/06/13(月) 23:24:50.09
a(){ int i=0; L: printf("%d\n", i++); goto L; } main(){ a(); } これを実行すると延々と数が増加していく。 これを、a()に変更を加えずに、a()の処理が100ms毎に一時停止と再開を繰り返すようにするには、どうしたらいいですか?
別スレッドとか別プロセスを作ってそっちから開始停止を操作する printfを自分で定義して100msごとに〜って言う動作をさせる(笑)
アスペクト指向を使うとかしか思い浮かばない
先頭に #include <unistd.h> #define printf usleep(100000); printf を追加
473 :
デフォルトの名無しさん :2011/06/14(火) 06:05:31.83
シミュレーションのプログラムを実行したいのですが、次のようなエラーが出てしまい実行できません。 少し調べたところ、何かをリンクできていないようです。 しかし、それが一体何なのか分かりません。 どのようにすればよいのでしょうか? Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland mcco.c: 警告 W8070 mcco.c 53: 関数は値を返すべき(関数 main ) 警告 W8004 mcco.c 142: 'number' に代入した値は使われていない(関数 OMonteCarlo ) Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Error: 外部シンボル '_sgenrand' が未解決(C:\MYSRC\MCCO.OBJ が参照) Error: 外部シンボル '_sendconstantlattice' が未解決(C:\MYSRC\MCCO.OBJ が参照) Error: 外部シンボル '_sendrandomlattice' が未解決(C:\MYSRC\MCCO.OBJ が参照) Error: 外部シンボル '_onespeciesgathermetropolis' が未解決(C:\MYSRC\MCCO.OBJ が 参照) Error: 外部シンボル '_getaftermoveposition' が未解決(C:\MYSRC\MCCO.OBJ が参照) Error: 外部シンボル '_probofOhoppingCO' が未解決(C:\MYSRC\MCCO.OBJ が参照) Error: 外部シンボル '_probofCOreaction' が未解決(C:\MYSRC\MCCO.OBJ が参照) Error: 外部シンボル '_genrand' が未解決(C:\MYSRC\MCCO.OBJ が参照) Error: 外部シンボル '_changespecies' が未解決(C:\MYSRC\MCCO.OBJ が参照) Error: 外部シンボル '_probofCOexist' が未解決(C:\MYSRC\MCCO.OBJ が参照) Error: 外部シンボル '_changetotalvalue' が未解決(C:\MYSRC\MCCO.OBJ が参照) Error: 外部シンボル '_Arrhenius' が未解決(C:\MYSRC\MCCO.OBJ が参照) Error: 外部シンボル '_returndeltatime' が未解決(C:\MYSRC\MCCO.OBJ が参照) Error: 外部シンボル '_duplicatelattice' が未解決(C:\MYSRC\MCCO.OBJ が参照) Error: 外部シンボル '_savemfile' が未解決(C:\MYSRC\MCCO.OBJ が参照) Error: 外部シンボル '_randomnumber' が未解決(C:\MYSRC\MCCO.OBJ が参照) Error: 外部シンボル '_countspecies' が未解決(C:\MYSRC\MCCO.OBJ が参照)
ソースファイル1つだけじゃないんだろ。 bcc32 *.c とかやってみたら?
リンク以前にコンパイルできてないじゃん。一番最初の警告を解決しろよ。
えっ
>>475 どう見ても、コンパイル完了後、リンクしようとして出たエラーですが。
◆QZaw55cn4cは糞
すみません、 痴漢バスの千尋のほかの作品や他の女優名がわからないでしょうか? 誰か詳しい方お願いします
bcc32はDLL関連だとしたらめんどくさいよ。
cのユニットテストって何を使えばばいいんでしょうか? apacheのモジュール開発なんだけど
だから俺に聞けって誰だよ 誰に聞けばいいんだよ
オレオレ
>>480 ありがとうございます!
高度情報が豊富で助かります
糞サイトのURL貼るな
>>480 に技術力で劣っている人間は多いだろうが、嫉妬で叩くのはくれぐれもやめたまえよ
このサイトが糞だったらMSDNは糞以外だはw
釣れたw
プレイヤーが整数を4つ打ち込んで その中の最大値と最小値を出すプログラムを書きたいのですが どうしても作れません… elseを使わなくてはいけないのですが…どのように書いたらいいでしょうか?
ソート使うのありなら簡単 なくても簡単
#include <stdio.h> int main(void) { int a; int b; int c; int d; int x; printf("1つ目の整数を入力せよ\n"); scanf("%d",&a); printf("2つ目の整数を入力せよ\n"); scanf("%d",&b); printf("3つ目の整数を入力せよ\n"); scanf("%d",&c); printf("4つ目の整数を入力せよ\n"); scanf("%d",&d); printf("【 %d , %d , %d , %d 】\n",a,b,c,d); if(a == '>') { printf("最大値は、%d\n",a>b); } else if (a) printf("最大値は、%d \n",a>b); printf("何かキーを押して下さい\n"); getch(); printf("END\n"); return 0; }
すごく初歩的なのですが #include <stdio.h> int main() { printf("1+2+3+4+5\n"); return 0; } これだと1+2+3+4+5と表示されるのですが 計算させるにはどうしたらいいんでしょうか?
上記が作りかけのソースです。 ソート?というのはまだ習っていないので恐らく使わないと思います…
>>497 printf("%d",1+2+3+4+5);
>>497 printf("1+2+3+4+5\n");
printf("%d\n", 1+2+3+4+5);
構って欲しいからって馬鹿の振りするのやめようよ
>>496 #include <stdio.h>
int main(void)
{
int a[4];
int i;
int max;
int min;
for(i=0;i<4;i++) {
printf("%dつ目の整数を入力せよ\n", i+1);
scanf("%d",&a[i]);
}
printf("【 %d , %d , %d , %d 】\n",a[0],a[1],a[2],a[3]);
for (i=1,max=a[0],min=a[0];i<4;i++) {
if(max<a[i])
max=a[i];
if(min>a[i])
min=a[i];
}
printf("最大値は、%d \n",max);
printf("最小値は、%d \n",min);
printf("何かキーを押して下さい\n");
getch();
printf("END\n");
return 0;
}
>>503 回答ありがとうございます。
ちょっと色々自分で調べてたのですが、
ソート?の解釈は繰り返し文ということでよいでしょうか?
また、
>>503 様が書いてくださった「max」等の関数を
まだ習っていない状態なのですが、
(現在printf scanf if for程度までは習ってます)
何か別のものに置き換えることは可能なのでしょうか…。
要素数5の配列aを順番逆にして配列bにコピーしたいんですがどうしたらいいですか? 変数tempなりをつくって入れ替え処理でしょうか? お願いします。
>>505 for (i=0;i<5;i++)
b[4-i]=a[i];
>>504 もう一度よく復習をしよう
変数の宣言と四則演算あたりから
>>510 よく考えると理解できました。
ありがとうございます
>>504 else文を使う必要がある、と書いているけど?要件を満たしていないけどOKなの?
>>514 static int count = 0;
staticにするか外に出すかパラメータ化する
if (low < j) count += sort_quick(low, j, array); // 前半部についてソート if (i < high) count += sort_quick(i, high, array); // 後半部についてソート
>>513 昨夜の
>>504 です
関数も習っていませんし、elseも使っていない状態なので
とても申し上げにくいのですがOKじゃないですね…
一晩考えましたがやっぱりよくわかりませんでした。
どのように書くべきでしょうか…
>>518 最大数の場合、4つの数を比較して、一番大きいのを選び出さないといけないよね?
最低限、比較して、判定する if は使わないといけない。 これを使ってよければ、
1.最初に4つの数を、それぞれを変数a、b、c、dに格納する。
2.maxとminの変数を用意する。
3.maxとminにaを代入する。
4.maxとminをそれぞれ、bと比較する。
5.maxよりbが大きければ、maxにbの値を代入する。
6.minよりbが小さければ、minにbの値を代入する。
以下、4.〜6.と同様の処理を、cとdで行う。
最後まで行うと、maxとminには4つの数の最大数、最少数が入っているので、それを表示する。
文章で書くとこんな感じかな。
何行目がわからないんだ? いままでやったこと復習しろよ
>>518 #include <stdio.h>
int main(void)
{
int a,b,c,d;
int max,min;
printf("1つ目の整数を入力せよ\n"); scanf("%d",&a);
printf("2つ目の整数を入力せよ\n"); scanf("%d",&b);
printf("3つ目の整数を入力せよ\n"); scanf("%d",&c);
printf("4つ目の整数を入力せよ\n"); scanf("%d",&d);
printf("【 %d , %d , %d , %d 】\n",a,b,c,d);
max = a; min = a;
if (b > max) max = b; if (b < min) min = b;
if (c > max) max = c; if (c < min) min = c;
if (d > max) max = d; if (d < min) min = d;
printf("最大値は、%d \n",max);
printf("最小値は、%d \n",min);
return 0;
}
else使えよ
使わないといけないんだ。ごめんな
524 :
デフォルトの名無しさん :2011/06/15(水) 20:54:14.58
>>473 です
>>474 さん
ご指摘ありがとうございます。返事が遅くなってごめんなさい。
言われたように「*.c」で実行したところ、エラーが消えて次のような警告だけになりました。
c:\mysrc>bcc32 *.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
data.c:
mcco.c:
警告 W8070 mcco.c 53: 関数は値を返すべき(関数 main )
警告 W8004 mcco.c 142: 'number' に代入した値は使われていない(関数 OMonteCarlo )
mechanism.c:
警告 W8057 mechanism.c 293: パラメータ 'lattice' は一度も使用されない(関数 getaf
termoveposition )
potential.c:
警告 W8004 potential.c 36: 'Onumber' に代入した値は使われていない(関数 probofCOr
eaction )
警告 W8004 potential.c 58: 'Onumber' に代入した値は使われていない(関数 probofOho
ppingCO )
random.c:
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
525 :
デフォルトの名無しさん :2011/06/15(水) 20:55:48.22
>>524 の続きです
そのアウトプットはdata.exeとdata.tdsでしたが、一応実行したところ次のように表示されました。
「please check the command line!!」
しかし、「please check the command line!!」という表現はMCCO.cファイルのprintfにしか含んでいないので、
なぜこれがdata.exeを動かしてでてくるのかわかりません。
私自身C的外れなことをやっているのかもしれませんが、
もしこの僅かな情報から何か示唆して頂ける方がいましたら教えて頂きたいです。
よろしくお願いします。
main関数がどこにあるのかしらんが、コマンドラインのチェック処理がMCCO.cのなかにあるんでないの その調子で続けるならエスパースレ推奨
527 :
デフォルトの名無しさん :2011/06/15(水) 21:16:17.36
構造体配列の検索にbsearch関数を使用すると検索可能なのですが、lsearch関数(lfind)を使用すると セグメンテーション違反が出力されてしまいます。 配列自体は要素が少なく、線形探索で実現するためにlfindを使用したいのですが、 セグメンテーションが出力される要因がありましたら教えていただきたいと思います。
>>518 else使うように直したよ
#include <stdio.h>
int main(void)
{
int a,b,c,d;
int max,min;
printf("1つ目の整数を入力せよ\n"); scanf("%d",&a);
printf("2つ目の整数を入力せよ\n"); scanf("%d",&b);
printf("3つ目の整数を入力せよ\n"); scanf("%d",&c);
printf("4つ目の整数を入力せよ\n"); scanf("%d",&d);
printf("【 %d , %d , %d , %d 】\n",a,b,c,d);
max = a; min = a;
if (b > a) {
if (c > b) if (d > c) max = d; else max = c; else if (d > b) max = d; else max = b;
} else {
if (c > a) if (d > c) max = d; else max = c; else if (d > a) max = d; else max = a;
}
if (b < a) {
if (c < b) if (d < c) min = d; else min = c; else if (d < b) min = d; else min = b;
} else {
if (c < a) if (d < c) min = d; else min = c; else if (d < a) min = d; else min = a;
}
printf("最大値は、%d \n",max);
printf("最小値は、%d \n",min);
return 0;
}
529 :
528 :2011/06/15(水) 21:24:33.47
>max = a; min = a; これいらない。消しておいてください。
変なロジックになったwww
>>527 lsearch() は、マッチする要素を見つけられなかったとき、配列の最後に key をつけ加える。そして *nmemb を 1 ふやす。したがって、この関数を使用
する際には、マッチする要素が存在するか、もしくは配列に要素を追加するための領域があるか、を把握しておく必要がある。
これは?
なんでcにはbyte型がないの? sizeof (char)が必ず1になるから、 malloc等の引数でイチイチ n * sizeof (char)とか書かなくていい、 いや、書いたほうがいいとかのクソ議論が起こらないはず。byteなら。 さらにchar四文字、byte四文字でタイプ数は増えたりもしないし。 想像するに、 ・そんなに欲しけりゃtypedefしれ ・1byteが8bitというのも当時は定番じゃなかった?から、抽象的にcharとゆっといた。 とか?
用途で名前付けただけだろ。 integer → int character → char
逆にbyte型って他の言語にあるの?
今更、逝っても何も変わらないだろうに、俺俺言語作るしか
ないよ
汗?
539 :
デフォルトの名無しさん :2011/06/16(木) 12:08:22.74
すいません、昔のベーシック言語でいうところのcls(画面をクリアする)コマンドというか関数はありますか?
横×縦の数のスペースを出力すれば良い。 ボーランド系なら clrscr() 使え。 Win98 までなら "\x1b[2J" を出力しても良い。 system("cls"); でも良いな。 *BSD or 犬糞なら system("clear");
541 :
539 :2011/06/16(木) 13:18:54.57
他のスレへ移動するため539の質問を撤回します
542 :
539 :2011/06/16(木) 13:20:19.97
>>540 被りました、どうも
回答ありがとうございました
その辺やるならボーランドが楽だよな。 カーソル移動や画面制御等いろいろ用意されてる。 conio.h 見るだけで使い方も大体解るからすぐ使えるし。 Turbo-C 2.0 でも BCC 5.5 でも共通だから移植も一発だし。
C言語やってるんですがジスコードとアスキーコードの違いがわかりません・・ どういうことでしょう?
コンピュータの世界では文字はすべて番号で管理されている
>>545 デコメみたいに絵文字はどうなんですか?
>>544 aciiはアメリカの文字コード
jisはaciiを拡張して、カタカナも表示出来るようにしたもの
shift_jisは(ry
>>546 絵文字であっても例外は在りません
と言うか、普通の文字のフォントもビットマップです
要するに、この番号はこの絵(見た目は文字)を表示しろ。と命令してる訳ですね
>>547 プログラミングではjisって何バイトですか?
charが1byteだから1byte?
後プログラミング環境で一番簡単なのはどれですか?
visual studioはオプションが多すぎて全く理解ができないので
初心者にも分かりやすい奴お願いします。
>>549 まず、shift_jisとjisは違うという事から、覚えて置いてください
jisはaciiが7bitしか使わないので、余った部分にカタカナを詰め込んだ文字コードで、8bit(1byte)です
shift_jisは漢字も使えるように拡張したもので、2byteです
プログラミング環境で一番簡単なものと言うのは分かりません
英語しか表示出来ないaciiでしょうか。。。
日本語は表示するだけなら、特に難しい事は無いですが、文字列処理の時は、どの文字コードでも鬼門です
>>532 byteでロジック考えるようなところにはマシン語使ってたから
553 :
デフォルトの名無しさん :2011/06/16(木) 19:42:31.67
>>551 ありがとう、jisとaciiってそもそも何なんですか?Osに組み込まれた規格なのでしょうか?
例えばwindows95だと何規格なんでしょうか?
>>532 被る機能は作らないとか言う精神が有ったらしい
この場合、char = byteだからな
気に食わないなら、#defineで別名作ればおkって文化だった
自分で調べる気がない人が...
>>553 え。。。
文字の規格ですが。。。
この番号はこの文字っていうルールが企画ごとに違うのです
OSとかは規格とは関係なくて、私たちが気にするのは、どのOSやどのアプリがどの文字コードをサポートしてるか?です
それに合わせて作るだけです
期待のunicodeもmsだけ独自になってて、元の木阿弥です
557 :
デフォルトの名無しさん :2011/06/16(木) 19:53:52.23
>>556 ありがとうございます、よくわかりました。
C言語の場合アスキーコードに対応していますか?
558 :
デフォルトの名無しさん :2011/06/16(木) 19:57:33.44
>>557 C言語にはそもそも文字コードの概念が無い、だから対応も糞もない
現実的な話だと大抵の環境でアスキーコードだと決め打ちでいける
文字コードの概念ないと文字化けしないんですか? 文字ライブラリからC言語によって文字を呼び出すわけでしょ?
>>557 ええっと。。。
コンパイラに依存するとしか。。。
まあ、aciiはjis,shift_jis,ecu,unicodeなど、あらゆる文字コードの元になってるので、まずaciiコードを表示出来ない環境は在りませんが。。。。
今時、aciiで不便に感じない環境はクレジット端末の通信データとか、ATMに通信データとか、そんなのぐらいですよ?
>>559 cだけでなく、あらゆる言語は、文字列として扱われる数字の列を流してるだけです
流れてきた数字の列をどう表示するかは、OSやアプリに依存します
ctype.h 系列の is_〜 は…
あのさ、aciiじゃなくて、asciiな。
>>563 お、あんがと
何か綴り違ったよな〜とは思ってたんだ(けど、分れば良いやというノリだった)
自信満々で嘘を教えてるぞ 2chらしいっちゃらしいがw
566 :
デフォルトの名無しさん :2011/06/16(木) 21:17:27.92
[1]C言語 [2]本文 以下のLED 7セグメント(4桁)を制御するプログラムを作成してください (1) 入力に+ キー1つをもち、1桁だけのカウンタを作成する。 (2) スイッチのチャタリング防止のために、20msec程度の間に1msec 間隔で連続5回程度ON状態を検出したらONにする関数を追加する。 (3) スイッチのチャタリング防止の機能を拡張すると、長押しの動作の 判定が可能になる。長押し(1秒以上)でカウンタが「ゼロ」になるように拡張する。 (4) 500msecの間に2回ONを検知したらダブルクリックである機能を追加 する。ダブルクリックでは、自動的にカウントアップする動作を行うこと。 もう一度ダブルクリックで停止、ダブルクリックで再開、長押しでリセットする。 (5) 実験1〜4で実現した機能をさらに活用して、4桁のカウンタを作る。 このとき長押し、ダブルクリックの機能も残す。 4桁の7セグを直接制御するため、 ダイナミック点灯の考え方を使って4桁表示を行う。 7セグを制御する7ポート(例:RBO〜6)と表示する桁を制御する4ポート (例:RAO〜3)を利用する。 表示桁の切り替えを5msecで行い、そのタイミングでその桁に表示する数値を切り 替える。 [3] 環境 [3.1]Windows Vista [3.2]Visual Studio 2008 [3.3]C言語 [4]6月21日 [5]使用したPICは、16F84です ヒントだけでも、よろしくおねがします
>>532 そうだね。
byteとかwordとか各企業で適当に決める単位だから。
>>547-560 めちゃくちゃいってやがる……
なるべく自分で調べる癖つけといたほうがいいぞ……
>>586 ヒントだけでもいいので、お願いします。
本当に、困っています。助けて下さい。
ヒント: スレ違い
PICの制御なんて、専用ライブラリを使うんじゃないのか?? 仕様もなにも分からないのに・・・こんな場違いな質問してる人って・・
574 :
デフォルトの名無しさん :2011/06/16(木) 23:14:14.58
専ブリもくそも、C でさえ過保護という世界
とあるコマンドの(サブ)オプションをヘッダに定義するのですが、 メンテ・拡張しやすくする為に悩んでいます。 イメージは以下で、AとかBとか区別しています。 皆さんならどう判り易く宣言しますか? cmd optA ← サブオプションは受け付けない cmd optB ← サブがなくとも実行可能 cmd optB suboptα ← サブがありでも実行可能 cmd optC ← サブがなくとも実行可能 cmd optC suboptβ ← サブがありでも実行可能 cmd optC suboptγ ← 複数のサブがありでも実行可能 ・enumでopt, suboptを個別に羅列宣言をする。 ・構造体配列にガシガシ書き込む。
手の甲が痒いのですが、どうしたらいいですか?
アナルが痒いのですが、どうしたらいいですか?
「アナル」は形容詞形だろ。 名詞として使うなら「アヌス」と言え。
アルコール入りのウェットティッシュで拭くといいよ。
なに?!じゃぁ、ナチュラルハイのアナル崩壊シリーズや、S1のアナル舐めシリーズは、 アヌス崩壊、アヌス舐め、が正解なんだな!! 勉強になるスレだなぁ・・・
ヘッダーファイルの使い方についての質問です。 これまでヘッダーの中身に関数の定義を書いてたのですが、 ヘッダーの中身をプロトタイプだけにする事はできるのでしょうか? main関数が書いてあるファイルには、main関数以外書きたくないので、 プロトタイプ、関数定義、main関数、で三つのファイルに分けたいのですが、この場合どのようにコンパイルしたら良いのでしょうか?
関数定義とは関数本体のことですよね?main関数と関数定義の .c ファイル、 プロトタイプの .h ファイルを作成して、.c をコンパイル&リンクすれば・・・ 分割コンパイルって知ってます?
586 :
585 :2011/06/17(金) 08:16:00.07
これを回避するために static void spinlock(gboolean* lock_flag) { while(*lock_flag == TRUE) { g_usleep(0); } } とすれば、今度は make OPT=-O2でも whileが変な最適化されずに動くようです。 シングルスレッドの時には無害だった最適化が、マルチスレッドだと有害になることがあるので、厄介だと思いました。 while(flag){} が最適化で無効にされるのは厄介だと感じます
587 :
585 :2011/06/17(金) 08:19:18.36
もしかして、複数スレッドでの並列実行が前提のソースをコンパイルする場合は、 コンパイルオプションに特別なフラグを指定する作法とかがあるのでしょうか? (whileの例以外にも、まだまだ知らない副作用が潜んでそうで不安です…) もしあるのなら、教えてくれるとありがたいです。(使用コンパイラー gcc4.5)
>>587 つ void spinlock(volatile gboolean* lock_flag)
>>587 つ[volatile]
最適化を抑制するだけならこれで充分。
問題は、本当にそれだけでいいか、だ。
>>582 adelasa (スペイン の 女性)
官能的すぎるやろw
このスレ、組み込み系の人、多いんですか?
592 :
585 :2011/06/17(金) 09:45:36.52
>>588 >>589 ありがとうございます。動きました!
volatileの有用性を始めて実感しました。こうやって使うんですね。
>問題は、本当にそれだけでいいか、だ。 この指摘は重い
594 :
585 :2011/06/17(金) 09:58:48.55
あんまり細かいと、関数間最適化が効かないぞ。 まぁ、オブジェクト間最適化すればいいんだけれど。
あぁ、次はリンクタイムコード生成だ・・・・
597 :
585 :2011/06/17(金) 11:37:37.78
>>593 並列処理は、バグの結果が怪奇現象だし、バグの再現も10回に1回しか成功しなかったり
自分にとっては未知すぎます
しかしながら、シングルスレッド性能は現状で頭打ちですし、今後はコアばかり増える方向だとCNETで読みました
セレロン級ですら12コアな時代が来たら、さすがに性能を活かせなくて焦りそうなので、今のうちに無理やり使って徐々に慣れておこうかと
並列でまた何か分からないことがあったら、再び質問させて頂こうかと思ってます
その際にはまた知識を分けて下さると助かります。volatileありがとうございました
無意味な分散は逆効果だぞ。
ソース aaa.c に記述されてる関数を ソース bbb.c に記述されてる関数から呼び出す場合、 宣言にextern付けときゃ何とかなるって考えは間違ってる? ---aaa.h--- extern void aa(void); ---aaa.c--- #include"aaa.h" void aa(void) { ... } ---bbb.c--- #include"aaa.h" void bb(void) { ... aa(); ... }
>>599 ただしい。
おれは面倒くさいからexternつけないけど。
>>585 やりたいことはわかるけど
変数参照だとハマるよ
mutexとか使うんだとお思うけど
i=atoi(s+1); while(*(++s+1)); このwhile文がどういう働きをしてるのか分からないんだけどなにこれ?
未定義
意味のない時間稼ぎ?
605 :
デフォルトの名無しさん :2011/06/17(金) 19:19:33.65
終端のいっこ前まで移動してるんだろう
どうして未定義や不定は定義しないのですか?
as isだから
効率至上主義だから
ネットで調べられないほどの情弱なら、英語の辞書くらいもっとけ
>>599 そうそう。
変数はかならずexternが必要なんだよね。
関数はどちらでもいい。
そこらへん
俺はこれでスッキリしたよ。
c言語 入門書の次に読む本
>>602 こんなの動かしてみれば見えてくるかもね
int main(){
int i;
char a[] = "12345";
char *s = a;
i=atoi(s+1);
while(*(++s+1)){printf("%c %p %s\n",*(s+1),s,s);};
printf("%c %p %s\n",*(s+1),s,s);
return 0;
}
その本の作者の姿勢は素晴らしいね >なんとか国産の良質の専門書を出すことで,日本のコンピュータ技術の発展に(及ばずながら)力になれればなあ.そんな思いでぼくは本を書いている. >(ここで「お前ひとりがそんなことしても何も変わらないよ」なんてくだらないことを言うやつはパンチだ!) >専門書を書くことは,その労力から考えると,ぜんぜん割に合わない作業だ.お金がほしいならば, >本なんぞ書いていないでその時間で残業でもバイトでもしたほうが,よっぽど確実に儲かります >(これは本当です.一度試しに時給を計算してみましたが,計算したことを後悔するぐらいトホホな金額になりました). >本を書くというのは,天塩にかければかけるほど,時給は安くなるんです. >だってどんなに手をかけて品質を上げても,1冊書いての収入はあまり変わんないからね. >そしてその収入は,印税として支払われるので基本的に後払いだ.たとえば書くのに4年かかったら,最初の頃の労働の対価が得られるのは4年後ということだ. >時給がトホホで,支払いは4年後なんていうバイトがあったところで,やる気になるだろうか? >それでもなんで天塩にかけて採算度外視で書くかというと,上に書いたようないろんな思いがあるからだ.
#ifdef DEBUG #define DEBUG_PRINT printf #else #define DEBUG_PRINT (void) #endif { DEBUG_PRINT("var is %d", var): } 手元の環境だと、DEBUG を無効にしてビルドした場合に何も出力されなくなったのですが、 このようなマクロの使い方は環境依存でしょうか?あるいは言語仕様でサポートされていますか?
>>613 kwsk
あと、啓蒙書を書いてもらえるのもうれしい。
>>614 問題ない。
無効な式になるってだけ。
適当に
100;
とか書いてるのと同じになる。
◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ◆QZaw55cn4cって糞だよなぁ
すいません、質問なんですが、ひらがなってエスケープシーケンスでしょうか? 頓珍漢な質問してすいません・・C言語でエスケープシーケンスという言葉が出てきた のでつい。
>>613 姿勢はすばらしいかもしれないが、「天塩」なんて書いてる奴は
書籍書くべきじゃないと思う。
出力するエディタによって改行の指示がちゃんとされていて 改行されてるエディタと、改行されないエディタがあるのですが どういうことでしょうか?同じプログラムです。 \n
>>623 文字コードをうまく判別できない欠陥エディタ
単に改行が文字として表示されていないだけでエディタの設定の問題
どちらか好きな方を選びたまえ
そもそも、エディタに出力されるわけではないだろ。
626 :
デフォルトの名無しさん :2011/06/18(土) 10:18:22.09
>>625 メモ帳、ワードパッドに出力されてますが?
そいつはエロいな!ペロペロ^^
この場合、 ×エディタに出力 ○ファイルに出力し、そのファイルをエディタで開く だろ。 もし仮に、直接エディタに出力していると言うならそれは環境依存の技術だから最早スレ違いだろ。
>>628 すいません
ファイル=記号列の集まりってことでOKですか?
ダメだこりゃ。
>>629 おまいはエディタで何を開いてるの?
ファイル以外のものを開いているとでもいうの?
>>631 全てのものファイルですよね・・・
アプリケーションにしろ文書にしろ・・
出力はプログラムによる結果であって・・
間違ってますか?
ファイルシステムは?それもプログラムだから元はファイル? じゃあそのファイルを管理するファイルシステムは? 鳥か卵か
今世界中からコンパイラのバイナリが消えたらどうなるの? C言語コンパイラってC言語(とか他の言語)で書かれてるんだよね?
誰かが一回手動でコンパイルすればいい。
バカがくだらないこと考えても時間の無駄
今世界中からコンピュータが消えたらどうなるの? コンピュータってコンピュータ使って作られてるんだよね?
誰がこまどり殺したの?
>>620 \n=改行
\t=タブ
みたいに、画面制御用の文字コードをC言語(系列)ではエスケープシーケンスで提供してる
エスケープシーケンスってのは\で始まる記号の事
とは限らない。
揚げ足をとるつもりはなくて言われてみてふと疑問を覚えたんだが 行末に\を使った場合ってエスケープシーケンスとは呼ばないよね? それとも呼ぶの?
>>639 逆じゃないんですか?
エスケープシーケンスを\nや\tで提供してるんじゃないんですか?
>>632 ?
全てのものがファイルかどうかは分からないが、
エディタで開けるものはファイルなんじゃないの?
[ファイル]→[開く]みたいな手順で開いてるだろ?
それで開けるものは「=ファイル」だろ?
>>641 vbとかではそう言うの有ったけど、cにも有ったっけ。。。?
有ったとしたら、多分言わないんだろうけど
nul con aux prn lpt
nul o lp
>>642 改行とか、タブは特殊文字って習ったんだが。。。
もう本が無いから正確には書けないが、\[の後に英数字4文字くらい入れて表示する文字の色とかも変えられたし
エスケープシーケンスは特殊文字を表す文字の総称だと思うんだけど
>>647 あぁhtml思い出しました。
例えば認識できない文字が文字化けしたら
文字化けの部分はエスケープシーケンスといいますか?
>>648 それは文字コードのエンコードが違ってるだけですよね
エスケープシーケンスと何の関係が?
漢字表示が出来ない端末で漢字を表示しようとしたら、文字化けするだろうね。 表示できない部分はエスケープシーケンスだとは限らないだろうけど。
\x30 = '0' \x31 = '1' \x32 = '2' エスケープシーケンスで普通の文字も表示出来るし、特殊文字そのものの事をエスケープシーケンスとは言わないよ
>>651 それはC言語の場合じゃね?
\x30=\x30でしょ?
ebcdicのことでも話したいの?
C言語の勉強中、ふと思ったのですが… 例えば再帰の時なんてそうですが、関数の中で関数を呼び出すとき、 戻るべき位置というのは多分メモリのどこかに記憶されていますよね? だとしたら、あまりその量を増やすのは好ましくない気がするのですが、 どの程度なら許容範囲なのでしょうか?
環境にもよるが一万や二万程度なら全く問題ない。
そのとおりで、再起し続けるとメモリ(スタック)が足りなくなって スタックオーバーフローでプログラムが落ちる 個人的にはそうならなければ許容範囲としていいと思ってるがどうなんだろう
>>654 パズルとかを再帰で解こうとすると、
あっというまにスタックを使い果たして落ちる。
チョコチョコっとした遊びのフィボナッチ数列出して喜ぶのが再帰の本当の用途。
再帰はプログラムの練習問題でしか使わないscanfみたいなもん
そうでもないけど
linuxのカーネルとかでも再帰使ってる部分あったりすんのかな?
>>654 戻るべき位置に加えてローカル変数+αがスタックに記憶される。
だから一万や二万とか言ってる奴は単なるアホ。
クィックソートやマージソートなんかやめてヒープソートを使えってことですか
>>652 ?
pythonでもこうだけど。。。
%xと間違ってないかい?
再帰は再帰でも末尾再帰形式はループを使う形式と1対1対応するから そういうのならふつーのコンパイラなら最適化でcallが消える筈
>>658 そうでもないようですよ。たとえば、
(1 + 3) * (2 + 4)
等の代数式の値を評価する方法は、非再帰で記述するのは困難。というか私はしたくない。
平衡二分木(赤黒木/AVL木)を扱うとき、非再帰で書け、というのは罰ゲームの一種だと思います。
再帰の深さが想定可能でかつそれが実用的に問題ないのであれば、再帰で記述するのもあり、だと思います。
なお理論面では繰り返しよりも再帰の方が重要です。
3271,4352,8441の並び替え 1の位が小さい順に3271,8441,4352 10の位が小さい順に8441,4352,3271 100の位が小さい順に3271,4352,8441 1000の位が小さい順に8441,4352,3271 バケツ法で並び替えをするプログラミングを作る課題なんですが、 (課題は重複なしの整数20個を小さい順に並べる) とりあえず10で割ってあまりが、1,2,1で1の位を並べ替えようと したのですが、全然分かりません。異なる4桁の整数でも1の位が同じ だったり10の位が同じだったりするので、バケツに入れるとかが どうするのか分かりませ。教えてください。
バケツはすげーど。最速の一つだど。 重複無しで、範囲が決まってる整数を扱うにはね。 char でっかいバケツ[1000] = {0}; // とりあえず小さい型としてcharつかってみる。boolがあればそれつかう。 でっかいバケツ[3271] = 1; // バケツに入れる。ゼロ以外。区別できればよい。 でっかいバケツ[4352] = 1; でっかいバケツ[8441] = 1; for (int i = 0; i < バケツサイズ; i++) if (でっかいばけつ[i] != 0) print でっかいばけつ[i] コツは掴んでいただけただろうか。
>>662 それを含めて一万や二万は問題ないと言ってるんだが。
おまえ実際に使ったことないだろ?w
体験を伴わない知識って 役に立たないから困るよね
単に具体的に数値で話さないから齟齬が生じてるだけな気がするが VCで1Mらしいから、2万で超えるには50byte必要 微妙だね
>>670 #inc,ude <stdio.h>
static void foo(const int nest){
char x[1000*1000*1000];
x[0] = nest;
printf("%d\n", nest);
foo(nest + 1);
}
int main(){foo(0);}
これで、表示が一万以上いける環境書いてみな。
上でエスケープシーケンスについて揉めていたが、エスケープシーケンスという 言葉の意味を考えれば全て自明だと思うんだが 人生に疲れました どうすればいいですか
横からだが char x[1000]; にしたとしても、1941を表示してオチてるな。 環境?はWindowsXP コンパイラはgcc バージョン 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)
>>673 なぜそこで末尾再起のプログラム書くんだよ
最適化したらいくらでも(200000程度は確認)表示続いたぞ
cygwin の gcc version 4.3.4 20090804 (release) 1 (GCC)
末尾再帰
C言語って配列の列まるごと代入とか演算できないんスかね? 要素ごとにやらなきゃダメすか?
現実的でない無意味なコードの意図かw
実際、ディレクトリ構造の探索なんかは普通に再帰で書くがな。 千なんて単位で再帰するようなプログラムはおいそれとは書けないが。
684 :
デフォルトの名無しさん :2011/06/18(土) 19:17:13.66
>>680 ごめん、理解力ない奴の相手する気はないんでな。
>>685 すまん、ちょっと理解できないから意図を教えてくれ
>>670 の「一万や二万は問題ない」に対して、
>>673 で「一万以上いける環境書いてみな。」と言って
暗に一万以上いける環境なんてねーよって言ってるんだよな?
>>676 でそうなってないことを指摘されて言いたいことがいえてないだけに見えるんだが違うのか?
使ってない領域をムダに大量に突っ込んで再帰できないとか言われてもw
というか再帰でスタック使い果たしたこと無い奴なんているのか?
>>686 >
>>676 でそうなってないことを指摘されて言いたいことがいえてないだけに見えるんだが違うのか?
>>673 のコードは最適化オプションを付けてコンパイルすると、
コンパイラが勝手に再帰をループに変更してくれる(つまり
スタックを消費しない)、末尾呼び出しというタイプの再帰だから
ノーカウントだねって話だよ。
通常の再帰なら
>>662 が書いている通り、ループの回数だけに
依存する問題ではない。
あ、そんな事はわかってるか。スマソ。
そもそも一万や二万って単位は何だよバイトか?回数か? 質問者は量を聞いてるぞ? その辺はっきりしてないと解釈さまざまだろ
692 :
デフォルトの名無しさん :2011/06/18(土) 21:24:28.55
ばーか
お願いしますフォローしてください
>>686-687 単に難癖つけてるだけならまだわかるけど、マジで言ってるなら
>>689 の指摘通り単なるアホだぞ。
>>691 解釈どうのこうの以前に、プログラムの内容と環境しだいだろ。
695 :
デフォルトの名無しさん :2011/06/18(土) 22:03:58.60
NTLを使ってGF(2^4)上の多項式を定義したいのですがうまくいきません。 SetCoeff(a,5,4); とかやっても5時の係数が4になってくれません。 例が少ないのでどうしたらいいのかもわかりません。 どなたかNTLライブラリの使い方を知っている人がいたら教えてください。 よろしくお願いします。
>>695 入門の域を越えた質問は、該当ライブラリのスレか環境依存対応スレの方が回答が付き易いかと。
◆QZaw55cn4cは糞
>678 ポインタと要素数渡すのが普通じゃね? 構造体で固めて渡すって手段もあるけど。
PC-88のBASICからのマシン語コールのスタック容量は16バイトだったっけ。 8回PUSHしたらもういっぱいorz
当時はスタックも自前で用意するのが当たり前。
701 :
デフォルトの名無しさん :2011/06/19(日) 00:01:34.12
BASIC からマシン語呼び出す場合は BASIC のスタックが前提 SP を単なる 16bit レジスタとして目的外使用もするが原状回復して戻る
702 :
668 :2011/06/19(日) 01:02:06.85
これってバケツソートになってますか? #include<stdio.h> #define N 50//itablに入力した数字が50以下だから int main(void){ int itabl[]={40,19,31,49,35};//重複すると使えない int count[N]={0}; int k,i; int max=0; printf("before\n"); for(k=0;k<5;k++){ printf("%d\n",itabl[k]); } for(i=0;i<5;i++){ count[itabl[i]]+=1; if(itabl[i]>max) max=itabl[i]; } printf("\n"); for(i=0;i<50;i++){ printf("count[%d]=%d\n",i,count[i]); } printf("\n");
703 :
668 :2011/06/19(日) 01:04:40.75
続き k=0; for(i=max;i>=0;i--){ if(count[i]>0){ itabl[k]=i; k=k+1;} } printf("after\n"); for(i=0;i<5;i++){ printf("%d\n",itabl[i]); } return 0; }
グローバル変数で int a=1; と static int a=1; の違いってある?
まずは、C言語 ファイルスコープ あたりでググってくれ。
どう違って欲しいんだい?
たとえばスタックに積まれるか積まれないかとか。
後者はグローバルじゃねーよ。
>708 エラーとか出ないけど(VC2008で確認)。
違うことがわかった後はどう...
「情弱」と言われる確率が減る。
>>708 そのレスは流石に色々まずいんじゃないか?
「情弱」からの脱皮は、まともに検索(識別)できるところからじゃあ
グローバル変数の int a = 1; と グローバル変数の static int a = 1; の違いを聞いてるんだろ
ファイルスコープになるかどうか
両方共、グローバル変数っていってる時点で...
時点でなに? 言いたいことがあるなら、はっきり言った方がいいぞ。
後者はグローバルじゃねーつってんだろボケ
じゃあなんなんだよ。
静的グローバル変数がグローバルじゃなかったらなんなのよ
#include<stdio.h> static int a=1; void main() { printf("%d\n",a); } 変数aがグローバル変数で無いならなんなの?
グローバルって、そういう言い方するのかいな ファイル分割とかやったことなさそう
int a; //グローバル変数。外部に公開される。 static int b; //静的変数。値が保持される。 func(){ static int c; //変数b同様。func内のみ参照可能。 { static int d; //変数c同様。{ } 内のみ参照可能。 } }
>>723 ひょっとして上の方のファイルスコープというキーワードが見えてない人なの?
意味がわかってないのが質問してるからだろ
>>724 bとcdのstaticは意味が違うだろ
いや、
>>704 の質問は別に変じゃないし、
>>705 の言うように
ググレばそれなりの回答にたどりつくと思う。
むしろ意味わかってないのは
>>708 だと思う。
大域スコープ (global scope) プログラムの「全体」から見えるスコープのこと。このスコープに属する変数は大域変数といわれる。 BASICのような単純な言語では大域スコープしか存在しない場合がある。 ファイルスコープ (file scope) 大域スコープと似ているが、プログラムを記述したファイルの内側でのみ参照できるスコープ。 プログラムが複数のファイルから構成される場合は他のファイルから参照することはできない。 ローカルスコープ (local scope) ある関数やブロックの範囲内に限定されたスコープのこと。 何を持って範囲を与えるかは言語により様々だが、 一般に入れ子のローカルスコープは外側を参照できるのが普通である。 このとき兄弟関係にあるスコープは見えない。
静的グローバル変数なんて用語もあるんだな
プログラムのどこからでも参照できる変数がグローバル変数じゃないの? ファイルスコープのグローバル変数って矛盾するでしょ
externつけなくても他ソースから参照できるの?
>>732 じゃあ、なんて呼んでんの?
ただのstatic変数とはあきらかに違う変数だけど
だからただの static だっつの。 参照できる範囲が違うだけ。 グローバルは「外部から」参照できるって点が違う。 まったく別物。
>>733 関数はでける
変数はexternつけないとでけない
externついた変数はカッコ悪いと思われることがある
>>724 の例で言えば、bはfunc()内で参照できるわけだど、これは「ただの」staticにはできなことだろ
extern を付けるのは参照する側。実体は別にあるという意味だろ。 だからグローバル変数には extern は付かない。
だいぶ混乱していけど、C言語規格上、グローバル変数という用語は「無い」。 ただし慣習的にプログラムの全領域からアクセスできる変数を、グローバル変数と呼んでいる。 >724では、aはグローバル変数だろうけど、bもグローバル変数かもしれない。 プログラムの翻訳単位が>724だけであればbをグローバル変数と呼んで構わないだろう。 Cの規格上では、すべての関数の外部で宣言された変数は外部結合を持ち、 staticが付いた変数は内部結合を持つ。 グローバルか否かを議論しても仕方ない。 それが分かっている人と、分かっていない人の議論がかみ合っていない。
VCで >722 のソースと #include<stdio.h> void test2(void) { printf("%d\n",a); } というソースを(拡張子は.c)同じプロジェクトに入れてコンパイルしたら error C2065: 'a' : 定義されていない識別子です。 と言われた。 staticとっても言われた。 追加したほうのソースに extern int a; を書き加えたらstatic無しはコンパイル完了。 staticありは error LNK2001: 外部シンボル "_a" は未解決です。 と言われた。 なんとなく違いがわかりました。
超初心者ですみません。
#include<stdio.h>
int main(void)
{
double num;
printf("%fテステス\n",3.14);
printf("小数を入力しなさい\n");
scanf("%if",&num);
printf("入力された小数は%fです\n",num);
return 0;
}
と作成し、実行したのですが、
scanfで読み込ませた側の数値が
http://www.dotup.org/uploda/www.dotup.org1716590.jpg うまく出力されません(つω;)一体どうしたら解決するのでしょうか?
scanf("%if" → scanf("%lf"
うわああああ そういうことだったのか;; 長時間悩んでたなんて恥ずかしいorz 助かりました ありがとうございます!
>>736 >>615 わたしゃ、extern なんて金輪際使ったことはない‥‥‥。いいのか、これで?
変数にexternつけることはよっぽどのことがないとやらないな
使えるものは使う。
extern なんて使わないほーが楽チンなんですけど‥‥ヘッダに int global; (×int global = 1)とか書けて。
そういうグローバル変数の使い方をどこで覚えたんかね
ヘッダにグローバル変数ってのはBASIC的な使い方で一時嫌われてたんだけどね。 今時のパソコン環境なら関数で隠蔽しても遅くならんだろうし VBとかだとめんどくさいからどうしてもつかちゃうんだよね(やりたくないけど)
>>751 確かに、どこからでも触れる(可能性のある)変数を、お手軽に宣言してしまうことが可能ですからね。読まなきゃならない側にとっては恐怖でしょうね。
こういった場合に備えて、お手軽にクロスリファレンスをとるには、どうすればいいのでしょうか。
クロスリファレンスはリンカでしょ、最近のはどこまで面倒みてくれるかしらないけど グローバル変数も変更箇所(出来ればひとつのファイル内)と参照箇所を分ければ 使えないことはないけど(ハマらないってことで) そこまで考えてやれるかどうかだと 入門レベルの人の判断次第かな(その後地獄を見たくなければ)
>>753 リンカだと(static をつけていない)関数も引っ張ってくるんじゃなかったかな?
できれば、変数だけをソースファイル名+論理行でいいから引っ張ってくれると、とってもうれしいのですが。
コールバック関数に値を渡すときには、どうしてもファイルスコープな、あるいは別モジュール宛てだったら全部に見える変数に、あー、してしまったりするんですけれども、やっぱりまずいですよね。
(途中の経路はまったく触れない)コールバック関数に、飛び越すように値を渡すにはどうすればいいでしょうね。
関数は極力 static 付けるようにしてるよ。
コールバック関数の引数に変数のポインタ渡しとか C++かいな?
>>754 コールバック関数とデータをまとめて構造体に包んで渡す
やっぱり言語としてはJavaの方が完成度高いなぁ・・
それを言ったらC#のほうが上なわけで。
比較的シンプルなシンタックスを持つ ポータブルアセンブラ以上のことをCに望むな
Cでゲームつくれないの? 自作関数を駆使したらcuiのゲームくらいはつくれますか?
幾らでもあるよ。
<<742 以前にもそういう質問があったから質問する前に 前レスをしっかり見よう。 と、質問した人間が申しております。
765 :
デフォルトの名無しさん :2011/06/20(月) 15:59:29.25
二分木で 各ノードに値をいれる方法をおしえてくださいm
Node.var = value;
まず再帰使って書いてみ
>>757 それは、途中をいじれる場合だと。
たとえば、
int pascal WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR pCmdLine, int nCmdShow) { .. }
の hInstance を
WNDCLASS winc;
winc.lpfnWndProc = WndProc;
RegisterClass(&winc)
CreateWindow()
を経て、
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) {
の
switch (msg) {
case WM_CREATE:
のところで使いたい、たとえば、LoadIcon(hInstance, 12345) としたくても、なかなか思いつかないわけで。
んー、なんかあった気もするけど忘れてしまった‥‥‥。
ちがった、 LoadIcon(hInstance, MAKEINTRESOURCE(12345)); だったね、たしか。
func(a) > func(b) ? func(a) : func(b) みたいない処理って、一度ローカル変数にキャッシュした方がいい? それともコンパイラを信じて任せた方がいい?
funcがよほど簡単な処理でない限り最適化してくれないでしょ
772 :
デフォルトの名無しさん :2011/06/21(火) 00:04:06.86
するよ
一方俺は、 int max(int a, int b)みたいな関数を用意して、 = max(func(a), func(b))とした。
funcの中身によっては1回だけ呼ぶようにしちゃうと結果が変わる場合がある んだけどそこまで見て最適化してくれるものなのか?
void型の変数でもreturn文は必要?
776 :
デフォルトの名無しさん :2011/06/21(火) 01:35:13.61
デバッグしないなら必要 じゃない
??? 人のソースコード見てると、return文を書いてる人と書いてない人様々。 ようは好みの問題?
気の効いた奴だと関数の最後の}で止められたような?
)[1] プログラミング演習 [2] 問題:1.以下のプログラムと等価になる様にprintf();内の穴埋め箇所を記述せよ。 等価したいプログラム if( !(gender==1 || age >=20 ) ) printf("穴埋め1 \n"); if( !(!(gender==1) || age >=20) ) printf("穴埋め2 \n"); if( !(!(gender==1) || !(age >=20 ) ) printf("穴埋め3 \n"); if( !( gender==1) || !(age >=20) ) printf("穴埋め4 \n"); [3] 環境 [3.1] windouws [3.2] gcc [3.3] C言語 [4] 本日6月21日08時30分まで。 [5] 急ぎです;c言語の問題です。おねがいします;
あと、もうひとつ問題 2.201003121(10進数9桁)、性別(男:1、女:2)、年令(未成年:0,成年:1,高齢:2,後期高齢:3)、 職業(無:0、有:1)で個々人が16分類される。それぞれを数字(コード)で入力させ、 その人の状態を一旦ディスプレイに表示し、if文を使って、自然な文章で最後に表示するプログラムを作れ
>>780-781 宿題スレへ。
>>774 一般的に、関数呼び出しの回数を変更する最適化は行なわないよ。
その関数が同じコンパイル単位内にある場合は、やるかもしれない。
関数呼び出しによる副作用がないことを明言できればいいのにね。 RDBMSのストアドファンクションなんかだとそういうのがあったりするんだけど
>>770 の式ってショートサーキット発生しないの?
条件式成立時 func(a) 2回呼び出し func(b) 1回呼び出し
条件式非立時 func(a) 1回呼び出し func(b) 2回呼び出し
786 :
785 :2011/06/21(火) 10:00:47.67
意味不明だ。 忘れてくれー
>それともコンパイラを信じて任せた方がいい? お前の書き方が信じられない
RHEL5.6で、SIGCHLDにSIG_IGN付けてsystemをコールすると必ず関数が失敗するんだが、 何が公式の情報ってないのかな?
システムコールの話って、このスレの守備範囲?
使い方間違ってるだけでしょ
>>788 当たり前だ。どのカーネルでも同じ動作だ。
systemの戻り値がなんなのか考えたことはあるのか?
793 :
デフォルトの名無しさん :2011/06/21(火) 21:07:57.28
スパコン京すげーなおい・・・1秒で8300兆ってwwww このスパコンなら1兆個の数字のバブルソートも1秒以下でできるってこと ですか?
>>793 バブルソートを甘く見てるんじゃないかい?
せっかくのスパコンでバブルソートなんて動かしたら祟られるぞ。
32bit 整数を 1 兆個並べると 4TB か...
バブルソートを並列化したアルゴリズムを考えることはできるが、 非常に効率が悪く実用的ではない
798 :
デフォルトの名無しさん :2011/06/21(火) 21:20:58.06
|ミ, / `ヽ /! ,.──、 |彡/二Oニニ|ノ /三三三!, |! `,' \、、_,|/-ャ ト `=j r=レ /ミ !彡 ● T 爪| / / ̄|/´__,ャ |`三三‐/ |`=、|,='| _(_ /人 ヽ ミ='/|`:::::::/イ__ ト`ー く__,-, 、 _!_ / ( ゚ω゚ ) / `ー─'" |_,.イ、 | |/、 Y /| | | j / ミ`┴'彡\ ' ` バブルソート マージソート シェルソート クイックソート バブルソート「俺に勝てるやつはいない!」
800 :
デフォルトの名無しさん :2011/06/21(火) 21:41:31.17
量子コンピュータなら一瞬だよ
>>800 並列化できない問題に対しては早くならないだろ
802 :
デフォルトの名無しさん :2011/06/21(火) 21:46:14.31
夢みたいなことを
スパゲッティソート!
どんだけ魔法扱いだよ グローバーのアルゴリズムとかを見れば分かるが 量子アルゴリズムにも厳然たる計算量の限界がある
> 計算量の限界がある あるならいいじゃない ないから大変なんじゃない
807 :
デフォルトの名無しさん :2011/06/21(火) 22:02:29.69
思うんだが人間の妄想をそのまま具現化したら時間量0じゃないか? たとえば人間が1無量大数だと言い張れば、無量大数になる。 そういう技術って無理かな?
>>807 >そういう技術って無理かな?
目を瞑ればいい
処理を待つ人間の主観的経過時間を停止しておく、とか
810 :
デフォルトの名無しさん :2011/06/21(火) 22:07:04.08
脳に電極刺す
811 :
デフォルトの名無しさん :2011/06/21(火) 22:09:39.14
違うって、思い込みだけで量的なものを制御できないのかな?
例えば夢で3個のりんごが机にあるのを発見する。
風が吹いて1個が机から落ちて2個になった。
夢だから
りんごがあるのも
風が吹くのも
りんごが落ちるのも思い込み
だけど思い込みなのに辻褄はあっている。
>>809 それすごいな。結局早いか遅いかってのは主観なんだよな。
客観を制御できたら主観ってどうなるんだろ。
812 :
デフォルトの名無しさん :2011/06/21(火) 22:18:04.16
>>770 キャッシュすべき
コンパイラを信じるならおまえ自身がいらない
ハッシュの方法が分かりません。数字10000個をハッシュによって保存したいです。 どうしたらいいですか?サイト教えてください・・・
1つのPCに対してcpuは1個 それに対して人間は 1つの脳に対して細胞が150億個 人間がいかに優れた高性能コンピュータであるかが分かるな。 人間の脳ってどうなってんだろ・・・
>>814 細胞換算ならトランジスタ数で比較したら?
816 :
デフォルトの名無しさん :2011/06/21(火) 22:31:24.93
>>814 リフレッシュ回路に問題のある DRAM で動いている「高性能コンピュータ」
Core i7のトランジスタ数は7億3100万 それに対して人間の脳は細胞が150億個 人間がいかに優れた高性能コンピュータであるかが分かるな。 人間の脳ってどうなってんだろ・・・
コンピュータも、0と1だけじゃなく、3段なり4段でデータを処理すると、 もっと違う世界があるかも知れないな
自分のマイクロプログラムを自身で書き換え、 状況に応じて最適化してくような事ができれば、 面白いかな
>>785 ショートサーキットには入らないけど、そうなるね。
>>819 ソニーのMDプレイヤーにFPGAを使った、まさにそう言う製品があったような・・・
>>792 あら?
カーネル2.6と2.4じゃ動作が違うんですが・・・
ご存じない?
>>823 何得意げに言ってんだバカ。いまどき2.4の話なんて誰がするかボケ。
おまえら般若心経でも読んでこいよw
null法僧
systemなんたらの人はソース晒しなよ
829 :
デフォルトの名無しさん :2011/06/22(水) 14:09:06.72
そろそろ 変数a, bの値を入れ替えるベストな方法を教えてください
間接参照で持ってポインタを入れ替える 整数型縛りならベクトル化したxor swap
バケットソートより速いソートを教えてください
つまり、バケットが最速と
ベストな方法の定義は?
安い早いうまい
バケットソートよりさらに適用条件が厳しくていいならあるけどw
運に自信があるならボゴソート一択
>>837 それはそもそも速いソートって言わないだろ
>>836 まじで?
バイトニックソートとか言わないよね?
× 運に自信があるならボゴソート一択 ○ 運に自信があるならソートする必要すらない
>>839 ソート済みリストに要素追加してソートするときのような、ソート前に並びが決まってるような処理ならオーダーはlog(n)になるはず(二分探索して挿入してるだけなんだから)
別にあまり意味のあることじゃない
これ言い出したらソートされてるものをソートする時はとか言い出してきそうだし
手続き型言語なら基本改良型のクイックソート使っとけばベター
ヒープに作った自前のスタック構造使って再帰をループに展開しとけ
>>845 自前で用意したヒープ上のスタック構造が「想定外」の入力であふれましたぁ。
>>842 意味ない事をわざわざ書き込むなよwww
848 :
デフォルトの名無しさん :2011/06/22(水) 21:22:52.65
下で"-dog"は検索可能だが2つ目(-cat)が検索出来ません。 何が原因ですか? enum mode {dog=0,cat,}; struct table {int key; char *opt;}; static struct table opt1[] = { {.key=dog,.opt="-dog",},{.key=cat,.opt="-cat",}, }; *** int cmp(const void *m1, const void *m2){ 〜省略〜 return strcmp(mi1->opt, mi2->opt);} *** main struct table key; key.opt=argv[1]; lfind(&key,opt1,(size_t*)opt1,sizeof(struct table),(int(*)(const void*, const void*))cmp);
◆QZaw55cn4cは糞
850 :
デフォルトの名無しさん :2011/06/22(水) 23:40:44.80
0のものを1にするのに インクリメントと1代入どっちが速いの?
ごめんC++のほうだった ほかでききます
まず、0であるという確認が必要な分、インクリメンコが遅いな。 1代入なら代入だけだし。
xor eax,eax inc eax mov eax,1 昔いじったスパコンは0クリアは常に0が入ってるレジスタをコピーしてた。 どっちが早いんだろうねぇ。
>まず、0であるという確認が必要な分、インクリメンコが遅いな。 なんで確認が必要なんだ。 >1代入なら代入だけだし。 即値が必要な分、遅いCPUもあるね。 >xor eax,eax 「0のものを1にする」ってのは、一旦0にするという意味なのか? >昔いじったスパコンは0クリアは常に0が入ってるレジスタをコピーしてた。 そのスパコンには、レジスタ間xorみたいなインストラクションがなかったんでね? >どっちが早いんだろうねぇ。 まぁ、どの途誤差だ。
ゼロレジスタ RISCなど、特に3オペランド命令に対応するマイクロプロセッサで用意されることの多いレジスタで、 一般には汎用レジスタの一つをゼロレジスタとする。 例えば、R0?R31まで32個用意される汎用レジスタのうち、R0をゼロレジスタとするような製品がある。 こうして、3オペランド命令しかない中でも、オペランドが二つで充分な演算をする際にゼロレジスタを用いることで 演算を行なうことができる。例えば、A←Bという代入命令は、A←B+0という加算命令で書くことができる。
ゼロウィングはAYBばかりが有名になってしまっているけど ゲームの方もちゃんと面白いんだぞ!
857 :
デフォルトの名無しさん :2011/06/23(木) 11:41:51.27
3つの条件式があって1つだけが偽の場合実行する方法ってどんなですか?
俺のやり方が一番簡明
p && !q && !r を巡回させた物3つ作ってそれをor演算 または式の結果をビット列にpackしてpopcount == 1
>>857 if (
! cond0 && cond1 && cond2 ||
! cond1 && cond2 && cond0 ||
! cond2 && cond0 && cond1) ;
unsigned foo = (cond0 << 0) | (cond1 << 1) | (cond2 << 2); if (foo == 6 || foo == 5 || foo == 3) ;
if (exp1+exp2+exp3==2)
int True2=!(0)*2; if( (cound0+cond1+cond2)==True2) { ... }; 99%バグる。
くだらない
C言語でソケットのUDP通信使って相互通信してる場合、 送信データの未到達判定には送信データにシーケンス番号付与が1番いいの? 後、未到達を感知したら即再送していいのかな? ウエイトいれた方がいいの?
なんで再送制御を自前で実装するんだろう・・・だったらTCP使えと
872 :
デフォルトの名無しさん :2011/06/23(木) 13:20:02.51
昨日なんでswitch〜case文が{}ブロックじゃなくてbreakなんだとかいう低脳とであった
フォールスルー知らなきゃそう思っても不思議じゃないんじゃない?
LANだとUDP速いけど、インターネットだとTCPと大差ないって話を聞いたことがある。 実験したことはないけど。
>>871 17ミリ秒間隔で、データの送受信が出来るならTCP使ってるよw
どっちも一緒だろ。どうせ欠損データ再送したりするんだし。
スレチだがTCPとUDPの中間ぐらいのが欲しいことがあるな ・UDPほど早くないけど TCPよりは早いかもしれない ・ストリームではなくデータグラム
TCPはconnectionを確立した直後は遅いけど、様子をみながらだんだん早くなるんだよw
886 :
デフォルトの名無しさん :2011/06/23(木) 21:13:17.16
ウルルンかよ
XTP?
ほっほっ
ds
main以外の関数の中で、別の関数を呼び出す時 void kansu(void){ void kansu2(void); } としてもエラーがでないのは何故ですか? 正しく実行されないけれども。
そのまんまなんだが・・・・・・ 引数なし返り値無しののkansu2っていう関数を宣言してる
>>893 じゃぁ何で main内で宣言したらエラーになるんですか?
>>894 お前が馬鹿だからっていうか
他のところでエラーだしてるんだよ
>>894 ウチはエラー出ないよ?
% cat foo.c
int main() { void foo(void); }
% gcc -std=c99 -W -Wall foo.c
%
宣言する位置が悪いんだろ
呼び出しだと思ってるみたいだから先頭以外にあるんだろうな
>>895 いや、関数呼び出すときにね、kansu(void);だと
エラーがでる。
kansu();
だとエラーがでなくて単位は取れた。
関数の呼び出しと宣言の違いが分かってない予感
>>899 いやってなんだよwwwwwww
main内に移したからじゃねーだろーが禿
死ね
>>899 voidの扱いはそういうもんだと丸暗記しとけ
>>900 宣言は型を書かなければならない。でしょ?
すいません、なんとなく分かりました。
割り算はpowでやってもいいでしょうか? 例えばpow(3,-1)だと1/3と一緒ですか?
powの方が複雑な処理してるから、素直に割り算にすべき
1/3は0になっちゃう・・・ 0.00000e+00 orz・・・
1.0/3
>>909 それならpowのほうがいいな・・・
pow(3,-1)=0.333333
アホすぎて話になんないw
例えば3.234と1.3423の割り算をするときは 3.234/1.3423でいいんですか?
>>912 それで望んだ通りの結果が得られるのなら、それでいいだろ。
ここでいいのかな。 C言語のプログラムで、別のモニタやらテレビに出力したいんですが、ソフトだけで可能なんでしょうか。
>>914 可能です。この前もそういうソフト作って納品しました。
>>914 質問の意味が分かりません
接続されていないモニタやらテレビに「念写」したいということでしょうか?
>>917 そうです、ソフトだけで可能なんでしょうか?
919 :
914 :2011/06/25(土) 01:41:46.40
知らないなら無理して答えなくて結構です。
ハード的な条件が出んことには、頓珍漢な答えが出るだけでしょ
921 :
914 :2011/06/25(土) 11:05:10.29
ハード的な知識もありません。 わかんないけど、PCに繋いでいるようなモニタの端子(規格しらん)に信号を送ればうつるんでしょう? 別マシンから、なんらかのケーブルで繋いで、Cのプログラムで信号送れますかとか。ライブラリはなに使いますとか接続は何でつなぐとか。 なかんじです。 テレビだったら、なんつーケーブルでつなぐとか… すべてあいまいなうすい感じでさーせん。
バーカ
ま、とっちらかってるあたりが入門者らしい、といえばらしい
とりあえずマルチディスプレイって物を知ってるのだろうか
VRAMを書き替えるだけだよ。
>>921 そもそもなんでそんな話になったのか辺りから詳しく。
それによって、回答も変わってくる。
懐かしのRFコンバータが必要だったりして
今猛烈に眠いし、小便したいし、左手がなぜかズキズキするんだけど どうしたらいいですか?
死んだら全部解決するんじゃないだろうか
930 :
928 :2011/06/25(土) 14:17:26.18
自決しました
WinG知らねーとかゆとりすぎだろ。
自演臭がプンプンする
画面を使ったプログラムを作りたいんですが、 ソフト使った方がいいですか? ソースコードで作った方が良いのですか?
日本語でどうぞ
その使いたいソフトって何よ?
>>934 画面のデザインのこといってるのなら、IDE環境でやったら
938 :
934 :2011/06/25(土) 17:01:40.01
分かりにくくてすみません 画面を使った開発をしたいんですが どうしてますか?
>>937 ありがとうございます 参考にさせて頂きます。
画面を使わずに開発ってすごいな。 聾唖の方なのかな。
学生のときの教養のFORTRANがソース入力マークカードで出力はラインプリンタだったなぁ
変なツッコミするなよ ど素人さんなんだから
さすがに難解すぎるだろ。
聾唖と画面を使わないの関係がわからないw
実際に耳栓してギャグボールつけてみると良く分かる 目は見えるんだな、と。
ハードにビデオチップとVRAMが載っててCPUから操作可能で、 そのハード用のC言語コンパイラと資料があれば可能でしょう。
画面を使った開発というのが何をさしているのか伝わってない 画面を使った開発と画面を使わない開発ってそれぞれどんなものを思い浮かべているのか?
GUIとCUIのほかにSUIって言葉もあるんだな 何の略か分からなくて調べてしまった
同じ SUI でも日本語版ウィキペと英語版で指してる物が違うんだな
951 :
デフォルトの名無しさん :2011/06/25(土) 19:37:59.94
934 と 938 は明らかに言ってることがブレてる どっちに答えるかによって内容が全然ちがう
すいません、教えてください。 複数の翻訳単位でインクルードされているヘッダファイルがあって、 const char* はextern をつけているからコンパイルエラーがでないのですが extern をつけていないenumが多重定義エラー出ないのはなぜでしょうか?
enumは外部リンケージを持たないから
const char const * にすると出なくなるよ
enumは定数を決めてるだけだからでしょ
956 :
デフォルトの名無しさん :2011/06/25(土) 21:20:00.03
main関数の中でWinMain関数使おうとしたらうまくいかなかったんですけど もしかして1つのソースファイル内でCとAPIを一緒に使うことってできないんですか?
957 :
デフォルトの名無しさん :2011/06/25(土) 21:21:12.70
うまくいかなかったって具体的にいえよ
WinMainの引数int nCmdShowでコンパイルエラー cannot use local functions 、です。 余計なことは、というか何もしないプログラムですが・・・
>>957 言葉足らずでごめんなさい。
正常にできなかったってことです。
WinMainを宣言してるのかWinMainを呼び出しているのか
963 :
962 :2011/06/25(土) 21:42:25.68
知らない人は無理してレスしてくださらなくて結構です。
>>956 mainとWinMainはどっちかしか呼べんだろ
それ以外の関数は、どっちのメイン関数書いたコードからでも呼べるものもある
基本的に、GUI/CUIに依存してない関数は相互に呼び出せる
試しにmain関数からMessageBox関数呼んでみれ
WinMainだって単なる関数なんだからmainから呼べるだろ
釣りばっかりのつまらないスレになったな それだけ人との接触が少ない孤独な人間が増えていると言うことだろうか
お前らこれ読め > cannot use local functions
>>969 × プログラマー → ○ プログラマ
× アルツハイマー → ○ アルツハイマ
× ぷよぷよフィーバー → ○ ぷよぷよフィーバ
× アクセスカウンター → ○ アクセスカウンタ
Windows は伸ばし棒入れる方向に向かってるんだよね どうしたものか
>>972 文句言いたいわけじゃないよ
どうしようかなって悩んでるだけだよ
974 :
デフォルトの名無しさん :2011/06/26(日) 14:14:20.83
どちらでもいい。 但しどちらかに統一しろ。混ぜるな。
ちがうよ
全然ちがうよ
>>973 悩むことかよ。文科省が伸ばせっつってんだから伸ばしとけ。
そもそも長音記号の削除は、主観で決められたようないいかげんなものだから(木村泉氏の著作で読んだことがある)、悩むことじゃない。 統一しておけば問題ない。
なぜ正常終了なら返す値を0にしているかわかっていない低脳は死ね
長方形の中心Oを基準にしてθ角度回転させたあとの各点の座標(X,Y)を どのような計算で求められるのかで迷ってます ぜひ教えてください
984 :
デフォルトの名無しさん :2011/06/26(日) 19:28:22.58
こーこーせーれべるのすーがくをやってください
角度をラジアンに変換して、三角関数で求めてください。そしてお引き取りください。
各点の座標から中心の座標を引く それによって得られたベクトルを回転させる 回転させたベクトルに中心の座標を足す
これは
>>987 =
>>1 で、俺の仕事取るな!って事でおk?
(スレタイ=C言語なら俺に聞け)
次スレ立てます
うめていい?
993 :
デフォルトの名無しさん :2011/06/26(日) 21:06:51.16
パディング
0xCAFEBABE
995 :
デフォルトの名無しさん :2011/06/26(日) 21:32:46.10
ここで聞けばいいかわからないのですが キャッシュメモリの特性との関係を調べるためにCで書く課題です gettimeofday関数を使って演算時間を調べるというものなのですがここで聞いてもいいんでしょうか?
997 :
995 :2011/06/26(日) 21:42:51.88
読みましたがいまいちわかりません 宿題スレにいけばいいんでしょうか?
丸投げするなら宿題スレへ ある程度具体的に質問したいならここで聞いてみれば答えが帰ってくるかも うめ
課題かもしれないけど、ロジックをパクりたいわけじゃなく、関数の使い方を聞きたいだけじゃないの?
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。