トップページ⇒tech
1001コメント256KB

C言語なら俺に聞け(入門編)Part 85

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2011/05/30(月) 06:21:04.32
C言語の*入門者*向け解説スレッドです。

★前スレ
C言語なら俺に聞け(入門編)Part 84
http://hibari.2ch.net/test/read.cgi/tech/1305216054/
★過去スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
★教えて欲しいのではなく宿題を丸投げしたいだけなら
  ↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 148代目
http://hibari.2ch.net/test/read.cgi/tech/1305867431/
★C++言語については避けてください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
★ぬるぽ。

長くなりそうなコードはcodepadに貼り付けてもいいでしょう
http://codepad.org/
0002デフォルトの名無しさん2011/05/30(月) 07:44:54.02
>>1ガッ
0003デフォルトの名無しさん2011/05/30(月) 07:57:28.28
糞スレ
00049922011/05/30(月) 10:38:42.31
前スレの

>994

ありがとうございます

参考にします
0005デフォルトの名無しさん2011/05/30(月) 17:37:42.02
Cがjavaより遅いって本当ですか?
http://twitter.com/#!/BrightGenerous/status/73926671329271808
0006デフォルトの名無しさん2011/05/30(月) 18:18:22.19
>>5
ヘボが書いたものは長大で遅くてバグだらけ
出来る人が書いたものを使ったほうが早くなるのは当然
0007デフォルトの名無しさん2011/05/30(月) 18:28:41.09
大前提として、プログラミング言語の実行速度の
性能差は高々定数倍。
アルゴリズムの選択を間違えるとオーダーで遅くなる場合があるから
そういうこともある。
0008デフォルトの名無しさん2011/05/30(月) 18:36:47.99
同じ奴が書いて比較しないと意味ないだろう
0009デフォルトの名無しさん2011/05/30(月) 19:12:52.68
それだとコンパイラ次第じゃね?
個人的にはiccよりJavaが速かったことは無いわ。
0010デフォルトの名無しさん2011/05/30(月) 19:34:45.73
関数の途中でエラーが出たらmain関数に処理を戻したいんですがreturn文以外に方法ないですか?
0011 忍法帖【Lv=1,xxxP】 2011/05/30(月) 19:37:21.57
>>10
longjumpと言う手もないではないのですが、
ろくなもんじゃないので大人しくreturnで済ますのが無難です。
0012デフォルトの名無しさん2011/05/30(月) 19:38:10.84
>>11
なるほどありがとうございました!
0013デフォルトの名無しさん2011/05/30(月) 20:27:26.69
関数ポインタの利点、使い道を教えてください
プロトタイプ宣言すれば別のファイルからでも関数呼び出せますよね?
ポインタを使う意味ってなんですか
0014デフォルトの名無しさん2011/05/30(月) 20:34:02.17
>>13
実行時に呼び出す関数変えられるじゃん。
0015デフォルトの名無しさん2011/05/30(月) 20:37:34.46
テーブルjmpとか知ってる?
0016デフォルトの名無しさん2011/05/30(月) 20:37:50.93
>>13
関数ポインタを使えば、関数の名前を知らなくても関数を呼び出せるでしょ。

例えば GUI ライブラリなんかで、ボタンを押した時の処理を指定する時に
関数ポインタが無いと困る。

GUI ライブラリの側で予めコールバック関数の名前を決めておいて、
ライブラリのユーザはその名前で関数を作るという事も出来るけど、
その方法だと、同じボタンを複数作りたい時に破綻する。
0017デフォルトの名無しさん2011/05/30(月) 20:55:10.01
コールバック関数だと、わかりにくいのでは?
0018 忍法帖【Lv=1,xxxP】 2011/05/30(月) 21:35:44.41
つ[qsort()]
0019デフォルトの名無しさん2011/05/30(月) 22:21:35.87
つ bsearch()
0020デフォルトの名無しさん2011/05/30(月) 22:41:20.43
たまにはsignalの事も思い出してあげてください
0021デフォルトの名無しさん2011/05/31(火) 20:56:08.12
C言語入門〜みたいな本をよんで一応基本的な書き方は覚えたんですが次にどんな事を学習していけばいいのかがわからず困っています。
なにかおすすめな参考書でも教えていただけないでしょうか。
0022デフォルトの名無しさん2011/05/31(火) 21:10:12.25
文字列において改間は何コードになるんですか?

