C言語なら俺に聞け 150

レス数が950を超えています。1000を超えると書き込みができなくなります。
1デフォルトの名無しさん (アウアウクー MM57-IE4z)
垢版 |
2019/02/06(水) 13:39:03.21ID:c4bnQMl3M

次スレを作る時は上記1行をコピーして2行に増やして必ず1行目に入るようにしてください。

C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/

※前スレ
C言語なら俺に聞け 149
https://mevius.5ch.net/test/read.cgi/tech/1540731704/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2019/03/20(水) 18:35:51.85ID:nNN3jHgVM
>>857
2回以上変更しなきゃいいんなら
int i=0;
int a[2]={0,0};
int foo(void){i=1; return 0;}
int bar(void){a[i]=1; return 0;}
でいいんじゃね?
a[0]=0; a[1]=1; ならfoo() ⇒ bar()
a[0]=1; a[1]=0; ならbar() ⇒ foo()
の順
2019/03/20(水) 19:15:28.64ID:Jx7dUCON0
>>861
printfが持つ状態って具体的に何だ?
妄想しだすとisdigitみたいのまで状態を持つことを考慮せねばならんのだが
2019/03/20(水) 19:18:49.33ID:SCVZEQpp0
>>857>>861 の意味で書いた(前半部分が余計だったのかも)。
最初の4行のコード foo(), bar() に printf() が仕込まれてない方は
「不定」だが「未定義ではない」。

ところが後半 printf() を仕込んだ方は >>858 の出してくれた最初の例、
foo() と bar() が同一のグローバル変数を変更する場合と
本質的に同一の、つまり未定義動作じゃないか、という話。


>>866 これは巧妙だし、思いつかなかった。
考えてみる(調べてみる)ので少々時間をくれ。
2019/03/20(水) 19:22:36.34ID:TUtYbyGsM
>>867
端末になにか表示されている、ファイルに文字が追記されている、というのが「状態」だよ。
2019/03/20(水) 19:25:59.48ID:nNN3jHgVM
>>868
ID:Jx7dUCON0はスルーでいいよ
レスの内容が頓珍漢すぎる
2019/03/20(水) 19:39:28.59ID:Jx7dUCON0
>>869
つまりstdioさらにはデバドラがRENTかREUSかって問題ということで
じゃあ別プロセスでprintfを使われたら未定義動作ならHello worldすらill-formedって話だな
2019/03/20(水) 21:01:55.22ID:SCVZEQpp0
>>866 の案も未定義な感じ。

EXP30-C. 副作用が発生する式の評価順序に依存しない
ttps://www.jpcert.or.jp/sc-rules/c-exp30-c.html

本文冒頭の引用部 (ISO/IEC 9899:2011 セクション 6.5 らしい) より再引用
> スカラオブジェクトへの副作用が、このオブジェクトへの別の副作用、
> または、このオブジェクトの値を使った演算、のいずれかに対して
> 順序が規定されていない場合、未定義の動作となる。

foo() の i=1; が「スカラオブジェクト i への副作用(代入)」
bar() の a[i]=1; が「このオブジェクト i の値を使った演算(配列の添字)」
に該当するかと。


ちなみに前述の Phinloda さんのページだと【未定義の例】にある
二つの副作用完了点の間に、オブジェクトの値を2回以上変更している場合、
 又は変更した後で新しい値を得ること以外の目的でそのオブジェクトを
 アクセスしている場合。
の部分と思われるが、ちょいと分かりにくいね。
…いや、自分で紹介しといて、その言い草はないだろ、と我ながら思うけど。
2019/03/20(水) 21:33:10.02ID:SCVZEQpp0
>>867 返答が前後して失礼。
printf() が持つ(かもしれない)状態ってのは、例えば
出力バッファ(fflush() で強制的に吐き出させるアレ)の
使用量を管理するカウンタかポインタか、そのあたりを考えてた。
もちろん stdout のバッファリングを禁止すれば、この場合に
printf() を安全に使えると考えてるわけでもないのだけど。

むしろ「不定の評価順序を調べるのに printf() を使えるなら、もっと簡単で
末端プログラマに読めるソースコードで実現できるんじゃないか」って感じ。
ライブラリ関数だと、中で実際に何をやってるか見えないからね。


