1read 100read
2013年01月プログラム29: C言語なら俺に聞け(入門編)Part 111 (1001) TOP カテ一覧 スレ一覧 2ch元 削除依頼
Ruby 初心者スレッド Part 50 (947)
【SL4】Windows Phone 7 アプリ開発スレ Part4【XNA】 (274)
スレ立てるまでもない質問はここで 123匹目 (638)
JavaScriptスレ2 (623)
【O3D】HTML5用 3D API WebGL 【Canvas:3D】 (498)
【C++】 DirectX初心者質問スレ Part37 【C】 (552)

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


1 :2012/12/09 〜 最終レス :Over
C言語の入門者向け解説スレッドです。
★前スレ
C言語なら俺に聞け(入門編)Part 110
http://toro.2ch.net/test/read.cgi/tech/1353148538/
★過去スレ
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++の宿題片付けます 161代目
http://toro.2ch.net/test/read.cgi/tech/1354070278/
★C++言語については避けてください。C++対応明記スレへどうぞ。
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること。
  # サイズが大きい場合はアップローダ等を利用してください。
http://codepad.org/
http://ideone.com/
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

2 :
乙〜

3 :
1乙。
日本のC言語底辺教育の総本山だ。
大事に使ってね。仲良く使ってね。

4 :
>>1
前スレ
> 986 名前:デフォルトの名無しさん [sage]: 2012/12/09(日) 20:24:53.93
> >>977
> 文字列反転関数
> void strrev(char *d)
> {
> int i;
> int len = strlen(d);
> char tmp;
> for (i = len / 2 - 1; i >= 0; i--) {
> tmp = d[i];
> d[i] = d[len - i - 1];
> d[len - i - 1] = tmp;
> }
> }
> これは、"1234"を"4321"に変換する
>
> 987 名前:デフォルトの名無しさん [sage]: 2012/12/09(日) 22:06:01.62
> 副作用かっこわるい
副作用?何?と思ったが分かった。
char* strrev(char *d) {
int i, len = strlen(d); char tmp;
for (i = len / 2 - 1; i >= 0; i--) { tmp = d[i]; d[i] = d[len - i - 1]; d[len - i - 1] = tmp; }
return &d[0];
}
なら良いのだな。
ところで、XORを利用したswapもあるんだね。
ttp://www8.cs.umu.se/~isak/snippets/strrev.c

5 :
>>4
前スレ987が勘違いしてる。
関数型言語でいう副作用排除なら、別エリアに編集する方法もある。

6 :
初心者なんだろうけど、いろいろと気持ち悪いコードだな

7 :
うん

8 :
何を返そうと、入力を破壊的に変更したら副作用だべ

9 :
前スレ986,987共に、引数はchar*だけなので、入力書き換えじゃなくて、引数から参照した先の状態書き換え。
C初学者が間違いやすい所。

10 :
Cには値渡しかないから、ポインタを参照渡しの代用にしてるんじゃないの。
なんにしても関数の外にあるものを変更したらそれは副作用だけども。

11 :
strdup()してから反転して返しても副作用と言うんかい?

12 :
関数内でstrdup()したなら、それをどういじくってから返そうと副作用じゃないのでは。
ヒープからメモリが確保される事も副作用と考えるならダメだけど。

13 :
ダメだけどね

14 :
調子にのってました
ごめんなさい!

15 :
うむ、分かればよろしい

16 :
C言語なら俺に聞け(入門編)Part 109
http://toro.2ch.net/test/read.cgi/tech/1350461655/
966 名前:デフォルトの名無しさん[sage] 投稿日:2012/11/17(土) 12:11:48.06
純粋に関数としてみると、printfは書き込まれた文字数を返す関数。
画面に文字を表示するのはprintfの副作用。
968 名前:デフォルトの名無しさん[sage] 投稿日:2012/11/17(土) 12:29:40.99
>>966
すみません、その副作用とはなんでしょうか。

17 :
977 名前:デフォルトの名無しさん[sage] 投稿日:2012/11/17(土) 13:20:30.07
>>968
int x;
int foo(void)
{
x = 100;
return 200;
}
で、xの値が書き換わってしまうのはfooの副作用。
int bar(void)
{
printf("%d\n", 300);
return 400;
}
で、数字が表示されてしまうのはbarの副作用。

18 :
979 名前:デフォルトの名無しさん[sage] 投稿日:2012/11/17(土) 13:42:07.78
>>977
うーん、return で返す値以外は、関数にやらせることが"副作用"なんですかね。
引数void戻り値なしなら、関数の処理は全部、"副作用"?
981 名前:デフォルトの名無しさん[sage] 投稿日:2012/11/17(土) 14:08:18.34
>>979
>引数void戻り値なしなら、関数の処理は全部、"副作用"?
そのとおり
982 名前:デフォルトの名無しさん[sage] 投稿日:2012/11/17(土) 14:36:24.96
void func(int *a){
*a = *a + 1;
}
を副作用って言うのは、正直微妙な気がする。

