1read 100read
2011年10月1期プログラムC言語を勉強しあおう TOP カテ一覧 スレ一覧 削除依頼
・ 次のスレ
【Lua】組み込み系言語総合 その5【Squirrel】
【分散型バージョン管理】 Mercurial 2【hg】
【GTK+開発環境】Anjuta【Linux c c++ js py 】
Cygwin + MinGW + GCC 相談室 Part 6


C言語を勉強しあおう


1 :07/09/24 〜 最終レス :12/01/06
教えあおう。

2 :
コマンドライン引数を受けとるメインは
main(int argc, char *argv[])
とかいってみる

3 :
すごい勉強になった。

4 :
const char *argv[]のほうがよくね?

5 :
ノーコメント

6 :
すごい勉強にならなかった。

7 :
ヘコんだ…orz

8 :
const つけたら規格違反じゃん

9 :
>>8
規格読んだこと無いのがバレバレだな

10 :
++a = a++ + ++a;
って、どうなるの?

11 :
さぁ
aの型と値による

12 :
>>10
少なくとも鼻から悪魔が出ることは間違いない・

13 :
>12
ちょwww間違いないのかw

14 :
>>13
間違いというわけでなく結果が未定義なので処理系依存。
http://www.st.rim.or.jp/~phinloda/cqa/cqa7.html

15 :
>14
いあいあ
「鼻から悪魔」ってのは「結果が未定義なので何が起きてもおかしくない」って意味だろ?
それを「鼻から悪魔が出ることは間違いない」って言っちゃうと
「間違いなく鼻から悪魔が出る」という意味になって「未定義」って意味でなくなっちゃうって意味で笑ったのだけど…
分かりにくかったらスマンカッタ

16 :
いや、俺はわかったぞ。

17 :
鼻から悪魔が出ることは間違いない=未定義であることが間違いない。
ってことか。

18 :
>>15
>13を「間違いなのか」って読み間違えて「間違いじゃなくて未定義だよ」ってレスした。
>>14で言いたかったことは>>17みたいな感じ。
壊れた日本語で誤解させてスマソ。

19 :
do{
 printf("%d\n", i);
 ji = getchar();
 i++;
}while(i <= 5);
このループを回すと、
a ←入力
1
2
d ←入力
3
4
というふうに勝手に二度回ってしまうんですけど、どうしてでしょうか?
コンパイラはgcc4.1.2なんですが。

20 :
>>19全部を見せてくれないとなともいえねぇ

21 :
>>19
全部を見るまでもない。getchar()は一文字入力関数なのに
aを入力した段階で'a'と'\n'の二文字を入力してしまっているので
二度目のループに到達してしまう。
回避するには、改行文字を読み捨てるか一行入力単位で処理するか。

22 :
>なともいえねぇ
馬鹿丸出しだな。

23 :
例えば
int a[5],x;があって
scanf("%d",&x);で123と入力したとき
a[0]に1 a[1]に2 a[2]に3
を入れるにはどうすればいいでしょうか

24 :
>>23
a[0] = x / 100;
a[1] = x / 10 % 10;
a[2] = x % 10;
or
scanf("%1d%1d%1d", & a[0], &a[1], &a[2]);

25 :
>>24さんありがとうございます
しかしそれだと不特定多数の場合使えないので
一般化してもらえないでしょうか?

26 :
すみません聞き方が間違っていました
一般化したものも作ってもらえないでしょうか

27 :
不特定多数って入力の桁数に依存しないって意味か?
とするなら下位はa[0]に入れるのが自然な気がするが、上位に入れるのでいいのか?

28 :
さっきはint a[5]でしたが要素は
#define N 20などとしておきNを要素とします
入力はNを超えない程度にお願いします
良く分からないので上位下位どちらもお願いしてよろしいでしょうか

29 :
>>25
ヒントだけでは何にもできないならこのスレにいる意味がないのでは?
少しくらいはない知恵を絞ってみてから他人を頼りなさいよ。

30 :
つーか、>24の下の方法は充分一般化されていると思うのだが。
そもそも、一桁ずつ配列に入れたい理由が判らんからなんとも言えんが。

31 :
>>24の下のほうでは入力される値が12345など桁が増えれば
それにしたがってコードも書き直さなければいけないので十分一般化されているとはいえません

