トップページ⇒tech
252コメント91KB

C言語を勉強しあおう

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2007/09/24(月) 11:12:55
教えあおう。
0002デフォルトの名無しさん2007/09/24(月) 11:19:44
コマンドライン引数を受けとるメインは
main(int argc, char *argv[])
とかいってみる
0003デフォルトの名無しさん2007/09/24(月) 11:20:46
すごい勉強になった。
0004デフォルトの名無しさん2007/09/24(月) 12:35:17
const char *argv[]のほうがよくね?
0005デフォルトの名無しさん2007/09/24(月) 12:36:41
ノーコメント
0006デフォルトの名無しさん2007/09/24(月) 14:50:22
すごい勉強にならなかった。
0007デフォルトの名無しさん2007/09/24(月) 15:02:59
ヘコんだ…orz
0008デフォルトの名無しさん2007/09/24(月) 15:58:37
const つけたら規格違反じゃん
0009デフォルトの名無しさん2007/09/24(月) 20:49:05
>>8
規格読んだこと無いのがバレバレだな
0010デフォルトの名無しさん2007/09/24(月) 21:19:30
++a = a++ + ++a;
って、どうなるの?
0011デフォルトの名無しさん2007/09/24(月) 21:23:35
さぁ
aの型と値による
0012デフォルトの名無しさん2007/09/24(月) 21:29:23
>>10
少なくとも鼻から悪魔が出ることは間違いない・
0013デフォルトの名無しさん2007/09/25(火) 11:07:40
>12
ちょwww間違いないのかw
0014デフォルトの名無しさん2007/09/25(火) 21:51:10
>>13
間違いというわけでなく結果が未定義なので処理系依存。
http://www.st.rim.or.jp/~phinloda/cqa/cqa7.html
0015デフォルトの名無しさん2007/09/26(水) 20:57:09
>14
いあいあ
「鼻から悪魔」ってのは「結果が未定義なので何が起きてもおかしくない」って意味だろ?
それを「鼻から悪魔が出ることは間違いない」って言っちゃうと
「間違いなく鼻から悪魔が出る」という意味になって「未定義」って意味でなくなっちゃうって意味で笑ったのだけど…
分かりにくかったらスマンカッタ
0016デフォルトの名無しさん2007/09/26(水) 21:09:34
いや、俺はわかったぞ。
0017デフォルトの名無しさん2007/09/26(水) 21:45:28
鼻から悪魔が出ることは間違いない=未定義であることが間違いない。
ってことか。
0018デフォルトの名無しさん2007/09/27(木) 00:43:55
>>15
>13を「間違いなのか」って読み間違えて「間違いじゃなくて未定義だよ」ってレスした。
>>14で言いたかったことは>>17みたいな感じ。
壊れた日本語で誤解させてスマソ。
0019デフォルトの名無しさん2007/10/08(月) 15:49:01
do{
 printf("%d\n", i);
 ji = getchar();
 i++;
}while(i <= 5);

このループを回すと、

a ←入力
1
2
d ←入力
3
4

というふうに勝手に二度回ってしまうんですけど、どうしてでしょうか?
コンパイラはgcc4.1.2なんですが。
0020デフォルトの名無しさん2007/10/08(月) 15:58:43
>>19全部を見せてくれないとなともいえねぇ
0021デフォルトの名無しさん2007/10/08(月) 16:09:19
>>19
全部を見るまでもない。getchar()は一文字入力関数なのに
aを入力した段階で'a'と'\n'の二文字を入力してしまっているので
二度目のループに到達してしまう。
回避するには、改行文字を読み捨てるか一行入力単位で処理するか。
0022デフォルトの名無しさん2007/10/08(月) 16:10:46
>なともいえねぇ
馬鹿丸出しだな。
0023デフォルトの名無しさん2007/10/08(月) 16:37:53
例えば
int a[5],x;があって
scanf("%d",&x);で123と入力したとき
a[0]に1 a[1]に2 a[2]に3
を入れるにはどうすればいいでしょうか

0024デフォルトの名無しさん2007/10/08(月) 16:47:39
>>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]);
0025デフォルトの名無しさん2007/10/08(月) 16:50:26
>>24さんありがとうございます
しかしそれだと不特定多数の場合使えないので
一般化してもらえないでしょうか?
0026デフォルトの名無しさん2007/10/08(月) 16:51:06
すみません聞き方が間違っていました
一般化したものも作ってもらえないでしょうか
0027デフォルトの名無しさん2007/10/08(月) 17:00:17
不特定多数って入力の桁数に依存しないって意味か?
とするなら下位はa[0]に入れるのが自然な気がするが、上位に入れるのでいいのか?
0028デフォルトの名無しさん2007/10/08(月) 17:04:07
さっきはint a[5]でしたが要素は
#define N 20などとしておきNを要素とします
入力はNを超えない程度にお願いします

良く分からないので上位下位どちらもお願いしてよろしいでしょうか
0029デフォルトの名無しさん2007/10/08(月) 17:05:08
>>25
ヒントだけでは何にもできないならこのスレにいる意味がないのでは?
少しくらいはない知恵を絞ってみてから他人を頼りなさいよ。
0030デフォルトの名無しさん2007/10/08(月) 17:06:42
つーか、>24の下の方法は充分一般化されていると思うのだが。
そもそも、一桁ずつ配列に入れたい理由が判らんからなんとも言えんが。
0031デフォルトの名無しさん2007/10/08(月) 17:08:33
>>24の下のほうでは入力される値が12345など桁が増えれば
それにしたがってコードも書き直さなければいけないので十分一般化されているとはいえません
0032デフォルトの名無しさん2007/10/08(月) 17:08:34
>>21
レスありがとうございます。
文字当てゲームを作りたかったのですが、
とりあえずの解決策として、以下のようにしてみました。
0033322007/10/08(月) 17:10:05
#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;
}

あまりスマートでない気がしますが、より良い方法はないでしょうか?
0034322007/10/08(月) 17:11:41
失礼しました。
テスト中のソースなので、余計なものが入ってます。
ご了承ください。
0035デフォルトの名無しさん2007/10/08(月) 17:18:41
gets(s);
n = strlen(s) - 1;
a = malloc(sizeof(int) * n);
for (i = 0; i < n; i++) *(a + i) = *(s + i) - '0';
free(a);
0036デフォルトの名無しさん2007/10/08(月) 17:27:01
なぜfor文に値を掛けてさらに代入しているんでしょうか?
0037デフォルトの名無しさん2007/10/08(月) 17:28:52
入力された時点で桁数が分からないから桁数分だけ処理をするため。
もうちっと、読解しようとする努力をしてみてもいいんじゃない?
0038デフォルトの名無しさん2007/10/08(月) 17:47:49
>>36
>29

つーか、forに値を掛けるって何だ?
0039デフォルトの名無しさん2007/10/08(月) 18:03:43
たぶん for (i = 0; i < n; i++) * (a + i) のことだと思われ

* は掛け算じゃない
0040デフォルトの名無しさん2007/10/08(月) 18:10:51
* (a + i)
↓
a[i]
0041デフォルトの名無しさん2007/10/09(火) 09:22:59
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
おまんこ
おまんこ
$
0042デフォルトの名無しさん2007/10/09(火) 09:30:37
>>41
カレントディレクトリをPATHに入れるのは危険なのでやめた方がいい。
それはいいとして、アナクロな書き方だなぁ。
0043デフォルトの名無しさん2007/10/09(火) 09:38:47
>>42
なるほど危険なことしてましたね。
それにしてもUNIXっていいですね。DOSなら暴走ですね
0044デフォルトの名無しさん2007/10/09(火) 09:46:00
大丈夫、UnixでなくともWindowsならそこそこ保護機能は働く。

PATHにカレントを含めると何が危険なのかというと、例えば/tmpにうっかり(或いは故意に)
lsと言う名前の実行ファイルを置いてしまっているときにcd /tmpしてlsしたときにはまるから。
また、既存プログラムとたまたま同じ名前のプログラムを作ったときにも同じことが言える。
例えば、calというプログラムをつくってしまい、./calではなくcalと実行すると/bin/calが動くわけで。
0045デフォルトの名無しさん2007/10/09(火) 22:24:37
#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);
}
0046ワカメ高専2007/11/27(火) 01:07:10
[-3,3] fx=1/(1+5x^2) 分点の数 10個(n=9)
これをラグランジュで求めて結果を出力するプログラムを作れって言われたけどさっぱりでしゅ(c c++)
0047デフォルトの名無しさん2007/11/27(火) 01:57:51
>>46
課題丸投げは宿題スレへ
http://pc11.2ch.net/test/read.cgi/tech/1195668114/
0048デフォルトの名無しさん2007/12/01(土) 19:33:28
C言語を始めてもうかれこれ1年くらい経ちますけど
FFみたいなソフトはどうやって作るんですか?

