X



C言語なら俺に聞け 148

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん (アウアウカー Sacf-slpW)
垢版 |
2018/09/19(水) 17:56:50.83ID:XSTNMnDwa
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言語なら俺に聞け 147
http://mevius.5ch.net/test/read.cgi/tech/1534430162/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
0607デフォルトの名無しさん (ワッチョイ 674f-gma9)
垢版 |
2018/10/14(日) 09:33:04.94ID:p/Li638e0
>>602
× なんとなく
○ ほぼ確実に

「Cで」「Cで」「Cで」、初心者はCしか出来ないからそれしか考えられない。(選択肢がない)
初心者あるあるだけども。
実際これ、Cで処理されてCバイナリを引き継がされても大迷惑だし。

>>588
マジな話、上司が居るのなら上司に聞けって。これ、Cでやったら大迷惑な話だし。
聞くのが迷惑だと思っているのなら、この件については聞かない(報告しない)ほうが迷惑だ。
上司が居なくてど初心者なら、この際にスクリプト言語を覚えろ。
0612デフォルトの名無しさん (ワイモマー MMff-ytAd)
垢版 |
2018/10/14(日) 12:19:08.18ID:vwPmx6lGM
特定行の書き換えですが
・bの値を反転させたい(0なら1、1なら0)
・b=の行は複数出現する可能性がある()
・複数出現した場合は一番最後に出現した行の値を反転の対象にしたい
・書き換え後はb=の行は1行だけにしたい
・書き換え後はできれば
a=...
b=...
c=...
な感じでソートしててほしい

これはC言語で出来ますか?
どうやったらいいでしょうか?
0613デフォルトの名無しさん (ワッチョイ 674f-gma9)
垢版 |
2018/10/14(日) 13:29:01.06ID:p/Li638e0
>>612
「出来る/出来ない」なら、そりゃC言語で「出来ない」って事ははほぼ全ての事例で無いよ。
どうやったらいいか、なら、その場合は俺ならExcel使うね。規模的に無理ならシェルスクリプトを使う。
何でもCでやればいいわけではない。

そのお題を実際にCでやる事なんて無いから、練習用なら意味無いし、
本番としてそれをCでやる気なら、間違ってるから止めとけ。
0615デフォルトの名無しさん (ワッチョイ e780-gma9)
垢版 |
2018/10/14(日) 14:42:07.27ID:Q3eQCyRU0
コードの書き方みたいなこんなもんを上司に聞けとか
よくわからんが、協力会社で入ってるリーダーかなんかか。。。
すげえな、そういった会社の文化をオレは知らないが

そもそもそんなとこが未教育なゴミつれてきたら大問題だからな
必死になるのも分かるわ

で、だれでもすぐ分かってるコマンド書いてドヤ顔して低学歴もいるしな
0616デフォルトの名無しさん (ワッチョイ e780-gma9)
垢版 |
2018/10/14(日) 14:43:20.19ID:Q3eQCyRU0
この程度ならCで書いても
普通にCで書く練習になる
0619デフォルトの名無しさん (ワッチョイ e780-gma9)
垢版 |
2018/10/14(日) 14:48:35.94ID:Q3eQCyRU0
sedとsort使えばいい
0620デフォルトの名無しさん (ワッチョイ 674f-gma9)
垢版 |
2018/10/14(日) 15:12:45.83ID:p/Li638e0
>>617
お前以外のみんな出来るっての。

お前がコードクレクレ君だからみんな適当にあしらってる。
お前が努力してる(=コードを試しに書いてみたが動かない)のなら、もう少しましな回答も出るだろうさ。
0622デフォルトの名無しさん (ワッチョイ 6735-4Hut)
垢版 |
2018/10/14(日) 17:39:13.57ID:+7qWkF0t0
こんな感じでどうかな
 ・空行はそのまま出力されてしまう
 ・代入文は1行に1文のみで X=n の形式
が前提だけど