32 :
>>21
レスありがとうございます。
文字当てゲームを作りたかったのですが、
とりあえずの解決策として、以下のようにしてみました。

33 :
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define BIGSMALL 97
int main(void)
{
    char qchar[10];
    char ji[256];
    int i = 0;
    srand((unsigned int)time(NULL));
    qchar[0] = (rand() % 25) + BIGSMALL;
    printf("%c", qchar[0]);
    do{
        scanf("%s", ji);
        printf("%c\n", ji[0]);
        if (ji[0] == qchar[0]){
            printf("正解!\n");
            return 0;
        }else if (ji[0] < qchar[0])
            printf("届かない\n");
        else if (ji[0] > qchar[0])
            printf("行き過ぎ\n");
        i++;
    }while(i <= 5);
    printf("ゲームオーバー\n");
    return 0;
}
あまりスマートでない気がしますが、より良い方法はないでしょうか?

34 :
失礼しました。
テスト中のソースなので、余計なものが入ってます。
ご了承ください。

35 :
gets(s);
n = strlen(s) - 1;
a = malloc(sizeof(int) * n);
for (i = 0; i < n; i++) *(a + i) = *(s + i) - '0';
free(a);

36 :
なぜfor文に値を掛けてさらに代入しているんでしょうか?

37 :
入力された時点で桁数が分からないから桁数分だけ処理をするため。
もうちっと、読解しようとする努力をしてみてもいいんじゃない?

38 :
>>36
>29
つーか、forに値を掛けるって何だ?

39 :
たぶん for (i = 0; i < n; i++) * (a + i) のことだと思われ
* は掛け算じゃない

40 :
* (a + i)

a[i]

41 :
20回くらいコンパイルエラーやセグ違反を繰り返して出来た
人生初のCプログラムをここに記す
#include <stdio.h>
main()
{
int i;
int a[99];
i = 0 ;
while ((a[i] = getchar()) != '\n')
i++;
a[i] = '\0';
i = 0 ;
while (a[i] != '\0')
putchar(a[i++]);
putchar('\n');
return 0;
}
実行結果
$ a.out


$

42 :
>>41
カレントディレクトリをPATHに入れるのは危険なのでやめた方がいい。
それはいいとして、アナクロな書き方だなぁ。

43 :
>>42
なるほど危険なことしてましたね。
それにしてもUNIXっていいですね。DOSなら暴走ですね

44 :
大丈夫、UnixでなくともWindowsならそこそこ保護機能は働く。
PATHにカレントを含めると何が危険なのかというと、例えば/tmpにうっかり(或いは故意に)
lsと言う名前の実行ファイルを置いてしまっているときにcd /tmpしてlsしたときにはまるから。
また、既存プログラムとたまたま同じ名前のプログラムを作ったときにも同じことが言える。
例えば、calというプログラムをつくってしまい、./calではなくcalと実行すると/bin/calが動くわけで。

45 :
#include <stdio.h>
#include <stdlib.h>
typedef struct lst_t {
    char chr;
    struct lst_t *next;
} lst_t;
lst_t *makelist(char *);
void putlist(lst_t *);
int main(int argc, char *argv[])
{
    lst_t *lst;
    lst = makelist("\nopurun");
    putlist(lst);
    return 0;
}
lst_t *makelist(char *str)
{
    lst_t *lst = NULL;
    if (*str) {
        lst = (lst_t *)malloc(sizeof(lst_t));
        lst->chr = *str;
        lst->next = makelist(str + 1);
    }
    return lst;
}
void putlist(lst_t *lst)
{
    if (!lst) return;
    putlist(lst->next);
    putchar(lst->chr);
    free(lst);
}

46 :
[-3,3] fx=1/(1+5x^2) 分点の数 10個(n=9)
これをラグランジュで求めて結果を出力するプログラムを作れって言われたけどさっぱりでしゅ(c c++)

47 :
>>46
課題丸投げは宿題スレへ
http://pc11.2ch.net/test/read.cgi/tech/1195668114/

48 :
C言語を始めてもうかれこれ1年くらい経ちますけど
FFみたいなソフトはどうやって作るんですか?
ゲーム作成を歌ってる書籍に載ってるゲームなんて
他人にゲームとして公開できるレベルではありませんよね