19 :
微妙、じゃなくて
この計算機工学界隈での定義であり用語だろ

20 :
そうだけど、何か?

21 :
用語が実態と乖離してるのを微妙に感じるってことだろ

22 :
副作用ってのはその関数においてローカルでもstaticでもない変数に書き込みを加えることを指すわけで、
returnだの引数だのといった説明は的外れ。

23 :
間違えた。訂正。
副作用ってのはその関数が終了してもメモリ上に残るような変数に書き込みを加えることを指すわけで、

24 :
副作用の事は入門レベルじゃないが、Cは状態依存(Statefull)で、副作用を積極利用してる言語だからな。
計算モデルでの、宣言的プログラミングとは違うモデル(ハードがStatefullなんだからしょうが無い)。
入門レベルをクリアしたら、CTMCP(コンピュータプログラミングの概念・技法・モデル)とかで違いが判る。

25 :
R

26 :
R

27 :
R

28 :
R

29 :
R

30 :
R

31 :
R

32 :
いんぽ

33 :
R

34 :
R

35 :
C言語とR言語どっちが難易度高いですか?

36 :
R言語って知らないけど、とりあえずCはそれほど難しくないからRのほうじゃね

37 :
グローバルの時代にクーラー効いた部屋でC言語プログラミング
時代錯誤にも程があるカスがwwww

38 :
#include <math.h>
を書いて数学関数を使うプログラムを書いたのですがコンパイルでエラーになりました。
gccに-lmオプションをつけたらやっとコンパイルが通ったのですが、Cの教科書には-lmオプションのことなんか一言も書いて有りませんでした。
本当にありがとうございました。

39 :
Rー

40 :
Rー

41 :
>>38
コンパイルは通ってリンクでエラーになってたんだろ。

42 :
うん、こ

43 :
printf関数を使う時ってstdio.hをインクルードして使うじゃないですか
てことはstdio.hでprintf関数が定義&宣言されてると思ってたんですよ
けれど
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1331505108
のベストアンサーを見てみたら
>printf関数をコールするにはstdio.hと言うヘッダーファイルを#includeでインクルードします。
>そしてprintf関数が入ったライブラリファイルをコンパイルにリンクするように追加します。
って記述があったんです
これってprintf関数はstdio.hじゃぁなくてライブラリファイルで定義されてて
stdio.hでは宣言しかされてないってことなんですか?

44 :
R

