X



C言語なら俺に聞け 146

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん (ワッチョイ 839f-AnMQ)
垢版 |
2018/04/30(月) 04:47:37.50ID:XX4FB8lc0
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言語なら俺に聞け 144
https://mevius.5ch.net/test/read.cgi/tech/1514025223/

次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512
-
※前スレ
C言語なら俺に聞け 145
http://mevius.5ch.net/test/read.cgi/tech/1519046038/
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
0306デフォルトの名無しさん (ワッチョイ 2193-OY1D)
垢版 |
2018/07/01(日) 17:12:51.78ID:KJj1sYCg0
仕事や学校でCを使う予定があるなら、
現場で使ってる開発環境に合わせるのが最善だろう。
IDEの優劣よりも優先されるんじゃないかな。

今のご時世にCに関してまったくの素人だと、
Cを使うのにIDEが必須と勘違いしてる可能性もあったり。

任意のテキストエディタで.cファイルを打ち込んで
コマンドラインでコンパイル、実行という手順が
紹介されてない入門書や入門サイトがあるかも。
0307デフォルトの名無しさん (ワッチョイ 219f-iScA)
垢版 |
2018/07/01(日) 17:13:26.42ID:8/sCKaWm0
>>305
それはさすがに老害の発想だぜ。

今時のemacsはインテリセンスも出るし、
flyCheckで文法エラーもリアルタイムで表示される。
お前はそういうの知らずに言ってるだろ。
(なお、vimも同様だったはず)

最終的にはそういうのがうざくなって色々切ったりするけど、
俺は初心者こそIDE(というかゴテゴテの環境)でスタートすべきだと思ってる。

大体において、
「動きません。でも私のコードは完璧です。これはIDEのバグですか」と言ってくるんだから、
「ブレークポイントを全部の行に置いてループも1回ずつステップ実行して確認して死ね」
と返せないと意味無いだろ。
0308デフォルトの名無しさん (ワッチョイ 219f-iScA)
垢版 |
2018/07/01(日) 17:22:47.54ID:8/sCKaWm0
>>306
> 紹介されてない入門書や入門サイトがあるかも。
VSがそうですが何か?(なおC++)
https://msdn.microsoft.com/ja-jp/library/jj620919.aspx

てかマジな話、VSで閉じていいのならそんな知識いらんて。


> 現場で使ってる開発環境に合わせるのが最善だろう。
> IDEの優劣よりも優先されるんじゃないかな。
これはその通りだが。
0309デフォルトの名無しさん (ワッチョイ 39bb-VCRa)
垢版 |
2018/07/02(月) 00:22:55.41ID:MZb/U4ur0
>>300
>つかそもそもEclipseっていいのか?
>あれ、Linuxだと他選択肢がないから使われてるだけでは?

組込みだとマイコンのメーカーのIDE(コンパイラ)が
EclipseベースなIDEな事があるから
VSではなくEclipseに馴れるって意味で選択する意味はあるかな

実際組込み現場でCでの開発想定したこの書籍だと
Eclipseで開発する事を想定して書かれてる
http://amzn.asia/5PyjxPA


あと余談だけど今さらvimだのemacsだの時代遅れじゃね?
マルチプラットフォームで動くVSCodeやAtom選択した方が
学習コストも少なく高機能だと思うんだけど
0310デフォルトの名無しさん (ワッチョイ 219f-iScA)
垢版 |
2018/07/02(月) 01:24:09.53ID:Ael8RIVm0
>>309
> EclipseベースなIDEな事があるから
なるほどね。

> あと余談だけど今さらvimだのemacsだの時代遅れじゃね?
俺が勧めているわけではないが、「エディタ」という意味ではありだ。
「Emacsは100年のエディタだ」と言われるとおり、あれはマジで100年持つだろう。
そういう構造になっているし、実際今も余裕で現役だ。(Vimも同様)

最大の利点はDSLとしてのEmacsLispだ。(なお独立して使えるらしいが)
この点、VSCodeやAtomもOSSであり同レベルの拡張性を持ってはいるが、
ユーザーベースが違いすぎる。
今現在の状況なら、先に死ぬのはVSCodeやAtomの方だ。

学習コストなんて所詮慣れだし、数ヶ月もあれば問題ない。
当面使う予定がなければすぐに学ぶ必要性はないが、
時代遅れな事を肯定して欲しいのならそれは無理だ。