例えばbig appleという文字列がありますよね?
gとaの間の文字は何ですか?
0023デフォルトの名無しさん2011/05/31(火) 21:16:54.91
>>21
アルゴリズムとデータ構造の勉強
0024デフォルトの名無しさん2011/05/31(火) 22:03:23.52
>>22
スペースキーを押したらスペース、タブキーを押したらタブ
0025デフォルトの名無しさん2011/05/31(火) 22:20:41.99
>>24
空白ってことか。
0026 忍法帖【Lv=2,xxxPT】 2011/05/31(火) 22:24:43.82
>>22
改間って何ですか?
0027デフォルトの名無しさん2011/05/31(火) 22:28:26.51
>>21

自分で何か作るとよい。

「C言語 入門書の次に読む本 [改訂新版]」
「C言語によるオブジェクト指向プログラミング入門」

おすすめです。
0028デフォルトの名無しさん2011/05/31(火) 22:36:25.57
>>23
>>27
教えていただきありがとうございます。
アルゴリズムの本はもっているのでそれを読みつつ紹介してもらったので勉強をしようと思います。
0029デフォルトの名無しさん2011/05/31(火) 23:57:29.01
>>22
http://bellard.org/jslinux/
で

#include <tcclib.h>
main()
{
putchar(' ');
printf("%d", (int)' ');
}
をクリップボードに貼りつけて

tcc /dev/clipboard
でコンパイルして

./a.out
で実行したら

32
ってでた
0030デフォルトの名無しさん2011/06/01(水) 06:43:24.26
キャストすんなボケが
0031デフォルトの名無しさん2011/06/01(水) 06:58:52.15
キャストしなくてもintだろw
0032デフォルトの名無しさん2011/06/01(水) 16:26:44.26
ビットシフトで1がいっぱいになっちゃいます
どうすればいいですか
0033デフォルトの名無しさん2011/06/01(水) 17:15:31.28
>>32
一杯になったら出しちゃえば?
0034 忍法帖【Lv=3,xxxP】 2011/06/01(水) 18:13:56.95
出ちゃう〜ってかw
0035デフォルトの名無しさん2011/06/01(水) 20:10:01.35
c言語始めて一週間の初心者ですが、質問です。
キーボードからの小数の入力を受け付け→その値を出力
というコードを書いていましたが、出力結果が必ず0.000000になってしまいます。
解決方法が全く分かりません。協力お願いします。

#include <stdio.h>

int main(void)
{
double num;

printf("小数を入力してください。\n");

scanf("%1f", &num);

printf("%fが入力されました。\n", num);

return 0;
}
0036デフォルトの名無しさん2011/06/01(水) 20:12:46.58
1f → lf
0037デフォルトの名無しさん2011/06/01(水) 20:13:53.15
scanf("%1f", &num);
 ↓
scanf("%lf", &num);
0038デフォルトの名無しさん2011/06/01(水) 20:21:48.26
>>36〜37
解決しました。lと1読み間違えてましたw
ありがとうございました。
0039デフォルトの名無しさん2011/06/01(水) 21:05:58.31
>>38
こういう理不尽なバグを回避するためにフォント選んだ方がいいよ。
1とl、0とOの区別が付かないフォントもあるでの。
0040デフォルトの名無しさん2011/06/01(水) 23:51:16.71
void型の関数でreturnするのは変ですか?
戻り値に注目しないにしてもintでreturn 0するほうが書き方としてはいいですか?
0041デフォルトの名無しさん2011/06/01(水) 23:56:42.17
#include<stdio.h>
main()
{

bool i=1;
if(i==1)
puts("ok");
else
puts("no");
}

エラーでるんですけどなんでか教えてください