>>849 の 3, 6 あたりに該当してきたので、本日はここまで。
…というか「バーナム効果」って奴じゃないの?
2019/03/20(水) 22:01:51.83ID:XMH8sO2j0
>>872
> bar() の a[i]=1; が「このオブジェクト i の値を使った演算(配列の添字)」
> に該当するかと。
なるほど
よくよく考えたらそのリンク先の未規定の例を参考にして
int i=0;
int foo(void){i=1; return 0;}
int bar(void){i=2; return 0;}
でいいと思う
2019/03/20(水) 22:13:24.28ID:47yan6gC0
なにやら話がややこしい方向に行ってるけど、
そもそも関数の呼び出しは副作用完了点だぞ?
876デフォルトの名無しさん (アウアウエー Sac2-v7M6)
垢版 |
2019/03/21(木) 10:46:08.11ID:Jl2vA9O/a
C言語初心者です。
やっとポインタの学習にさしかかったところです。
C言語におけるポインタという概念と、
メモリの間接アドレス指定とは似ていると思ったのですが、
この感覚は間違っていますか?
2019/03/21(木) 10:57:18.81ID:BSODtxQx0
間違ってないです
2019/03/21(木) 12:29:28.54ID:hA8AO9It0
>>876
いいセンスです
2019/03/21(木) 12:35:12.10ID:QKEEZEuZ0
ポインタの理解の前にメモリ間接アドレス指定をご存じな人ってすごいw
2019/03/21(木) 12:42:31.97ID:A52ypKFV0
>>879
ベーシック、アセンブラの順にやってきたら
だいたい理解はできているもんじゃないの?
2019/03/21(木) 12:56:03.12ID:0TbsGGEWd
今どきその順番で始める初学者がどれだけいるのかね
2019/03/21(木) 13:15:33.98ID:y6QadYkWa
>>877
>>878
恐縮です
学習の中でつまずいたらまた質問させてください

>>879
>>880
間接アドレス指定のほか直接・相対・即値…などは
基本情報技術者試験の勉強範囲になっているので知りました
C言語もきっかけは基本情報の対策として取り掛かったものです
残念ながらBasicもアセンブラも手付かずです
2019/03/21(木) 14:04:09.43ID:u3ljjJr7a
まだCASLとかあんの?
2019/03/21(木) 16:01:46.89ID:hWT+U/v40
>>883
おいおい

https://www.jitec.ipa.go.jp/1_04hanni_sukiru/_index_hanni_skill.html#yougo
https://www.jitec.ipa.go.jp/1_13download/shiken_yougo_ver3_1.pdf

探すのに2分掛からなかったぞ…
2019/03/23(土) 02:49:51.66ID:OxlPANCja
セミコロン2つ並ぶのってどういう意味でしょ?最初は誤植かとおもいましたが