ゲーム作成を歌ってる書籍に載ってるゲームなんて
他人にゲームとして公開できるレベルではありませんよね
0049デフォルトの名無しさん2007/12/01(土) 19:41:08
>>48
まずはそのレベルでも達しないと、さらにその上には行けないと思うよ
0050デフォルトの名無しさん2007/12/01(土) 20:30:03
>>48
他人に後悔もできないレベルのゲームが作れない人間がいきなりいいものなんてなかなか作れないよ。
ゲームは画像処理やサウンド制御、データ作成、バランス調整、シナリオ作成、企画などなどプログラム技術
以外の知識や経験、センスも多く必要。
0051デフォルトの名無しさん2007/12/02(日) 02:13:17
ゲームって一人で作れるもんなのか?
低レベルの俺には想像できんな
0052デフォルトの名無しさん2007/12/03(月) 13:32:04
>>48
英語始めて一年くらい経ちますけどハリーポッターみたいな長編小説はどうやって書くんですか?
というくらい頓珍漢な質問だね。
0053デフォルトの名無しさん2007/12/03(月) 23:58:28
>>52
あんたアフォ?
0054デフォルトの名無しさん2007/12/04(火) 00:41:19
いや、適切な喩えだと思うぞ。
0055デフォルトの名無しさん2007/12/04(火) 02:20:08
微妙なところだと思う。言いたいことはわかるけど、それを英語初めて一年目の
人間に言われても「なんで?」ってなりそうでうまくたとえられていないような気がする。
0056デフォルトの名無しさん2007/12/04(火) 06:55:45
>>48
> ゲーム作成を歌ってる書籍に載ってるゲームなんて
> 他人にゲームとして公開できるレベルではありませんよね
何のゲームかは知らんが、君はその書籍に載っているゲーム
くらいは作れるのかい?
その書籍のソースをコピペするだけなら誰でも出来る。
要は、その書籍からゲームの作り方を学び取り
そこから初めて自分なりのゲームを考え始めるもんだろう
まぁC言語1年って事は、まだまだ先の話だろうけど。

0057デフォルトの名無しさん2007/12/04(火) 13:01:56
>>55
>それを英語初めて一年目の人間に言われても「なんで?」
まさにこれだろ。
>それをプログラム初めて一年目の人間に言われても「なんで?」
て事。
0058デフォルトの名無しさん2007/12/04(火) 21:34:50
ゲーム作成入門書籍(簡単なテトリス)
↓
プログラムのシステムの壁(FCのFF)
↓
越えられないボリュームの壁(SFCのFF)
↓
越えられないマルチメディアの壁(PSのFF)
↓
指をくわえて見てるだけの存在(PS2のFF)

無理です
0059デフォルトの名無しさん2007/12/06(木) 00:25:44
>>58
すごくわかりやすいwww
0060デフォルトの名無しさん2007/12/06(木) 12:43:47
システムとかは勉強すりゃいいが
ボリュームの壁はきびしい
0061デフォルトの名無しさん2007/12/06(木) 14:04:02
何十人-何百人ものスタッフが何ヶ月-何年もかけて作ってるわけだからなぁ。
0062デフォルトの名無しさん2007/12/06(木) 21:35:52
>>58
>プログラムのシステムの壁(FCのFF)
俺、もうこの時点でマルチメディアの壁が越えらんネ。
0063ケンイチ2007/12/06(木) 22:50:02
皆さん。
今、C言語の勉強をしているのですが、どうしても分からないので、分かる方がいましたら教えてもらいたいのですが・・・。
キーボードから文字を入力して(scanf)を使用して、1を押したら「+」が表示され、2を押したら「###」、3を押したら「*****」
と+、#、*を判断して押したキーボードにより結果が変わる仕組みなのですが、さっぱり分かりません。
例えば、3をおすと、
+
###
*****
5を押すと、
+
###
*****
+++++++
#########
と、言うプログラムなのですが・・・。
使用する関数は、if、for、while等です。
分かる方、ぜひ教えてください。
よろしくお願いします。
0064デフォルトの名無しさん2007/12/06(木) 22:54:01
何年か前に、同人製作板のゲーム関係のスレをチェックしてたことがあったけど、
「市販レベルのゲームをめざします。うちはスタッフにもそれなりのレベルを要求しますよ」
みたいな募集がいっぱいあったね。
募集してる当人たちは「総指揮」とか「ディレクター」とか「アドバイザー」とか、実作業は
しないであろう肩書きばっかりなの。
(ゲームデザイナーをやるって言うやつでさえマシに見えるレベル)

0065デフォルトの名無しさん2007/12/06(木) 23:04:05
今はそんな募集すらない気が
0066デフォルトの名無しさん2007/12/06(木) 23:40:03
リア厨の儚い夢だったってことさ
0067デフォルトの名無しさん2007/12/07(金) 00:05:34
>>61
何年もかけてるわけない

そんなにかかったらM取れねーよ
0068デフォルトの名無しさん2007/12/07(金) 09:33:49
>>63
そのぐらいの丸投げなら宿題スレの方が早いと思うぜ。
テンプレちゃんと守れば。
丸投げじゃないなら、何が分からんかもうちょい詳しく。

>>64
2chで総指揮なんて、実作業してるメンバーより大変そうなんだがな。
メンバーの作業速度すら分からないのに、
作業項目洗い出して、細分化して、担当振って、予定表出して、
予定とズレたら他の担当分と調整しながら修正修正修正。
そして遅れてるヤツのケツを叩く。

ん?なんか言葉にしたら簡単そうに見えるなww
0069デフォルトの名無しさん2007/12/07(金) 18:46:33
ろくに才能も知識も経験もないしこつこつ努力する気もないけど
自分の名前で何かすごいものを出してちやほやされたい

などという厨な望みが叶うほど現実世界は甘くない
ということを悟るのが早いか遅いかの違いだけ

漏れにはまだその願望が残っていることを認めよう
0070デフォルトの名無しさん2007/12/08(土) 01:37:31
>>68
実作業やるスタッフのほうが大変にきまってるだろ。

そもそも「全職種募集。おれ総指揮」なんて言ってるやつはなんにもできないから、そんなことを言っているん
であって、作業項目の洗い出しとかできるわけない。
(実際、ゲーム作ったことのやつばっかだったし)

さらに言えば、数人程度でやってる作業に、専業の監督なんていらないし。

0071デフォルトの名無しさん2007/12/08(土) 08:42:22
でも金持ちなら話は別だな
年数十億をポケットマネーで出せる奴なら人も集まるだろう
0072デフォルトの名無しさん2007/12/08(土) 15:16:24
>>70
あー、いや。
>そもそも「全職種募集。おれ総指揮」なんて言ってるやつは
>なんにもできないから、そんなことを言っているんであって
めっちゃ同意なんだけど。

言いたかったのは「ちゃんとやる総指揮って、んなに楽なもんじゃないぞ」ってことで。

実際シキリ役居なかったときに1回やったけど、もうやりたく無いわ。
単なるADVだったんだけど、何もノウハウ無いし
ネットで検索しながらADVゲームの作り方を1から勉強して、WBSおこして・・・。

遊びでマジメにやり過ぎたと後悔した。
ちなみにプログラマと兼任だった。
経験上数人でも専業監督は欲しい。
0073デフォルトの名無しさん2007/12/09(日) 15:15:52
なんかコピペであったな。失敗する同人ゲームとかなんとか。

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

とかなんとか。忘れたwテキトーに書いたんでみんなも忘れてくれ。
0074デフォルトの名無しさん2007/12/09(日) 16:17:04
それは大失敗だな
0075デフォルトの名無しさん2007/12/09(日) 22:31:14
板違いだカスども
0076デフォルトの名無しさん2007/12/11(火) 16:00:46
自動でゲームを作ってくれるプログラムをC言語で書け
0077デフォルトの名無しさん2007/12/20(木) 16:45:29
mpeg compass.jp
名古屋駅近辺でお話しましょう
0078デフォルトの名無しさん2008/01/07(月) 12:37:00
>67
スクエニ辺りは何年も掛かってそうだが
発売延期繰り返したからな、一時期w
0079デフォルトの名無しさん2008/01/21(月) 20:06:35
Cプログラマの為に、ポイントをまとめたドキュメントを販売しています。
プロのプログラマでもあまりにレベルが低い人が多すぎます。
そんな人に限って、自分のレベルの低さを自覚していない、、、
 本人は構わないかもしれませんが、その下についた新人プログラマは
