C言語なら俺に聞け( ..
159:デフォルトの名無しさん
08/04/01 19:53:37
>>153について誰か教えて下さい。
160:デフォルトの名無しさん
08/04/01 20:12:44
Stringは型の名前にあるからねえ
俺は文字列変数名にstrやsを使う
>>159
sedプログラムに3つの引数-eと's/fg/ajko/g'とdest.txt を渡して呼び出す
sedプログラムが標準出力したメッセージはfooというファイルに書き込む
かな?
sedの質問があれば正規表現スレでどうぞ
161:デフォルトの名無しさん
08/04/01 20:45:25
すみません。
私Windowsです。
162:デフォルトの名無しさん
08/04/01 21:00:44
私はIRIXです
163:デフォルトの名無しさん
08/04/01 21:12:58
Windows でも Cygwin とかある
164:デフォルトの名無しさん
08/04/01 21:15:01
これを愛用している
URLリンク(www.vector.co.jp)
スレチだが
165:デフォルトの名無しさん
08/04/02 18:36:45
曖昧な質問で悪いのですが、
picをはんだして、モーターとリモコンに繋げなければなりません。
そういった用途のc言語プログラムというのはどこで拾えばよいのでしょうか?
166:デフォルトの名無しさん
08/04/02 19:40:13
宿題なら先生、仕事なら先輩。
167:デフォルトの名無しさん
08/04/02 20:52:03
>165
自分の文章を読み直してみろ
その文章で何を言ってるか理解できるか?
168:デフォルトの名無しさん
08/04/02 20:55:38
>>167
きっとロボット制御して半田付けするってことだ
で、ロボット制御するためのc言語プログラムというのを探している
169:デフォルトの名無しさん
08/04/02 20:57:00
>>165
導線と半田を用意して、こてで溶着すればいいんじゃない?
170:デフォルトの名無しさん
08/04/02 21:05:38
位置独立コードの事かと思ったよ。
171:デフォルトの名無しさん
08/04/02 23:09:20
Cである一定のstate数ループさせる方法ってあるんけ?
172:デフォルトの名無しさん
08/04/03 00:20:25
state数って何よ、asm("NOP") * nってこと?
173:fxで裁判中。教えて
08/04/03 08:28:12
外国為替証拠金取引会社のアトランティックトレードと裁判になりました。
裁判の内容をここに記してみました
システム障害等でくわしいかた、是非とも情報をお待ちしております。よろしくお願いします。
URLリンク(members3.jcom.home.ne.jp)
174:デフォルトの名無しさん
08/04/03 10:49:25
なかなかの魚拓が取れたみたいなので、ここに置いておきますね。
ZDNet Japan builder「C/C++のポインタの機能--参照渡しののような処理」
URLリンク(s03.megalodon.jp)
オリジナルは
URLリンク(builder.japan.zdnet.com)
175:デフォルトの名無しさん
08/04/03 11:20:59
すげえバカだw
そういやこの筆者と似たようなことぬかしてたヤツが宿題スレでボコボコにされてたな。
176:デフォルトの名無しさん
08/04/03 15:25:56
あちこち同じリンク張るな。いい加減うっとおしい。
177:デフォルトの名無しさん
08/04/03 17:55:05
全く無知な人間が
C言語をマスターするにはどれくらいの時間がかかりますか?
178:デフォルトの名無しさん
08/04/03 17:58:15
>>177
物覚えの良い人ならそれだけ早いだろうし
やる気によっても左右される
マスターがどれくらいの事を言ってるのかもわからない
179:デフォルトの名無しさん
08/04/03 18:10:47
僕もマスターしたという基準がよく分からないのですが
C言語の試験とか資格ってのはあるんですか?
180:デフォルトの名無しさん
08/04/03 18:19:43
聞いたことないし、あったとしても役立たないものであることは確かだな。
著名なプログラマが資格を持っているなんて話、聞いたことがない。
181:デフォルトの名無しさん
08/04/03 20:58:04
最低限の足切くらいはできるんじゃないか?
Fizz-Buzz みたいにw
使えないやつが暗記してくるのは見破れないけど
暗記すらできないやつなら落とすことができる
使えるやつは暗記する必要もない、と
182:デフォルトの名無しさん
08/04/03 21:02:56
そのレベルのcの資格なら存在しているな
183:デフォルトの名無しさん
08/04/03 22:36:16
>>177
参考書と問題集何冊か買って受験勉強並みに真剣に勉強すれば3ヶ月くらいで
1000行程度のフリーソフトが作れるくらいにはなる。マスターとは程遠いけどね…
184:デフォルトの名無しさん
08/04/03 23:50:20
うちは1プロジェクト数万行レベルの組み込みCなんだが、全く無知の人間がきたとして
作業要員に換算できるレベルに1〜3か月ってとこかな?
PCに慣れているかどうかでかなり変わるとは思うが。
185:デフォルトの名無しさん
08/04/04 17:44:31
コンパイラの使い方がわかりません。
例えばtest.cppをVC++でコンパイルするとして
cl.exe D:/test.cpp
と実行してもコンパイルは出来るのですが、
どこにプログラムが作られているのかわかりません。
プログラムの保存先はどのように指定すればよいのでしょうか?
186:デフォルトの名無しさん
08/04/04 17:55:02
cl.exe /help
と実行すれば、指定できるオプションの一覧が出る
187:デフォルトの名無しさん
08/04/04 19:21:06
>>185
カレントディレクトリに実行ファイルができているんじゃないかな。
188:デフォルトの名無しさん
08/04/04 22:45:35
#include <stdio.h>
int main(void)
{
char str[2];
scanf("%s",str);
printf("%c %c\n",str[0],str[1]);
return 0;
}
これをVC++で実行しました。
EOSを考慮して01という2桁の入力をすると結果は0 1と正常な結果なんですが
なぜかデバックエラーがでてしまいます。
なにが問題なんでしょうか
189:デフォルトの名無しさん
08/04/04 22:48:49
char str[3];
190:デフォルトの名無しさん
08/04/04 22:49:34
>>188
\0 が入る余地がない
191:188
08/04/04 22:57:33
0から始まるから[0]と[1]に文字が入って[2]に\0が入るんじゃないんですか?
192:デフォルトの名無しさん
08/04/04 22:59:12
char str[2];
これだと二文字分の領域しか確保した事にならない
[0] = '0';
[1] = '1';
[2] = '\0';
の3Byte必要
193:デフォルトの名無しさん
08/04/04 23:00:24
>>191
str[2]を使うなら、char str[3];で定義しないとダメ。
194:デフォルトの名無しさん
08/04/04 23:03:32
添え字が0から始まる事と、配列の要素数は別
char str[0];
と書いても1文字分確保されるわけじゃない
195:188
08/04/04 23:13:06
今char str[0];で宣言してみたらサイズが0の宣言は無効とでました。
なるほど、てことはchar str[1];だと1文字が入るサイズってなわけですね。
皆さまありがとうございました。
196:デフォルトの名無しさん
08/04/04 23:32:33
>.188
慣れてしまえば、なんでもないことなんだが。
Cの初心者が最初につまずく問題であることは確か。
1.文字列を格納する文字配列は、文字列の最後の\0分も含めて確保しなければならない。
2.配列を定義するときの添え字(char str[3]の3)は、配列要素の数であり、どこまで使うかではない。
197:デフォルトの名無しさん
08/04/04 23:34:24
追加
3.Cの配列の添え字は0オリジンである。
198:デフォルトの名無しさん
08/04/05 00:13:30
すみませんCの質問とは若干異なるかもしれませんが
「JmEditor2」を使用していて下パネルで
『cファイルをコンパイルして作ったexe』を実行したときに
[scanf]などの入力を必要とする操作部分が実行できません
解決策を知っている方がいればお願いします
コマンドプロンプトから同じexeファイルを実行したところ問題なく動きました
199:デフォルトの名無しさん
08/04/05 00:32:38
JmEditor2のヘルプには入力できるって書いてあるんですか?
それと若干じゃなくて大幅にスレ違いです。
200:デフォルトの名無しさん
08/04/05 02:37:46
いいえ、スレ違いではありません。鼬害です。
201:デフォルトの名無しさん
08/04/05 06:19:59
>>198
「ツール」メニューの「コマンド実行」を使う。
下パネルから実行したとき、子プロセスの標準出力がうまく表示されない。
プロセスが終了するまで、子プロセスの標準出力の内容が表示されないようになっている。
202:デフォルトの名無しさん
08/04/05 15:08:33
そして板違いの指摘の後にレスする馬鹿。
203:デフォルトの名無しさん
08/04/05 21:37:05
>>201
ありがとうございます。
>>他
すみませんね、住人さん。自治会お疲れ様です。
204:デフォルトの名無しさん
08/04/06 01:47:50
#include <stdio.h>
main()
{
char ss[80];
gets(ss);
puts(ss);
}
文字を80文字以上入力しても、全ての文字が表示されるんですか
何故80文字以上gets()で読み込んでputs()で表示する事ができるのでしょうか
205:デフォルトの名無しさん
08/04/06 01:51:04
ss のサイズが 80 までなんて gets は全く知らないから
メモリを破壊してどんどん文字を保存していってしまう。
非常に危険。
gets は使っちゃダメ。代わりに fgets を使うべし。
206:デフォルトの名無しさん
08/04/06 01:51:05
オーバーフローした場合の動作は未定義だから。
207:204
08/04/06 02:01:05
なるほど!理解できました
ありがとうございます。
208:デフォルトの名無しさん
08/04/07 10:07:03
任意のURLからファイルをダウンロードしてくるプログラムを作ったのですが、(マルチスレッド+Winsock)
一回のダウンロードごとにメモリ使用量が5〜30KBずつ増えていきます。
動的な確保は行っておらず、
何故増えていくのかがわかりません。
この場合の考えられる原因を教えて頂きたいです。
209:デフォルトの名無しさん
08/04/07 12:21:08
動的な確保を行っているから。mallocだけが動的確保じゃない。APIの呼び出しも動的確保になる場合がある。
210:デフォルトの名無しさん
08/04/07 12:29:59
Release〜しないといけない所を忘れてるとか。
211:デフォルトの名無しさん
08/04/07 15:08:26
なるほど…盲点でした。
もう一つお伺いしたいのですが、
グローバル変数はあまり使わないほうがいい、
という事を聞いたので
URL名
SERVER名
PATH名
ディレクトリパス
を保つ構造体をmain内で宣言したのですが、
自作関数の引数をあちこち増やさなければいけなくなりまして…
これってまずいですか?
一般的に言われる汎用な関数とはどんな関数なのですか?
212:デフォルトの名無しさん
08/04/07 15:12:18
よくわからないけど通りすがりにレスすると
その構造体というかメンバ変数を持つクラスで管理すればいいんじゃないの?
213:デフォルトの名無しさん
08/04/07 15:20:04
C++じゃなくてCだから困ってるんじゃ
214:デフォルトの名無しさん
08/04/07 16:16:50
はい。Cです。
215:デフォルトの名無しさん
08/04/07 16:18:59
>>211
プログラムの性質も作りも判らないからなんともいえないけれど、main()から構造体のポインタを順次下請け関数に渡すだけでしょ。
最下層にまで届ける必要はないはずだし、普通はあんまり問題にならないと思うけど。
216:デフォルトの名無しさん
08/04/07 16:25:50
>>215
main内で構造体を宣言することって
よくあることなんですかね?
217:デフォルトの名無しさん
08/04/07 16:30:34
>>216
何も問題はないよ。
218:デフォルトの名無しさん
08/04/07 16:33:13
あ、Cのスレだった・・・すまん
多用しなければグローバル変数にした方が色々と便利&バグを生まない事もあるよ
その構造体1つだけとかならグローバルにしちゃうのがいいと思う
219:デフォルトの名無しさん
08/04/07 17:51:09
>>216
OKだよ。
構造体のポインタをがんがん渡していけばいい。
複雑になったら、そのとき単純にする方法を悩めばいい勉強になる。
220:デフォルトの名無しさん
08/04/07 18:58:34
全てのグローバル変数を、実体名"Global"で構造体にまとめると、
Global.totalとか、Global.countとか一目瞭然で便利。
って、物の本に書いてあった。一理あると思った。
221:デフォルトの名無しさん
08/04/07 19:01:01
そんな方法があったか
接頭句を「g_」にするより分かりやすいな
222:デフォルトの名無しさん
08/04/07 19:38:52
>>220
カテゴリー別に分けて構造体にして、わかりやすい名前をつければ尚良い。
グローバル変数依存からの脱却の第一歩だ。
223:デフォルトの名無しさん
08/04/07 20:20:03
C言語を作れて表示できる無料のソフトはないですか?
224:デフォルトの名無しさん
08/04/07 20:20:44
C言語を作るとな?
225:デフォルトの名無しさん
08/04/07 20:30:38
>>223
cygwin とgcc
visualstudio
bcc
好きなのを選べ
おすすめはしないが
LSI Cというのもある
226:デフォルトの名無しさん
08/04/07 20:30:47
Windows上で動く無償のCコンパイラ、とエスパーしてみると、いくつかある。
Visual C++ 2008 Express Edition
URLリンク(www.microsoft.com)
C++Builder
URLリンク(www.codegear.com)
「C++」と書いてあるが、C言語のソースのコンパイルもできる。
他にcygwinとか。
227:デフォルトの名無しさん
08/04/07 21:24:45
>223
読み直してみろ
「C言語をつくれて」
これおかしいだろ
C言語という言語をつくるのか?
人にまともな説明すらできないやつはプログラム組むの無理だからあきらめろ
228:デフォルトの名無しさん
08/04/07 21:27:09
入門編なんだから大目にみてやれよ
そこまで攻撃する意図がわからんよ
229:デフォルトの名無しさん
08/04/07 22:38:23
逆に、
このくらいエスパーできないやつはここで教えるの無理だからあきらめろ
とも言える
230:デフォルトの名無しさん
08/04/07 23:33:14
初心者です。意味がわからないかも知れませんが質問させてください。
配列なんですがaの添字に代入されてる数字をそれぞれbに該当するところに
転送する場合どうなりなすか?
例でいうとaの0番目にある3をbの3に入れるということです
a[0]=3 b[0]=0
a[1]=4 b[1]=1
a[2]=0 b[2]=2
a[3]=5 b[3]=3
a[4]=1 b[4]=5
231:デフォルトの名無しさん
08/04/07 23:36:11
for(i = 0; i > MAX; i++)
b[a[i]] = a[i];
232:デフォルトの名無しさん
08/04/07 23:36:16
mixiに、タブは機種依存文字と言い張る基地外が現れる。
233:231
08/04/07 23:37:50
不等号逆だった
234:デフォルトの名無しさん
08/04/07 23:38:22
a[0]〜a[4]とb[0]〜b[4]
の全部の例を書いてみてくれ
235:230
08/04/07 23:49:03
すいません訂正です。
a[0]=3 b[0]=0
a[1]=4 b[1]=1
a[2]=0 b[2]=2
a[3]=2 b[3]=3
a[4]=1 b[4]=4
を
a[0]=3→b[3]=3
a[1]=4→b[4]=4
a[2]=0→b[0]=0
a[3]=2→b[2]=2
a[4]=1→b[1]=1
に同じ番号のところに転送するにはどうするかという意味です
236:デフォルトの名無しさん
08/04/07 23:49:15
>>230
やっぱり言っている意味がわからん。
>例でいうとaの0番目にある3をbの3に入れるということです
b[3] = a[0];
ということだよね?と考えると、一瞬 >>231 (不等号を逆にして)でいい気がするが、
a[3] はどうするの?
237:デフォルトの名無しさん
08/04/07 23:51:26
>>235
結局は
b[i]=i;
になるんじゃないの?
238:デフォルトの名無しさん
08/04/07 23:52:35
>>235
「転送する」の意味がわからん。
b[0]〜b[4]には元々値が入ってるんでしょ?
並びを
b[3]=3
b[4]=4
b[0]=0
b[2]=2
b[1]=1
としたって、配列の中身は
b[0]=0
b[1]=1
b[2]=2
b[3]=3
b[4]=4
と変わらないよ?
239:230
08/04/08 00:01:45
ん〜なんと説明していいか…如何せん素人なもんで
aの0にある数字3をbの同じ3番目に当てはめる?
にはどうするかってことです。
同じくaの1にある数字4をbの4に当てはめるってことです
あの聞いといてなんですけど意味不だったらスルーしてください
240:デフォルトの名無しさん
08/04/08 00:09:33
素人とかの問題じゃないんだけどな
1回自分で全部代入してみてbの中身全部表示してみると分かると思うけど
b[0] = 0 b[1] = 1 b[2] = 2... となるだけ
241:デフォルトの名無しさん
08/04/08 00:10:35
>>239
暗号化がしたいのかな?
242:デフォルトの名無しさん
08/04/08 00:15:32
>>239
結局>>231や>>237でいいような気がするが。
あと>>235が「配列bの添字の順番を換えたい」と言っているように思えるので、
一応、それは無理だと言っておく。
そもそも添字というのは「i番目」というような順番を示すものなので、
変更は不可能だ。
わかってるってんだったら、失礼。
243:デフォルトの名無しさん
08/04/08 00:33:18
b[0] = A, b[1] = B, b[2] = C
とあったものを、
a[0] = 1, b[1] = A
a[1] = 2, b[2] = B
a[2] = 0, b[0] = C
== b[0] = C, b[1] = A, b[2] = B
にしたいってことかしらん?
aの中身をbの添字にした時、正しい文字が現れるようにしたい、みたいな。
244:デフォルトの名無しさん
08/04/08 09:38:29
>>230
代入は上書きコピーのこと。転送とまちがえてはいけない。
245:デフォルトの名無しさん
08/04/08 12:33:58
>>230
何が目的なのかも書き込んだほうがいいんじゃない?
あんたのコード例から目的が推察できないのでみんな
首ひねってるんだと思うよ。
246:デフォルトの名無しさん
08/04/08 16:51:01
#include <stdio.h>
int main(void)
{
int n1, n2;
int per;
puts("二つの整数を入力してください。");
printf("整数 A:"); scanf("%d",&n1);
printf("整数 B:"); scanf("%d",&n2);
per = n1 / n2 * 100;
printf("Aの値はBの%d%%です。\n",per);
return (0);
}
実行結果を
2つの整数を入力してください。
整数A:50
整数B:100
Aの値はBの50%です。
と、したいのですが↑のプログラムじゃ動いてくれません;;
「Aの値はB の0%です。」
となってしまいます;;
何故でしょうか?
247:デフォルトの名無しさん
08/04/08 16:52:09
intは整数型だよ
248:デフォルトの名無しさん
08/04/08 17:05:41
50/100 = 0
0*100 = 0
249:デフォルトの名無しさん
08/04/08 18:38:07
>>246
整数型の計算は、コンピュータでは1より小さい結果になると
答えがゼロになるんだよ。なぜかといわれても、そういうもの
だと思ってくれ。
回避する方法は色々あるが、とりあえず
per = n1 * 100 / n2;
にしたらいい。理由は自分で考えてね。
250:デフォルトの名無しさん
08/04/08 19:45:39
ファイルを読み込み解析したいのですが、
char *buf = FileRead(file_path);
↓
Kaiseki(buf);
free(buf);
または
Kaiseki(file_path);
にするか悩んでいます。
FileRead関数内で動的にメモリを確保して
確保した領域をKaiseki関数に渡し解析するか、
Kaiseki関数内にファイルへのパスを渡して
読み込み、解析をKaiseki関数内で行うか、
どちらが良いと思われますか?
251:デフォルトの名無しさん
08/04/08 20:13:45
inspect関数かinvestigation関数でやるのがいいと思うよ
マジレスすると場合によるからどっちともいえない
252:デフォルトの名無しさん
08/04/08 20:21:43
>>251
どのような場合があるのですか?
253:デフォルトの名無しさん
08/04/08 20:42:23
5P3
順列の総数を求めるプログラムを教えてください
考えすぎて頭が痛くナリマスタ
よろしくオナガイシマス
254:デフォルトの名無しさん
08/04/08 21:09:06
>>250
255:デフォルトの名無しさん
08/04/08 21:12:34
>>253
オーバーフローとか一切考えなければ
5!を3!で割るだけじゃんww
なにが分からないの?w
256:デフォルトの名無しさん
08/04/08 22:20:03
>>253
ほらよ。
#include <stdio.h>
#include <math.h>
double npm(int n, int m) {return tgamma(n + 1) / tgamma(n - m + 1);}
int main(int argc, char ** argv)
{
printf("%g\n", npm(5, 3));
return 0;
}
257:246
08/04/08 22:30:13
>>247-249
ありがとうございます。
258:デフォルトの名無しさん
08/04/08 22:31:58
>>252
>>252
>>252
>>252
>>252
>>252
259:デフォルトの名無しさん
08/04/08 22:32:53
T lPr(T l,T r){T r=1;for( T i=r+1; i<l; i++){ r *= i; } return r;}
260:デフォルトの名無しさん
08/04/08 22:34:25
>>259
おいw
261:デフォルトの名無しさん
08/04/08 22:48:02
バグがあるな。
262:デフォルトの名無しさん
08/04/08 23:08:45
>>256
そのままコンパイルすると
error C3861: 'tgamma': 識別子が見つかりませんでした
なのですが?
263:デフォルトの名無しさん
08/04/08 23:50:07
まともなCコンパイラを使ってください。
264:デフォルトの名無しさん
08/04/09 19:31:35
5! / 3! って結局 5 * 4 だろ?
一旦階乗求めるよりh(ry
265:デフォルトの名無しさん
08/04/09 21:23:09
hの続きは何だよ
266:デフォルトの名無しさん
08/04/09 21:26:20
// オーバーフローしにくいように書いてみた
#include <stdio.h>
#include <stdlib.h>
int gcd(int a, int b){
int c;
while((c=a%b)) a=b, b=c;
return b;
}
int mPn(int m, int n){
int t, u=1, l=1;
if(m<1 || n<1 || m<n) return 0;
if(m-n<n) n=m-n;
for(;n>0;n--,m--){
l*=n;
t=gcd(u, l);
l/=t;u/=t;
t=gcd(m, l);
l/=t;u*=m/t;
// printf("m=%d n=%d [%d / %d]\n", m, n, u, l);
}
return u/l;
}
int main(int argc, char *argv[]){
int m, n;
if(argc!=3) return 1;
m=atoi(argv[1]);
n=atoi(argv[2]);
printf("%dP%d=%d\n", m, n, mPn(m, n));
return 0;
}
267:デフォルトの名無しさん
08/04/09 21:42:27
定番のhello worldがなぜか実行されない。。。
#include <studio.h>
int main(void)
{
printf("hello, world\n");
return 0;
}
エラーE2209 sample.c 2: インクルードファイル 'studio.h'をオープンできない
警告 W8065 sample.c 6: プロトタイプ宣言のない関数 'printf'の呼び出し(関数 main)
*** 1 errors in Compile ***
と、何度試行を繰り返してもなります;
このエラーをどう訂正していいのかわからない超初心者です。
設定などもチャート通り何度もやり直しましたが、上手くいきません。
よろしくお願いします。
268:デフォルトの名無しさん
08/04/09 21:47:43
studio......
269:デフォルトの名無しさん
08/04/09 21:48:54
standard I/Oな
270:デフォルトの名無しさん
08/04/09 21:48:55
エラーで気付や
271:デフォルトの名無しさん
08/04/09 21:49:17
あるあるww
272:デフォルトの名無しさん
08/04/09 22:03:37
DWORD gdw1;
DWORD gdw2;
gdw1 = timeGetTime();
//処理
gdw2 = (timeGetTime()-gdw1);
printf("%d",gdw1);
としても毎回計測するごとに処理時間が増えているのですが、
何故なのでしょうか?
273:デフォルトの名無しさん
08/04/09 22:07:55
質問の意味がよく分からんが
purintfにgdw2を渡すべきなんじゃない?
274:デフォルトの名無しさん
08/04/09 22:08:49
gdw2を表示したいんじゃないの?
275:デフォルトの名無しさん
08/04/09 22:20:14
Cのみだったのでこちらで質問させていただきます。
現在、下記のような感じでプログラムを作ってるのですが、
URLリンク(kansai2channeler.hp.infoseek.co.jp)
2つ問題があり、
@入力していくと次の配列まで入力されてしまう。
A2つ目のエラー仕様をどこでどう記述していいのか。
初歩的なことで、無駄な文が多いかもしれませんがよろしくお願いします。
また、こうすればもっと判りやすくできるなどあったら教えて欲しいです;
276:デフォルトの名無しさん
08/04/09 22:54:48
>>275
「次の配列」が何を指しているのか判りませんが、一文字ずつ入力してチェックするのは標準入力では無理があるかと。
普通に1行入力してから、解析する方がたぶんましです。
277:デフォルトの名無しさん
08/04/09 22:55:24
>>275 A
....
break;
}
}
if((cnt <= 0) && ((c == '-') || (c == '\n'))) {
printf("エラーメッセージ");
exit(1);
}
if(x == 1){
.....
278:デフォルトの名無しさん
08/04/09 23:10:17
>>275
>また、こうすればもっと判りやすくできるなどあったら教えて欲しいです;
うまく関数化しよう。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int absolute(int n1, int n2) { return n1>n2 ? n1-n2 : n2-n1; }
void check(const char* s)
{
int i;
for(i=0; s[i]; i++) {
if( !isdigit(s[i]) && s[i]!='-' ) { puts("不正な文字"); exit(EXIT_FAILURE); }
}
if(!s[0] || strcmp(s, "-")==0) { puts("数値ではない"); exit(EXIT_FAILURE); }
}
int input(void)
{
char str[100];
scanf("%99s", str); check(str); str[ str[0]=='-' ? 9 : 8 ] = 0; return atoi(str);
}
int main(void)
{
int a, b;
printf("数値a="); a=input();
printf("数値b="); b=input();
printf("%dと%dの差の絶対値は%d\n", a, b, absolute(a,b));
return 0;
}
279:デフォルトの名無しさん
08/04/09 23:41:13
int input(int *p){
char str[100], *pstr=str;
int value, index=0, sign=1;
if(scanf("%99s", pstr)!=1){
puts("入力エラー");
return 0;
}
if(sscanf(pstr, "%d%n", &value, &index)>=1 && pstr[index]=='\0'){
if(*pstr=='-') sign=-1,pstr++;
sscanf(pstr, "%8d", &value);
if(p) *p=sign*value;
return 1;
}
printf("不正な文字 %s\n", &pstr[index]);
return 0;
}
280:275
08/04/09 23:49:48
>>276様
a[0],a[1]でa[0]の入力をすると、a[0]の上限をこえたとき(cnt以上)に、
そのままa[1]の中身まで入力されてしまうってことですね;
>>277様
break;のとこもexit(1);にし、int exit(int);を入れてみたところ、
そこはかとなくAの部分はできました。ありがとうございますー。
281:281
08/04/10 14:58:40
わからないので教えていただけないでしょうか
URLリンク(kansai2channeler.hp.infoseek.co.jp)
よろしくお願いします。
282:デフォルトの名無しさん
08/04/10 15:01:38
史上稀に見る課題の丸投げ具合ですね
283:デフォルトの名無しさん
08/04/10 15:13:06
自分でわかろうと努力をするつもりはないわけか
課題の言葉の意味もわかってなさそうだ
284:デフォルトの名無しさん
08/04/10 16:17:51
>>283
社会に出れば、問題を解決する方法論を持っていればそれが能力と
みなされる。
たとえその方法論が丸無げであってもな。
285:デフォルトの名無しさん
08/04/10 16:29:12
その友達に聞け
286:デフォルトの名無しさん
08/04/10 16:30:45
AもBもやったことない俺に、Cなんて聞くんじゃねぇ〜ぞゴルァ!
C言語ならおk
287:デフォルトの名無しさん
08/04/10 18:57:28
Cとかまだやってんのwだっさw
288:デフォルトの名無しさん
08/04/10 19:36:17
スタックが32バイトしか取れないからしょうがないのだ。
289:デフォルトの名無しさん
08/04/10 23:47:00
>>288
それはアセンブラでもきびしいだろw
290:デフォルトの名無しさん
08/04/10 23:54:53
簡単なリモコン作る程度なら多いくらいだ
291:デフォルトの名無しさん
08/04/11 11:43:11
ファイル名を入力して、そのファイルの小文字を大文字に置換した結果を
別のファイルに出力するプログラムです
ソース
URLリンク(arhp.hp.infoseek.co.jp)
出力されたモノ
URLリンク(arhp.hp.infoseek.co.jp)
見ての通り日本語が化けてしまいます
どうすれば正しく表示されるでしょうか?
もっと簡単に出来るやり方があればそれも教えて欲しいです
ちなみに
if(ch == komoji[a]) {
fputc(omoji[a],outfp);
のkomojiとomojiを入れ替えて大文字→小文字のモノを作ろうとしましたが
さらに日本語がおかしくなりました
まだ入門書を半分も読んでいない初心者が思いつきでやったので
色々突っ込みどころはあるかと思いますがよろしくお願いします
292:デフォルトの名無しさん
08/04/11 12:45:21
漢字は2バイト以上で表現しているのだゾ。
漢字コードでググルのだ。
293:デフォルトの名無しさん
08/04/11 13:07:06
>>291
当方で確認した環境は WindowsXP, 使用した処理系は cygwin(gcc 3.4.4) です。
以下のプログラムで問題が発生するかどうか、確認してみてください。
問題が発生しなければ、これが解決方法です。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
古いし、問題もあるようですが、参考にした書籍をあげておきます。
応用C言語, 三田 典玄, アスキー 1988, ISBN4-7561-0056-2
第3章
294:デフォルトの名無しさん
08/04/11 13:13:56
>>291
突っ込みどころ満載だな。
・komoji, omojiは配列にする必要がない。const char * komoji = "abcde...z"でいい。
・bについては、要素数を固定値で持つな。ましてそれを変数に代入するな。
・forの条件もおかしい。このまま直すならa < bではなくa <= bだが、そもそもここはkomoji[a] != '\0'にすべきだ。
・strcpy(), strcat()を並べて使うくらいならsprintf()でも使え。この場合、sprintf(newfilename, "h_%s", filename)でいい。
・fgetc()の戻り値をcharで受けてはいけない。fgetc()の仕様を確認すればわかるが、intで受けるべきだ。
・cも要らない。小文字と判断したときにfputc()するのではなく、その場はchを書き換えておくだけでいい。
・>292も書いているが、Windowsで普通に扱う文字コードでは漢字コードの一部が英小文字に一致してしまう。
真面目に対処すると意外に面倒だから、他の問題を全てクリアしてから改めて挑戦しろ。
295:デフォルトの名無しさん
08/04/11 13:17:08
>>293
その本はゴミだ。いや、作者がゴミそのものだ。
>>291
>293を見て気付いた点をもう一つ追加。
・小文字と判断したら、forからは脱出しておけ。
・gets()は使うな。fgets(filename, sizeof(filename), stdin)にしておけばいい。
296:293
08/04/11 13:29:55
>>295
まあまあ、せっかくソースをさらして質問している(質問作法としては最上です。)のだから、
まずい点をことさらに列挙するのはどうでしょうか。
それはそうと、
fgets() の第一引数はファイル名ではなくて、バッファなんですけど。
> その本はゴミだ。いや、作者がゴミそのものだ。
netnews の時代からいろいろいわれていたようですけど、
具体的にどこが悪いんでしょうか。おしえていただけるとうれしいです。
297:デフォルトの名無しさん
08/04/11 13:36:34
まあ環境依存だよな
漢字というか多バイトコードが何なのかによって変わっちゃうから
298:291
08/04/11 13:36:57
いえいえ、具体的に間違いをあげて頂きとても助かりました!
今からお二人のアドバイスを参考にやってみます!
299:デフォルトの名無しさん
08/04/11 13:37:55
入門で作るプログラムとしてはASCII以外を考慮するのはハードル高すぎると思うよ
300:295
08/04/11 13:39:07
>>296
もうかなり前だから何を以ってゴミと判断したかは忘れたが、
当時本人にも直接メールして本の不備を詳細に指摘したことがある。
言い訳だけが返ってきた。
それはそうと。
>fgets() の第一引数はファイル名ではなくて、バッファなんですけど。
もとのソースを見たか?
> gets(filename);
これ以上必要もない恥の上塗りはやめておけ。
>まずい点をことさらに列挙するのはどうでしょうか。
真摯に聞く態度を示す質問者だからこそ、列挙した。
つーか、「まずい」と認識しつつ指摘しない方が不親切だろ。
301:291
08/04/11 13:41:58
環境依存ですかー
やっぱり初心者がやるにはちょっと面倒なモノだったようですね
皆さんの言ってることがある程度理解出来たら自己満足したいと思いますw
302:293
08/04/11 13:43:00
>>296
あっ失礼、filename というのは、提示されたプログラムの変数をさしていたんですね。
もうしわけない。
303:293
08/04/11 13:47:03
>>300
そうですね。gets() はまずいですね。
提示されたプログラムでは、128 文字以上入力されるとおかしくなってしまいます。
> 真摯に聞く態度を示す質問者だからこそ、列挙した。
> つーか、「まずい」と認識しつつ指摘しない方が不親切だろ。
たしかに。
304:デフォルトの名無しさん
08/04/11 13:49:09
EUCだと3バイトとかあったっけ?
305:295
08/04/11 14:03:04
>>304
入門の域を超えるから自分で調べてくれ。
と、それでは不親切なので、Asciiと共存できる文字コードを簡単に。
# つーか詳しくないので間違っていたら失敬。
・シフトJIS、SJIS、CP932、MS漢字など
Windowを中心に広く使われる。基本的に漢字などは2バイトで表現できるが、
2バイト目のコードがAscii文字の領域に重なるために何かと厄介。
特に、大文字小文字変換やディレクトリの区切り(\)のためにバグが出た商品も多々ある。
・(狭義の)EUC、EUC-JP
一部のUnixなどで使われる。狭義のEUCでは基本的に漢字は2バイトだが、
(所謂)半角カナも2バイトになってしまう罠。広義のEUCはEUC-KRなどの日本以外のものも含む。
・UTF-8、(狭義の)Unicode
最近のLinuxやMac(これも実はUnix系)などで一句使われる。基本的に漢字などは3バイトになる。
厳密に解釈しだすと切りがないので省略。UTF-8以外のUnicodeとは表現方法が随分異なる。
・ISO-2022-JP、(狭義の)JIS
メールなど、7ビット通信環境でも使えることを前提とした環境で使われる。
漢字などはasciiと同じような範囲を使うので単純にチェックすることは不可能。
asciiとの境界にEsc符号列を用いることで状態を切り替えるので、手間さえ掛ければ勿論チェック可能。
但し、改行前後でAsciiに戻さないといけないなど制約が多いので、内部コードとして使うことはお勧めできない。
306:293
08/04/11 14:08:01
>>305
補足。
>>293 ではシフトJIS(MS漢字コード)の古い時代のものを仮定しています。
>>293 で作成・検証に使用したコンパイラは、まさにシフトJIS には対応していない
ので、提示されたプログラムにある日本語メッセージは、なくなく削除しました。
307:デフォルトの名無しさん
08/04/11 14:18:05
>>306
cygwinなら、gccのオプションに--input-charset=cp932 --exec-charset=cp932を書くといいかも。
応用で、EUCで書かれたソースをcygwin用にコンパイルすることもできますぜ。
308:デフォルトの名無しさん
08/04/11 16:45:27
>>307
感謝です。gnu の libiconv/iconv_open() の指定方法でいけばいいんですね。
またひとつ賢くなりました。
309:デフォルトの名無しさん
08/04/11 20:16:02
>>287
Aどころか女と付き合ったこともないお前が言うと笑えるw
310:デフォルトの名無しさん
08/04/11 20:34:22
ワシのCは108手までまであるぞ
311:デフォルトの名無しさん
08/04/11 21:18:17
本当に初歩的な事ですみません…
C#ってなに?
312:デフォルトの名無しさん
08/04/11 21:20:08
プログラム言語
313:デフォルトの名無しさん
08/04/11 22:40:22
そのプログラムの中のたとえばどのようなものか教えていただけたらありがたい。
314:デフォルトの名無しさん
08/04/11 22:40:40
日本語でおk
315:デフォルトの名無しさん
08/04/11 22:45:33
自然言語に日本語、英語、フランス語と色々あるように、
プログラムを記述するのに使う言語も色々ある。
その1つがC#。もちろんCも1つの言語だ。
316:デフォルトの名無しさん
08/04/12 00:00:10
Cよりはjavaに近い言語ってよく言われてるね
まぁC#とか触ったこともないけどなw
317:デフォルトの名無しさん
08/04/12 00:28:35
JAVAっぽいC++
318:デフォルトの名無しさん
08/04/12 01:04:35
マイクロソフトのマイクロソフトによるマイクロソフトのために作られた言語
319:デフォルトの名無しさん
08/04/12 12:44:08
J++の焼き直し言語がC#
320:デフォルトの名無しさん
08/04/12 12:52:04
どの言語だろうと、基本的な部分は共通しているし
実装されている、出来ることを知ることの方が重要。
あとは、用意されているライブラリをきちっと使えれば、どの言語だろうと関係ねぇ
限定した言語でしか通用しないような奴は、どこへ行っても使い物にならない。
とりあえず、コンピュータの仕組みを知ることが出来たんで、大学に通っておいて正解だったぜ。
321:デフォルトの名無しさん
08/04/12 14:10:50
と、突然どうした。。。
322:デフォルトの名無しさん
08/04/12 14:15:56
簡単な文字出力のプログラムを作ったとして、
それをチャット上などで動作させることはできないのですか?
コマンドプロンプトの中でしか出力できないのですが
323:デフォルトの名無しさん
08/04/12 14:17:00
>>322
そう。
324:デフォルトの名無しさん
08/04/12 14:34:24
>>322
チャット上に文字出力するプログラム作ればいいじゃん
325:デフォルトの名無しさん
08/04/12 14:36:31
>>324
出力先をコマンドプロンプトじゃなくて、チャット上にするやり方が分からない
本にもそういうの載ってないんだが
すべてが独学だから聞く人もいないし・・
326:デフォルトの名無しさん
08/04/12 14:38:40
>>322
そのチャットソフトが外部プログラムを呼び出すようにできていれば、可能かもしれない。
# まぁ無理だ。
327:デフォルトの名無しさん
08/04/12 14:40:46
>>326
そうなんですか?teacupチャットだけど
ホットコーヒーのやつでは出来てたような。。。
とりあえず外部プログラムを呼び出すようにできてるかも分からないので、もちと勉強してきます!
ありがとうございました!
328:デフォルトの名無しさん
08/04/12 21:26:46
名古屋近辺の専門学校でC言語学びたいと思うんだけど、どこがあるか紹介して。
または2チャンネルのスレッドでそういうスレがあったらきぼん。
329:デフォルトの名無しさん
08/04/12 21:27:35
>>328
大学へGO!
やっぱり基礎が大事だから
330:デフォルトの名無しさん
08/04/13 07:30:38
C言語で操っている、操作させている、制御しているコンピュータの基本的な仕組み
そして極め付けが、君が日ごろ見ている文字、絵、動画、音声、それらはすべて
ある法則に則って記録された数値データ、その数値データを人間で言う動物細胞
物質の原子レベルまで追求して話をすると、0と1の組み合わせ、すなわちバイナリーデータとは
0と1、あるかないか、磁石で言う+と-、電気信号でそれらを管理、制御しているのさ。
ほら、いつもニヤニヤしながら見ているエロ画像、それがだんだん・・・ただの色の集まり、
その色は0と1の組み合わせで構成されているデータに見えてきただろ?
PCに色や文字、音声が人間が解釈できる形で表現できる機能が実装されているから
その0と1の無機質なデータがエロ画像に見えるのさ。グロだろうと。
331:デフォルトの名無しさん
08/04/13 09:52:55
人間なんて所詮炭素と水なのさ
という話と同等のどうでもいい話
332:デフォルトの名無しさん
08/04/13 10:06:34
その通り、しかし、それを理解してそれに対して適切に制御、操作できれば
可能な範囲内で様々なことが出来るようになる。だから基本に戻れと。
ただ・・・人間も、いくら美人だろうとイケメソだろうが、所詮最後は朽ち果てて
この世から存在すらなくなってしまうのさ。ほら、躊躇してねーで、とっとと
好きなプログラムを作れ。そしてエロ画像で好きなだけはぁはぁしてろ、な?
333:デフォルトの名無しさん
08/04/13 10:08:37
>>332
生きた証をどう残すかだな。子孫か、グレートコードか。
334:デフォルトの名無しさん
08/04/13 10:10:29
なんで択一なんだよ
両方ゲットせいよ
335:デフォルトの名無しさん
08/04/13 10:11:39
もちろん両方残せるのが一番良い。
336:デフォルトの名無しさん
08/04/13 10:13:58
おまえら何の話してるんだよ
337:デフォルトの名無しさん
08/04/13 10:20:13
自分も可能な範囲で子供を作れるのさ、作られるものは
遺伝子レベルでのことになるが。
338:デフォルトの名無しさん
08/04/13 14:32:55
returnとか戻り値とかどういうときにどう使うんですか?
詳しくかつ解りやすく教えてください
339:デフォルトの名無しさん
08/04/13 14:43:45
自作した関数は式の中で使えるんだよ。
340:デフォルトの名無しさん
08/04/13 15:17:19
int main()
341:デフォルトの名無しさん
08/04/13 15:21:39
int sankaku(int teihen, int tkasa)
{
return teihen * takasa / 2;
}
int main()
{
printf("%d", sankaku(10, 50));
return 0;
}
342:デフォルトの名無しさん
08/04/14 18:18:42
ソースURLリンク(kansai2channeler.hp.infoseek.co.jp)
ヘッダファイル(Macの方はこれがないと実行できません)URLリンク(kansai2channeler.hp.infoseek.co.jp)
内容は1〜9の数字を表示して、中に入っていない数字(3が表示されていないなら3)を入力する簡単なゲームです
このままだと最高記録と、最後に終了した時刻を書き込むだけなのですが
いままでの記録のベスト10と、それぞれに対応した終了時刻を扱えるに変更したいです
最初にfread,fwrite関数で記録の要素数を計ってプログラムを組んだのですが
正常に読み取り、書き取りができませんでした
その時のコードを載せればいいのですが、そのままだといくつか変更しないとエラーが出るので正常に動くソースをさらしました
できるだけ簡単に記録のベスト10と、それぞれに対応した終了時刻を扱える方法を教えてください
343:デフォルトの名無しさん
08/04/14 21:33:40
どんどん流れてくるデータ列を、指定された割合で「バランスよく」
間引く方法で悩んでいます。
割合を%で指定された場合に、データ処理時に以下のようにしたのですが
int a = (clock() % 100) + 1;
if(a > DROPRATE) { ; }
これだと50%を指定したときに(0がFALSEで1がTRUEだとして)
000000111111000000111111
という感じに並んでしまい、
010101010101....
とはなってくれません。
出来るだけきれいに固まりが出来ないように間引くのには、通常どんな方法を
とればよいのでしょうか?
344:デフォルトの名無しさん
08/04/14 21:33:41
>>342
先ず、get_data()を改修してみよう。
fscanf()の使い方はそのままで、そこで得たbest, yearなどを格納できるように構造体配列を用意するのを忘れずに。
それができたら、テキストエディタで現在のkiroku.txtを編集してダミーデータを作ってそれを喰わせてみよう。
ここまでできれば、後はput_data()を改修して、記録の取り扱いのロジックを書けばいい。
要は、1件扱うのも10件扱うのも同じこと。
fscanf()とfprintf()で作っているのなら別途fread(), fwrite()が必要になるなんてことはない。
345:デフォルトの名無しさん
08/04/14 21:41:57
>>343
なんで clock なんか使ってるの?
rand 使えば?
346:デフォルトの名無しさん
08/04/14 21:44:43
いえ、randomで書いて、やっぱり固まり部分が出きるので
きれいにならぶ規則性がほしいな、と思っているのですが・・・
三角関数とか使うのは嫌だし・・・
347:デフォルトの名無しさん
08/04/14 21:45:11
>>343
clock() に DROPRATE を掛ければ委員ジャマイカ?
348:デフォルトの名無しさん
08/04/14 21:48:25
>>346
バケツ変数みたいなものを用意して、毎回通過時にDROPRATEずつバケツに足していくとか。
勿論、バケツが一杯になったら空にすればいい。
Ex.
static unsigned bucket = 0;
bucket += DROPRATE;
if (bucket >= 100) {
bucket = 0;
flag = true;
} else {
flag = false;
}
349:デフォルトの名無しさん
08/04/14 21:51:05
データ列の速度が1じゃないとだめか。
こうか?
a = (a+DROPRATE) % 100;
if(a > DROPRATE) { ; }
350:デフォルトの名無しさん
08/04/14 21:57:40
リサンプルにおけるエイリアシング現象じゃないの。
351:デフォルトの名無しさん
08/04/14 22:05:02
>>346
なるほど。規則的にしたいのか。
a 中に b 個 1 が規則的に出てきて欲しいのであれば、
void ab(int a, int b) {
for (int i = 0; i < a * b; i += b) {
printf("%d", (i % a < b));
}
printf("\n");
}
とかどうよ。
352:デフォルトの名無しさん
08/04/14 22:06:05
コメントありがとうございます。
>>347
すみません。良くわかりません。
>>349
なるほど、これだと確かに固まりが分散しそうですね。やってみます。
353:デフォルトの名無しさん
08/04/14 22:07:45
>>343
規則的でよければブレゼンハムのアルゴリズムが使えるよ
乱数要素を混ぜるならバッファ付のディザリングみたいの使えばおk
354:デフォルトの名無しさん
08/04/14 22:08:24
>>351
ありがとうございます。やってみます。
355:353
08/04/14 23:02:19
>>343
いまさらだけど…
>>351 と同じインターフェイスで
void ab_(int a, int b){ // ブレゼンハム
int i, x;
for(i=0,x=a/2;i<a;i++,x+=b+1){
printf("%d", (x>=a));
if(x>=a) x-=a;
}
printf("\n");
}
double uniform_rand(void){return (double)rand()/(RAND_MAX+1);}
void ab__(int a, int b){ // 乱数ディザリング
int i, d;
for(i=0;i<a;i++){
d=0;
if(uniform_rand()*(a-i)<b) d=1,b--;
printf("%d", d);
}
printf("\n");
}
356:デフォルトの名無しさん
08/04/14 23:52:21
>>355
ありがとうございます。参考になります。
皆さんへ
結局、>>351さんのループ部分をばらした関数を作って使いました。
どうもありがとうございました。
357:デフォルトの名無しさん
08/04/15 00:24:57
>>353
347=349だけど参考になった。
ブレゼンハムのアルゴリズムっていうのか。
358:353
08/04/15 14:25:42
>>357
参考にするなら訂正しておくよ orz
void ab_(int a, int b){ // ブレゼンハム
int i, x;
for(i=0,x=(a+b)/2;i<a;i++,x+=b){
printf("%d", (x>=a));
if(x>=a) x-=a;
}
printf("\n");
}
359:デフォルトの名無しさん
08/04/15 23:37:51
getchar()を使用し、絶対値を返すプログラムを作れ、ということで
ここでいろいろ参考にして、一応作ってみました。
結果は問題ないと出るのですが、イマイチ無駄な処理が多いかなと自信なくて、
修正できるとこがあれば、自分が判りそうな範囲で修正して教えてくださいー;
URLリンク(kansai2channeler.hp.infoseek.co.jp)
360:デフォルトの名無しさん
08/04/15 23:38:59
宿題スレ池
361:278
08/04/16 00:14:15
>>359
だから関数化しようって。
無駄な処理を言うなら、フラグを駆使してまでmainだけで頑張ることが無駄。
278のをgetchar使うように修正しといたから。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5373日前に更新/199 KB
担当:undef