49 :
>>48
まずはそのレベルでも達しないと、さらにその上には行けないと思うよ

50 :
>>48
他人に後悔もできないレベルのゲームが作れない人間がいきなりいいものなんてなかなか作れないよ。
ゲームは画像処理やサウンド制御、データ作成、バランス調整、シナリオ作成、企画などなどプログラム技術
以外の知識や経験、センスも多く必要。

51 :
ゲームって一人で作れるもんなのか?
低レベルの俺には想像できんな

52 :
>>48
英語始めて一年くらい経ちますけどハリーポッターみたいな長編小説はどうやって書くんですか?
というくらい頓珍漢な質問だね。

53 :
>>52
あんたアフォ?

54 :
いや、適切な喩えだと思うぞ。

55 :
微妙なところだと思う。言いたいことはわかるけど、それを英語初めて一年目の
人間に言われても「なんで?」ってなりそうでうまくたとえられていないような気がする。

56 :
>>48
> ゲーム作成を歌ってる書籍に載ってるゲームなんて
> 他人にゲームとして公開できるレベルではありませんよね
何のゲームかは知らんが、君はその書籍に載っているゲーム
くらいは作れるのかい?
その書籍のソースをコピペするだけなら誰でも出来る。
要は、その書籍からゲームの作り方を学び取り
そこから初めて自分なりのゲームを考え始めるもんだろう
まぁC言語1年って事は、まだまだ先の話だろうけど。

57 :
>>55
>それを英語初めて一年目の人間に言われても「なんで?」
まさにこれだろ。
>それをプログラム初めて一年目の人間に言われても「なんで?」
て事。

58 :
ゲーム作成入門書籍(簡単なテトリス)

プログラムのシステムの壁(FCのFF)

越えられないボリュームの壁(SFCのFF)

越えられないマルチメディアの壁(PSのFF)

指をくわえて見てるだけの存在(PS2のFF)
無理です

59 :
>>58
すごくわかりやすいwww

60 :
システムとかは勉強すりゃいいが
ボリュームの壁はきびしい

61 :
何十人-何百人ものスタッフが何ヶ月-何年もかけて作ってるわけだからなぁ。

62 :
>>58
>プログラムのシステムの壁(FCのFF)
俺、もうこの時点でマルチメディアの壁が越えらんネ。

63 :
皆さん。
今、C言語の勉強をしているのですが、どうしても分からないので、分かる方がいましたら教えてもらいたいのですが・・・。
キーボードから文字を入力して(scanf)を使用して、1を押したら「+」が表示され、2を押したら「###」、3を押したら「*****」
と+、#、*を判断して押したキーボードにより結果が変わる仕組みなのですが、さっぱり分かりません。
例えば、3をおすと、

###
*****
5を押すと、

###
*****
+++++++
#########
と、言うプログラムなのですが・・・。
使用する関数は、if、for、while等です。
分かる方、ぜひ教えてください。
よろしくお願いします。

64 :
何年か前に、同人製作板のゲーム関係のスレをチェックしてたことがあったけど、
「市販レベルのゲームをめざします。うちはスタッフにもそれなりのレベルを要求しますよ」
みたいな募集がいっぱいあったね。
募集してる当人たちは「総指揮」とか「ディレクター」とか「アドバイザー」とか、実作業は
しないであろう肩書きばっかりなの。
(ゲームデザイナーをやるって言うやつでさえマシに見えるレベル)

65 :
今はそんな募集すらない気が

66 :
リア厨の儚い夢だったってことさ

67 :
>>61
何年もかけてるわけない
そんなにかかったらM取れねーよ

68 :
>>63
そのぐらいの丸投げなら宿題スレの方が早いと思うぜ。
テンプレちゃんと守れば。
丸投げじゃないなら、何が分からんかもうちょい詳しく。
>>64
2chで総指揮なんて、実作業してるメンバーより大変そうなんだがな。
メンバーの作業速度すら分からないのに、
作業項目洗い出して、細分化して、担当振って、予定表出して、
予定とズレたら他の担当分と調整しながら修正修正修正。
そして遅れてるヤツのケツを叩く。
ん?なんか言葉にしたら簡単そうに見えるなww