たまったものではありません。(私が経験しました。)
 今になって分かりました。
彼らもまた、理解できていなかったのです。
 プログラミング言語の一番の習得の近道はきちんと理解している人にアドバイスをもらうこと。です。
私のC言語に取り組んだ7年間をすべてぶつけたつもりでテキストを作りました。
 私の会社の後輩からは、どんなテキストよりもわかりやすかった!や、
今まで教えてくれていた先輩や、テキストたちが、ちゃんと理解できていないことがわかりました。
と、嬉しいコメントをたくさんもらいました。
そしてなにより、彼らの社内での評価がとても高いということが、私の誇りです。
 興味がある方はどうか、下のサイトをみてみてください。
http://mori.eco.to/
0080デフォルトの名無しさん2008/01/21(月) 20:13:45
二日も連続でマルチとな・・・
誰か買ってやれよ、んでアップして突っ込み所みんなで探そうぜ。
俺は金ないからパスね。
0081デフォルトの名無しさん2008/01/21(月) 23:22:10
>>80
qsort()の実装にmalloc()の使用を認める程度だから買うだけ野暮でしょ。
0082デフォルトの名無しさん2008/01/22(火) 00:22:06
>>81
そこは目を疑ったな。
マージソートを想定してるのかね。
普通はクイックソート+O(N^2)ソート(要素数少ない時)な実装にするはずだが。
0083デフォルトの名無しさん2008/01/22(火) 02:49:52
こちとらメモリをGB単位で使うってのに、qsort()でmalloc()されたらたまったもんじゃねぇっての。
0084デフォルトの名無しさん2008/01/23(水) 00:13:38
printf("C言語の学習");
これを
printf("C言語の
学習");

のように改行しても大丈夫なようにする方法ってありますか?
0085デフォルトの名無しさん2008/01/23(水) 00:14:50
printf("C言語の\
学習");
0086デフォルトの名無しさん2008/01/23(水) 00:15:21
printf("C言語の"
    "学習");
0087デフォルトの名無しさん2008/01/24(木) 12:20:16
>> 85,86
ちょうどそのことに調べようと思ってた時だった。
サンキュ〜
0088デフォルトの名無しさん2008/03/23(日) 20:25:01
初めて作ったプログラムです。
どうですかね。うまくできてますかね。
#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);



0089デフォルトの名無しさん2008/03/23(日) 20:31:36
                l三`ー 、_;:;:;:;:;:;:j;:;:;:;:;:;:_;:;:;_;:��-三三三三三l
               l三  r=ミ''‐--‐';二,_ ̄    ,三三三彡彡l_   この感じ・・・・
              lミ′   ̄    ー-'"    '=ミニ彡彡/‐、ヽ
                  l;l  ,_-‐ 、    __,,.. - 、       彡彡彳、.//  zipか・・・・
_______∧,、_‖ `之ヽ、, i l´ _,ィ辷ァ-、、   彡彡'r ノ/_ ______
 ̄ ̄ ̄ ̄ ̄ ̄ ̄'`'` ̄ 1     ̄フ/l l::. ヽこ~ ̄     彡彳~´/  ̄ ̄ ̄ ̄ ̄ ̄
                 ヽ   ´ :l .l:::.         彡ィ-‐'′
                ゝ、  / :.  :r-、        彡′
              / ィ:ヘ  `ヽ:__,ィ='´        彡;ヽ、
          _,,..-‐'7 /:::::::ヽ   _: :_    ヽ      ィ´.}::ヽ ヽ、
      _,-‐'´    {  ヽ:::::::::ヘ `'ー===ー-- '   /ノ /::::::ヘ, ヽー、

0090デフォルトの名無しさん2008/03/23(日) 22:52:55
>>88
エラーチェックがそれじゃダメなんじゃないの?
0091デフォルトの名無しさん2008/03/24(月) 07:27:46
変数名taiとかsiじゃ意味通じにくいから、ローマ字表記ならtaiju、shinchoとかの方がよくね?
0092デフォルトの名無しさん2008/03/24(月) 11:17:56
>>90
scanf()を生で使うとどの途填まるから、エラーチェックなんて無意味だね。
0093882008/03/24(月) 16:23:46
すいまっせん。途中で書き込めなくなってしまいまして・・
つづきです。
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;}


0094デフォルトの名無しさん2008/03/24(月) 17:23:29
int でうまく行くのかも知れないけど、よくわかんないや。
0095デフォルトの名無しさん2008/03/24(月) 17:41:58
途中で0.1を掛けているから割り算もdoubleで行なわれるので一応問題にはならない。
しかし、100を掛けたり0.1を何度も掛けたり、なんだこの式。
0096882008/03/24(月) 18:53:46
>>95
いや〜
intって、3万まででしたよね。
だから、できないのかなぁ〜なんて思っただけです。

できるんですかね。
0097デフォルトの名無しさん2008/03/24(月) 19:10:03
int が3万までって DOS 時代かよ。
0098デフォルトの名無しさん2008/03/24(月) 19:29:59
int でやるんだったら、もうひとふんばりして unsigned char でやる手もあるのでは?
0099デフォルトの名無しさん2008/03/24(月) 19:33:41
>>96
だから、0.1を掛けている段階で(intオンリーで計算しようと言う目論みは)台無しなんだってば。
どうせdoubleで計算するなら素直な式にしておくべき。
0100882008/03/24(月) 20:34:13
>>97
なんか、工学社の
やさしいC++っつー本にはそう書いてあるんスよ。
0101デフォルトの名無しさん2008/03/24(月) 20:36:05
十何年前の本だ?
0102デフォルトの名無しさん2008/03/25(火) 01:40:09
やさしいC++ = C
ってなんか微妙な表現だな。
どーせ、構造体に関数が書けるとか書いてあるのだろう。
0103デフォルトの名無しさん2008/03/25(火) 07:28:50
まあ、どんな環境でも 32767 までは保証している・・・というのなら正しいけどな。
本を持ってないからどういう記述してるのかは知らんが。
0104882008/03/25(火) 10:27:17
>>101
2003年の本ス。
付録のコンパイラが悪いんかもしらん。
0105デフォルトの名無しさん2008/03/25(火) 12:13:26
試食版はもう学習用途で配布するのはやめたほうがいいと思う
0106デフォルトの名無しさん2008/03/25(火) 17:58:11
ああ、あのコンパイラか。
それなら確かに int は 32767 までだな・・・。
0107デフォルトの名無しさん2008/03/25(火) 23:30:16
コンパイラの問題っていうより本の問題だろ。
コンパイラ換えたら今度はintって4バイト固定だと思うんじゃね?
0108デフォルトの名無しさん2008/04/02(水) 20:49:06
<limits.h>で確認すりゃいいんじゃね
0109デフォルトの名無しさん2008/04/02(水) 22:54:15
規格は32767までなんだからいいんでねぇの
0110デフォルトの名無しさん2008/04/02(水) 22:55:09
c言語で、ニブルを、扱いたいですが、どうしたら、うまく、いきますか、?
0111デフォルトの名無しさん2008/04/03(木) 00:23:48
>>110
ニブルってググったら4bitデータだったみたいだけど、これでいいのかな?
別にintの下4bit使えばいいじゃんとか思うけど、それが嫌ならビットフィールドかな。
0112デフォルトの名無しさん2008/04/03(木) 07:06:59
>>109
32767 は最大値の下限であって・・・
0113デフォルトの名無しさん2008/04/03(木) 08:27:27
>>112
組み込みならそんなの当たり前なのであって・・・
0114デフォルトの名無しさん2008/04/03(木) 18:23:00
教科書なら 「32767 にしかならない」 ような表現は避けるべきだろ。
0115デフォルトの名無しさん2008/04/03(木) 23:10:04
「規格上の最低ラインはこうだが現実としてはこうである」って説明が欲しいね。
0116デフォルトの名無しさん2008/11/27(木) 22:53:21
0117氷魚2009/01/22(木) 02:45:33
#ifdef H
#define G Baka()
#else
#define (ここにGは何もしないというのを入れたい)
#endif
↑
もう長く使ってなかったから忘れたんですが
何入れたらいいんでしょうか。
0118デフォルトの名無しさん2009/01/22(木) 06:23:44
do {} while (0)
0119氷魚2009/01/22(木) 06:31:04
>>118
ありがとうございます。
0120デフォルトの名無しさん2009/01/22(木) 22:29:28
((void)0) だろ。普通。
0121デフォルトの名無しさん2009/02/11(水) 16:28:11
getcとかの標準入力ってバッファが空の時だけ入力を待つんですか?
0122デフォルトの名無しさん2009/02/11(水) 21:06:24
はい。
0123デフォルトの名無しさん2009/02/12(木) 02:44:06
((void)0)って何だよw
0124デフォルトの名無しさん2009/02/12(木) 13:37:44
空文ではなく、何か式を書かないといけないけど何もすることが無いときに使う。
0125デフォルトの名無しさん2009/02/13(金) 23:47:48
void式も知らんようでは素人と言わざるを得ない。
((void)0)にしておくとコンマ演算子が使えるというメリットがある。
0126デフォルトの名無しさん2009/02/13(金) 23:56:58
そりゃ素人のスレだし・・・
0127よろしければ教えてください。2009/03/05(木) 15:26:38
何がまずいのか分かりません。仕様を分かってないだけなんだと思うのですが、
どこの部分の仕様を勉強すればいいでしょう?教えてください。