emacsとgdbは組み合わせて使うことは出来る。
ブレークポイント、変数等を表示出来るlispが提供されればそこそこ行けるはず。
もう既にあるかもしれんが。
0311デフォルトの名無しさん (スップ Sd82-Bibe)
垢版 |
2018/07/02(月) 20:45:33.13ID:egmwRQ41d
フォルダ一括コピーしたいです

c++だとファイルコピーにはCopyFileなるものがあるみたいなのだけどそれはフォルダのコピーはできないようなので、
他のものを探してたらSHFileStructでフォルダまるごとコピーができると知りました
これって再帰的に中身まで見てくれるのか見てくれないのか調べてたのですがわからなかったので
再帰的にコピーしてくれるか否か教えてほしいです
0313デフォルトの名無しさん (ワッチョイ 119f-qY4E)
垢版 |
2018/07/03(火) 00:01:21.27ID:Dmx6jLMV0
>>311
そういうのはOSによって、あるいは使用するライブラリによってやり方が変わるから最低でもOSが何なのか書いて質問した方が良い。
0318デフォルトの名無しさん (ワッチョイ 45fa-2e90)
垢版 |
2018/07/04(水) 21:52:51.64ID:gFgZc5FG0
HTQ
0322デフォルトの名無しさん (ワッチョイ 87ea-ybMY)
垢版 |
2018/07/05(木) 09:24:52.06ID:ppxwAApK0
SHFileOperation() はコピー先にフォルダが無い場合、再帰的にフォルダ作ってくれるね
ただ SHFILEOPSTRUCT の pTo に渡すパス文字列で
ディレクトリのセパレータが / はダメで \ じゃないと再帰がかかってくれない

D:\ 以下フォルダが無い状態で
pTo = "D:/aaa/bb/ccc/ddd";
SHFileOperation()
⇒ 「フォルダ ddd が作れない」  D:\ 以下のフォルダ状態は変わらず

pTo = "D:\\aaa\\bb\\ccc\\ddd";
SHFileOperation()
⇒ D:\aaa\bb\cc\ddd まで再起的にフォルダができる
0323デフォルトの名無しさん (ワッチョイ 87b3-KMj/)
垢版 |
2018/07/10(火) 12:40:53.64ID:PTerA0wX0
超初級で申し訳ないですが、以下のコードのどこに問題があるのか教えてください。
円の周長と面積を求めるものです。(半径は整数値で入力。)
コンパイルはできましたが、.exeファイルが実行不能状態です。


#include<stdio.h>
main()
{

int hankei;
double pi = 3.1415926535;
double enshu;
double menseki;

printf("半径を入力して下さい:\n");
scanf("%d",&hankei);

enshu = 2 * pi * hankei;
menseki = pi * hankei * hankei;

printf("半径%dの円の円周は%lfで、面積は%lfです", hankei, enshu, menseki);

}
0324デフォルトの名無しさん (アウアウカー Sa1b-tqMh)
垢版 |
2018/07/10(火) 12:51:36.15ID:lacLn2e2a
>>323
実行不能状態とはどのような状態か詳しく書くように。
0325デフォルトの名無しさん (ブーイモ MM2b-aMDz)
垢版 |
2018/07/10(火) 13:17:53.02ID:G1Ywym5SM
>>323
ソースコードは問題ない。
戻り値型省略が警告になるくらい。

エスパーすると、
警告をエラー化するオプションが指定されていて、最新コードを実行しているつもりが古いコードを実行していたとか。

もしくはソースコードを直接実行しようとしているとか。
0326デフォルトの名無しさん (アウアウカー Sa1b-tqMh)
垢版 |
2018/07/10(火) 13:45:26.21ID:lacLn2e2a
ま、何れにしてもどういう環境で何をやってどうなったか詳細書いてくれんとわからんな。
WindowsでEclipse使ってる場合とLinuxでvimで入力してgccでコンパイルしている場合では答えが大幅に変わるし。
exeと書いてあるからWindowsだろうと予想することはできるが実はWindowsじゃなくてexeが作られるものと誤解しているだけなんてことも初心者ならありうるしな。
0327323 (ワッチョイ 87b3-KMj/)
垢版 |
2018/07/10(火) 14:15:20.90ID:PTerA0wX0
Windows 10の開発者コマンドプロンプトでコンパイルしました。 cl (ファイル名).c
拡張子がexeのファイルが生成されました。