69 :
ろくに才能も知識も経験もないしこつこつ努力する気もないけど
自分の名前で何かすごいものを出してちやほやされたい
などという厨な望みが叶うほど現実世界は甘くない
ということを悟るのが早いか遅いかの違いだけ
漏れにはまだその願望が残っていることを認めよう

70 :
>>68
実作業やるスタッフのほうが大変にきまってるだろ。
そもそも「全職種募集。おれ総指揮」なんて言ってるやつはなんにもできないから、そんなことを言っているん
であって、作業項目の洗い出しとかできるわけない。
(実際、ゲーム作ったことのやつばっかだったし)
さらに言えば、数人程度でやってる作業に、専業の監督なんていらないし。

71 :
でも金持ちなら話は別だな
年数十億をポケットマネーで出せる奴なら人も集まるだろう

72 :
>>70
あー、いや。
>そもそも「全職種募集。おれ総指揮」なんて言ってるやつは
>なんにもできないから、そんなことを言っているんであって
めっちゃ同意なんだけど。
言いたかったのは「ちゃんとやる総指揮って、んなに楽なもんじゃないぞ」ってことで。
実際シキリ役居なかったときに1回やったけど、もうやりたく無いわ。
単なるADVだったんだけど、何もノウハウ無いし
ネットで検索しながらADVゲームの作り方を1から勉強して、WBSおこして・・・。
遊びでマジメにやり過ぎたと後悔した。
ちなみにプログラマと兼任だった。
経験上数人でも専業監督は欲しい。

73 :
なんかコピペであったな。失敗する同人ゲームとかなんとか。
うろ覚えだけど
・発起人(管理人)がディレクター、アドバイザーを名乗る(もちろんプログラム未経験)
・自分はなにもできないのに周りのメンバーには高いレベルを要求する。
・「遊びじゃないんで」「本気です」が口癖。
・集まってくるのメンバーが「テスター」「声優」ばかり。
・管理人の仕事(実作業)はブログで夢(壮大な計画)を語ること。
・そのブログも「病気」とか「コンピュータウィルスにやられて・・・」とかで休みがち。
・ペンネームに「月」とか「水」とかがつく。
とかなんとか。忘れたwテキトーに書いたんでみんなも忘れてくれ。

74 :
それは大失敗だな

75 :
板違いだカスども

76 :
自動でゲームを作ってくれるプログラムをC言語で書け

77 :
mpeg compass.jp
名古屋駅近辺でお話しましょう

78 :
>67
スクエニ辺りは何年も掛かってそうだが
発売延期繰り返したからな、一時期w

79 :
Cプログラマの為に、ポイントをまとめたドキュメントを販売しています。
プロのプログラマでもあまりにレベルが低い人が多すぎます。
そんな人に限って、自分のレベルの低さを自覚していない、、、
 本人は構わないかもしれませんが、その下についた新人プログラマは
たまったものではありません。(私が経験しました。)
 今になって分かりました。
彼らもまた、理解できていなかったのです。
 プログラミング言語の一番の習得の近道はきちんと理解している人にアドバイスをもらうこと。です。
私のC言語に取り組んだ7年間をすべてぶつけたつもりでテキストを作りました。
 私の会社の後輩からは、どんなテキストよりもわかりやすかった!や、
今まで教えてくれていた先輩や、テキストたちが、ちゃんと理解できていないことがわかりました。
と、嬉しいコメントをたくさんもらいました。
そしてなにより、彼らの社内での評価がとても高いということが、私の誇りです。
 興味がある方はどうか、下のサイトをみてみてください。
http://mori.eco.to/

80 :
二日も連続でマルチとな・・・
誰か買ってやれよ、んでアップして突っ込み所みんなで探そうぜ。
俺は金ないからパスね。

81 :
>>80
qsort()の実装にmalloc()の使用を認める程度だから買うだけ野暮でしょ。

82 :
>>81
そこは目を疑ったな。
マージソートを想定してるのかね。
普通はクイックソート+O(N^2)ソート(要素数少ない時)な実装にするはずだが。

83 :
こちとらメモリをGB単位で使うってのに、qsort()でmalloc()されたらたまったもんじゃねぇっての。