45 :
* ゚・*:.。.:*・゜+ d(*´∀`)b そうです +.:*・゜゚・*:. *

46 :
おまえはきっとライブラリファイルがテキストファイルだと思ってんだろ

47 :
返信アリャシャス
すっきりしました

48 :
R

49 :
テキスト以外はバイナリだとおそわりました

50 :
R

51 :
tinko

52 :
Rいんぽ

53 :
いんきんたむし

54 :
>>43
まぁ、そんな感じでいい

55 :
Rくさい

56 :
皮でRを包む

57 :
Rがぁ?

58 :
Rのぉ?

59 :
金玉がソファーにはりついて気持ち良い

60 :
R

61 :
>>54
ありがとうございます…

62 :
床オナはRの事をこれっぽっちも考えてない

63 :
Rこりん

64 :
ぽこちん祭り

65 :
mallocしたメモリは関数の呼び出し元・呼び出し先のどちらでfreeするのがいいのでしょうか?
普通に考えれば呼び出し先で、freeすることはほとんど無いはずなのですが
GUIのWindowみたいにいつ終わるかわからないものは、呼び出し先でfreeするのがベストかと思います。

66 :
>>65
巣からでてくんな
main以外★mallocの後にfree不要と言うバカいるの?
http://toro.2ch.net/test/read.cgi/tech/1352812333/

67 :
山ほどあるcで書かれたコード嫁

68 :
後片付けは自分でしなさいとこだわる人もいるだろうけど、
手紙なら読んだ人が処分するよね。
相手が読むのだけを待って、読み終えたら自分で片付けなくては
いけないなんて効率悪いと思う。
ただ、誰が片付けるかは明確にしておかないといけないけど。

69 :
>>37
>グローバルの時代に
聞くからに、とっても悲惨な時代だと、どーしても思うのですが

70 :
てs

71 :
てすと

72 :
#include <stdio.h>
int uruu(int year);
int main(void)
{
int a,b;
int lastdays=0;
int i;
scanf("%d %d ",a,b);
for(i=a;i<b;i++){
if(uruu(i)==1){
lastdays+=366;
}
else{
lastdays+=365;
}
printf("%d",lastdays);
}
int uruu(int year){
if(year%400==0){
return 1;
}
else if(year%100==0){
return 0;
}
else if(year%4==0){
return 1;
}
else{
return 0;
}
}

73 :
↑ごめんインデントが汚いけれど
何がいけないの?

74 :
>>73
何がやりたいのか書かれてないのがいけない

75 :
ごめん
年度二つ入力して閏年考慮した上で、その間の日数を求めたい。
これはそのひな形。
とりあえず、動かないんだ。

76 :
scanfに整数わたしてる

77 :
>>75
scanf &

78 :
ごめん、それも忘れたたけど
まだ動かない

79 :
どうなることを期待して、何が出るかくらい書け

80 :
インデントつけないのが悪いな。{ } が合ってない。

81 :
例えば
2000、2007といれると
2000=閏年=366
2001=平年=366+365
みたいになることを期待してるんだけど

82 :
その期待に対して、何が出るか聞いてんだよ

83 :
for(i=a; i<=b;i++)

84 :
if(year%400==0){
  ↓
if((year%400) == 0)
%と=どっちが優先か忘れたけど

85 :
その前に、main()の } が足りないみたいだけど、コンパイル通るのか

86 :
ごめん、出来た。
けど、結局何がいけなかったのか分からない。

87 :
さっきのと比較しろや

88 :
int ndays(int y,int m)
{
int days;
int month;
int data[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
days=month[m];
if(uruu(y)==1 && m==2)
{
days+=1;
}
return days;
}

この関数なのですが、何か問題がありますか?
プロトタイプ宣言もしてあるのですが、動作しません。

89 :
>>88
>days=month[m];
わからんけど、ここな気がする

90 :
days=data[m];
こうじゃね?

91 :
「動作しない」と「コンパイルできない」くらい区別してくれ

92 :
time_tに変換してdifftime()すればいいものを。
課題とか実験とかなら判るけど、馬鹿に限って手を抜くことをしないからなぁ。

93 :
入門編でしか暴れられない奴が言ってもなあ。

94 :
difftimeを知ってるならもう中級者

95 :
数字の末尾が2,4,6,8であるかどうかの確認ってどうするんでしたっけ?

96 :
わからない

97 :
お年玉葉書か。

98 :
>>95
bool isLastDigit2468(int value)
{
char foo[20];
char digit = foo[sprintf(foo, "%d", value) - 1];
return digit == '2' || digit == '4' || digit == '6' || digit == '8';
}

99 :
>>95
i%10&&!(i%2)

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
NetBeans Part6 (882)
プログラミング言語 Scala 8冊目 (726)
NullPointerExceptionを「ぬるぽ」と呼ぶスレ6 (406)
VB.NET質問スレ(Part39) (656)
【RAD統合環境】 Qt 総合スレ 14 【Win/Mac/Linux】 (561)
C++11/C++1y 16 (423)
--log9.info------------------
熊本のレコ掘り士達 (447)
●●♪    片瀬那奈の曲どうよ    ♪ ●● (554)
それで結局乙女ハウスってなんなのYO? (544)
UK HARD HOUSE, HARD TRANCE 総合スレ 1 (429)
【靴】クラブで踊りやすいシューズをkたるスレ【靴】 (491)
【赤坂・老舗】**ムゲン MUGEN ** (602)
仙台のディスコ (837)
【名古屋】PENT【2】HOUSE【女子大】 (739)
【名古屋】PENT【1】HOUSE【住吉】 (210)
よこはまケントス専用スレ (370)
GENIUS東京(銀座) (340)
【ダンス】分からない曲はここで【ディスコ】 (799)
頑張れ モーメンツ! (431)
■■現在40代前後で六本木のディスコを懐かしむスレ (826)
Dianaとお立ち台 (461)
★SEB (スーパーユーロビート) Vol.200★ (310)
--log55.com------------------
【バーチャル】hololiveアンチスレ#3096【youtuber】
【バーチャルYouTuber】.LIVEアイドル部アンチスレ#9931【アップランド】
【バーチャル】hololiveアンチスレ#3097【youtuber】【フレアマジ天使】
【バーチャルYoutuber】にじさんじ有ンチスレ15081【立てるのよ】
【バーチャルYoutuber】にじさんじ有ンチスレ15081【コーン応援スレ】
【バーチャル】hololiveアンチスレ#3097【youtuber】
【バーチャル】hololiveアンチスレ#3098【youtuber】
【バーチャル】hololiveアンチスレ#3098【youtuber】