そのexeファイルをダブルクリックすると、マカフィーによって「脅威を隔離しました」というメッセージとともに削除されてしまいます。
何度やってもそうなります。
0330デフォルトの名無しさん (アウアウカー Sa1b-tqMh)
垢版 |
2018/07/10(火) 15:35:28.40ID:c95ZcwpDa
この頃は単にコマンドプロンプトと呼ばずに頭に開発者って付くのか?
0331デフォルトの名無しさん (ワッチョイ 4793-1gjT)
垢版 |
2018/07/10(火) 15:52:40.79ID:sLQCr7o90
コマンドプロンプト上で実行したらどうなる?
cl で実行ファイルを作ったら、そのままコマンドプロンプトで
実行ファイルの名前を打ってEnter、で動くと思うけど。

コンソールアプリケーションをダブルクリックで実行した場合、
scanf系の標準入力に必要なコンソールってどうなるんだっけ?
0333デフォルトの名無しさん (アウアウカー Sa1b-tqMh)
垢版 |
2018/07/10(火) 17:11:41.78ID:c95ZcwpDa
マカフィーのチェックがおかしいわけだな。
自宅のPCでマカフィー入ってるのあるから帰ったら試してみよう。
0334323 (ワッチョイ 87b3-KMj/)
垢版 |
2018/07/10(火) 17:13:29.68ID:PTerA0wX0
>>328
いやいや、私はヤバいウイルスとかを作る技量はないので…
知らぬ間に作るなんてことは…

>>331
プロンプトで実行すると、長いエラーメッセージが出ます。
その場合もマカフィーが反応します。

マカフィーのせいなんですかあああああ…?
マカフィーを止めるのはなんか面倒です。
0335デフォルトの名無しさん (アウアウカー Sa1b-tqMh)
垢版 |
2018/07/10(火) 17:23:53.95ID:c95ZcwpDa
そういやマカフィーの創業者のジョン・マカフィーは壮絶な人生歩んでるのな。
知りたい人はWikipediaでジョン・マカフィーで検索してみな。
0338デフォルトの名無しさん (アウアウカー Sa1b-tqMh)
垢版 |
2018/07/10(火) 20:29:17.07ID:csDUndKHa
このスレは超エスパーの常連が常駐していると聞いて
0341323 (ワッチョイ 87b3-KMj/)
垢版 |
2018/07/11(水) 12:17:16.91ID:Z7jbd2VW0
そんなことは普通にできますが,インターネット接続を切ったり入れたりもしなきゃいけないじゃないですか
それも簡単ですが,マカフィーのいたずらのせいでそんなことをいちいちやるのは…という意味です
0348デフォルトの名無しさん (ワッチョイ 5d8a-B+kh)
垢版 |
2018/07/12(木) 02:21:13.11ID:9sO/Jh060
>>341
別に一時的に無効化するだけならネットを切る必要は無い
セキュリティ的にどうしても不安があるっていうならLANケーブル抜けばいい
それすら面倒ならパソコンを窓から投げ捨てろ
0350デフォルトの名無しさん (ワッチョイ ead2-4lKT)
垢版 |
2018/07/15(日) 17:16:55.22ID:+OH6AID30
C言語で集合、和集合、積集合を実装したいのですが、正直アイデアが浮かびません。
どうすれば良いのでしょうか?
教えていただきたいです。
0354さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd0a-gHxb)
垢版 |
2018/07/15(日) 18:50:09.68ID:uEXuZg9md
集合は順序列の順序を無視したものと考えられる。
比較する場合は、ソート済みにしてから比較する必要がある。
多重集合ではない場合は変更の際に要素を単一化しないといけない。
0355デフォルトの名無しさん (ブーイモ MM8e-4qXr)
垢版 |
2018/07/15(日) 18:57:55.11ID:chucpUaPM
setは赤黒木だけど、実装したことある奴いるの?俺はaddだけ実装して満足して諦めたよ。

hashtableのほうが遥かに簡単だからオススメ。
整列済みの配列も簡単でいいと思うよ。

でも一番楽なのは、ライブラリを拾ってくること。
0357デフォルトの名無しさん (スップ Sd0a-Se03)
垢版 |
2018/07/15(日) 23:33:22.03ID:ugn7dRUid
>>350
積集合の方が比較的簡単
和集合は同一要素であるかをどうやって判別するか
要素を構造体で表した時に
異なる構造体でも同一要素である判別が出来なくてはならないので

単純な例だと
複素数型と実数型と有理数型とcharとintとfloatとdoubleとか
0361デフォルトの名無しさん (ワッチョイ 6680-2/B2)
垢版 |
2018/07/16(月) 00:41:17.49ID:JxE01Fj60
一般論で言えば、集合の実装はハッシュを実装することに限りなく等しい。