for(i = n;;){ ←ここ
if(strcmp(hogehogehogehogehoge
2019/03/23(土) 03:00:16.33ID:lRnozO4Da
for のかっこの中は二個あるじゃん、いつも
2019/03/23(土) 03:14:04.86ID:0Wp5e8jo0
>>885 で for ループを使う必然性って何だろう
while でも良いように見える
2019/03/23(土) 06:01:58.96ID:fQCcwCLn0
>>887
while (1) {
は warning が出るコンパイラもありますので
for (;;) {
を多用しています…
2019/03/23(土) 06:17:45.22ID:jegHMgvE0
確かに for (i = n;;) /* 初期化あり, 継続条件なし, 更新なし */ よりは
i = n; // 初期化
for (;;) // 無限ループ, 終了判定はループ内
の方が for の使い方では見慣れた書き方だよな。

というか for (i = n;;) を見せられたら、いったん立ち止まって
頭の中で2行分けに翻訳して理解すると思うわ。
2019/03/23(土) 06:25:51.88ID:2BzPzaMr0
while(1) に難癖つけてくるコンパイラって具体的に何だ?
2019/03/23(土) 06:42:04.57ID:WDi4jE890
HPUXだった気がす
2019/03/23(土) 07:22:12.89ID:0Wp5e8jo0
https://www.sejuku.net/blog/25197#continue



if(i + 1 < 3) {

と書かれていて i < 2 でないのは何故でしょうか
先進的なコンパイラだと自動的に最適化されるものなのでしょうか
2019/03/23(土) 07:38:42.49ID:lQ0YIRmF0
while (1 == 1)
2019/03/23(土) 08:03:50.35ID:jegHMgvE0
>>892
実行結果を見ると、最初に表示されるのは「3回目の処理です」だね。
この 3 はループ変数 i から算出される値。

最初に表示したい値である 3 を if の条件式の中にも書いておく方が
プログラムが何をやってるか(3を表示する状態になるまで continue する)を
読み取りやすいという考え方かと。
if (i < 2) を見て「i < 2 の間は continue される。i == 2 になったら
continue されずに下の処理に進む。すると最初に表示される数字は i + 1 で 3」
と理解するより簡単だろう(とプログラムを書いた人が考えたのだろう)。


実験したところ、ちゃんと最適化されるみたいね。
if (i + 1 < 3) でも、アセンブリの方では 2 との比較になってた。
2019/03/23(土) 08:08:46.89ID:2BzPzaMr0
>>891
情報ありがとう
希ガスってことは昔の話だよな
2019/03/23(土) 08:09:19.77ID:2BzPzaMr0
>>893
それを言うなら while(!0) だろ
2019/03/23(土) 08:16:45.51ID:hkiXoQ0jd
everlasting的な英単語を1でdefineしてwhileに突っ込んで無限ループ作ってるコードなら見たことある
却って分かりにくかった
2019/03/23(土) 08:20:29.61ID:3KsHUf0Y0
>>897
悪いなのび太、それ単体試験用のマクロなんだ
2019/03/23(土) 08:30:38.60ID:2BzPzaMr0
#define forever while(1)
これでええやん
2019/03/23(土) 14:07:37.70ID:OxlPANCja
知りたいことが答えてもらえないが文脈からさっすると
for(i = n;;)は ;; こいつが無限ループさせる whileのときの (1)みたいなもんなんかな
そうなると i = n って表記は i が nといっしょやったらずっと無限ループしとけってことになるんかな
んーそうう考えると for(;;)だったら無条件でループやっとけって感じでつかえそうだけど i = nならとかなんか条件はいるなら ;; こんなん
つかわんでももっと他になかったんじゃろかと思うな。 しかしこのテキスト何の説明もなくいきなりあんな技使いやがってやぶりすてたろか
901デフォルトの名無しさん (ワッチョイ c602-rXtv)
垢版 |
2019/03/23(土) 14:23:08.16ID:Bvojjkpo0
>>900
for 分のカッコ内は必ずセミコロンが2つ必要で、最初の項目は変数の初期化、2番目の項目は終了条件、
3番目の項目はブロックの最後に実行させる(主に変数をインクリメントしたりデクリメントしたりする)処理だ。
この項目が抜けていた場合はその処理に関して何もしない。例えば2番目の項目が抜けていたら終了条件なし
(つまり無限ループ)になる。

まあ入門書見ればわかると思うが、これの置き換えだ。

i = 1;
while (i < 3) {
 /* 何かの処理 */
 i++;
}



for (i = 1; i < 3; i++) {
 /* 何かの処理 */
}

特別なのは終了条件が空の場合は終了させなくなる事だけ。
902デフォルトの名無しさん (ワッチョイ c602-rXtv)
垢版 |
2019/03/23(土) 14:23:33.00ID:Bvojjkpo0
for 分じゃない for 文だ。
2019/03/23(土) 15:44:48.19ID:jegHMgvE0
>>900
すまんね。>>885 の質問を見て、普通の for の使い方、つまり
for (初期化; 継続条件; 再初期化) は理解してると感じたのだ。
その辺の説明は >>901 を見てもらうとして、ちょっと気になった点。

for (i = n;;) の i = n は「i が n に等しければ…」ではなく、
「i に n の値を代入する」だよ。等しいかの判定には == (イコール2個)を使う。
for の普通の使い方では「ループ制御変数 i の値を n に初期化」ということ。


代入の = (イコール1個)と、等値判定の == (イコール2個)は、
携帯端末で見分けにくかったりするのかな。
自分では新式の装置を使わないので、そういう部分に思い至らなくてな。
2019/03/23(土) 16:17:36.63ID:dHpVxeMm0
お願いします。OSはcentos7です

メルセンヌツイスタを使って、ひとつだけ乱数を出したいのですが
乱数を出す間隔が非常に狭く、以下の関数でtime(NULL)を用いると
同じ乱数ばっかり出てきてしまいます。

※関数はコレを使ってます
http://www.sat.t.u-tokyo.ac.jp/~omi/random_variables_generation.html

たとえば、1回関数を実行して、ひとつ乱数を生成。
それを、秒間20や、30繰り返したとしても異なる乱数が出てくる方法ってありませんでしょうか

勝手なお願いですが、できる限り簡単な方法でお願いします。
VBAでパチンコシミュレーターを作ったのですが、
実行速度が非常に遅く、もっと高速化するためにCの勉強を始めたばっかりです
2019/03/23(土) 16:34:57.54ID:UrlZPLWE0
まさか毎回シード関数呼んでるとか?
2019/03/23(土) 16:52:06.42ID:2BzPzaMr0
>>904
time(NULL) は1秒以上の実行間隔がないとアウト
それ以外の何らかエントロピー源を使わにゃならんということだ
たとえばスペシャルファイルの/dev/randomだとか、
Core-i7ならrdrand命令を使うとか
2019/03/23(土) 17:11:16.47ID:beYYYDPta
まあシステム由来のシードを使えばいいんだけど、分布・周期が問題なんだから同じ数字が出てきてもいいんじゃない?
シミュレータってそういうもんですよ。
2019/03/23(土) 17:26:50.18ID:jegHMgvE0
>>904
乱数値を1個だけ返すコマンドを作成、シード値に time() を使用。
同じ1秒の間に何度もコマンドを呼ぶと同じ値しか返ってこない。
次の1秒も(さっきまでと違う値だが)同じ値が何度も返ってくる。
…という話なら、しごく当然だね。

元の目的のプログラム、パチンコのシミュレータだっけ?
そっちをCで作り始めて、メルセンヌ・ツイスタの関数を組み込んじゃえば
自動的に解消する問題って気がするけど。

シミュレータの方はVBAで続けて、乱数だけCのコマンドを使うって方針なの?
2019/03/23(土) 17:31:41.38ID:2BzPzaMr0
それだけのためにCOM作るとかアホくさくね?
2019/03/23(土) 17:44:46.83ID:jegHMgvE0
>>909 それはその通りだね。
VBAはWindowsで動かして、CentOSの方では「乱数サーバ」を回す、
というクライアント・サーバ・モデルも何か変な感じだし。

だから、全面的にCentOS上のCでの開発に移行する準備として
乱数ルーチンのテスト用に値1個だけ返すコマンドを作ってみたら、
「立て続けに呼ぶと同じ値しか出ないぞ」と心配になったのかな、と。
2019/03/24(日) 11:20:48.13ID:ac/Kn2Xnp
>>752だ、報告遅くなってすまん
合格してた!!!
俺に教えてくれた人達、本当にありがとう
勉強してC言語はよく分からんってことだけ分かったわ
2019/03/24(日) 11:21:36.49ID:ac/Kn2Xnp
ちなみに不合格だと必須科目だから同じ科目をもう一回受講しなきゃいけなかった
2019/03/24(日) 11:28:18.02ID:5d/S++S30
>>905
たぶんそれ
2019/03/24(日) 12:24:06.58ID:fqkT23RA0
>>912
むしろそれなら不合格でちゃんと勉強したほうが良かったような?
2019/03/24(日) 13:17:04.74ID:YLYVMPlgd
情報系じゃないのに共通科目とかで必須指定されてたりしたら単位だけもらっても問題ないんでね?
916デフォルトの名無しさん (ワッチョイ c602-rXtv)
垢版 |
2019/03/24(日) 13:39:30.48ID:ynFGlX0q0
>>911
おめ
2019/03/25(月) 16:27:08.09ID:7UyvjyQO0
dfコマンドの -h オプションみたいな
数値をヒューマンに優しい表現にしてくれるライブラリって
ありますか?

ddみたいに、ヒューマンから数値にしてくれるやつも欲しい
2019/03/25(月) 19:21:21.61ID:Dver3QI+0
log A / log 10 とって 10の累乗数出して 3で割って近場の補助単位を選択
(ヘクトとかデシとか 3の倍数じゃないのは 知らんw)
919デフォルトの名無しさん (アウアウウー Sa2f-7Ozv)
垢版 |
2019/03/25(月) 20:44:43.02ID:T0osdeZXa
ライブラリは知らんなあ。
でも簡単だから作っちゃうなあ。
あ、そうだ。お題スレのお題にするか。簡単すぎて馬鹿馬鹿しいかも知れんが。
2019/03/25(月) 22:42:17.42ID:kHZO8Xph0
ライブラリは知らんなあ。
でも簡単だから作っちゃうなあ。
あ、そうだ。お題スレのお題にするか。簡単すぎて馬鹿馬鹿しいかも知れんが。
2019/03/25(月) 23:52:18.38ID:ECmJs6xT0
あれ?何故2重に書かれている?ま、いいか。
922デフォルトの名無しさん (ワッチョイ c602-rXtv)
垢版 |
2019/03/26(火) 00:15:09.07ID:xyG5xdoY0
>>917
お題にした。
https://mevius.5ch.net/test/read.cgi/tech/1549160513/779
やがて色々な言語で答えが書かれると思う。
2019/03/26(火) 08:54:20.26ID:JLA/sJXB0
あれライブラリ化されてるのかと思ってたけど無いのか
意外とあちこちのコマンドで出てくる仕様だし
汎用的なのがあると思ってた
2019/03/26(火) 13:28:06.72ID:YPF/ckzld
そのコマンドのソース入手して見てみると面白そう
925デフォルトの名無しさん (アウアウウー Sa2f-7Ozv)
垢版 |
2019/03/26(火) 13:55:17.17ID:PDyA3k9ga
>>923
GNUの複数のコマンドで使われてるからあるかもよ。詳しい人がこのスレ見てないだけで。
まあしかし ls も df もソース公開されてる筈なので探せば何れわかる。
2019/03/26(火) 15:22:52.77ID:BwnADdEO0
libxo
2019/03/26(火) 16:26:09.83ID:8ujFPLE90
https://wiki.freebsd.org/LibXo
https://www.freebsd.org/cgi/man.cgi?query=libxo&;sektion=3&manpath=freebsd-release-ports
https://juniper.github.io/libxo/libxo-manual.html

ふむ…
2019/03/26(火) 17:13:01.28ID:ExDeReqX0
GNUのソースを参考にするのは良いけど、GPLへの感染に気をつけないとな。
2019/03/26(火) 19:37:33.33ID:8ujFPLE90
FreeBSDのuserlandな訳で…
ライセンスは自身で確認されたし

「GPL汚染」という言葉は良く聞くけれど「感染」って何でしょう
2019/03/26(火) 20:07:56.73ID:rSL1tIwA0
>>929
https://www.wdic.org/w/TECH/GPL%E6%B1%9A%E6%9F%93
2019/03/26(火) 21:19:25.60ID:8ujFPLE90
>>930
「GPU汚染」という非常にポピュラーな言い回しを使わず
敢えて「感染」と表現する理由が全く書かれていないようです
2019/03/26(火) 21:22:07.28ID:qKdh3SVz0
>>931
感染の方が伝播するニュアンスが強調されている気がする
2019/03/26(火) 21:26:56.44ID:ExDeReqX0
「GPL汚染」って言葉はGPLへの敵意が感じられるんで避けたのよ。
日頃からGNUさんのおかげで色々便利に使わせてもらってるわけだし。

でも、うっかり1ヶ所でも使うと、プロジェクト全部のソースが
GPLライセンスになって公開を義務付けられたりするのは、
やっぱ「感染」じゃないか、と思う部分もあったり。


よく「車輪の再発明をするのはバカバカしい」とか言うけど、
GPLが「丸い車輪」の利権を押さえてるせいで、
わざわざ自前で「歪んだ車輪」を作って使わざるを得ない
境遇に置かれてる人もいるんじゃないかな、と。

…この場で書くような話でもないんだがネ。
2019/03/26(火) 21:33:22.86ID:rSL1tIwA0
>>931
> 感染性
> これはあたかも、伝染病(それも不治の病)が広がっているかのように見える。
> このため、ソースを公開しないソフトウェアを作る一般的なソフトウェアメーカーや、
> 他のライセンス支持者からは、「感染性のライセンス」「ウイルス性のライセンス」と呼ばれる。

他人事なやつにゃ、あーそー(asshole)でしかないんだろうな
935デフォルトの名無しさん (ワッチョイ c68c-WX4v)
垢版 |
2019/03/26(火) 21:57:53.69ID:X9x/YQnQ0
でも裁判は自分で起こさなければならない。
2019/03/26(火) 22:12:23.05ID:5H/KxRwB0
>>931
マイナーな言い回しをするときは理由を添えないとダメなの?
2019/03/27(水) 06:47:37.38ID:jMm/WIPk0
>>933 でうっかり「GPLライセンス」と書いたけど、
GPL が GNU General Public License のことなら
GPLライセンスだと「〜ライセンス・ライセンス」だね。
「〜ソースがGPLライセンスになって」は
「〜ソースにGPLが適用されて」あたりの方が適切だったか。

言葉の選択に敏感に気づいてくれたんで、理由の説明に5行ほど使ったが、
半面、「GPL汚染」を知っる人が、感染だと分からないことは予期しなかった。
(これはカマトトにカマトトで応じてるだけ、のつもり、為念)
「GPL汚染」がポピュラーってのは正式な用語ではないことも認識してるんだろうし、
してみると技術用語に対する完璧主義とも違うんだろうな。


…言葉の使い方について、少し言葉を使ってみた、と言う感じのお話。
2019/03/27(水) 07:23:31.84ID:MBTJ/mxD0
ん、待て待てGPL汚染じゃなくGPU汚染と931は言っているな
NVIDIAの話か? それともAMD?
2019/03/27(水) 07:40:33.52ID:jMm/WIPk0
ありゃりゃ、確かに「GPU汚染」だね。
文脈に基づく先入観で「GPL汚染」としか見えてなかった。
すると、そっちがお誘いだったのかな。節穴で申し訳ない。

ついでにコピーせずに投稿文を手打ちしてることの傍証にもなったね。
2019/03/27(水) 08:13:14.97ID:ksdLiPzkd
どんな有能なプログラマーにもタイプミスはある。許してさしあげろ。
それより5ch用のリントツールが必要だということが浮き彫りになったな。
2019/03/27(水) 09:20:30.29ID:anJ1LIGv0
GPL汚染というのは商用アプリケーションを作る会社が
GPLライセンスのライブラリーを使いたいのに
ソースを公開すると売れなくなるから使いたくないから言ってるのと
ソースをみせたくないひとが言っているんだよ
942デフォルトの名無しさん (ワッチョイ c602-I58O)
垢版 |
2019/03/27(水) 23:28:49.86ID:oM4knkxt0
まあ味方にもよるよね。GNUの思想を支持する側から見たらプログラムを自由に使えない事は悪だろうし。
943デフォルトの名無しさん (ワッチョイ c602-I58O)
垢版 |
2019/03/27(水) 23:29:19.56ID:oM4knkxt0
見方だ
2019/03/28(木) 11:43:27.92ID:8NAOSscd0
GPLとGNUが脳内で混線してGPUになったのか
945デフォルトの名無しさん (アウアウウー Sa0f-dxKi)
垢版 |
2019/03/28(木) 12:45:58.19ID:0gfjfVxLa
GNL
2019/03/28(木) 19:27:35.93ID:l9a4bgRH0
ちょっと前MMUをMMOと言っちゃって、ちょっと恥ずかしかった。
2019/03/28(木) 20:31:48.77ID:3LZYwZb10
>>946
NWO=New World Order なら今的陰謀論にマッチしますね
NWO: https://ja.wikipedia.org/wiki/%E6%96%B0%E4%B8%96%E7%95%8C%E7%A7%A9%E5%BA%8F
948デフォルトの名無しさん (アウアウウー Sa0f-dxKi)
垢版 |
2019/03/28(木) 21:03:56.02ID:KhTRBxbZa
WBA
949デフォルトの名無しさん (ワッチョイ ef02-9gjM)
垢版 |
2019/03/28(木) 22:45:08.37ID:WL/rMpQN0
WEP
950デフォルトの名無しさん (スフッ Sdbf-g8C6)
垢版 |
2019/03/29(金) 19:40:14.87ID:jbLCE6Gyd
初心者です
間違っているところをだれか教えてください
今作ろうとしてるのは入力した文をバラバラにして返すプログラムです
https://i.imgur.com/huSgBsa.jpg

https://i.imgur.com/NW3rZ7M.jpg
https://i.imgur.com/xAQu9le.jpg
951デフォルトの名無しさん (スフッ Sdbf-g8C6)
垢版 |
2019/03/29(金) 19:45:04.77ID:jbLCE6Gyd
https://i.imgur.com/4iAlV1x.jpg
こうなるように作りたいです
2019/03/29(金) 19:52:38.08ID:49nFrL1E0
25行目からが

if(c!=0){
break;
}
else{
continue;
}
while(c==0);

になってるけどwhileの場所が間違ってる。
2019/03/29(金) 19:54:41.57ID:49nFrL1E0
28行目からだわ。つまり}が足りてない。そこだけ直したら上手くいくのかは確認してないけど。
954デフォルトの名無しさん (スフッ Sdbf-g8C6)
垢版 |
2019/03/29(金) 19:55:29.51ID:jbLCE6Gyd
>>952
正しくはどうなりますか?すみませんさっぱりわかりません…
955デフォルトの名無しさん (スフッ Sdbf-g8C6)
垢版 |
2019/03/29(金) 19:56:17.40ID:jbLCE6Gyd
>>952

>>953
今気づきました!!ありがとうございます!やってみます!
2019/03/29(金) 20:15:27.43ID:kPfQN3Sza
kishutu[] 渡してるところ大丈夫か?
957デフォルトの名無しさん (スフッ Sdbf-g8C6)
垢版 |
2019/03/29(金) 21:09:07.83ID:jbLCE6Gyd
https://i.imgur.com/H76l6vb.jpg
https://i.imgur.com/ywiNmxR.jpg
これの原因わかる方いますか?
958デフォルトの名無しさん (スフッ Sdbf-g8C6)
垢版 |
2019/03/29(金) 21:13:20.24ID:jbLCE6Gyd
>>956
ありがとうございます
そこも間違えてたみたいです
2019/03/29(金) 22:03:29.44ID:b4NIHWKk0
>>957
27行目[]いらんと思う
960デフォルトの名無しさん (スフッ Sdbf-g8C6)
垢版 |
2019/03/29(金) 22:53:43.19ID:jbLCE6Gyd
https://i.imgur.com/nY9LuSR.jpg
https://i.imgur.com/U46WJvs.jpg
https://i.imgur.com/wwRNBB2.jpg
試してるのですが最後の1文字が表示されないままずっと実行中になってしまいます。3枚目はhello world入力で何回か実行した時の画面です。上の3回は強制終了して、一番下のはフリーズしてるやつです
どなたかわかる方いましたら教えてもらえないでしょうか
何度もすみません🙏
2019/03/29(金) 23:02:18.73ID:aBFadZYQ0
随所でprintfしまくって、変数の値が想定通りか確認していくんだ
これをprintfデバッグという

ってか、まともなデバッガがある環境でやった方がいいよ
2019/03/29(金) 23:10:52.10ID:kPfQN3Sza
>>960
配列の添字も一緒にprintfしてみれば。
あと変数名は意味のあるもんにした方がええよ。 a とか b はあかんわ。
あと配列は初期化した方がいいかもよ。自分で中身を把握してれば別にしなくていいんだけど。
2019/03/29(金) 23:25:13.83ID:49nFrL1E0
>>960
check(int a, int b, int c[]);
がだめ。

aが既出の時は0を返して、既出じゃないときはaを返す関数になってるけど、
aに0を渡すと既出じゃなくても0が返るから既出扱いになる。
2019/03/29(金) 23:26:13.92ID:49nFrL1E0
既出の時は-1を返すようにすればなおせる。
2019/03/29(金) 23:36:01.88ID:49nFrL1E0
あと"hello world" に対してsent[10]は長さが足りてない。
レス数が950を超えています。1000を超えると書き込みができなくなります。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況