awk -F= '{if($1=="b") b=$2; else print;} END{printf("b=%d\n", xor(b, 1))}' a | sort -u
0627デフォルトの名無しさん (ワッチョイ 7f80-WnU0)
垢版 |
2018/10/14(日) 18:31:52.87ID:hWarSIQ50
Ruby で作った

text = File.read 'data.txt'

ary = [ ]; index = [ ]

text.each_line.with_index do | line, idx | # 各行・添字
line.chomp! # 末尾の改行を削除する
ary.push line # 各行を配列に入れる

# 先頭文字列が、b= なら、添字を配列に入れる
index.push idx if line.start_with? 'b='
end

return if index.empty? # 空配列なら処理なし

first = true # 最初の1回だけ処理する
index.reverse!.each do | num | # 後ろから削除するために、反転する
if first # 最初の1回だけ
first = false

case ary[ num ][ 2 ] # 3文字目
when "0" then ary[ num ][ 2 ] = "1"
when "1" then ary[ num ][ 2 ] = "0"
else # 処理なし
end
else # 2回目以降は削除する
ary.delete_at num
end
end

puts ary
0629デフォルトの名無しさん (ワッチョイ 7f81-VhFj)
垢版 |
2018/10/15(月) 02:17:02.27ID:Obfj9PeS0
>>612の内容だけど、誰も聞かないのであえて聞くけど
b=以外は何も加工せずに複数あればそのまま出力で良いのか?
その場合、ソートは=の右側の数値順にするのか、文字コード順にするのかか
データによっては、a=、c=、d=の行が多数出力される中でb=の行だけ1行になる
ってことで良いのかな?
0631デフォルトの名無しさん (ワッチョイ e780-gma9)
垢版 |
2018/10/15(月) 23:43:48.26ID:KnJWry7m0
 @ [出力A]  a=とc=を抽出(使うコマンド:grep)
 A [出力B]  b=0の1〜末尾-1行を抽出 (使うコマンド:grep|head)
 B [出力C]  b=1の1〜末尾-1行を抽出 (使うコマンド:grep|head)
 C [出力D]  b=0の末尾行を抽出し置換 (使うコマンド:grep|tail|sed)
 D [出力E]  b=1の末尾行を抽出し置換 (使うコマンド:grep|tail|sed)
 E [出力F]  [出力B]、[出力E]、[出力C]、[出力D]コンカチネーションしユニークにする (使うコマンド:cat|uniq)
 F 出力結果 [出力A]と[出力F]をコンカチネーションしソート(使うコマンド:cat|sort)

