スレを勃てるまでもな ..
249:デフォルトの名無しさん
09/03/09 11:54:41
[1] 授業単元:趣味
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: XP
[3.2] コンパイラ名とバージョン: MSC ver.5.1
[3.3] 言語:C
パスワードの入出力プログラムをつくりたい。
PASSは4文字とし、1文字入力される毎に'*'を1個表示し、
4文字入力後パスワードをチェック。
PASSが正しければ「システムの使用を許可します」と表示し、
間違っていれば3回再入力させて、3回を超えたらエラーを表示。
(パスワードは予めプログラム内部で定義されているという前提で)
こういうプログラムを書いてみたのですが、main以下「*password=1994」を
正解として宣言し、else文の部分でc[i]と*passwordを認識させてprintfで
c[i]を表示させたいんですけれどもうまくいきません。
何故でしょう?
何となく原因はわかるのですが、漠然としていて手が出せないんです。
上のコードをみて、名人方のアドバイスをお聞かせ願いたい。
250:デフォルトの名無しさん
09/03/09 12:00:25
>>245
SendInputはどう?
251:デフォルトの名無しさん
09/03/09 12:16:23
>>249
何をやりたいのかの説明がおかしいし、プログラムに至っては支離滅裂だ。
c[i]に文字を入れているのなら、1994なんて数値を入れちゃダメだろ。
初歩からやり直すことをお勧め。
252:デフォルトの名無しさん
09/03/09 12:21:31
>>240
位置エネルギーと一緒で無限遠を元年にすればいい
253:デフォルトの名無しさん
09/03/09 12:31:54
>>249 メモ帳べた書きでコンパイルしてない。好きにしろ。
#include <stdio.h>
#include <conio.h>
int main(){
const char* password = "1994"; int count = 0;
do{
int i; char input_password[4];
printf("パスワードを入力して下さい。(4文字): \n>");
for(i = 0; i < 4; ++i){input_password[i] = getch(); putchar('*');}
}while(!strcmp(password, input_password) && count++ < 3);
if(count >= 3){
puts("仏の顔も三度まで!\n正式なpasswordがないとシステムは使用できません!");
}else{
printf("password = %s\nシステムの使用を許可します。\n", password);
}
}
254: ◆XD9CNUCqag
09/03/09 12:33:47
>>249です。
>>251氏
なるほど、確かにおっしゃるとおりだと思います。
説明不足で申し訳なく。
このプログラムは'1994'というPASSを定義して、c[i]に入力させてそのPASSを
入力させたら正解、それ以外なら間違いで再入力させるといった感じでつくりたかったんです。
そして、私はCを学び初めてほんの1ヶ月くらいの素人でありまして
現在進行形で勉強中の身であります。
初歩から学んでいるつもりなのですが、何分覚えることが沢山すぎて手探りな状況な次第。
もし、よければ勉強するポイントなど上げて貰えると助かるのですがお願いできますでしょうか?
255:デフォルトの名無しさん
09/03/09 12:35:41
伝統的なポイントな。
1) 初心者です、を免罪符にした発言を慎む。
2) 一歩目から他人に頼るな。努力の跡すら見えないのは相手にされない。
256:デフォルトの名無しさん
09/03/09 12:39:56
小心者です。
インポ目で他人を頼って(ry
257:デフォルトの名無しさん
09/03/09 12:40:16
>>254
一ヶ月もあれば、パスワード入力くらい書けるようになる。
それができていないのは、初歩からきちんと自分のものにしていないのではないだろうか。
まさかとは思うが、本を読んで理解した気になっただけで書けるようになるとは思っていないだろうな。
まぁ、先ずはもっと単純な文字入力からおさらいしてみようかw
258:デフォルトの名無しさん
09/03/09 12:45:28
宿題スレに張り付いて課題こなしてたら力量うp。
259:デフォルトの名無しさん
09/03/09 12:56:16
>>253
メモ帳だとその程度か
input_passwordが0終端してないぞ
260:デフォルトの名無しさん
09/03/09 13:00:26
宿題スレは単にバカな質問を受け流すためのハコだからな・・・
261: ◆XD9CNUCqag
09/03/09 13:15:40
>>255氏
肝に銘じます。
>>257氏
言われてみれば、本を読んでたら出来るようになるとは少なからず思っていました。
でも、実際やってみて全然出来ないどころか、覚えることすら出来ていないことに
自己嫌悪に陥っています。
単純な文字入力から勉強し直してみます。
>>258氏
宿題スレの名人方は、添削するより、ひたすら課題を自分でこなしていく
のが好ましいようなので、張り付いてだけじゃ私の力量うpには繋がりませんよね・・・。
参考にはなっていますけども。
262:デフォルトの名無しさん
09/03/09 13:25:08
>>261
本を読むだけでも相当な勉強になる。
…ただしただ読み流すだけではダメで、理解しながら読まないと、ただ字面を追っているだけになる。。
そして少しでも疑問に思ったら先へ進まないでコーディングしてみる。
この辺は中高生の数学と共通する物がある。
ってな感じが俺の認識。
263:デフォルトの名無しさん
09/03/09 13:25:40
実はここまで全て俺の自演
264:デフォルトの名無しさん
09/03/09 13:27:35
>>261
自分で回答するんだよw
265:デフォルトの名無しさん
09/03/09 13:29:31
>>261
自分でも答えを考えるんだよ。
266: ◆XD9CNUCqag
09/03/09 14:34:43
>>262氏
>…ただしただ読み流すだけではダメで、理解しながら読まないと、
ただ字面を追っているだけになる。
はい、どうやら私は読んで理解したつもりだっただけで
字面を追っていることをこれまで繰り返していただけのようです。
「早くCの知識を身につけたい」という気持ちだけが先走っていたといいますか。
勉強しても早々簡単にはみにつかないものなのにおかしいですね。
>>264氏
もし自分で回答なんかしちゃったりしたらら駄目だしされまくりで
精神的に辛すぎるような気もしますが・・・
267:デフォルトの名無しさん
09/03/09 15:24:29
>>266
ダメだしされて何が悪い。直せばいいじゃないか。
ダメだしも指摘もなければずっと悪いままだぞ。
268:デフォルトの名無しさん
09/03/09 15:43:56
昼間に2ちゃんねるに書き込んでる人間なんてスキルも無いロクでもない人間なんだから
講釈なんて聞いても無駄だよ。
自分ができない夢を語っているだけなんだから。
269: ◆XD9CNUCqag
09/03/09 16:46:35
困りました・・・
文字入力の基礎からやり直そうと思って勉強し直してるんですけども
いつまでたっても目的のパスワードプログラムが出来そうもない・・・
何となく問題の原因はわかりかけてるんだけど、漠然としてて・・・
そっから全然前に進まない
ほんと使えないなぁ・・・私って・・・OTL
>>267氏
確かにその通りかもしれません
すぐには無理でしょうが、いずれ力量うpしたら実践してみたいと思います。
270:デフォルトの名無しさん
09/03/09 17:16:13
文字コード、文字列、数値
271:デフォルトの名無しさん
09/03/09 17:50:37
ゆっくりいこう
272:デフォルトの名無しさん
09/03/10 01:04:54
あるバージョンのgccでは、複数のスタティックライブラリをリンクするとき
liba.aがlibb.aの関数を使用し、libb.aがlibc.aの関数を使用しているとき
gcc -o prog main.o liba.a libb.a libc.a の順番に書かないとundefinedなんとかというエラーが出る。
もしも、liba.aとlibb.aの双方が互いの関数を使用している場合、
これらのスタティックライブラリを上記のgccでリンクするにはどうすればよいのか。
273:デフォルトの名無しさん
09/03/10 02:46:29
gcc -o prog main.o liba.a libb.a libc.a liba.a
274:デフォルトの名無しさん
09/03/10 02:49:11
>>272
そうならないようにモジュールの配置を見直す。
275:デフォルトの名無しさん
09/03/10 07:01:54
>>272
そういうのを循環参照と言って、良くない設計の兆し。
276:デフォルトの名無しさん
09/03/10 08:38:45
gccって、あるバージョンとか噂とか、不確かではっきりしない事を
よく書かれてるな。
277:デフォルトの名無しさん
09/03/10 12:32:55
>>272
昔のHP/UXにもそういうの(順序を人間が決めないといけない)があって
lorder | tsort で依存関係をトポロジカルソートして makefile に食わせた覚えが。
278: ◆XD9CNUCqag
09/03/10 13:59:34
/* getchar.c */
# include <stdio.h>
int c, cc;
main(){
printf ("getcharの実験 Ctrl + Z で終了\n");
while ((c=getchar())!=-1) {putchar('*'); putchar(c);}
printf ("getchの実験 スペースキーで終了\n");
while ((cc=getch())!=32) {putchar('*'); putchar(cc);}
}
このプログラムの「while ((c=getchar())!=-1)」の「!=-1」って
「Ctrl + Z」をあらわしてるんですかね?
それと、「while ((cc=getch())!=32)」の「!=32」ってのは
「スペースキー入力」を意味してるんでしょうか?
いま、入出力を勉強中なのですが、これがよくわからなくて。
教えて下さい、お願いします。
279:デフォルトの名無しさん
09/03/10 14:02:32
32はASCIIコードでスペース
-1はEOFだろ。Ctrl-Zかどうかは環境による。
280: ◆XD9CNUCqag
09/03/10 14:11:10
>>279
なるほど。
では、上のプログラムを数字の「1994」と入力したら終了するように
書き換えるにはどうすればいいのでしょうか?
自分では、「!=1994」と記述すれば問題ないだろうと思っていたのですが
実行してみると全く終了する気配がありません。
コンパイルも正常に通り、延々と入力させるプログラムに成り果ててしまいました。
281:デフォルトの名無しさん
09/03/10 14:15:22
数値の1994と比較したいなら
atoi(str) != 1994
まあ普通は
strcmp(str, "1994") != 0
282:デフォルトの名無しさん
09/03/10 14:29:11
そのマジックナンバーは「悪い例」として何かに載ってるのかな・・・
283:デフォルトの名無しさん
09/03/10 14:32:40
>>249からの流れか。
ってMSC5.1?
MS-DOSの頃のじゃないのかそれw
284: ◆XD9CNUCqag
09/03/10 14:49:37
>>281
なるほど、atoi関数使って整数文字列を整数値に変換してからでないと
いけなかったんですか
ということは文頭の#includeにstdlib.hを追加しないといけないのかな
ありがとうございます名人
私は名人のようなPGになりたいです!
>>283
はい、そうです。
調べてみたらPC9800シリーズに標準装備されてた頃のやつっぽいです。
まぁ、今のところ不自由はしていないので古くてもいいかなって思って
使っています。
285: ◆XD9CNUCqag
09/03/10 16:04:26
あのーまたまたへたれ過ぎる質問で恐縮なのですが、
/* getchar.c */
# include <stdio.h>
int c, cc;
main(){
printf ("getcharの実験 Ctrl + Z で終了\n");
while ((c=getchar())!=-1) {putchar('*'); putchar(c);}
printf ("getchの実験 スペースキーで終了\n");
while ((cc=getch())!=32) {putchar('*'); putchar(cc);}
}
この「while ((c=getchar())!=-1)」の「!=-1」の部分を「atoi(str) != 1994 」
に書き直すにはどうしたらいいんでしょうか?
自分でやってみたらえらい不細工な文になってしまってとても見てられたものじゃ
なかったもので・・・ご教授願いたいのです
286:デフォルトの名無しさん
09/03/10 16:14:09
まずは1文字入力したら配列に追加していく仕組みを作ってみ
別関数にするのがいいけど
287:デフォルトの名無しさん
09/03/10 16:46:12
>>285
char str[1024] = {0};
int i = 0;
とか宣言して
str[ i++ ] = c;
を追加
288:デフォルトの名無しさん
09/03/10 17:11:10
「一文字入力したら配列に追加していく仕組み」は
>>249のリンク先のコードの中にもう入ってるんだけどねー
・文字=数値(ASCIIコード)
・文字列=文字の配列
質問者が↑をまだ理解しきれてないんじゃないのか
あとatoi()をパスワード認証に使うのは同意できない
パスワードも入力も文字列なのに、なぜ数値に変換する?
例えばもしパスワードが"1994"でなく"0083"だったら、入力が
"0083"でも"083x"でも"83xx"でもOKになるんだけど、それが君の望む挙動なの?
自然に文字列どうし比較しようよ。「普通はstrcmp()」って書いてくれてるやん
『文字列は難しい』ってみんなが脅すから避けてるのかもしれないけど
『文字列(をうまく説明するの)は難しい』の意味だから気にせず勉強しろよ
理解できた後なら『俺どーしてこんな質問してたんだろ』ってなるよ、絶対
289: ◆XD9CNUCqag
09/03/10 17:25:18
>>287
こんなERRがでちゃいました;;
URLリンク(kansai2channeler.hp.infoseek.co.jp)
gch2.C
gch2.C(8) : warning C4135: conversion between different integral types
gch2.C(11) : warning C4016: 'strcmp' : no function return type, using int as default
gch2.C(11) : warning C4071: 'strcmp' : no function prototype given
gch2.C(15) : warning C4016: 'getch' : no function return type, using int as default
gch2.C(15) : warning C4071: 'getch' : no function prototype given
gch2.C(18) : warning C4035: 'main' : no return value
290:デフォルトの名無しさん
09/03/10 17:33:23
初心者で、関数の勉強中です。
テキストがカーニハン&リッチーなんですけど、ここでのハロープログラムは
#include<stdio.h>
main()
{
printf("hello,world\n);
}
と、とてもシンプルなんですけど、ネットを見ると
#include <stdio.h>
int main(void)
{
printf("Hello, World!\n");
return 0;
}
になっています。要するに
#include <stdio.h>
int hello(void);
main()
{
hello();
}
int hello(void)
{
printf("Hello, World!\n");
return 0;
}
というのが合わさったものと考えていいのでしょうか?
今コンパイラがある環境のPCからじゃないので、
上のプログラムでコンパイルされるかすら分からないのですが・・・。
291: ◆XD9CNUCqag
09/03/10 17:36:06
>>288
全然理解仕切れていないのでもう少し文字列について辺りを勉強し直そうと
思います
atoi()は、使っていて自分には荷が重い関数かもしれないと思ったので
「strcmp()」を使うことにしました。
まだ「strcmp()」も勉強不足で理解していないのでそこも勉強し直しの
範囲に入りますが。
今回、漸く自分の勉強課題が見えてきたような気がします。
>>288さんの言葉を励みにして頑張りたいと思います。
292:デフォルトの名無しさん
09/03/10 17:54:12
C言語を始めようとかいうソフトでプログラミングしてコンパイルするじゃないですか
そして完成したファイルがコマンドプロンプトで実行されるんですけど
GUIってどうやって付けるんですかね、タダでやりたいんですけど
293:デフォルトの名無しさん
09/03/10 17:58:41
>>290
それでコンパイルは通る。けど、K&Rはそういう意図で書いてるわけではない。
本来mainの戻り値は必ずintなので、厳密に文法どおりなのはネットのほう。
(戻り値をintと明記し、引数をvoidと明示し、0を返す)
K&Rのほうは警告オプション付でコンパイルすると
「戻り値の型が書いてないから勝手にintにするぜ」とか
「returnがないぜ」とか警告が出るはず。
K&Rはおそらく「一番はじめの入門だから、できるだけ例は短いほうがいいに決まってる」
ぐらいの気持ちでそう書いたんじゃないのか。信者には別の言い分があるのかもしれんが
294:デフォルトの名無しさん
09/03/10 18:03:27
K&Rを最初の本として選択するのはやめれ。
あれは他の言語をばりばり使っている人のための
「C言語仕様確認書」みたいなものであって
戻り値も知らないような初心者には難しい。
295:デフォルトの名無しさん
09/03/10 18:08:12
一応、戻り値がないときはint, mainだけは戻り値を返さなくても良いと決まっていた…ような
だから、間違ってはないはず…
記憶が曖昧なんであまり当てにしないでくれ
不親切なのには同意するが
296:デフォルトの名無しさん
09/03/10 18:13:43
そうだよ。 main は戻り値を返さなくてもいい。
なぜなら main が戻す値をどう扱うかが環境依存なので。
297:デフォルトの名無しさん
09/03/10 18:14:42
#include <conio.h>
#include <stdio.h>
int main()
{
int turn, i, ch;
char pass[5];
for (turn = 0; turn < 3; turn++) {
printf("パスワードを入力してください>");
for (i = 0; i < 4; i++) {
ch = _getch();
if (ch == EOF) return 2;
printf("*");
pass[i] = ch;
}
printf("\n");
pass[i] = '\0';
if (strcmp(pass, "1994") == 0) {
printf("Ok\n");
return 0;
}
}
printf("NG\n");
return 1;
}
298:デフォルトの名無しさん
09/03/10 18:16:04
>>293-294
ありがとうございます。
学校で押し付けられたテキストがK&Rだったので・・・。
ネットを参考にしたら何か違うぞ?ってずっと思ってました。
main()は不可侵な関数だとてっきり・・・。
明日学校でガッツリと関数の勉強します。
K&R以外のテキストで・・・。
C言語って難しいっすね。
299:デフォルトの名無しさん
09/03/10 18:17:51
>>295-296
補足ありがとうございます。
戻り値とかもまだまだあやふやですが頑張ります。
300:デフォルトの名無しさん
09/03/10 18:18:56
大昔はK&Rが仕様だったらしいな(知らんけど
その後に仕様ができたんで、「K&Rが仕様どおりでない!」
ってのはある意味あってるけどお門違いかもしらん
301:デフォルトの名無しさん
09/03/10 18:25:18
K&Rが終わって 僕等は生れた
K&Rを知らずに 僕等は育った
プログラマになって 歩き始める
オブジェクト指向を くちずさみながら
僕等の名前を 覚えてほしい
K&Rを知らない 子供たちさ
302:デフォルトの名無しさん
09/03/10 18:37:04
int main(void)とかいちいちやるようなヤツのプログラムなぞその一行見ただけで他見る気なくす
303:デフォルトの名無しさん
09/03/10 18:41:13
それはない…
「いちいち」もなにもmainは一個しかないだろうが…
暗黙の宣言やらなんやらで警告出まくりなのに
コンパイル通ってるんだからよしとするヤツのほうがきついわ
304:デフォルトの名無しさん
09/03/10 18:43:17
int main ( void )
main()
void main()
int main()
305:デフォルトの名無しさん
09/03/10 18:45:43
この話題定期的に出るな。規格準拠スレでやれ。
306:デフォルトの名無しさん
09/03/10 18:47:08
ごめんなさい
307:デフォルトの名無しさん
09/03/10 18:59:46
石田晴久さん死去 インターネットの基礎築く
URLリンク(www.j-cast.com)
308:デフォルトの名無しさん
09/03/10 19:17:14
石田晴久といえばK&R
309:デフォルトの名無しさん
09/03/10 20:03:53
しつこいようだが、ANSI、ISO準拠の標準スタイルでは
main関数への引数がないのであれば、C言語では int main(void)
C++では int main() voidを書かなくて良いとのこと。
また、main関数はint型の戻り値とのこと。あくまでも準拠。
310:デフォルトの名無しさん
09/03/10 20:20:11
さらに、プログラムの開始はmain関数とのこと。その条件も含めて標準スタイルとのこと。
個人スタイルの押し付けをしていたら、キリがない。そこんと、よろしくー
311:デフォルトの名無しさん
09/03/11 09:26:13
ポインタ天国3を、ようやく私は理解することができた・・
312:デフォルトの名無しさん
09/03/11 10:46:43
main関数への引数を使う場合、int argc , char *argv[] というのも
ANSI、ISOでは標準スタイルとして提唱している。ただし、
main関数内でその変数を用いていない場合、警告が出るので
何事も必要に応じて適切に。以上。
313:デフォルトの名無しさん
09/03/11 11:40:53
>int argc , char *argv[]
めんどいからint ac,char *av[]って書いてる。
あとchar **argvって書くべきって意見も昔聞いた。
314:デフォルトの名無しさん
09/03/11 11:53:57
4文字省略すると面倒じゃなくなるのか
315:デフォルトの名無しさん
09/03/11 12:03:58
> char **argvって書くべきって意見
覚えてる限りでいいからkwsk
俺も最初は**で書いてたけど、
mainの中で結局
for (i = 0; i < argc; i++) {
argv[i];
}
とかして[i]でアクセスするから、
*argv[]のほうが素直だと今は思ってる。
316:デフォルトの名無しさん
09/03/11 12:09:28
どっちでも同じ意味だからどっちでもいいと思うが。
データが連続していることを連想しやすいように[]を使うと言う意見もあるが、
argvのようにポインタの指す先が連続していて更にその中身のポインタが連続していることを表現できるわけじゃないし。
>>315
例えばstrcpy()のような関数を自分で実装するとしたら
char * strcpy(char dest[], char const src[]);と書くの?
私は素直にchar * strcpy(char * dest, char const * src);と書くが。
317:デフォルトの名無しさん
09/03/11 12:30:38
> データが連続していることを連想しやすいように[]を使うと言う意見もあるが、
それはよくわからんが、
char *p;なら *(p + i)などという操作をイメージし、
char a[];なら a[i]という操作をイメージするという程度。
配列やポインタを渡す関数のパラメータは、
ポインタで統一して書いてる。
ポインタであるのに配列であるかのような書き方は嫌だ。
そういう意味では、mainのargvだけ特別扱いしてることになる。
同様の例でもmainじゃないとchar **ppとしてる。
mainのときは用途が>>315に書いたように定型化してるというか、
argcを参考にargv[i]とするのを尊重してやりたいというか。
318:デフォルトの名無しさん
09/03/11 12:35:50
>>317
よく判らんのだが、まさかとは思うが*(p + i)なんて本当に書くの?
argv[i]と書くのと同様に、件のstrcpy()の例ならsrc[index]という書き方になると思うのだけれど。
# 細かい言い訳は兎も角、main()だけは別扱いと言うことなら未だ理解できるが。
319:デフォルトの名無しさん
09/03/11 12:49:43
>>318
p[ i ]は *(p + i)のシンタックスシュガーだし
320:デフォルトの名無しさん
09/03/11 12:50:07
[i]でアクセスしたいってことは、
範囲がargcでわかってるからしたいこと。
そうでないときゃ、for (p = src; *p != '\0'; p++)としたりするでしょ。
あくまで[i]でやりたいならstrlenで一回文字列を調べてから、
for (i = 0; i < len; i++)とするでしょ。
上記のstrcpyだって、
char *strcpy(char *d, char *s) {
while ( *d++ = *s++);
return d;
}
ていうのもある。
長さを先に測りたい人は[i]すればよろし。
長さをパラメータで与えたい人は(int len)でも渡せばよろし。
ポインタでどうこうやるときは、つねに*(p + i)しなくたっていい。
321:なんだかなぁ……
09/03/11 12:53:46
>>320
いやだから、for (int index = 0; src[index] != '\0'; ++index)とは書かないの?
なんで? >319の事実があるのに? 某組み込み系のガイダンスだとポインタ演算禁止なのに?
長さを先に測りたいなら[i]ってどんな理屈? 長さを先に測ってから*(p + i)しちゃいけないの?
322:デフォルトの名無しさん
09/03/11 13:10:39
つーか、オプション指定を避けるのにargv++することだって普通にあると思うがな。
>321もいい加減構うのやめとけ。
323:デフォルトの名無しさん
09/03/11 13:24:42
好きにしろってことで終了
324:デフォルトの名無しさん
09/03/11 13:39:49
そうやって個々に任せた結果が使えないプログラマばかりが跋扈する現状というわけだが
325:デフォルトの名無しさん
09/03/11 13:41:36
そうやって自分のやり方をおしつけるから
326:デフォルトの名無しさん
09/03/11 13:59:10
「前の会社ではこうやってたの!!」
327:デフォルトの名無しさん
09/03/11 14:14:09
誰も>>320のstrcpyに突っ込まないのはなぜ?
328:デフォルトの名無しさん
09/03/11 15:00:16
スレチだから
329:デフォルトの名無しさん
09/03/11 15:23:08
いちようMSDNでは↓のようになっとるの
int main( );
または、次の引数も使えます。
int main( int argc[ , char *argv[ ] [, char *envp[ ] ] ] );
330:デフォルトの名無しさん
09/03/11 15:34:10
windowsでVisual Studio 2005を使用しています。
過去に作ったコンソールアプリケーションを編集しようと思ったのですが
不幸なことに.hファイルと.cppファイルを消してしまったために
編集ができない状態です。現状ではobjファイルが残っており、
デバッグコマンドなどでプログラムを動かすことはできるものの、
どうしても元のソースファイルを手に入れる必要があるのですが
objファイルからcppファイルに逆コンパイルする方法はありますでしょうか?
331:デフォルトの名無しさん
09/03/11 15:51:29
>>330
ありません。
332:デフォルトの名無しさん
09/03/11 15:55:41
大体どのコーディング標準でも
重要なのは一貫性を保つことであって、些細なことは個人の自由としている。
他人のコードに手を入れるときは、その人の流儀に従うべきで、
自分の宗教を持ち込んで後の読み手のリズムを狂わせてはいけない、とある。
333:デフォルトの名無しさん
09/03/11 16:26:23
>>330
objも消しちゃえば諦めがつくぞ
すっきりしてまた一から出直そう
334:デフォルトの名無しさん
09/03/11 16:31:44
逆アセならぬ逆コンパイラってないのかな。
objファイルはリンク前のコンパイル済みファイルなので
逆アセでもできそうな気がするけど。
335:デフォルトの名無しさん
09/03/11 16:39:07
>>331,333
どうしても諦めがつかなくてorz
>>334
確かに、逆コンパイルというと語弊があったかもしれません…
なんとか逆アセンブル出来ませんかね?orz
336:デフォルトの名無しさん
09/03/11 17:15:26
>>335
逆アセンブルならできるよ、まぁお前に読めるとは思えないけどさw
いっぱいあるから探してみなよ
確実に1から書き直したほうが早いだろうが
337:デフォルトの名無しさん
09/03/11 18:03:23
自分が書いたコードなら関数名見れば大体流れが読めるはずだしな
338:デフォルトの名無しさん
09/03/11 18:27:51
>>332
あまりに酷いコードの時はそうも言ってられないw
339:デフォルトの名無しさん
09/03/11 19:45:07
>>335
逆アセンブラならvisual studioについてるよ。
340:デフォルトの名無しさん
09/03/11 22:44:10
寧ろディスクから消したのが最近ならサルベージしてみてもいいかも。
案外、オートバックアップのサーバ上に残っていたりしてw
341:デフォルトの名無しさん
09/03/12 09:08:14
Linux環境においてLL言語、シェルスクリプトなどでちょっとしたことをするのには、適切と言われていますが
C言語では、そういったお手軽なライブリなどは、整備されていないのでしょうか?
LL言語、シェルスクリブトが適している分野をCで書くのは、どうなんでしょうか?
Cに偏った使い方をするなら、binコマンドなどのcoreutiltyのmanやソースを読んで、巧みに使うのがいいんでしょうか?
住めば都で慣れれば、C言語での保守も苦では、なくなるものなのでしょうか?
342:デフォルトの名無しさん
09/03/12 10:57:37
データのスムージングを行う処理を作りたいんですけど、
Savitzky-GolayアルゴリズムのCサンプルコードとかないですか?
343:デフォルトの名無しさん
09/03/12 12:19:52
>>342
NumericalRecipesにある。
URLリンク(www.nrbook.com)
尤も、これ見ただけで実装できるかどうかは知らんが。
344:デフォルトの名無しさん
09/03/12 14:11:05
初心者なのですが、ファイルからテキストを読み込んで一番大きい数字を発見したいです
43,2,21,23,みたいなテキストなのですが、質問があります
・テキスト中のスペースは無視されるのですか?
・メモリについてmallocとか全くわかってないのですが使わないとかなりヤバイですか?
345:デフォルトの名無しさん
09/03/12 14:29:37
>>344
・無視されるように読めば無視される。
Ex.:scanf()系, atoi()
・使わなくてもできなくはないが、どっちみちポインタの扱いには慣れが必要なので、そういう意味ではやばい。
つーか、課題か何かでなければ言語の選択の段階で間違っている。
346:デフォルトの名無しさん
09/03/12 14:33:55
実際はC#でするつもりなんですが何でするべきですか?CとC#しか知りません
347:デフォルトの名無しさん
09/03/12 14:45:09
C/C++は他の言語に比べて文字列解析が簡単ではない
C#なら正規表現が使えるからかなり楽になると思うが
一般にはこの手の作業にはスクリプト系の言語がより向いている
まあ、CとC#の選択なら、最初からC#のスレで聞いとけって話だ
348:デフォルトの名無しさん
09/03/12 14:46:58
すみません
Cでも正規表現使えると思ってますたw
ありがとうございました
349:デフォルトの名無しさん
09/03/12 14:55:57
>>348
Cの場合、C#みたいに標準で用意されていないの。
350:デフォルトの名無しさん
09/03/12 14:59:55
何かインクルードしたら使えるとか?
351:デフォルトの名無しさん
09/03/12 15:01:12
>>348
今できたけど…「 ./a.out < ファイル名 」で使ってみて
#include <stdio.h>
#include <ctype.h>
int main()
{
int c;
int max = 0, num = 0;
while((c = getchar()) != EOF){
if(isdigit(c)) num = num * 10 + c - '0';
else {
max = (num > max) ? num : max;
num = 0;
}
}
max = (num > max) ? num : max;
printf("max = %d\n", max);
return 0;
}
352:デフォルトの名無しさん
09/03/12 15:15:02
できればC#に組み込めるようにして頂きたい^^;
適当にコピペしたらインクルードやgetcharが使えなかった
353:デフォルトの名無しさん
09/03/12 15:25:25
ここはC/C++スレだ
移植は手前の仕事
354:デフォルトの名無しさん
09/03/12 15:28:52
フヒヒw
355:デフォルトの名無しさん
09/03/12 15:43:03
wwwwwwwwwwwwwww
356:デフォルトの名無しさん
09/03/12 15:46:18
サーセン
357:デフォルトの名無しさん
09/03/12 19:42:09
ソースコード書くなんて、下っ端の仕事
358:デフォルトの名無しさん
09/03/12 19:46:46
ソースも書けない糞上司
359:デフォルトの名無しさん
09/03/12 19:47:38
ソースしか書けない専門学校卒
360:デフォルトの名無しさん
09/03/12 19:51:35
ソースも書けない落ちこぼれに言われてもなー
361:デフォルトの名無しさん
09/03/12 19:59:11
高卒の叩き上げが最強ってことで、ゆるして
362:デフォルトの名無しさん
09/03/12 20:19:56
就職||卒業出来ないからって荒らすなよ。
>>342
numerical recipes in CやC++に載ってる。C++もベタに書いてあるので、
++の意味はほとんど無いw あとはqtiplotだっけ? originのfree implementationの
ソース読むとか、MSDNにも解説があるな。しかし簡単な式だから、すぐ作れるだろ
携帯からなので、PCでググればもっと探せそう。
363:デフォルトの名無しさん
09/03/13 13:46:55
>>362
>343
携帯だとすぐ下のレスも見られないのか?
つーか、元質はCだと書いているのさえ見えてないのか。
364:デフォルトの名無しさん
09/03/13 18:01:41
>>363
>>343はPCのFoxit readerでさえ読み込めないんだけど?
どうせ貼るなら、こっち貼れ
URLリンク(www.fizyka.umk.pl)
365:デフォルトの名無しさん
09/03/13 18:55:28
>>364
>Foxit readerでさえ
「でさえ」?
そりゃ Adobe Reader で読めなかったときに使う言葉だろ。
366:デフォルトの名無しさん
09/03/13 19:15:04
>>365
>>363は携帯で読めないのかって書いてるじゃん。
まあもちろん携帯のadobe readerでも読めない訳だが。
367:343
09/03/13 19:21:33
>>364
普通にIE+AcrobatReaderで見えるけど。怪しげなクローンより本家の方がいいと思ったんだけどな。
# そして私は>363ではない。
368:デフォルトの名無しさん
09/03/13 20:26:31
PCのAcrobat Readerでも開かない。
なんか、変なプラグイン入れろって出る。
IEからでも。
369:デフォルトの名無しさん
09/03/14 03:35:05
暗号化してあるみたいだね。headerがどうたらって出た
どうせnumeric recipiは信用できないからいいけど。
370:デフォルトの名無しさん
09/03/14 18:25:38
作ったソフトをオープンソースで公開しようかと考えているのですが、
ネット上のサンプルをコピペしたコードが多々あって、勝手にオープンソースにしていいのかわかりません。
ライセンス表記がされていないものも多いので確認のしようがないのです。
こういう場合でも勝手にBSDライセンスとか付けて配布してしまっていいのでしょうか?
出所はもちろん明記するつもりですが。
371:デフォルトの名無しさん
09/03/14 18:31:47
バレてトラブルになった時の対処ができるなら。
372:デフォルトの名無しさん
09/03/14 18:55:18
コピペでオープンソースですか、笑っちゃいます。
コードを書けないのなら無茶な事しない。
ネット公開されてれば、使ってよいの判断ですが、
それでも、自身でコードを書き直して公開するのが本当でしょう。
動けば良いだけのコードをオープンソースですか、違うでしょ
373:デフォルトの名無しさん
09/03/14 21:00:58
そうですよねぇ。
でも反面、せっかく既にあるコードまで自分で書き直さなきゃならないのか?とも思うのです。
しかもサンプルの書き方が一番スマートなのに、あえて別の書き方をするのも無意味に思えてなりません。
サンプルを利用して書くのは普通のことだと思いますが、皆どうしているのでしょうか。
とりあえず今回はクローズドでいきます。ありがとうございます。
374:デフォルトの名無しさん
09/03/14 21:54:26
>>370
もともとライセンス表記もせずパブリックドメイン同然で公開しているコードなら
コピペのままではなく、君がそのコードを理解して、作りなおせば問題ないだろ。
出所も明かす必要無し。
コードって作り直せないくらい長かったり何回だったりするの?
375:デフォルトの名無しさん
09/03/14 21:56:48
何回→難解
376:デフォルトの名無しさん
09/03/14 22:21:17
>>374
いや逆に、数十行程度のサンプルが多くて直しようがないんです。
そのまで洗練されているのでいじると無駄にこんがらがります。
変数名やカッコの書き方を変えるといったしみったれたことしかできず…。
377:デフォルトの名無しさん
09/03/14 22:40:02
モジュールを丸ごとじゃなくてサンプルコードか・・・
サンプルコードをかき集めた場合は、いろんな流儀で書かれているわけだから、自分の流儀に書き直したほうがメンテしやすくなるぞ。変数名や括弧を直すだけでも効果的だ。
そうすれば改良できるところが見えてくるぞ。
378:デフォルトの名無しさん
09/03/14 22:44:48
なるほど、書き方は自分流に統一した方がいいですね。ありがとうございます。
小さいところでも直していけばいいのですね。そういう方向でいってみます。
379:デフォルトの名無しさん
09/03/14 22:59:23
つーか、数十行程度ならサンプルを理解した上で、自分で書けばいいじゃん。
その程度だったら記憶を手繰りながら書けるべ。
380:デフォルトの名無しさん
09/03/14 23:05:01
その二度手間が無駄って話じゃねーの
381:デフォルトの名無しさん
09/03/14 23:07:19
Linuxなんかは、著作権回避のために書き直しとかしてるだろ?
382:デフォルトの名無しさん
09/03/14 23:09:05
コピペしただけでは解ったつもりで解ってないことがほとんど。自分の手でコードを書かないと理解できない。それは無駄ではない。
383:デフォルトの名無しさん
09/03/14 23:18:43
せっかく再利用を前提としてソースコードを書いても
ほとんど再利用されることはない
参考にすることはあっても
384:デフォルトの名無しさん
09/03/14 23:21:50
それは再利用性の設計が不十分なんだよ。
385:デフォルトの名無しさん
09/03/14 23:26:41
再利用されることが無いのに再利用性の設計なんてそもそも不要だし
386:デフォルトの名無しさん
09/03/14 23:35:47
再利用なんて、幻想だよ。
結局、作り直して使ってるだろ
387:デフォルトの名無しさん
09/03/15 00:52:54
再利用性なんて、無駄なコード入れて行数増やすための方便になってるからなあ
388:デフォルトの名無しさん
09/03/15 01:06:40
まだ行数とか言ってんのかこの業界は
389:デフォルトの名無しさん
09/03/15 01:16:57
リファクタリングしたら負けかなと思ってる
390:デフォルトの名無しさん
09/03/15 02:17:37
わかりやすいコード記述を心掛け且つ
流用者が理解するのを諦める難解な操作を
程よく織り込むのがプロの仕事だ
391:デフォルトの名無しさん
09/03/15 02:30:08
チンケなプロだなぁ
392:デフォルトの名無しさん
09/03/15 08:58:28
自分で恰好良く書いたつもりが
「何それ?だっせーソース」
とか笑われたことがあるんだろ
393:デフォルトの名無しさん
09/03/15 11:41:41
libファイル配布
394:デフォルトの名無しさん
09/03/16 14:12:14
あるテーブルより、KOJIN_ID(数値型8桁)を一旦ホスト変数H_KOJIN_IDに入れ
それを11桁の文字型として出力しなければいけないのですが(余った桁はスペースで埋める)
下記のようにsprintf関数を使ってH_KOJIN_IDから、ファイル書き出し用構造体outの項目KOJIN_IDに
セットするときに、現状のままだと余った桁に0が入ってしまいます。
データセット部
sprintf(out.KOJIN_ID,"%11.11ld",H_KOJIN_ID);
余った桁に半角スペースが入るようなsprintf指定方法はありませんか?
395:デフォルトの名無しさん
09/03/16 14:24:22
"%11d"
396:デフォルトの名無しさん
09/03/16 14:43:45
%11dで試しましたが0で埋められてしまいます。
397:デフォルトの名無しさん
09/03/16 14:46:47
失礼しました!
間違えて%11.11dで試しましたが、%11dだけにしたら
できました。
ありがとうございました。
398:デフォルトの名無しさん
09/03/16 14:51:24
>>394
マルチすんなゴミ
399:デフォルトの名無しさん
09/03/17 00:50:51
C++の書籍を買おうと思っているのですが、大体何円くらいなんでしょうか?
教えてください
400:デフォルトの名無しさん
09/03/17 00:55:30
そんくらいamazonで調べろよ
401:デフォルトの名無しさん
09/03/17 00:56:09
Cの書籍は何円ぐらいしたよ?
だいたい相場はかわらんさ
402:デフォルトの名無しさん
09/03/17 01:00:51
>>399
1800-4500円
403:デフォルトの名無しさん
09/03/17 02:17:46
>402
ただし、○冊セットの中の1冊のお値段、というオチが付くことも多そう。
404:デフォルトの名無しさん
09/03/17 02:49:33
C++のセット本なんかあったか? 見た事無いが
>>403不味い本買ってんじゃねぇか?
405:デフォルトの名無しさん
09/03/17 03:12:49
週刊C++、創刊号は980円
406:デフォルトの名無しさん
09/03/17 03:32:14
それを言うなら、創刊号1800円で、二号から4500円だろ…
407:デフォルトの名無しさん
09/03/17 04:00:40
3号は9450円か?
408:デフォルトの名無しさん
09/03/17 06:25:56
まず創刊号の付録を教えてくれ
409:デフォルトの名無しさん
09/03/17 06:27:57
VC++EEとGCCの豪華セット
410:デフォルトの名無しさん
09/03/17 06:30:29
↑エラー起きた場所が分かりやすいように、AAに変換してしくれる機能搭載
411:403
09/03/17 10:03:10
>404
あー、C++であったかどうかは分かんない。
でもVC++とかだと何シリーズか見かけた気がする。
412:デフォルトの名無しさん
09/03/17 16:30:39
毎週付録のモジュールをリンクしていくことでオリジナルIDEが完成
413:デフォルトの名無しさん
09/03/17 18:27:14
//////////////////////////////// a.h
template<typename T>
class test {
public:
test();
void _inc(T n);
void _dec(T n);
private:
T m_n;
};
//////////////////////////////// a.cpp
#include "a.h"
template<typename T>
test<T>::test() : m_n(0) { }
template<typename T>
void test<T>::_inc(T n){ return m_n++; }
template<typename T>
void test<T>::_dec(T n){ return m_n--; }
test<int> aaa;
414:デフォルトの名無しさん
09/03/17 18:28:32
//////////////////////////////// main.cpp
extern test<int> aaa;
#include <stdio.h>
#include "a.h"
void main(void){
aaa._dec(1);
}
externで宣言してるのにリンク時に未解決になります。
どこに誤りがあるのでしょうか?
415:デフォルトの名無しさん
09/03/17 18:32:13
テンプレートは実装もヘッダに入れろ
そういうもんだと思っておけばいい
詳しく知りたければ export キーワードあたりで自分で調べな
416:デフォルトの名無しさん
09/03/17 18:40:22
>>415
ありがとうございます
無事解決しました
417:デフォルトの名無しさん
09/03/17 18:50:20
なんでexportなんてキーワードがワザワザ必要な文法になったの?
なにもつけなくても実装が別ファイルにあるなら、それはそれで問題ないのじゃね?
418:デフォルトの名無しさん
09/03/17 18:55:14
>>417
宣言が必要なのよ。
419:デフォルトの名無しさん
09/03/17 19:09:02
この場合、明示的にインスタンス生成すれば済む気が。
420:デフォルトの名無しさん
09/03/17 19:15:11
C++0x に期待。
421:デフォルトの名無しさん
09/03/17 19:30:18
C++0a
422:デフォルトの名無しさん
09/03/17 19:32:53
>421
ありそうで困る
423:デフォルトの名無しさん
09/03/17 19:33:38
実装部分が別ファイルだと、コンパイル時にTが実際になんなのか分からないから、
実装部分は、コンパイルできなくない?リンク時に、改めてコンパイルし直すのか?
exportって、どう言う仕組みで実現してるの?
424:デフォルトの名無しさん
09/03/17 19:35:55
16進にすると許容範囲内に見えるから怖い
425:デフォルトの名無しさん
09/03/17 19:36:16
>>423
> リンク時に、改めてコンパイルし直すのか?
そういうこと。
それやってというお願いするキーワードがexport。
まあg++とかVC++とかの有名どこが無視しているから、事実上死に設定だけど。
426:デフォルトの名無しさん
09/03/17 23:54:31
>>421
2010年になると言うことかw
427:デフォルトの名無しさん
09/03/17 23:56:03
>>413-414
explicit instantiationを知らないなら
テンプレート関数の明示的インスタンス生成 - akihiko’s tech note
URLリンク(d.hatena.ne.jp)
ここが分かりやすいよ。必読。
428:デフォルトの名無しさん
09/03/18 00:53:11
>>421
C++0xa
429:デフォルトの名無しさん
09/03/18 07:15:29
記述場所が関数内かグローバルか判るコンパイル定数無い?
GCC 3 で
430:デフォルトの名無しさん
09/03/18 07:53:28
URLリンク(seclan.dll.jp)
前定義識別名 __func__
431:!=429
09/03/18 14:53:38
>>430
へー
そりゃ知らんかったな
432:デフォルトの名無しさん
09/03/18 17:00:28
VS2008 C++について質問です。
構造体の配列に文字を格納したところ、デバッグでみると
その場所+4つ先に格納されているのですがどういったことなのでしょうか。
以下は新規にプロジェクトを作成し、構造体とそれに代入しただけのソースの一部です。
struct TEST{
char testes[10];
};
struct TEST ttt;
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
ttt.testes[0]='A';
// コントロールが作成される前に、Windows XP ビジュアル効果を有効にします
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
// メイン ウィンドウを作成して、実行します
Application::Run(gcnew Form1());
return 0;
}
上記の例だと[0]にAが入るはずなのですが、ブレークポイントを
置いて、デバッグでみると[4]にAが入っているように見えます。
実際は[0]にAが入っているので、動作については問題なかったです。
433:デフォルトの名無しさん
09/03/18 17:44:58
まさかとは思うが、リリースビルドでデバッグしているとか、デバッグビルドに最適化を指定しているとか、
リビルドしてみてないとか言わないよな。
434:デフォルトの名無しさん
09/03/18 18:07:27
>>432
C++とC++/.CLIは名前が似てるだけで別言語。
435:デフォルトの名無しさん
09/03/18 18:16:53
>>434
でも質問の内容自体はVisual C++固有のことだから、
もし誘導するとしたら、Visual C++かVisual Studioスレがふさわしいと思う。
436:デフォルトの名無しさん
09/03/18 18:32:57
>>430
ありがとう。
でも、コンパイル"後"定数に成るみたいで微妙に目的と合致しませんでした。
437:デフォルトの名無しさん
09/03/19 20:04:24
BorlandC++Builderで以下のCプログラムを記述したところ
式の構文エラー(関数 main )と出ます。
#include<stdio.h>
int main(void)
{
int english;
printf("点数を入力してください\n");
scanf("%d",&english);
printf("英語 %d点\n",english);
if(english=>80)
{
printf("良くできました!");
}
return 0;
}
if文を用いる場合は必ずelseでそれ以外の時の処理を書かなければならないのでしょうか?
438:デフォルトの名無しさん
09/03/19 20:07:10
>=
439:デフォルトの名無しさん
09/03/19 23:37:58
BASICでは>=でも=>でもOKだから、間違えちゃう人多いのかも。
他にも==を=と間違えたりべき乗に^を使っちゃったり。
BASICを習得してるといろいろ困るよねオマンコ
440:デフォルトの名無しさん
09/03/20 00:15:49
>>438
数学では
>=は
大なりイコール
って発音するじゃん。それで覚えれば大丈夫。
441:デフォルトの名無しさん
09/03/20 00:19:51
べき乗に^使ってしばらく悩む事あるな
powとかすぐ出てこねーよw
442:デフォルトの名無しさん
09/03/20 00:22:17
/= を否定と間違えて使いそうになったりね
443:デフォルトの名無しさん
09/03/20 00:27:05
>>441-442
プログラムしばらくやってるやつは、悩むところじゃないだろ。
プログアム初心者は、悩む以前に分からない部分調べるか、誰かに聞くだろ。
444:デフォルトの名無しさん
09/03/20 01:56:47
>プログアム初心者は、悩む以前に分からない部分調べるか、誰かに聞くだろ。
そして>437にループ
445:デフォルトの名無しさん
09/03/20 09:19:46
PHPでは=>は矢印
446:デフォルトの名無しさん
09/03/20 17:37:43
>>440
数学に、そんな記号ない。縦に並べたのなら知ってる
447:デフォルトの名無しさん
09/03/20 17:41:56
じゃあやりなおし
数学では
≧は
大なりイコール
って発音するじゃん。それで覚えれば大丈夫。
448:デフォルトの名無しさん
09/03/20 17:50:53
そもそも数学で子供の頃から慣れ親しんだ記号と
似ているようで違う表記をするために間違えるのだから、
それは意味ないのじゃね?
449:デフォルトの名無しさん
09/03/20 17:58:50
声に出して確認しろってことだろ
450:デフォルトの名無しさん
09/03/20 18:03:35
自分は>=と打つときに、心の中で「大なりイコール」と諳んじてるから
まず間違えないな
451:デフォルトの名無しさん
09/03/20 18:10:04
俺もBASIC出身だから=>やったことあるわw
452:デフォルトの名無しさん
09/03/20 18:22:15
BASICやった後、Cに戻った直後は
==と書くべきところを=にして悩む
少しリハビリすると大丈夫だけど
453:デフォルトの名無しさん
09/03/20 18:44:24
というか、≧ を口に出して読んだ記憶がないな
だから「大なりイコールって考えればわかりやすいでしょ」といわれても
頭の中でもそんな風に考えたことないし・・って感じ
454:デフォルトの名無しさん
09/03/20 19:09:25
>>453は≧を大なりイコールって読むことを知らなかったってことか?
そりゃ問題だな。
455:デフォルトの名無しさん
09/03/20 19:21:11
greater or equal って読んでてごめんね
456:デフォルトの名無しさん
09/03/20 19:23:40
greater than or equal to と言うのが正しい
457:デフォルトの名無しさん
09/03/20 19:26:30
JISとかで読み方決まってないのかのう
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5383日前に更新/124 KB
担当:undef