C言語なら俺に聞け 160
レス数が1000を超えています。これ以上書き込みはできません。
>>949
それわざわざ文字列にしてからやる必要ないよね。
10で割った余りを足して10で割るのを繰り返せば良いだけだし。
仮に(宿題や問題の都合で)どうしても文字列に直してやらなければならないのだとしても文字列として使う char 配列の
初期化で全部0で埋めるのは処理の無駄だしそんな事をするのはC言語における文字列の扱いについてよく分かって
いないことの現れだと思う。 30点
みんなもっと優しくしてあげなよ。ゴキブリだって生きてるんだぞ int chg(int n)
{
int a=0,b;
while(n) {
b=n/10;
a+=n-b*10;
n=b;
} >>957
int で受けて 文字列化してるからちょっと
最初から文字列で受けてるなら一考の余地はあるかもね プログラミングには最低限の数学的な素養が必要な事が証明された…
科学技術計算を扱わないとしても、計算論とか数学とは切っても切れない関係にある 文字列を受ける場合
int chg(const char* s)
{
int ret = 0;
char tmp[2] = { 0 };
while (*s && !isdigit(*s)) s++; /*数字じゃないところは飛ばす */
if (*s) {
while (*s && isdigit(*s)) { /* 数字が連続している間だけ */
tmp[0] = *s; ret += atoi(tmp);
s++;
}
}
return ret;
}
環境依存で
isdigit(*s) を ('0'<=*s && *s <='9') に
tmp[0] = *s; ret += atoi(tmp); を ret += s[0] - '0'; に
置き換えることもできるかもしれない >>963
> 環境依存で
数字に対応する文字コードが連続で昇順に並んでいることは
言語仕様で保証されている。 次の while (*s && isdigit(*s)) と意図の一部は重なるし if (*s) はいらんかったね 今のモダンな言語からしたら一見して下らないやり取りだけど
これがC言語なんよね・・・ ハードとアプリのあいだに多くの計算を必要とするソフトの層があるからね
OSやらで全部カバーするのは無理だからCは死なない >>964
漢数字も並んでたら嬉しかったと思いませんか >>969
現実には JIS は読みの順序で Unicode は部首の画数の順序が原則。
漢数字を例外にしたらそれはそれで不格好だし嬉しくない人もいるだろう。
まあ Unicode は後から追加した分だのなんだのでそんなに綺麗に並んでいるわけでもないので
どうせぐちゃぐちゃなら数字くらいは並べても良かったんちゃうかなというのは気持ちはわかる。 一二三四…Why Japanese people! 壱<弐<参<死<伍<碌<質<八<苦<拾<百<銭<萬
ですね判ります >>971
英語の綴りの不規則さも大概やないけ! と突っ込んで完成するネタだと個人的には思ってる。 未初期化の自動変数には「不定値」が割り当てられる、と調べるたり自分が学んでいる本でも書いていますが、自分のコンパイラは常に「0」になっているようです
なぜでしょうか?
ちなみにgcc-10です gcc-11だと「不定値」になります 不定の値とは「未規定の値又はトラップ表現」と規定されてる。
常に 0 であってもこの規定に反しないよ。 >>977 ありがとうございます
ちなみに「トラップ表現」とはなんでしょうか? 976です chatgptで調べました
C言語の仕様では、自動変数を初期化しない場合、その値は不定とされています。これは、コンパイラがメモリ上で変数を割り当てる際に、その領域が以前に使用されていたデータを含んでいる可能性があるためです。
しかしながら、一部のコンパイラでは、自動変数を0で初期化することがあります。これは、セキュリティ上の理由から、またはコードの可読性を向上させるために行われることがあります。
ただし、コンパイラが自動変数を0で初期化することが保証されているわけではありません。したがって、プログラマは自動変数を使用する前に必ず初期化するように注意する必要があります。 >>978
トラップ表現は「オブジェクト型の値を表現しないオブジェクト表現」ということになってる。
その型としてあり得ないビットパターンってこと。
オブジェクトとして格納されたトラップ表現を文字型ではない左辺値式として読みだした場合の結果は未定義となる。
副作用としてそのような表現が生成される場合も未定義。
C の仕様でいう未定義というのは「何が起きても (たとえば暴走しても) 良い」という意味なので実質的に禁止だと思ってもいいよ。
とはいえ整数型でトラップ表現があるアーキテクチャを私は見たことが無いけどな。 トラップ表現を調べてみたけどほぼほぼ処理系定義絡みなのね
signed int16の0x8000は-32768かもしれないし、トラップ表現かもしれない
1の補数系でsigned int16の0xffffは0かもしれないし、トラップ表現かもしれない
int32* の4バイト境界に合ってないポインタ(int* p=0x0001)は、強制的に4バイト境界に直されるかもしれないし、トラップ表現かもしれない >>980 ありがとうございます 勉強になりました 自分のコンパイラってのを明らかにしてくれ
どうしても言えないってならしょうがないが… >>983
> ちなみにgcc-10です
と書かれている。 ぼくはLex&YACCでPL/0を作って満足しました。おわり 夜中に路地から飛び出て来たら俺もびびる
でも >>991 では語れんわ! C言語のソースコードを検査して処理系依存や未定義動作等の環境によって
結果が変わりうる可能性のある部分を見つけてくれるツールってどんなのがありますか?
コードエディタはvscodeなのでこれと連携できるとなおよいです さすがに検査対象としてソースコードそのものをchatGPTに丸投げするのはマズイ
個人情報や機密情報をそのまま入力するのは止めるように開発元のopenAIが忠告してたはず このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 114日 3時間 26分 13秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。