とりあえずコレでいけるハズ
あとはがんばりなさい
0633デフォルトの名無しさん (ワッチョイ e780-gma9)
垢版 |
2018/10/15(月) 23:59:03.51ID:KnJWry7m0
だけでやるとはオレは一言もいってない
使うコマンドを限定した覚えはない
0634612 (ワイモマー MMff-ytAd)
垢版 |
2018/10/16(火) 00:22:11.79ID:NB8XYwuTM
ソートはa,b,c...順です
b=以外は重複を許可します(ソート後の出現順は考慮しなくてよい)
(処理例
入力データ
c=0
a=1
b=1
c=1
a=0
b=0
出力データ
a=1
a=0
b=1
c=0
c=1
0638デフォルトの名無しさん (ワッチョイ 7f81-VhFj)
垢版 |
2018/10/16(火) 01:01:42.59ID:gETK/lfa0
bが1行しかないとうまく行かないな
ちょっと手直し

sed -e ":l; N; /b=.*b=/{;s/\nb=[01]\n/\n/1;}; $p; b l" 01.txt | sed -e "/b=1/{;s/b=1/b=x0/;};/b=0/{;s/b=0/b=x1/;};/b=x/{;s/x//;}"

並び替えはsortでやってください
0643デフォルトの名無しさん (アウアウカー Sa7b-GU/K)
垢版 |
2018/10/16(火) 09:23:21.39ID:HrwRMilta
いーんじゃない?
0645デフォルトの名無しさん (アウアウカー Sa7b-GU/K)
垢版 |
2018/10/16(火) 13:03:31.45ID:0QUQFWONa
てか、Cのスレで質問者もCでどうやるか聞いてるのに誰もCで答えてないw

ま、Cで書く気が失せる問題ではあるが。
0647デフォルトの名無しさん (ワッチョイ 078a-oHS3)
垢版 |
2018/10/16(火) 13:38:03.74ID:dIjk/xku0
C言語でやるとしたら
b=で始まる行以外は適当な一時ファイルに出力し
b=で始まる行だけはメモリー上に格納しておく
b=行が出現する度に、あたらしい行データでメモリー上を更新する
EOFまで処理したら、一時ファイルとメモリー上のデータをマージする
その際にb=の値を所定の値に置換する
順番は後にソートする前提なので適当で構わない
ソートは外部コマンドでやらせて良いだろうね
0649デフォルトの名無しさん (アウアウカー Sa7b-GU/K)
垢版 |
2018/10/16(火) 17:35:52.31ID:HrwRMilta
>>648
おお。上の方過ぎて気づかなかった。
0653デフォルトの名無しさん (ワッチョイ e764-66c6)
垢版 |
2018/10/16(火) 23:06:58.82ID:HI3tJEA90
C99時代のhello worldプログラムを考えてみた。

#include <stdio.h>
#include <stdlib.h>

static inline void
print_hello(void)
{
puts("Hello, C!");
}

int
main(void)
{
print_hello();

exit(EXIT_SUCCESS);
}

exit()関数を使ったり、main()関数の中に直に処理を書かないとか色々。
0654デフォルトの名無しさん (ワッチョイ bf9f-pYQO)
垢版 |
2018/10/16(火) 23:31:05.44ID:ZKPc2SIw0
なんだこれ?引数 void って初めて見たぞ。文法的にありなのかこれ?
0655デフォルトの名無しさん (ワッチョイ bf9f-pYQO)
垢版 |
2018/10/16(火) 23:35:18.29ID:ZKPc2SIw0
>>653
あれ?それ、コンパイルすると警告出ないか?main()が何も返してないって。
いや、exit()を理解してくれるコンパイラなら何も出ないかも知れないけどね。
0656デフォルトの名無しさん (ワッチョイ e764-66c6)
垢版 |
2018/10/16(火) 23:48:35.20ID:HI3tJEA90
>>655
c99 -O2 -Wall -Werror -Wextra hello.c -o hello
これで無警告だった。
c99はGNU/Linuxだとgcc -std=c99を実行してる。
icc -std=c99 -O2 -Wall -Werror -Wextra hello.c -o hello
でも成功。
GNUのコンパイラでもIntelのコンパイラでもちゃんと処理できるのでいいんじゃないかなぁ。
0657デフォルトの名無しさん (ワッチョイ bf9f-pYQO)
垢版 |
2018/10/17(水) 01:16:05.15ID:GVzdQn3+0
そうだったか。
0659デフォルトの名無しさん (ワッチョイ c7e3-Zu1O)
垢版 |
2018/10/17(水) 01:48:50.18ID:aAn3UH6A0
c99から(とc++も)main()は特別扱いで省略時はreturn 0;と扱われる
とググったらでてきた

なんでmain()だけ?どうせなら関数全てそうしちゃえばいいのに、と思わなくもない
0660デフォルトの名無しさん (ワッチョイ bf9f-pYQO)
垢版 |
2018/10/17(水) 02:29:49.55ID:GVzdQn3+0
なんと。そうだったのか。
0676デフォルトの名無しさん (アウアウカー Sa7b-GU/K)
垢版 |
2018/10/17(水) 12:57:28.62ID:8efdFbKLa
>>675
え?そこに書いてある通りでは?
0679デフォルトの名無しさん (ワッチョイ e764-66c6)
垢版 |
2018/10/17(水) 13:47:12.06ID:MkHFWGSb0
>>653
だれかこれに触れてほしい(自己主張)
C99というかモダンCプログラミングの初歩として
(手前味噌だが)かなりいい感じだと思うんだけどどうかな。

とりあえず今までのhello worldプログラムは
・return文、しかも0固定をmain()関数に書いてしまっている
・main()関数に直に処理を書いてしまっている。
などの理由であまり実際に即していないと思うのよね。
0681デフォルトの名無しさん (アウアウカー Sa7b-GU/K)
垢版 |
2018/10/17(水) 13:59:47.69ID:8efdFbKLa
別にmain()に処理書いてもいいと思うがな。パッと見てわかるぐらいの小ささなら。

まあしかしこれは各個人の信仰の問題であって言語そのものの制限ではない。
そこまでなんとかしたいならそういう言語を作るしかない。
布教活動すれば信者は増えるだろうが相変わらず教義に反する異端者はこの世に存在し続ける。
0682デフォルトの名無しさん (オイコラミネオ MMfb-KnhR)
垢版 |
2018/10/17(水) 14:08:29.78ID:yNGPPWpxM
>>679
hello world に求められることは、できるだけ少ない手数でイメージ通りの結果が得られることだと思うんだ。宗教の前に。
>>653 に込められた思想が分かるようになるのはずっと後。
まあ、ある程度分かるようになってからのお題としてここで議論するのは面白いかもね。
0683デフォルトの名無しさん (アークセー Sx9b-wEhW)
垢版 |
2018/10/17(水) 14:25:03.69ID:JU3vAU4Ix
mainの中にputsの代わりに別関数呼ぶと言うのはビジネスロジックをmainから極力排除するという意図があると推測するけど、最初の一歩としては複雑すぎる。
いきなり最初から関数、inline、static、exitの仕様を理解する必要があるので。
0685デフォルトの名無しさん (アウアウカー Sa7b-GU/K)
垢版 |
2018/10/17(水) 15:16:21.42ID:mC+TJhpha
voidといいsizeofといい、今年は豊作だなw
0686デフォルトの名無しさん (ワッチョイ 4708-I59m)
垢版 |
2018/10/17(水) 15:38:23.06ID:6YtQ5uRO0
b=の書換質問は釣りだったんだな
0687デフォルトの名無しさん (ワッチョイ df9f-5hEM)
垢版 |
2018/10/17(水) 16:16:17.24ID:O9lRBr4Z0
voidくん見てる〜?
sizeof(32)くんて友達出来てよかったねw
0690デフォルトの名無しさん (ワッチョイ 674f-gma9)
垢版 |
2018/10/17(水) 18:18:55.24ID:jwV5Qww90
>>653
>>679
ゴミだね

お前ら初心者はもう少しわきまえた方がいい。
初心者が思いつきで出来る領域はCにはもう残されていない。そういうのがやりたいのならGoやRustに行け。
C99からもう20年近く経つ。
その間、誰もそういうことをやらなかった(或いは、やっても流行らなかった)のは、その必要がないからだ。
今のお前のように、無視されて終わったからだ。

それが何故ゴミなのか理解出来ないうちは、もっとコードを書くことだ。
0691デフォルトの名無しさん (アウアウカー Sa7b-GU/K)
垢版 |
2018/10/17(水) 18:31:08.37ID:bYFTmDwea
半角にするの忘れてるぞ
0692デフォルトの名無しさん (ワッチョイ 674f-gma9)
垢版 |
2018/10/17(水) 18:50:31.41ID:jwV5Qww90
>>691
俺は半角君ではないし、あおり抜きでゴミだって事だよ。
マジでそういうことを世界中の誰も20年間しなかった理由を考えてみろ。

この期に及んでお前らみたいな糞初心者がCに溢れている意味が分からんが、
お前らはどうやらどの言語でも良くて、単に流れているスレに溜まっているだけだろ。
だから無理にでも流れないと不安になるから無駄釣りしているわけでさ。
そういうのも迷惑だから止めろ。
0693デフォルトの名無しさん (ワッチョイ dfeb-AFTh)
垢版 |
2018/10/17(水) 19:22:06.89ID:EXKxlQhR0
マジックNGワード「お前ら」 ※2(5)chの全板共通

釣りレス or 気が触れた方のレス or 玄人ぶった素人のレスなど。
ウザいレスを回避する際に使用します。

参考:
【レス抽出】
対象スレ:C言語なら俺に聞け 148
キーワード:お前ら

抽出レス数:18
0694デフォルトの名無しさん (ワッチョイ 674f-gma9)
垢版 |
2018/10/17(水) 19:59:27.76ID:jwV5Qww90
>>693
お前らが駄目なところはそういう所なんだけどな。
最近パヨクが急速に腐ったのも同じ理由だ。

最近は693みたいに、「俺の希望する意見じゃなきゃイヤ」な奴が多すぎる。
ネットってのはリアル以上にいろんな人がいて、様々な意見を聞ける。
その中で、どんな偏った意見も、探せば出てくる。
フィルタ(ブロック)しまくれば都合がいい意見しか見えない状況が簡単に作れる。
これは昔で言う、イエスマンで周囲を固めた状態だ。一番やってはいけないと言われていたことだ。
そしてそれをやりまくったのがパヨクで、今は世間とずれまくってるだろ。

今の状況で俺をブロックするのなら、お前らはパヨク以下に落ちる。
勿論、俺が言っていることが間違いだらけで、読む価値無しと判断するなら、フィルタするのは自由だ。
しかし実際の所、>>679を肯定的に評価している奴なんて誰もいないだろ。俺が一番はっきり言っただけであってさ。
この状況で俺をフィルタするってのは、お前はパヨク予備軍だって事だよ。

世界中を探して>>679を褒めてくれる奴を見つけだし、そこに移住すれば、君らは幸せになれるだろう。
俺も君らが居なくなって清々するし、有り難いから、そうしてくれれば助かるのだが。
そもそも、この程度でNGが必要な奴はここ(2ch)に来るべきではないし。


まあ、>>693には俺が見えてないはずだから、この話はここで終わりだが。
0695デフォルトの名無しさん (ワッチョイ df9f-5hEM)
垢版 |
2018/10/17(水) 20:06:48.77ID:O9lRBr4Z0
などと意味不明の供述をしており
0699デフォルトの名無しさん (ワッチョイ e764-66c6)
垢版 |
2018/10/17(水) 20:50:17.71ID:MkHFWGSb0
弁明しておくと、俺の >>653 は釣りじゃなくて、まったくの興味というか
こういうプログラムのほうがいいんじゃないかという提案だった。
結果的に荒れ気味になってしまったのはすまん。
(個人的には旧hello worldよりも洗練されていると思うんだけどなぁ……)
0701デフォルトの名無しさん (ワッチョイ 674f-gma9)
垢版 |
2018/10/17(水) 20:58:45.43ID:jwV5Qww90
>>697
お前も何故か必死なんだな。

同一人物でないのなら、単に>>679>>653を褒めてやればいいだけだろ。
そこで「気に入らない意見」(に反論)ではなく、
気に入らない意見を言った「俺」にフォーカスしてくる辺りがパヨク予備軍なんだよ。

実際の所、ネット上には間違ったことを言う奴も多い。それが俺だというのならさておき、
誰も>>679を褒めてないし、20年間世界中でそんな馬鹿なことをした奴が居ないのも事実なんだから、
そのことをふまえて普通に考えれば、>>679がゴミなのは事実だし、自明だろ。

ゆとりはスクラムを組んで連呼し、黒を白だと主張する事がよくあるが、それは明白な間違いだよ。
てゆうか、一体お前らは何がしたいん?
ゴミをゴミだと言われない匿名掲示板なんて、逆に存在価値がないだろ。
腐されたくないだけなら、FaceBookでやるべきだ。
後ろ指さされることはあっても、堂々とゴミだと言われることはあまり無いはず。
それがお前らの望みなんだろ?
(今回の>>675もそう。ここでボロカスに言われることはあっても、直接言われることがないからあのままなのであって)
0702デフォルトの名無しさん (アウアウカー Sa7b-GU/K)
垢版 |
2018/10/17(水) 20:59:31.12ID:OPzCf6X6a
>>699
洗練されているとは思うが学び始めたばかりの初心者に最初に見せるサンプルプログラムとしてはやはり複雑なのではないかと思う。
0703デフォルトの名無しさん (アウアウカー Sa7b-GU/K)
垢版 |
2018/10/17(水) 21:07:03.53ID:OPzCf6X6a
>>701
お前はゴミだ。
0704デフォルトの名無しさん (ワッチョイ 674f-gma9)
垢版 |
2018/10/17(水) 21:44:14.14ID:jwV5Qww90
>>702
褒める気があるのならもっとはっきりと褒めろよ。

>>703
そういうところがお前らの駄目なところだ、と言っているわけだが。
まあ所詮それがゆとりの限界だよな、とは思う。
否定されたことがないから否定されることに過敏なのか?最近この手の輩はよく見かけるが。

しかし、俺をゴミ呼ばわりするお前ですら>>702程度しか言えないのなら、
逆に俺の意見「>>679>>653はゴミ」を補強しているではないか。
俺をゴミ呼ばわりするのなら、もっとベタ褒めしないと筋が通らないだろ。
そのことにすら気づけないのか?
0705デフォルトの名無しさん (ワッチョイ 674f-gma9)
垢版 |
2018/10/17(水) 22:03:17.39ID:jwV5Qww90
>>699
一応マジレスしておく。
ただし技術的な答えは書かない。
これは最近、この手で煽って答えを書かせる輩が増えていると感じるから。
そういう奴らにはエサを与えず、餓死させるのが習いだ。
君のせいではないから、この点は安心していい。

> こういうプログラムのほうがいいんじゃないかという提案だった。
これはいい。
というか、こういうのを自由にやれるところがいいところであって、
逆に、遠慮して何も言えないようなら匿名掲示板の存在価値はない。
だから、思ったことはどんどん言えばいいし、
それについて文句を言いたければ言えばいいし、結果的に荒れても問題ない。
ここは、そういう場所だから。
逆に、FaceBookや実名空間で出来ることをここでやるべきではない。
実名空間で口頭でやった方が手間もかからず早いからだ。

問題は、ゴミをゴミだとはっきり言いきった俺に対して、
言い方が良くない系の言いがかりを付けてくる馬鹿が多いことだ。
匿名掲示板で全員が意見をオブラートに包んで言うようになったら存在価値なんて無くなる。
そもそも、それを求める奴がここに来るのも間違っている。
そんな奴は、少なくともコテハン制の所に行くべきなのさ。
0706デフォルトの名無しさん (ワッチョイ e780-gma9)
垢版 |
2018/10/17(水) 22:07:22.33ID:Ny9Q/0jK0
相変わらず低学歴知恵遅れたちは
超どうでもいいことで
超どうでもいいレスをひたすら書きこんでるわ
0707デフォルトの名無しさん (アウアウカー Sa7b-v5lg)
垢版 |
2018/10/17(水) 22:07:25.85ID:MwWLHD/ka
>>700
言えてる。

CASL2の勉強で1から140までの合計を求めて、その数を文字列に変換するプログラム書いたんだけど、どうよ?
ほら。Cって組込にも使われるじゃん。
printfが無い環境のために良い練習じゃん。
(実際、組込Cでprintf無いけど、キャラクタディスプレイ付ければ文字コードを送ると表示される環境と言うのがある)

なぜ140かと言うと各桁が同じ数字じゃ無いので保存場所の間違いに気付きやすいから。
4桁は合計で出た数の桁数。

キャラクタディスプレイの代わりにputs縛りって事でさ。
■ このスレッドは過去ログ倉庫に格納されています

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