// 参考:
// http://homepage2.nifty.com/c_lang/
// 猫でもわかるプログラミング  第28章 構造体とポインタ ・ 第33章 メモリの動的確保
#include <stdio.h>
#include <stdlib.h>
struct tpl_address_list { //struct template
  long* ptr;
  long num;
  long ix;
};
void allocst(struct tpl_address_list **pt, long n) {
  long i, j, k;
  struct tpl_address_list *pl, *pm;
  *pt = (struct tpl_address_list *)malloc(n * sizeof(struct tpl_address_list *)); // 確保
  printf("%ld malloc\n", *pt);  // dbg
  if (*pt == NULL) {
    printf("allocation failed.\n");
    return;
  }
  for (i = 0; i < n; i++) {    // 初期化。値はてきとーです
    (*(*pt+i)).ptr = NULL + i;
    (*(*pt+i)).num = 0 + 10*i;
    (*(*pt+i)).ix = 0 + 100*i;
  }
  pl = *pt;
  pm = *pt;
  中略(printfとfor文だけ)
return;
} 以下略。
0128デフォルトの名無しさん2009/03/05(木) 16:55:36
エラー内容も貼れ
0129デフォルトの名無しさん2009/03/05(木) 20:41:49
>(*(*pt+i)).ptr = NULL + i;
が怪しい。
0130127です。エラーの状況です。お願いします。2009/03/06(金) 01:47:15
allocst関数に初期化部分を加えたらexeが落ちたが何のエラーも出ず。
allocst関数よりも後の、mallocの直前までは動いてました。nの値を変えると落ちたり最後までいったり。
以下n=8のときの例。構造体は以下のアドレスになりました。
  i   .ptr    .num    .ix
a 0 4077688 4077692 4077696
a 1 4077700 4077704 4077708
a 2 4077712 4077716 4077720
a 3 4077724 4077728 4077732
a 4 4077736 4077740 4077744
a 5 4077748 4077752 4077756
a 6 4077760 4077764 4077768
a 7 4077772 4077776 4077780

初期化のfor文直後に読み出した、上記アドレスの中身がこれ。( i >= 6 は略。設定値通りでした)
  i     .ptr    .num     .ix
c 0     0      0      0
c 1     1  =@  10   =@ 100
c 2     2     20     200
c 3     3  538976288  909588792
c 4 540162359   40     400
c 5     5     50     500

構造体の中身をprintf文で見たところ、書き換わっていってます。(列が多いのは、書式がおかしいのかと思っていろいろ試したため)
  i  &pl[i].ix  (*(*pt+i)).ix (*(pl+i)).ix (*(pm++)).ix  pl[i].ix
c 0  4077696     0      0      0      0
c 1  4077708    100    100     100     100
c 2  4077720    200    200     200     200
c 3  4077732 926363700 859190070 809054521 875900985
c 4  4077744 729051178 729051178 729051178 729051178
c 5  4077756 538976288 538976288 538976288 538976288
c 6  4077768 690563883 690563883 690563883 690563883
c 7  4077780 1764646249 1764646249 1764646249 1764646249
0131デフォルトの名無しさん2009/03/06(金) 01:59:01
>*pt = (struct tpl_address_list *)malloc(n * sizeof(struct tpl_address_list *)); // 確保
何を確保してるか説明してみろw
01321272009/03/06(金) 02:14:03
構造体配列n個分の領域(の先頭アドレス)?
0133デフォルトの名無しさん2009/03/06(金) 02:23:17
例えば、intをn個領域確保するには
int ip, n;
p = malloc(n * sizeof(int));
するだろ?
じゃあ構造体struct tpl_address_listをn個領域確保するにはどう書くべきだ?
0134デフォルトの名無しさん2009/03/06(金) 02:24:08
ミスった。
ipじゃなくて*pな
01351272009/03/06(金) 03:42:15
ぬふぁ!
〜malloc( n * sizeof(struct tpl_address_list) )ですね。

ポインタのポインタが理解できなくて悩んでたときに
よく考えずに * を増やして回ったんです。
結果、確保した領域の外まで書き込んでいたということですか。

<ポインタのポインタ使うのか〜。mainで渡したポインタのアドレスが
**pt になると。すると、*pt の意味は、、、、あれ、どうなるの??
うーん、まぁ配列はポインタだからsizeofに * 要るよね。
この例でもついてるし。(<-たぶんポインタの配列の確保の例)>
といった具合に混乱しておりました。え?メシマズスレにいそうだって?

おかげさまで無事動くようになりました。皆々様ありがとうございました。
ていうかくだらないミスでごめんなさい
0136デフォルトの名無しさん2009/05/05(火) 18:40:08
Windowsで、コマンドプロンプトが消えないように、
system("pause");
で停止しておく方法は有名だと思います。
pauseコマンドを使用せずに、C言語の関数だけで記述できないでしょうか?
ちなみに、
getchar()
だと、[ENTER]を押さないと次にすすまないのが難点です。
0137デフォルトの名無しさん2009/05/05(火) 20:59:10
>>136
ENTERを叩かないと次に進まないのはPAUSEも同じだと思うのだが。
0138デフォルトの名無しさん2009/05/05(火) 22:53:45
Sleep(1000);で1秒止めるとかの意味?
01391362009/05/07(木) 14:49:59
137,138>
私の質問の内容があいまいでした。申し訳ございません。

PAUSEだと、ENTERだけでなく、任意のキーで次に進めたと思います。

任意のキーで次に進みたいのですが?
0140デフォルトの名無しさん2009/05/07(木) 15:28:00
>>139
標準入力は、通常の端末エミュレータでは改行文字の入力で有効になるから、任意の文字一文字で反応させるのは無理。
つまり、標準関数だけではできないのでなんらかの環境依存する手段が必要になる。
0141デフォルトの名無しさん2009/05/09(土) 16:21:49
>なんらかの環境依存

>Windowsで、コマンドプロンプトが消えないように

...まぁそれはともかく、コンパイラに何を使っているかに夜けど getch() とか使え内科医?
0142デフォルトの名無しさん2009/05/12(火) 09:58:50
>>141
>136は、こう書いている。
>C言語の関数だけで記述できないでしょうか?
これを>140はこう判断しただけだろ。
>標準関数だけではできない
そしてあんたは、getch()を「C言語の関数」と判断したわけだ。
0143デフォルトの名無しさん2010/01/03(日) 01:55:37
はじめまして。
下記問題で質問があります。
http://www.rs.kagu.tus.ac.jp/infoserv/j-siken/H7b2/g11.html

下から16行目
●if((nen==yyyy)&& (strncmp( shina,scode,8 ) == 0))

ifの条件の後に、実行文がありませんが、何を意味しているのでしょうか?

また、下から7行目
●kstack[wi][wj]/1000
という文?がありますが、
下から19行目の
●for (wi = 0; wi < TMAX; wi++ )
for (wj = 0; wi < HMAX;wj++ ) kstack[wi][wj] = 0;
で、全て「0」を代入しているのに、どうして1000で割れるのでしょうか?

非常に初歩的な質問で、単なる私のとんでもない勘違いかもしれませんが、
よろしくお願いします。
0144デフォルトの名無しさん2010/01/03(日) 12:25:40
>>143
問題が間違ってるな。if文の次の行が抜けてる。

