1 :
デフォルトの名無しさん :
2007/05/08(火) 19:39:26
前スレ
>>996 char c;
char str[100];
もしかしてこのcとstrが同じだと思ってるとか?
996じゃないけど C言語の場合 char c; /* 文字型の宣言 */ char str[100]; /* 文字列型の宣言 */ Java とか C# とか char c; string str; こういうことなのかな?なんか変なかんじがする…
その本はstrがポインタというような事を言ってるはず。 さすがにcがポインタだとは言わないだろ。
5 :
デフォルトの名無しさん :2007/05/08(火) 19:48:20
str はある意味ポインタと言えなくはないが、 少なくともポインタ変数ではないし、 ポインタと説明してる紛らわしい本はあって欲しくない。 文字列をポインタを通して渡す、程度の話をしてるんでないかな。
前スレ975は期待する動作と実際の動作を書けよ。 上手く動かないだけじゃ何を意味してるのか曖昧だぞ。
9 :
デフォルトの名無しさん :2007/05/08(火) 19:56:10
>>7 期待している動作
printf ("%d\t%d\n",ran,kai);を10回実行し、11回目のループ時にEndを吐き出す
表示例は、以下の様な感じ
32 1
1 2
176 3
43 4
22 5
11 6
299 7
231 8
32 9
98 10
End
実際の動作
何も表示されない
やっぱりgotoじゃ無理なんですかね?
前スレ
>>990 授業とかはあくまで補助や学習スケジュール管理と考えたほうがいい
専門学校なんかは1年〜数年単位ですべてが学べるようになっているはずだから
教え方や進歩速度に不満があるならとりあえず教科書読んで池
ポインタもそのうちしっかりやるだろ
全ての制御文は if と goto で書けるから goto で無理なんてことはあり得ない。
12 :
デフォルトの名無しさん :2007/05/08(火) 20:05:00
プロンプトのコピペ C:\KD\sk\practis\goto>bcc32 goto.c Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland goto.c: Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland C:\KD\sk\practis\goto>goto C:\KD\sk\practis\goto>goto C:\KD\sk\practis\goto>
practisだから失格
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int ran; int kai; srand((unsigned)time(NULL)); kai = 0; LOOP: if(kai >= 10) { goto END; } ran = rand() % 300 + 1; printf("%d\t%d\n", ran, kai); ++kai; goto LOOP; END: puts("End"); return 0; }
15 :
デフォルトの名無しさん :2007/05/08(火) 20:17:03
ちゃんとコンパイルしてるか?
どうせどっか書き写し間違えてんじゃないの?
訂正 goto.exe ↓ .\goto.exe
20 :
デフォルトの名無しさん :2007/05/08(火) 20:21:36
21 :
デフォルトの名無しさん :2007/05/08(火) 20:23:51
>>18-19 しまった、gotoはコマンドなのか・・・
これで解決しました
済みませんでしたあああ(ノ-`)
>>20 プロンプトのコマンドと被るような名前をやめればおk
copy dir del mkdir などなど
そういうオチかw なるほど
さすがにファイル名をgotoにしてるとは誰も予想できなかったなw
いやいや、
>>12 で気づくべきだった。
俺も失念してたぜ。
完全に予想外だったぜ…
27 :
デフォルトの名無しさん :2007/05/08(火) 20:30:45
.exeつけたら全スレのソースでも動きました!! 感激です>< 因みに、ファイル名の8割が関数名なので、こういうことは偶にあったんですが 今回はコマンドエラーが出なかったので全然気付きませんでした(ノ-`)
なるほど べんきょうになったw ついでにpractisも直したといたほうがいいぞw
29 :
デフォルトの名無しさん :2007/05/08(火) 20:39:29
>>27 全スレ→前すれ
>>28 >>13 で言われて気付いたので直そうとしたんですが
システム系統以外、全部落としてもシステムから蹴られるので
今度再起動した時にでも直しておきます
神代刹那?
31 :
デフォルトの名無しさん :2007/05/08(火) 21:14:36
webマトリックスにて、 セッションによるページ間のデータの転送の仕方がわからないのですが・・・ 例えば、BMP(体脂肪の奴)を測定するプログラムで、 1ページ目で体重・身長を入力して 2ページ目で結果を表すという流れなんですが・・・ 色々調べたり試行錯誤してみても全くわかりません。 ご教授願えませんか??
>>31 C関係ない気がするが適当にエスパーして答えとく
・1ページ目で入力されたデータを何らかの識別子と共に保持しておく
・2ページ目にその識別子を埋め込んでおく
・2ページ目からの入力がきたら、識別子から保存してるデータと関連づける
BMI?
34 :
デフォルトの名無しさん :2007/05/08(火) 21:44:19
FOX★公認!!!
俺たちのクリックで日本を一位にしようぜ!!
“30年は日本に手は出せないな”という勝ち方をしたい
http://wwwww.2ch.net/test/read.cgi/news4vip/1178602852/ 1. ポーランド 139,797,680
2. チリ 137,040,439
3. ★日本 86,475,213★
4. イスラエル 80,930,530
5. スロベニア 57,137,042
6. フィンランド 40,857,499
石を投げる戦争から人は進化・進歩を遂げ、剣や槍などの武器をもって戦うようになった
人間はさらに発展し兵器を使う戦争を始めた
そして今、指先一つを武器とした電脳戦争が勃発したのであった・・・
皇国を勝利へと導くには貴様らの参戦が不可欠である
・戦場
http://www.clickclickclick.com/default.asp ・まとめサイト
http://www33.atwiki.jp/clickvip/
>>35 スコープ外で宣言された配列の大きさは取得できない
関数引数で渡されるのはあくまで配列先頭へのポインタのみ
それができるならライブラリ関数でわざわざバッファサイズ指定したりしないだろ?
しかしout ofの方のsizeof(v1)でいれてるv1というのもポインタのはずだ。 だったらこっちも4とでるべきなのでは?
>38 >36
サブルーチン限定仕様なんですね。 では、実際この関数で配列の大きさを求めるにはどうしたらいいのでしょう? rubyでは.sizeでよかったんですが・・計算系はruby遅すぎて;;
関数内で求めなければいい
それじゃ関数じゃありません。
ruby でもやってろw
いやlinuxをしててC言語が必要なのでここは譲れません。 関数内でもいけるはずです。どうしたらいいでしょう? もしやひとつひとつ取得していく系?
>関数内でもいけるはずです だからできんといっとろーが
完全に不可能なんですか?
不可能です。
だから普通は配列の要素数も引数に与える
count = 0 for(i=0; a[0]!=null; i++){ count++; } などは?
null って何だよ。
>>48 配列の要素数が未定なのですが?
ベクトルとベクトルを渡したら内積が得られる。
引数は2つのはずです。
nilか。 nullじゃなかった・・・
何言ってるか分からんが 無理なもんは無理 まじで無理
疲れるなあ・・・。
政府の Ruby 計画が心配になってきたぞ。
>>51 要素数はどこかで分かってるはずだ。
inner_product 内に入ってしまうとどうやっても分からないから、
inner_product に要素数を渡すようにするしかない。
nilって何だよ。
(sizeof(配列)/sizeof(配列の要素))を引数に入れとけばいいんじゃ?
引数が増えるのが嫌だったら、 値と要素数を持った構造体を作って管理しとけ。
もうvectorクラスみたいなの自作するしか
自作っつーか、ライブラリ拾ってこい。
何こいつ 理解力無さ杉
rubyのようにCもできると思っているんだろうね rubyに汚染されすぎ
rubyでは隠蔽されていた色々な事に全く気づいてなかったんだねぇ
Cじゃそういったことはすべて自分で実装するかライブラリ使わなきゃいけないってのに 動的に確保したメモリも開放しなさそう
自分で実装ってインラインアセンブラ使ったりするの? と初心者が申しております
そうそう、便利≒隠蔽の対価として、性能のトレードオフ 性能を求めるならば、対価の代償として、より低級言語のしがらみ、 メモリの動き、キャッシュの動き、CPUのプリフェッチぐあいを理解しないと速くはならないね
もうおとなしくC++ & STL使うといいよ #include <vector> #include <iostream> typedef std::vector<double> vec_t; typedef unsigned int UINT; double inner_product (const vec_t& a, const vec_t& b) { typedef vec_t::size_type vec_sz; vec_sz len(a.size()); std::cout << "length of a:" << (UINT)len << ", size of a[0]:" << (UINT)sizeof(a[0]) << '\n'; if (len != b.size()) { std::cerr << "can not define inner product of these vectors" << std::endl; return 0; } double ip(0); for (vec_sz i = 0; i < len; ++i) ip += a[i]*b[i]; return ip; } int main () { // 1.3,0,1 vec_t v1; v1.push_back(1.3); v1.push_back(0); v1.push_back(1); vec_t v2; v2.push_back(2); v2.push_back(3); v2.push_back(4); std::cout << "length of a:" << (UINT)v1.size() << ", size of a[0]:" << (UINT)sizeof(v1[0]) << '\n'; std::cout << inner_product(v1,v2); return 0; }
>>51 何言いたいのか意味不明だが、これで納得できないなら、そういうことが出来る他の言語使ってろ
読みづらいがJISのホームページでPDF化された奴も見れるから確認なり好きにしろ
6.5.3.4 sizeof演算子の注釈(84)
配列型又は関数型をもつと宣言された仮引数に適用する場合、sizeof演算子は、
型調整された(ポインタ)型の大きさを与える(6.9.1参照)。
(JIS X 3010:2003より引用)
>>68 要素数が欲しければtemplate使って配列の参照を引数にするだけでいいだろ。
まぁ俺ならそれ以前にstd::inner_product使うけど。
テンプレート使ってやってみました 漏れの知識の程度じゃ読みにくくなるだけしたまる #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; }
float なんて精度悪いもの使うなよ。 double 使え、double 。
>>71 訳の分からん自作マクロ使って可読性落とすぐらいなら
上で書かれてるように、Vector型とstd::inner_product()使えばいいだろ
なんのための標準ライブラリだと思ってるんだ
先にJavaを試してみたら? 正直、Ruby→C はキツいだろ
どう見てもこちらのほうが楽です、本当にありがとうございました ってかこれって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; }
namespaceとかClassはC++の仕様ですよね? Classがあるなら使いますよ。 でもね、C言語じゃないといけないんです。linuxのデフォだからね。 Cを勉強するのは計算が早いからとrubyのライブラリが作りたいから。 あとlinuxプログラミングがしたいから。
CがLinuxのデフォってあんた…… それならC++でもいいでしょうが。
確定したライブラリがない。 C++はもう終わった言語。手続き型にクラスをくっつけただけの言語でしょ。 純粋なrubyこそソフト開発に向いてるが、やはり速度がネック
m9(^д^)プギャー!!
勘違いや思い込みが激しいな こんな奴rubyもたいしてできんだろ
ディレクトリ名をジャスティスに変えるとすべてが上手くいく
sizeof自体がどうなってるか分かりませんか? あとC言語って自由に配列数を増やしたり減らしたり出来ない? 出来たらうれしい
rubyじゃないんだから・・・
>>82 sizeofは、コンパイル時にコンパイラが計算する。
配列要素数の増減はできないので、realloc()したりC++のvectorを使っ
たり。
reallocというのは確保領域を変えるってことですか? それなら手間が増えるだけで増減可能ですね。 sizeofはライブラリではないんですか? sizeofはどうやって書かれているかを聞いています。
C++は使わないことにしています。 なぜならC++はC言語の拡張とはいえないからです。 オブジェクト指向としてはrubyがもっとも純粋であることは確かですし Cとの互換性が消えたので、linuxで使えません
オブジェクト指向としての純粋性を追求する事に何の意味が? Cとの互換性が不完全でもLinuxでC++は使えるが?
>>85 sizeof はコンパイラが解釈する演算子の内のひとつです。関数ではありません。
システムはCで書かれている。 C++では書かれていない。これは互換性が消えたことによるものである。 linuxといえばC言語 C++は窓用言語 rubyはクロスプラットフォームの純粋オブジェクト指向型言語
つまりLinuxのシステムだけを書くためにCを勉強中って事?
>>85 reallocはただの動的確保で配列関係ないから
配列の要素数増減は不可でFA
rubyではどうやって配列の要素数増減ができると見せかけられたかを考えてみるといいよ。
どうせRubyの事も大して分かってないんだろうな
それは俺も思った
突っ込みどころがあり過ぎるが、たぶん釣りだからガマン。 うちの会社に来ないことを祈る。
>>91 メモリ確保した所を配列として扱うなら可能だと思うが。
高級言語から入るとこれだからいかんな。 アセンブリ言語の洗礼を受けてくるといい。
>>97 すいません。8080, Z80, 6502, 6800, 68000 ぐらいまでしかやってません。
この頃の x86 系についてはよく分かりません。
釣り来た
rubyはかなり分かってます。 linuxの為にCを勉強しています。当然です。ちなみにVine
釣りくせー
「かなり分かっています」 と自信を持って言う奴の 99% は、大して分かっていない。 なぜなら、言語の奥深さを知ってる者は、おいそれとそんな事は言えないからだ。 ほんの一握りのエキスパートか、Ruby 処理系の開発者か、 そうでなければ見栄っ張りの小物にしかそんな事は言えん。
というかこういうやつほどコテつけて欲しいな ただの騙りの可能性も否定できないし もしすべて本人だったらかなり・・・
Linux上で動くアプリケーションを作りたいだけなら、g++使えばいいだろうし、 Linuxのメジャーなディストリビュージョンなら、 g++がない(gccや下手したらccだけしかない)なんて状況を仮定する必要なんてないはず。 また、完全な互換性がない今のC++でも、それなりにCらしいコードも書けるし。 このスレで出てくるようなコードなら、ほとんどvoid*周りしか問題にならないと思う。
なんか勘違いしている香具師が多いようだが、Cでも可変長配列はあるぞ。 それから、malloc()などで確保した領域を配列のように運用することはできてもそれは配列じゃないぞ。 #まぁ、可変長配列も伸び縮みできるわけじゃないがな。
C99 なんてあってないような規格で語られてもな。
意味わからん
>>106 身近なところではgcc, icc, SunのccがC99準拠なんだが。
後二者はデフォルトだし。
しかし、ほとんど使われていないのもまた事実。
自分が使えないからといって、無闇に否定するのは如何な最中と。
お前が使ったこと無いだけ
VC が準拠しない限り、使用人口は増えない。
C99がOKでC++駄目ってのがよくわからん
使った事ないんじゃなくて、使う気がしないだけ。
#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; } どうしてだお?
>>117 printf("%d\n", a[3]); // Access Violation
でないお gccだけど
どっちかっつーとこっちのがヤバい。 a[3] = 4;
size is 3 a[3] is 4 こうなったお
a[0] = 1; a[1] = 2; a[2] = 3] a[3] = ?
どうしてって何が?
不変な表明ってこういうときに役に立つの?
Cに不変表明なんかないだろ。
assertがそれにあたるんじゃ
>>117 のなんて、そもそもインデックスと要素数の関係自体理解できてないんだから
assertとかそういう次元の問題じゃないだろ
あれは何かの拍子で変な値がインデックス用の変数に入り込んだりするのを発見するため
128 :
31 :2007/05/10(木) 02:07:35
>>32 それはわかるんだけど、それから先が全くわからなくて・・・
というかまず何を書けばいいのかもわからない・・・ド素人でスマン。
助けて・・・
きもちわる・・・
130 :
デフォルトの名無しさん :2007/05/10(木) 02:23:34
webマトリックスてなんすか? とりあえずGET,POSTとだけ言ってこ
アク禁
>>117 もしや a[3] = 4; の所で何かエラーが出て欲しかったのか?
ま、しかし、C言語は元々そんな生易しい言語ではないのだよ。
だろうな しかしなんでコンパイラ通っちゃうのかよくわからん
そういうのでもコンパイルを通すように作られてるから
文法的には正しいから
>>117 JavaとかC#とかしかやったことが無い人?
>>133 エラー出すようにするとコンパイラ作るのが面倒だろ
なるほどw 先頭要素のポインタさえありゃ動くからあとはシラネってことか
仕様通り
indexに変数が入ってる場合に、その変数が取り得る値をチェックするには実行してみないと わからないんじゃ?
これを応用(悪用?)した技もあったしな 構造体の最後の要素を [1] にして、使いたい配列の大きさ分大きめにallocして使う いつからか 1 無くてもコンパイル通るようになってたっけな
JavaとかC#の配列だと境界チェックしてるから範囲外なら例外が投げられるけどCではそういうのが無いからね。 C#はLengthプロパティ使ってループ回す場合はチェックはオフになったり monoのC#コンパイラには配列境界チェックをしないようにするオプションがあったりするけど Cは常にチェック無し。 まぁチェックがある分安全で遅いか、無い分危険で速いかだな。Cは後者。
143 :
デフォルトの名無しさん :2007/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 = 大文字であるかを判定
// 小文字変換処理 text = tolower (text); // tolower = 小文字変換 printf ("入力されたアルファベットの小文字は %c です。" ,text); } else { // エラー処理 printf ("エラー\n" "アルファベット以外の値が入力されました。" "\n" "継続して入力しますか?\n" "Y/N"); text = getchar ();
switch (text) {
/*
switchが何故か機能しない
書式ミス?
*/
case 'Y': goto first;
break;
case 'N': goto end;
break;
}
}
end:
return 0;
}
>>144 の名前は気にしないでください。。
switchの式って整数型に限られるんじゃ無かったっけ?
textはどう見ても整数型だろ
いや、別にこれでいいけど、2回目のgetchar() では最初のgetchar()時に 入力した2文字目を取ってきてるからこうなる。 具体的には改行だな。それ以外でも2つ以上入れてりゃ同じだ
alphabet以外の文字、たとえば 1 を入力してテストしてみると swtich文に入って行かない。きっと1の後ろに"\0"とかあって うまくゆかないのだろう。 text = getchar (); // ここで "\0" を喰わせる text = getchar (); // きっと入力待ち状態になるはず とか思ってしまったトーシローなのは俺だけでいいと思うんだ…orz
わざわざそんなこと書かなくてもいいよ
>>151 つまり、余分な入力バッファはクリアする必要がある。
getchar() なら、'\n' が来るまで読み捨てるとか。
while (getchar() != '\n')
;
例えばこんな感じで。 fflush(stdin); は物議をかもしそうなのでお試しでw
あとは、switch - case にdefault: は必要だと思うぞ、特に今回のは。
>>151 scanf(" %c", ...) を使う。
goto の使い所がダメな感じするな。 goto 使って見辛くしてどうする。 お前は昔の BASIC かと言いたい。
どうでもいいけどgotoつかったらbreak;いらなくね?
いらないが付けるクセはつけといてもいいかも あとそれ以前に慣れないうちはdefault付けるクセをつけといたほうがいいと思う
ANSI-Cを勉強してまだ日も浅いのですが 四則計算の 23 / 3 =7 アマリ 1 という風にアマリを出すにはどのようにすればいいのでしょうか?
mod
普通に%じゃあかんのか?
%dane
%d姉
〜〜省略〜〜 int a,b,c; scanf("%d",&a); scanf("%d",&b); c= a % b ; printf("%d % %d =%d\n",a,b,c); return 0; でいいのでしょうか?
だめ
> printf("%d % %d =%d\n",a,b,c); printf("%d %% %d =%d\n",a,b,c);
あとbが0かどうかもチェックしたほうがいいな。
分岐か何かが必要なんですね、if 0〜〜とかそういう感じなんでしょうか
聞く前にとりあえずコード書いてコンパイルしてみろ。
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?
>>164 %% って \n とかのエスケープシーケンスと同じものと考えておkですか?
>>170 エスケープシーケンスで例えるなら \\ やね。
>>169 is系関数に渡すときは unsigned char でキャストするのは定石。
もう多すぎて面倒なら、char を符号無しにするコンパイラのフラグを指定汁。
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キーなどを押すことで終了するようにしたいです。 よろしくおねがいします。
>>172 それだけだとSJIS の時は、
全角文字の2バイト目で真になる可能性があるな。
リードバイトの判定とかした方がいい。
>>169 は EUC みたいだから大丈夫だとは思うが。
>>173 system("gnuplot < data.txt");
とかじゃだめかな?
data.txtはあらかじめ作っておく。
>>172 ,174
ありがとうございます。m(_;_)m
>is系関数に渡すときは unsigned char でキャストするのは定石。
助かります。
>>173 とりあえず表示を残すだけなら "gnuplot -persist" とすれば良いけど、
グラフを表示しているプロセス(gnuplot_x11)のIDを
外部プログラムを使わずに見付けて殺す方法が分からん。
system("gnuplot ... &")ではダメ? 真面目にプロセス管理したいならfork()/exec*()を使う羽目になるけど。
179 :
デフォルトの名無しさん :2007/05/11(金) 06:20:36
初歩的な質問ですがお願いします。 strlenなどの文字列を扱う関数は引数としてchar型の文字列への先頭ポインタをとります。 つまり、strlen(s)とすると配列sの先頭アドレスが渡され、結果が返ります。 しかし、strlen("test")とした際も結果は出力されます。 この"test"という文字列はどのようにプログラム内部で扱われるのでしょうか? 自動的に一時的にメモリに確保されるのでしょうか? では宜しくお願いします。
>>179 exeファイルの中に入ってるでしょ
実行時にどう配置されるかはシステムによる
プログラム上ではポインタとして扱われる
>>179 ほぼ、static const char foo[] = {'t', 'e', 's', 't', '\0', }; strlen(foo);と同じ。
クリリンのAAきぼん
183 :
183 :2007/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 :2007/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を他の優先度のスレッドにのみ譲る。 ということでしたよね?
>>183 Win32では 「0を指定した場合、 スレッドは、 実行準備ができている同じ優先順位のほかのスレッドにタイム スライスの残りを譲ります。」
なんでMSDN Libraryで調べれば直ぐ分かるような事を質問するんだろうな
187 :
183 :2007/05/11(金) 20:40:06
188 :
デフォルトの名無しさん :2007/05/12(土) 00:12:06
printf("%s/n","Hello World"); 上のprintf文の%sでどのように"Hello World"を処理しているのか分かりません。 どなたかご教授して下さい。
意味が分からん。
191 :
デフォルトの名無しさん :2007/05/12(土) 00:25:14
192 :
デフォルトの名無しさん :2007/05/12(土) 00:33:48
>>190 ごめんなさい、でも教えてください蟹
Viiv
ミ(エ)ミ....
あのーコールバックの書き方が解からないのですが 助けてください。動作するサンプル提示してくれませんか?
何のコールバックだよ…
196 :
蟹NIC :2007/05/12(土) 00:37:47
printf("%p/n","Hello World"); 上のprintf文の%pでどのように"Hello World"を処理しているのか分かりません。 どなたか教えてください。 Viiv ミ(エ)ミ....
197 :
デフォルトの名無しさん :2007/05/12(土) 00:49:14
>>188 可変長引数でも調べて推測してください。
様は第一引数の中を読んでいって、%フラグに当たったら対応する引数をフラグに従って変換した上で元の文字列に挿入してるんだと思う。
別に挿入なんかしてないけどね。
199 :
デフォルトの名無しさん :2007/05/12(土) 01:55:15
そんなに知りたいならglibcのソースでも読めばいいのにな
ソースリーディングは初心者には難しい
>>196 ------------------------------------------------------------
60 名前: デフォルトの名無しさん 投稿日: 2007/05/12(土) 00:10:17
printf("%s/n","Hello World");
上のprintf文の%sでどのように"Hello World"を処理しているのか分かりません。
どなたかご教授して下さい。
------------------------------------------------------------
この質問って流行ってるのか?
馬鹿がマルチしてるだけじゃない?
204 :
蟹NIC :2007/05/12(土) 03:16:31
>>202 いいえ、まマイブームレベル位かな
Viiv
ミ(エ)ミ....
205 :
デフォルトの名無しさん :2007/05/12(土) 06:53:20
>>117 配列は番兵を使うために便宜的に要素+1の部分にアクセスできるんだぜ?
>>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)。
ポインタを向けるだけなら未定義動作にならないってだけでしょ
>アクセスできる をどう好意的に解釈しても、ポインタを向けるだけ、にはならん罠。
どちらかというと205宛てに書いたレスなのだが…
>>205 >配列は番兵を使うために便宜的に要素+1の部分にアクセスできるんだぜ?
マジレスするとそれは文字列のときだけな。
char a[] = {1, 2, 3}; // sizeof a == 3
char b[] = "123"; // sizeof b == 4
釣りだって
知ってるよ
char c[3] = "123";
charの配列だけchar配列じゃなくて文字配列って言うことが多いし 文字配列には後ろに'\0'が付くみたいな覚え方をしてたから なんかcharの配列だけは特別な代物のように思ってた過去
文字配列とは言わんなあ。 文字列としか。
私の処で文字配列といった場合、それはナルターミネートされていない。
相変わらず嘘と無価値な雑談でしか伸びないスレだな
君も仲間だ、歓迎するよ
219 :
デフォルトの名無しさん :2007/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の仕様に問題があるのでしょうがこれの理由と回避方法をご教示願いたいです。
>>219 ・文字と文字列の違いを理解しよう。
・scanf()の仕様に気をつけよう。
演算子を使わないで割り算や掛け算ってどうやるんですか?たとえば9÷3
演算子を使わないで演算するには、関数を使えばいい。
>>222 関数を自分でつくるということですかね?
>>219 scanf("%c",&e);
↓
scanf("%*[ \t\n]");
scanf("%c",&e);
変数b を読み込んだ後、改行文字がバッファに残っている
バッファに残った改行文字を次の scanf("%c",&e); で読み込んだため
変数e には改行文字が入ってしまった
この問題を回避するには、バッファに残っている改行文字を読み飛ばせば良い
つか入門書安易にscanf使いすぎ。 エラーチェックしなさすぎ。
227 :
デフォルトの名無しさん :2007/05/12(土) 13:54:31
>>224なるほど ありがとうございます。
>>222 数学を一度勉強した方がいいですね。
具体的には線形空間というやつですよ・・・
数学の話じゃないだろ・・・常識的に考えて。
>>228 演算子を使わずにできる?
もちろんシフト演算も無しで
>>221 関数以外だとインラインアセンブラ使えば
演算子を使ったとは言われないとか?
設問の定義があいまい
// 演算子を使わない足し算。 int add(int a, int b) { FILE * fp = fopen("/dev/null", "w"); int rtn = fprintf("%*s%*s", a, "", b, ""); fclose(fp); return rtn; }
int add(int a, int b) { }
ミスった。 int add(int a, int b) { __asm { mov eax, a add eax, b } }
そういえば関数呼び出しの括弧も演算子なんじゃなかったっけ?
>>222 がなんでそんなことをしたくて何を「演算子」と呼んでいるかしらんが
if文だりなんだり使って全部作ればいいんじゃね
足し算なら1+1 = 2
だからa,bが両方とも1なら2を出力するというように
それらをすべて0〜9のを自分でつくる
あと桁上げの関数ももちろん自分で作って
比較にも演算子が必要だな。
if じゃなくて switch ならイケる。 ただ、コード量が多すぎて int 全部を網羅できないな。 char 程度ならともかく。
switch しか無いな
つまんないからもうやめていいよ
お前らほんと数学分かってないんだな・・・ まじ小学校からやり直せよ
>>235 そこにある=は初期化子であって演算子ではない。
>>244 プログラミング言語において「演算子」が何を指すかを勉強し直してきてください。
>>241 桁上げの関数作ればできるだろ
switchだって演算子を裏に隠しているだけに過ぎないし
ちなみに足し算とかってそもそも写像なんだから
なんでそんなことやりたいのかよくわからん
数学じゃなくてC言語で言う「演算子」は人間が勝手に付けた分類だから
それにこだわっても意味が無い
>>228 のいうように少し数学を学んだほうがいい
>>247 何で数学の演算子にこだわるのか理解できないのだが。
ここは C 言語スレだぞ?
元質問者出てこいよ 後出しで、四則演算子のことでした、とか言いそうだが
>>221 >演算子を使わないで割り算や掛け算ってどうやるんですか?たとえば9÷3
割り算や掛け算って言ってるけど
>>222 の問題意識が何なのかということだぁね
C言語だと同じことできるけどこれは演算子と呼ぶ
これはそう呼ばないだけの違いになってしまうから
C言語での「演算子」の意味にこだわって
わざわざ考えるほどの価値がある物と思えない
もし
>>222 がC言語において何を演算子と呼ぶのかをどうやって決めたか
知りたいとかなら別だけど
結局のところC言語での演算子と数学での演算子の区別すらつかずに
質問しちゃったってオチの気がするw
C仕様書には区切り句で何らかの作用を起こすもの(代入とかな)を演算子とすると書かれてるんだから 演算子を使わずに何かをするなんて無理だろ
ここは環境依存おkだから、 インラインアセンブラ使えばおk。
2で割った剰余を取る演算て最近のコンパイラだと 勝手に0x01とのビットANDもしくはそれより速いコードに変えてくれるんでしょうか?
>>254 てことはC言語の演算子は数学の演算子の定義に沿って定義されている
ということだな べんきょうになったw
sizeof まで演算子だしなあ。
(void)printf("ほげほげ"); と、printfまでキャストをする必要はあるのでしょうか?
>>260 無い。そもそもintをvoidにキャストしてどうするんだ?
>>260 ない。
ただし、戻り値を取得し忘れてるわけじゃなく明示的に捨ててるんだという意思表示として
(void)にする流儀はあるにはある。
好み、コーディングスタイルレベルの話。
>>261 戻り値を使わないことを明示する効果がある。
lintのようなチェッカを黙らせる効果もあるな。
そうそう、コーディング規約に「戻り値は必ずチェックすること」という項目があって、 それの評価を厳密に行なう運用の場合にもそうする必要があるね。
コンパイラにもよる。 たとえばFreescaleのCodeWarriorは(void)をつけないとwarningを出すのがデフォルト動作。
int main(void){ int a=1; kansu(a); } までやっておいて @int kansu(int a){ printf("%d",a*2); } Aint kansu(int *a){ printf("%d",a*2); } @だと正常に動いたのですが、 Aだと「*」がダメだ〜 とコンパイラに怒られるのですが、 この違いとは何なんでしょうか?
>>267 (2)の*は、意味も分からないで適当につけたの?
int kansu(int *a){ printf("%d",a*2); } ↓ printf("%d",*a*2); ↑ これじゃね?
270 :
デフォルトの名無しさん :2007/05/12(土) 18:50:45
gets()関数で文章を読み取ってます。リダイレクションでメモ帳で作った文章入れると、改行のところ以降プログラムに読み込まれません。 どうしてでしょうか?改行があっても最後までいきたいんですが
>>270 getsは改行文字までしか読み取らない
manにも書かれてる基本仕様
ついでにgetsを使うのは推奨されない
272 :
デフォルトの名無しさん :2007/05/12(土) 18:53:05
>>271 じゃあ代理のものとして、何を使ったらいいですかね
>>268 気のせいかもしれませんが、
関数を定義してるプログラムを見ると多くが *a となっていたので、
違いを知りたいなと思って作ったプログラムなので、
かなり不備はあるかもしれません・・・。
>>269 Aの場合だと必ずメモリ関連でセグメントエラーか、警告が出続けてしまうんです。
試したところ、、、セグメントエラーが出ました。
>>273 コールするほうも
kansu(&a);
と変えないとだめだよ。
こういうところで試行錯誤してるなら、入門書を一冊買ったほうがだいぶ時間の節約になると思うけど。
>>273 int kansu(int *a) にするなら
int main(void){
int a=1;
kansu(&a); < &をつけなきゃ
}
>>276 危険なんですね。
fgetsにしたら
呼び出し時のパラメータが足りない:fgets(関数 main )
ってなってコンパイルできないんですが・・・・
>>277 ,279
すごい納得できました。ありがとうございました。
入門書は・・・買ったんですが、、、馬鹿なので理解できない^^;
>>281 なんかよくわからないんですが、
char型の配列に文章をいれたいんです・・・・
char bunsyo[256]
みたいなやつにです
>>283 fgets(bunsyo, 255, stdin)
>>283 gets()をfgets()に変更するくらいの手続きを自分で考えられない(≒検索できない)なら、
プログラマに向かないからとっとと諦めた方がいいよ。
>>284 ダウト。慣用句的にそれを使っているのなら、
一度マニュアルページをよく読んで自分の過ちに気付いておいた方がいい。
287 :
デフォルトの名無しさん :2007/05/12(土) 19:09:56
>>284 コンパイルはとおるんですが、改行のところで読み込みがおわってしまうんですが・・・・
>>284 第二引数Nはバッファサイズだろ
読み込まれる文字数最大値はN-1
>>286 ダウト。説明なしにそういうことを言うのはお前の知ったかに過ぎない
>>287 fgets()も、改行までしか読まない。
だから、マニュアルページを読むなり情報を検索できないなら無駄だから諦めろって。
>>288 gdgdいってねーで正解を書いたら?知ったかへぼプログラマーwwww
N-1そうだよ?何か?まさか、254 にしろとかボケないだろうね?
>>290 読み込むテキストに工夫がいりますかね?
>>289 =
>>291 か?
ファビョってんじゃないよ。
そこまで分かってて正解が判らないような屑がこの板なんかに書くんじゃないよ。
294 :
本日の知ったか馬鹿第一号 :2007/05/12(土) 19:13:27
288 名前:デフォルトの名無しさん 投稿日:2007/05/12(土) 19:10:09
>>284 第二引数Nはバッファサイズだろ
読み込まれる文字数最大値はN-1
暇だからプログラム組もうかな でも、モチベーションが・・・・・ なにか練習問題でものってるサイトないか?
>>292 テキストファイルを丸ごと読み込むには、
・fgetc()で一文字ずつ
・fgets()で一行単位で
・fread()でブロック単位(或いは一気に)
読む必要がある。
>>291 だから
>>283 の宣言なら、普通にfgets(bunsyo, 256, stdin);でいいだろ
なんでバッファのラスト1バイトを無駄にしてんだよ
>>292 ループ回して一行ずつ読み込む
>>287 宿題スレで、ファイル全部読み込むコード書いてくださいって言ったほうがいいんじゃね?
299 :
デフォルトの名無しさん :2007/05/12(土) 19:14:47
>>276 とかこのスレにいらねーだろ。このスレが何なのかわかっていないのに
まだ勉強中の知らない奴を見つけて、自分が知っていることをひそかに自慢しながら
他人をたたく基地外だろ。ここでレスしているほかの奴にとっては迷惑千万、失せろクズプログラマー
300 :
デフォルトの名無しさん :2007/05/12(土) 19:15:52
>>293 >そこまで分かってて正解が判らないような屑が
自分が指摘したのに答えられない(勘違い)クズこそ来るなよw
お前はまったく指摘をしていない。ただたんに 自分が思った ことと違っていただけ。
それもお前が間違えているという勘違い(プ
不適切なら正しい使い方を明示しろ、たぶんお前じゃできない。あれは間違っていないからw
ファイルのサイズがわかってるなら、適当な大きさのバッファを用意して、 fread()でもいいけどな。
人間の屑よりはマシだな
303 :
デフォルトの名無しさん :2007/05/12(土) 19:16:58
>>296 うーん。めんどくさそうですね。テキストファイルの改行をなくしちゃいます
>>300 あのね、坊やみたいなお子ちゃまはこんなところに来ちゃダメよ。
既に正解レスがついているんだからもっと落ち着きましょうね。
お前ら邪魔
>>299 自分で考えよう、調べようって姿勢が見えたら、頭わるそうなヤツでもけっこう親切に教えてもらえるよ。
ただ「わからない、を即答せよ」ってだけじゃ教えてもらえない。
307 :
デフォルトの名無しさん :2007/05/12(土) 19:19:32
>>293 揚げ足取りにもならなかったな、所詮お前はわかっていない(っと自分が思った)奴をたたくだけか
二度とくるな、お前みたいなクズこそこのスレにはいらない。このスレのタイトル読めますか?
あっ、日本語も日本の社会もろくに知らない在日かw
まぁ、fgets()の慣用句はfgets(buf, sizeof(buf), stdin)だがな。 仮にもプログラムを組もうというときに、きちんと調べる手間を惜しんじゃ遺憾な。
以下、キモメンメガネデヴピッツァのきめ台詞が出るまでお待ちください
310 :
デフォルトの名無しさん :2007/05/12(土) 19:20:38
>>304 あのね、小学生未満の精神年齢のお子ちゃまはこんなところに来ちゃダメよ。
勘違いの指摘レスがついているんだからもっと落ち着きましょうね♪
んで、何が間違いか、指摘できた?正解がとかじゃなくてw
「屑」対「クズ」か。どっちが半島人かは火(病)を見るより明らかだな。
312 :
デフォルトの名無しさん :2007/05/12(土) 19:22:26
>>284 は単なる入力ミスだろ。それだけでここまで お前はあほだ! みたいな
プレッシャーをかける基地外ってプログラマーに向いてねーよなwwwwww
>>282 だったらその本は自分に向いていなかったと諦めて、
ちょっと立ち読みして、ほかに良さそうな本を探して買えばいい。
くずはくずかごに入っとけ。
それより早く
>>295 に答えてください。
>>311 地球上のカス以下の お 前 が 言 う な wwwwwwww
っつーか、揚げ足取り必死だなw
そんなんじゃ本当にプログラマーに向いてねーよ、その程度のことでガミガミ
相手を罵倒するようじゃ、そんな奴こそこんなスレに来ないほうが良いだろ。
気分が悪くなるものを敢えてみてゲロを吐いているマゾかい?w
グロ動画でも貼ってやろうか?w
おお、新展開。今度の攻撃は「単なる入力ミス」ですw
>>315 宿題スレに未解決の宿題が幾つかあるんじゃない?
下手なサイト見るより勉強になりそうですよ。
freadでも使えば。
>>317 ほらな、そういうことで相手をチクチクつついて周りの気分も害しているだろ?
だからお前みたいなつまらねークズはプログラマーに向いてないから
頼むから大掛かりなプロジェクトには絶対に介入するなよ。
っつーか協調性がなくて無理だろうね、お前みたいなちっぽけなクズはw
ちなみに、あの程度の間違いならさらっと 256 って書けば済んだ話だろ。
お前わかってねー!間違えたへへーん馬鹿!とか罵倒する方が頭がイカレてんだろ。
そういう奴に限って、自分の間違いを指摘されると、認めないどころか
お前がおかしい!って言い始めるから困るぜ ヤレヤレ
以後、さっきからきんもぉ〜★な指摘するだけで答えを出さない基地外は放置よろ
たぶん引きこもりニートだろ
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 :2007/05/12(土) 19:34:14
>>284 はただの入力ミスです ♠
56としたつもりが同じキーを2回押して書き込みしちゃっただけでぇ〜〜〜す ♣
あぁ〜〜いとぅいまてぇ〜〜ん、文字配列のサイズを指定するように、ここでレスする以外の
自分が書くソースでは sizeof 使ってまぁ〜〜〜つ ♥
char s[256]; size_t size=sizeof(s)/sizeof(s[0]; sizeof(s,size,stdin); こんな感じでぇ〜〜どぉ〜〜〜でちゅかぁ〜〜?♦
あちゃぁ〜〜、今度はsizeofの閉じ括弧忘れちゃいまちちゃぁ〜〜〜 あぁ〜〜〜いとぅいまちぇぇ〜〜〜〜ん ♪
fgetsの仕様って buf[BUFFER_SIZE]; fgets(buf, BUFFR_SIZE, stdin); とかするためにこんな仕様になってるんでしょうか?
こんな仕様が何を指すのかわからん。
>>325 fgets()の他にも、strftime(), snprintf()も同じように格納バッファサイズを指定して、
それよりも少ない文字数しか格納しないような仕様になっている。
なるほど、文字列の最後が\0で終わるからその分余計に取らないと駄目だからか
普通にsizeof使えば、悩むことなんて何もないのに
>>330 getsもsizeof使って実装すれば何の問題もないのに、と思っていたりする?
まず、おまえさんが何が言いたいのか分からん。
333 gets!
つまり、まぁ、こういうこと int main(void) { exit 0; }
くだらなすぎ
標準入力から読み込みたいけどサイズとファイルポインタ指定が面倒ってことなら 自分でfgetsをそれらを決め打ちした状態で呼び出す関数作ればいいんでは
338 :
デフォルトの名無しさん :2007/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 なぜでしょうか?
>>338 ログファイルの先頭にBOMを入れるようにすれば読めるんじゃね?
今、配列の要素として1,2,3,4があるとき、これらの要素を連結して他の変数に代入(n = 1234)することはできますか?
できます。
BOOL厨ワロタw
b = a[0] * 1000 + 1[a] * 100 + *(a+2) + 10 + a[3];
一箇所間違ってるし
足し算になってるのか
数学が分かってない人が多すぎる
小学生だっているだろうし 仕方ないさ
#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; } よし、これでどうだ!!
もうsprintfでいいだろw
ちょっと聞きたいんだけど (環境.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 として書き込まれる これってどうしてでしょうか?
>354 bcc32(v5.82)でコンパイルしてみた。 ちゃんと 0D 00 00 00 になったけど?
>>354 俺んとこじゃちゃんと0D 00 00 00になったぞい
亡羊のページなんか張るなよ
>>358 なんで?んじゃどこをはれば良いの?なんでいちいちちっぽけな低学歴馬鹿のお前の言うことを
聞かなきゃならねーの?さっきからうぜぇんだよ、くだらねぇことでチクチク煽ったり、あほじゃねこいつ?
360 :
354 :2007/05/13(日) 00:55:21
失礼しました ちょっと違いました バイナリ値で 0D 00 00 00 ではなく 00 00 00 として書き込まれる 0D が書き込まれていない、でした それと1Aも書き込まれないようです 制御コードだからですか?
確認方法に問題があるんじゃないのか。 ちゃんとしたバイナリエディタ使ってるか?
363 :
自分が気に食わない発言を見つけると得意気に罵倒してくる基地外 :2007/05/13(日) 00:57:12
286 名前:デフォルトの名無しさん 投稿日:2007/05/12(土) 19:09:04
>>284 ダウト。慣用句的にそれを使っているのなら、
一度マニュアルページをよく読んで自分の過ちに気付いておいた方がいい。
293 名前:デフォルトの名無しさん 投稿日:2007/05/12(土) 19:13:06
>>289 =
>>291 か?
ファビョってんじゃないよ。
そこまで分かってて正解が判らないような屑がこの板なんかに書くんじゃないよ。
そこまで分かってて正解が判らないような屑がこの板なんかに書くんじゃないよ。
そこまで分かってて正解が判らないような屑がこの板なんかに書くんじゃないよ。
お前みたいな自分基準しか言わない馬鹿や間違っているのを見つけては叩くだけしかしない奴が
このスレどころかこの板にこない方が良いよ、プロになれなかったグラマー(ただのデブ)www
>>360 バイナリィエディタで開いてみたら、0D 00 00 00になったけど?
>>360 0x0d を書き込んでいて、
なんで 0x1Aを期待するのかわからんし。
そもそも書き込んでるのがバイナリなのにファイル名が.txtなのも謎だし。
というか君は何がしたいの?w
そこを言えば根本的なバグも教えて貰えるかも。
>>358 ねぇねぇ、どこを参照すりゃ良いの?お前、もしかして亡羊さんのことが嫌いな人?
亡羊さんに嫌がらせをしている人がいないか聞いたら、お前みたいなへぼプログラマーが
誰か特定できるかな?ちと亡羊さんに通報してこようかな?w
>>365 お前もいちいちうるさいなぁ、馬鹿じゃね?わけがわからないとかじゃなくてさぁ
できたって報告があるんだから、いちいち何言ってんだかわかんねーじゃなくて
どうやって0D 00 00 00以外が書き込まれたか、確認した手段を聞いた方がはえーよ馬鹿w
368 :
354 :2007/05/13(日) 01:01:59
370 :
デフォルトの名無しさん :2007/05/13(日) 01:07:54
C言語初心者です。 基本情報処理技術者をとって会社に就職して、 プログラマーからSEになったらどの位の給料になるんでしょうか? もちろん個人と会社による話ですが、相場を教えて下さい。 SEになっても月に30万位なんでしょうか??
365の反応が普通だろw
>>367 ば…ばかって言うヤツが馬鹿なんだからねっ!!!
>>371 普通じゃねーよ、相手にひたすらプレッシャーを与えてボロを出したところを
さらに叩く基地外くらいだろ、そういうのがデフォになっている視野も心も狭い低学歴はw
普通は何を使って書き込まれた値を確認したか聞くだろ。
375 :
デフォルトの名無しさん :2007/05/13(日) 01:10:52
良いかてめぇ〜ら、C言語をかじったくらいのクソガキが、これから始める初心者を ネチネチいじめてんじゃねーよ、スレタイが読めていないのか、こういうスレに集まる 初心者より自分の方が知識も経験もあるということを知って安心したいのか知らないが 答える気がないならこのスレから出ていってくれ。二度と戻ってくるな。 所詮お前は、プロになれなかったただのデヴ(グラマー)だ
378 :
354 :2007/05/13(日) 01:15:10
すみません.自分の勘違いのようです 今作っているものがunsigned ID, unsigned short sizeを読み、次にsize分文字列として読ませているんですが IDが0x0Dまたは0x1Aになるとバグったもので もう一度見直してきます どうもありがとうございました
>>378 おそらくfopenの際、モードをバイナリにしてないからだろ
バイナリ指定してない場合、改行文字絡みで自動変換が行われる
>>374 火病ってんじゃねーぞ
・ >365 が元質問者を叩いているという事実認識がまず脳内
・ 自分が >365 を叩いてる事実を放置
・ 自分の主観が「普通」と勝手に定義
どっちが基地外かは火を見るより明らか
マジでやめてくんないかな
嫌な荒れ具合だな 亡羊本人でも降臨してんの?
384 :
354 :2007/05/13(日) 01:24:02
>>379 まったくもって情けないです
バイナリ指定したつもりがしてませんでした
ちゃんと動作しました
お騒がせしました
385 :
デフォルトの名無しさん :2007/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 :
デフォルトの名無しさん :2007/05/13(日) 01:25:53
>>383 そうやっていないのに特定の人物をどうこう言い始めるだろ?
お前もうそれで名誉毀損だよ。亡羊さんに通報しとくねw
覚悟しとけよ
釣れてますねw
389 :
デフォルトの名無しさん :2007/05/13(日) 01:27:40
>>358 >>358 >>358 >>358 >>358 >>358 >>358 >>358 >>358 に問う
なんではっちゃだめなの?理由は?お前の気まぐれとか、気分とかだったらまずお前がただの馬鹿だと言う結論しか出ないから。
参考にできるページがあったら使う、別になんら問題ないし、そのページには間違った記述はされてないよ。
まぁ、たぶん亡羊を嫌っている誰かだろ。特定できそうだから、亡羊さんに聞いてくるわ。
どうせプロになれなかったボケグラマーだろw
>>388 >>358 >>358 >>358 >>358 >>358 >>358 >>358 >>358 >>358 参照w
言ったのは俺じゃないから。正しくは望洋だから。ANSI、ISO準拠を重視した本の出版をしているし
そんじょそこらの知ったかプログラマーと比べたらかなりまともな人だろうね。
他人を叩くような奴って、世界基準すら知らなさそうで視野が狭そうだなw
int mainについても理解してなさそう(どこぞのスレで議論になったが、ISOの参照ページを出したら
尻尾を巻いて逃げたけどなw)
>>俺を特定できないから無理だろうけど ↑ これがこいつの心理だろうなw
>>381 > ・ 自分の主観が「普通」と勝手に定義
はい?自分の主観で言った覚えはありませんけど?
ちゃんとバイナリィエディタで 0D 00 00 00 が書き込まれているのを確認しましたが何か?
質問者が何で書き込まれた値を確認したか聞いたのに、どうして俺が 主観 となるんでしょうか?
正確にお答えをして下さい。でなければ偽証罪で通報しますよ?証人喚問は怖いですよぉ〜〜
393 :
デフォルトの名無しさん :2007/05/13(日) 01:33:35
>>391 ぷぷっ、そういうところにしかもう反応できない肝っ玉の小さいクズ乙w
こういう匿名(実際のところは完全に匿名ではない)ところでしか強がれないボケ
他人の粗探しを必死こいてするくせに、自分の落ち度をまったく認めない井の中の蛙乙w
ここまで望洋さんに肩入れできるのはある意味すごいと思った。
395 :
デフォルトの名無しさん :2007/05/13(日) 01:35:51
質問者の答えに答えるどころか お前何やってんだよ としか言わない奴はとっととこのスレから 出て行ってくれませんか?うっとうしいんだよ、答えもしないくせに相手のボロを探すだけの馬鹿
>>389 特定できたら家にきてくれよ。酒くらいは出してやる。
もう眠い。寝る。
どうぞ。
望洋信者って怖いな
いつの間にか信者になっているしw 参照できるライブラリのページを出しただけだろ。亡羊を狙った覚えはない
なんだ、まだやってたんだ。暇な人はこれだから……
他人の粗探しをしている奴がきんもぉ〜♪だよな。指摘するならするで 間違いを指摘すりゃ良いだろ。気持ち悪いよ、お前それわかってねーなって ネチネチ煽る奴。日頃、まともな人付き合いがないからこういう捻くれた 相手を見下して自分が優位な立場だと思い込みたい引きこもりなんだろうね
>402 自己紹介乙
>>403 =昨日、つまらないミスを気持ち悪く指摘して煽っただけの知ったかバカ
亡羊? ボコボコにしてやんよ ∧_∧ ( ・ω・)=つ≡つ (っ ≡つ=つ / ) ババババ ( / ̄∪
407 :
質問者 :2007/05/13(日) 08:52:04
きのうはお騒がせしました。 「演算子を使わない」とは、四則演算のことです。 ビット演算で何とかできないかな?と思いましたが。どうでしょうか?
408 :
デフォルトの名無しさん :2007/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); /* A */ ++p; } return 0; } 今、ポインタのポインタを使って文字数を数える練習問題やっているのですが @のprintf文を実行するとDos窓が強制終了してしまいます。 デバックの時にエラーは出ないのですが・・・なにが間違っているのでしょうか。 Aの方は普通に出力できます。 Visual C++ 2005 Express Editionを使っています。
>>407 コンピュータサイエンスの基礎をやれ。
四則演算を論理素子でどうやって実現するか知れば
くだらない疑問を抱かずにすむ。
>>408 printf("%2d月:%s(%d)\n",(i + 1),strlen( *p ),*p);
%2d = i+1
%s = strlen(*p) ←
%d = *p ←
どうやって、論理素子で計算するんですか。 16進数に置き換えてするんだとは思いますが、すごく疑問です。 2×4=8とか、8÷2=4を論理素子で計算する。 すごく難しいと思います。
412 :
408 :2007/05/13(日) 11:15:59
>>410 あああ!逆だった
ありがとうございます!
>>411 本屋に行って"CPUの仕組み"みたいな本買ってこい
あとは加算器で調べてみるとか
剰余はどうするんすか? スタック使って割られる数-商*割る数って演算するんですか?
416 :
デフォルトの名無しさん :2007/05/13(日) 13:43:31
ファイル操作のとこでreturn(-1);の意味がさっぱり。
>>415 掛け算と割り算は加減算で表現できるだろ
単純に何回も引いていって引けなくなればそれが余り
2進数で桁上がり下がりフラグ使って同じようにやればできる
筆算で(2進数)割り算やるときとほとんど同じ あとは本買って嫁
>>416 return(-1);はよくエラーチェックに使う
-1が返ってきたらファイル開けなかったということになってるとおも
変数を使わずに1+2の計算結果を出すにはどのようなプログラムを組めばいいのでしょうか
printf("%d",1+2);
>>418 こういうこと?
printf("%d\n", 1 + 2);
演算子、変数と来たから次は何だろう
関数を使わずに(ry
C言語を使わずに(ry
頭を使わずに(ry
425 :
デフォルトの名無しさん :2007/05/13(日) 15:20:20
30年とか表示するとき int a; a = 30年; printf("%d",a); でやると、年が邪魔っぽくて表示されない どうやればいいの〜?
printf("%d年", a);
表示以前にコンパイルできないのでは????
429 :
デフォルトの名無しさん :2007/05/13(日) 15:40:53
>>428 だから結果として年が邪魔で表示されないんだろう。初心者苛めんな。
せめて教科書読めよっていう質問ばっかりきてるなぁ
432 :
デフォルトの名無しさん :2007/05/13(日) 16:04:10
一般的な入門書やりおわったけど、次はどんなステップを踏めばいいですか?
自分一人で基礎知識の応用が出来るようにすることかな。 処理速度とかも視野に入れた上で。 なんかテキトーに自作ツール作ってみるとか。
436 :
デフォルトの名無しさん :2007/05/13(日) 16:09:20
>>432 この世界は片っ端から全部覚えてたらキリがないから
ちゃんと自分がなにをやりたいのか見定めて進んで行かんと、
無駄に多大な労力を費やすことになるぞ。
作りたいもん作ればいいと思うぜ
>>434 自分で C のプリプロセッサでも作ってみたら?
確か以前、"未踏"でも採択されたことがあったはず。
Socket,データベース,文字列処理(正規表現含む) これらができると幅がぐっと広がる…っていうか基本 後はアイデア次第
440 :
デフォルトの名無しさん :2007/05/13(日) 16:34:35
かなり意欲はあるのですが…やはりいろいろとオリジナルのアプリケーション・ソフトウェアを作ってみたいです。やはりそーゆー本を買っていろいろやってみるべきですか?
本を買う必要はないが、色々やってみるべきだろう。
>>439 の中でまず文字列処理からやってみては?
とっつきやすいと思うよ。
ネットにも入門サイトとかいっぱいあるし。
443 :
デフォルトの名無しさん :2007/05/13(日) 16:41:18
入門書に文字列処理についての事が無かった様に思うのでお聞きします。文字列処理は初耳です。
>>440 作りたいものがあるならさっさと作ってみるのが吉
やってるうちに技術もついてくる
>>443 >入門書に文字列処理についての事が無かった様に思うのでお聞きします
strcpy() も文字列処理だと思うが?
現実問題Cで作るべきアプリなんて存在しないのが辛いな
447 :
デフォルトの名無しさん :2007/05/13(日) 16:45:51
みなさんご親切に…大変ありがたいです。ちなみに、みなさんはどのようなプロセスで、今のC言語のプログラミング力まで力を伸ばされたんですか?簡易的に話して頂けたらいいのですが…
ゲームプログラミングをやってみては? 囲碁・将棋・チェス・オセロとかね。 Cで作るのが最適。
450 :
デフォルトの名無しさん :2007/05/13(日) 16:51:01
>>448 やはりそうしようかなと思います。Cで作るべきアプリケーションがそんなに存在しないようならば
自分は将棋が趣味で、自分より強い将棋プログラムを作ろうという目標があったから勉強した。 将棋プログラムってハッシュテーブルとかリストとかソートとかビット演算とか、 基本的なアルゴリズムが各所にちりばめられてるから勉強にはいいテーマだと思う。
>>450 >Cで作るべきアプリケーションがそんなに存在しないようならば
これって、どういう意味だと思っている?
453 :
デフォルトの名無しさん :2007/05/13(日) 16:56:43
>>452 C言語にはその点ではあまり需要がないものかと…
>>450 あとはOSに興味あるならLinuxのソース読んでみるとか
学ぶのは自分で作ってみたり本読むか知っている人に聞く
プログラミング力のうちの知識はそれで十分だが英語できるかどうかで
足りない知識の吸収率が変わってくる(最先端の知識・アルゴリズムなど)
あとは経験で補えるが数学力のあるなし(知識じゃなく頭良いかどうか)
でどこまで伸びるかが変わる
勉強のためにCの勉強してるなら 標準ライブラリのクローン(strcpy, strcat, printf, ...)と UNIX系コマンドラインツール(cp, tail, head, sort, ...)のクローンを片っ端から作っていくと勉強になる。 サイズも小さいし、答え合わせ用のソースコードも(あまり初学者向けとは言いがたいが)あるし。 まあほとんど糞つまらん苦行に近いがコーディングは楽しいし一番無駄がないだろう。
456 :
デフォルトの名無しさん :2007/05/13(日) 17:08:09
うーん、自分はまだ、配列、構造体、ポインタ、ファイル操作、関数の作り方、変数、if文、switch文、for文、while文、をやってきたとゆう感じです。
バブルソートを用いて
構造体に対して、データが格納された構造体配列を
学生証番号で降順にソートする関数sortIDと
点数で降順にソートする関数sortEngを作成しなさい。
データの入力は、関数input_seiseki_pを呼び出して行い、
次に「どちらで整列しますか(1:学生証番号、2:点数):」と表示し
その入力により関数sortIDと関数sortEngを選択肢、その結果を
関数seisekiを使って表示する関数meinを作りなさい
上記の問題において私なりに途中まで作ってみたのですが、
ここから先がわかりません。。
どなたかお知恵を拝借させて下さい
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3974.c ↑途中まで作ったソースです。
よろしくお願いします。
459 :
デフォルトの名無しさん :2007/05/13(日) 17:17:41
もういっかい違う入門書を買ってみろってことですか?
>>458 どこがどうわからないのかkwsk
学校とかのレポートなら解答出すわけにいかんし
>>459 >>457 じゃないがおまえちゃんと
>>457 のリンク先見てみたのか?
簡単なデータペースやゲームの作り方も内容にあるだろ
それとも全部わかってるのかこの内容?
まぁ、猫が妥当かどうかは問題だがな。
462 :
デフォルトの名無しさん :2007/05/13(日) 17:48:44
ちゃんと見てませんでした。ごめんなさい。
463 :
デフォルトの名無しさん :2007/05/13(日) 18:10:29
http://www.geocities.jp/supermisosan/rksimultaneousequation.html のページにあるローレンツのプログラムをコンパイルしようとしたのですがエラーがでて出来ませんでした
開発環境に問題があると思うのですが、原因がよくわからないのでご教授願います
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 ***
------ コンパイル終了 ------
と出ます
スレ違いのような気がしますが、該当スレが見つからなかったのでここで質問させていただきました
>>463 そのコードはANSI Cに準拠していない。
FILE *output; の行を main 関数の先頭に持ってくるといいよ。
4つくらいのデータを1つのノードとして そのノードを2二次元配列の1文字分のように扱いたいんですけど、 構造体を設定して strcut ABC{ char char char }; struct ABC data[][];とできますかね?
struct ABC data[ ][ ];です
なんでやってみないの?
いややったんだけどセグメンテーションエラーだから 無理なのかと。
>>468 コード貼ってみろよ。中途半端に省略しないで。
472 :
463 :2007/05/13(日) 18:47:21
>>464 回答ありがとうございました
警告は消えませんでしたが、エラーが消えて無事コンパイルすることができました
この警告は無視しても問題ない範囲なのでしょうか?
原因を把握していらっしゃるのでしたらお伺いしたいのですが
>>472 使ってない仮引数を教えてくれてるだけ。無視しても問題はない。
>464 コンパイラがANSI Cに対応してないんでねーの?
475 :
463 :2007/05/13(日) 18:50:31
重ね重ねのご親切ありがとうございました
>>474 ANSI Cでは変数はブロックの先頭のみで宣言できる。
bccはANSI準拠。
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); } } 一部ですけども、その二次元配列の中身の全ての各部門の初期化をしたいのですけど この時点でセグメンテーション違反がおきるわけです。
strcpy(data[i][j].initial,NULL); strcpy(data[i][j].home,NULL);です
馬鹿だろ。 strcpy(data[i][j].name, "");
まあ data[i][j].name = '¥0'; ってやった方がいいとは思うけど初期化だから別にいいか。
うわ。間違い data[i][j].name[0] = '¥0'; こう
大学でC言語を習っています。 ifやforといった基本的なことは理解しているつもりである程度プログラムは書けます。 今、アルゴリズムの授業を受けているのですがポインタや構造体が理解できません。 参考書に載っているソースを自分で打ち込んで実行したり、少し変えたりしているのですがどうも暗記っぽくなっています。 そのため「○○をポインタと構造体を利用して作れ」と言われても何からしたらいいかわからない状態で。 ポインタや構造体はC言語で一番重要と言われているので是非自分のものにしたいです。 皆さんはどうやってポインタや構造体を理解していきましたか?
サンプルコードをいくつか読めばそれで理解できた。
使ってりゃ理解できた
>>483 わからないところは図を描いて理解。
デバッガで全変数表示してつながり・変化を確認。
くそなげえプログラム書いてたら飯なんてどうでも よくなって4時間経過w
さっき構造体での二次元配列はどのようにすればいいのかを聞いたものですけど その二次元配列data[i][j]において 1行さすのはdata[i]でいいのはわかるのですけど 1列をさすのはどうおけばいいですかね?
基礎からやり直せ
>>488 メモリの配置を想像してみろ。
列は分断されていて連続したメモリとしてアクセスする方法はない。
>>483 ポインタのイメージがつかめない場合はその都度アドレスと中身を表にして書いて理解
ポインタpのpと*pと&pの違い,あるいは変数aのaと*aと&aの違いが
わかっていれば大丈夫のはず
なぜポインタが必要かっていう設計思想を知りたければアセンブラとかを
学んでみるといいいかも
>>488 他の言語なら実装されてたりするけど
C言語ではそういう便利な機能は基本的に用意されてない
493 :
デフォルトの名無しさん :2007/05/13(日) 23:12:11
転職してプログラマになりたいんだ。 そのためにCとC++をマスターしたいんだが…。 それで今は一応C言語の基礎を終わらせたんだけど C言語で関数やアルゴリズムやAPIなども覚えてから C++行ったほうがいいのかな? それとも先にC++でオブジェクト指向とか把握してから いろんなこと手を出した方が良いかな?
さっさとC++池 今時Cなんてほとんど使わないからC++からCのコードを利用する際の最低限の知識さえあれば十分。
ぶっちゃけ経験年数のが大事。 マの真っ当な評価なんてマ以外に出来るわけがないんだから。
あらためてアルゴリズムを考えてみると その列であてはまるのは1つだから 列指定にしなくてよかった。
497 :
デフォルトの名無しさん :2007/05/13(日) 23:23:21
>>494 Cは使わないのか
じゃC++の勉強にいこうかな
まだCでコードとか書けないけど大丈夫かな・・・
>>495 年齢が30前後とかだと未経験じゃプログラマになるの難しいかな?
498 :
デフォルトの名無しさん :2007/05/13(日) 23:29:01
>>497 どんなプログラムの仕事がしたくてどんな会社かによる
なんか実用的(ゲームでもいい)なプログラムひとつでも組んでると
就職のときにアピールにはなる
とりあえずマ板へ池
プログラムの処理がどの程度完了しているのかを示すことを試みたのですが, うまくいきませんでした.具体的には,以下のことをしました. #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個同時に表示されてしまいます. どのように書けばよいのでしょうか?お願いします.
>500 ちゃんとjのループの途中で*が表示されてるけど? ただ、1000個ごとなら(i%j)==999だろう。
バッファフラッシュしなきゃいけないとかそーいう問題じゃないの? 環境は?
ANSI C準拠だったら整数の範囲って32767までじゃなかった?
>>500 for(i=0; i<100000; i++){
i 使って無いじゃんwwww
ワロタw
int に10000も入れれませんwww 基本からやり直せよwww
>>500 if((j%1000)==0){ printf("*"); fflush(stdout); }
という話か?
C とC++ の違いを分かってない人がいっぱいいるので一応書いておく Cの構造体には変数しか設定できないのですが C++は構造体の中に関数を入れれます。それがクラスって呼ばれるものです C++でヤリなされw
何かの処理の進捗状況を表示する部分について質問してるんでしょ。 単にその処理の部分は省略しただけなんじゃないか?
510 :
500 :2007/05/14(月) 02:25:02
進捗状況ってさ ソースに printf("処理○○終わり"); って書いていけばいいんじゃないの? 完成したら消せばいいわけだし
だからfflushはだめだってw
ほかっとけ 初心者だぞ相手はwww
514 :
500 :2007/05/14(月) 02:31:20
>>509 実際は処理内容が含まれますが,それとは別に処理内容を全部消したもの
(
>>500 そのもののソースファイル)を作成して実行しても * が一度に出力された
ので質問をしにきました.
>>511 1試行で数分かかる繰り返し計算処理なので,何%終了したのかを概数でも
良いから表示させたかったのです.
>>512 駄目なのですか??
マロックにサイズオブ使わずそのまま数字書いてるとか goto使いなんだろうよ
>>514 目的が達成できたんならそれで問題ないよ
環境依存だから、他の環境に持っていくことがあるなら問題だけど
つうかさ 関数の再帰使わなかったら 処理スピードなんか大して変わらんよ 何千万行でも数行でも・・・
518 :
500 :2007/05/14(月) 02:37:48
>>516 今の環境のみで動かすものなので
これで大丈夫です.皆さん,ありがとうございました.
お ま い ら 難 し く 考 え す ぎ
>>508 クラスの肝は派生できる事。
派生無しにクラスを語っても意味がない。
C++はスレ違い
>>516 の言ってる環境依存ってfflushの事か?
確かに入力ストリームに対するfflushは未定義動作だが
出力ストリームに対しては正常に機能したと思うが違ったか?
お前ら もう質問者はいなくなったぞw
rand()で作った変数を for()等でループにかけることって 実際問題 どうゆう場合ですか?
頭の悪い質問に頭の悪い回答者 このスレほんとゴミ化したな・・・
>>512 中途半端な知識でゴミ回答するんじゃないよ
じゃあ 頭のいい質問しましょw 関数のポインタと、配列のポインタ等の置き場が勝手に割り付けられると聞いたのですが 実際はどのように割り付けてるんですか? 出来ればコンパイル自体のソースをもちいて答えていただきたいと思います
>>524 質問の意味がよく分からんが
10体の敵がそれぞれランダムに動く場合とか?
>>527 ポインタの置き場って何?
コンパイル自体のソースって何?
おーい!機械語読める奴探してるらしいぞw
メモリの割付だおw
よーわからんな 関数が置かれるアドレスの話か? なぜそこでポインタが出てくるんだ? 配列も置かれるアドレス? なぜ普通の変数じゃなくてわざわざ配列? ローカルとグローバルによっても違うし もうちょっと問題を整理してくれんか
【内容】浮動小数点型(float、double等)を使用せず整数型(int)のみを使用し 「√」計算を行える計算機を作る 【どこが分からないのか?】全部wごめん 【どうして欲しいのか】代わりにソースを書いて欲しい
宿題は帰れ。 最近の学校は開平も教えないから困る。
開平ってなんですか?
ググれ
539 :
デフォルトの名無しさん :2007/05/14(月) 05:58:55
C >>>>>>>>>>>>>>>>> C++ C++は究極の中途半端言語
C++に挫折したそうです
>>535 intしか「√」内に入らないということでよろしいか?
>>543 お前意味が分からんw
整数しか入らないか?って聞けよwww
一番簡単な整数「9」を計算し「3」を出すプログラムを作りソースを書け 話はそこからだw
そのまえにルートがなんなのか学んだほうがいいw
>>535 確認だが正整数の間違いじゃないか?
そうでないとしたら複素数使わんと駄目だぞ
0でも問題ないだろ。
出題者がアホなのか質問者がアホなのか。 後者だろうけど。
宿題野郎にヒントなんて与えなくていいよ。
負数を与えたら死ぬようにすりゃいいじゃん。
>>548 おまえひょっとして-9は整数に入らないとか思ってないよな?
>>552 おまえひょっとして0は正整数入るとか思ってないよな?
負数が入っても絶対値の平方根に i つけりゃいいだけじゃん。
おk 言い直し 非負整数でおk
誤爆にレス付けてるアホどもってよっぽどやることがないんだね。
つか整数か非負整数いずれにしてもなんで出題者はそんなのに限定してるんだ? 実数じゃなにか問題があるのか?
ヒント:宿題
>>557 どのレスが誤爆なんだ?
ちょっとよく分からん
宿題スレのテンプレに似てると思ったんじゃないか?
宿題スレってはじめて見てみたがひどいな 写し放題じゃねーかwwww 先生は宿題スレもチェックしとくべきだなw
してるんじゃない? そうでなくとも、まったく同じ答えが複数きてたらばれるだろう
教授からここの宿題スレを使うなと警告が来た例もあるらしいよ
そういうことするやつってそのへんは抜かりなくて少し変えてたりする 普段の態度や小テストで理解度見てたらだいたい自分でやったかどうか想像付くんだけど さすがに人数多いといちいちチェックするのはめんどくさいw 院生に採点まかせっきりだったりもするからな
うざい
でも先輩友人の繋がりで写すのはどこでも常態化してるだろ。 それのネット版だ。 大してかわらんだろ。
char a[5] = "unko" どこにNULLが入っていますか? 6個目?
何でデバッガ使わないの?
>>568 |壁|д゚) あのさ 教科書きちんと読もうよ
NULLと¥0と0の違いをきちんと理解しろw
>>568 先頭を一個目と数えて五個目にNUL文字が入っている。六個目は存在しない。
NULL 値アドレスなし、値0、ポインタの値として使用できる \0 値アドレスなし、値0 0 値アドレス有り、値0
値アドレスって何ですか?
イミフな空白はなんですか?
>>535 問題の趣旨を考えてみたw
10/3を計算すると3.33333333333333333・・・・と続くが小数点以下が増えていけば4という端数が発生する
COBOLでやれよと言いたいwなぜにcでww
>>577 出力形式が、紙への印刷しかなかった時代が有ることを説明しないと無理でしょw
>>578 いやいや、そうじゃなくて、NULLといってもポインタと文字とは別物だってことなんだが?
>>572 正確に言えば
NULL=値無し、アドレス有り
¥0 =値0 、アドレス無し
0 =値0 、アドレス有り
だけどねw
何で初心者が回答したがるんですか?
>>580 イミフw
アドレス無かったら値入れれませんがw
文字配列をNULLポインタに指定するのと、文字配列の中にNULL文字を入れるのとでは ぜんぜん意味が違うということさ。前者はまだ文字列を指定するアドレスが指定されいない 何もないところを示しているが、後者は文字列の中にNULL文字だけでも入っていれば 空ではあるが文字列(の先頭)を示すアドレスは存在しているよん。
>>580 志村ーーー、上の2つのアドレスありなしは逆逆w
あの・・・ かなり前に関数で配列の数を数えたいといった(内積を計算したいと)ものなんですが NULLになるまでcount++するというプログラムならいけるかなと思いまして。 ぬるぽっていうのは、char型のアドレス限定ですか?
そもそも「¥0」ってなんだ? 好意的に解釈して「\(バックスラッシュ)0」の心算なんだろうけど、 '\0'と書かないと意味を持たない希ガス。
>>580 アドレスの有無ってなんだよ
いかなる値でも記憶領域に属していればアドレスはあるし、
そうでなければアドレスはないだろ。
#include <stdio.h> int main(void) { char *a=NULL,*b={"\0"},*c={"0"}; printf("%p : %s \n",a,a); printf("%p : %s \n",b,b); printf("%p : %s \n",c,c); return 0;} これの出力結果を見れば一目瞭然だよ
>>588 を実行すると、異常終了して1行も出力されません。
どうしたら一目瞭然になるんでしょうか。
>>590 とりあえずaを表示する部分を消して下の2つは確認できる?
>>590 ゴメンよ なぜか知らんがコンパイルできて出力できてしまったよw
>>588 の出力結果は、俺んとこ(WinXP , BCC使用)でやったら
00000000 : (null)
0040A128 :
0040A12A : 0
っと表示された。
(nil) : (null) 0x80484cc : 0x80484ce : 0
>>585 ガッ
いや、char型のアドレスだけじゃなく他の型でもNULLはある。
charとかchar[]はNULL文字と深くかかわってるけどNULL文字とNULLポインタは全く別物。
NULL文字は文字列の最後に終端記号として置かれる物。
NULLはポインタがどこも指してない事を示す記号として色んな型のポインタ変数に入れられる物。
0x0 : (null) 0x402000 : 0x402002 : 0
こういうアホ連中がそのうち社会に解き鼻垂れるのかと思うと 陰鬱な気持ちになるな・・・
ヒント int main(void) { printf("てすつ"); return NULL; } やってみようw
>>598 > return NULL;
いっ、いぃ〜〜のか?
コンパイルとおりませんでした。
$ gcc -xc - #include <stdio.h> int main(void) { printf("てすつ"); return NULL; } ^D <stdin>: In function ‘main’: <stdin>:5: 警告: return makes integer from pointer without a cast $ ./a.out てすつ $ echo $? 0
602 :
デフォルトの名無しさん :2007/05/14(月) 18:48:01
ヒント マは人格障害者の宝庫w
俺に聞け スレで 俺に聞くなよ って態度は何様だよ?w
ここは初心者さんのスレだから、イイのw 【1】 #include <stdio.h> void main(void) { printf("てすつ"); return NULL; } 【2】 #include <stdio.h> int main(void) { printf("てすつ"); return ; } 【3】 #include <stdio.h> void main(void) { printf("てすつ"); return ; } それぞれやってみよう
>>605 > やってみよう
何が目的?何が言いたい?はっきりしろ、うっとうしい
そういう阿呆なこと教えるから、阿呆プログラマが量産されるわけだ。
はい。 コンパイルのはじき方が理解できましたか?
我ら幼い人類に 目覚めてくれと 鼻垂れた〜
>>608 もしかして、そういうの面白いと思ってる?
611 :
デフォルトの名無しさん :2007/05/14(月) 19:11:49
ぜんぜん
612 :
デフォルトの名無しさん :2007/05/14(月) 19:12:05
605 名前:デフォルトの名無しさん 投稿日:2007/05/14(月) 18:55:06 ここは初心者さんのスレだから、イイのw 【1】 #include <stdio.h> void main(void) { printf("てすつ"); return NULL; } 【2】 #include <stdio.h> int main(void) { printf("てすつ"); return ; } 【3】 #include <stdio.h> void main(void) { printf("てすつ"); return ; } それぞれやってみよう ここは初心者さんのスレだから、イイのw ここは初心者さんのスレだから、イイのw ここは初心者さんのスレだから、イイのw それぞれやってみよう それぞれやってみよう それぞれやってみよう それぞれやってみよう
614 :
デフォルトの名無しさん :2007/05/14(月) 19:28:09
>>613 自己擁護乙。お前つまんねっ、初心者を見ていらつくくらいなら
こんなスレに来るなよw お前みたいな気持ち悪い基地外に回答なんて求めてねーよボケ
俺は初心者じゃなくて回答する側だけどなw
615 :
デフォルトの名無しさん :2007/05/14(月) 19:29:07
んで、さっきっからこいつも何?せめて自分の使用環境くらい書けようぜぇ
600 名前:デフォルトの名無しさん 投稿日:2007/05/14(月) 18:46:08
コンパイルとおりませんでした。
590 名前:デフォルトの名無しさん 投稿日:2007/05/14(月) 18:29:13
>>588 を実行すると、異常終了して1行も出力されません。
どうしたら一目瞭然になるんでしょうか。
616 :
デフォルトの名無しさん :2007/05/14(月) 19:31:21
んでさぁ、これって何の ヒ ン ト なの?なんについてのレス? main関数の戻り値はintって指定してあるのに、NULL指定って何?ただのバカ?失せろ社会のクズw 598 名前:デフォルトの名無しさん 投稿日:2007/05/14(月) 18:43:38 ヒント int main(void) { printf("てすつ"); return NULL; } やってみようw
>>614 どこがどう擁護してるのか分からないけど
言われて傷ついた?
そろそろwつけるの止めたほうがいいよ
618 :
デフォルトの名無しさん :2007/05/14(月) 19:32:40
>>617 はいっ、そうやって言い返さないと気がすまない=自分を自分で擁護して必死こいているのがバレバレ
なんすけど?擁護する必要すらない。お前みたいな奴は養護学校へ行けw
やっぱり最近ここ荒らしてるって このwつけるやつだと思う
>>617 > 言われて傷ついた?
それお前だろ?お前が基地外だのこのスレには不要だのバカだの言われて
戦力外通告されて必死だな
>>619 =
>>286 以下このスレの質問には無関係な自分の知識をひけらかして他人の無知を探ろうとしている奴
クソレスして他人の気分を害している お 前 が 言 う な
>>605 みたいなのがうぜぇ。本当にバカじゃね?何いきなり戻り値の話に持ち込んでんだよ?
NULLを使う場所間違ってんぞ
以後、ここで質問に関係ないレスをしている奴は、現実世界で友達のいない寂しがりやだと思って
見守ってやってください。ここではもちろん スルー でおながいします。
必死すぎだろ・・・
やっぱ荒れてきた
>>622 wつけるの止めたの?
必死すぎワロタ
誰か配列の大きさを調べる関数を書いてくれるとありがたし
>>622 >ここで質問に関係ないレス
> お 前 が 言 う な
>>626 Cでそれは無理ではないだろうか
さっきっからファビョって自分を擁護している奴って間違えた
>>580 と
>>572 か?まぁ、誰が誰をバカにしているかわからんが
答えるなら正確に調べてからレスするなり、参照できるページを使うのもありだぞ。
答えても相手が理解する能力がなければそれまでだしな。
けど、int mainの戻り値にreturn NULL;とかありえないから。
NULLに関するヒントとか何にもなってないし、明らかにint mainとしているだけあって
戻り値の指定が不適切ってことしか言えないから。関数の前に記述している型について
理解していないことをカミングアウトしなくて良いから、こんなスレで自分も初心者でぇ〜す
ってことをアピールしなくて良いから、ファビョらず黙っていてくれ。
630 :
デフォルトの名無しさん :2007/05/14(月) 19:46:57
>>628 =間違ったヒントを出して赤っ恥かいているバカ
以後放置よろ
すいません C言語でしか作れないプログラムはありますか? Cの良さってなんですか? 付け加えて他の言語の良さ悪さを教えてください
633 :
デフォルトの名無しさん :2007/05/14(月) 19:51:28
>>632 ただしいヒントとかじゃなくて、何であんな無意味なヒント出したんだ?w
何が意図かはっきりしろって言われてんじゃん。なお、NULLポインタについては
すでにソース付きでレスがあるんであしからず。
趣味でハックしてる人はソースコードでハァハァってオナニーしているって聞きましたが お金かからなくていいですね・・・・・・・・・ うらやましいです
っと、最後まで自分の間違いを隠そうと相手に必死こいて相手のボロを出そうとしている 赤っ恥さんがいましたとさ。以後放置よろ。
つうか 過去レス探すのメンドクサイからHP作れよ!
>以後放置よろ これみて思い出したけど前回荒れたときもこいついた
んで、みんな
>>605 をそれぞれやってみた?
コンパイルエラーだの警告だの出たよね?だから何?としか言いようがないんすけど・・・
>>605 は何をしたかったか、明確なレスを求む。
>>642 やってないお前に聞いてないけど?だからそういうレスするなって。
NULLポインタのアドレスを表示するコンパイルもしてないくせに。
>>643 >みんな
>それぞれやってみた?
やった人間だけレスしろというなら最初からそう書け
お前は抜けてるんだよいろいろと
さっきっから何かと噛み付いてこないと気がすまない基地外がいるんだな。 わかりやすいね、そういう人間って。このスレには初心者が集まって 自分より知識のないやつが多いと思い込んで、浅はかな知識でレスしちゃっているんだろうけど それが仇となってボロだしまくりで恥をかく奴。
>>644 はぁ?抜けているのはお前。しかもお前には脳みそが抜けているようだ。
日本語がわからない?何他人に指図してんだよ?こっちはやれよとは言ってないが
やってみた?とは聞いたが?何これ?何俺に噛み付いてんの?さっきから基地外だよなお前はw
抜けているのはお前の脳みそ、な?理解しろ。
> 最初からそう書け
何命令してファビョってんだよ?わけのわかんねーソースを書いたNULLポインタ厨w
ん〜と、やってみてだから何?という人に早くレスしてあげてください。 さっさとね。
何言ってもこういう自分中心人間には効かないんだろうな ある意味うらやましい
>>647 =
>>646 =
>>644 初心者叩きするのに失敗して赤っ恥ソースを出した厨房必死だなwwwww
何そこまで必死こいてんの?あっ、あのソースをコンパイルされて、自分がボロを出して
バカだということを露呈されるのが怖いんだぁ〜〜〜〜(^ー^)b
コンパイルした奴らにはあほだということがバレて大恥かいたもんなぁ〜〜〜君ってw
>>650 そうだね、わけのわからねーソースを出してreturn NULLしちゃっているぬるい奴って
>>598 >>605 < こっ、こここ、これは・・・すごい大ヒントだ!こいつがバカだってことがわかる大ヒントw
>>605 ほらほら早く説明しろよ。初心者さんがコンパイルして待ってまつよ。
ほら、涙目を拭いてさ。
こうゆうスレには 群がってくるんだな 有る意味新鮮
>>590 だけコンパイルできない(しょぼい環境)を使っていることがバレバレ
もしかして、OSはMS-DOSでつか?
608 名前:せんしぇ〜 ◆cNsKLREitk 投稿日:2007/05/14(月) 19:01:47 はい。 コンパイルのはじき方が理解できましたか? ↑しかもこれがあのヒントの答えだろ?だから何?コンパイルエラーを誘うなら 別にreturn NULLじゃなくても通らないソースを書けばおkだろ? NULLの取り扱いについてなんら説明になってないから。
オレ、このスレのこと一生忘れない
しつけ〜
ってか俺も言っててわけわからなくなったw return NULL;だけを持ち出したらそれはそれで問題とならないが あれがその前の流れからして何のヒントなのか?それが知りたいw
おわった?
ヒント #include <stdio.h> int main(void){ int x=NULL; printf("%d \n",x); return 0; } さぁ、int型のxに代入された値はなんだった?俺んとこは0。 ただ、これはNULLポインタとは話は別なんで、あしからず。
環境依存
さて、もう一つ、大大だーーーーいヒントでピントを与えちゃよ。 次は文字データとしてNULLを指定しちゃうよ。俺んとこは空文字でコードは0が入った。 #include <stdio.h> int main(void){ char x=NULL; printf("%c %d \n",x,x); return 0; }
そう、何か値(データ)として与えるのと、ポインタに対して与えるのとでは ぜんぜん違うんですねぇ〜。これならわかるでしょ。NULLそのものが何なのか。 え?こんな説明じゃ不十分でヌルい?まぁ、後は使い方を適切にしてやってくれ。 ポインタにNULLを与えた場合、何も示すアドレスがないってことには変わりはないさ。
>>662 これ、時々偉そうに「環境依存」だなんていう奴がいたりするけど
実際に0が出ない環境を見たことあるのか?
>>667 そうやって相手をさぐろうとするだろ?だから気持ち悪いって思われるんだよ。
>>662 が本日の最初だが?だから何だ?って言われることをお前は言うから
日頃周りから「なんだこいつ?気持ち悪い」って思われてんだよ。
いいたいことがあるなら言えよ、相手次第でいえるとかやっているから
お前は弱者を見つけては相手を叩く性格になっちまったんだろ?
自分が筋の通る説明ができないなら黙ってた方が良いぞ。
ちなみに、&xにして%pでポインタのアドレスを確認すると、
中にNULLで与えた値は入っているが、ちゃんとアドレスは割振られているから。確認してみろ。
>>535 プログラムよりアルゴリズムの方が(数学が)難しかった
#include<stdio.h>
int main(void){
int x, tmp, left, ans, digit_align;
printf("正整数を入力してください > ");
scanf("%d", &x);
if(x<0){printf("\nError:正整数を入力してください\n");return 1;}
for(digit_align=1;x/digit_align>=100;digit_align*=100);
left=x/digit_align;
ans=0;
while(left>0 || digit_align>0){
for(tmp=9;tmp>0;tmp--)
if((ans*20+tmp)*tmp<=left)
break;
if((ans*20+tmp)*tmp<0) break; // overflow?
printf("%d", tmp);
if(digit_align==1) printf(".");
digit_align/=100;
if(digit_align>0)
left=(left-(ans*20+tmp)*tmp)*100+(x/digit_align)%100;
else
left=(left-(ans*20+tmp)*tmp)*100;
ans=ans*10+tmp;
}
printf("\n");
return 0;
}
ポインタに対してと値との違いがわからないならプログラムなんてやめとけ。 #include <stdio.h> int main(void){ char x=NULL,*xn=NULL; int y=NULL,*yn=NULL; printf("char x=NULL : %p -%c- \nchar *xn=NULL : %p \n",&x,x,xn); printf("int y=NULL : %p -%d- \nint *yn=NULL : %p",&y,y,yn); return 0; }
#include <stdio.h> void main(void) { printf("てすつ"); int a; a=NULL; return a; }
>>668 被害妄想激し過ぎだろ…
普通に流れが混乱して誰が誰か分からなかっただけなんだが、
まあいいや
>>669 ありがとうございました
助かりました
他のアホどもとは格が違いますね
>>672 うざい。何が言いたいかはっきりしろ。相手がどうとか関係なしに
NULLがどういうことか?の話で説明する相手次第で事実関係を捻じ曲げたり
おかしいと自分が思ったことを叩きつけるのはどうかと。言いたいことがあるなら言え。
すでにソースを提示して証明されてんだろ。ポインタとNULL(データ)を与えるのとはどういことかについて。
理解できないのにこんなスレで無知な初心者相手にいい加減なレスをしているのか貴様は?
>>672 相手にしないほうがいいよ
さっきだって人違いって言ってるのにわかろうとしないし
といっても擁護乙って言われるだけだけど
自分に対する批判は
>>605 だと思ってるから
ちなみに
>>662 が本日の最初って言うのはうそだから
>>673 訂正
先頭に #include<limits.h> を追加
if((ans*20+tmp)*tmp<0) break; // overflow?
↓
if(ans>=(INT_MAX-81)/180) break; //overflow?
ぬるぽを代入するなら#define NULLPO 0にするか普通に0使えって事ですか?
>>631 マイコン等を使う組込系では、Cしか高級言語の選択肢がない
(ほかは低級なアセンブリ言語)という場合も多い。
>>678 NULLを代入したいのならNULLと書けばいいだろうガッ
>>681 んー・・・
基本的に「代入したらいくつになるの?」って話だから、
代入ぐらいさせてくれ(っていうか初期化だな。こりゃ)。
int x=(int)NULL;
で x が 0 で初期化されない環境があるかないか、という事で。
あのさ お前らって「Cパズル」ってやったこと無いだろw
ないお^^
Cなら NULL か 0 を必要に応じて使い分けなくてはならない C++なら、ほとんどのプログラマーが 0 を使っている VCなら nullptr で即解決
690 :
687 :2007/05/14(月) 22:37:03
>>688 すまん687のNULLは(void*)0のことだと思ってほしい。
FAQ 5.5は0をポインタ型として扱うときの話だろ。
でもここではヌルポインタを整数型として扱おうとしている。
C++でいうところのreinterpret_cast<int>((void*)0)を表したかった。
規格上の話を言えばポインタから整数型への変換は implementation-defined だから、何も言えないかと。 大抵はいちいち変換かけたりせず値としてはそのままにするだろうから、実際上は >687 の通りだと思う。 で、調べてて気づいたんだけど、9899:1999 だと、ポインタ型→整数型→元のポインタ型で元の値に戻ることすら 保証されてない(void* 経由ならOK)。 14882:2003 だと、整数型が十分な大きさであれば↑で元の値に戻ると明示されてるんだけど。
ttp://ja.wikipedia.org/wiki/%E3%83%8C%E3%83%AB_ (%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF)
まだやってんのかよ。実際にNULLをコードの中に入れてどういう結果が出力されたかで
わかるだろ。各個人の勝手な定義や妄想はいらねーって。
time(NULL)だの使われているけど、何もないを与えてもしゃーないべ?
だから、データや値として与えた場合と、ポインタに与えた場合とでどう違うか?
それはそうと、
>>580 あたりで \0 (NULL文字)の値(コード)が0なのは良いとして
アドレス無しってところがどういうことなのか、説明を求む。
文字列の終端を示す文字として使われているんで、その終わりを示す場所にも
先頭からそのNULL文字そのもののアドレスまでちゃんと割り振られているとは思うが?
>>568 で言えば unko の後ろに空文字が入っている場所のアドレスが存在していると思うが?
#include <stdio.h>
int main(void)
{
char a[5]="unko";
size_t i,sz=sizeof(a)/sizeof(a[0]);
for(i=0; i<sz; i++)
printf("a[%d] : %p / \"%c\" \n",i,&a[i],a[i]);
return 0;
}
printf("a[%d] : %p / \"%c\" / code : %d \n",i,&a[i],a[i],a[i]); なんならこうして、文字コードも参照してみるか?って終端の\0(NULL文字)に対して ASCIIコードでは0が割り当てられているのは既出だが、ちゃんとコード(値)0として 扱われてんだよ。そこは実装されている言語によって扱われ方も違う点はあるだろうけど なんだかんだ言ってもそれはおかしいといっても、実際はそう扱われているというのが現実。 なぁ、おまいら、いい加減目を覚ませよ?辻はもう処女じゃないんだぜ?それが現実さ(タバコを吸う紳士のAA略)
だれもそんな話してないだろ・・・
またNULLの話してんのかよ。毎度毎度よく飽きねえな
これでどうだ? #include <stdio.h> int main(void) { char a[5]; size_t i,sz=sizeof(a)/sizeof(a[0]); a[0]='u'; a[1]='n'; a[2]='k'; a[3]='o'; a[4]=NULL; for(i=0; i<sz; i++) printf("a[%d] : %p / \"%c\" / code : %d \n",i,&a[i],a[i],a[i]); puts(a); return 0; }
毎年分からないやつが入ってくるんだから 同じ話題が繰り返されるのはしょうがないさ
つまりこういう事 void hoge(void) { return; }
戻り値void に 空return を、御丁寧につける必要なんてないだろ そんなふうにかんがえていた時代もありました
702 :
デフォルトの名無しさん :2007/05/15(火) 01:50:35
すみません。PHPはC言語でできてるみたいですが、ソースないっすかね?
>>693 \0は八進法で値を指定するエスケープシーケースなのだから、
ASCIIでなくても'\0'は0に等しくて当然。
705 :
デフォルトの名無しさん :2007/05/15(火) 02:26:10
>>704 お前もわかってないアホだな。無駄口たたくな、自分の勘違いをさらすだけだから。
文字コードを表示するのに %d を用いている点が理解できてないな。
>>704 文字の終端を意味する \0(NULL文字、空文字)を入れたところにも
ちゃんとデータを格納するアドレスが存在しているって話だが?
なんかややこしくなっているが、 unko の後ろにNULL文字があるからといって
unko の後ろのアドレスがNULLになっているわけではないんだが・・・
その説明に何をわけの分からない説明にもならないことをいい掛かってきてんだね君は?
まさか、値は0だけどアドレスはなしとか書いちゃった赤っ恥
>>580 でつか?
708 :
デフォルトの名無しさん :2007/05/15(火) 02:34:46
>>706 「猫でもわかるC言語プログラミング」
これ読め
580 名前:デフォルトの名無しさん 投稿日:2007/05/14(月) 18:13:10
>>572 正確に言えば 正確に言えば 正確に言えば 正確に言えば 正確に言えば
¥0 =値0 、アドレス無し ¥0 =値0 、アドレス無し ¥0 =値0 、アドレス無し
その後、文字の終端を意味するNULL文字の入ったデータに
前の文字列に続いてアドレスが割り振られていたことが
プログラムの実行にて証明されたため、赤っ恥をかいてしまったのであ〜〜る
あっ、ちなみに16進数で表示したかったら、%d から %x なり %X で指定してね♪
>>706 704じゃないけど
八進法で値を指定ってのはたとえば'A'=65(10進)=101(8進)だから
これを'\101'と表すって事では。
八進法 八進法 八進法 八進法 八進法 八進法 八進法 wwwwwww
酔ってんの? 素面でこれだったら怖いけど。
八進法、発進!ブ・ラジャー!
相手すんなよ・・・くだらん
cで10進定数の0を使いたいのですがどうしたらいいでしょう。 普通に0と書いたのでは8進定数になってしまいました。
単に順番にコードが割り当てられているのに、なぜか八進法wwwwww
何のために2進数、16進数があるか分かってないな、この八進法w
>>704 > ASCIIでなくても'\0'は0に等しくて当然。
これも意味が分からん。そりゃ何進法になっても0は0だが
そういうことをいってんじゃねーよ。\0が割り当てられている文字コードが0って話だろ。
ASCIIだからじゃなくて、ASCIIではそうなっていて、そのASCIIコードを参照できる
ソースコードを用いた説明で、なぁ〜〜に意見にもならないわけの分からない理論を持ち出してんだ?
\0 が 0 に等しい、だから何?そうじゃなくて、文字の終端を表す NULL 文字が入ったアドレスには
値に 0 が入っているのを敢えて参照して、ちゃんとNULL文字もデータとして格納されている
アドレスが割り振られているって話 な・ん・だ・がw
八進法必死だなw
16進数 → \x00 8進数 → \000 \0 は8進数の0だったんだよ。まあ同じ0だけどね。
消えろゴミめ
八進法、発疹!そりゃちゃいまんがなw
704 名前:デフォルトの名無しさん 投稿日:2007/05/15(火) 01:57:28
>>693 \0は八進法で値を指定するエスケープシーケースなのだから、
ASCIIでなくても'\0'は0に等しくて当然。
ASCIIとかじゃなくてNULL文字の入ったchar型のデータにどんな値が入ったかであって
値が入っているアドレスが存在するって話でしょ?ぶぅ〜〜ふふふふっ(吹いた)
ム板って何か些細なことに異様にこだわる人がいるよね。 やっぱ仕事のストレスなんだろうか。 SI業界で就活してたけどやめとこうかなあ…orz
>>716 0で始まる数字は8進数だよ。
int a = 090; とか書いてコンパイルしてみ、8進数に9という数字は無いからエラーになるよ
Cの構成を考えていて、偶然にも、 driver.ができました。 『C言語なら俺に聞け』と なっている位なのでそんな物は、 とっくにご存知なのでしょう、ね?
>>708 読む必要性なし、というか、ちゃんと八進法に関する文献やソースを分かりやすく
提示してもらえませんかねぇ?ASCIIじゃさまざまな文字が表現できないんで
いまさらASCIIだけにこだわる気はねーよ。文字コードで10進数以外だと
16進数で表記されているのをよく見かけるんですけどねぇ〜。どこでつか、八進法で
表記しているところは?なんで八進法?そんなんで表記したら、桁が多くなるものだと
10進法で表すより桁の数が増えて面倒なんすけど?
いったい何の議論をしているのかさっぱりわからんw
阿呆が喚いてるだけだろ。議論になんかなってないよ。
>>725 『続』
忘れていました、拡張子をなくしてもdriver、です。
いい加減秋田から、まとめとくね。NULL文字を入れたところにもアドレスは存在する。 勝手にNULLポインタにしちゃだめだぞ、めっ
何でお前らそんなに喧嘩腰なの^^
?
>>708 >猫でもわかるC言語プログラミング
これは糞、ほかのをおすすめします
>>726 『続』
!(Φ_Φ+)
あ、number.を間違えてしまいました、失礼。
さぁ、みんなで八進法の文字コード対応表を表示させようじょのいこ! #include <stdio.h> int main(void) { int i,cnt; for(i=32,cnt=0; i<127; i++,cnt++) { printf("%c : %3d",i,i); if(cnt%6==5) printf("\n"); else printf(" | "); } printf("\n\n魅惑の八進法!\n"); for(i=32,cnt=0; i<127; i++,cnt++) { printf("%c : %3o",i,i); if(cnt%6==5) printf("\n"); else printf(" | "); } return 0; }
んじゃこないだ見かけた望洋のアレ
あっ、すまん、これも追加しといて printf("\n\n平凡な十六進法!\n"); for(i=32,cnt=0; i<127; i++,cnt++) { printf("%c : %X",i,i); if(cnt%6==5) printf("\n"); else printf(" | "); }
( ´ω`)
微笑ましいけど鬱陶しいなあw
天災と思って諦めてる
天才に向かって失礼な、めっ、めっめっ(猫をしかりつけるように)
カス
ハゲ
ナルはナルシストのナルさぁ〜、決して成瀬川なるのなるではない。
(´ω`)
なんか変な方向に行ってるみたいだな。 1. ヌル文字の値が '\0' なのは規格で決まってる。 2. \0 という特別なエスケープシーケンスは規格で用意されておらず、 これは 8 進数の値を直接埋め込むエスケープシーケンスでしかないので、 '\0' の値はどの環境でも厳密に 0 になる。 (そもそもそんな特別なエスケープシーケンスを用意してしまったら、 8 進数で 0 を埋め込むことが不可能になってしまう) これでいいだろ、もう。
>>747 だからぁ、NULL文字もちゃんとデータとして存在しているから
文字の終端を示す\0が入っているアドレスもちゃんと存在しているって話なんだが?
規格がどうとかじゃなくて、空文字でNULLが扱われていてもちゃんと文字データとして
存在して実態があるからNULLポインタの示す場所と勝手に解釈するなって話ナノーメートル
アドレスがあるのは当たり前だろ。
!(Φ_Φ+) 頑張っていますね? source.を書きたい、のですが、 original.なのでとって置きます。
あと、NULLポインタが示すオブジェクトに対してデータを表示させようとかするのは どうも過去ログからしてタブーっぽい。指し示す場所がないゆえに、環境によっては (null)とご丁寧に表示してくれているが、実体がないから何も表示できないのが当たり前だし。
>>748 うーん、「NULL」が出てきたら脳内で「NULLポインタ」に置換しちゃう人?
>>747 は全くNULLポインタについて言及してないよ。
だけどまあ、NULL文字ってのは誤解しやすいような気もするから、
終端文字と表現するのがいいんじゃねえのかなあ。
NULL ポインタは参照しちゃいけない。 「あらゆる有効なアドレスと比較しても等しくならない」のが NULL ポインタの定義だから。 ただ、NULL 渡して表示させるという場合、 内部でポインタが NULL ならこれを表示・・・という分岐があるのなら問題ない。 参照してないから。
彼は自分の知らないことに話が展開していくのを怖がってるんですよ
おまいらほんっとにナルちゃんが好きなんだね ♥
NULL 文字という表記は良くない。 NULL はヌルポインタを表すマクロ名を表すから、紛らわしい。 null 文字という風に小文字で書くならいい。
>>749 いや、だからそれを勘違いしたのが
>>580 なんだが、お前いい加減にしろ?
何歳だ?ゆとり教育世代か?寝ろやボケガキ
>>580 みたいな無茶苦茶なのは、既に訂正するとかそういうレベルじゃないな。
>>754 はいはい、すでに話がわかっているという証拠のソースも何度も提示しているのに
それすら自分の思い込みや勘違いで否定しているお前が論破されるのが怖くて
何も筋の通った意見がいえなくておびえているのはお前だろ?
表記の問題じゃない
怖がりすぎ
「彼」って自分の事だと思ったの? 自覚してんのだなぁ。
>>752 >
>>747 は全くNULLポインタについて言及してないよ。
いや、モロ最初の項目で
> 1. ヌル文字の値が '\0' なのは規格で決まってる。
言及してんじゃん。だから、NULL文字の値が\0とか話ではないが
値は \0 ではなく 0 だが?それすら間違ってんじゃん。
あくまでもエスケープシーケンス、 printf(""); の " " の中で使うときとかで用いられる
\n \t のように \ がついたものは値じゃないんだが?w
んで、ことの本質は
>>580 にある \0 あるいは NULL文字データが入っているところにも
ちゃんとアドレスが文字列の終わりに続いて割り振られているって説明に、なぁ〜〜に
ごちゃごちゃとわけのわからない言い掛かりをしてきているんだね?って言っているんだが?
いや、もうええわ。八進法とかわけのわからん話を絡めるし、気持ち悪いぜ?
>>763 だからそこのどこにNULLポインタが出てくるの?
NULL ヌルポインタを表す単なるマクロ。 C では 0 あるいは ((void*)0) と定義される。 '\0' ヌル文字。値の全てのビットが厳密に 0 となると規格で決められている。 この表記の場合、型は C では int 、C++ では char 。 0 数値の 0 でもあり、ヌルポインタでもある。 型は int ではあるが、値 0 になる定数式がポインタに代入された場合、 あるいはポインタと比較された場合は、ヌルポインタと解釈される。 その場合、その値のビットが全て 0 になるという保証はない。
日本語でおk
> 1. ヌル文字の値が '\0' なのは規格で決まってる。 全くNULLポインタには言及してないんだよ。
ヌル文字とヌルポインタは全くの別物ってのが分かってないのかねえ。
あたいのこと、舐めたらいかんぜよ。 ちなみに \a \n \t \0 だのは文字であって値ではありませんので、あしからず。 それらを示す文字コードは値といってもまぁ差し支えないかもしれんけどね。 んじゃ、レベルの低い知ったかを相手にするのもここらでやめておいてやるわ。 まったく、本当に理解力のないどうしようもないやつっているんだなw だからこの世はいつまでも頭の悪い奴が立場が悪くなってファビョって自暴自棄になるんだなw
>771 自己紹介乙
C++ の規格票(しかも 1998 年のドラフト)ですまんが、
null character (respectively, null wide character), whose representation has all zero bits.
ヌル文字(あるいはヌルワイド文字)、これは全てのビットが 0 の表現をとる。
>>771 \0 は文字だが '\0' は値だぞ。
ということで NULL文字をNULLポインタと思いこんで延々暴れたバカがいた ということでよいかな。まあ紛らわしいからその分は差し引いてあげるけどさ。
>>772 もうその程度のことでしか反論できないでしょ?おまえどこの学校出身だ?
まぁ、ランクE未満の大学でもなく大学未満なんでしょうね。
派遣のお仕事がんばってねぇ〜〜 ♣
>>747 で \0 と '\0' を使い分けてるのが理解できないんだろうか。
「NULL文字」なんて腐った表記をする奴にロクな奴はいない。 null文字と書け。
>>765 >>580 の
> ¥0 =値0 、アドレス無し
参照。ちなみに\0(NULL文字、空文字)に割り当てられているコードは0だが
\0自身は値ではなく「文字」ですから。
\0が値だなんて誰か言ってたっけ
まあ、'\0' も値が 0 になる整定数式だから ヌルポインタとして扱おうと思えば扱えるけどね。 紛らわしいから絶対やっちゃいけないが。
>>580 がクソなのは既に誰もが認めている終わった話題だ。
580・・・ 誰かがこんなのを擁護してるとでも思ったのかな
必死に無意味な説明をしようとした奴がボロ出しまくりでワロスwwww なんだよ、\0が値とか言っちゃっているやつ?あたいにそんな小細工 通用しないかんねぇ〜(スケバン恐子風に) エスケープシーケンスは文字であって値ではない、これ定説。 ライフスペースでも定説。オウムには破防法(意味不明)
int *p = 2 - 4 + 2; これもヌルポインタ。
>>747 1. ヌル文字の値が '\0' なのは規格
^^^^^^^^^^^^
対応コードが0ではあるが、NULL文字は値ではなく文字ってことな・ん・だ・が?
文字って値なんだぁ。それじゃぁ、char a[10]; a[0]='a';ってaって文字を入れるとき
値にAが入っちゃうのぉ〜〜?もはや値に有らず。
a[0]='\0';で空文字を入れることはあるけど、値で入れるなら '' とかつけずに
対応している文字コードを入れたらええんでな〜〜い?
>>785 ヌル文字とヌルポインタは別物ってことはわかったの?
自分の意味不明な筋の通らない理論を押し切ろうと、もう必死で 相手の筋の通った理論を屁理屈で解釈してつつこうと必死でしょ? そんなんだから物事の本質が霞んでしまうんだよ。 路上を見てみろ?道路交通法をまともに守っている奴がいない、破っている奴らばかり だから自分もそうする?それじゃ自分 も 道路交通法を理解していないと 道路交通法を知っている人に対して思われているだけだと気づくんだな。 警察の前じゃ違反は違反だぜ?キップ切られるぜ?免許傷つくぜ? 俺はまだ違反点数の累積は0だ。けど、違反点数も俺の免許もNULLじゃないぜ?
もうぬるぽ('A`)
「値が'\0'」と書いてあるんであって「値が\0」とは書いてないんだよ。
>>788 あたりまえじゃん、っつーかそれをず〜〜〜っと昨日の
>>580 に対して言い続けてきたんだが?w
俺が理解していないと思ってんの?何回文字列の終端を示すNULL文字自身が入ったデータの
アドレスが存在していて、文字列の後ろの終端を示す部分がNULLポインタになっていないと説明したら
わかるんだと?鬱陶しいなぁ・・・
なるほど。そこにつっこんでたのか。 「ヌル文字の値」は「ヌル文字の文字コード」の意味だが、 確かに紛らわしい表現ではあったな。 でも、それを言うなら、 >char a[10]; a[0]='a';ってaって文字を入れるとき ~~~~~~~~~~~~~~~~~~~~~~ >a[0]='\0';で空文字を入れることはあるけど、 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ もおかしいな。 「aの文字コードを入れるとき」、 「空文字の文字コードを入れることはあるけど」だな。
>>791 だから \0 は値じゃなくて 文字 だっつってんだろ・・・説明だって出てんだろ。
その文字、NULL文字に該当する対応コードが 0 だっつってんの。
対応コードは \0 か? \0 って何進法?w
>>792 763 名前:デフォルトの名無しさん [sage] :2007/05/15(火) 03:49:15
>>752 >
>>747 は全くNULLポインタについて言及してないよ。
いや、モロ最初の項目で
> 1. ヌル文字の値が '\0' なのは規格で決まってる。
言及してんじゃん。
>>794 \0 は文字だけど '\0' は文字リテラルで値だろ!!!
何度言ったら分かるんだ!!!
>>793 お前が
>>736 の出力結果を理解していないことがわかった。もう黙ってろ。
文字型の変数に文字でなくても直接文字コードを入れても使えることが理解できてないんだな。
通りで話がわからないわけだw
なんか、俺がNULLポインタとデータの違いがわかってないみたいないわれ方しているが
さっきっから俺に対して曲解した考えで論破しようと必死こいている奴の方が
曲解しているだけあって理解していないのがバレてんだが・・・なんだよ \0 が値って?
あたいにはそんなの通用しないかんね!
\0は値じゃない。 '\0'は値。
この流れなら言える!お前ら全員ぬるぽ!(寝るぽ!)
何というか日本語がこれほど通じないのは、もはや釣りだとしか思えない。
クォーテーションで括ってるか括ってないかの違いがまだわかってないな
779 名前:デフォルトの名無しさん 投稿日:2007/05/15(火) 04:04:19 「NULL文字」なんて腐った表記をする奴にロクな奴はいない。 null文字と書け。 ↑こういうことしかいえなくなっているら。しかもこれは自分基準w こういうのが鬱陶しいんだよな。だから何?としか言われない 間違いではないことを気にいらねーって罵倒してくる奴。 お前何様だよ?デジタル世界の王者か?欧米か!? てめぇ基準なんてどうでも良い。検索してどっちが多く使われているか調べてから出直せw
紛らわしいのにわざわざ大文字で書く理由が知りたい。
>>773 値って言うならちゃんと演算子使って演算できんだろうな?
その\0(空文字)をどうやって演算すんだ?
文字データとしては表示すらされないってのにw
文字同士の計算でもあるの?Aを文字と扱うか16進数として値を10として扱うかでは大違いだろ
それすら理解していないなんて、どこの大学出身だ?あっ、大学未満か
\0は値じゃないって言ってるでしょ
本気で言ってるのか??? str[i] != '\0' は演算だろ? そして printf("%d\n", '\0' + 3); がエラーにでもなると思ってるのか?
なんで'\0'を勝手に\0に置き換えるかな。
どう見ても釣りです。 本当にありがとうございました。
>>808 もうその程度でしか言い返せないんだね。どちらも値じゃないんだが?w
値は\0よって、スケバン風に言ってなさいってこったでパンナコッタ。
>もうその程度でしか言い返せないんだね。どちらも値じゃないんだが?w もうオワタ\(^o^)/
また、Bという文字に1を足すなんておかしい。文字コードに対してならおk。 Bに1を足すなんて、環境によっては文字列の追加として B1 と解釈されかねんよ。
>>811 本気で分かってねえな・・・。
呆れてものも言えん。
だめだこいつ
最後まで自分の理解する頭のないことを露呈しつつ粘着乙。お前だけだよ、こんなところで 朝まで居残りしているのは。
全くだ
っと、最後までこんなスレで自分の間違いを必死こいて間違いじゃなかったことにしようと ここでレスしている人に対して噛み付いてくるメガネデヴピッツァですた(・∀・)
?
もう放っとけ。
うん
822 :
デフォルトの名無しさん :2007/05/15(火) 04:50:33
\0は値じゃなくて文字だよぉ〜〜、対応コードは0で値として扱えるけどな、ケケケw
>>814 '\0'でもこれは制御文字であって値にあらず。何が言いたいかはっきりしろよ?
このスレってやっぱ分かってねーとかそことなく揺さぶるけど、結局
自分の意見を言わずに逃げるチキンが多いよな。この前もそう。
お前分かってないなみたいなことを言ったが、答えは fgets の中の文字数の指定に
255 と入力ミスをしたのをネチネチ陰湿にあおってきただけで、そいつ自身は
fgetsの使い方についてろくに答えず。入力ミスしたやつは間違いにしろ
参考にできるページを参照してたが、このスレのタイトルを理解しておらず
答える気がないくせに相手にだけくだらねぇ間違いを指摘する程度でここにいるなら
出て行った方がよくね?何、自分にとってイラつくものを見て気分を害したんだよ!みたいな
不満をわざわざいい掛かってくるのか、さっぱりわからねぇ。こんなところにいるくらいなら
車軸の壊れそうなジェットコースターにでも乗ったら?
char a; に対して a=0; a='\0'; はおkだが、前者は0という値、後者は明らかに文字データゆえに \0は文字ではあるが値じゃないんだが、それすら理解していないのはどっちだぁ〜〜い? NULLはWikiにも記録されているが、ゼロと区別するためのドイツ語で0を意味するnullを用いて 何もないを意味するが、null文字は表示される文字も何もない文字として扱われていて 割り当てられている文字コードは0だが文字そのものはアルファベットも数”字”も含めて 文字であって”値”ではない。\0 およびその他制御文字は表示されないけど文字であって 値ではない。あたいも値ではない。
ようやく分かった。お前が何が分かってないかが。 char 型というのは CHAR_MIN〜CHAR_MAX の値を入れることの出来る整数型であって、 C には「文字型」なんて型はないんだよ。
値だっていうなら a=\0; をやればいいさ。コンパイルエラー起こすけどな、ケケケ 誰かさん、敢えて\0と'\0'のシングルクォートを強調したが、それをつけてんなら なおさら値じゃなくて文字データだよなぁ。まさか、値にわざわざ''をつけて代入してんのかーい?
入れることの出来る、じゃないな。 表現することの出来る、だ。
わかんねーなら調べろだの、調べてないだのを指摘するくらいなら 調べられる参考文献を参照しろってーの。ろくにそういうのも出さずに ただ自分が思った(間違った)理論を提唱されても、お前が決めた仕様でも規格でも ルールでもないだろって話で流されるよ。本来の基本概要を理解している、知っている人には うそは通用しない。\0は制御文字であって値じゃない。あたいでもそんなことは分かっている。 勝手にありもしないことを定義しないでくれ。\0を文字コードで参照するなら0なら分かるし 文字データとして入れるのに '\0' で指定するなら分かるが、値じゃない。文字だ。 いつまでもモジモジしてんじゃねーぞ。
C の規格票読め。 読むだけならタダだ。
くどいようだが、すでに俺は証明、提示をした。制御文字は値ではなく 文字データ。文字コードによって割り当てられている文字データ。 その文字コードがあっても、コードに対応した文字データがなければ 文字コードを使ってもナンセンス。\0は便宜上使われている文字であって これは値ではない。そして本来は表示されない制御文字も、便宜上 使えるようにと割り当てられている代用の文字があるだけであって \a \n \t そのものは値ではなく制御 文 字 であーる。 そんなの当たり前なのに、なーーにが値だ、あたいにはそんな屁理屈、通用しないかんね。
\0 はエスケープシーケンスで''か""の中に出てこないと意味がない。
\0は代用で用いられている文字であって値ではない。値じゃない。 値に対しても定義が曖昧だが、みたまんま、\0 \a \t \n は制御文字として 代用で使われているものであり、数値ではない。数字だって場合によっては 数値ではなく数字(数の文字)として扱われるが、その数の文字に対してだって 文字コードが割り当てられているけど、数字のまんまの数値で文字コードは割り当てられて いないのは、ASCIIコードの対応表を出漁するプログラムで一目瞭然。 そう、単に文字コードが割り当てられているんであって、文字そのものは 値じゃ〜〜ないんだよ。制御文字として代用されたものだけ特別扱いで値になっちゃうの? それじゃ、アルファベットや数字も値?値じゃ〜ねぇなぁ、文字データは演算できんよ。 割り当てられた文字コードを数値として演算することは出来るけどな。 たとえばAに割り当てられている文字コード1を足してBにすることが出来るというのは 説明済み。だけど、Bに1を足すのは不可能。文字の結合として B1 としちゃう 環境や言語は存在するから、要注意。文字は文字データであって値にあらず、これ当たり前。
#include <stdio.h> int main() { int a = 1; a = '\0'; printf("%d", a); return 0; }
長文になったが、制御文字の代用の \0 は値じゃなくて文字。モジモジ君だって それくらい知ってるよ?割り当てられている文字コードと文字データをごっちゃにしないよう 今後は注意しましょうね♪ さっ、これにこりたらこんなところにいないで とっととジェットコースターにでも乗って来い。頭がスカッとすっぜ?
というかCでいう文字とは整数の一種でつまりは値なんだが。 と今更こんなことを言ってみるが、みんな寝ちゃったかなw
文字定数
眠いから寝る
朝までやってたのか!
___ 見えませ〜ん ‖ | ∨ ‖現実 ∧_∧ .ヘ∧ ‖ \ ( ・∀・) (゚A●) || ̄ ̄⊂ ) ( と) 凵 し`J U U ___ 読めませ〜ん ‖ | ∨ ‖空気 ∧_∧ .ヘ∧ ‖ \ ( ・∀・) (゚A●) || ̄ ̄⊂ ) ( と) 凵 し`J U U ___ 知りませ〜ん ‖ | ∨ ‖常識 ∧_∧ .ヘ∧ ‖ \ ( ・∀・) (゚A●) || ̄ ̄⊂ ) ( と) 凵 し`J U U ___ ありませ〜ん ‖ | ∨ ‖未来 ∧_∧ .ヘ∧ ‖ \ ( ・∀・) (゚A●) || ̄ ̄⊂ ) ( と) 凵 し`J U U
何やってんだお前ら?
子供同士でサンタは居るか居ないかで喧嘩してたようです。
C 規格票より
http://www.jisc.go.jp/app/JPS/JPSO0020.html JIS X3010 を検索
3.7.1 文字、1バイト文字
<プログラミング言語Cでの意味> 1バイトに納まるビット表現
5.2.1 文字集合
(略)
すべてのビットが 0 であるバイトをナル文字という。
(略)
6.4.4.4 文字定数
構文規則
文字定数:
'c文字列'
L'c文字列'
(略)
単純文字定数は、型 int をもつ。
1 バイトの実行文字に対応する単一の文字を含む単純文字定数の値は、
対応付けた文字の表現を整数として解釈した数値とする。
2 文字以上を含む(例えば 'ab')又は 1 バイトの実行文字で表現できない文字
若しくは逆斜線表記を含む単純文字定数の値は、処理系定義とする。
単純文字定数が単一の文字又は逆斜線表記を含む場合、
その値はその単一の文字又は逆斜線表記の値を持つ char 型のオブジェクトを
int 型に変換したときの結果とする。
(略)
例 1. 普通、ナル文字を表すために表現 '\0' を使う。
(略)
文字は値だな。
だめだこいつ、制御文字は表示できる文字データじゃないから 便宜上代用されている\0 \a \n \tがあってもそれを値だと思っているよw 文字と値の違いが分からないからって、プログラムが出来ないわけじゃないから 安心しろ。だけどお前の頭じゃ限界が見えているから、言語の使用とか 電子計算機の仕組みにかかわらず大学で受ける授業にはついていけないだろうから 低学歴のまま人生を諦めろ。まぁ、学歴が高くなくても成功する人も稀にいるから 努力は怠らないこったね。つまらないことに労を費やしているうちに、老いていくし 元気もなくなるから、早いところ人生の積み重ねを始めておけ。 間違っても間違いを押し切ることはするな。\0 が値に見えるなら目じゃなくて頭が どうかしているよ。
規格表を見る限り、\0 \a \n \t は「c文字」であって「文字」ではない。
>>844 ダウト。文字データそのものは電子計算機はもってないんだよ。
人間が文字として認識する形を示すものを、文字コードで対応させて
参照しているのが分からないみたいだね。所詮、大学未満の考える
つまらない浅はかな考えだな。大学で普通に習うから、まだ受験するチャンスがあるなら
がんばって大学に行きな。基本的には入学に年齢制限はないから。60過ぎても入学する人もいるし。
×規格表 ○規格票
>>846 制御文字の代用で使われている文字だと言っているんだが?
どう見ても値じゃなくて円マーク+文字の組み合わせの文字だろ。
いい加減馬鹿は市ねよ。うぜぇよ。値に対する概念もない馬鹿が
>>850 規格票の 6.4.4.4 文字定数を 100 回読んでこい。
「逆斜線表記」は「c文字」だ。
>>849 いや、脳内じゃなくて書かれているまんま述べただけだが?
お前こそ理解しろよwwww
> 例 1. 普通、ナル文字を表すために表現 '\0' を使う。
はい、自分で爆弾抱えたまま爆発させて自爆しちゃいましたね。
決定的な証拠。表現を使うであって値とは掛かれていません。
ちなみに、null文字のコードが0に割り当てられているのは事実だが
これは人間が決めたことであってもともと電子計算機がそれをそうだという
仕組みを持っていたわけじゃないんだよ。文字そのものが数値じゃないんだから。
いい加減、文字が人間が作ったものだと気づいてね。計算機がやっているのは
あくまでも0と1の組み合わせの演算。そのデータから文字データを参照して
表示する際に文字コードを使ってんだよ。大学レベルだから、専門学校以下は黙っててね。
>>851 ええ、だからお前もしつこいなぁ。理解力のない馬鹿は失せろ。
俺がまず否定しているいのは \0 が値ということ。値じゃなくて
どこをどう見ても文字。お前はそれを敢えて c文字だと言ってるしw
値じゃなくて文字、それについては俺がすでに述べてるんだが?
ボケは市ねよ、低学歴w
\0 は c文字。 '\0' は文字定数で値。
>>854 残念ながら制御文字であって \0 は便宜上表示できない制御文字の代用で
使っている文字だ。値ではない。値について理解していない馬鹿は失せろwwww
>>855 規格票の 6.4.4.4 文字定数を 100 回読んでこい。
あ、構文規則の読み方も分からない低学歴なのか?
こういう話題であげあしの取り合いになるのは宿命なのか
> 例 1. 普通、ナル文字を表すために表現 '\0' を使う。 くどいようだが自分で墓穴を掘ってそのままあの世へ行け。 二度と人間界に戻ってくるな。これが読めないなら日本語を勉強してから出直せ。 そこにある \0 は紛れもなく \ と 0 を並べたそれぞれが文字であり、組み合わせて値としたものではない。 これ以上理解できない曲解しかしないやつは放置するね。 値じゃないのは事実。文字コードは便宜上人間が割り当てたもので Aそのものが値を持つとかないから。AはA。人間が作った文字コード表に 電子計算機が持つ基本の数値を割り当てただけだから。
とうとう規格票に文句付け出したよwwwwwwwwwwwwwwwwwwwwwwww
盛り上がっていいじゃない
>すべてのビットが 0 であるバイトをナル文字という。 これが見えないのか?
char a=0; の a を %c で表示すると、というか表示はされないが空文字が参照される。 a='\0'; とした場合、明らかに文字データを使っているんであって a=0; のような値は使われていない。ちゃんと文字データと値の違いを理解しましょーね 大学未満w
>単純文字定数は、型 int をもつ。 >1 バイトの実行文字に対応する単一の文字を含む単純文字定数の値は、 >対応付けた文字の表現を整数として解釈した数値とする。 これも読めないのかな。
誰かさんは制御文字の代用で使われている \ と 0 という2つの文字をくっつけると 値になっちゃうらしいよ?w どこをどう見ても \ も 0 もつなげても \0 という 文字 です ありがとうございました。文字と値の違いが分からない痛い子は以後放置よろ。
#include <stdio.h> int main() { char a = '\0'; printf("%s", a == 0 ? "'\\0' == 0" : ""); return 0; }
\0 は値じゃないと何度言えば分かるのか。
規格票をまともに読めないキチガイを相手にしても無駄だな。
c文字c文字うっせーよボケ。俺は値じゃなくて\0も文字だっつってんだよw 文字と値の違いも分からない弱い頭ってやーね、こいつぜってー最後は犯罪者になってんな 理解力がないのが自分だと気づいていない、判断力を失った麻薬中毒者のごとく
まだやってたのか?
引き際を失ったんだろうな・・・可哀想に。
んでよぉ、本質はそんなことじゃないんだよ。null文字が入った場所にも
ちゃんとそのnull文字の文字コードが入ったデータを示すアドレスが入っているんであって
>>580 がいう値0なのにアドレスなしってのが間違いって話なんだが?
何ここまで複雑に話をこじらせちゃってんだろうねw
これだから理解力のないやつは、何か相手の知ってなさそうなことを持ち出して
揺さぶろうとするんだけど、自分の理解力のなさが露呈されて墓穴を掘るんだよねw
いつの間にかnull文字のnullが小文字になっててワロタw
844 名前:デフォルトの名無しさん 投稿日:2007/05/15(火) 06:50:52 文字は値だな。 846 名前:デフォルトの名無しさん 投稿日:2007/05/15(火) 06:54:17 規格表を見る限り、\0 \a \n \t は「c文字」であって「文字」ではない。 「c文字」であって「文字」ではない。 「c文字」であって「文字」ではない。 「c文字」であって「文字」ではない。 「c文字」であって「文字」ではない。 「c文字」であって「文字」ではない。 「c文字」であって「文字」ではない。 ちゃんと自分で文字と言っているのに文字じゃないとか言い出す大ボケかますしw
>>580 の話はもうとっくに終わってるんだが・・・。
C の規格では「文字」はビット列、すなわち数値であると規定されています。 >3.7.1 文字、1バイト文字 ><プログラミング言語Cでの意味> 1バイトに納まるビット表現
580が\0と書いたのが気にくわないんじゃないの。 ちゃんと'\0'と書け、と。 (でも、そうすると、854,855の対応が気になるわけだけど)
まだやってたのか そんな暇あるならバイトでもしろよ
テレビ見ながらついでで相手してるだけだからどうでもいい。
879 :
デフォルトの名無しさん :2007/05/15(火) 07:22:22
>>843 って結局 JIS 規格の話だろ?逆斜線ってのは、大学の授業で聞いたことあるけど
日本じゃもともと存在していなかったんで、¥(円マーク)をバックスラッシュの代用で
使ったって話で、それについて制御文字の表現を \ を前に用いる規格があるって話で
>>843 は文字が値とかって話じゃなくて、制御文字を日本では \ との組み合わせで
使われているって話でしょ?何勘違いして直接関係ない文献を勘違いしたという
意味の分からん説明をしているのか、理解不能だわ。
> 例 1. 普通、ナル文字を表すために表現 '\0' を使う。
これについてはあくまでも表現の仕方であって、値として使っているって話じゃないよ。
JIS規格におけるバックスラッシュの代用が \ って話だろw
よくこんな釣りを思いつくよなあ。尊敬するぜ。
\ がバックスラッシュで表示される環境で見てるものとして脳内変換しろよ。
(´ω`)
883 :
デフォルトの名無しさん :2007/05/15(火) 07:31:13
ちょっと哀れに思えてきたねw
それは、5.2.1参考 「この規格で規定する基本文字集合の中の二つの要素 \と〜は、JIS X 0201では、それぞれ¥(円記号)と  ̄(オーバーライン)に置き換える」 で既出なんだな
バックスラッシュの代用の話なんて規格票に何も書かれていないんだが。 規格票読んでないのバレバレ。
とうとうISO646にまでケチをつけるまで来たのか?
>883 文字定数が('A'とか'B'とか'\0'とか)が値を持たないといいたいわけ?
「値」という言葉の定義すら怪しいな。 数値以外は値じゃねー、と考えてそうだ。
#include <stdio.h> #define TEST '\0' int main() { printf("%d", TEST); return 0; }
もうここまで来ると理屈抜きで全面的に賛同して輪廻から解放してあげたいのだが こだわっているポイントがイマイチ分からない
暇な時に適当に遊んであげれば良いと思うよ。
void main() gets() NULL \0 他になんかあったっけ?
でもそういうスレじゃないしな多分
こいつの脳内計算機では「値」ってのと文字とが区別されてるんだよ、きっと。 メモリにタグビットかなんかがついてて。
>894 malloc&freeを忘れてもらっては困るな
こういう奴は議論してる最中は絶対に認めないけど、 数日経つと「そんなの当たり前じゃないか」とか言い始めるタイプ。
>>897 お前の低レベルな頭じゃ文字と値の違いがなくて、数字の0として扱われている0も
値の0なんだろうねwwww 文字と値の違いが分かってないから、数字が入ったとき
数値との区別がついてねーようだな。お前、文字と数字の入り混じったデータを
扱ったこともない素人だろw
おまえら夜通しやってたのか?
このスレはかまってくれる人が多いね。 宿題スレじゃもう誰も相手しなくなったのに。
面白いオモチャだからいじってみた。
>>901 いや、モロニ表現って書いてあるやん。ところでさぁ、話をそらすなよ。
きゃつは敢えてシングルクォートをつけて '\0' を値といったんだぞ?w
JIS規格じゃもろにそれをなる文字の表現とされているんだが?w
お前の場合、Aも値とか言いそうで怖いわ。Aは16進数では確かに値として
扱われることもあるが、文字と値をごっちゃにしてたら、Fまで値になって
E以降が文字になってそうだなw
〃∩ ∧_∧ ⊂⌒( ・ω・) はいはいそのとおりそのとおり `ヽ_っ⌒/⌒c ⌒ ⌒
747 名前:デフォルトの名無しさん 投稿日:2007/05/15(火) 03:30:52 なんか変な方向に行ってるみたいだな。 1. ヌル文字の値が '\0' なのは規格で決まってる。 2. \0 という特別なエスケープシーケンスは規格で用意されておらず、 これは 8 進数の値を直接埋め込むエスケープシーケンスでしかないので、 '\0' の値はどの環境でも厳密に 0 になる。 (そもそもそんな特別なエスケープシーケンスを用意してしまったら、 8 進数で 0 を埋め込むことが不可能になってしまう) これでいいだろ、もう。 1. ヌル文字の値が '\0' なのは規格で決まってる。 ^^^^^^^^^^^^^^^ 表現はJIS規格でそうだが、値とは書かれていない。強いて値というならそれは0。 割り当てられている文字コードが0。あくまでも\にも0も文字、組み合わせてもそれらは 文字列という解釈はされど、C言語ではそれをエスケープシーケンスで使われる 表示できない文字を代用した文字コードが使われているって話であって それらは値ではない。んじゃ、アラートとして使われるアラートの値は'\a'って言うかね? こいつは \ の後ろに 0 があったんで、その数字に目がいってしまい、値と言ってしまったんだろうけど それは0という文字であって値ではないんだよ。んじゃ、\a が値になるんかね? これはどう見ても文字列であって、その組み合わせを代用して表示できない文字をあるように 使っているのさ。それが理解できないから大学未満レベルって言われるんだよw
#include <stdio.h> char itoc(int i) { if (i >= 0 && i <= 9) return '0' + i; else return '\0'; } int ctoi(char c) { if (c >= '0' && c<= '9') return c - '0'; else return -1; } int main() { int i = 9; char c = '8'; printf("i(char):%c c(int):%d", itoc(i), ctoi(c)); return 0; }
「文字として存在するか、数値として存在するか」なら計算機の中ではどちらも数値として存在していて、 「文字として扱うか、数値として扱うか」ならプログラム上での扱いによる
コンピュータ的には状態として存在しているような気もするが。
\a ビープ音(警報) \b バック・スペース(後退) \f フィード(書式送り) \n 改行 \r キャリッジ・リターン(復帰) \t 水平タブ \v 垂直タブ \' シングル・クォーテーション ' \" ダブル・クォーテーション " \? ? \\ バックスラッシュ \ さぁ、これらもそれぞれ 改行の値は '\n'、水平タブの値は '\t'って言うかね? 表示できない、エスケープ文字って俺は言うね。そう、それらには表示できる文字が 存在しないから、便宜上代用されているんであって、別にその\との組み合わせが値 って言うものにはなっていないんだよ。強いて値って言うなら、割り当てられている文字コードに 対してなら理解は出来るが。実際のところ、整数型の値として文字コードが格納されているしな。 文字そのものは数値としては存在しておらず、文字コード表から該当する、登録されている文字を 表示させる仕組みがあるんであって、実態は数値なのさ。だから敢えて文字コードを参照する ソースを書いてやったのに、理解していないなんて・・・だめだな。 お前じゃ汎用電子計算機の仕組みについて学ぶのは無理だ。その仕組みの原理にのっとって プログラムだって作られているんだが・・・
感じとしてはわかったけど、その「値」はCの規格票で 定義された用語ではないな。
もちっと 制御 文字について理解しましょーね、大学未満さんw さて、今日は休みだがお前らには付き合ってられん。悔しかったら どこでも良いとは言わないが、施設の整った大学にくらい通って勉強してみろ。 実際にその原理について習う実験や研究をした人間とじゃ格が違うぜ。 もちっと電子計算機の基本原理を理解してから出直せ。 文字データそのものは数値としては存在しないよ。文字だって人間が使っている文字みたく 見えるように視覚的にコンピュータが実装している範囲内の表現能力を用いて構成されてんだから。
printf("??[foo]??");としたら、期待通りの出力になりませんでした。 期待通りに出力させるにはどうしたらいいでしょう。
>>912 別にお前のポリシーなんて誰も聞いてないよ
#include <stdio.h> int main() { char str[] = "abcdefghijk"; for (unsigned int i = 0; str[i] != '\0'; ++i) printf("%p:%x ", str+i, str[i]); return 0; }
( ´ω`)
(´ω`)
どっかのブログでも書かれてたが、ほんと質問者置いてけぼりで言い争いが続くなw
こっち見んな
\0の0が数値に見えちゃったんだろうね。これはその他の\aや\tのごとく 数値ではなく数”字”だから。\の後ろに数値を参照していると思ったんだろうね、可愛そうに。 どう考えてもそれも含めて\と組み合わされた文字列をエスケープ文字として代用しているだけです ありがとうございますた。
>>920 fj的フレームですらないのが困り物だな。manだの規格書だの読めば済むことをグダグダと・・・
#include <stdio.h> int main() { int chs[] = {'\a', '\b', '\f', '\n', '\r', '\t', '\v', '\'', '\"', '\?', '\\', '\0' }; for (unsigned int i = 0; chs[i] != '\0'; ++i) printf("%x ", chs[i]); putchar('\n'); int j = 0; while (chs[j] != '\'') ++j; while (chs[j] != '\0') printf("%c ", chs[j++]); return 0; }
あほが一人だと哀れなだけだが、 あほが二人だと始末に負えないな
あほが三人集まったらどうなるんだろ
>>568 が始まりか…
こんなに長文を書きながら密度がスカスカの議論を延々と…
延々と「俺的『値』の定義」を読まされるスレはここですか?
>>923 void に向かって``半角''の一言をだして, 引き際失った奴を思い出したよ...
# fj だけじゃないけどな, void + ``半角''
まぁエスケープシーケンスの話はもう良いや。はいはい、'\0'はナル文字の値ってことで良いよ。 俺も今後'\0'はナル文字じゃなくてなる文字の値って言ってあげるから。 それよりもさぁ、最近、里田まいが気になるんよ。俺、別に今までハロプロだのモー娘。だの まったく興味がなったんだけどさ、クイズヘキサゴン2に出ている里田まいを見て なんかこう、キュンッときたんよ。辻と違ってまだ処女だったらええのになぁ〜なんて 期待しつつ、プログラミングをしているわけだ。そんな俺ってどうよ?C言語ならぬ Cまでいけそうかな?
もまいら思い出してくれ。 文字と数値がメモリ上でも区別されてると思い込んでる人種がいるだろ。 COBOうあなにをするタテイスカンナニラセ@「
(´ω`)
こいつらが何か意味のある議論をしている・したがっていると勘違いするから混乱するんだよ。 レスを付けて何か返ってくるというリアルワールドでのコミュニケーションの代償行為をほぼ唯一の生きがいとしているだけなのに。
俺の周囲の場合リアルワールドの会話はこれより遥かにつまらんから困る 人の噂話、悪口、武勇伝等の自慢話ばっかりでうんざり 2chが悪口ばっかりとか生産性の無いネタばっかりって言える人は幸せ者
これは釣りに対して全力で釣られてみる遊び。 素人にはオススメできない。
おまいらじゃせいぜい2ちょんねるだな。日本語で
937 :
デフォルトの名無しさん :2007/05/15(火) 11:54:24
だめだこいつら…はやくなんとかしないと
昨日今日あたりで一気にスレを消費しちまったな
940 :
デフォルトの名無しさん :2007/05/15(火) 13:20:05
開発環境はvc++2005 OSはxpです。現在研修でコマンドラインから 取得した引数で四則演算を行うプログラムを作成しているのですが、 オーバーフローのチェックで悩んでいます。 加算、減算については出来たのですが、乗算のオーバーフローチェックが 分かりません。limits.hをインクルードして2147483647〜-2147483648 までの数値を扱っています。どのようなコードを書けばよいのでしょうか? よろしくお願いします。 扱っている変数は int lop; // 左のオペランドに入力する値 int rop; // 右のオペランドに入力する値 int result; // 計算結果 int mod; // 除算の余り int max = INT_MAX; // 表現可能な最大値 int min = INT_MIN; // 表現可能な最小値 char *check; // 変換不可能な文字を格納 char op; // 入力する演算子 これらになります。ファイル名lop op ropの形式で 実行します。
long long 使っていいならラクチンなんだがなあ。
>>940 lop*rop (lop>0 rop>0)について調べる場合
lop>INT_MAX/rop のときオーバーフロー
負数とか考えると面倒だね
インラインアセンブラ使いてーなー。
掛け算のオーバーフローは難しそうだな。 n周まわって 結果が正のまま とかありえそうだし
>>940 マルチ乙。
加減算も自分でやったんじゃないんだろ?w
Hackmem とかhacker's delight で調べてみ。
日本語訳も出版されている。
掛け算だけにマルチ いやスミマセン
掛け算を足し算のループに変えてオーバーフローを検出くらいしか思い浮かばん… 負数は先読み計算で。
MSBのbit位置テーブル作っといてlookupすりゃええんちゃうの?
949 :
デフォルトの名無しさん :2007/05/15(火) 14:02:51
レスありがとうございます。確かにlongが使えるといいのですが、使っちゃ駄目みたいです。ちなみに先ほどのコードを使用して動かしてみました。全ては試していないのですが、 -2147483648 * -1 = -2147483648や 2147483647 * -1 = オーバーフローと なってしまいます。上はオーバーフローに下は -2147483647になるようにしたいのですが、中々上手くいきません。 どうすればよいでしょうか?よろしくお願いします。
2進数のまま手計算してみれば? 途中経過のビットも出力して確認しながらやれよ。
これでダメな場合って lop==0 の時以外にあるかな? result=lop*rop; if(result/lop!=rop) オーバーフロー
>>951 っ lop=-1 rop=INT_MIN
>>940 加減算のオーバーフローチェックはどうやったの?
>>952 これやったら落ちてビビった (MacOSX 10.4.9 Intel Core 2 Duo)
>>954 >>952 で同じく落ちた (Win98SE C7 600MHz)
なんと言うか恐ろしい計算だw
>>952 これ反則だよなあ。普通の計算でも起こり得りそうで困る。
gccで落ちたコードの核になる部分だけ抽出。 -- movl $-2147483648, %eax movl $-1, %ecx idivl %ecx -- うーん、-1で割っているだけなのに。
これは勉強になった。
>>952 C#でも落ちるかなと思ったけどOverflowExceptionが出るだけだった。
>>959 Exception をキャッチしてないからCだと落ちる っつーことっしょ
Instruction Set Reference の idiv の項を見てみた。 例外 #DE (divide error) 1. 除数が 0 の場合 2. 商が大きすぎる/小さすぎる場合 の、2. に引っかかってるみたいね。 アセンブラレベルで QWORD で使うなら十分起こりうる状況だけど、 int でやってる限りは -2147483648 / -1 でしか起こらないよね、これ。 こりゃ盲点だわ。
実数でも同じことできる?
どうでもいいけど、Linuxだと"Floating point exception"って出るんだよな。 どこがFloatingPointなんだか。
gcc@MacOSX でもそう出る。 イミフ。
実数は普通の演算で例外起きたっけ?
もう面毒せーから1/0=πという数学体系を新たに定義しようぜ
移項すると 1 = π × 0 になるんだけど
その定義上ではその移項自体がまた特殊な扱いになるのか。
>>963 English WikiからSIGFPEの項より
>Although SIGFPE does not necessarily involve floating-point arithmetic, there is no way to change its name without breaking backward compatibility.
可換環じゃなかったら最早普通の計算に使えないなw
次のような関数を作っていて、test3の直前でセグメントエラーが 出てしまい困っています。 R[]はintのポインタの配列で、疑似二次元配列です。 R[i]とy[]のなかで共通する数をR[i+1]に代入して、 最後に0を入れる関数です。 どうしてエラーが出るのか、誰か教えてください。 void katu(int *R[], const int i, const int y[]){ int a=0, b=0, k=0; for(a=0; a<N; a++){ for(b=0; b<N; b++){ if(R[i][a] == y[b]){ print("test1\n"); realloc(R[i+1], sizeof(int)*(k+2)); printf("test2\n"); R[i+1][k] = y[b]; printf("test3\n"); k++; } if(y[b] <= 0) break; } if(R[i][a] <= 0) break; } R[i+1][k] = 0; return; }
>>972 reallocの戻り値捨ててどうするんだよ。
reallocが成功したら元の領域はアクセスできなくなる。
>>972 realloc()の使い方を勉強しろ。
それはさておき、一文字変数は判り難いだけだから止めた方がいいぞ。
#特に引き数iなんて、誤解してくれと言わんばかりだ。
i は for ループのカウンタ以外では使わないほうがいいかもw
一文字変数はカウンタくらいしか使わないな
aとかbをループ変数にするのはなんかいやだな。
(滅多に使わない)数式の実装ではまんま1文字変数使うこと多い # コメントで参考書名+page 書いとくが
数式をコメントに入れておくなあ、そういう場合。
>>979 数行オーダーの数式なら、そうするほうが多いけどね。
RGB⇔HSV変換とかの 条件付な式だとコメント書きにくいねぇ (で、リファレンス書いて終了w)
こういうアルゴリズムでーす後はググれって感じでコメント書く。
982 :
972 :2007/05/15(火) 19:18:53
>>973-974 ありがとうございます。
realloc(R[i+1], sizeof(int)*(k+2));
を、
R[i+1] = realloc(R[i+1], sizeof(int)*(k+2));
にしたら無事に動くようになりました。
結果が正しいかはこれから検討する所でありますが。
今回初めてreallocを使ってみたので、本当に間抜けなことをしていました。
重ね重ね、ありがとうございます。
変数についてですが、どうにもうまい名前の付け方が思い付きませんorz。
他の方のソースを読んで勉強していくしかないのでしょうか?
>>982 変数名を思いつけないと言うことは、書いているものが理解できていないか説明できないかのどちらかだろう。
前者は問題外だが、後者も社会人として必要な能力だ。「相手に伝える」ことを念頭に入れて、
変数の説明をする積もりで名前をつけてみるといい。
例えばこんな感じですね int i int love, you
>>984 あーそれは、愛のあるいい変数名だね。
って、違うでしょ。
986 :
972 :2007/05/15(火) 19:42:35
>>983 「相手に伝える」ですか。心がけてみます。
どうもありがとうございます。
変数名なんて、それが何を入れとくための奴なのか分かるんならなんでもいいよ
988 :
デフォルトの名無しさん :2007/05/15(火) 19:58:41
VisualC++.NETならばC言語で.NETを使えますか?
いいえ。 VS2003ならMC++, VS2005ならC++/CLIでのみ.NETを使えます。
いいえ、専用に構文が拡張されたC++になります。
自前でホスティングすれば使えなくもないだろう。
984 differ:char 5,6,7,8,9 line 4 !(Φ_Φ+){level}
吸収も良いですが? スレを、そちらに変更?
実行の様子をテキストファイルとして作成する方法を知りたいのですが、windowsの場合どうすればいいのでしょうか? Linuxなら./program > text.txtとするらしいのですが、windowsの場合がわかりません
なぜ試さない?
1000ゲット
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。