84 :
printf("C言語の学習");
これを
printf("C言語の
学習");
のように改行しても大丈夫なようにする方法ってありますか?

85 :
printf("C言語の\
学習");

86 :
printf("C言語の"
    "学習");

87 :
>> 85,86
ちょうどそのことに調べようと思ってた時だった。
サンキュ〜

88 :
初めて作ったプログラムです。
どうですかね。うまくできてますかね。
#include <stdio.h>
#include <stdlib.h>
/*関数roの宣言*/
int r(int si,int tai);
int main(int argc, char *argv[])
{
int ro,si;
int tai;

printf(" ローレル指数を計算します。\n");
printf(" ローレル指数とは\n ");
printf("あなたが痩せているか太っているかを調べる数値です。\n");
while (1){
printf(" \n 身長を入力してください。(cm): ");
scanf("%d",&si);
if (si<0){printf(" error!!\n");break;
}

printf(" \n 体重を入力してください。(kg): ");
scanf("%d",&tai);
if (tai<0){printf(" error!!");}

ro=r(si,tai);




89 :
                l三`ー 、_;:;:;:;:;:;:j;:;:;:;:;:;:_;:;:;_;:-三三三三三l
               l三  r=ミ''‐--‐';二,_ ̄    ,三三三彡彡l_   この感じ・・・・
              lミ′   ̄    ー-'"    '=ミニ彡彡/‐、ヽ
                  l;l  ,_-‐ 、    __,,.. - 、       彡彡彳、.//  zipか・・・・
_______∧,、_‖ `之ヽ、, i l´ _,ィ辷ァ-、、   彡彡'r ノ/_ ______
 ̄ ̄ ̄ ̄ ̄ ̄ ̄'`'` ̄ 1     ̄フ/l l::. ヽこ~ ̄     彡彳~´/  ̄ ̄ ̄ ̄ ̄ ̄
                 ヽ   ´ :l .l:::.         彡ィ-‐'′
                ゝ、  / :.  :r-、        彡′
              / ィ:ヘ  `ヽ:__,ィ='´        彡;ヽ、
          _,,..-‐'7 /:::::::ヽ   _: :_    ヽ      ィ´.}::ヽ ヽ、
      _,-‐'´    {  ヽ:::::::::ヘ `'ー===ー-- '   /ノ /::::::ヘ, ヽー、

90 :
>>88
エラーチェックがそれじゃダメなんじゃないの?

91 :
変数名taiとかsiじゃ意味通じにくいから、ローマ字表記ならtaiju、shinchoとかの方がよくね?

92 :
>>90
scanf()を生で使うとどの途填まるから、エラーチェックなんて無意味だね。

93 :
すいまっせん。途中で書き込めなくなってしまいまして・・
つづきです。
printf(" \nあなたのローレル指数は%dです。\n",ro);


if (ro>=114&&ro<144){
printf(" \n全国的に見て、平均的な体系です。\n\n");}
if (ro>144&&ro<=154){printf(" \n全国的に見て、太り気味な体系です。\n\n"); }
if (ro>154){printf(" \n全国的に見て、太り過ぎな体系です。\n\n");}
if (ro<114&&ro>=104){printf(" \n全国的に見て、やせ気味な体系です\n\n");}
if (ro<104){printf(" \n全国的に見て、やせ過ぎな体系です。\n\n");} }



system("PAUSE");
return 0;
}
int r(int si,int tai){

int ro;

ro=100*tai/(si*0.1*si*0.1*0.1*si)*100;
return ro;}


94 :
int でうまく行くのかも知れないけど、よくわかんないや。

95 :
途中で0.1を掛けているから割り算もdoubleで行なわれるので一応問題にはならない。
しかし、100を掛けたり0.1を何度も掛けたり、なんだこの式。

96 :
>>95
いや〜
intって、3万まででしたよね。
だから、できないのかなぁ〜なんて思っただけです。
できるんですかね。

97 :
int が3万までって DOS 時代かよ。

98 :
int でやるんだったら、もうひとふんばりして unsigned char でやる手もあるのでは?

99 :
>>96
だから、0.1を掛けている段階で(intオンリーで計算しようと言う目論みは)台無しなんだってば。
どうせdoubleで計算するなら素直な式にしておくべき。

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 削除依頼
・ 次のスレ
【Lua】組み込み系言語総合 その5【Squirrel】
【分散型バージョン管理】 Mercurial 2【hg】
【GTK+開発環境】Anjuta【Linux c c++ js py 】
Cygwin + MinGW + GCC 相談室 Part 6