ググったら、こんなん出てきた。
ttp://club.pep.ne.jp/~yama.ok/lang/H7Atm2.html
01451432010/01/03(日) 13:19:19
>>144

ありがとうございます!!!!!!!!!!
この問題で年末からずっと悩んで?いました!!!!
本当にありがとうございます!!!!!!
0146デフォルトの名無しさん2010/01/06(水) 14:26:57
>>143
まさかとは思うが、0を1000で割れないなんてすっとこどっこいなこと言わないよね?
>143の問題のままでは意味がないのだけれど、>144を見ると問題の消えた一行で
きちんと値を代入しているからちゃんと意味もある。

って、よくよく見たら>144でも本文の方は代入してないよ。

やっぱり情報処理技術者試験を受けようとするのは馬鹿ばっかりだ。
0147デフォルトの名無しさん2010/01/06(水) 14:36:57
>本ホームページにリンクを教育的観点から張ることは自由ですが,営利目的にリンクを張ることは厳禁とする。
>リンクを張られるときにはご一報ください。
>違反行為が発見されたときには当該国の法律にもとずき相応の処置を取らせていただきます。
確かにすげぇ馬鹿だ。
0148デフォルトの名無しさん2010/01/08(金) 00:41:28
>>146
は?何言っての?
>>143と>>144の会話の意味理解してる?
C言語以前の問題。知能指数低そうだね
0149デフォルトの名無しさん2010/01/08(金) 00:44:03
Cのプリプロセッサ作ってやたら遅いと思ったらpragma once実装してなかったわろす
0150デフォルトの名無しさん2010/01/08(金) 00:56:58
プログラミング言語Cで

int strlen(char *s)
{
char *p = s;
while (*p != '¥0') {
p++;
}
return p - s;
}

ってのがあったんだけど、sってのは配列sの先頭のアドレスですよね
*pってのはアドレスがpのchar型を指してるポインタだと思うんですが、
なんで代入するときは *p = *s; とか p = s; じゃないんですか?
*pがsの先端のアドレスを指すポインタだと考えても、次の行で*pが実際の配列の中身を比較してるのが理解できないです。
誰か考え方教えてください。
0151デフォルトの名無しさん2010/01/08(金) 01:04:23
何がわからないのかわからないけど

char* p;
p=s;
と
char *p=s;
は同じ効果

*pはcharの実態 p[0] と同じ効果

で謎は解決するだろうか
0152デフォルトの名無しさん2010/01/08(金) 01:10:51
変数宣言時の初期化って式の見方が違うんですね。
ありがとうございます。
0153デフォルトの名無しさん2010/01/09(土) 14:52:41
choahitoutou89387998u9ifiotuqio
0154デフォルトの名無しさん2010/01/13(水) 21:39:46
>>146
>って、よくよく見たら>144でも本文の方は代入してないよ。
してないね。>>145 は何を納得したんだろう。

>やっぱり情報処理技術者試験を受けようとするのは馬鹿ばっかりだ。
件の if にある無駄な括弧とか、スタイルの不統一とか
(>>144 に至っては所謂全角文字すら使用している)
下手糞っぽい雰囲気を醸し出してる。
0155デフォルトの名無しさん2010/01/14(木) 14:15:13
>>154

>>144が示したサイトの誤字ぐらいは、すぐに「これは打ち間違いだ」と分かる。
分からないの?
>>143が示したサイトが間違っていたのだから、「これも間違いかな?」と直ぐに普通気がつくはくはず。
分からなかったのか。>>154は。

>>144の示したサイトの間違いっているところは、>>143の示したサイトでは間違っていない。
そんなことも気がつかないの?

そもそも>>146は話の本質に関係ないことを得意げに書いている。
マジで知能指数低い。話の流れが全く理解できていない。

って言うか、問題文が論理的に有りえても、
そんなの試験問題に出るわけないじゃん。
そこまで考えが及ばないの?
0156デフォルトの名無しさん2010/01/14(木) 14:36:10
だな。
ここで重要なのは
最初の問題で「一行丸まる抜けていた・・・」ということ。
0157デフォルトの名無しさん2010/01/14(木) 15:07:35
もう既に直っているようだけどね。
0158デフォルトの名無しさん2010/01/14(木) 15:20:30
ここ見て修正したんなら155が本人くせーなw
0159デフォルトの名無しさん2010/01/14(木) 16:02:44
っていうか直すなら、ちゃんと直せよ。まだ間違ってるぞ。
0160デフォルトの名無しさん2010/01/15(金) 07:04:54
>>146 >>154

このふたりは何を言っているのだろうか?
最初のサイトで一行丸まる抜けていたことが分かったことにより、
他の小さい間違いは単に「打ち間違いだな」とわかる。
他の者も皆わかって書き込みしている。

それがわからないようなら、本当にC言語知っているのか?アルゴリズムを知っているのか?
それに>>146も>>154も、そもそも論点がずれている。
0161デフォルトの名無しさん2010/01/15(金) 07:55:42
だから>>146も>>154も
抜けていた一行が最初からあったとしても
大雑把なプログラムの流れがわからないんだよ。
だからあんな発言が出る。
0162デフォルトの名無しさん2010/02/14(日) 16:38:06
fread()関数とfwrite()関数がわかりません。
0163デフォルトの名無しさん2010/02/14(日) 16:49:14
ファイルを読み書きする関数です。
0164デフォルトの名無しさん2010/02/14(日) 16:55:23
>>162
普通バイナリモードでopenしてランダムアクセスに使う
0165デフォルトの名無しさん2010/03/01(月) 10:28:21
>>164
敢えて書こう。

バイナリモードでfopenな。
0166デフォルトの名無しさん2010/03/11(木) 18:51:45
別ウインドウで画像を表示させるにはどうすればいいんですか?
0167デフォルトの名無しさん2010/03/11(木) 21:40:37
>>166
別ウインドウってことは、すでにウインドウのオープンはできているのか。
0168デフォルトの名無しさん2010/06/21(月) 19:51:43
宿題スレの問題ですが、ボリュームが大きくレス数が増えているので
いったんこちらに移動します

961 :デフォルトの名無しさん :2010/06/18(金) 01:29:00
[1]授業単元:暗号理論(大学専門コース)
[2]問題文(含コード&リンク)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10714.lzh
[3]環境
[3-1] OS:C/C++処理系があれば何でも可
[3-2] コンパイラ:gccに近い処理系が理想
[3-3] 言語:C/C++どちらでも可
[4] 9/15迄(夏休み終了まで)
[5] 難しいそうです。無理しないほうがいいそうです。ただ出来たら
テストの点に無関係に単位をくれるそうです
0169デフォルトの名無しさん2010/06/21(月) 19:56:07
>>168
に添付されているサンプルコードを復元した状態はこれ

41 名前:デフォルトの名無しさん[sage] 投稿日:2010/06/18(金) 20:57:47
前にエラー文字列で検索したら、どうもこれに近い。
ttp://www.google.com/codesearch/p#8lz4Axekcxw/fs/buffer.c

あと、prob.txtの引数の間のtabはなんなんだろう。
ソースコードを整形したのかな。
0170デフォルトの名無しさん2010/06/21(月) 20:02:15
復元候補を全検索した場合には幾何級数的に走査量が増えるため
なんらかの方法で絞込みを行う必要がある
(一つの単語あたり候補が 1000 あるとき、仮決定しながら次を探索できるのはせいぜい 3 単語が限界)
0171デフォルトの名無しさん2010/06/21(月) 20:30:09
コメントおよび文字列リテラル未対応の簡易エンコーダ
#include<stdio.h>
static unsigned char NextTable[256];
void init(void){
int i;
for(i=0;i<256;i++) NextTable[i]=i;
for(i='a';i<'z';i++) NextTable[i]=i+1;
NextTable[i]='A';
for(i='A';i<'Z';i++) NextTable[i]=i+1;
NextTable[i]='a';
for(i='0';i<'9';i++) NextTable[i]=i+1;
NextTable[i]='0';
}
int encode(unsigned char table[256], int c){
int ret;
ret=table[c];
table[c]=NextTable[ret];
return ret;
}
int main(void){
unsigned char table[256];
int i, c;
init();
for(i=0;i<256;i++) table[i]=i;
while((c=getchar())!=EOF){
if(c=='/') putchar(encode(table, c=getchar()));
putchar(encode(table, c));
}
return 0;
}
0172デフォルトの名無しさん2010/06/21(月) 20:33:14
Encrypt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10718.c
0173デフォルトの名無しさん2010/06/21(月) 20:44:42
Decrypt
void CSyukudaiEncDlg::scroll(int id)
{
  CEdit * pEdit = (CEdit *)GetDlgItem(id);
  int line = pedt->GetLineCount();
  int col = pEdit->LineLength(pEdit->LineIndex(line - 1)) - 40;
  pEdit->LineScroll(line, col);
}
0174デフォルトの名無しさん2011/01/25(火) 21:07:41
日本国際賞
「米ベル研究所特別名誉技師のデニス・リッチー博士(69)と米グーグル社特別技師のケン・トンプソン博士(67)」

