07/05/09 02:47:13
テンプレート使ってやってみました
漏れの知識の程度じゃ読みにくくなるだけしたまる
#include <stdio.h>
#include <numeric>
#define ARRAY_SIZE(X) (sizeof(X)/(sizeof(X[0])))
#define INNER_PRODUCT(x,y) ( g( (x),(y), ( f((x),(y)) ) ) )
template <class T> size_t f(const T& a, const T& b) {
size_t len=0;
len = (ARRAY_SIZE(a));
if (len != ARRAY_SIZE(b)) {
puts("can not define inner product of these vectors");
return -1;
}
else
return len;
}
float g(const float a[], const float b[], size_t len) {
if (len == -1)
return 0;
float ip(0);
for (size_t i = 0; i <len; ++i)
ip += a[i]*b[i];
return ip;
}
int main (void){
float v1[3]={1.3f,0,1}; float v2[3]={2,3,4};
printf("out of function: %d,%d\n", sizeof(v1), sizeof(v1[0]));
printf("%f\n", INNER_PRODUCT(v1,v2) ) ;
return 0;
}
72:デフォルトの名無しさん
07/05/09 02:48:49
float なんて精度悪いもの使うなよ。
double 使え、double 。
73:デフォルトの名無しさん
07/05/09 07:18:26
>>71
訳の分からん自作マクロ使って可読性落とすぐらいなら
上で書かれてるように、Vector型とstd::inner_product()使えばいいだろ
なんのための標準ライブラリだと思ってるんだ
74:デフォルトの名無しさん
07/05/09 08:02:10
先にJavaを試してみたら?
正直、Ruby→C はキツいだろ
75:デフォルトの名無しさん
07/05/09 08:12:31
どう見てもこちらのほうが楽です、本当にありがとうございました
ってかこれってC?
#include <vector>
#include <numeric>
#include <iostream>
int main() {
using std::vector;
using std::inner_product;
using std::cout;
// float v1[3]={1.3,0,1}; float v2[3]={2,3,4};
vector<double> v1, v2;
v1.push_back(1.3); v1.push_back(0); v1.push_back(1);
v2.push_back(2); v2.push_back(3); v2.push_back(4);
double ip = inner_product(v1.begin(), v1.end(), v2.begin(), 0.0);
cout << "inner product:" << ip;
return 0;
}
76:デフォルトの名無しさん
07/05/09 08:17:36
namespaceとかClassはC++の仕様ですよね?
Classがあるなら使いますよ。
でもね、C言語じゃないといけないんです。linuxのデフォだからね。
Cを勉強するのは計算が早いからとrubyのライブラリが作りたいから。
あとlinuxプログラミングがしたいから。
77:デフォルトの名無しさん
07/05/09 08:19:29
CがLinuxのデフォってあんた……
それならC++でもいいでしょうが。
78:デフォルトの名無しさん
07/05/09 08:47:03
確定したライブラリがない。
C++はもう終わった言語。手続き型にクラスをくっつけただけの言語でしょ。
純粋なrubyこそソフト開発に向いてるが、やはり速度がネック
79:デフォルトの名無しさん
07/05/09 09:03:56
m9(^д^)プギャー!!
80:デフォルトの名無しさん
07/05/09 10:04:47
勘違いや思い込みが激しいな
こんな奴rubyもたいしてできんだろ
81:デフォルトの名無しさん
07/05/09 11:35:39
ディレクトリ名をジャスティスに変えるとすべてが上手くいく
82:デフォルトの名無しさん
07/05/09 13:37:48
sizeof自体がどうなってるか分かりませんか?
あとC言語って自由に配列数を増やしたり減らしたり出来ない?
出来たらうれしい
83:デフォルトの名無しさん
07/05/09 13:45:54
rubyじゃないんだから・・・
84:デフォルトの名無しさん
07/05/09 13:59:39
>>82
sizeofは、コンパイル時にコンパイラが計算する。
配列要素数の増減はできないので、realloc()したりC++のvectorを使っ
たり。
85:デフォルトの名無しさん
07/05/09 14:11:39
reallocというのは確保領域を変えるってことですか?
それなら手間が増えるだけで増減可能ですね。
sizeofはライブラリではないんですか?
sizeofはどうやって書かれているかを聞いています。
86:デフォルトの名無しさん
07/05/09 14:13:08
C++は使わないことにしています。
なぜならC++はC言語の拡張とはいえないからです。
オブジェクト指向としてはrubyがもっとも純粋であることは確かですし
Cとの互換性が消えたので、linuxで使えません
87:デフォルトの名無しさん
07/05/09 14:28:35
オブジェクト指向としての純粋性を追求する事に何の意味が?
Cとの互換性が不完全でもLinuxでC++は使えるが?
88:デフォルトの名無しさん
07/05/09 14:32:47
>>85
sizeof はコンパイラが解釈する演算子の内のひとつです。関数ではありません。
89:デフォルトの名無しさん
07/05/09 14:33:51
システムはCで書かれている。
C++では書かれていない。これは互換性が消えたことによるものである。
linuxといえばC言語
C++は窓用言語
rubyはクロスプラットフォームの純粋オブジェクト指向型言語
90:デフォルトの名無しさん
07/05/09 14:45:57
つまりLinuxのシステムだけを書くためにCを勉強中って事?
91:デフォルトの名無しさん
07/05/09 14:49:08
>>85
reallocはただの動的確保で配列関係ないから
配列の要素数増減は不可でFA
92:デフォルトの名無しさん
07/05/09 14:52:21
rubyではどうやって配列の要素数増減ができると見せかけられたかを考えてみるといいよ。
93:デフォルトの名無しさん
07/05/09 15:44:37
どうせRubyの事も大して分かってないんだろうな
94:デフォルトの名無しさん
07/05/09 16:05:07
それは俺も思った
95:デフォルトの名無しさん
07/05/09 16:06:07
突っ込みどころがあり過ぎるが、たぶん釣りだからガマン。
うちの会社に来ないことを祈る。
96:デフォルトの名無しさん
07/05/09 18:09:22
>>91
メモリ確保した所を配列として扱うなら可能だと思うが。
97:デフォルトの名無しさん
07/05/09 18:52:22
高級言語から入るとこれだからいかんな。
アセンブリ言語の洗礼を受けてくるといい。
98:デフォルトの名無しさん
07/05/09 18:59:53
>>97
すいません。8080, Z80, 6502, 6800, 68000 ぐらいまでしかやってません。
この頃の x86 系についてはよく分かりません。
99:デフォルトの名無しさん
07/05/09 19:00:42
釣り来た
100:デフォルトの名無しさん
07/05/09 19:26:05
rubyはかなり分かってます。
linuxの為にCを勉強しています。当然です。ちなみにVine
101:デフォルトの名無しさん
07/05/09 19:27:04
釣りくせー
102:デフォルトの名無しさん
07/05/09 19:29:37
「かなり分かっています」 と自信を持って言う奴の 99% は、大して分かっていない。
なぜなら、言語の奥深さを知ってる者は、おいそれとそんな事は言えないからだ。
ほんの一握りのエキスパートか、Ruby 処理系の開発者か、
そうでなければ見栄っ張りの小物にしかそんな事は言えん。
103:デフォルトの名無しさん
07/05/09 19:48:15
というかこういうやつほどコテつけて欲しいな
ただの騙りの可能性も否定できないし
もしすべて本人だったらかなり・・・
104:デフォルトの名無しさん
07/05/09 20:05:58
Linux上で動くアプリケーションを作りたいだけなら、g++使えばいいだろうし、
Linuxのメジャーなディストリビュージョンなら、
g++がない(gccや下手したらccだけしかない)なんて状況を仮定する必要なんてないはず。
また、完全な互換性がない今のC++でも、それなりにCらしいコードも書けるし。
このスレで出てくるようなコードなら、ほとんどvoid*周りしか問題にならないと思う。
105:デフォルトの名無しさん
07/05/09 20:30:07
なんか勘違いしている香具師が多いようだが、Cでも可変長配列はあるぞ。
それから、malloc()などで確保した領域を配列のように運用することはできてもそれは配列じゃないぞ。
#まぁ、可変長配列も伸び縮みできるわけじゃないがな。
106:デフォルトの名無しさん
07/05/09 20:32:41
C99 なんてあってないような規格で語られてもな。
107:デフォルトの名無しさん
07/05/09 20:33:53
意味わからん
108:デフォルトの名無しさん
07/05/09 20:38:23
>>106
身近なところではgcc, icc, SunのccがC99準拠なんだが。
後二者はデフォルトだし。
109:デフォルトの名無しさん
07/05/09 20:39:02
しかし、ほとんど使われていないのもまた事実。
110:デフォルトの名無しさん
07/05/09 20:40:00
自分が使えないからといって、無闇に否定するのは如何な最中と。
111:デフォルトの名無しさん
07/05/09 20:40:08
お前が使ったこと無いだけ
112:デフォルトの名無しさん
07/05/09 20:42:20
>>105
どうやるんですか?可変長配列
113:デフォルトの名無しさん
07/05/09 20:42:49
VC が準拠しない限り、使用人口は増えない。
114:デフォルトの名無しさん
07/05/09 20:43:57
C99がOKでC++駄目ってのがよくわからん
115:デフォルトの名無しさん
07/05/09 20:43:59
>>112
URLリンク(seclan.dll.jp)
つーか、なんで「C99」ってキーワードまで書かれてるのに
自分で調べようとしないんだろうな
116:デフォルトの名無しさん
07/05/09 20:46:11
使った事ないんじゃなくて、使う気がしないだけ。
117:デフォルトの名無しさん
07/05/09 21:24:47
#include <stdio.h>
int main (void){
int a[3]={1,2,3};
a[3] = 4;
printf("%d\n", sizeof(a)/sizeof(a[0]));
printf("%d\n", a[3]);
return 0;
}
どうしてだお?
118:デフォルトの名無しさん
07/05/09 21:27:47
>>117
printf("%d\n", a[3]); // Access Violation
119:デフォルトの名無しさん
07/05/09 21:28:22
でないお
gccだけど
120:デフォルトの名無しさん
07/05/09 21:29:30
どっちかっつーとこっちのがヤバい。
a[3] = 4;
121:デフォルトの名無しさん
07/05/09 21:30:05
size is 3
a[3] is 4
こうなったお
122:デフォルトの名無しさん
07/05/09 21:30:16
a[0] = 1;
a[1] = 2;
a[2] = 3]
a[3] = ?
123:デフォルトの名無しさん
07/05/09 21:30:19
どうしてって何が?
124:デフォルトの名無しさん
07/05/09 21:31:27
不変な表明ってこういうときに役に立つの?
125:デフォルトの名無しさん
07/05/09 21:37:05
Cに不変表明なんかないだろ。
126:デフォルトの名無しさん
07/05/10 00:32:21
assertがそれにあたるんじゃ
127:デフォルトの名無しさん
07/05/10 00:37:21
>>117のなんて、そもそもインデックスと要素数の関係自体理解できてないんだから
assertとかそういう次元の問題じゃないだろ
あれは何かの拍子で変な値がインデックス用の変数に入り込んだりするのを発見するため
128:31
07/05/10 02:07:35
>>32
それはわかるんだけど、それから先が全くわからなくて・・・
というかまず何を書けばいいのかもわからない・・・ド素人でスマン。
助けて・・・
129:デフォルトの名無しさん
07/05/10 02:09:41
きもちわる・・・
130:デフォルトの名無しさん
07/05/10 02:23:34
webマトリックスてなんすか?
とりあえずGET,POSTとだけ言ってこ
131:デフォルトの名無しさん
07/05/10 09:18:45
アク禁
132:デフォルトの名無しさん
07/05/10 14:51:22
>>117
もしや a[3] = 4; の所で何かエラーが出て欲しかったのか?
ま、しかし、C言語は元々そんな生易しい言語ではないのだよ。
133:デフォルトの名無しさん
07/05/10 15:03:16
だろうな
しかしなんでコンパイラ通っちゃうのかよくわからん
134:デフォルトの名無しさん
07/05/10 15:04:13
そういうのでもコンパイルを通すように作られてるから
135:デフォルトの名無しさん
07/05/10 15:06:30
文法的には正しいから
136:デフォルトの名無しさん
07/05/10 15:13:46
>>117
JavaとかC#とかしかやったことが無い人?
137:デフォルトの名無しさん
07/05/10 15:19:34
>>133
エラー出すようにするとコンパイラ作るのが面倒だろ
138:デフォルトの名無しさん
07/05/10 15:24:15
なるほどw
先頭要素のポインタさえありゃ動くからあとはシラネってことか
139:デフォルトの名無しさん
07/05/10 15:59:43
仕様通り
140:デフォルトの名無しさん
07/05/10 15:59:53
indexに変数が入ってる場合に、その変数が取り得る値をチェックするには実行してみないと
わからないんじゃ?
141:デフォルトの名無しさん
07/05/10 16:01:47
これを応用(悪用?)した技もあったしな
構造体の最後の要素を [1] にして、使いたい配列の大きさ分大きめにallocして使う
いつからか 1 無くてもコンパイル通るようになってたっけな
142:デフォルトの名無しさん
07/05/10 16:18:20
JavaとかC#の配列だと境界チェックしてるから範囲外なら例外が投げられるけどCではそういうのが無いからね。
C#はLengthプロパティ使ってループ回す場合はチェックはオフになったり
monoのC#コンパイラには配列境界チェックをしないようにするオプションがあったりするけど
Cは常にチェック無し。
まぁチェックがある分安全で遅いか、無い分危険で速いかだな。Cは後者。
143:デフォルトの名無しさん
07/05/10 16:48:32
switchが上手く動作しないのですけれど、何処が可笑しいのか教えて下さい
/*
もし小文字なら大文字を、大文字なら小文字を出力し
エラーの後に再入力可否選択を要求する
*/
#include <stdio.h>
#include <ctype.h> // islowerやtoupperなどが含まれる
main () {
char text;
first:
printf ("アルファベットを入力して下さい\n");
text = getchar ();
// 大文字変換処理
if (islower(text)) { // islower = 小文字であるかを判定
text = toupper (text); // toupper = 大文字変換
printf ("入力されたアルファベットの大文字は %c です。"
,text);
} else if (isupper(text)) { // isupper = 大文字であるかを判定
144: ◆awSK7mC37A
07/05/10 16:49:33
// 小文字変換処理
text = tolower (text); // tolower = 小文字変換
printf ("入力されたアルファベットの小文字は %c です。"
,text);
} else {
// エラー処理
printf ("エラー\n"
"アルファベット以外の値が入力されました。"
"\n"
"継続して入力しますか?\n"
"Y/N");
text = getchar ();
145:デフォルトの名無しさん
07/05/10 16:50:09
switch (text) {
/*
switchが何故か機能しない
書式ミス?
*/
case 'Y': goto first;
break;
case 'N': goto end;
break;
}
}
end:
return 0;
}
>>144の名前は気にしないでください。。
146:デフォルトの名無しさん
07/05/10 16:59:12
switchの式って整数型に限られるんじゃ無かったっけ?
147:デフォルトの名無しさん
07/05/10 17:00:40
textはどう見ても整数型だろ
148:デフォルトの名無しさん
07/05/10 17:00:50
いや、別にこれでいいけど、2回目のgetchar() では最初のgetchar()時に
入力した2文字目を取ってきてるからこうなる。
具体的には改行だな。それ以外でも2つ以上入れてりゃ同じだ
149:デフォルトの名無しさん
07/05/10 17:51:56
alphabet以外の文字、たとえば 1 を入力してテストしてみると
swtich文に入って行かない。きっと1の後ろに"\0"とかあって
うまくゆかないのだろう。
text = getchar (); // ここで "\0" を喰わせる
text = getchar (); // きっと入力待ち状態になるはず
とか思ってしまったトーシローなのは俺だけでいいと思うんだ…orz
150:デフォルトの名無しさん
07/05/10 18:18:00
わざわざそんなこと書かなくてもいいよ
151:デフォルトの名無しさん
07/05/10 18:25:13
>>148
つまりどういうことですか?
152:デフォルトの名無しさん
07/05/10 18:36:47
>>151
つまり、余分な入力バッファはクリアする必要がある。
getchar() なら、'\n' が来るまで読み捨てるとか。
while (getchar() != '\n')
;
例えばこんな感じで。 fflush(stdin); は物議をかもしそうなのでお試しでw
あとは、switch - case にdefault: は必要だと思うぞ、特に今回のは。
153:デフォルトの名無しさん
07/05/10 19:35:06
>>151
scanf(" %c", ...) を使う。
154:デフォルトの名無しさん
07/05/10 19:38:20
goto の使い所がダメな感じするな。
goto 使って見辛くしてどうする。
お前は昔の BASIC かと言いたい。
155:デフォルトの名無しさん
07/05/10 19:48:39
どうでもいいけどgotoつかったらbreak;いらなくね?
156:デフォルトの名無しさん
07/05/10 19:55:41
いらないが付けるクセはつけといてもいいかも
あとそれ以前に慣れないうちはdefault付けるクセをつけといたほうがいいと思う
157:デフォルトの名無しさん
07/05/10 21:41:52
ANSI-Cを勉強してまだ日も浅いのですが
四則計算の 23 / 3 =7 アマリ 1
という風にアマリを出すにはどのようにすればいいのでしょうか?
158:デフォルトの名無しさん
07/05/10 21:42:09
mod
159:デフォルトの名無しさん
07/05/10 21:42:37
普通に%じゃあかんのか?
160:デフォルトの名無しさん
07/05/10 21:42:46
%dane
161:デフォルトの名無しさん
07/05/10 21:43:44
%d姉
162:デフォルトの名無しさん
07/05/10 21:46:32
~~省略~~
int a,b,c;
scanf("%d",&a);
scanf("%d",&b);
c= a % b ;
printf("%d % %d =%d\n",a,b,c);
return 0;
でいいのでしょうか?
163:デフォルトの名無しさん
07/05/10 21:47:58
だめ
164:デフォルトの名無しさん
07/05/10 21:48:10
> printf("%d % %d =%d\n",a,b,c);
printf("%d %% %d =%d\n",a,b,c);
165:デフォルトの名無しさん
07/05/10 21:51:08
あとbが0かどうかもチェックしたほうがいいな。
166:デフォルトの名無しさん
07/05/10 21:51:31
>>162
bが0の場合どうするんだ?
167:デフォルトの名無しさん
07/05/10 21:53:19
分岐か何かが必要なんですね、if 0~~とかそういう感じなんでしょうか
168:デフォルトの名無しさん
07/05/10 21:58:04
聞く前にとりあえずコード書いてコンパイルしてみろ。
169:デフォルトの名無しさん
07/05/10 22:05:35
if (*s && isalpha(*s)) {...}
が LinuxとSolarisで動作が違うのでgcc -Eで確認したらSolatisではisalpha(c)が
((__ctype+1)[c] & (0x01 | 0x02)) に展開されててLinuxではライブラリ関数呼んでました。
動作が違ったのは*sが負数になってたせいのようでした。(なぜ負のインデックスで__ctype配列
参照してcore吐かなかったか不思議ですが...)*sに入る整数値がなんでもありと
すると、ここは普通どう書きますか?
if (isascii(*s) && isalpha(*s)){...}
とかすればOK?
170:デフォルトの名無しさん
07/05/10 22:11:18
>>164
%% って \n とかのエスケープシーケンスと同じものと考えておkですか?
171:デフォルトの名無しさん
07/05/10 22:12:19
>>170
エスケープシーケンスで例えるなら \\ やね。
172:デフォルトの名無しさん
07/05/10 22:13:43
>>169
is系関数に渡すときは unsigned char でキャストするのは定石。
もう多すぎて面倒なら、char を符号無しにするコンパイラのフラグを指定汁。
173:デフォルトの名無しさん
07/05/10 22:29:09
UNIX環境でCを書いています。
FILE *fp
fp = popen("gnuplot", "w");
fprintf(fp, "plot sin(x) w lines \n");
pclose(fp);
としてgnuplotを呼び出すプログラムを作りました。
今の状態では、gnuplotが立ち上がってsin(x)の関数が一瞬だけ表示され、
gnuplotが直ちに終了してしまいます。
どこにどのような処理をすれば、gnuplotを表示させたままに出来るのでしょうか?
Enterキーなどを押すことで終了するようにしたいです。
よろしくおねがいします。
174:デフォルトの名無しさん
07/05/10 22:32:14
>>172
それだけだとSJIS の時は、
全角文字の2バイト目で真になる可能性があるな。
リードバイトの判定とかした方がいい。
>>169 は EUC みたいだから大丈夫だとは思うが。
175:デフォルトの名無しさん
07/05/10 22:48:20
>>173
system("gnuplot < data.txt");
とかじゃだめかな?
data.txtはあらかじめ作っておく。
176:デフォルトの名無しさん
07/05/10 22:49:27
>>172,174
ありがとうございます。m(_;_)m
>is系関数に渡すときは unsigned char でキャストするのは定石。
助かります。
177:デフォルトの名無しさん
07/05/10 23:27:12
>>173
とりあえず表示を残すだけなら "gnuplot -persist" とすれば良いけど、
グラフを表示しているプロセス(gnuplot_x11)のIDを
外部プログラムを使わずに見付けて殺す方法が分からん。
178:デフォルトの名無しさん
07/05/10 23:50:48
system("gnuplot ... &")ではダメ?
真面目にプロセス管理したいならfork()/exec*()を使う羽目になるけど。
179:デフォルトの名無しさん
07/05/11 06:20:36
初歩的な質問ですがお願いします。
strlenなどの文字列を扱う関数は引数としてchar型の文字列への先頭ポインタをとります。
つまり、strlen(s)とすると配列sの先頭アドレスが渡され、結果が返ります。
しかし、strlen("test")とした際も結果は出力されます。
この"test"という文字列はどのようにプログラム内部で扱われるのでしょうか?
自動的に一時的にメモリに確保されるのでしょうか?
では宜しくお願いします。
180:デフォルトの名無しさん
07/05/11 07:31:33
>>179
exeファイルの中に入ってるでしょ
実行時にどう配置されるかはシステムによる
プログラム上ではポインタとして扱われる
181:デフォルトの名無しさん
07/05/11 07:44:13
>>179
ほぼ、static const char foo[] = {'t', 'e', 's', 't', '\0', }; strlen(foo);と同じ。
182:デフォルトの名無しさん
07/05/11 15:35:08
クリリンのAAきぼん
183:183
07/05/11 20:29:09
↓のソースで、☆印の行は何か意味があるでしょうか。
あってもなくても変わらない気がするのですが...
( 環境:Windows Vista , Visual Studio C++ Express Edition )
#include <stdio.h>
#include <windows.h>
#define THREAD_NUM 4
#define DATA_NUM 12
typedef struct _thread_type {
int thread_no;
int *data;
CRITICAL_SECTION *cs;
} thread_arg_t;
void thread_func(void *arg) {
thread_arg_t* targ = (thread_arg_t *)arg;
int i, result;
for (i = 0; i < DATA_NUM; i++) {
// EnterCriticalSection(targ->cs);
result = targ->data[i] + 1;
Sleep(0); ☆
targ->data[i] = result;
// LeaveCriticalSection(targ->cs);
}
}
184:183
07/05/11 20:30:00
int main() {
HANDLE handle[THREAD_NUM];
thread_arg_t targ[THREAD_NUM];
int data[DATA_NUM];
int i;
CRITICAL_SECTION cs;
/* データの初期化 */
for (i = 0; i < DATA_NUM; i++) data[i] = 0;
InitializeCriticalSection(&cs);
for (i = 0; i < THREAD_NUM; i++) {
targ[i].thread_no = i;
targ[i].data = data;
targ[i].cs = &cs;
handle[i] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)thread_func,
(void *)&targ[i], 0, NULL);
}
WaitForMultipleObjects(THREAD_NUM, handle, TRUE, INFINITE);
DeleteCriticalSection(&cs);
for (i = 0; i < DATA_NUM; i++) printf("data%d : %d\n", i, data[i]);
return 0;
}
あとSleepは、
・0ミリ(引数の分)秒ウェイト状態にする。
・0はMPUを他の優先度のスレッドにのみ譲る。
ということでしたよね?
185:デフォルトの名無しさん
07/05/11 20:30:46
>>183
Win32では 「0を指定した場合、 スレッドは、 実行準備ができている同じ優先順位のほかのスレッドにタイム スライスの残りを譲ります。」
186:デフォルトの名無しさん
07/05/11 20:39:55
なんでMSDN Libraryで調べれば直ぐ分かるような事を質問するんだろうな
187:183
07/05/11 20:40:06
>>185
おーありがとございますー!!
188:デフォルトの名無しさん
07/05/12 00:12:06
printf("%s/n","Hello World");
上のprintf文の%sでどのように"Hello World"を処理しているのか分かりません。
どなたかご教授して下さい。
189:デフォルトの名無しさん
07/05/12 00:14:46
意味が分からん。
190:デフォルトの名無しさん
07/05/12 00:15:28
>>188
マルチうざい
191:デフォルトの名無しさん
07/05/12 00:25:14
>>190
すみません
192:デフォルトの名無しさん
07/05/12 00:33:48
>>190
ごめんなさい、でも教えてください蟹
Viiv
ミ(エ)ミ....
193:デフォルトの名無しさん
07/05/12 00:35:48
あのーコールバックの書き方が解からないのですが
助けてください。動作するサンプル提示してくれませんか?
194:デフォルトの名無しさん
07/05/12 00:37:14
何のコールバックだよ…
195:デフォルトの名無しさん
07/05/12 00:37:38
URLリンク(www.google.co.jp)
196:蟹NIC
07/05/12 00:37:47
printf("%p/n","Hello World");
上のprintf文の%pでどのように"Hello World"を処理しているのか分かりません。
どなたか教えてください。
Viiv
ミ(エ)ミ....
197:デフォルトの名無しさん
07/05/12 00:49:14
>>188
可変長引数でも調べて推測してください。
様は第一引数の中を読んでいって、%フラグに当たったら対応する引数をフラグに従って変換した上で元の文字列に挿入してるんだと思う。
198:デフォルトの名無しさん
07/05/12 00:56:33
別に挿入なんかしてないけどね。
199:デフォルトの名無しさん
07/05/12 01:55:15
>>197
ご教授ありがとうございます。
200:デフォルトの名無しさん
07/05/12 02:30:45
そんなに知りたいならglibcのソースでも読めばいいのにな
201:デフォルトの名無しさん
07/05/12 02:37:18
ソースリーディングは初心者には難しい
202:デフォルトの名無しさん
07/05/12 02:45:10
>>196
------------------------------------------------------------
60 名前: デフォルトの名無しさん 投稿日: 2007/05/12(土) 00:10:17
printf("%s/n","Hello World");
上のprintf文の%sでどのように"Hello World"を処理しているのか分かりません。
どなたかご教授して下さい。
------------------------------------------------------------
この質問って流行ってるのか?
203:デフォルトの名無しさん
07/05/12 02:49:12
馬鹿がマルチしてるだけじゃない?
204:蟹NIC
07/05/12 03:16:31
>>202 いいえ、まマイブームレベル位かな
Viiv
ミ(エ)ミ....
205:デフォルトの名無しさん
07/05/12 06:53:20
>>117
配列は番兵を使うために便宜的に要素+1の部分にアクセスできるんだぜ?
206:デフォルトの名無しさん
07/05/12 07:27:03
>>205
ねーよwwwwwwwwwwwwwwwwwwwwwwwwwww
#include <stdio.h>
int main() {
int a[4] = { 0, 0, 0, 0 };
int b = 0;
a[4] = 3;
printf("%d\n", b);
return 0;
}
で 3 が表示されたぜ(gcc 4.0.1 for Mac)。
207:デフォルトの名無しさん
07/05/12 07:33:50
ポインタを向けるだけなら未定義動作にならないってだけでしょ
208:デフォルトの名無しさん
07/05/12 07:43:23
>アクセスできる
をどう好意的に解釈しても、ポインタを向けるだけ、にはならん罠。
209:デフォルトの名無しさん
07/05/12 07:45:46
どちらかというと205宛てに書いたレスなのだが…
210:デフォルトの名無しさん
07/05/12 08:50:05
>>205
>配列は番兵を使うために便宜的に要素+1の部分にアクセスできるんだぜ?
マジレスするとそれは文字列のときだけな。
char a[] = {1, 2, 3}; // sizeof a == 3
char b[] = "123"; // sizeof b == 4
211:デフォルトの名無しさん
07/05/12 08:50:21
釣りだって
212:デフォルトの名無しさん
07/05/12 08:51:17
知ってるよ
213:デフォルトの名無しさん
07/05/12 08:52:22
char c[3] = "123";
214:デフォルトの名無しさん
07/05/12 09:00:47
charの配列だけchar配列じゃなくて文字配列って言うことが多いし
文字配列には後ろに'\0'が付くみたいな覚え方をしてたから
なんかcharの配列だけは特別な代物のように思ってた過去
215:デフォルトの名無しさん
07/05/12 09:01:56
文字配列とは言わんなあ。
文字列としか。
216:デフォルトの名無しさん
07/05/12 11:26:20
私の処で文字配列といった場合、それはナルターミネートされていない。
217:デフォルトの名無しさん
07/05/12 11:35:24
相変わらず嘘と無価値な雑談でしか伸びないスレだな
218:デフォルトの名無しさん
07/05/12 11:36:38
君も仲間だ、歓迎するよ
219:デフォルトの名無しさん
07/05/12 13:01:15
質問です。
#include <stdio.h>
int main(void)
{
float a,b;
char e;
printf("変数a=");
scanf("%f",&a);
printf("変数b=");
scanf("%f",&b);
printf("文字=");
scanf("%c",&e);
printf("変数a=%f 変数b=%f 文字列d=%c\n",a,b,e);
return 0;
}
これをコンパイルすると文字列データを読みこんでくれません。。
おそらくprintfかscanfの仕様に問題があるのでしょうがこれの理由と回避方法をご教示願いたいです。
220:デフォルトの名無しさん
07/05/12 13:17:40
>>219
・文字と文字列の違いを理解しよう。
・scanf()の仕様に気をつけよう。
221:デフォルトの名無しさん
07/05/12 13:20:11
演算子を使わないで割り算や掛け算ってどうやるんですか?たとえば9÷3
222:デフォルトの名無しさん
07/05/12 13:22:43
演算子を使わないで演算するには、関数を使えばいい。
223:デフォルトの名無しさん
07/05/12 13:25:01
>>222
関数を自分でつくるということですかね?
224:デフォルトの名無しさん
07/05/12 13:25:16
>>219
scanf("%c",&e);
↓
scanf("%*[ \t\n]");
scanf("%c",&e);
変数b を読み込んだ後、改行文字がバッファに残っている
バッファに残った改行文字を次の scanf("%c",&e); で読み込んだため
変数e には改行文字が入ってしまった
この問題を回避するには、バッファに残っている改行文字を読み飛ばせば良い
225:デフォルトの名無しさん
07/05/12 13:27:18
つか入門書安易にscanf使いすぎ。
エラーチェックしなさすぎ。
226:デフォルトの名無しさん
07/05/12 13:38:59
>>223
つ[div()]
227:デフォルトの名無しさん
07/05/12 13:54:31
>>224なるほど ありがとうございます。
228:デフォルトの名無しさん
07/05/12 14:22:00
>>222
数学を一度勉強した方がいいですね。
具体的には線形空間というやつですよ・・・
229:デフォルトの名無しさん
07/05/12 14:27:06
数学の話じゃないだろ・・・常識的に考えて。
230:デフォルトの名無しさん
07/05/12 14:27:32
>>228
演算子を使わずにできる?
もちろんシフト演算も無しで
>>221
関数以外だとインラインアセンブラ使えば
演算子を使ったとは言われないとか?
231:デフォルトの名無しさん
07/05/12 14:28:43
>>228
何を寝惚けたことを?
232:デフォルトの名無しさん
07/05/12 14:44:24
設問の定義があいまい
233:デフォルトの名無しさん
07/05/12 14:51:20
// 演算子を使わない足し算。
int add(int a, int b)
{
FILE * fp = fopen("/dev/null", "w");
int rtn = fprintf("%*s%*s", a, "", b, "");
fclose(fp);
return rtn;
}
234:デフォルトの名無しさん
07/05/12 14:52:56
>>233
負数対応キボン
235:デフォルトの名無しさん
07/05/12 14:57:17
>>233
代入演算子を使っているw
>>234
わはは、そりゃ確かに>233じゃ無理だ。
236:デフォルトの名無しさん
07/05/12 14:58:03
int add(int a, int b) {
}
237:デフォルトの名無しさん
07/05/12 14:58:57
ミスった。
int add(int a, int b) {
__asm {
mov eax, a
add eax, b
}
}
238:デフォルトの名無しさん
07/05/12 15:02:00
そういえば関数呼び出しの括弧も演算子なんじゃなかったっけ?
239:デフォルトの名無しさん
07/05/12 15:02:17
>>222がなんでそんなことをしたくて何を「演算子」と呼んでいるかしらんが
if文だりなんだり使って全部作ればいいんじゃね
足し算なら1+1 = 2
だからa,bが両方とも1なら2を出力するというように
それらをすべて0~9のを自分でつくる
あと桁上げの関数ももちろん自分で作って
240:デフォルトの名無しさん
07/05/12 15:03:27
比較にも演算子が必要だな。
241:デフォルトの名無しさん
07/05/12 15:04:40
if じゃなくて switch ならイケる。
ただ、コード量が多すぎて int 全部を網羅できないな。
char 程度ならともかく。
242:デフォルトの名無しさん
07/05/12 15:05:01
switch しか無いな
243:デフォルトの名無しさん
07/05/12 15:05:06
つまんないからもうやめていいよ
244:デフォルトの名無しさん
07/05/12 15:07:01
お前らほんと数学分かってないんだな・・・
まじ小学校からやり直せよ
245:デフォルトの名無しさん
07/05/12 15:08:19
>>235
そこにある=は初期化子であって演算子ではない。
246:デフォルトの名無しさん
07/05/12 15:12:47
>>244
プログラミング言語において「演算子」が何を指すかを勉強し直してきてください。
247:デフォルトの名無しさん
07/05/12 15:13:17
>>241
桁上げの関数作ればできるだろ
switchだって演算子を裏に隠しているだけに過ぎないし
ちなみに足し算とかってそもそも写像なんだから
なんでそんなことやりたいのかよくわからん
数学じゃなくてC言語で言う「演算子」は人間が勝手に付けた分類だから
それにこだわっても意味が無い
>>228のいうように少し数学を学んだほうがいい
248:デフォルトの名無しさん
07/05/12 15:13:39
>>245
しかし残念 >>238
249:デフォルトの名無しさん
07/05/12 15:15:31
>>247
何で数学の演算子にこだわるのか理解できないのだが。
ここは C 言語スレだぞ?
250:デフォルトの名無しさん
07/05/12 15:18:44
元質問者出てこいよ
後出しで、四則演算子のことでした、とか言いそうだが
251:デフォルトの名無しさん
07/05/12 15:19:36
>>222-250
252:デフォルトの名無しさん
07/05/12 15:20:53
>>221
>演算子を使わないで割り算や掛け算ってどうやるんですか?たとえば9÷3
割り算や掛け算って言ってるけど
253:デフォルトの名無しさん
07/05/12 15:22:43
>>222の問題意識が何なのかということだぁね
C言語だと同じことできるけどこれは演算子と呼ぶ
これはそう呼ばないだけの違いになってしまうから
C言語での「演算子」の意味にこだわって
わざわざ考えるほどの価値がある物と思えない
もし>>222がC言語において何を演算子と呼ぶのかをどうやって決めたか
知りたいとかなら別だけど
結局のところC言語での演算子と数学での演算子の区別すらつかずに
質問しちゃったってオチの気がするw
254:デフォルトの名無しさん
07/05/12 15:24:37
C仕様書には区切り句で何らかの作用を起こすもの(代入とかな)を演算子とすると書かれてるんだから
演算子を使わずに何かをするなんて無理だろ
255:デフォルトの名無しさん
07/05/12 15:27:00
ここは環境依存おkだから、
インラインアセンブラ使えばおk。
256:デフォルトの名無しさん
07/05/12 15:30:17
2で割った剰余を取る演算て最近のコンパイラだと
勝手に0x01とのビットANDもしくはそれより速いコードに変えてくれるんでしょうか?
257:デフォルトの名無しさん
07/05/12 15:32:47
>>254
てことはC言語の演算子は数学の演算子の定義に沿って定義されている
ということだな べんきょうになったw
258:デフォルトの名無しさん
07/05/12 15:33:27
>>256
Yes.
259:デフォルトの名無しさん
07/05/12 15:36:31
sizeof まで演算子だしなあ。
260:デフォルトの名無しさん
07/05/12 16:02:59
(void)printf("ほげほげ");
と、printfまでキャストをする必要はあるのでしょうか?
261:デフォルトの名無しさん
07/05/12 16:04:21
>>260
無い。そもそもintをvoidにキャストしてどうするんだ?
262:デフォルトの名無しさん
07/05/12 16:04:27
>>260
ない。
ただし、戻り値を取得し忘れてるわけじゃなく明示的に捨ててるんだという意思表示として
(void)にする流儀はあるにはある。
好み、コーディングスタイルレベルの話。
263:デフォルトの名無しさん
07/05/12 16:05:26
>>261
戻り値を使わないことを明示する効果がある。
lintのようなチェッカを黙らせる効果もあるな。
264:デフォルトの名無しさん
07/05/12 16:06:37
そうそう、コーディング規約に「戻り値は必ずチェックすること」という項目があって、
それの評価を厳密に行なう運用の場合にもそうする必要があるね。
265:デフォルトの名無しさん
07/05/12 16:10:14
>>263
lint対策か。それなら納得
266:デフォルトの名無しさん
07/05/12 16:57:40
コンパイラにもよる。
たとえばFreescaleのCodeWarriorは(void)をつけないとwarningを出すのがデフォルト動作。
267:デフォルトの名無しさん
07/05/12 18:42:50
int main(void){
int a=1;
kansu(a);
}
までやっておいて
①int kansu(int a){
printf("%d",a*2);
}
②int kansu(int *a){
printf("%d",a*2);
}
①だと正常に動いたのですが、
②だと「*」がダメだ~ とコンパイラに怒られるのですが、
この違いとは何なんでしょうか?
268:デフォルトの名無しさん
07/05/12 18:45:51
>>267
(2)の*は、意味も分からないで適当につけたの?
269:デフォルトの名無しさん
07/05/12 18:47:47
int kansu(int *a){
printf("%d",a*2);
}
↓
printf("%d",*a*2);
↑
これじゃね?
270:デフォルトの名無しさん
07/05/12 18:50:45
gets()関数で文章を読み取ってます。リダイレクションでメモ帳で作った文章入れると、改行のところ以降プログラムに読み込まれません。
どうしてでしょうか?改行があっても最後までいきたいんですが
271:デフォルトの名無しさん
07/05/12 18:52:22
>>270
getsは改行文字までしか読み取らない
manにも書かれてる基本仕様
ついでにgetsを使うのは推奨されない
272:デフォルトの名無しさん
07/05/12 18:53:05
>>271
じゃあ代理のものとして、何を使ったらいいですかね
273:デフォルトの名無しさん
07/05/12 18:54:58
>>268
気のせいかもしれませんが、
関数を定義してるプログラムを見ると多くが *a となっていたので、
違いを知りたいなと思って作ったプログラムなので、
かなり不備はあるかもしれません・・・。
>>269
②の場合だと必ずメモリ関連でセグメントエラーか、警告が出続けてしまうんです。
試したところ、、、セグメントエラーが出ました。
274:デフォルトの名無しさん
07/05/12 18:56:55
>>272
fgets(・・・, stdin)
275:デフォルトの名無しさん
07/05/12 18:58:02
>>274
stdinっていうのはなんでしょうか
276:デフォルトの名無しさん
07/05/12 18:59:01
>>272
>gets() を使うのは極めて危険である。(中略)代わりに fgets() を使うこと。
URLリンク(www.linux.or.jp)
これぐらい自分で調べろ
277:デフォルトの名無しさん
07/05/12 18:59:34
>>273
コールするほうも
kansu(&a);
と変えないとだめだよ。
こういうところで試行錯誤してるなら、入門書を一冊買ったほうがだいぶ時間の節約になると思うけど。
278:デフォルトの名無しさん
07/05/12 19:00:09
>>275
とりあえずググれや。
279:デフォルトの名無しさん
07/05/12 19:00:11
>>273
int kansu(int *a) にするなら
int main(void){
int a=1;
kansu(&a); < &をつけなきゃ
}
280:デフォルトの名無しさん
07/05/12 19:01:56
>>276
危険なんですね。
fgetsにしたら
呼び出し時のパラメータが足りない:fgets(関数 main )
ってなってコンパイルできないんですが・・・・
281:デフォルトの名無しさん
07/05/12 19:02:58
>>280
URLリンク(www.bohyoh.com)
ちゃんと必要な引数を与えている?
282:デフォルトの名無しさん
07/05/12 19:04:35
>>277,279
すごい納得できました。ありがとうございました。
入門書は・・・買ったんですが、、、馬鹿なので理解できない^^;
283:デフォルトの名無しさん
07/05/12 19:06:16
>>281
なんかよくわからないんですが、
char型の配列に文章をいれたいんです・・・・
char bunsyo[256]
みたいなやつにです
284:デフォルトの名無しさん
07/05/12 19:07:28
>>283
fgets(bunsyo, 255, stdin)
285:デフォルトの名無しさん
07/05/12 19:08:16
>>283
gets()をfgets()に変更するくらいの手続きを自分で考えられない(≒検索できない)なら、
プログラマに向かないからとっとと諦めた方がいいよ。
286:デフォルトの名無しさん
07/05/12 19:09:04
>>284
ダウト。慣用句的にそれを使っているのなら、
一度マニュアルページをよく読んで自分の過ちに気付いておいた方がいい。
287:デフォルトの名無しさん
07/05/12 19:09:56
>>284
コンパイルはとおるんですが、改行のところで読み込みがおわってしまうんですが・・・・
288:デフォルトの名無しさん
07/05/12 19:10:09
>>284
第二引数Nはバッファサイズだろ
読み込まれる文字数最大値はN-1
289:デフォルトの名無しさん
07/05/12 19:10:27
>>286
ダウト。説明なしにそういうことを言うのはお前の知ったかに過ぎない
290:デフォルトの名無しさん
07/05/12 19:11:12
>>287
fgets()も、改行までしか読まない。
だから、マニュアルページを読むなり情報を検索できないなら無駄だから諦めろって。
291:デフォルトの名無しさん
07/05/12 19:11:56
>>288
gdgdいってねーで正解を書いたら?知ったかへぼプログラマーwwww
N-1そうだよ?何か?まさか、254 にしろとかボケないだろうね?
292:デフォルトの名無しさん
07/05/12 19:12:48
>>290
読み込むテキストに工夫がいりますかね?
293:デフォルトの名無しさん
07/05/12 19:13:06
>>289=>>291か?
ファビョってんじゃないよ。
そこまで分かってて正解が判らないような屑がこの板なんかに書くんじゃないよ。
294:本日の知ったか馬鹿第一号
07/05/12 19:13:27
288 名前:デフォルトの名無しさん 投稿日:2007/05/12(土) 19:10:09
>>284
第二引数Nはバッファサイズだろ
読み込まれる文字数最大値はN-1
295:デフォルトの名無しさん
07/05/12 19:13:42
暇だからプログラム組もうかな
でも、モチベーションが・・・・・
なにか練習問題でものってるサイトないか?
296:デフォルトの名無しさん
07/05/12 19:14:33
>>292
テキストファイルを丸ごと読み込むには、
・fgetc()で一文字ずつ
・fgets()で一行単位で
・fread()でブロック単位(或いは一気に)
読む必要がある。
297:デフォルトの名無しさん
07/05/12 19:14:34
>>291
だから>>283の宣言なら、普通にfgets(bunsyo, 256, stdin);でいいだろ
なんでバッファのラスト1バイトを無駄にしてんだよ
>>292
ループ回して一行ずつ読み込む
298:デフォルトの名無しさん
07/05/12 19:14:44
>>287
宿題スレで、ファイル全部読み込むコード書いてくださいって言ったほうがいいんじゃね?
299:デフォルトの名無しさん
07/05/12 19:14:47
>>276とかこのスレにいらねーだろ。このスレが何なのかわかっていないのに
まだ勉強中の知らない奴を見つけて、自分が知っていることをひそかに自慢しながら
他人をたたく基地外だろ。ここでレスしているほかの奴にとっては迷惑千万、失せろクズプログラマー
300:デフォルトの名無しさん
07/05/12 19:15:52
>>293
>そこまで分かってて正解が判らないような屑が
自分が指摘したのに答えられない(勘違い)クズこそ来るなよw
お前はまったく指摘をしていない。ただたんに 自分が思った ことと違っていただけ。
それもお前が間違えているという勘違い(プ
不適切なら正しい使い方を明示しろ、たぶんお前じゃできない。あれは間違っていないからw
301:デフォルトの名無しさん
07/05/12 19:15:56
ファイルのサイズがわかってるなら、適当な大きさのバッファを用意して、
fread()でもいいけどな。
302:デフォルトの名無しさん
07/05/12 19:16:07
人間の屑よりはマシだな
303:デフォルトの名無しさん
07/05/12 19:16:58
>>296
うーん。めんどくさそうですね。テキストファイルの改行をなくしちゃいます
304:デフォルトの名無しさん
07/05/12 19:17:35
>>300
あのね、坊やみたいなお子ちゃまはこんなところに来ちゃダメよ。
既に正解レスがついているんだからもっと落ち着きましょうね。
305:デフォルトの名無しさん
07/05/12 19:18:10
お前ら邪魔
306:デフォルトの名無しさん
07/05/12 19:18:18
>>299
自分で考えよう、調べようって姿勢が見えたら、頭わるそうなヤツでもけっこう親切に教えてもらえるよ。
ただ「わからない、を即答せよ」ってだけじゃ教えてもらえない。
307:デフォルトの名無しさん
07/05/12 19:19:32
>>293
揚げ足取りにもならなかったな、所詮お前はわかっていない(っと自分が思った)奴をたたくだけか
二度とくるな、お前みたいなクズこそこのスレにはいらない。このスレのタイトル読めますか?
あっ、日本語も日本の社会もろくに知らない在日かw
308:デフォルトの名無しさん
07/05/12 19:20:15
まぁ、fgets()の慣用句はfgets(buf, sizeof(buf), stdin)だがな。
仮にもプログラムを組もうというときに、きちんと調べる手間を惜しんじゃ遺憾な。
309:デフォルトの名無しさん
07/05/12 19:20:18
以下、キモメンメガネデヴピッツァのきめ台詞が出るまでお待ちください
310:デフォルトの名無しさん
07/05/12 19:20:38
>>304
あのね、小学生未満の精神年齢のお子ちゃまはこんなところに来ちゃダメよ。
勘違いの指摘レスがついているんだからもっと落ち着きましょうね♪
んで、何が間違いか、指摘できた?正解がとかじゃなくてw
311:デフォルトの名無しさん
07/05/12 19:21:38
「屑」対「クズ」か。どっちが半島人かは火(病)を見るより明らかだな。
312:デフォルトの名無しさん
07/05/12 19:22:26
>>284は単なる入力ミスだろ。それだけでここまで お前はあほだ! みたいな
プレッシャーをかける基地外ってプログラマーに向いてねーよなwwwwww
313:デフォルトの名無しさん
07/05/12 19:22:47
>>309
半島人がでてきたぞ。
314:デフォルトの名無しさん
07/05/12 19:23:23
>>282
だったらその本は自分に向いていなかったと諦めて、
ちょっと立ち読みして、ほかに良さそうな本を探して買えばいい。
315:デフォルトの名無しさん
07/05/12 19:23:36
くずはくずかごに入っとけ。
それより早く>>295に答えてください。
316:デフォルトの名無しさん
07/05/12 19:24:33
>>311 地球上のカス以下の お 前 が 言 う な wwwwwwww
っつーか、揚げ足取り必死だなw
そんなんじゃ本当にプログラマーに向いてねーよ、その程度のことでガミガミ
相手を罵倒するようじゃ、そんな奴こそこんなスレに来ないほうが良いだろ。
気分が悪くなるものを敢えてみてゲロを吐いているマゾかい?w
グロ動画でも貼ってやろうか?w
317:デフォルトの名無しさん
07/05/12 19:24:59
おお、新展開。今度の攻撃は「単なる入力ミス」ですw
>>315
宿題スレに未解決の宿題が幾つかあるんじゃない?
下手なサイト見るより勉強になりそうですよ。
318:デフォルトの名無しさん
07/05/12 19:29:25
freadでも使えば。
319:デフォルトの名無しさん
07/05/12 19:30:13
>>317
ほらな、そういうことで相手をチクチクつついて周りの気分も害しているだろ?
だからお前みたいなつまらねークズはプログラマーに向いてないから
頼むから大掛かりなプロジェクトには絶対に介入するなよ。
っつーか協調性がなくて無理だろうね、お前みたいなちっぽけなクズはw
ちなみに、あの程度の間違いならさらっと 256 って書けば済んだ話だろ。
お前わかってねー!間違えたへへーん馬鹿!とか罵倒する方が頭がイカレてんだろ。
そういう奴に限って、自分の間違いを指摘されると、認めないどころか
お前がおかしい!って言い始めるから困るぜ ヤレヤレ
以後、さっきからきんもぉ~★な指摘するだけで答えを出さない基地外は放置よろ
たぶん引きこもりニートだろ
320:デフォルトの名無しさん
07/05/12 19:30:36
>>318
>296
>301
321:こいつさいこーに協調性のない引きこもりwww
07/05/12 19:32:14
317 名前:デフォルトの名無しさん 投稿日:2007/05/12(土) 19:24:59
おお、新展開。今度の攻撃は「単なる入力ミス」ですw
293 名前:デフォルトの名無しさん 投稿日:2007/05/12(土) 19:13:06
>>289=>>291か?
ファビョってんじゃないよ。
そこまで分かってて正解が判らないような屑がこの板なんかに書くんじゃないよ。
297 名前:デフォルトの名無しさん 投稿日:2007/05/12(土) 19:14:34
>>291
だから>>283の宣言なら、普通にfgets(bunsyo, 256, stdin);でいいだろ
なんでバッファのラスト1バイトを無駄にしてんだよ
なんでバッファのラスト1バイトを無駄にしてんだよ
↑こういう嫌らしい言い方をするだろ?
だから日ごろ嫌われていることに気づかない仲間はずれなんだろうからこんな場所で
匿名性を利用して自分より知識の乏しい弱者相手に強気になれるんだろうねw
322:284
07/05/12 19:34:14
>>284はただの入力ミスです ♠
56としたつもりが同じキーを2回押して書き込みしちゃっただけでぇ~~~す ♣
あぁ~~いとぅいまてぇ~~ん、文字配列のサイズを指定するように、ここでレスする以外の
自分が書くソースでは sizeof 使ってまぁ~~~つ ♥
323:デフォルトの名無しさん
07/05/12 19:36:19
char s[256];
size_t size=sizeof(s)/sizeof(s[0];
sizeof(s,size,stdin);
こんな感じでぇ~~どぉ~~~でちゅかぁ~~?♦
324:デフォルトの名無しさん
07/05/12 19:37:15
あちゃぁ~~、今度はsizeofの閉じ括弧忘れちゃいまちちゃぁ~~~
あぁ~~~いとぅいまちぇぇ~~~~ん ♪
325:デフォルトの名無しさん
07/05/12 19:39:29
fgetsの仕様って
buf[BUFFER_SIZE];
fgets(buf, BUFFR_SIZE, stdin);
とかするためにこんな仕様になってるんでしょうか?
326:デフォルトの名無しさん
07/05/12 19:43:07
こんな仕様が何を指すのかわからん。
327:デフォルトの名無しさん
07/05/12 19:44:52
>>325
そう
328:デフォルトの名無しさん
07/05/12 19:46:54
>>325
fgets()の他にも、strftime(), snprintf()も同じように格納バッファサイズを指定して、
それよりも少ない文字数しか格納しないような仕様になっている。
329:デフォルトの名無しさん
07/05/12 19:50:27
なるほど、文字列の最後が\0で終わるからその分余計に取らないと駄目だからか
330:デフォルトの名無しさん
07/05/12 20:11:00
普通にsizeof使えば、悩むことなんて何もないのに
331:デフォルトの名無しさん
07/05/12 20:20:56
>>330
getsもsizeof使って実装すれば何の問題もないのに、と思っていたりする?
332:デフォルトの名無しさん
07/05/12 20:22:21
まず、おまえさんが何が言いたいのか分からん。
333:デフォルトの名無しさん
07/05/12 20:22:29
333 gets!
334:デフォルトの名無しさん
07/05/12 20:37:37
つまり、まぁ、こういうこと
int main(void)
{
exit 0;
}
335:デフォルトの名無しさん
07/05/12 20:38:31
URLリンク(d.hatena.ne.jp)
お前らほんっとうにこれが好きなんだな
336:デフォルトの名無しさん
07/05/12 20:39:50
くだらなすぎ
337:デフォルトの名無しさん
07/05/12 20:54:40
標準入力から読み込みたいけどサイズとファイルポインタ指定が面倒ってことなら
自分でfgetsをそれらを決め打ちした状態で呼び出す関数作ればいいんでは
338:デフォルトの名無しさん
07/05/12 21:24:36
void WriteLog(const wchar_t szComment[])
{
FILE *fp;
errno_t err;
time_t ttime;
wchar_t buff[CTIME_SIZE];
if ( ( err = fopen_s( &fp, szPath, "at") ) != 0 )
return
time( &ttime );
if( ( err = _wctime_s( buff, CTIME_SIZE, &ttime) ) != 0 )
return;
fwprintf( fp, L"%s", szComment );
fwprintf( fp, L", %s", buff);
fclose( fp );
}
こういう関数を作って、使おうと思ったんですが、
例えばこのように使うと WriteLog( L"あああ (AAA)" );
↓のように書き込まれてしまいます
??? (AAA), Sat May 12 21:15:19 2007
なぜでしょうか?
339:デフォルトの名無しさん
07/05/12 21:43:29
>>338
ログファイルの先頭にBOMを入れるようにすれば読めるんじゃね?
340:デフォルトの名無しさん
07/05/12 22:06:58
今、配列の要素として1,2,3,4があるとき、これらの要素を連結して他の変数に代入(n = 1234)することはできますか?
341:デフォルトの名無しさん
07/05/12 22:07:24
できます。
342:デフォルトの名無しさん
07/05/12 22:15:24
>>341
教えて下さい
343:デフォルトの名無しさん
07/05/12 22:18:45
BOOL厨ワロタw
344:デフォルトの名無しさん
07/05/12 22:19:50
b = a[0] * 1000 + 1[a] * 100 + *(a+2) + 10 + a[3];
345:デフォルトの名無しさん
07/05/12 22:24:01
>>344
ありがとうございます
346:デフォルトの名無しさん
07/05/12 22:42:10
>>344
この妙な書き方噴いたwww
347:デフォルトの名無しさん
07/05/12 22:42:59
一箇所間違ってるし
348:デフォルトの名無しさん
07/05/12 22:50:12
>>347
可哀想だからスルーしてやれよw
349:デフォルトの名無しさん
07/05/12 22:50:45
足し算になってるのか
350:デフォルトの名無しさん
07/05/13 00:07:33
数学が分かってない人が多すぎる
351:デフォルトの名無しさん
07/05/13 00:18:02
小学生だっているだろうし 仕方ないさ
352:デフォルトの名無しさん
07/05/13 00:21:03
#include <stdio.h>
#include <math.h>
int main() {
int nums[] = {1,2,3,4,5};
int nums_len = sizeof(nums)/sizeof(nums[0]);
int num = 0;
for (int i = 0; i < nums_len; ++i) {
num += nums[i] * (int)pow(10, (nums_len-1) -i);
}
return 0;
}
よし、これでどうだ!!
353:デフォルトの名無しさん
07/05/13 00:29:06
もうsprintfでいいだろw
354:デフォルトの名無しさん
07/05/13 00:48:01
ちょっと聞きたいんだけど
(環境.WindowsXP BCC32)
#include <stdio.h>
int main()
{
FILE *fp=fopen("test.txt","w");
unsigned d=0x0d;
fwrite(&d,sizeof(d),1,fp);
fclose(fp);
return 0;
}
test.txt に バイナリ値で 0D 00 00 00 ではなく 00 00 00 4E として書き込まれる
これってどうしてでしょうか?
355:デフォルトの名無しさん
07/05/13 00:52:10
>>354
URLリンク(www.bohyoh.com)
URLリンク(www.bohyoh.com)
356:デフォルトの名無しさん
07/05/13 00:52:54
>354
bcc32(v5.82)でコンパイルしてみた。
ちゃんと
0D 00 00 00
になったけど?
357:デフォルトの名無しさん
07/05/13 00:53:19
>>354俺んとこじゃちゃんと0D 00 00 00になったぞい
358:デフォルトの名無しさん
07/05/13 00:54:14
亡羊のページなんか張るなよ
359:デフォルトの名無しさん
07/05/13 00:55:10
>>358
なんで?んじゃどこをはれば良いの?なんでいちいちちっぽけな低学歴馬鹿のお前の言うことを
聞かなきゃならねーの?さっきからうぜぇんだよ、くだらねぇことでチクチク煽ったり、あほじゃねこいつ?
360:354
07/05/13 00:55:21
失礼しました
ちょっと違いました
バイナリ値で 0D 00 00 00 ではなく 00 00 00 として書き込まれる
0D が書き込まれていない、でした
それと1Aも書き込まれないようです
制御コードだからですか?
361:デフォルトの名無しさん
07/05/13 00:56:20
>>360
意味が分からん。何がいいたい?
362:デフォルトの名無しさん
07/05/13 00:56:52
確認方法に問題があるんじゃないのか。
ちゃんとしたバイナリエディタ使ってるか?
363:自分が気に食わない発言を見つけると得意気に罵倒してくる基地外
07/05/13 00:57:12
286 名前:デフォルトの名無しさん 投稿日:2007/05/12(土) 19:09:04
>>284
ダウト。慣用句的にそれを使っているのなら、
一度マニュアルページをよく読んで自分の過ちに気付いておいた方がいい。
293 名前:デフォルトの名無しさん 投稿日:2007/05/12(土) 19:13:06
>>289=>>291か?
ファビョってんじゃないよ。
そこまで分かってて正解が判らないような屑がこの板なんかに書くんじゃないよ。
そこまで分かってて正解が判らないような屑がこの板なんかに書くんじゃないよ。
そこまで分かってて正解が判らないような屑がこの板なんかに書くんじゃないよ。
お前みたいな自分基準しか言わない馬鹿や間違っているのを見つけては叩くだけしかしない奴が
このスレどころかこの板にこない方が良いよ、プロになれなかったグラマー(ただのデブ)www
364:デフォルトの名無しさん
07/05/13 00:58:33
>>360
バイナリィエディタで開いてみたら、0D 00 00 00になったけど?
365:デフォルトの名無しさん
07/05/13 01:00:00
>>360
0x0d を書き込んでいて、
なんで 0x1Aを期待するのかわからんし。
そもそも書き込んでるのがバイナリなのにファイル名が.txtなのも謎だし。
というか君は何がしたいの?w
そこを言えば根本的なバグも教えて貰えるかも。
366:デフォルトの名無しさん
07/05/13 01:00:40
>>358
ねぇねぇ、どこを参照すりゃ良いの?お前、もしかして亡羊さんのことが嫌いな人?
亡羊さんに嫌がらせをしている人がいないか聞いたら、お前みたいなへぼプログラマーが
誰か特定できるかな?ちと亡羊さんに通報してこようかな?w
367:デフォルトの名無しさん
07/05/13 01:01:46
>>365
お前もいちいちうるさいなぁ、馬鹿じゃね?わけがわからないとかじゃなくてさぁ
できたって報告があるんだから、いちいち何言ってんだかわかんねーじゃなくて
どうやって0D 00 00 00以外が書き込まれたか、確認した手段を聞いた方がはえーよ馬鹿w
368:354
07/05/13 01:01:59
>>356-357
そうですよねぇ
普通なりますよねぇ
もうすこしチェックしてみます
369:デフォルトの名無しさん
07/05/13 01:03:44
>>360
URLリンク(www.vector.co.jp)
良いから開いてみれ。ちゃんと書き込まれているからw
370:デフォルトの名無しさん
07/05/13 01:07:54
C言語初心者です。
基本情報処理技術者をとって会社に就職して、
プログラマーからSEになったらどの位の給料になるんでしょうか?
もちろん個人と会社による話ですが、相場を教えて下さい。
SEになっても月に30万位なんでしょうか??
371:デフォルトの名無しさん
07/05/13 01:07:58
365の反応が普通だろw
372:デフォルトの名無しさん
07/05/13 01:08:52
>>370
マ板池
373:デフォルトの名無しさん
07/05/13 01:09:25
>>367
ば…ばかって言うヤツが馬鹿なんだからねっ!!!
374:デフォルトの名無しさん
07/05/13 01:09:51
>>371
普通じゃねーよ、相手にひたすらプレッシャーを与えてボロを出したところを
さらに叩く基地外くらいだろ、そういうのがデフォになっている視野も心も狭い低学歴はw
普通は何を使って書き込まれた値を確認したか聞くだろ。
375:デフォルトの名無しさん
07/05/13 01:10:52
>>372さん
マ坂とはなんでしょうか…?
376:デフォルトの名無しさん
07/05/13 01:11:40
良いかてめぇ~ら、C言語をかじったくらいのクソガキが、これから始める初心者を
ネチネチいじめてんじゃねーよ、スレタイが読めていないのか、こういうスレに集まる
初心者より自分の方が知識も経験もあるということを知って安心したいのか知らないが
答える気がないならこのスレから出ていってくれ。二度と戻ってくるな。
所詮お前は、プロになれなかったただのデヴ(グラマー)だ
377:デフォルトの名無しさん
07/05/13 01:12:03
>>375
プログラマー板
378:354
07/05/13 01:15:10
すみません.自分の勘違いのようです
今作っているものがunsigned ID, unsigned short sizeを読み、次にsize分文字列として読ませているんですが
IDが0x0Dまたは0x1Aになるとバグったもので
もう一度見直してきます
どうもありがとうございました
379:デフォルトの名無しさん
07/05/13 01:16:06
>>378
おそらくfopenの際、モードをバイナリにしてないからだろ
バイナリ指定してない場合、改行文字絡みで自動変換が行われる
380:デフォルトの名無しさん
07/05/13 01:21:23
>>374
オマエのトラウマなんかどうでもいいよ
381:デフォルトの名無しさん
07/05/13 01:21:24
>>374
火病ってんじゃねーぞ
・ >365 が元質問者を叩いているという事実認識がまず脳内
・ 自分が >365 を叩いてる事実を放置
・ 自分の主観が「普通」と勝手に定義
どっちが基地外かは火を見るより明らか
382:デフォルトの名無しさん
07/05/13 01:21:55
マジでやめてくんないかな
383:デフォルトの名無しさん
07/05/13 01:22:45
嫌な荒れ具合だな
亡羊本人でも降臨してんの?
384:354
07/05/13 01:24:02
>>379
まったくもって情けないです
バイナリ指定したつもりがしてませんでした
ちゃんと動作しました
お騒がせしました
385:デフォルトの名無しさん
07/05/13 01:25:07
>>380 >>381
おまえらうるせーよ?お前が一番うっとうしい、士ねよ馬鹿
質問に答える気がないなら来るなよ。ほかにレスしている奴の邪魔なんだよクソガキ
何歳だお前?なぁ?士ねよ馬鹿w
ふぁびょってんのはお前だろ。他人にファビョってんじゃねーよとか言っておきながらwwwww
380 名前:デフォルトの名無しさん 投稿日:2007/05/13(日) 01:21:23
>>374
オマエのトラウマなんかどうでもいいよ
オマエのトラウマなんかどうでもいいよ
オマエのトラウマなんかどうでもいいよ
オマエのトラウマなんかどうでもいいよ
↑それお前だろ。お前の場合はウマシカだがw
381 名前:デフォルトの名無しさん 投稿日:2007/05/13(日) 01:21:24
>>374
火病ってんじゃねーぞ
・ >365 が元質問者を叩いているという事実認識がまず脳内
・ 自分が >365 を叩いてる事実を放置
・ 自分の主観が「普通」と勝手に定義
どっちが基地外かは火を見るより明らか
・ >365 が元質問者を叩いているという事実認識がまず脳内
自分のレス読み返せ基地外。
・ 自分が >365 を叩いてる事実を放置
はぁ?なんで?叩いた覚えありましぇ~~ん、ちゃんとできたと答えたけど?
いつ俺が叩いたか、参照レスきぼんぬ。ってか、俺を特定できないから無理だろうけど
俺は叩いていないし
386:デフォルトの名無しさん
07/05/13 01:25:53
>>383
そうやっていないのに特定の人物をどうこう言い始めるだろ?
お前もうそれで名誉毀損だよ。亡羊さんに通報しとくねw
覚悟しとけよ
387:デフォルトの名無しさん
07/05/13 01:27:09
釣れてますねw
388:デフォルトの名無しさん
07/05/13 01:27:18
>>386
亡羊ってだれだよ。
389:デフォルトの名無しさん
07/05/13 01:27:40
>>358 >>358 >>358 >>358 >>358 >>358 >>358 >>358 >>358 に問う
なんではっちゃだめなの?理由は?お前の気まぐれとか、気分とかだったらまずお前がただの馬鹿だと言う結論しか出ないから。
参考にできるページがあったら使う、別になんら問題ないし、そのページには間違った記述はされてないよ。
まぁ、たぶん亡羊を嫌っている誰かだろ。特定できそうだから、亡羊さんに聞いてくるわ。
どうせプロになれなかったボケグラマーだろw
390:デフォルトの名無しさん
07/05/13 01:29:54
>>388
>>358 >>358 >>358 >>358 >>358 >>358 >>358 >>358 >>358 参照w
言ったのは俺じゃないから。正しくは望洋だから。ANSI、ISO準拠を重視した本の出版をしているし
そんじょそこらの知ったかプログラマーと比べたらかなりまともな人だろうね。
他人を叩くような奴って、世界基準すら知らなさそうで視野が狭そうだなw
int mainについても理解してなさそう(どこぞのスレで議論になったが、ISOの参照ページを出したら
尻尾を巻いて逃げたけどなw)
391:デフォルトの名無しさん
07/05/13 01:32:00
>>俺を特定できないから無理だろうけど
↑
これがこいつの心理だろうなw
392:デフォルトの名無しさん
07/05/13 01:32:30
>>381
> ・ 自分の主観が「普通」と勝手に定義
はい?自分の主観で言った覚えはありませんけど?
ちゃんとバイナリィエディタで 0D 00 00 00 が書き込まれているのを確認しましたが何か?
質問者が何で書き込まれた値を確認したか聞いたのに、どうして俺が 主観 となるんでしょうか?
正確にお答えをして下さい。でなければ偽証罪で通報しますよ?証人喚問は怖いですよぉ~~
393:デフォルトの名無しさん
07/05/13 01:33:35
>>391
ぷぷっ、そういうところにしかもう反応できない肝っ玉の小さいクズ乙w
こういう匿名(実際のところは完全に匿名ではない)ところでしか強がれないボケ
他人の粗探しを必死こいてするくせに、自分の落ち度をまったく認めない井の中の蛙乙w
394:デフォルトの名無しさん
07/05/13 01:34:33
ここまで望洋さんに肩入れできるのはある意味すごいと思った。
395:デフォルトの名無しさん
07/05/13 01:35:51
質問者の答えに答えるどころか お前何やってんだよ としか言わない奴はとっととこのスレから
出て行ってくれませんか?うっとうしいんだよ、答えもしないくせに相手のボロを探すだけの馬鹿
396:デフォルトの名無しさん
07/05/13 01:35:52
>>389
特定できたら家にきてくれよ。酒くらいは出してやる。
397:デフォルトの名無しさん
07/05/13 01:40:30
もう眠い。寝る。
398:デフォルトの名無しさん
07/05/13 01:41:01
どうぞ。
399:デフォルトの名無しさん
07/05/13 02:02:29
望洋信者って怖いな
400:デフォルトの名無しさん
07/05/13 02:04:43
いつの間にか信者になっているしw
参照できるライブラリのページを出しただけだろ。亡羊を狙った覚えはない
401:デフォルトの名無しさん
07/05/13 02:44:13
なんだ、まだやってたんだ。暇な人はこれだから……
402:デフォルトの名無しさん
07/05/13 05:37:00
他人の粗探しをしている奴がきんもぉ~♪だよな。指摘するならするで
間違いを指摘すりゃ良いだろ。気持ち悪いよ、お前それわかってねーなって
ネチネチ煽る奴。日頃、まともな人付き合いがないからこういう捻くれた
相手を見下して自分が優位な立場だと思い込みたい引きこもりなんだろうね
403:デフォルトの名無しさん
07/05/13 05:45:51
>402
自己紹介乙
404:デフォルトの名無しさん
07/05/13 06:14:59
>>403 反応したお前ノナー
405:デフォルトの名無しさん
07/05/13 06:15:32
>>403=昨日、つまらないミスを気持ち悪く指摘して煽っただけの知ったかバカ
406:デフォルトの名無しさん
07/05/13 07:01:27
亡羊?
ボコボコにしてやんよ
∧_∧
( ・ω・)=つ≡つ
(っ ≡つ=つ
/ ) ババババ
( / ̄∪
407:質問者
07/05/13 08:52:04
きのうはお騒がせしました。
「演算子を使わない」とは、四則演算のことです。
ビット演算で何とかできないかな?と思いましたが。どうでしょうか?
408:デフォルトの名無しさん
07/05/13 10:27:06
#include <stdio.h>
#include <string.h>
int main(void) {
char *name[12] = {"Mutsuki","Kisaragi","Yayoi","Uzuki",
"Satsuki","Minazuki","Fuzuki","Hazuki",
"Nagatsuki","Kannazuki","Shimotsuki","Shiwasu"};
char **p;
int i;
p = name;
for(i = 0;i < 12;i++){
printf("%2d月:%s(%d)\n",(i + 1),strlen( *p ),*p); /* ① */
printf("%2d:%s\n",strlen(*p),*p); /* ② */
++p;
}
return 0;
}
今、ポインタのポインタを使って文字数を数える練習問題やっているのですが
①のprintf文を実行するとDos窓が強制終了してしまいます。
デバックの時にエラーは出ないのですが・・・なにが間違っているのでしょうか。
②の方は普通に出力できます。
Visual C++ 2005 Express Editionを使っています。
409:デフォルトの名無しさん
07/05/13 10:38:24
>>407
コンピュータサイエンスの基礎をやれ。
四則演算を論理素子でどうやって実現するか知れば
くだらない疑問を抱かずにすむ。
410:デフォルトの名無しさん
07/05/13 11:02:22
>>408
printf("%2d月:%s(%d)\n",(i + 1),strlen( *p ),*p);
%2d = i+1
%s = strlen(*p) ←
%d = *p ←
411:デフォルトの名無しさん
07/05/13 11:08:34
どうやって、論理素子で計算するんですか。
16進数に置き換えてするんだとは思いますが、すごく疑問です。
2×4=8とか、8÷2=4を論理素子で計算する。
すごく難しいと思います。
412:408
07/05/13 11:15:59
>>410
あああ!逆だった
ありがとうございます!
413:デフォルトの名無しさん
07/05/13 11:36:28
>>411
本屋に行って"CPUの仕組み"みたいな本買ってこい
あとは加算器で調べてみるとか
414:デフォルトの名無しさん
07/05/13 11:47:10
>>411
2 << 2
8 >> 1
415:デフォルトの名無しさん
07/05/13 12:40:23
剰余はどうするんすか?
スタック使って割られる数-商*割る数って演算するんですか?
416:デフォルトの名無しさん
07/05/13 13:43:31
ファイル操作のとこでreturn(-1);の意味がさっぱり。
417:デフォルトの名無しさん
07/05/13 14:57:20
>>415
掛け算と割り算は加減算で表現できるだろ
単純に何回も引いていって引けなくなればそれが余り
2進数で桁上がり下がりフラグ使って同じようにやればできる
筆算で(2進数)割り算やるときとほとんど同じ あとは本買って嫁
>>416
return(-1);はよくエラーチェックに使う
-1が返ってきたらファイル開けなかったということになってるとおも
418:デフォルトの名無しさん
07/05/13 14:58:24
変数を使わずに1+2の計算結果を出すにはどのようなプログラムを組めばいいのでしょうか
419:デフォルトの名無しさん
07/05/13 15:04:32
printf("%d",1+2);
420:デフォルトの名無しさん
07/05/13 15:04:42
>>418
こういうこと?
printf("%d\n", 1 + 2);
421:デフォルトの名無しさん
07/05/13 15:05:48
演算子、変数と来たから次は何だろう
422:デフォルトの名無しさん
07/05/13 15:06:39
関数を使わずに(ry
423:デフォルトの名無しさん
07/05/13 15:08:56
C言語を使わずに(ry
424:デフォルトの名無しさん
07/05/13 15:10:33
頭を使わずに(ry
425:デフォルトの名無しさん
07/05/13 15:20:20
>>417ありがとうございます
426:デフォルトの名無しさん
07/05/13 15:35:27
30年とか表示するとき
int a;
a = 30年;
printf("%d",a);
でやると、年が邪魔っぽくて表示されない
どうやればいいの~?
427:デフォルトの名無しさん
07/05/13 15:37:35
printf("%d年", a);
428:デフォルトの名無しさん
07/05/13 15:39:42
表示以前にコンパイルできないのでは????
429:デフォルトの名無しさん
07/05/13 15:40:53
>>428
だから結果として年が邪魔で表示されないんだろう。初心者苛めんな。
430:デフォルトの名無しさん
07/05/13 15:41:45
せめて教科書読めよっていう質問ばっかりきてるなぁ
431:デフォルトの名無しさん
07/05/13 15:47:30
とうとう>>424の問題が出てきたか
432:デフォルトの名無しさん
07/05/13 16:04:10
一般的な入門書やりおわったけど、次はどんなステップを踏めばいいですか?
433:デフォルトの名無しさん
07/05/13 16:05:13
>>432
目標は何?
434:デフォルトの名無しさん
07/05/13 16:07:29
自分一人で基礎知識の応用が出来るようにすることかな。
処理速度とかも視野に入れた上で。
なんかテキトーに自作ツール作ってみるとか。
435:デフォルトの名無しさん
07/05/13 16:08:14
>>434は>>432へのレス
436:デフォルトの名無しさん
07/05/13 16:09:20
>>432
この世界は片っ端から全部覚えてたらキリがないから
ちゃんと自分がなにをやりたいのか見定めて進んで行かんと、
無駄に多大な労力を費やすことになるぞ。
437:デフォルトの名無しさん
07/05/13 16:09:22
作りたいもん作ればいいと思うぜ
438:デフォルトの名無しさん
07/05/13 16:12:40
>>434
自分で C のプリプロセッサでも作ってみたら?
確か以前、"未踏"でも採択されたことがあったはず。
439:デフォルトの名無しさん
07/05/13 16:33:39
Socket,データベース,文字列処理(正規表現含む)
これらができると幅がぐっと広がる…っていうか基本
後はアイデア次第
440:デフォルトの名無しさん
07/05/13 16:34:35
かなり意欲はあるのですが…やはりいろいろとオリジナルのアプリケーション・ソフトウェアを作ってみたいです。やはりそーゆー本を買っていろいろやってみるべきですか?
441:デフォルトの名無しさん
07/05/13 16:36:13
本を買う必要はないが、色々やってみるべきだろう。
442:デフォルトの名無しさん
07/05/13 16:38:52
>>439の中でまず文字列処理からやってみては?
とっつきやすいと思うよ。
ネットにも入門サイトとかいっぱいあるし。
443:デフォルトの名無しさん
07/05/13 16:41:18
入門書に文字列処理についての事が無かった様に思うのでお聞きします。文字列処理は初耳です。
444:デフォルトの名無しさん
07/05/13 16:42:23
>>440
作りたいものがあるならさっさと作ってみるのが吉
やってるうちに技術もついてくる
445:デフォルトの名無しさん
07/05/13 16:44:04
>>443
>入門書に文字列処理についての事が無かった様に思うのでお聞きします
strcpy() も文字列処理だと思うが?
446:デフォルトの名無しさん
07/05/13 16:44:16
現実問題Cで作るべきアプリなんて存在しないのが辛いな
447:デフォルトの名無しさん
07/05/13 16:45:51
みなさんご親切に…大変ありがたいです。ちなみに、みなさんはどのようなプロセスで、今のC言語のプログラミング力まで力を伸ばされたんですか?簡易的に話して頂けたらいいのですが…
448:デフォルトの名無しさん
07/05/13 16:47:17
ゲームプログラミングをやってみては?
囲碁・将棋・チェス・オセロとかね。
Cで作るのが最適。
449:デフォルトの名無しさん
07/05/13 16:50:23
>>447
宇宙からの電波
>>448
オセロなら6行で作ってた神がいたな
450:デフォルトの名無しさん
07/05/13 16:51:01
>>448 やはりそうしようかなと思います。Cで作るべきアプリケーションがそんなに存在しないようならば
451:デフォルトの名無しさん
07/05/13 16:51:53
自分は将棋が趣味で、自分より強い将棋プログラムを作ろうという目標があったから勉強した。
将棋プログラムってハッシュテーブルとかリストとかソートとかビット演算とか、
基本的なアルゴリズムが各所にちりばめられてるから勉強にはいいテーマだと思う。
452:デフォルトの名無しさん
07/05/13 16:52:40
>>450
>Cで作るべきアプリケーションがそんなに存在しないようならば
これって、どういう意味だと思っている?
453:デフォルトの名無しさん
07/05/13 16:56:43
>>452 C言語にはその点ではあまり需要がないものかと…
454:デフォルトの名無しさん
07/05/13 16:57:15
>>450
あとはOSに興味あるならLinuxのソース読んでみるとか
学ぶのは自分で作ってみたり本読むか知っている人に聞く
プログラミング力のうちの知識はそれで十分だが英語できるかどうかで
足りない知識の吸収率が変わってくる(最先端の知識・アルゴリズムなど)
あとは経験で補えるが数学力のあるなし(知識じゃなく頭良いかどうか)
でどこまで伸びるかが変わる
455:デフォルトの名無しさん
07/05/13 17:06:48
勉強のためにCの勉強してるなら
標準ライブラリのクローン(strcpy, strcat, printf, ...)と
UNIX系コマンドラインツール(cp, tail, head, sort, ...)のクローンを片っ端から作っていくと勉強になる。
サイズも小さいし、答え合わせ用のソースコードも(あまり初学者向けとは言いがたいが)あるし。
まあほとんど糞つまらん苦行に近いがコーディングは楽しいし一番無駄がないだろう。
456:デフォルトの名無しさん
07/05/13 17:08:09
うーん、自分はまだ、配列、構造体、ポインタ、ファイル操作、関数の作り方、変数、if文、switch文、for文、while文、をやってきたとゆう感じです。
457:デフォルトの名無しさん
07/05/13 17:10:47
>>456
じゃ、もう少し実践的な奴やってみたら?
URLリンク(www.kumei.ne.jp)
とか参考にしてウインドウ開いてみたりさ。
458:デフォルトの名無しさん
07/05/13 17:15:36
バブルソートを用いて
構造体に対して、データが格納された構造体配列を
学生証番号で降順にソートする関数sortIDと
点数で降順にソートする関数sortEngを作成しなさい。
データの入力は、関数input_seiseki_pを呼び出して行い、
次に「どちらで整列しますか(1:学生証番号、2:点数):」と表示し
その入力により関数sortIDと関数sortEngを選択肢、その結果を
関数seisekiを使って表示する関数meinを作りなさい
上記の問題において私なりに途中まで作ってみたのですが、
ここから先がわかりません。。
どなたかお知恵を拝借させて下さい
URLリンク(kansai2channeler.hp.infoseek.co.jp)
↑途中まで作ったソースです。
よろしくお願いします。
459:デフォルトの名無しさん
07/05/13 17:17:41
もういっかい違う入門書を買ってみろってことですか?
460:デフォルトの名無しさん
07/05/13 17:40:37
>>458
どこがどうわからないのかkwsk
学校とかのレポートなら解答出すわけにいかんし
>>459
>>457じゃないがおまえちゃんと>>457のリンク先見てみたのか?
簡単なデータペースやゲームの作り方も内容にあるだろ
それとも全部わかってるのかこの内容?
461:デフォルトの名無しさん
07/05/13 17:47:38
まぁ、猫が妥当かどうかは問題だがな。
462:デフォルトの名無しさん
07/05/13 17:48:44
ちゃんと見てませんでした。ごめんなさい。
463:デフォルトの名無しさん
07/05/13 18:10:29
URLリンク(www.geocities.jp)
のページにあるローレンツのプログラムをコンパイルしようとしたのですがエラーがでて出来ませんでした
開発環境に問題があると思うのですが、原因がよくわからないのでご教授願います
windowsXPでソフトは「C言語を始めよう!」、コンパイラはBorland C++ Compiler 5.5です
そのままコピペしてコンパイルするとエラーメッセージが(rktest.cはファイル名)
------ コンパイル開始 ------
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
rktest.c:
エラー E2140 rktest.c 17: ここでは宣言はできない(関数 main )
警告 W8057 rktest.c 57: パラメータ 't' は一度も使用されない(関数 f1 )
警告 W8057 rktest.c 57: パラメータ 'z' は一度も使用されない(関数 f1 )
警告 W8057 rktest.c 66: パラメータ 't' は一度も使用されない(関数 f2 )
警告 W8057 rktest.c 75: パラメータ 't' は一度も使用されない(関数 f3 )
*** 1 errors in Compile ***
------ コンパイル終了 ------
と出ます
スレ違いのような気がしますが、該当スレが見つからなかったのでここで質問させていただきました
464:デフォルトの名無しさん
07/05/13 18:18:13
>>463
そのコードはANSI Cに準拠していない。
FILE *output; の行を main 関数の先頭に持ってくるといいよ。
465:デフォルトの名無しさん
07/05/13 18:39:02
4つくらいのデータを1つのノードとして
そのノードを2二次元配列の1文字分のように扱いたいんですけど、
構造体を設定して
strcut ABC{
char
char
char
};
struct ABC data[][];とできますかね?
466:デフォルトの名無しさん
07/05/13 18:40:59
struct ABC data[ ][ ];です
467:デフォルトの名無しさん
07/05/13 18:41:17
なんでやってみないの?
468:デフォルトの名無しさん
07/05/13 18:42:18
いややったんだけどセグメンテーションエラーだから
無理なのかと。
469:デフォルトの名無しさん
07/05/13 18:44:16
>>468
コンパイルできないはずだけど
470:デフォルトの名無しさん
07/05/13 18:45:21
>>469
どういう意味ですか?
471:デフォルトの名無しさん
07/05/13 18:46:05
>>468
コード貼ってみろよ。中途半端に省略しないで。
472:463
07/05/13 18:47:21
>>464
回答ありがとうございました
警告は消えませんでしたが、エラーが消えて無事コンパイルすることができました
この警告は無視しても問題ない範囲なのでしょうか?
原因を把握していらっしゃるのでしたらお伺いしたいのですが
473:デフォルトの名無しさん
07/05/13 18:48:14
>>472
使ってない仮引数を教えてくれてるだけ。無視しても問題はない。
474:デフォルトの名無しさん
07/05/13 18:49:44
>464
コンパイラがANSI Cに対応してないんでねーの?
475:463
07/05/13 18:50:31
重ね重ねのご親切ありがとうございました
476:デフォルトの名無しさん
07/05/13 18:51:37
>>474
ANSI Cでは変数はブロックの先頭のみで宣言できる。
bccはANSI準拠。
477:デフォルトの名無しさん
07/05/13 18:54:07
struct ABC
{
char name[10];
char initial[10];
char home[10];
};と構造体を設定
struct ABC data[10][10];
int i,j;
for(i=0;i<10;i++){
for(j=0;j<10;j++){
strcpy(data[i][j].name,NULL);
strcpy(data[i][j].name,NULL);
strcpy(data[i][j].name,NULL);
}
}
一部ですけども、その二次元配列の中身の全ての各部門の初期化をしたいのですけど
この時点でセグメンテーション違反がおきるわけです。
478:デフォルトの名無しさん
07/05/13 18:55:21
strcpy(data[i][j].initial,NULL);
strcpy(data[i][j].home,NULL);です
479:デフォルトの名無しさん
07/05/13 18:57:10
馬鹿だろ。
strcpy(data[i][j].name, "");
480:デフォルトの名無しさん
07/05/13 19:04:35
>>479
ありがとさん
481:デフォルトの名無しさん
07/05/13 19:07:04
まあ
data[i][j].name = '¥0';
ってやった方がいいとは思うけど初期化だから別にいいか。
482:デフォルトの名無しさん
07/05/13 19:07:45
うわ。間違い
data[i][j].name[0] = '¥0';
こう
483:デフォルトの名無しさん
07/05/13 19:54:50
大学でC言語を習っています。
ifやforといった基本的なことは理解しているつもりである程度プログラムは書けます。
今、アルゴリズムの授業を受けているのですがポインタや構造体が理解できません。
参考書に載っているソースを自分で打ち込んで実行したり、少し変えたりしているのですがどうも暗記っぽくなっています。
そのため「○○をポインタと構造体を利用して作れ」と言われても何からしたらいいかわからない状態で。
ポインタや構造体はC言語で一番重要と言われているので是非自分のものにしたいです。
皆さんはどうやってポインタや構造体を理解していきましたか?
484:デフォルトの名無しさん
07/05/13 19:57:33
サンプルコードをいくつか読めばそれで理解できた。
485:デフォルトの名無しさん
07/05/13 20:10:22
使ってりゃ理解できた
486:デフォルトの名無しさん
07/05/13 20:11:48
>>483
わからないところは図を描いて理解。
デバッガで全変数表示してつながり・変化を確認。
487:デフォルトの名無しさん
07/05/13 20:12:40
くそなげえプログラム書いてたら飯なんてどうでも
よくなって4時間経過w
488:デフォルトの名無しさん
07/05/13 20:30:41
さっき構造体での二次元配列はどのようにすればいいのかを聞いたものですけど
その二次元配列data[i][j]において
1行さすのはdata[i]でいいのはわかるのですけど
1列をさすのはどうおけばいいですかね?
489:デフォルトの名無しさん
07/05/13 20:44:39
基礎からやり直せ
490:デフォルトの名無しさん
07/05/13 20:46:59
>>488
列は無理。
491:デフォルトの名無しさん
07/05/13 20:47:08
>>488
メモリの配置を想像してみろ。
列は分断されていて連続したメモリとしてアクセスする方法はない。
492:デフォルトの名無しさん
07/05/13 20:57:08
>>483
ポインタのイメージがつかめない場合はその都度アドレスと中身を表にして書いて理解
ポインタpのpと*pと&pの違い,あるいは変数aのaと*aと&aの違いが
わかっていれば大丈夫のはず
なぜポインタが必要かっていう設計思想を知りたければアセンブラとかを
学んでみるといいいかも
>>488
他の言語なら実装されてたりするけど
C言語ではそういう便利な機能は基本的に用意されてない
493:デフォルトの名無しさん
07/05/13 23:12:11
転職してプログラマになりたいんだ。
そのためにCとC++をマスターしたいんだが…。
それで今は一応C言語の基礎を終わらせたんだけど
C言語で関数やアルゴリズムやAPIなども覚えてから
C++行ったほうがいいのかな?
それとも先にC++でオブジェクト指向とか把握してから
いろんなこと手を出した方が良いかな?
494:デフォルトの名無しさん
07/05/13 23:15:29
さっさとC++池
今時Cなんてほとんど使わないからC++からCのコードを利用する際の最低限の知識さえあれば十分。
495:デフォルトの名無しさん
07/05/13 23:16:05
ぶっちゃけ経験年数のが大事。
マの真っ当な評価なんてマ以外に出来るわけがないんだから。
496:デフォルトの名無しさん
07/05/13 23:22:16
あらためてアルゴリズムを考えてみると
その列であてはまるのは1つだから
列指定にしなくてよかった。
497:デフォルトの名無しさん
07/05/13 23:23:21
>>494
Cは使わないのか
じゃC++の勉強にいこうかな
まだCでコードとか書けないけど大丈夫かな・・・
>>495
年齢が30前後とかだと未経験じゃプログラマになるの難しいかな?
498:デフォルトの名無しさん
07/05/13 23:29:01
>>497
おまいさんはマ板にお逝き。
499:デフォルトの名無しさん
07/05/14 00:00:23
>>497
どんなプログラムの仕事がしたくてどんな会社かによる
なんか実用的(ゲームでもいい)なプログラムひとつでも組んでると
就職のときにアピールにはなる
とりあえずマ板へ池
500:デフォルトの名無しさん
07/05/14 01:50:07
プログラムの処理がどの程度完了しているのかを示すことを試みたのですが,
うまくいきませんでした.具体的には,以下のことをしました.
#include<stdio.h>
int main(){
int i, j;
for(j=0; j<10000; j++){
for(i=0; i<100000; i++){
}
if((j%1000)==0)printf("*");
}
printf("\n");
return(0);
}
j が10000ループされますが,1000ループごとに * を1つ出力し,
* が10個になったら処理完了を知らせるというものです.
上のソースコードのようにしてみたところ,j のループを出てから
* が10個同時に表示されてしまいます.
どのように書けばよいのでしょうか?お願いします.
501:デフォルトの名無しさん
07/05/14 02:02:37
>500
ちゃんとjのループの途中で*が表示されてるけど?
ただ、1000個ごとなら(i%j)==999だろう。
502:デフォルトの名無しさん
07/05/14 02:07:08
バッファフラッシュしなきゃいけないとかそーいう問題じゃないの?
環境は?
503:デフォルトの名無しさん
07/05/14 02:09:42
ANSI C準拠だったら整数の範囲って32767までじゃなかった?
504:デフォルトの名無しさん
07/05/14 02:16:56
>>500
for(i=0; i<100000; i++){
i 使って無いじゃんwwww
ワロタw
505:デフォルトの名無しさん
07/05/14 02:18:50
int に10000も入れれませんwww
基本からやり直せよwww
506:デフォルトの名無しさん
07/05/14 02:19:42
>>500
if((j%1000)==0){ printf("*"); fflush(stdout); }
という話か?
507:デフォルトの名無しさん
07/05/14 02:20:26
>>504-505
釣りにしても ひどい
508:デフォルトの名無しさん
07/05/14 02:22:24
C とC++ の違いを分かってない人がいっぱいいるので一応書いておく
Cの構造体には変数しか設定できないのですが
C++は構造体の中に関数を入れれます。それがクラスって呼ばれるものです
C++でヤリなされw
509:デフォルトの名無しさん
07/05/14 02:23:17
何かの処理の進捗状況を表示する部分について質問してるんでしょ。
単にその処理の部分は省略しただけなんじゃないか?
510:500
07/05/14 02:25:02
>>501-508
レスありがとうございます.
>>502さん及び>>507さんのもので,求めていた結果を得ることが出来ました.
これからfflushをググってみます.
>>504-505が釣りかどうかすら分からない自分が悔しいです.
勉強に励みます.ありがとうございました.
511:デフォルトの名無しさん
07/05/14 02:26:59
進捗状況ってさ
ソースに
printf("処理○○終わり");
って書いていけばいいんじゃないの?
完成したら消せばいいわけだし
512:デフォルトの名無しさん
07/05/14 02:28:26
だからfflushはだめだってw
513:デフォルトの名無しさん
07/05/14 02:30:15
ほかっとけ
初心者だぞ相手はwww
514:500
07/05/14 02:31:20
>>509
実際は処理内容が含まれますが,それとは別に処理内容を全部消したもの
(>>500そのもののソースファイル)を作成して実行しても * が一度に出力された
ので質問をしにきました.
>>511
1試行で数分かかる繰り返し計算処理なので,何%終了したのかを概数でも
良いから表示させたかったのです.
>>512
駄目なのですか??