0042デフォルトの名無しさん2011/06/01(水) 23:59:20.45
>>41
エラーメッセージも読めない奴に教える意味は無い
0043デフォルトの名無しさん2011/06/02(木) 00:01:45.07
#include <stdbool.h>
と
int main()
あたりで
0044デフォルトの名無しさん2011/06/02(木) 00:05:12.17
せっかくコンパイラが丁寧にエラー内容を教えてくれてるのに
無視して 2ch に聞きに来るとかコンパイラが可哀想過ぎる
人としてどうなのよ
0045デフォルトの名無しさん2011/06/02(木) 00:16:38.27
>>40
誰も書き込んでないから返事してやるよ
別に変じゃないとおもうぞ ってか俺もvoid型でもreturn いれている
まぁ人によってはいらないっていうヤツもいるだろうが、
そこで関数を終了し、処理を返しているってはっきり記述できるし

特定条件下で途中で処理返す時もreturn書くなら、終わりにも書いた方が自然だろ。
int型で return 0とかにするかは勝手にしろ。

いろいろ言語の細かいところに行くとどっちがいいとかあるかもしらんだが
そんな事で一々悩むつもりない。
自分だけで使うなら自分がわかればいい。
0046デフォルトの名無しさん2011/06/02(木) 01:45:52.28
void型の関数にどうやってreturnするん?
return ()とか?
0047デフォルトの名無しさん2011/06/02(木) 01:59:53.06
関数の途中で、打ち切って戻る時?
0048デフォルトの名無しさん2011/06/02(木) 06:13:54.82
>>46
なぜ括弧をつける
0049デフォルトの名無しさん2011/06/02(木) 10:24:26.98
>>46
return;
0050デフォルトの名無しさん2011/06/02(木) 17:22:05.87
ビターン
0051デフォルトの名無しさん2011/06/02(木) 19:27:45.27
c言語のエディタでお勧めはなんですか?

・あるといい
関数にプルダウンでアクセスできる
0052デフォルトの名無しさん2011/06/02(木) 19:34:31.41
プログラムの実行中に開けていたファイルが開けなくなったんだけども
何が原因なんですかね。
0053デフォルトの名無しさん2011/06/02(木) 19:37:53.48
すみません。解決しました。
前の関数の中のファイルがとじられてなかった
0054デフォルトの名無しさん2011/06/02(木) 20:01:14.74
>>51
道具に使われることは考えないほうがいいよ
0055デフォルトの名無しさん2011/06/03(金) 02:27:48.15
>>51
環境を書いてないね。
Windowsならvimで、linuxならvimかな。
BSDやmacもvimでいいとおもう。
0056デフォルトの名無しさん2011/06/03(金) 20:17:33.43
あるフォルダ内に置いたCで作られた実行ファイルから取得できる
そのフォルダ内の情報ってどういうのがありますか?
0057デフォルトの名無しさん2011/06/03(金) 21:16:40.20
よーわからんけど、実行された時のフルパスを使えばいいんでないかい
0058デフォルトの名無しさん2011/06/03(金) 22:19:01.67
よー判らんけど、ファイルシステムのことはAPI使わんと判らんよ。
0059デフォルトの名無しさん2011/06/03(金) 22:36:14.22
出力結果をテキストファイルに出すコマンドて何でしたっけ?
fprintfとかじゃなくて、結果を丸ごとテキストファイルに出力したいです。

プログラムはprogram.c
出力させたい空のファイルをprogram.txt
とします。
0060デフォルトの名無しさん2011/06/03(金) 22:40:51.14
>>59
>
0061デフォルトの名無しさん2011/06/03(金) 22:42:47.62
>>60
program.c program.txt >ですか?
良く分かりません・・・すいません。
0062デフォルトの名無しさん2011/06/03(金) 22:46:40.65
残念
コマンドではなくリダイレクトでしたあばばばばあばbっばばばばばb
0063デフォルトの名無しさん2011/06/03(金) 22:55:59.54
>>61
使ってるOSとかコンパイラとか分かる?
0064デフォルトの名無しさん2011/06/03(金) 22:56:27.13
シェルスクリプトのコマンドが知りたいだけなのに
検索でfprintf引っかかり・・・うざすぎワロタ