毎日jp - 毎日新聞のニュース・情報サイト
http://mainichi.jp/select/science/news/m20110126k0000m040012000c.html
0175デフォルトの名無しさん2011/05/06(金) 20:22:03.12
なんかC言語と離れるかもですが
バイナリファイルの扱い方がいまいちわかりません。
.bmpとかは画像を保存する形式とかなんとか聞いたのですが、
ただ単に数字(数値?)の羅列を記録するには.csvとか.txtじゃないとダメですかね?
0176デフォルトの名無しさん2011/05/06(金) 20:33:18.50
なんか、スレタイとか、>>1 を見ると

あほう、あほう、かと読める。
0177デフォルトの名無しさん2011/05/06(金) 20:40:58.96
>>175
ただ単に数値の羅列を記録するのにバイナリで保存しても別にかまわない
画像はただ単に数値の羅列を記録するだけじゃなくてサイズとか色数とかいろいろ付加情報が必要だから
bmpとかいろいろ形式が定められてるだけ
0178デフォルトの名無しさん2011/05/06(金) 20:50:14.94
ん?
えーっと・・・
じゃあただの数値の羅列を記録するファイル形式ってのは・・・?
.bmpじゃダメだよね?
0179デフォルトの名無しさん2011/05/06(金) 20:51:16.90
形式なんて決めずともただ単に数値の羅列を書き込んでいけばいいではないか
0180デフォルトの名無しさん2011/05/06(金) 20:52:48.76
ファイル名の後に拡張子は無しでいいんですか?
0181デフォルトの名無しさん2011/05/06(金) 20:58:08.86
付けたければ付けてもいいし無しでもいいし
すでにある拡張子 (.txt とか .csv とか .bmp とか) と同じにするとまぎらわしくなるけど、
まぎらわしいという以外に何か問題があるわけでもないので、好きにしてよい
形式不明の拡張子として .dat とかが使われることもある
0182デフォルトの名無しさん2011/05/06(金) 20:58:42.50
無しでいいんですね。
なんかくどくてすいません
ありがとうございました。
0183デフォルトの名無しさん2011/05/14(土) 03:02:26.85
stringについて質問。
"string"と[string]という配列は同じものと考えておk?
0184デフォルトの名無しさん2011/05/14(土) 10:05:01.48
[string] ってなんですか
C言語にそんな文法ありませんよ
0185デフォルトの名無しさん2011/05/14(土) 15:48:31.07
悪かった。
[0]s[1]t[2]r[3]i[4]n[5]g
という無名の配列と同じものと考えて良いのかな?
0186デフォルトの名無しさん2011/05/14(土) 16:22:58.40
よくない
最後に '\0' も付く
長さ 7 の char 型の無名の配列
0187uy2011/05/15(日) 00:42:43.46
#include <stdio.h>

void main(){
char a[] = "test" ;
char b[4];
b[0] = 'a';
b[1] = 'i';
b[2] = 'u';
b[3] = 'e';
// b[3] = '\0';

printf("a ... %s \n" , a );
printf("b ... %s \n" , b );
}

勝手に \0 はつくから、そんなに気にするレベルじゃない
もし、 この b みたいに 一文字ずつ、文字を入れていくような処理を行う場合は、
最後に \0 をいれないと意味不明なところを読み始めるレベル
0188デフォルトの名無しさん2011/05/16(月) 10:31:19.45
×意味不明なところを読み始めるレベル
○何が起きてもおかしくないレベル
まぁ、これならありだけど。
printf("b:%.4s\n", b);
0189uy2011/05/17(火) 00:03:17.64
意味不明なところを読み始めるレベル == 何が起きてもおかしくないレベル

どう考えても同じ意味です本当にありがとうございました
お前友達いないだろ
0190デフォルトの名無しさん2011/05/17(火) 13:21:59.44
>>189
自己紹介乙
0191uy2011/05/17(火) 17:49:26.81
なんかお前

#define NULL -1

とかやってそう

日本語の細かい定義までも気にするのは、PGの職業病  病院いけ
0192デフォルトの名無しさん2011/05/20(金) 17:37:35.77
C...難し過ぎ これで稼げる人 尊敬するわ!

typedef struct _COBJ {
char classname[32];
.
.
void (*msgproc)(int msgid , void * param);
.
.
etc.....
} _COBJ;

なんてクラス化基底ベースを作ってOOPやってんだけど難し過ぎる... UMLがまとまらん 特にクラスマネージャーの位置 orz
ARMのヒープ量は充分なんだけど 頭がパンク...
0193デフォルトの名無しさん2011/05/21(土) 05:45:00.71
>>192
素直にC++でやれば?
>>191
言葉の定義の問題じゃないよ。
>188の指摘は次の例と同じこと。
×うゆが暴れるスレ
○うゆも暴れるスレ
0194デフォルトの名無しさん2011/05/22(日) 12:29:37.54
誰かワイド文字の使い方」を詳しく教えてくれ!
ワイド文字のstrcpyとかって無いの?
こないだワイド文字入りのソース作ったら
いくらやってもコンパイルエラーで・・・
0195デフォルトの名無しさん2011/05/22(日) 13:55:18.04
wcscpyとかwcscatとかあるよ
0196デフォルトの名無しさん2011/05/22(日) 17:33:04.89
unknown escape sequence: '\x8e'
コンパイルエラーででてきた。
コレいったいなんでしょか?
0197デフォルトの名無しさん2011/05/22(日) 23:42:50.88
>>196
エディタの設定を見直して、所謂全角空白は目に見えるようにしよう。
0198デフォルトの名無しさん2011/05/22(日) 23:48:44.45
>>196
シーじゃなくてパルルだけど、ここら辺?

http://www.kent-web.com/pubc/jcode/
http://homepage2.nifty.com/k_maeda/code/perl.html
0199デフォルトの名無しさん2011/05/23(月) 21:16:06.39
助けて。
普通に考えても絶対飛ばされないような一行が動作させると飛ぶ。
こんなのありえるの?
これって自分が悪いの?コンパイラが悪いの?
参考までに
     (省略)