どんなオブジェクトであれ、シリアライズ(要は文字列化)できる。
そうすればハッシュで一意な比較的小さい非負整数の番号に写像できる。(←条件により、ここが難関になりうる。ハッシュを使わずに済む番号が用意されていればそれが最適)
逆写像も用意できる。
最大番号までの要素数を持つ整数配列で0/1で要素の有無を表現したものが一つの集合を表す。
2つの集合の和と積は0/1の|と&で表せる。
配列サイズと計算時間の節約にはビットマップ化すればok。
0363 ◆QZaw55cn4c (ワッチョイ 4a60-Y8gp)
垢版 |
2018/07/16(月) 13:40:42.48ID:PLRcL5uS0
>>361
>ハッシュで一意な比較的小さい非負整数の番号に写像できる。

ハッシュ関数は一般に衝突するもの、と考えるものですが、範囲を小さくすれば特に…
0365デフォルトの名無しさん (ワッチョイ 6680-2/B2)
垢版 |
2018/07/16(月) 15:04:36.42ID:JxE01Fj60
>>362
広い視野で具体的な提案をどうぞ。

>>363
要素が固定なら完全ハッシュ関数が構成可能。

>>364
和集合とか積集合とか求めてもそこから要素リストが作れなければ無意味というだけ。これは逆写像を作ってるのと同じ。
0366デフォルトの名無しさん (ワッチョイ 6d9f-kMqh)
垢版 |
2018/07/16(月) 16:32:35.47ID:ZuNymA1O0
>>350
ビット演算使えば良いのでは?
特に要素数が32とか64以下に収まるようなら今どきのPC用コンパイラならunsgnedのintやlongで行けるよ。
uint32tみたいなビット数保証するtypedefされた型使った方が良いけどね。
0369デフォルトの名無しさん (スッップ Sd0a-Se03)
垢版 |
2018/07/16(月) 17:09:01.83ID:fNWu8+xrd
全順序化が簡単か
効率的なハッシュが(簡単に)作れるか
想定する集合の大きさ
比較のコスト
ノードのデータサイズ

この辺が違うと適した実装が全く異なる
この辺をヒアリングするのが先と思う
0370デフォルトの名無しさん (ブーイモ MM0a-2/B2)
垢版 |
2018/07/16(月) 20:33:05.89ID:xLJ3m8O+M
>>368
「要素が固定なら」と条件付き。よく読んでね。
そうじゃない場合は難関になりうることも言及ずみ。よく読んでね。
衝突してもハッシュ表は実装できるわけで、全順序化が不可能なわけではない。
0372デフォルトの名無しさん (ワッチョイ 59bd-4qXr)
垢版 |
2018/07/16(月) 21:05:16.49ID:GVNh7z7o0
>>370
何に対して固定なのか、いつ固定されるのか、稚拙な日本語から読み取れと?
それに>>361にはそんな条件は書いてないぞ。にもかかわらず、ハッシュから写像ができると書いてある。意味不明すぎるわ。
0376デフォルトの名無しさん (ワッチョイ 753c-L1xz)
垢版 |
2018/07/16(月) 22:18:00.48ID:d44IRZCy0
C言語初心者です。

typedef struct{
int tate;
int yoko;
double *mat;
} Mat;

void read(int x,int y,Mat *a){
for(int i=0;i<x;i++){
for(int j=0;j<y;j++){
printf("[%d][%d]->",i+1,j+1);
scanf("%lf",&a->mat[i][j]);
}
printf("\n");
}
return;
}

プログラムの一部を抜粋したものなのですが、これでコンパイルすると
subscripted value is neither array nor pointer
というエラーが出てしまいます。
二次元配列はポインタで表せないものなのでしょうか?
0379デフォルトの名無しさん (ワッチョイ 59bd-4qXr)
垢版 |
2018/07/16(月) 23:01:36.27ID:GVNh7z7o0
>>376
matがdouble型へのポインタだからだよ。
結果mat[i]はdouble型になり、mat[i][j]はdouble型に[j]を付けたことになるので、配列でもポインタでもないのに[]つけるなって怒られてる。

きっとmatのメモリ確保は
mat = malloc(sizeof(double) * tate * yoko);
みたいにやってるだろうから、i列j行目にアクセスするときは
&a->mat[i + j * yoko]
みたいにしないといけない。