0065デフォルトの名無しさん2011/06/03(金) 22:59:14.57
コマンドプロンプト リダイレクトでぐぐれ
0066512011/06/03(金) 23:01:48.02
>>55

ありがとうございます。
0067デフォルトの名無しさん2011/06/03(金) 23:07:21.86
>>51
環境を書いてないね。
Windows だったら xyzzy の一択。これ、Linux や *BSD に移植してくれないかなあ。
mac のことはよく知らない。
0068デフォルトの名無しさん2011/06/04(土) 00:33:20.75
パチンコ禁止デモ

大阪にて北朝鮮系ヤクザが在特会に襲撃!!!!!!
http://www.youtube.com/watch?v=zL0jgbzOtUM

【パチンコ】年商4000億「ガイア」代表取締役 覚せい剤逮捕 パチンコ業界人「こんな時期に」と動揺&困惑
http://raicho.2ch.net/test/read.cgi/newsplus/1307057114/

パチンコを死守する北朝鮮系ヤクザとシャブ中社長!!!
0069デフォルトの名無しさん2011/06/04(土) 01:35:58.19
`;:゙;`;・(゚ε゚ )ブッ!! なんだこのスレ・・・ C言語の前に日本語勉強汁!!
0070デフォルトの名無しさん2011/06/04(土) 02:46:04.60
>>67
emacsと比べてそんなにいいの?
0071デフォルトの名無しさん2011/06/04(土) 06:54:33.33
>>70
エディタ内のカットバッファをGUIのクリップボードと分離して独立して扱えるのはemacsより気が利いているかもしれない。
emacsと違って、単にエディタだから単純には較べられないけどね。
0072デフォルトの名無しさん2011/06/04(土) 07:12:48.70
emacs とその眷属は操作体系のデザインが悪いから好きじゃないな。
vi 類の方がまだマシ。
0073デフォルトの名無しさん2011/06/04(土) 10:31:42.40
>>71
おまい、emacs使ったこと無いだろ
0074デフォルトの名無しさん2011/06/04(土) 10:37:35.80
宗教談義はそのへんでやめましょう
0075デフォルトの名無しさん2011/06/04(土) 17:53:31.06
static変数/static関数はヘッダファイルに記述しないのが一般的なのですか?
→つまり、ヘッダファイルはpublicなものしか書かないのが普通?
0076 [―{}@{}@{}-] デフォルトの名無しさん2011/06/04(土) 18:12:28.13
static使ってるとそのオブジェクトを複数生成するのが不可能になるから
オブジェクト指向という考え方からすると使うべきじゃないね
0077 ◆QZaw55cn4c 2011/06/04(土) 18:47:06.09
>>75
ヘッダーファイルは複数の c のモジュール(コンパイル単位)で参照されるものだから、一つのコンパイル単位で完結する性質の static 変数/static 関数を記述する場所ではない。
0078デフォルトの名無しさん2011/06/04(土) 19:03:13.26
strlenにchar*型と配列を入れるときなのですが
後者の場合正しく出ないんです・・・
何故ですか?

0079デフォルトの名無しさん2011/06/04(土) 19:13:08.80
ちゃんと'\0'で終わってる?
配列のサイズと文字数が一緒になってたりしない?
0080デフォルトの名無しさん2011/06/04(土) 19:15:00.08
あなたが低脳だからです

0081752011/06/04(土) 19:40:52.49
>>76
>static使ってるとそのオブジェクトを複数生成するのが不可能になるから
これは、どういう意味ですか?


>>77
つまり、staticはヘッダファイルに書くべきじゃないってことですか?
0082772011/06/04(土) 20:32:07.19
>>81
通常の使い方では static な変数/関数をヘッダに書くことはないと思います。
というか、>>77 で述べたとおりで、思いつかないのです。
0083デフォルトの名無しさん2011/06/04(土) 21:24:26.19
>.79
fgetsで読み込んだ場合

例えば
abc def

をchar*pがさすとき
strlen(p)はどうなりますか?
0084デフォルトの名無しさん2011/06/04(土) 21:33:25.78
7か8じゃね?
0085デフォルトの名無しさん2011/06/04(土) 21:34:57.09
>>83
自分でやってみて、それが思った事と違うなら相談してみたら?
0086デフォルトの名無しさん2011/06/04(土) 21:39:32.12
>>85
DFASD
sdfsd
dsd
fd