fgetws(wsi,800,fc);
while(1){
fgetws(wsg,100,stdin); ←ここ
swprintf(wsh,L"%s\n",wsg);
     (省略)

ちなみに二行連続で同じ文書いたら一行だけ動いた。
0200デフォルトの名無しさん2011/05/23(月) 22:28:47.65
>>199
99.99% お前が悪い

確保して無い領域に変なもん書き込んだんだろ
0201デフォルトの名無しさん2011/05/24(火) 18:41:53.64
>>200
領域は宣言の時点で
wchar_t wsg[200]
ってちゃんとなってました。

もう小生の知能じゃ解析不能だったので
二行書いて一行動けばそれでヨシとしました。
とにかくありがとうございました。
0202デフォルトの名無しさん2011/05/24(火) 18:58:44.56
と思ったら一行しか動かないのはループ一回目だけだ
二回目以降はちゃんと二行動く(苦笑)
それならニ回目以降一行飛ばそうと思ったら
一回目に二行とも飛ばされた(苦笑)
わけがわからないwww
0203デフォルトの名無しさん2011/05/24(火) 19:03:13.04
>>202について
>>202はこちらのソースのミスだった。
書き直したらしっかり動いた。
騒がせてすまない。
反省している。
0204デフォルトの名無しさん2011/05/24(火) 19:37:52.96
乱数とってるはずなのに
動かすごとに同じ順番で同じ数字が出てくる。
どうすれば・・・??
0205デフォルトの名無しさん2011/05/24(火) 19:45:22.89
はい、関数ポインタとコールバック関数について勉強しましょうね。








真面目に勉強しろよ。おまえら(怒)
0206デフォルトの名無しさん2011/05/24(火) 19:46:22.19
>>204
srand(time(NULL));
0207デフォルトの名無しさん2011/05/25(水) 15:11:04.41
教えて頂けますか?
for文を使って
1〜100まで足した合計
1〜100までの偶数を足した合計
1〜100までの奇数を足した合計
をfor文ひとつを使ってやれる方法を教えて頂けますか?
宜しくお願いします。
0208デフォルトの名無しさん2011/05/25(水) 21:12:07.98
>>207
マルチ乙
0209デフォルトの名無しさん2011/05/26(木) 01:51:07.11
#include <stdio.h>

int main() {
 int sum=0, even=0, odd=0;
 int i;
 for (i=1; i<=100; i++) {
  sum += i;
  if (i % 2 == 0) {
   even += i;
  } else {
   odd += i;
  }
 }
 printf ("sum=%d, even=%d, odd=%d\n", sum, even, odd);

 return 0;
}
0210デフォルトの名無しさん2011/05/27(金) 17:58:25.38
#include <stdio.h>

int main(){
int sum, even, odd;
for(sum=(100*(100+1))/2,even=((100+1)/2)*((100+1)/2),odd=100/2*(100/2+1);0;);
printf ("sum=%d, even=%d, odd=%d\n", sum, even, odd);
return 0;
}
0211デフォルトの名無しさん2011/05/28(土) 03:47:31.62
for文使う意味があるのか?
0212デフォルトの名無しさん2011/05/28(土) 08:56:27.59
元質が使うことを条件にしていた。
0213デフォルトの名無しさん2011/05/28(土) 21:21:21.80
for(DoSomething(); ; );

これで大抵の事は for 文でできる
0214デフォルトの名無しさん2011/05/29(日) 20:32:37.82
初心者だけどfor文とかif文とかwhile文とか分からなくて挫折しそう。
0215デフォルトの名無しさん2011/05/30(月) 11:23:03.93
>>214
全部条件式じゃないか。
気のきいた解説書1冊ですぐ判る。
0216デフォルトの名無しさん2011/05/30(月) 23:16:29.51
>>215
猫でも分かる の本でやってるんだけど
よく分からん。
自分でも何がいけないか分からないし。
0217デフォルトの名無しさん2011/05/31(火) 10:16:30.84
>>216
その本の内容は知らぬが
if が判らないってことは i < 10 とかが判らないってことか?
0218 忍法帖【Lv=2,xxxP】 2011/05/31(火) 11:15:38.00
>>216
猫なんか使うから……
0219 忍法帖【Lv=1,xxxP】 2011/06/02(木) 01:36:45.70
>>217
なんというかifならif(条件)までは分かる。
forならfor(条件)。
ほんと何て言えばいいか分からんけど
全体的にゴチャゴチャしてくるにつれて分からなくなってくるというか・・・。
本の練習問題に「1+2+3+・・・+100」の値を求めるプログラムを、
for文を利用して作ってくださいみたいのがあったんだけど
for(i=1; i<100; i++){ までは書けてそれ以上ができなかった。
あー長くてすまん。とにかくもう分からん。

>>218
猫ってそんなゴミクズなの?
調べてみて結構評価高かったら買ったんだが・・・
0220デフォルトの名無しさん2011/06/02(木) 01:45:50.20
>>219
>「1+2+3+・・・+100」の値を求めるプログラム

一行で書けると思ったら、気分的に楽なんじゃないかな

int main() { int r = 0; for(int i = 0; i <= 100; i++) r += i; printf("%d¥n", r); }

"for(i=1; i<100; i++){" だと一回足りないナリ
0221 忍法帖【Lv=1,xxxP】 2011/06/02(木) 11:44:51.95
>>220
俺は分かり易くこう書いてみる(関数部分は抜き)

r = 0 ;
for( i = 1 ; i <= 100 ; i ++ )
{
  r = r + i ;
}
printf( "%d¥n" , r ) ;
0222デフォルトの名無しさん2011/07/24(日) 01:01:51.58
return 5050;
0223デフォルトの名無しさん2011/07/24(日) 02:34:54.90
return (100 + 1) * 100 / 2;
0224デフォルトの名無しさん2011/08/26(金) 13:56:34.91
うむ。
0225デフォルトの名無しさん2011/08/29(月) 06:20:11.55
スレ新参です、よろしくお願いします

下記の構文を見つけたのですがどういう意味でしょうか?
手持ちのC言語本には目次にすらないのです
よろしくお願いします

__sfr __at (0x0C) T0L; /* Timer channel 0L */

コメントからタイマチャンネル0Lの何からしいですが、
この記述は何を意味しているのでしょうか?
またこれを利用している側は「T0L=100;」の様に変数扱いをしています
__sfr型という事ですか?いろいろ質問ばかりですみません
0226デフォルトの名無しさん2011/08/29(月) 10:12:17.81
アセンブラ言語で書いてある
0227デフォルトの名無しさん2011/08/29(月) 10:29:28.10
>>225
マイコンの型番を書きましょう
周辺機能の番地か何かを指す書き方のような?
02282252011/08/30(火) 21:48:45.26
質問の意図が通じなかったかな…残念です

直感的にはメモリマップドI/Oを名前付けするのかな?と思ったけど
型とかアドレスの意識をどこで結び付けているのか?知りたかった
多分__at (0x0C)へのI/OをT0Lと言う名前で出来るようになる?のかと思ったが__sfrって?って事で

20年以上前、クロスコンパイラ開発してた頃K&Rの仕様書では習わなかった
あの当時だと「(unsigned char *)(0x0C) = 0x00;」みたいな書き方をしてと現場には話した気がする
今はもっと良い(スマートな)書き方があるのか?と期待しての質問でした

久しぶりのC言語だったので立ち寄ってみました
場違いなのかも知れないのでこれにて
申し訳ありませんでした
0229デフォルトの名無しさん2011/09/19(月) 23:22:03.92
自動変数のbyte配列の最大サイズはどこに定義されていますか?
(例えば malloc()で割り当てられる連続長?の最大サイズは 物理メモリ量とOSの実装 に依存しながらも
 stdint.h に SIZE_MAX として定義されてますが、こんな感じでどこかに)
64bit linuxで下記のようなコードを試しに書いたら core dumped しました

getrlimit(RLIMIT_STACK, &rlim); // STACK=[8388608]byte
char a[8380000];        // core dumped. [8370000]は実行可能でした

rlimitで制限されてるんでしょうか?
0230デフォルトの名無しさん2011/10/14(金) 07:57:07.58
>>229
C前提の話をすると unsigned char hoge[10]; の配列数はコンパイル時のsizeofでしかわからないはず。
普通(汎用的)に扱いたいならどっかに int hogehoge=sizeof(hoge);としておくしかないと思う
ちと危険なやり方でhoge変数の前後でmaehogeとatohogeを宣言してアドレス空間の差を…危険すぎるw
変数のタイプによってはリンカーはリロケートしてしまう可能性もあるし
それを回避する為に構造体を持ち出して…とか本末転倒なのでhogehoge式にしておくのが無難

コンパイラ展開規約ではバイト列に対する長さを保持する展開を強制されるリファレンスはないと思った
一部特殊なコードジェネレータがそれが無いと困るケースで特異的にあるはず
でもそんな石使ったことないから知らない
0231デフォルトの名無しさん2011/10/14(金) 14:19:24.10
>>230さん 229です、助言ありがとうございます。はい、C言語のスレなのでC++ではなくC前提でお願いします
しかし質問意図が伝わらなかったようで申し訳ないです
質問の意図は
「ある環境の自動変数の最大サイズの配列宣言を 環境非依存にポータブルに記述するにはどうすれば良いのですか?」です
ここでいう環境はUnix Like OS限定と考えてください
char a[10]のような小さなサイズの話ではなく環境で許された最大値ギリギリを使い切りたい場合の話です


"コンパイラ展開規約"?という用語とリファレンスという語が指すものがわからなかったので確認なのですが
> コンパイラ展開規約ではバイト列に対する長さを保持する展開を強制されるリファレンスはないと思った
この文章の意味は
「バイト列に対する最大長を保持するマクロは定義されていない(と思う)」という理解でよろしいですか?
0232デフォルトの名無しさん2011/10/14(金) 16:02:29.89
>>231
おお、これは失敬。確保領域の最大値が知りたいのか
自動変数でしかも配列を有限数で宣言する上限と言う事でおk?
だとすればコンパイラの仕様次第としか答えられない。コンパイラは何を使うの?Linuxでgccって事?

一般に自動変数の場合スタック配置される可能性が高い(インプリメントの自由度があり絶対ではない)
そしてgccに限定すると-Gオプションの影響をうけるがこれも機種(CPUやメモリ管理)依存であり、答えがぶれる
C言語では規定できないから厳密な話をするのであればUnix/Linux板か言語として記述で縛るしかないと思う
厳密・忠実なコンパイラインプリメントから言えば添え字は無制限であり、コンパイラ開発者が決めるべきである
が、ANSIが言うには90版は32767、99版は65535だったはず。<int基準で作られていたと記憶

コンパイラ規約(古く私などはカーニハン&リッチの物を基準にコンパイラ開発をした)は常に変動があるので
やはり実行する環境の下で影響の受ける話はするべきだと思う、もう少し環境を限定してもらわないと…
それでもC言語では限定しないし、コンパイルエラーなり実行時エラーなりが出る可能性もある。
後は「特定されている」コンパイラの規約に則してもらうしかない
コンパイラが明示されていないのでわからないし、明示されたら専用のスレで聞けと答えが来ると思うよ?>C汎用の話じゃないし
0233デフォルトの名無しさん2011/10/14(金) 16:06:55.95
まだ質問とぶれてるとすれば「ポータブルな配列宣言」の部分かな?

これどういう意味?

ポインタを宣言してmallocしちゃダメなの?
mallocの最大値は使うコンパイラのmalloc関数の説明を見てください。最大値が書かれています。
普通に答えるならこうだけど不確定な質問でなんか答え辛い
使うコンパイラやCPU/OSを限定(最低限複数でも種類の列記)は出来ない汎用な話なのですか?
C言語自体は殆ど制約がなく、実装を決定する開発者がその辺決める事が多いのです。
何せ世にゴマンとあるCPUやOSをフルカバーできる程には自由ではないのですよ
0234デフォルトの名無しさん2011/10/15(土) 14:13:32.45
>>233さん 229です

> ポインタを宣言してmallocしちゃダメなの?
> mallocの最大値は使うコンパイラのmalloc関数の説明を見てください。最大値が書かれています。

この部分は>>229のレスを読んでください。 mallocについては"stdint.h に SIZE_MAX として定義されている"と明記しています
つまり「mallocで書けるけど敢えて自動変数で宣言しとくなら最大値は?」です

> まだ質問とぶれてるとすれば「ポータブルな配列宣言」の部分かな?
> これどういう意味?

例としてSIZE_MAXを示してます、ですから「どっかにマクロ定義されてないんですか?」と考えてください

> C言語自体は殆ど制約がなく、実装を決定する開発者がその辺決める事が多いのです。
> 何せ世にゴマンとあるCPUやOSをフルカバーできる程には自由ではないのですよ

このスレはK&RにあるBNFのようなCのsyntaxについて語らうスレなんですか?でしたら書くべきスレを間違ったようですいません
0235デフォルトの名無しさん2011/10/15(土) 15:16:04.71
>>233さん 229です
Cにはdefineマクロという機能がありますから233さんが説明の中でコンパイラ規約
について言及している意味が理解できません。仰るような"環境依存で変わるもの"については
特にそのなかでも汎用的であるものについては マクロで定義された値の部分で環境依存を吸収していると認識いています。
例えば現在利用中の環境ではSIZE_MAX(http://en.wikipedia.org/wiki/Stdint.h)について

/* Limit of `size_t' type. */↲
# if __WORDSIZE == 64↲
# define SIZE_MAX (18446744073709551615UL)↲
# else↲
# define SIZE_MAX (4294967295U)↲
# endif↲

64bit環境ならば 18446744073709551615UL、32bit環境ならば 4294967295U
とここでbit幅の違いによる差を吸収しています。このお陰でSIZE_MAXを使う場合において
言語利用者はSIZE_MAXの具体値を意識する必要から開放されています


ですから>>233さんが>>230,232-233の環境依存で変化するものについての説明の中で
言語仕様(失礼、コンパイラ規約を"言語仕様"という語に読み替えました)について言及している意図が理解できません
0236デフォルトの名無しさん2011/10/15(土) 19:32:09.21
>>235
だからその実装(ヘッダの定義)も実装者の自由なんだってば。。。
コンパイラを規定しない限りその保証はないって言ってるの

で、どのコンパイラなの?その専用スレで聞いてくれ
その上でもう一度聞くけど「何故そういうことをするの?」
0237デフォルトの名無しさん2011/10/15(土) 19:34:41.46
連投ですまないが、もうこの件には触れないので後は好きにしてくれ
自分でdefineきればいいじゃない?
コーディングに関してあるともないともいえないルールを聞かれて答えろってあふぉか
0238デフォルトの名無しさん2011/10/16(日) 03:49:48.13
> /* Limit of `size_t' type. */
これって要するに size_t 型の最大値を示しているのであって、自動変数の
最大サイズとは全く関係ないのでは?

大抵のコンパイラはスタックサイズをコンパイル時に指定できるけど、この
サイズを取得する汎用の方法は無いんじゃない?
というか、俺は汎用で無いやり方すら知らない
0239デフォルトの名無しさん2011/10/16(日) 10:59:11.10
>>238さん 229です。仰るとおりSIZE_MAXは自動変数については無関係ですよ、それについては>>229で記述した通りです
void *malloc(size_t size)で割り当てられる連続長の最大サイズを例示しました。そして

> stdint.h に SIZE_MAX として定義されてますが、こんな感じでどこかに

と自動変数のサイズ制限について質問させて頂いた訳です。この質問 どうもマクロは定義されてないようなので諦めます
0240デフォルトの名無しさん2011/10/16(日) 11:26:05.47
>>236さん 229です
> だからその実装(ヘッダの定義)も実装者の自由なんだ

始めからこの記述ならば理解できました。ヘッダファイルはライブラリ記述者がつくったものですからね


>>237
「解らない」と答えるために態々コンパイラ実装者だと自称したりその割には使う用語がおかしかったり
回答に一つも具体的な例示がなく口述の自然言語で抽象化したことをナッガナガと書いてたり
> あふぉか
挙句の果てに去り際に恥ずかしい捨て台詞を吐くようなカス(失礼)は無視するよ(^o^)ノ
0241 忍法帖【Lv=21,xxxPT】 2011/10/17(月) 11:42:04.35
やさしいC→明解C言語中級編 と来たら次は?
0242デフォルトの名無しさん2011/10/17(月) 12:08:40.24
エキスパートCプログラミング
偏ってるけど
0243デフォルトの名無しさん2011/10/18(火) 20:20:24.16
なんのために本をよみたいのかわからん
そんな暇があったら、サンプルをちょっとずつ変更して
コンパイルして実行
0244デフォルトの名無しさん2012/01/06(金) 01:39:10.90
1〜100まで掛けた数を表示するプログラムを書ければ Very Good!
0245デフォルトの名無しさん2012/01/06(金) 01:58:14.77
#include <stdio.h>
int main()
{
  printf("93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000\n");
  return 0;
}
0246デフォルトの名無しさん2012/01/06(金) 11:35:46.25
>>244
#include <stdio.h>
#include <math.h>
int main()
{
printf("%g\n", tgamma(100 + 1));
return 0;
}
0247デフォルトの名無しさん2012/01/15(日) 10:08:36.17
どちらが高速、効率的に動くでしょうか。
なお、ほとんどの場合 a=bのみが実行されます。(-10する事はかなり少ない)

if( 条件)
a=b;
else
a=b-10;

と

a=b;
if(条件)
a=a-10;
0248デフォルトの名無しさん2012/01/16(月) 09:40:43.06
>>247
そのまえに、上は条件成立時にa=bだが、下は条件非成立時にa=bな件。
0249デフォルトの名無しさん2012/01/16(月) 11:27:44.06
>>247
今時の環境で、その速度差が問題になるようなことはまず有り得ない。
意味的に判り易い方にすればいい。
速度差が問題になったなら、計測してみるしか。
02502472012/01/22(日) 22:12:05.45
もちろん上と下で条件は逆です。
ありがとうございました。
0251デフォルトの名無しさん2012/02/14(火) 16:16:05.18
>>241
明解Cの初級編でも終えたら後は実践と本で補うならポインタ
それ以上(オブジェクト指向云々、多言語)はそれぞれの目指す道で分かれるでしょう
0252優しい名無しさん2012/04/07(土) 10:02:09.08
すまんちょっと貼らせてくれ
http://codepad.org/jp7DPTAi
■ このスレッドは過去ログ倉庫に格納されています