あと、上の例ならjを外側、iを内側のforにしたほうが最適化されやすいと思うよ
0381デフォルトの名無しさん (ワッチョイ 753c-L1xz)
垢版 |
2018/07/17(火) 00:50:16.45ID:j9lU977L0
>>376です
お二人とも丁寧に教えていただきありがとうございます。
>>378さんの方法で改良してみたのですが複数のMat構造体を作り,tateとyokoの値のそれぞれ別にしたときにプログラム実行中に入力が強制終了されてしまうのですが、配列の作り方に何か不都合があるのでしょうか
0383デフォルトの名無しさん (ワッチョイ 119e-dYrz)
垢版 |
2018/07/17(火) 03:42:30.44ID:ZJqMOJYT0
Ruby のハッシュでは、データ数と共に、バケット数を増やしていく。
バケット数は、2 の累乗の次に現れる素数。
2^n + a, 2 <= n <= 30

8 + 3 = 11
16 + 3 = 19
32 + 5 = 37
64 + 3 = 67
128 + 3 = 131
256 + 27 = 283
512 + 9 = 521

データ数が、バケット数の5倍を超えると、ハッシュが再構成される。
再構成時には、極端に遅くなる

11 * 5 = 55 だから、データ数が56 個になると、バケット数が19 になる。
19 * 5 = 95 だから、データ数が96 個になると、バケット数が37 になる
0384デフォルトの名無しさん (ワッチョイ 119e-dYrz)
垢版 |
2018/07/17(火) 04:09:19.94ID:ZJqMOJYT0
AVL では、左右部分木の高さの差を、1 以内にしなければならないから、
2 になると、木の回転・縮約など、再構成をしなければならない。
つまり、しょっちゅう再構成が起こるので、遅くなる

赤黒木では、左右部分木の高さの差を2 倍以内にしたから、再構成が起こりにくい。
左が10 なら、右は20 まで、再構成が起こらない

タスクスケジューラーに使われる

例えば、100個のスリープしているタスクがある所に、
木に実行するタスクを追加して、重みに従ってソートすると、
追加したタスクが選ばれて、木から削除される

つまり、ほとんどの葉の順位が変わらなくて、
追加した葉が、すぐに削除されるようなものに適している
0385デフォルトの名無しさん (ワッチョイ 753c-KCFg)
垢版 |
2018/07/17(火) 21:50:50.91ID:j9lU977L0
makefileってPowerShellで作れないとかないですか?
0386デフォルトの名無しさん (アウアウカー Sa55-jzog)
垢版 |
2018/07/18(水) 13:02:52.94ID:9IEVAZpRa
>>385
君が何を言わんとしているのかがよくわからない
0388デフォルトの名無しさん (アウアウカー Sa55-jzog)
垢版 |
2018/07/18(水) 13:27:22.37ID:9IEVAZpRa
>>387
あれで人に言葉が通じていると思い込んでる可能性があるから書くべきだろう
0390デフォルトの名無しさん (ワッチョイ 1793-pJKM)
垢版 |
2018/07/22(日) 17:00:55.76ID:QT86rkZL0
なんとなく、コマンド行をタブで始めてなくて(スペースで空白を作ってて)、
makeがエラー出してるような気がするなぁ。
エディタのTab→スペース自動変換が効いてるとか。

PowerShellとは直接関係なくて。
0393デフォルトの名無しさん (ワッチョイ 9fd2-pvuh)
垢版 |
2018/07/23(月) 18:37:31.75ID:4YnpLRT90
>>392
まずスレッド一覧を開いてCTRL+FでC++と入れて検索しました
一応それらしき所を見つけたんですが書き込んだ瞬間変なおっさんに噛みつかれたので
初心者スレじゃないのかな。。。と。
入門にあったスレはないでしょうか
0394デフォルトの名無しさん (ワッチョイ 979f-lcCj)
垢版 |
2018/07/24(火) 00:16:29.41ID:jxAZ77iY0
無ければ作ったら良い
0396デフォルトの名無しさん (スップ Sd3f-3g7x)
垢版 |
2018/07/24(火) 10:50:38.33ID:0p5SDr2Gd
回答者も甘えてる奴がほとんどだしな
0402デフォルトの名無しさん (アウアウカー Saab-GY9v)
垢版 |
2018/07/25(水) 15:50:06.17ID:rOB4O81ba
明解と
書いてる方が
不明解
0403デフォルトの名無しさん (ブーイモ MMbf-4pMd)
垢版 |
2018/07/25(水) 18:17:36.85ID:LRuCLCqQM
今からC言語覚えて何に使うの?
■ このスレッドは過去ログ倉庫に格納されています

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