テキストファイルです
上から順番に
7
7
5
2
です。
全く分かりません・・・解析してください。
0087デフォルトの名無しさん2011/06/04(土) 21:41:13.64
>>86
読み込むテキストファイルの改行コードが CR+LF
fopen するときにバイナリモードで開いている
0088デフォルトの名無しさん2011/06/04(土) 21:41:27.10
改行が\r\nなんだろうな
改行が二文字でカウントされてるんだよ
0089デフォルトの名無しさん2011/06/04(土) 21:42:05.50
>>86
それじゃ分からない。ソースを一緒に晒してみて
0090デフォルトの名無しさん2011/06/04(土) 21:48:41.97
>>88
あぁなるほど。たぶんそれですね。
ただナル文字って配列の場合でもchar*の場合でも
strlenでは無視されるんですよね。助かります。
0091デフォルトの名無しさん2011/06/04(土) 23:05:07.91
C言語を始めよう!とLSIC-86試食版を使ってプログラムを打っていたのですが
突然コマンドを実行すると「コンパイル開始」の表示のままで止まるようになりました。
それまではきちんとプログラムが再生されていたのですが…
また、コマンドを実行する度「C言語を始めよう!」のフォルダ内に
TMPファイル(0バイト)が作成されるようになりました。
どのようにすれば元通りになるでしょうか?
0092デフォルトの名無しさん2011/06/04(土) 23:06:09.35
>>75

ヘッダファイルとは何か?

それが問いの答えになる。

調べてみよう。
0093デフォルトの名無しさん2011/06/04(土) 23:11:30.99
>>91
状況がよくわかりません。参考にした資料/URL を教えてください。
あと、今日日、LSI-C はちょっと古すぎます。別のコンパイラのほうがいいでしょう。gcc とか visual c++ とか、ちょっとふるいけれども borland c++5.5.1 とか。
0094デフォルトの名無しさん2011/06/04(土) 23:26:33.18
せめて Turbo C 2.01 使えよ。
開発環境も付属だからそのまま使えるぞ。
試食版みたいな変な制限もないし。
0095デフォルトの名無しさん2011/06/04(土) 23:26:34.27
>>93

レスありがとうございます。導入に使ったHPは
http://www9.plala.or.jp/sgwr-t/detail/EnvSet.html
http://homepage3.nifty.com/aokura/phoebe/phoebe.htm です。

ちなみにborland c++5.5.1、本当は導入したかったのですが
DL箇所がうまく見つけられませんでした…
0096デフォルトの名無しさん2011/06/04(土) 23:38:08.83
>>94
レスありがとうございます。
今Turbo C 2.01について調べていたのですが、
これは日本語でも使えるのでしょうか?
英語のサイトが多くて導入が難しそうに見えたので…
0097デフォルトの名無しさん2011/06/04(土) 23:50:01.22
>>95
了解。
で、プログラムの「再生」という言い回しは普通しないので、状況が伝わってきません。

コンパイルはうまくいっていますか?
コンパイルの結果生成した .exe ファイルが実行できないということですか?
0098デフォルトの名無しさん2011/06/04(土) 23:54:18.31
関数の中で変数を使う場合、関数の前半で変数が定義されてる場合
関数を呼び出すほど変数のメモリを食うのですか?
0099デフォルトの名無しさん2011/06/04(土) 23:57:30.90
>>97
すみません、初心者なもので言葉が結構足りてなさそうですね…申し訳ないです。
コンパイルは開始と終了がきちんと出てますので、成功しています。
ただコマンドを実行すると開始表示をしたままで止まってしまいますので
まさしく仰られている通りの状態かと思います。
0100デフォルトの名無しさん2011/06/05(日) 00:07:52.00
>>98
最適化すると変数でメモリを食わなくなることがある
0101デフォルトの名無しさん2011/06/05(日) 00:11:08.51
>>95
Visual C++ 2010 Expressじゃだめなん?
■ このスレッドは過去ログ倉庫に格納されています