5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

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

1 :デフォルトの名無しさん:2010/05/28(金) 01:02:53
C言語の*入門者*向け解説スレッドです。
★前スレ
C言語なら俺に聞け(入門編)Part 64
http://pc12.2ch.net/test/read.cgi/tech/1273846013/
★過去スレ
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++室 Ver.72【環境依存OK】
http://pc12.2ch.net/test/read.cgi/tech/1267775473/
とか
★教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 135代目
http://pc12.2ch.net/test/read.cgi/tech/1269438098/
★C++言語については避けてください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

2 :デフォルトの名無しさん:2010/05/28(金) 19:09:39
★質問に答えず揚げ足とりばかりするのは止めてください。

3 :デフォルトの名無しさん:2010/05/28(金) 19:10:59
>>1
立てようとしたら立ってたので助かった

それとテンプレ修正

C/C++の宿題片付けます 136代目
http://pc12.2ch.net/test/read.cgi/tech/1274827528/
【初心者歓迎】C/C++室 Ver.73【環境依存OK】
http://pc12.2ch.net/test/read.cgi/tech/1274395127/

4 :デフォルトの名無しさん:2010/05/28(金) 19:53:38
do for rand()の3つを使って、次のプログラムをかけっていうが分からない。
x軸、y軸平面において、中心(0,0)半径1の円の中の座標を5個ランダムに
表示するプログラム。必ずdo while とforを使えということです。
#include <stdio.h>
#include<math.h>
#include <stdlib.h>

int main(void)
{
int i;
for (i=0 ; i<5 ; i++)
printf("%d\n",do{rand(x),rand(y)}while(x^2+y^2<1));
return 0;
}

これじゃだめですよね。どうしたらいいですか?



5 :デフォルトの名無しさん:2010/05/28(金) 19:55:36
strcatで二つの文字を連結したいんだけど間に空白スペース入れるにはどうすればいいですか?

6 :デフォルトの名無しさん:2010/05/28(金) 20:03:10
>>4
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int i;
double x, y;

srand(time(NULL));

for(i=0; i<5; i++) {
do {
x = 2.0 * rand() / RAND_MAX - 1;
y = 2.0 * rand() / RAND_MAX - 1;
}while(x * x + y * y > 1);
printf("%f, %f\n", x, y);
}

return 0;
}

7 :デフォルトの名無しさん:2010/05/28(金) 20:45:43
質問です
入力した文字列を反転して出力するプログラムを作りました

#include<stdio.h>
#include<string.h>

int main(){
char str[256]; //反転前
char str_r[256]; //反転後
int len,i,j;

printf("入力>");
gets(str);

len=strlen(str);
j=len;
for(i=0;i<len;i++){
str_r[i]=str[j-1];
j--;
}
printf("%s\n",str_r);
       return 0;
}

これで文字列を入力すると3文字や7文字などの特定の字数のときは問題ないのですが、
それら以外の字数の文字列を入力すると反転した文字列が出力された後に『や・などのゴミがついてしまいます
何故でしょうか?

8 :デフォルトの名無しさん:2010/05/28(金) 20:49:57
>>7
'\0' を入れてないから

9 :デフォルトの名無しさん:2010/05/28(金) 20:52:39
>>6
うんx^2+y^2>1

x*x+y*y<1では?
円の内部ですよ?

10 :デフォルトの名無しさん:2010/05/28(金) 20:54:20
>>9
???

11 :デフォルトの名無しさん:2010/05/28(金) 20:56:35
>>10
x*x+y*y>1なら円の外部では??

あとRAND_MAX - 1; じゃなくて
RAND_MAX 1;では?RAND_MIN -1;
では?



12 :デフォルトの名無しさん:2010/05/28(金) 20:58:10
>>11
もう一度よく考えてみて
それでも分からなかったら実行してみるんだ

13 :デフォルトの名無しさん:2010/05/28(金) 21:02:52
>>11
すっごいバカがいるw

14 :デフォルトの名無しさん:2010/05/28(金) 21:03:00
>>12
実行したら>>6はあってるっぽいけど
>>6は何故そうなる?

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int i;
double x, y;

srand(time(NULL));

for(i=0; i<5; i++) {
do {
x = rand()
y = rand()
}while(x * x + y * y > <1);
printf("%f, %f\n", x, y);
}

return 0;
}
じゃだめなんですか?


15 :デフォルトの名無しさん:2010/05/28(金) 21:06:40
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int i;
double x, y;

srand(time(NULL));

for(i=0; i<5; i++) {
do {
x = rand()
y = rand()
}while(x * x + y * y <1);
printf("%f, %f\n", x, y);
}

return 0;
}
どう見ても間違いじゃなさそうなプログラムで実行してみた。
結果× 理由 t.c:14 prase eroor before y
クソが。yの前は何もねーのに何がエラーだよ。
意味わかんねーよ・・・

16 :デフォルトの名無しさん:2010/05/28(金) 21:10:44
初歩の初歩からやり直せw

17 :デフォルトの名無しさん:2010/05/28(金) 21:11:42
その行に何も無い場合は、前行を疑う
特に、ありがちなのはセミコロン抜け

18 :デフォルトの名無しさん:2010/05/28(金) 21:13:45
>>16
普通にここが初歩なんだが。

x = 2.0 * rand()

2.0って何だ?あとRAND_MAX -1って意味わからん。
どういう意味?RANDは自由に値を取るのにMAX?


19 :デフォルトの名無しさん:2010/05/28(金) 21:13:50
>>5
strcat(a, " ");
strcat(a, b);

20 :デフォルトの名無しさん:2010/05/28(金) 21:14:43
>>18
誰がRANDが自由に値を取るって決めたんだよw

21 :デフォルトの名無しさん:2010/05/28(金) 21:14:46
>>5
#include <stdio.h>
#include <string.h>
int main(void) {
  char a[] = "abcdefg";
  char b[] = "uvwxyz";
  char c[1024];
  strcpy(c, a);
  strcat(c, " ");
  strcat(c, b);
  puts(c);
  return 0;
}
/* end */

22 :デフォルトの名無しさん:2010/05/28(金) 21:17:16
>>20

RANDは0から10ケタ以上の特定のある整数までの数を自由に動く
乱数だと説明してあった。それなのにRAND__MAXが-1とか意味わかんね。
もう死にたい

23 :デフォルトの名無しさん:2010/05/28(金) 21:26:35
RAND_MAXってのはその特定の整数のことな。
(double)rand() / RAND_MAX にすると0から1までの乱数が得られる。
2.0 * rand() / RAND_MAX で2倍すると0から2までの乱数が得られる。
2.0 * rand() / RAND_MAX - 1 で そこから1をひくと-1から1までの乱数が得られる。

24 :デフォルトの名無しさん:2010/05/28(金) 21:43:29
nの数読み込んだ後にa[n]の配列にn個の数字を入れにはどうすればいいでしょう?
r r+1 r+2 ・・・ nと(数字 半角 数字・・・)で一括して読み込みたいのですが
scanf()はリターンキー押すまで読み込みませんしn個の%dが置けませんでした

25 :デフォルトの名無しさん:2010/05/28(金) 21:46:40
ループでscanf()すればenterした瞬間に一括で読み込まないか?

26 :デフォルトの名無しさん:2010/05/28(金) 21:47:16
一列読み込んでから配列に入れる。

27 :デフォルトの名無しさん:2010/05/28(金) 21:47:31
x*x+y*y>1でいいの?あってるの?

28 :デフォルトの名無しさん:2010/05/28(金) 21:50:47
なんであってないと思うんだw
do whileループが何をしてるのかよく考えてみろ

29 :デフォルトの名無しさん:2010/05/28(金) 21:57:03
あってねぇよな?
円の公式高校の時習ってないの?

30 :デフォルトの名無しさん:2010/05/28(金) 21:57:58
お前は不等式を高校で習ってないのかw

31 :デフォルトの名無しさん:2010/05/28(金) 21:59:30
数学の質問じゃなくてプログラムの質問しろやー

32 :24:2010/05/28(金) 22:00:24
書き方間違えたorz
r r+1 ・・・ nを入力し終わるまで改行をしないで読み込みたいんですが・・・
下記のように実装したいのですが
1行目 チーム数: 6(ここでnを読み込み)
2行目 チーム1の成績: 0 2 1 3 4(n-1個の試合数の結果を読み込み)
3行目 チーム2の成績: 0 1 7 3 7(n-1個の試合数の結果を読み込み)

33 :デフォルトの名無しさん:2010/05/28(金) 22:08:49
int i, n, a[256], b[256];

scanf("%d", &n);

for(i=0; i<n; i++) scanf("%d", a + i);
for(i=0; i<n; i++) scanf("%d", b + i);

34 :24:2010/05/28(金) 22:08:52
>>25
解答きてた・・・
ありがとうございます
早速試してみます

35 :24:2010/05/28(金) 22:11:38
>>33
動きました
ありがとうございました

36 :デフォルトの名無しさん:2010/05/29(土) 00:42:29
>>30
x*x+y*y>1だと円の外部の条件でしょ?
俺は内部の条件と言ったんですが。

37 :デフォルトの名無しさん:2010/05/29(土) 00:44:17
>>36
!(x*x+y*y<1)

38 :デフォルトの名無しさん:2010/05/29(土) 00:46:54
>>37
ワロタww
だかれそれは円の外部の条件だろうがww

39 :デフォルトの名無しさん:2010/05/29(土) 00:57:21
ちょww
何で>>5で上手くいくんだよww
不等式逆にしたら外部になった。
whil()は()の条件の間って意味だろ
何故だww

40 :デフォルトの名無しさん:2010/05/29(土) 01:06:01
>>15 に訂正かなw

41 :デフォルトの名無しさん:2010/05/29(土) 01:08:16
もうアホすぎるから while 1で常に無限ループさせて、
その中で if then break で良くね?

42 :デフォルトの名無しさん:2010/05/29(土) 01:36:26
OKww
分かった。noのとき実行を表示するんだなww
俺馬鹿すぎワロタww。
ありがとう皆。

43 :デフォルトの名無しさん:2010/05/29(土) 01:44:49
違う。条件の反対がそのまま真になるから、その条件をみたすまで
模索し続けるってことかw

これでも数学偏差値70だからなw
まーありがとう。

44 :デフォルトの名無しさん:2010/05/29(土) 02:09:14
点を取るスキルだけは立派なんだろうけど
学生のうちに勉強の仕方を習得しろよ

45 :デフォルトの名無しさん:2010/05/29(土) 02:11:50
サヴァンかアスペか知らんけど、かわいそう

46 :デフォルトの名無しさん:2010/05/29(土) 02:15:41
>>4
必ず一定時間で終了する。

#include <stdio.h>
#include <stdlib.h>
#define _USE_MATH_DEFINES
#include <math.h>

int main(void)
{
for(int i = 0; i < 5; i++){
double r = (double)rand()/RAND_MAX;
double th = (double)2*M_PI*rand()/RAND_MAX;

double x = r*cos(th);
double y = r*sin(th);
printf("[%d] x=%f y=%f\n", i, x, y);
}

do{}while(0);

return 0;
}

47 :デフォルトの名無しさん:2010/05/29(土) 02:20:52
Fランが好んで使うレトリック→「点を取るスキル」

いや、お前がFランなのは、点を取るスキルがないからではなくて、お前の頭が悪いからだからww

48 :デフォルトの名無しさん:2010/05/29(土) 02:24:45
>>46
極座標か。「ランダム」の意味にこだわる人には受け入れがたい結論だ。

49 :デフォルトの名無しさん:2010/05/29(土) 02:25:33
>>47
いやいや人を勝手にFラン認定するなよ
テストの点も取れるし、お前よりは頭もいいと思うよ

点を取るスキルってのは確かにあるのに
それが分からないの?

50 :デフォルトの名無しさん:2010/05/29(土) 02:26:37
ww←これ使うやつの方が頭悪そうに見える

51 :デフォルトの名無しさん:2010/05/29(土) 02:27:35
void main() (笑)

52 :4:2010/05/29(土) 02:27:50
てか2ちゃんやってて役に立つ板は質問板、娯楽ではAA板他はそうそうない。
ここはこれから4年卒業するまで使わせてもらうから。
ここ2週間ここで質問しなかったら本当大変な事になってる。
感謝してる。10歳の女の子のセックス動画持っててお前らに見せてやりたいが
逮捕されるんで控えとく。お前ら本当にありがとう。



53 :4:2010/05/29(土) 02:29:42
ここはプログラマーが多いのかPC触ってる人多いのでレスも早い。
絶対に逆ギレだけはしないようにするからこれからも付き合ってくれ^^

54 :デフォルトの名無しさん:2010/05/29(土) 02:30:38
自分で面白いと思ってやってんのか、寒過ぎ

55 :4:2010/05/29(土) 02:31:50
>>54
仲良くやろうぜ^^

56 :デフォルトの名無しさん:2010/05/29(土) 02:34:08
開き直って荒らしても成長しないぞ

57 :デフォルトの名無しさん:2010/05/29(土) 03:13:21
ああ、えらくテンパってるから教えようと思ったけど解決してたか。
式だけ見ると円の外を示す条件になってるからコード見るのに不慣れだと間違えるんだろうなって思った。

>>52
なんかそのようなの前も見た気がする。よく来てるんですね。

58 :4:2010/05/29(土) 04:01:56
>>57
てか前スレの>>785だからな俺ww
ばれたかwwwそのようなのって何だよw


59 :デフォルトの名無しさん:2010/05/29(土) 04:24:36
このスレに>>4よりバカなヤツはいない

60 :デフォルトの名無しさん:2010/05/29(土) 04:40:55
>>58
>>50

61 :4:2010/05/29(土) 04:47:09
>>59
いや数学だけは偏差値高かった・・
だが理科が苦手w何でだろうw
プログラムって理科的なのかな?

今日から2日間家にこもって48時間
プログラム課題に取り組むお("・ω・`)しんどいわー
がんばるわー

62 :デフォルトの名無しさん:2010/05/29(土) 04:56:12
数学できるようなヤツはそもそもこんなところで質問なんかしない

63 :デフォルトの名無しさん:2010/05/29(土) 05:10:44
>>61
>>50

64 :デフォルトの名無しさん:2010/05/29(土) 05:12:47
Lispの括弧のような意味が「w」の中に秘められているのだろうか

65 :デフォルトの名無しさん:2010/05/29(土) 05:13:14
>>61
>理科
中学生か。どおりで自意識過剰なんですね、よくわかります。

66 :デフォルトの名無しさん:2010/05/29(土) 08:32:16
>>65
高校だと、化学・物理・地学・生物だよな〜。

67 :デフォルトの名無しさん:2010/05/29(土) 09:47:56
理科総合ってのが……

68 :デフォルトの名無しさん:2010/05/29(土) 10:07:02
>>67
ゆとり科目か‥‥‥。

69 :デフォルトの名無しさん:2010/05/29(土) 10:11:37
>>52
3年間、と本当のことをいったらいいのに。

70 :デフォルトの名無しさん:2010/05/29(土) 10:14:49
このようなプログラムがあるとき、配列の範囲外に書こうと
していることを検出する方法はないでしょうか?

#include <stdio.h>
int i[5];
int main(void) {
 int *iptr;
 iptr = i;
 iptr[5] = 10;
 printf("%d\n",iptr[5]);
 return 0;
}


71 :デフォルトの名無しさん:2010/05/29(土) 10:22:22
>>70 出来ない。なおC++でも出来ない。
#include <stdio.h>
int i[5];
int main(void) {
  int *iptr;
  const int i_size = sizeof(i)/sizeof(*i);

  iptr = i;
  if(5 < i_size){
    iptr[5] = 10;
    printf("%d\n",iptr[5]);
  } else puts("ERR");
  return 0;
}

72 :デフォルトの名無しさん:2010/05/29(土) 10:24:15
配列へのアクセスをクラス化して中でチェックするとか

73 :70:2010/05/29(土) 10:30:14
そうですか。。
おかしな挙動をしているプログラムのバグがこのパターンだったのですが、
デバッグに凄く苦労しました。gdbのwatchが超便利でなんとか原因がわかった
のですが、なにかもっと的確に判る方法がないものかなと思っています。

どうもありがとうございました。

74 :デフォルトの名無しさん:2010/05/29(土) 10:33:16
配列はvectorに統一する
これならVC++は常に範囲チェック自動でする


75 :デフォルトの名無しさん:2010/05/29(土) 10:35:43
メモリ確保量を調べる関数がある。
_msize・・・ ヒープに割り当てられたメモリ ブロックのサイズを返します。 

これ使うと安全に書き込める場所が判明するけど、はじめの確保量よりでかい。
さらにここの数字の数倍を書き込んでも異常停止しない。
なのでデバッガで発見するのは無理だ。

76 :70:2010/05/29(土) 10:51:19
すみません、もうひとつ教えて下さい。
70のようなバグは何か名前がついてますか?
こういうのはバッファーオーバーランとは言わないですよね。
なんと表現したらいいんでしょう?

77 :デフォルトの名無しさん:2010/05/29(土) 10:52:54
ERROR_NOACCESS   998     メモリ ロケーションへのアクセスが無効です。

78 :デフォルトの名無しさん:2010/05/29(土) 13:18:22
>>74
固定長でも常にvectorというのは流石に無い
boost::array使え

79 :デフォルトの名無しさん:2010/05/29(土) 13:31:05
すんません
これのコアダンプ理由と対策をおせーてください

// fff.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 3
typedef struct {
char b[30];
} stSub;
typedef struct {
char a[30];
stSub *sub;
stSub *sub2;
} stMain;
void func2(stSub **sub){
stSub *p;
int i=0;
*sub=(stSub *)calloc(MAX,sizeof(stSub));
p=*sub;
for(i=0;i<MAX;i++){
sprintf(p[i].b,"hoge_%d",i);
}
//printf("%s\n",p[0].b);
}
つづく

80 :デフォルトの名無しさん:2010/05/29(土) 13:31:48
void func(stMain **main){
int i=0;
stSub **tmp[MAX];
stSub *tmpSub;
*main = (stMain *) calloc (1,sizeof(stMain));
strcpy((*main)->a,"fugafuga");
/* 一つ目*/
func2(&(*main)->sub);
for(i=0;i<MAX;i++){
func2(&(*tmp)[i]);
}
(*main)->sub2=(stSub *)calloc(MAX*MAX,sizeof(stSub));
tmpSub=(*main)->sub2;
for(i=0;i<MAX;i++){
memcpy(tmpSub,*tmp[i],sizeof(stSub)*MAX);
tmpSub+=sizeof(stSub)*MAX;
}
}
int main(){
int i=0;
stMain *main;
func(&main);
printf("main=%s\n",main->a);
for(i=0;i<MAX;i++){
printf("%s\n",main->sub[i].b);
}
for(i=0;i<MAX;i++){
printf("%s\n",main->sub2[i].b);
}
}

81 :デフォルトの名無しさん:2010/05/29(土) 13:33:31
関数内で動的に構造体とその中の構造体配列を確保しようとしてるんですが・・・・
freeしてないのは無視してください

82 :デフォルトの名無しさん:2010/05/29(土) 13:34:24
gdb使えよ

83 :デフォルトの名無しさん:2010/05/29(土) 13:35:14
>>78
そっちがないだろ。標準装備で動くようにすべき。わざわざboostいれて使い分けるのは不便。

84 :デフォルトの名無しさん:2010/05/29(土) 13:45:21
>>80
書き方が気持ち悪くて読みにくい

func2(&(*tmp)[i]);
tmpSub+=sizeof(stSub)*MAX;

85 :84:2010/05/29(土) 13:49:51
stSub **tmp[MAX];

86 :デフォルトの名無しさん:2010/05/29(土) 13:51:05
>>84
本当ですね
あなたの顔みたいに気持ち悪くて読みにくいですね・・・・

87 :デフォルトの名無しさん:2010/05/29(土) 16:34:22
てか、スレ違いじゃね? > fff.cpp

88 :デフォルトの名無しさん:2010/05/29(土) 16:53:17
回答する気がない人はスルーします

89 :デフォルトの名無しさん:2010/05/29(土) 17:39:57
前スレでも言った気がするんだけど、このスレって素直にアドバイスすりゃ良いだけなのに一言多い奴がいるよな。
いちいち噛み付いてたらアドバイスされる方も心穏やかじゃねーだろ。
っていうか一体どんだけ性格悪いだよw

90 :デフォルトの名無しさん:2010/05/29(土) 17:44:12
お前がなw

91 :デフォルトの名無しさん:2010/05/29(土) 17:47:04
大抵の質問は普通に答えられてる
>>4みたいなアホとかずうずうしい教えてくんが煽られてるだけ

92 :デフォルトの名無しさん:2010/05/29(土) 18:46:46
>>79,80
http://codepad.org/HJ4gfLyw

読みやすいようにインデントしときました。

解読は解答は他の人にまかせます。 コードが高度すぎて当方では手におえません。


93 :デフォルトの名無しさん:2010/05/29(土) 18:57:23
>>89
ここはQがボケてAが突っ込むっていうネタスレだろ

94 :デフォルトの名無しさん:2010/05/29(土) 19:00:57
>>84-85
で答えは出てる

95 :デフォルトの名無しさん:2010/05/29(土) 19:23:53
ソースファイルの文字コードは何を使っていますか?

96 :デフォルトの名無しさん:2010/05/29(土) 19:25:04
UTF-8

97 :デフォルトの名無しさん:2010/05/29(土) 19:25:45
ASCIIが最強

98 :デフォルトの名無しさん:2010/05/29(土) 19:26:45
ASCIIなら、UTF8もSJISもEUCもコード一緒。サイズ一緒。

99 :デフォルトの名無しさん:2010/05/29(土) 19:30:46
ソースファイルの中でASCII以外の文字を使うとき、文字コードは何を使ってるの?

100 :デフォルトの名無しさん:2010/05/29(土) 19:32:47
自分はSJISかUTF16だ。windowsがこれしか対応していない。

101 :デフォルトの名無しさん:2010/05/29(土) 19:34:29
えっ

102 :デフォルトの名無しさん:2010/05/29(土) 19:42:12
>>101
"\x01\xFA"などバイナリデータを直にソースへ書けば
扱えるのはSJISかUTF16LEのみだろ。
EUCやUTF8の日本語を書き込んで、それがコメント以外なら最終的にはUTF16LEに変換される。

103 :デフォルトの名無しさん:2010/05/29(土) 19:48:09
ですよねー

104 :デフォルトの名無しさん:2010/05/29(土) 19:48:39
たとえば、ファイルへのパスがUTF8で表現されていて
それをcharかwchar_tの配列へ転送しても正しい操作はできないが。
UTF16LEをwchar_tの配列へ転送すればアクセス可能

105 :デフォルトの名無しさん:2010/05/29(土) 19:51:20
LINUXならば、UTF8のパスデータを配列へいれたら、正しい操作ができる。
それがwinとの違い。ベースコードは設定で変更可能かもしれない。

106 :デフォルトの名無しさん:2010/05/29(土) 19:55:07
ASCII には ¥ なんて無いぞ。
それは ASCII じゃなくて JIS七単位符号だ。

107 :デフォルトの名無しさん:2010/05/29(土) 19:59:27
windowsの\区切りが非常識だな。
/で世界統一すべき。

108 :デフォルトの名無しさん:2010/05/29(土) 20:02:27
ですよねー

109 :デフォルトの名無しさん:2010/05/29(土) 20:03:14
printf("あほ/n");

110 :デフォルトの名無しさん:2010/05/29(土) 22:00:33
問題:
79,80のコードを、初心者でも読めるような簡単な形式に書き換えろ

111 :デフォルトの名無しさん:2010/05/29(土) 22:33:19
void func( const char* fmt, ... )
{
  printf( fmt, ... );
}
みたいに可変長引数をそのままprintfに渡すこと出来ますか?

112 :デフォルトの名無しさん:2010/05/29(土) 22:35:49
他の言語なら出来る

113 :デフォルトの名無しさん:2010/05/29(土) 22:36:52
vprintf

114 :デフォルトの名無しさん:2010/05/29(土) 22:57:46
>>111
fmtに"%s"とかを入れるってことか
知らんわあ

115 :デフォルトの名無しさん:2010/05/29(土) 23:07:00
>>111
c99ならできる

116 :デフォルトの名無しさん:2010/05/29(土) 23:23:57
>>111
va_list で渡すしかない

117 :デフォルトの名無しさん:2010/05/29(土) 23:41:20
600851475143という数字が32bitOSでオーバーフローするんだけどしない方法ある?

118 :デフォルトの名無しさん:2010/05/29(土) 23:43:14
>>117
long long を使う
double を使う
多倍長整数を使う

119 :デフォルトの名無しさん:2010/05/29(土) 23:44:06
>>117
600851475143進数を使えばいいよ。"1"と表現できるようになる。

120 :デフォルトの名無しさん:2010/05/29(土) 23:44:50
long long だな

121 :デフォルトの名無しさん:2010/05/29(土) 23:45:45
10だろが。しかし600851475142の表現が長くなる。

122 :デフォルトの名無しさん:2010/05/29(土) 23:48:49
>>118
なぜかできなかった

>>118
それは思いつかなかったwww

123 :デフォルトの名無しさん:2010/05/30(日) 00:12:48
アホかおまえは

124 :デフォルトの名無しさん:2010/05/30(日) 00:15:23
16bitのshort型変数があります。

例えば
0xABCCだとすると上位3バイトの値を変えずに、下位1バイトの

0b1100を0b1010とするような演算をしたいんですが、どうしたらいいでしょうか?

125 :デフォルトの名無しさん:2010/05/30(日) 00:18:45
>>124
#include<stdio.h>

int main(void)
{
unsigned short x=0xABCC;

printf("x=%X\n", x);
x=(x&0xFFF0)|0xA;
printf("x=%X\n", x);

return 0;
}

126 :デフォルトの名無しさん:2010/05/30(日) 00:20:18
下記のプログラムがなぜ正常に動くのか分かりません。
if(r)のrにはscanfの戻り値(0か1)が入るんですよね?
なので自分的にはこの場合if(r == 1)が正しいのではないかと思うのですが。


#include<stdio.h>

int main(){

int i = 0;
int r;

r = scanf("%d", &i);

if(r){printf("整数%dが入力されました\n", i);}//入力が整数の場合

else{printf("整数以外が入力されました\n");}//入力が整数意外の場合

return 0;

}

127 :デフォルトの名無しさん:2010/05/30(日) 00:22:20
>>126
いきなりEOFがきたら r==-1 になる

128 :デフォルトの名無しさん:2010/05/30(日) 00:23:54
で?

129 :デフォルトの名無しさん:2010/05/30(日) 00:25:44
r==1 が正しい

130 :デフォルトの名無しさん:2010/05/30(日) 00:28:13
r==1だったらrが2の場合できなくなるんじゃね?

131 :デフォルトの名無しさん:2010/05/30(日) 00:28:15
DSやWiiってC言語って聞いたんだけど実際のところどうなの?
DSやWiiの自作ソフトの作り方とか分からないんだけど・・・

知ってるやついたら教えてください。

↓のスレはそんなにも参考にならなくて・・・
http://pc12.2ch.net/test/read.cgi/tech/1275138351/

132 :デフォルトの名無しさん:2010/05/30(日) 00:31:13
>>131
http://void-main.org/dsprogram/

133 :デフォルトの名無しさん:2010/05/30(日) 00:32:09
任天堂とライセンス契約するとSDKとエミュレータもらえるからそれPCに繋いでソフト作るんだよ。
C言語とC++使えるよ

134 :デフォルトの名無しさん:2010/05/30(日) 00:34:11
>>130
r は変換に成功した数だから >>126 の場合には EOF か 0 か 1 しか返らない

135 :126:2010/05/30(日) 00:39:42
「10日で覚えるC言語」に載っているプログラムなんですが、
一日考えてもif(r)の意味が分かりません。
「rが○○だったら〜をする」なら分かるのですが、
この場合「rだったら〜をする」ですよね?意味分からなくないですか?
でもプログラムは正常に動くからきっと自分の考えが間違ってるんだと思うのですが。



136 :デフォルトの名無しさん:2010/05/30(日) 00:41:15
>>135
if(r)は、「rが0でなければ」だよ。

137 :デフォルトの名無しさん:2010/05/30(日) 00:41:36
if(A)
{
  B
}
else
{
  C
}
Aが0以外だったらBへ
Aが0だったらCへ

138 :デフォルトの名無しさん:2010/05/30(日) 00:43:35
>>124
16ビットは2バイト。 バイトじゃなくてニブル。
2を引く。

139 :デフォルトの名無しさん:2010/05/30(日) 00:43:36
>>135
俺もC言語始めるって時に知恵袋で「10日で覚えるC言語」進められたんだけど、
実際のところいい本なの「10日で覚えるC言語」って?

140 :デフォルトの名無しさん:2010/05/30(日) 00:45:59
付け焼刃みたいな知識のための本なら買う必要ないよ。Cほど普及してる言語ならネット上に情報が溢れてるし
10日で覚える〜は知らんがCの絵本ってのは糞だったな

141 :デフォルトの名無しさん:2010/05/30(日) 00:47:34
初心者はガンガン参考書買った方がいい。日本経済的に。

142 :デフォルトの名無しさん:2010/05/30(日) 00:48:08
>>139
いい本だよ。

143 :デフォルトの名無しさん:2010/05/30(日) 00:50:47
>>136,137
そういう意味があるんですか!
ありがとうございました!!!!
ずっともやもやしてたのでとてもスッキリしました。

>>139
自分は全く知識も無く、本屋で目立つところにあったから(10日で覚えられるし)買ってみました。
正直3日分やるのに何十日も掛かってます・・・。
今回の事も本に書いてなかったし。
>>140
その後、文字ばかりで飽きてきたのでCの絵本を買ってしまいました・・・。




144 :デフォルトの名無しさん:2010/05/30(日) 00:51:32
int r; if(r)〜みたいな書き方って俺は避けるけど、実際の現場だと結構使われてるね

145 :デフォルトの名無しさん:2010/05/30(日) 00:55:00
>>143
日本経済に貢献したんだ、良かったな
とりあえずコードを書いて見ていろいろ試そうな

146 :デフォルトの名無しさん:2010/05/30(日) 01:02:03
>>145
キモイ

147 :デフォルトの名無しさん:2010/05/30(日) 01:05:08
>>146
なんで自分でコードを書かないの?

148 :126:2010/05/30(日) 01:11:47
>>144
なるほど、参考になります。
>>145
はい。がんばります;

自分は通勤中に本を読み、帰ってから実践するという毎日なので書籍は重宝してるのですが
かばんに入る小さなノートPC買ってWEB見ながらプログラム書いたほうが勉強になるのかな。

149 :デフォルトの名無しさん:2010/05/30(日) 01:14:07
>>147
書いてるけど?
何で書かないと思ったの?

150 :デフォルトの名無しさん:2010/05/30(日) 01:14:48
>>148
通勤時間は絶対に本のほうがいいよ

151 :デフォルトの名無しさん:2010/05/30(日) 01:16:29
通勤中にプログラム書くと頭がおかしくなって死ぬ

152 :126:2010/05/30(日) 01:27:33
言葉に重みがありますねw
これを理由にVAIO Pとか欲しいと思ってたのですがやめときます。
知識が無いから良い本なのかすら分からない。何かお勧め無いですかね。

153 :デフォルトの名無しさん:2010/05/30(日) 01:31:03
標準講座 C (Programmer’s SELECTION): ステファン・G・コーチャン, 中尾 真二
http://www.amazon.co.jp/dp/4798119717/

154 :デフォルトの名無しさん:2010/05/30(日) 01:44:36
>>143
意味があるというか、判定式の返り値が、偽なら0で真なら非0ってことだよ
だから、本来ならif(r != 0)ってした方がいいと思う

printf("TRUE: %d\n", 1 == 1);
printf("FALSE: %d\n", 1 == 0);

TRUE: 1
FALSE: 0

155 :デフォルトの名無しさん:2010/05/30(日) 01:47:07
>>154
自分にとっては if(r) は頻出イディオムだから if(r!=0) より読みやすい
もちろん 0 に意味があるなら 0 と比較するけど

156 :デフォルトの名無しさん:2010/05/30(日) 01:48:33
>だから、本来ならif(r != 0)ってした方がいいと思う

思いだけは頂いておくわ。

157 :デフォルトの名無しさん:2010/05/30(日) 08:43:39
if(r != 0)の方がいい、とかいうのはC言語知らないだけだから
気にしないでいい

int変数以外にも、ポインタがNULLでないことを判定する場合に
if(p) みたいな書き方することも多いので、さっさと慣れたほうがいい

158 :デフォルトの名無しさん:2010/05/30(日) 10:13:38
>154

FALSEが0なのはいいとして、TRUEを1とするかどうかは注意して考えた方がよい。
偽は0, 真は1ではなく非0だから。TRUEと等しくないから偽とはならない。

そう考えると0と比較しなくてはならない。そうすると
if (isHoge != 0) ・・・
と書くことになるが、否定形の文章が読みにくいように、否定のコードが読みにくいことが多い。

真偽を表すことが明確ならば
if (isHoge)
とかく方がよいと思う

159 :デフォルトの名無しさん:2010/05/30(日) 10:40:34
if(isHoge == TRUE) や if(isHoge != TRUE) は止めた方がいいという流れで、
if(isHoge == FALSE) や if(isHoge != TRUE) は止めた方がいいとはならない。

160 :デフォルトの名無しさん:2010/05/30(日) 11:07:13
if(isHoge == FALSE) や if(isHoge != FALSE) も基本的に止めた方がいい
意味的にその方が読みやすい場合は例外だが、滅多に無い

161 :デフォルトの名無しさん:2010/05/30(日) 11:51:48
#define NOT(x) !(x)



162 :デフォルトの名無しさん:2010/05/30(日) 11:55:59
#define OR ||
#define AND &&

163 :デフォルトの名無しさん:2010/05/30(日) 11:57:48
#define TRUE FALSE

164 :デフォルトの名無しさん:2010/05/30(日) 12:05:55
C系の言語の ! は目立たないのが難点。スペースを空けずに if(!p)とか書くと ! の有無がぱっとわからない。
ベル研がDECのミニコンじゃなくてIBMのミニコンを導入していれば、
否定演算子がPL/Iみたいに¬になっていたかも。
もっとも、それはそれで-と区別しにくいけど。


165 :デフォルトの名無しさん:2010/05/30(日) 12:25:21
if (! p) と書けばいい

166 :デフォルトの名無しさん:2010/05/30(日) 12:31:52
!が離れてると落ち着かないなw

167 :デフォルトの名無しさん:2010/05/30(日) 12:34:10
↓スペースや改行についての宗教論争開始

168 :デフォルトの名無しさん:2010/05/30(日) 12:39:15
コメント入れれば解決w

if(!p){//これは否定

}

169 :デフォルトの名無しさん:2010/05/30(日) 12:39:47
終了

170 :デフォルトの名無しさん:2010/05/30(日) 13:10:56
落ち着かないけどlやiと紛らわしくはなくなる

171 :デフォルトの名無しさん:2010/05/30(日) 13:15:37
配列データをテキストファイルに保存するにはどうすればできますか?

172 :デフォルトの名無しさん:2010/05/30(日) 13:18:51
fopen

for(int i=0; i<sizeof(array); i++)
{
  fputc(array[i], fp)
}

fclose

173 :デフォルトの名無しさん:2010/05/30(日) 13:19:27
そのまま順に読み込んでBASE64にかえれば?
バイナリをそのまま出力するところで、base64を間に入れる。
バイナリでは駄目なんでしょ。

174 :デフォルトの名無しさん:2010/05/30(日) 13:29:20
JSONかバイナリシリアル化したやつをBASE64にすれば

ヘッダファイルだけでC++から使えるJSONパーサ「picojson」が凄い!
http://mattn.kaoriya.net/tags/json

175 :デフォルトの名無しさん:2010/05/30(日) 13:30:11
改行はともかく空白を有効に使えないヤツ結構多いよな

if(!i)

よりも

if ( ! i )

のほうが明らかに間違えずに読み取れると思うが
タイプ量のためだけに詰めるという自己中だらけ

176 :デフォルトの名無しさん:2010/05/30(日) 13:32:33
別に空白打つタイプが億劫なわけじゃないだろ
(´・ω・`)が( ´ ・ ω ・ ` )だとウザいだろ

177 :デフォルトの名無しさん:2010/05/30(日) 13:32:34
>>175
その辺は自分が読むときに整形ツール通せばいいだけ

178 :デフォルトの名無しさん:2010/05/30(日) 13:39:26
そもそも読みにくくしてるのは括弧な気がする
pythonみたいに括弧が無ければ読みやすい
if !i: と if i: が違うのはすぐ分かる。もっとも、pythonでは if ~i: だけど

179 :デフォルトの名無しさん:2010/05/30(日) 13:39:45
==を=にしたことはあってもif(!i)を読み間違えたことはないなあ

180 :デフォルトの名無しさん:2010/05/30(日) 13:43:26
!iとiならともかく

if(lfdsafsdfasd)とif(!fdsafsdfasd)の区別はどうだろうか

181 :デフォルトの名無しさん:2010/05/30(日) 13:48:22
そんな変数名にするヤツが悪い……と思ったけどシステムハンガリアンだとありえるのか

182 :デフォルトの名無しさん:2010/05/30(日) 18:21:54
>>175

空白挿入を強要する自己厨

183 :デフォルトの名無しさん:2010/05/30(日) 19:46:17
初心者です。

ある関数で代入された変数を他の関数で使いたい時どうすればいいんでしょうか?
変な質問ですいません。

184 :デフォルトの名無しさん:2010/05/30(日) 19:47:48
>>183
例文を書いてくれ

185 :デフォルトの名無しさん:2010/05/30(日) 19:58:33
int main(void){
int a[10];
return 0;
}
void func(){
int b[10]={1,2,3,4,5,6,7,8,9,10};
return 0;
}
これでmain関数の方にb[10]の値を出したいって感じです。

186 :デフォルトの名無しさん:2010/05/30(日) 20:02:24
int main(void){
int a[10];
func(a);
return 0;
}
void func(int* array)
{
  int b[10]={1,2,3,4,5,6,7,8,9,10};
  for(int i = 0; i < 10; i ++)
  {
    array[i] = b[i];
  }
  return 0;
}

187 :デフォルトの名無しさん:2010/05/30(日) 20:04:59
>>186
ありがとうございます!ちょっとやってみようと思います。

188 :デフォルトの名無しさん:2010/05/30(日) 20:07:51
>183
大きく分けると3通りの方法がある
1) 大域変数を使う
static global;
foo() { global = 128; return 0; } /* fooで代入 */
bar() { return global; } /* barで使う */

2) スタティックな変数とポインタを使う
foo(p) int **p; { static q; q = 128; *p = &q; return 0; } /* fooでqのアドレスをpにいれてやる */
bar() { int *p; foo(&p); return *p; } /* barで使う */

3) staticな変数を返す
foo() { static x; x = 128; return &x; } /* fooで代入し返す */
bar() { int *p; p = foo(); return *p; } /* barで使う */

値だけ使うんならもっと楽だけど

189 :デフォルトの名無しさん:2010/05/30(日) 20:19:07
>>188
ありがとうございます!勉強になります。

190 :デフォルトの名無しさん:2010/05/30(日) 20:48:13
>>189
うむ
勉強頑張るがよい

191 :デフォルトの名無しさん:2010/05/30(日) 21:21:20
>>189
いいんだよ

192 :デフォルトの名無しさん:2010/05/30(日) 21:23:11
get送信する方法教えてください。

193 :デフォルトの名無しさん:2010/05/30(日) 21:29:49
SendGet()

194 :デフォルトの名無しさん:2010/05/30(日) 21:30:56
ソケットで送ればいいよ。

195 :デフォルトの名無しさん:2010/05/31(月) 02:54:01
get送信についてネットで調べればOKです

196 :デフォルトの名無しさん:2010/05/31(月) 03:51:13
というほどのもんでもないと思うけど。

197 :デフォルトの名無しさん:2010/05/31(月) 19:13:21
キーボタンAを押すと同時に他のキーボタンBも押し、キーボタンAを離すとキーボタンBも離す
といったプログラムを作りたいのですがどうすればいいのでしょうか

198 :デフォルトの名無しさん:2010/05/31(月) 20:35:16
ここで質問するよりネットで調べた方が直ぐにわかるよ

199 :デフォルトの名無しさん:2010/05/31(月) 20:38:26
検索するのは最後の手段

200 :デフォルトの名無しさん:2010/05/31(月) 20:40:06
すでに最後だ

201 :デフォルトの名無しさん:2010/05/31(月) 21:52:28
ttp://karetta.jp/book-node/c-for-beginners/228239
こんな感じでやって
「○回目が一番大きい数字です」
ってしたいんだけどどうすればできるの?

202 :デフォルトの名無しさん:2010/05/31(月) 22:00:20
>>201
最大値を更新する際に、その添え字を記憶しておく。

203 :デフォルトの名無しさん:2010/06/01(火) 00:46:28
>>202
ありがとー

204 :デフォルトの名無しさん:2010/06/01(火) 01:07:42
>>203
うん。

205 :デフォルトの名無しさん:2010/06/01(火) 01:09:21
>>204
どうも

206 :デフォルトの名無しさん:2010/06/01(火) 01:54:56
>>205
いえいえいえいえ

207 :デフォルトの名無しさん:2010/06/01(火) 02:01:59
>>206
いやいや

208 :デフォルトの名無しさん:2010/06/01(火) 10:54:01
>>201
for( j=1 , max = 0 ; j < 10; j++) if( array[max] < array[j] ) max = j;

printf("一番大きな数字は%d回目です",max);


209 :デフォルトの名無しさん:2010/06/01(火) 14:17:26
>>208
ずいぶん時間掛かったな

210 :デフォルトの名無しさん:2010/06/01(火) 15:11:36
>>209
だからお前いっつも空気悪くするのいい加減自重しろ

211 :デフォルトの名無しさん:2010/06/01(火) 15:19:13
バカはスルーしろよw

212 :デフォルトの名無しさん:2010/06/01(火) 15:21:09
>>209
まだできないの?待ってんだけど。

213 :デフォルトの名無しさん:2010/06/01(火) 18:11:37
>>210
空気ってなんですか?

214 :デフォルトの名無しさん:2010/06/01(火) 18:13:46
自分じゃ問題解けないからって、横から茶々入れるだけの人って何が楽しいんだろうな。
自分の書き込み見返してあまりのバカさ加減に死にたくなったりしないのかな。

215 :デフォルトの名無しさん:2010/06/01(火) 18:22:13
と、問題が解けずに無意味な書き込みしてる奴が言ってもな・・・・

216 : ◆QZaw55cn4c :2010/06/01(火) 18:39:27
>>214
んー、そういうときは、
http://pc12.2ch.net/test/read.cgi/tech/1274827528/
に威風堂々と回答をかいてうさばらししてます。

217 :デフォルトの名無しさん:2010/06/01(火) 18:44:18
ああ、自分のミスを突っ込まれて大恥かいても「ん」の一言で済ます人かw
あんだけ厚顔無恥なら生きるの楽しいだろうな

218 :デフォルトの名無しさん:2010/06/01(火) 19:23:51
>>217
うらやましい

219 :デフォルトの名無しさん:2010/06/01(火) 19:31:25
バブルソート知らなかったうえに、引用元のwikiすらまともに読めない低脳だってことを
さらしてたら、俺だったら宿題スレに再臨なんかできないけどなw

220 :デフォルトの名無しさん:2010/06/01(火) 19:37:10
>>219
間違いを認めて改めるなら問題無いだろ

221 :デフォルトの名無しさん:2010/06/01(火) 19:37:57
開き直って生き恥を晒し続ける>>219は良い反面教師だね

222 :デフォルトの名無しさん:2010/06/01(火) 19:39:03
あれは正しいほうが途中で諦めなかったからなんとか認めさせることが出来たけど、
かなりひどい態度で理解力だったぞw

223 :デフォルトの名無しさん:2010/06/01(火) 20:41:50
>>217
かっくいいよな

224 : ◆QZaw55cn4c :2010/06/01(火) 20:59:13
>>217
ん、バブルソートのときは、「あれま」と思いましたが、まあ、それはそれ。
たしかに昔に比べると無恥になりましたが、それもたくさん宿題をといてるので、ひとつくらい大失敗をやらかしても、と考えるようになりました。
楽しくなりましませんが、楽にはなりました。

225 :デフォルトの名無しさん:2010/06/01(火) 21:05:08
日本語も不自由なようです。

226 :デフォルトの名無しさん:2010/06/01(火) 21:19:46
>>224
単純に知らなかったことよりも、指摘された後の態度の方が問題
宿題の題意も誤読すること多いし、知能低いのにプライドばっかり高すぎ

227 :デフォルトの名無しさん:2010/06/01(火) 21:28:57
何の話してるか知らないけど、両方とも消えてくれない?w

228 : ◆QZaw55cn4c :2010/06/01(火) 21:29:18
>>226
ん、確かに誤読は多いことは認めますが、指摘されたらその都度変更をかけています。それが問題でしょうか?
所詮、宿題スレ。知能が高いところじゃないですし。
プライドが高い?んー、そう見えますかね。

229 : ◆QZaw55cn4c :2010/06/01(火) 21:29:58
>>227
そうですね。そうします。

230 :デフォルトの名無しさん:2010/06/01(火) 21:40:45
言い訳と負け惜しみばっかりだなw

231 :デフォルトの名無しさん:2010/06/01(火) 21:43:22
このコテハンと>>230が延々にスレチやってるだけじゃん。消えろ馬鹿

232 :デフォルトの名無しさん:2010/06/01(火) 21:56:38
>>204-207みたいなアホのほうがよっぽどうざいがw

233 :デフォルトの名無しさん:2010/06/01(火) 22:01:13
目くそ鼻くそだろ

234 :デフォルトの名無しさん:2010/06/01(火) 23:16:34
C言語の魅力は何でしょうか?
やはりポインタですか?

235 :デフォルトの名無しさん:2010/06/01(火) 23:18:49
>>234
一番慣れてるところ

236 :デフォルトの名無しさん:2010/06/01(火) 23:20:01
少ないメモリで早く動く気がするところ

237 :デフォルトの名無しさん:2010/06/01(火) 23:20:10
>>235
つまり、C自体の魅力は特に無いが
たまたまCに触れる機会が多かっただけということでしょうか

238 :デフォルトの名無しさん:2010/06/01(火) 23:20:59
うるせえな

239 :デフォルトの名無しさん:2010/06/01(火) 23:22:55
人間にとっての魅力というより機械にとっての魅力だよ

240 :デフォルトの名無しさん:2010/06/01(火) 23:25:01
結局は「機械にとっての魅力」が
その人にとっての魅力と思えるかどうか、という所に行き着くと思います。

241 :デフォルトの名無しさん:2010/06/02(水) 01:10:30
C言語を学ぶ前にアセンブラから勉強したほうがいいでしょうか。
アセンブラ知らずにCのポインタでつまずく人ってたくさんいそうなので。

242 :デフォルトの名無しさん:2010/06/02(水) 01:13:27
そんなくだらん質問してるヒマがあったらプログラムの一つでも作れ

243 :デフォルトの名無しさん:2010/06/02(水) 01:15:58
>>241
ポインタって何か知ってて言ってるの?

244 :デフォルトの名無しさん:2010/06/02(水) 01:20:12
int main(void)
{
char *str = "aiueo";
str = "hoge";
str = "sample";
puts(str); /* "sample"が表示される */
return 0;
}

char *str = "aiueo";で初期化したアドレス、str = "hoge";で代入したアドレスが
分からなくなりましたが、リークするわけでもないので、別に気にしなくていいですか

245 :デフォルトの名無しさん:2010/06/02(水) 01:21:14
>>244
気にしなくていいですよ

246 :デフォルトの名無しさん:2010/06/02(水) 01:21:47
>>243
ポインタとはメモリ上のアドレスを指し示すもの。*を使って関節参照とかできる。
この点は、アセンブラでは*の代わりに()をつかうだろ。それと似てるから参考にはなる。

247 :デフォルトの名無しさん:2010/06/02(水) 01:23:16
>>245
サンクス。勉強になりました。これで心落ちなく眠れそうだわい

248 :デフォルトの名無しさん:2010/06/02(水) 01:26:28
>>246
>>241じゃないよね?

249 :デフォルトの名無しさん:2010/06/02(水) 01:30:03
>>248
241、244、246、247は同じです

250 :デフォルトの名無しさん:2010/06/02(水) 01:31:54
基本情報処理の午後の部でアセンブラを少しかじった程度ですが、
Cを効率よく学習するんだったらアセンブラから先にやっといたほうがよかったかなぁと思いました。

251 :デフォルトの名無しさん:2010/06/02(水) 01:33:36
自分がCのポインタで躓いてると思うのならやれば?人がどうとか関係ないだろ

252 :デフォルトの名無しさん:2010/06/02(水) 01:36:31
>>251
そうですね

253 :デフォルトの名無しさん:2010/06/02(水) 01:36:57
確かにアセンブラをある程度やってからの方がCのポインタはすんなり理解できるだろうな。

254 :デフォルトの名無しさん:2010/06/02(水) 03:58:27
6502 がオススメ。
まあ別に 65816 でも良いけどな。

255 :デフォルトの名無しさん:2010/06/02(水) 06:02:15
はあそうですか

256 :デフォルトの名無しさん:2010/06/02(水) 06:29:49
先生

ポインタがわかりません

257 :デフォルトの名無しさん:2010/06/02(水) 06:33:56
読んで字のごとくpointするものです。

258 :デフォルトの名無しさん:2010/06/02(水) 07:07:56
Javaしかわからん、、、

259 :デフォルトの名無しさん:2010/06/02(水) 07:16:44
char****************************************************************************************

260 :デフォルトの名無しさん:2010/06/02(水) 07:28:39
変数の位置を覚えるもの
それだけ

261 :デフォルトの名無しさん:2010/06/02(水) 07:31:35
初心者はそのような考えでいいかもな

262 :デフォルトの名無しさん:2010/06/02(水) 08:04:04
ttp://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/description.jsp?id=0035&lang=jp
↑の問題に対して
ttp://codepad.org/3rVueIo5

というようなコードを書いたのですがacceptされません。
どこらへんがおかしいのかヒントだけでも教えてくれませんか?
簡単に説明すると、それぞれの対角線に対して、他の2つの点が
同じ側にあるかどうかで判定しているつもりです。

263 :デフォルトの名無しさん:2010/06/02(水) 08:05:43
それともう一つ
ttp://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/description.jsp?id=0045&lang=jp
↑に対してなんですが

#include <stdio.h>
#include <math.h>

int main(){
int mono=0,kane=0,tmono,tkane,t=0;

while(0<=scanf("%d,%d",&tkane,&tmono)){
mono+=tmono;
kane+=(tmono*tkane);
if(tmono!=0)
t++;
}

printf("%d\n%.0lf\n",kane,rint(((double)mono)/((double)t)));
return 0;
}

も通りません。お願いします。

264 :デフォルトの名無しさん:2010/06/02(水) 08:09:21
最後の一つです。
ttp://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/description.jsp?id=0047
↑に対してなんですが

int main() {
char i,j,cup[3]={0,0,1},t;
while(0<=scanf("%c,%c",&i,&j)){
t=cup[i%3];
cup[i%3]=cup[j%3];
cup[j%3]=t;
}
for(i=0;i<3;i++){
switch((int)cup[i]){
case 1:
if(i==0)
printf("B\n");
if(i==1)
printf("C\n");
if(i==2)
printf("A\n");
break;
default:
break;
}
}
return 0;
}
も通りません。お願いします。

265 :デフォルトの名無しさん:2010/06/02(水) 08:29:33
問題見てないけど、
>while(0<=scanf("%c,%c",&i,&j)){
これはダメだろ

266 :デフォルトの名無しさん:2010/06/02(水) 11:42:26
>>262
直線の公式はax+by+c=0の形を使えよ
無駄な条件分けしなくてよくなるぞ

267 :デフォルトの名無しさん:2010/06/02(水) 12:28:36
>>262
&yc

268 :デフォルトの名無しさん:2010/06/02(水) 12:29:00
>>262 6行目のybが2個ある

269 :デフォルトの名無しさん:2010/06/02(水) 12:58:31
>>263
while(2==scanf("%d,%d",&tkane,&tmono))
printf("%d\n%d\n",kane,int(((double)mono)/((double)t)+0.5));
俺の環境では、rint使えないけど↑でどうかな

270 :デフォルトの名無しさん:2010/06/02(水) 18:19:04
昔のpostgres(1996年くらい)のソースに
マクロ定義で、

src/backend/access/index/indexam.c
----------------------------------------
#define GET_REL_PROCEDURE(x,y) \
CppConcat(procedure = relation->rd_am-> ,y); \
if (! RegProcedureIsValid(procedure)) \
elog(WARN, "index_%s: invalid %s regproc", \
CppAsString(x), CppAsString(y))
----------------------------------------
何てのがあるんですが、
relation->rd_am-> ,y)
の部分、->の右辺がないんですが、どういう意味になるんですか?

今のgccでコンパイルしようとすると
does not give a valid preprocessing token
て怒られるんですが、
今のコンパイラの仕様だとどういう表現が妥当なんでしょうか??

271 :デフォルトの名無しさん:2010/06/02(水) 18:27:03
>>270
そうじゃなくて、

CppConcat(procedure = relation->rd_am->y); \

が正しい

272 :デフォルトの名無しさん:2010/06/02(水) 18:27:22
>>270
CppConcatってのが単なるプリプロセッサレベルでの文字列の連結マクロでは?
ttp://archives.postgresql.org/pgsql-bugs/1996-12/msg00004.php

273 :デフォルトの名無しさん:2010/06/02(水) 18:31:31
/*
* CppAsString
* Convert the argument to a string, using the C preprocessor.
* CppConcat
* Concatenate two arguments together, using the C preprocessor.
*
* Note: the standard Autoconf macro AC_C_STRINGIZE actually only checks
* whether #identifier works, but if we have that we likely have ## too.
*/
#if defined(HAVE_STRINGIZE)

#define CppAsString(identifier) #identifier
#define CppConcat(x, y) x##y
#else /* !HAVE_STRINGIZE */

#define CppAsString(identifier) "identifier"

/*
* CppIdentity -- On Reiser based cpp's this is used to concatenate
* two tokens. That is
* CppIdentity(A)B ==> AB
* We renamed it to _private_CppIdentity because it should not
* be referenced outside this file. On other cpp's it
* produces A B.
*/
#define _priv_CppIdentity(x)x
#define CppConcat(x, y) _priv_CppIdentity(x)y
#endif /* !HAVE_STRINGIZE */


274 :デフォルトの名無しさん:2010/06/02(水) 18:34:13
わぁ、なるほどそこまでみてませんでした。
x##y
の表現がなんか問題になってるっぽいですね。


275 :デフォルトの名無しさん:2010/06/02(水) 19:20:44
char *str = "hello,world";
printf("%p\n",str); /* @ */
str1 = "test";
printf("%p\n",str); /* A */
str1 = "hello,world";
printf("%p\n",str); /* B */

上を実行させるとAは@とは異なるアドレスが表示されて予想通りでしたが
Bは@と同じアドレスでした。
いったい何がおこってるのかさっぱりわかりません。

276 :275:2010/06/02(水) 19:21:43
ミスった。こっちです。
char *str = "hello,world";
printf("%p\n",str); /* @ */
str = "test";
printf("%p\n",str); /* A */
str = "hello,world";
printf("%p\n",str); /* B */

277 :デフォルトの名無しさん:2010/06/02(水) 19:27:00
同じ文字列なんだから同じとこから読んだほうが無駄がないだろ?

278 :デフォルトの名無しさん:2010/06/02(水) 19:36:53
細かいな

279 :275:2010/06/02(水) 19:42:11
#include <stdio.h>

int main(void)
{
char *str1 = "hello,world";
char *str2 = "hello,world";
char *str3 = "hello,world";
char *str4 = "hello,world";
char *str5 = "hello,world";

printf("%p\n",str1);
printf("%p\n",str2);
printf("%p\n",str3);
printf("%p\n",str4);
printf("%p\n",str5);
return 0;
}
異なるポインタ変数に渡しているのにアドレスはどれも一緒でした。

280 :デフォルトの名無しさん:2010/06/02(水) 19:47:44
そりゃ、同じアドレス渡してるんだから当たり前、としか言い様がないが。

281 :デフォルトの名無しさん:2010/06/02(水) 19:49:26
どうせ書き換えられないんだから
同じアドレスでも気にする必要ないと思うが

282 :275:2010/06/02(水) 19:56:27
不思議だ。
無駄がないといえば無駄がないが。"hello,world"のアドレスを意識せずにそのまま使えるし・・。

283 :デフォルトの名無しさん:2010/06/02(水) 20:35:17
ポインタと配列の違いくらい身に付けてから書き込めよな

284 :デフォルトの名無しさん:2010/06/02(水) 20:36:56
>>283
あなたひどいことをおっしゃる

285 :デフォルトの名無しさん:2010/06/02(水) 20:41:01
この場合、ポインタと配列の違いは関係ないけどなw

286 :デフォルトの名無しさん:2010/06/02(水) 20:42:11
>>285
ものすごく誤解を招く表現だな

287 :デフォルトの名無しさん:2010/06/02(水) 20:43:10
>>282
同一のリテラルを同じところに配置するかどうかは自由だからだよ。

288 :デフォルトの名無しさん:2010/06/02(水) 20:43:56
バイナリエディタでexe覗いたら、それほど不思議でもないと思うだろうけど
勉強したかったらCOFFとかPEあたりを読んでみるといいね
一応説明すると、文字列とかは.rdataセクション(読み込みのみ許可領域)に配置されるんだけど
コンパイラが同じ物と判断したのは纏めちゃうから、そういう風になる

289 :デフォルトの名無しさん:2010/06/02(水) 22:32:47
>>265-269
無事に前の二つは通りました。
ありがとうございます。

ただやはり>>264がまだ分かりません。
サンプルは通るので、入力の処理は問題ないと思います。

290 :デフォルトの名無しさん:2010/06/02(水) 22:42:29
じゃあこういうのも 1 つに纏められるかな?

char *a="visible", *b="invisible";

あるいはこんなのとか。

char *c="hoge", *d="hoge\0moge", *e="fuga\0hoge";

291 :デフォルトの名無しさん:2010/06/02(水) 22:43:43
>>290
コンパイラ次第でしょ

292 :デフォルトの名無しさん:2010/06/02(水) 22:48:43
>>290
なんでこれまでの流れを見て試そうという気にならなかったの?

293 :デフォルトの名無しさん:2010/06/02(水) 23:11:45
おれのかってでしょ。

294 :デフォルトの名無しさん:2010/06/02(水) 23:31:06
良い表現があったので訂正だけしとく、文字列など→同一リテラル

295 :デフォルトの名無しさん:2010/06/03(木) 00:07:52
>>289
多分scanfの改行の問題かな、応急処置してみた
while(2==scanf("%c,%c%*c",&i,&j))

296 :デフォルトの名無しさん:2010/06/03(木) 04:21:54
なんかもういいです。

297 :デフォルトの名無しさん:2010/06/03(木) 04:29:21
最後の表示部分が冗長だからかな?

298 :デフォルトの名無しさん:2010/06/03(木) 06:35:12
>>295
有難うございました。確かに改行の問題でした。
感謝です。

299 :デフォルトの名無しさん:2010/06/03(木) 07:31:25
>>298
誰なの?(;^_^A アセアセ・・・

300 :デフォルトの名無しさん:2010/06/03(木) 08:31:09
>>300
きもいな

301 :デフォルトの名無しさん:2010/06/03(木) 08:32:18
>>300
そうだね。

302 :デフォルトの名無しさん:2010/06/03(木) 09:04:34
>>300
確かに

303 :デフォルトの名無しさん:2010/06/03(木) 09:40:34
そうだね。確かに>>300きもいな

304 :デフォルトの名無しさん:2010/06/03(木) 09:45:42
>>300のキモさにshit!

305 :300:2010/06/03(木) 09:50:47
いや、俺の方がキモい。

306 :デフォルトの名無しさん:2010/06/03(木) 10:29:39
いやいや、ここは俺が

307 :sage:2010/06/03(木) 13:32:42
%dのdって何由来なんでしょう?

308 :デフォルトの名無しさん:2010/06/03(木) 13:36:23
>>307
decimal

309 :デフォルトの名無しさん:2010/06/03(木) 13:38:17
>>307
仕様書に名前の由来は書いていないから推測でしかないのですが、
decimal


310 :デフォルトの名無しさん:2010/06/03(木) 18:08:35
>>307
母艦がボカーン

311 :デフォルトの名無しさん:2010/06/03(木) 18:58:10
スレチかもしれませんが
RGB値できれいに虹色のグラデーションを表現したいとき
どうやってやるのが綺麗でしょうか?

やっぱり赤・黄・緑・水色・青・紫をならべて
間の値は線形で変化…とかでしょうか

太陽光のスペクトルみたいに自然な感じが理想です


312 :デフォルトの名無しさん:2010/06/03(木) 18:59:08
>>311
これだとダメなん?
ttp://pc12.2ch.net/test/read.cgi/tech/1274827528/16


313 :デフォルトの名無しさん:2010/06/03(木) 19:53:20
>>311
6色しかない…だと?

314 :デフォルトの名無しさん:2010/06/03(木) 20:02:31
>>311
色相でググれ

315 :デフォルトの名無しさん:2010/06/03(木) 21:21:20
scanf関数は標準関数から外すべきだ。
scanfを連続で使おうとすると、前入力した分の\nが勝手に入ってしまう。
誰だよこのバグ関数作った人は。

316 :デフォルトの名無しさん:2010/06/03(木) 21:24:20
>>315
使い方が悪いだけだろ

317 :デフォルトの名無しさん:2010/06/03(木) 22:11:58
\nをお前が入力したからだろ

318 :デフォルトの名無しさん:2010/06/03(木) 22:13:58
>>317
\n入力しない方法を教えてくれよ。
というかscanfの中にfflushいれとけば解決できんじゃね?

319 :デフォルトの名無しさん:2010/06/03(木) 22:22:54
>>318
入力ストリームに対するfflush()は未定義動作だよ

320 :デフォルトの名無しさん:2010/06/03(木) 23:31:19
flush は出力だよな。
なんでこれ使おうとする奴は後を断たないんだろ。


321 :デフォルトの名無しさん:2010/06/03(木) 23:32:03
>>318
Enterキーじゃなくて、CTRL-D

322 :デフォルトの名無しさん:2010/06/03(木) 23:32:41
stdin に rewind( ) するなら、まだ分かるけどな。


323 :デフォルトの名無しさん:2010/06/03(木) 23:46:33
犬アピールうぜえ。
シェアは圧倒的に Win が上なんだから
基本的には Ctrl-Z と言うべきだろ。
ガラパOSごときが自己主張してくんなよ。

324 :デフォルトの名無しさん:2010/06/03(木) 23:49:23
>>323
すげーなおまえw

325 :デフォルトの名無しさん:2010/06/04(金) 00:00:29
ガラパOS、、、超漢字のことを悪く言うもんじゃないよ。

326 :デフォルトの名無しさん:2010/06/04(金) 01:28:59
スーパー301が無かったら日本は、世界はこんな事になってなかったかもしれんのだぞ

327 :デフォルトの名無しさん:2010/06/04(金) 01:57:29
今頃、超漢字の入ったPCを世界中の人が使っていたはずだ

328 :デフォルトの名無しさん:2010/06/04(金) 02:20:47
さすがにそれはないが、Tronを使った家電などは日本中に今も稼動している

329 :デフォルトの名無しさん:2010/06/04(金) 02:23:04
そういやNTベースのネットワークプリンタとかウイルス感染してたな
あれってサービス呼ばないと直せないんだっけか

330 :デフォルトの名無しさん:2010/06/04(金) 02:47:27
>>328
稼働はしているが、割合も実数も確実に減少している。

331 :デフォルトの名無しさん:2010/06/04(金) 03:04:03
1 バイトは 12 ビットにするのがバランス良かったのにな。
せめて 10 ビットは欲しい。
或いは、かな漢字をバイトで表せるように 16 ビットにするという手もあるか。


332 :デフォルトの名無しさん:2010/06/04(金) 03:52:12
じゃあwcharでいいじゃんね

333 :デフォルトの名無しさん:2010/06/04(金) 05:05:41
いいじゃんね

334 :デフォルトの名無しさん:2010/06/04(金) 05:24:14
蓮舫「1バイトにしなければいけない理由はなんでしょうか。2バイトじゃダメなんでしょうか?」

335 :デフォルトの名無しさん:2010/06/04(金) 07:45:00
今の ARM シリーズって、実質32ビットバイトみたいなもんだろ?
それより細かな単位ではメモリアクセスできないし。


336 :デフォルトの名無しさん:2010/06/04(金) 13:41:36
かなりの初心者です
いきなり失礼します

キーボードから直接入力するif文って

#include <stdio.h>
int main(void)
{

int res;
printf("文字いれろ\n");
scanf("%d", &res);
if (res == 1)
printf("はな\n");
printf("んん…\n");
return 0;
}

みたいに半角数字だとできるんですが、
「あああ」などの日本語だとエラーが出て困ってます
char str[100];とかで頑張っても無理でした

res って半角英数のみの対応なんでしょうか?
あとif には res しか使えないのでしょうか?


337 :デフォルトの名無しさん:2010/06/04(金) 13:49:16
>>336
日本語でおk


338 :デフォルトの名無しさん:2010/06/04(金) 13:54:15
>>337
「1 を入れたらこの文が出る」というのはできたのです
『あああ を入れたらこの文が出る』というのができないのです

339 :デフォルトの名無しさん:2010/06/04(金) 14:04:27
「あああ」の前に「Hello」ができるようになってから質問にこい。

340 :デフォルトの名無しさん:2010/06/04(金) 14:10:11
入力された文字列が「あああ\n」に等しいかをgetch で一文字ずつ見ていく。

341 :デフォルトの名無しさん:2010/06/04(金) 14:12:05
>>339
Hello自体は出力できるのですが、やはりifをつけると無理って言われます



342 :デフォルトの名無しさん:2010/06/04(金) 14:13:01
その判定してるコードを貼れよ

343 :デフォルトの名無しさん:2010/06/04(金) 14:14:39
どんな「エラーがでて困って」いるか言ってみろよ。

344 :デフォルトの名無しさん:2010/06/04(金) 14:16:03
>>341
だから半角英数文字列の Hello ができようになってから質問しろよ
それができないのに全角とか無理

345 :デフォルトの名無しさん:2010/06/04(金) 14:47:35
すみません、C言語をCGIにしてWEBアプリケーションを作ったのですが
SSLを導入しようと考えており、その際はベリサインなどに
申し込まないといけないのでしょうか?

346 :デフォルトの名無しさん:2010/06/04(金) 14:56:35
>>345
とりあえず動けばよいのなら不要
一般公開して信頼されたいのであればあったほうがいい
限定公開とかなら、クライアント側で個別で証明書をインストールしてもらうことも可能

347 :デフォルトの名無しさん:2010/06/04(金) 15:09:00
今、調べたんですがプライベート内なら自宅CAとか可能?みたいですね

一応、目的としては商業ホームページで公開する予定です

そうですか、となるとベリサインなどに申し込む必要ありですね
サンクスですた!

348 :デフォルトの名無しさん:2010/06/04(金) 17:52:08
C言語と全く関係ないな…

349 :デフォルトの名無しさん:2010/06/04(金) 19:47:26
>>347
ベリサインってたしか試験用に証明書発行してくれる

350 :デフォルトの名無しさん:2010/06/04(金) 20:36:07
>>336
俺もかなり初心者なのでえらそうなことはいえないが。
scanf("%d", &res); はキーボードから入力された整数の値をresという変数に代入するものです
>res って半角英数のみの対応なんでしょうか?
よってresには半角数字のみ対応です。英数の"英"は対応してない。
「あああ」などの文字列を比較したい場合は、strcmpを使おう。
用途は検索して調べてね

351 :デフォルトの名無しさん:2010/06/04(金) 20:48:20
もう今後は初心者は scanf より gets だけ使えよ。


352 :デフォルトの名無しさん:2010/06/04(金) 20:49:26
もう今後は初心者は文字列型があって動的型付けの言語使えよ

353 :デフォルトの名無しさん:2010/06/04(金) 21:13:12
>>336
#include <stdio.h>
int main(void)
{
int res;
printf("数字を入力して下さい: 1 or 2 : ");
scanf("%d",&res);
if (res==1)printf("はな\n");
else printf("んん\n");
return 0;
}

#include <stdio.h>
int main(void)
{
char res[100];
printf("文字を入力して下さい:");
scanf("%s",res);
printf("%s\n",res);
return 0;
}

354 :デフォルトの名無しさん:2010/06/04(金) 23:26:11
/*
* This define all the handler that the driver export.
* As you need only one per driver type, please use a static const
* shared by all driver instances... Same for the members...
* This will be linked from net_device in <linux/netdevice.h>
*/
struct iw_handler_def {
    /* Array of handlers for standard ioctls
     * We will call dev->wireless_handlers->standard[ioctl - SIOCIWFIRST]
    */
    const iw_handler * standard;
    /* Number of handlers defined (more precisely, index of the
    * last defined handler + 1) */
    __u16    num_standard;

#ifdef CONFIG_WEXT_PRIV
    __u16    num_private;
    /* Number of private arg description */
    __u16    num_private_args;
    /* Array of handlers for private ioctls
     * Will call dev->wireless_handlers->private[ioctl - SIOCIWFIRSTPRIV]
     */
    const iw_handler * private;

    /* Arguments of private handler. This one is just a list, so you
     * can put it in any order you want and should not leave holes...
     * We will automatically export that to user space... */
    const struct iw_priv_args * private_args;
#endif

};

355 :354:2010/06/04(金) 23:27:42
struct iw_handler_def p80211wext_handler_def = {
    .num_standard = sizeof(p80211wext_handlers) / sizeof(iw_handler),
    .num_private = 0,
    .num_private_args = 0,
    .standard = p80211wext_handlers,
    .private = NULL,
    .private_args = NULL,
#if WIRELESS_EXT > 16
    .get_wireless_stats = p80211wext_get_wireless_stats,
#endif
};

この . の意味がわからない。
これはどういう効果の演算子なのですか?

356 :デフォルトの名無しさん:2010/06/04(金) 23:54:55
手元VC6しかないからわかんないけど、gccの拡張?
多分、構造体のメンバの初期化を名指しでやっているんだと思うんだけど。

357 :デフォルトの名無しさん:2010/06/04(金) 23:57:16
指示付きの初期化子はC99なんだからgcc拡張とか言ってやるなよ

358 :デフォルトの名無しさん:2010/06/05(土) 00:08:15
普通にCって言ったとき、C99は含まれていないほうが多い気がする。

359 :デフォルトの名無しさん:2010/06/05(土) 00:09:14
C99をサポートしてる書籍もコンパイラも限定されてるから

360 :デフォルトの名無しさん:2010/06/05(土) 00:10:34
で?

361 :デフォルトの名無しさん:2010/06/05(土) 00:13:10
最近「で?」とだけレスするの流行ってるの?

362 :デフォルトの名無しさん:2010/06/05(土) 00:39:59
流行ってないよ。何で流行ってると思ったの?

363 :デフォルトの名無しさん:2010/06/05(土) 00:40:48
よく見かけるからさ

364 :デフォルトの名無しさん:2010/06/05(土) 00:47:03
で?

365 :デフォルトの名無しさん:2010/06/05(土) 01:24:22
struct iw_handler_def p80211wext_handler_def;

p80211wext_handler_def.num_standard = sizeof(p80211wext_handlers) / sizeof(iw_handler);
p80211wext_handler_def.num_private = 0;
p80211wext_handler_def.num_private_args = 0;
p80211wext_handler_def.standard = p80211wext_handlers;
p80211wext_handler_def.private = NULL;
p80211wext_handler_def.private_args = NULL;
#if WIRELESS_EXT > 16
p80211wext_handler_def.get_wireless_stats = p80211wext_get_wireless_stats;
#endif



つまりこういうこと?
だとしたら宣言直後に各メンバに一個一個代入してくように書き換えれば同じ意味?


366 :デフォルトの名無しさん:2010/06/05(土) 02:02:12
変数がconstでもメンバの並びが変わっても安心

367 :デフォルトの名無しさん:2010/06/05(土) 02:20:18
メンバの並びは関係ないだろ

368 :デフォルトの名無しさん:2010/06/05(土) 02:25:32
const付けて初期化してみろよ

369 :デフォルトの名無しさん:2010/06/05(土) 02:44:38
メンバの並びは関係あるだろっていうかちゃんと意味があるだろ

370 :デフォルトの名無しさん:2010/06/05(土) 04:53:53
やーだー

371 :デフォルトの名無しさん:2010/06/05(土) 10:33:46
普通にローカル変数を宣言したあとに、このまま初期化せずに値を参照してはいけないという話をきくがなぜですか。
ゴミを参照したって別に罰があたりませんよね?

372 :デフォルトの名無しさん:2010/06/05(土) 10:36:43
それはうんこしてもけつふかなくていいというならごかってに

373 :デフォルトの名無しさん:2010/06/05(土) 10:39:01
買ってきたばかりの食器を洗わずに使うとか。

374 :デフォルトの名無しさん:2010/06/05(土) 10:41:49
int rand() {
 int n;
 return n;
}

375 :デフォルトの名無しさん:2010/06/05(土) 10:42:23
たとえが不適切ですがちゃんと初期化で洗ってやりますよ

376 :372:2010/06/05(土) 10:44:04
int i=0;
scanf("%d%*c", &i); /* "1" */
printf("%d", i);

377 :デフォルトの名無しさん:2010/06/05(土) 10:44:32
手術で執刀部位を目をつぶって気分で決めるようなものだな

378 :デフォルトの名無しさん:2010/06/05(土) 11:14:26
>>371
実際使う限りは適当な値が入ってるだけだが、
Cの規格でその操作は未定義と決まってる(未定義というのはなにが起こるってもしらねーぞっていうような意味)
のでやっちゃいけないというわけ

379 :デフォルトの名無しさん:2010/06/05(土) 11:23:19
>378
規格のどこに>371が未定義であると書いてあるのか教えてください

380 :デフォルトの名無しさん:2010/06/05(土) 12:17:23
別にやっちゃいけないわけではない

381 :デフォルトの名無しさん:2010/06/05(土) 12:38:07
確かにやっちゃいけないわけじゃない
やっちゃいけないって書いてあるのは規格じゃなくてコーディング規約か

382 :デフォルトの名無しさん:2010/06/05(土) 13:12:54
>>378
未定義なの?俺も規格のどこに書かれてるのか知りたい

383 :デフォルトの名無しさん:2010/06/05(土) 13:15:24
未定義になる言語もある

384 :デフォルトの名無しさん:2010/06/05(土) 13:38:25
どの言語?

385 :デフォルトの名無しさん:2010/06/05(土) 13:40:34
動的型付けの言語

386 :378:2010/06/05(土) 13:42:28
ごめんC Q&A読んだだけの初心者が知ったかしてただけなんで
どこに書いてあるとか知らない
まさかそんな突っ込まれるとは思わなかった

ttp://www.st.rim.or.jp/~phinloda/cqa/cqa7.html

387 :デフォルトの名無しさん:2010/06/05(土) 14:27:25
>>386
なるほど、未定義の例に「初期化されていない auto 変数の読みだし。」ってあるね

http://www.jpcert.or.jp/sc-rules/c-exp33-c.html
ここだと不定になってるみたい。C89とC99の違いなんかな

388 :デフォルトの名無しさん:2010/06/05(土) 15:58:34
ff

389 :デフォルトの名無しさん:2010/06/05(土) 16:00:14
ちょっと、またわけのわからないことになりました。
while(〜〜〜〜){scanf("%d",&a);
scanf("%c",&b);}

だとエラーになるんですがなぜですか?
繰り返しなんだから
制御式満たして文字打ち込めば永遠に改行されるはずなのに
・・・なぜでしょう?

390 :デフォルトの名無しさん:2010/06/05(土) 16:10:44
エラーが出たらエラーメッセージも貼りましょう。
出来る限りソース全文をあげましょう。

391 :デフォルトの名無しさん:2010/06/05(土) 16:13:44
scanf("%d%*c",&a);
改行が読み飛ばされる
scanfのエラー戻り値はEOF以外の場合0

392 :デフォルトの名無しさん:2010/06/05(土) 16:16:52
>>390
いやエラーは出てないのよ。
でも実行したら止まってる。
繰り返しかもしれんが
scanfの繰り返しは入力→改行→改行だろう。
変数の文字型が違うからばぐったのかな?
とりあえずプログラム自体に意味はない。
形式が試せるか確かめただけ。

#include<stdio.h>
int main(void){
int a;
char b;
while(a != 3)scanf("%d",&a);
scanf("%c",&b);
}

393 :デフォルトの名無しさん:2010/06/05(土) 16:22:20
「エラーになる」と「自分が思うように動作しない」は違います。使い分けましょう。

394 :デフォルトの名無しさん:2010/06/05(土) 16:23:07
>scanfの繰り返しは入力→改行→改行だろう。
なにを言ってるかわからない

395 :デフォルトの名無しさん:2010/06/05(土) 16:25:20
>>394
whileは繰り返し構文でしょ?
何故何をいってるのか分からないのか。
実行↓
3
3
3
3
3
3
3
こうやって永遠入力したい。

396 :デフォルトの名無しさん:2010/06/05(土) 16:26:27
お前がループ構文の条件というものを相変わらず理解してないことはわかった。

397 :デフォルトの名無しさん:2010/06/05(土) 16:27:27
また>>4かw

398 :デフォルトの名無しさん:2010/06/05(土) 16:27:30
>>396
え?何でですか?

399 :4:2010/06/05(土) 16:28:34
>>397
何故わかったwwwwwwwwwwwwwwww

気を使って1週間来なかったんだよ。
さすがに教えてくれよ。


400 :デフォルトの名無しさん:2010/06/05(土) 16:28:42
aに3を入力する
a!=3が0になる
ループから抜ける

401 :デフォルトの名無しさん:2010/06/05(土) 16:29:39
            ___
       /      \
      /ノ  \   u. \ !?
    / (●)  (●)    \
    |   (__人__)    u.   |
     \ u.` ⌒´      /
    ノ           \
  /´               ヽ
 |    l              \
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))


         ____
       /      \!??
      /  u   ノ  \
    /      u (●)  \
    |         (__人__)|
     \    u   .` ⌒/
    ノ           \
  /´               ヽ
 |    l              \
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))


402 :4:2010/06/05(土) 16:31:50
>>401
まさに私の状況・・・

>>396
条件を満たせば永遠に実行でしょ。






403 :デフォルトの名無しさん:2010/06/05(土) 16:33:56
満たしてないからw

404 :391:2010/06/05(土) 16:35:52
文字じゃなくて、数字入れてみろX

405 :4:2010/06/05(土) 16:36:44
>>404
文字じゃないとだめなの

406 :デフォルトの名無しさん:2010/06/05(土) 16:36:45
aに3を入力すると
a!=3が満たされるとな?

407 :4:2010/06/05(土) 16:38:09
>>406
あぁたまたたまかぶっただけ

a != 3

??
a
$%
45
3323
`
C
d
323
d
333

とこんな風にしたい。

408 :デフォルトの名無しさん:2010/06/05(土) 16:39:04
とりあえずaを初期化しろ

409 :デフォルトの名無しさん:2010/06/05(土) 16:39:48
こんな風って、それで何がわかると思うんだよw

410 :デフォルトの名無しさん:2010/06/05(土) 16:40:28
>>392
おまえ質問者ならもっと丁寧な言葉を使え


411 :デフォルトの名無しさん:2010/06/05(土) 16:40:43
永遠に入力ループしたいだけなら
while(1)
でいいんじゃね?

412 :4:2010/06/05(土) 16:51:32
>>411
実際は繰り返し入力した数字を足したいんですが。

でもwhileの(制御式)はいいんだけど
{}の中身が複雑になりすぎて・・・

どうしたらいいんだ・・もう死にたい。

413 :デフォルトの名無しさん:2010/06/05(土) 16:53:02
>>410
俺はそいつとは違うけど、こんなところで威張り散らしてどうすんだよ・・・・
どんだけリアルで人から敬われてないんだよ

414 :デフォルトの名無しさん:2010/06/05(土) 16:53:07
>でもwhileの(制御式)はいいんだけど
ちっともよくないぞw

415 :デフォルトの名無しさん:2010/06/05(土) 16:53:09
aが初期化されてないから
aが最初から3ならループに入りすらしないよね

416 :デフォルトの名無しさん:2010/06/05(土) 16:54:01
>>412=>>413
分かりやすい自演はすんなよw

417 :4:2010/06/05(土) 16:56:04
>>416
おれは>>413
じゃねぇよ。お願いだから(・・・・)ぱくんな。
俺の特許じゃ。

418 :デフォルトの名無しさん:2010/06/05(土) 16:56:47
少し外に出て頭冷やして見直せ

419 :413:2010/06/05(土) 16:57:34
>>416
いや、悪いけど本当に違うよ。

420 :デフォルトの名無しさん:2010/06/05(土) 16:59:17
3じゃなく4とか2は入れてみなかったのか。

421 :デフォルトの名無しさん:2010/06/05(土) 17:00:04
>>412
死んでいいよ

422 :デフォルトの名無しさん:2010/06/05(土) 17:00:28
>>412
あ〜、それアキュムレータってやつだ

Revenge of the Nerds
http://practical-scheme.net/trans/icad-j.html

に最近の言語のサンプルがあるよ。ちなみにpythonについては↓の方が的確

On the Relationship Between Python and Lisp
http://practical-scheme.net/trans/IsPythonLisp-j.html

423 :4:2010/06/05(土) 17:04:28
>>418
一週間考えて分からなかったんだが・・・
>>420
whileとscanfは組み合わせ無理なんすか?

プログラム
実行↓
8
9
3
4
3
6
合計=33
whileつかってね。






424 :デフォルトの名無しさん:2010/06/05(土) 17:05:21
>>423
宿題か?
一週間経ったのならそろそろ答え合わせとかしたんじゃないの

425 :デフォルトの名無しさん:2010/06/05(土) 17:05:59
http://codepad.org/
全文張ってみたらどうだ、隠してる中に答えがありそうだが

426 :4:2010/06/05(土) 17:07:53
>>424
宿題。
答え合わせないよ。
まだ終わってない人いるからね。


427 :デフォルトの名無しさん:2010/06/05(土) 17:08:21
int i = 0, sum = 0, n;

while(i < 6) {
scanf("%d", &n);
sum += n;
i = i + 1;
}

printf("%d\n", sum);

428 :4:2010/06/05(土) 17:08:50
うん、早く教えて

429 :425:2010/06/05(土) 17:08:58
http://codepad.org/KMyKN4kA

430 :4 ◆nNHcoCEvyo :2010/06/05(土) 17:11:14
>>428
まじでやめろ

>>427
ありがとうございます。
いや、項の数は任意がいいんですが・・・
実際そのプログラムは作ったんです。

431 :デフォルトの名無しさん:2010/06/05(土) 17:12:13
終了条件がわからないとどうしようもないが

432 :デフォルトの名無しさん:2010/06/05(土) 17:12:56
while(scanf("%d", &n)==1) sum += n;

433 :デフォルトの名無しさん:2010/06/05(土) 17:15:00
というか宿題の意味なしてないし、宿題なら宿題スレに行けよ

434 :4 ◆nNHcoCEvyo :2010/06/05(土) 17:15:23
>>431
0を足したところで終了
またcharで演算子=をつけたところで終了
がいいかなぁと思うんですが。
そのためのchar

435 :デフォルトの名無しさん:2010/06/05(土) 17:16:04
while(a!=3)
って日本語でいうと?

436 :デフォルトの名無しさん:2010/06/05(土) 17:17:15
#include<stdio.h>
int main(void){
int a=0,b=0;
while(1)
{
scanf("%d",&a);
b+=a;
if (!a)break;
}
printf("%d\n",b);
return 0;
}
入力が0で終わり。

437 :4 ◆nNHcoCEvyo :2010/06/05(土) 17:19:21
>>436
ありっす・・・
ところで
while(1)ってなんですか?
習ってません。

return 0;も習ってない・・・

学校の教えとしてC言語の参考書は先読みしないようにって
言われてるんです。


438 :デフォルトの名無しさん:2010/06/05(土) 17:22:19
whileも関数も知らずに質問するから、意味不明なことになる

439 :デフォルトの名無しさん:2010/06/05(土) 17:23:23
#include <stdio.h>

int
main(void)
{
  int a = 0;
  int b = 0;

  do {
    scanf("%d", &a);
    b += a;
  } while (a != 0)

  printf("%d\n", b);
  return 0;
}

俺の嫌いなdo-while文.

440 :デフォルトの名無しさん:2010/06/05(土) 17:23:44
というか高校?大学だと参考書の先読みするなとか言う以前に入学の時から書けるやついるだろ
先読みさせないのは差が開くばかりだと思うんだが

441 :デフォルトの名無しさん:2010/06/05(土) 17:27:04
>>437
while (1)は無限ループ、for (;;)と同じ。break文で抜け出す。
return 0;は問題なく終わったとき0を返す。
先読みした方が楽しいよ。

442 :デフォルトの名無しさん:2010/06/05(土) 17:27:56
先読み禁止なんて小学生までだろw

443 :デフォルトの名無しさん:2010/06/05(土) 17:28:21
っていうか先読みするなって言われたとおりにしてる時点でそんなにプログラミングに興味ないんじゃね

444 :4 ◆nNHcoCEvyo :2010/06/05(土) 17:28:32
>>439
ありっす。
char

=を入力したときにプログラム終了させるには?

>>440
高校なわけねぇだろwww
こんな高度なことしねぇっすよ・・・
先読みさせないは嘘だよ・・・忘れてくれ。

445 :デフォルトの名無しさん:2010/06/05(土) 17:29:24
つか先読みせんでwhile使えってどーゆーことよ。

446 :4 ◆nNHcoCEvyo :2010/06/05(土) 17:30:30
先読みさせないは高校の先生の言ってたことね。
大学の先生はそんなこと言わない。

でも大学でも知ってることだけで作業するってのがクレバーなんだと思う。
時間をかけて演繹的にやる方法は確実だけど要領が悪いと思う。

447 :391:2010/06/05(土) 17:31:20
#include<stdio.h>
int main(void){
int a=1, sum=0;
while(a != 0) {
a = 0;
scanf("%d", &a);
sum += a;
}
printf("%d\n", sum);
}

448 :デフォルトの名無しさん:2010/06/05(土) 17:31:21
4の現在の質問ってどこから始まってるの?

>>4ではないんだよね?

449 :デフォルトの名無しさん:2010/06/05(土) 17:31:49
>こんな高度なことしねぇっすよ・・・
なんの冗談だよw

450 :デフォルトの名無しさん:2010/06/05(土) 17:32:00
大学生なら自分で進んで勉強しろよ。

451 :デフォルトの名無しさん:2010/06/05(土) 17:32:16
電卓作ってるなら他の演算子の判定も入れたりできるけど
別に数式を描くわけでもないのに'='だけのために文字型で受け取って
数文字か'='かその他の文字かを判定するのは少し馬鹿らしい

>>446
何も知らない奴が知ってることだけでってw
お前教科書以外にプログラミングの本読まないわけ?
その時点で周りに差をどんどん付けられてるぞ

452 :デフォルトの名無しさん:2010/06/05(土) 17:35:03
どれが4でないか教えてほい

453 :デフォルトの名無しさん:2010/06/05(土) 17:36:59
普通に授業出て理解できてればこんなところに質問には来ないと思うんだ。

454 :デフォルトの名無しさん:2010/06/05(土) 17:38:08
でもここは宿題スレじゃないし、あまつさえ質問スレであるかどうかも疑わしい

455 :4 ◆nNHcoCEvyo :2010/06/05(土) 17:41:44
>>450
それは恥ずかしいです。確かに夏休みは遅れ取り戻しの勉強はするが
先取り学習は絶対しないと決めてる。先取り学習したら応用力が身に付かない
と思う。
>>453
最低限のことしかかいてないし、応用課題ばかりな件。
プログラム得意な奴もエラー多発で挫折してる・・・


そろそろバイトだから落ちるけど、まじで東大の数学より
プログラムのほうがむずいわww

456 :デフォルトの名無しさん:2010/06/05(土) 17:42:36
大学生なのに夏休みにプログラミングするのかww
情報学科?

457 :デフォルトの名無しさん:2010/06/05(土) 17:44:05
> 東大の数学より
> プログラムのほうがむずいわww

Fランの俺に謝れ\(^o^)/

458 :デフォルトの名無しさん:2010/06/05(土) 17:44:09
普通にするだろw
サークルの温泉旅行にもノートPCくらい持ってくわ

459 :デフォルトの名無しさん:2010/06/05(土) 17:45:54
サークルの温泉旅行なのにプログラミングってどんだけ暗いんだよ

460 :デフォルトの名無しさん:2010/06/05(土) 17:46:43
東大のCの講義なら、この時期こんな低レベルなことやってないだろうがなw

461 :デフォルトの名無しさん:2010/06/05(土) 17:48:56
>>460
うちの大学にいる
「東工大の講義なら、この時期こんな低レベルなことやってないだろうがなw」
とか言ってた東工大出身の教員が

全然プログラム書けなくてワロタ

462 :デフォルトの名無しさん:2010/06/05(土) 17:49:00
>>459
プログラミングが暗いとか言ってる時点で、住む世界が違う

463 :デフォルトの名無しさん:2010/06/05(土) 17:49:41
>>462
えっ、何その上から目線・・・・

464 :デフォルトの名無しさん:2010/06/05(土) 17:50:47
自称東大だの「住む世界が違う(キリッ」だの・・・・

ウザすぎだろここの奴ら

465 :デフォルトの名無しさん:2010/06/05(土) 17:50:57
>>455←こいつ高校時代の教師にヤバイ思想を刷り込まれてるな。学問に向いてないよ

466 : ◆nNHcoCEvyo :2010/06/05(土) 17:58:05
>>465
理系だけど別に研究職つくつもりは毛頭ないんで^^
高校の教員目指してるんで。
>>447
何故
intにa,sum二つ変数使うんですか?
aだけでよくないですか?


467 :デフォルトの名無しさん:2010/06/05(土) 18:06:04
理解力に欠ける人間は生徒の言うことが理解できずに押し付けるだけのカス教師にしかなれないだろ。

468 :デフォルトの名無しさん:2010/06/05(土) 18:07:00
>>466
お前それで自分の生徒にまたその考えを植えつけるのか
理系ならポリアの「いかにして問題をとくか」とか読めよ。これはプログラマの推薦図書でもあるし
あとその本にインスパイアされた「数学ガール」も読んどけ、読みやすいから。
知らないことは出来なくて良いのだろうか調べれば分かることなのに。
実際お前は2chに質問してるわけだろ?つまり他力本願なやり方で調べている。矛盾してるよ
お前には何にしろ教わりたくないなあ

469 :デフォルトの名無しさん:2010/06/05(土) 18:07:07
>>466
入門書とかK&Rとか読むといいと思うよ?


470 :デフォルトの名無しさん:2010/06/05(土) 18:07:44
請求書を例に考えてみるといいsumは合計

471 :デフォルトの名無しさん:2010/06/05(土) 18:10:14
>>469
K&Rは初心者には勧められないらしいよ。古くもあるしもともと初心者向けに書かれてないって
上手くまとめてあるからとりあえず持っとくと良いらしいが

472 : ◆nNHcoCEvyo :2010/06/05(土) 18:10:56
#include<stdio.h>
int main(void){
int a = 0;
while(a != 0) {
a = 0;
scanf("%d", &a);
a += a;
}
printf("%d\n", a);
}
これでいいような気がしますが・・・・

473 :デフォルトの名無しさん:2010/06/05(土) 18:11:44
                    らしい
                          らしい

474 :デフォルトの名無しさん:2010/06/05(土) 18:12:11
馬鹿の考え休むに似たりって諺がこれほどぴったり当てはまるのも珍しいw

475 :デフォルトの名無しさん:2010/06/05(土) 18:12:44
a = a + a でいいのか?

476 :デフォルトの名無しさん:2010/06/05(土) 18:13:40
>>474
反論を恐れてアンカーも付けられないヘタレに言われたくないw

477 :デフォルトの名無しさん:2010/06/05(土) 18:14:26
突っ込みどころしかないが、面白かったのは

>int a = 0;
>while(a != 0) {

ここw

478 :デフォルトの名無しさん:2010/06/05(土) 18:14:33
まずループに入らない。
仮に入れたとしてもscanf()でaを読み込んだ時点でそれまでの合計が消える。

479 :デフォルトの名無しさん:2010/06/05(土) 18:15:28
>>476
アンカーもなにも、この流れで馬鹿っていったら◆nNHcoCEvyo以外にはいないだろw

480 :デフォルトの名無しさん:2010/06/05(土) 18:16:06
>>473
これは本当だよ。K&R読んだことある?

481 :デフォルトの名無しさん:2010/06/05(土) 18:17:40
自分も絶賛大学生なんだができない奴に限って変数を作らない。
メモリ気にしてるのかは知らんがそんなのできてからの話だろ?

482 :デフォルトの名無しさん:2010/06/05(土) 18:18:17
>>480
K&R読んだことあるよ。

本当ならなぜ伝聞推定の助動詞を使うんだ?

483 :デフォルトの名無しさん:2010/06/05(土) 18:19:44
>>482
俺は読んだことないから。でも一般的な批判だから教えてやったんだよ

484 :デフォルトの名無しさん:2010/06/05(土) 18:20:33
自称東大だしキモすぎるだろ>>4

485 :デフォルトの名無しさん:2010/06/05(土) 18:20:54
なんだ。読んだこと無いヤツの聞き込みか。

486 :デフォルトの名無しさん:2010/06/05(土) 18:21:15
というか、どんな本であれ正しく理解できるとは到底思えない
勝手な俺解釈をもとにしておかしいおかしい言うだけだろ

487 :デフォルトの名無しさん:2010/06/05(土) 18:22:42
>>485
コラム:C言語の聖書? K&R
http://homepage3.nifty.com/mmgames/c_guide/c_kandr.html

読んだ人に聞きたいけど、これに反論ある?

488 :デフォルトの名無しさん:2010/06/05(土) 18:23:36
別に少ない情報だけから考えるというのはいい頭の訓練になるし、
そもそも宿題で教えてない事やると怒られるだけだろうけど、
先読みしてもその情報を使わなければいいだけだな

先読み禁止とか、智への深い渇望が感じられないな
そういう奴に共通するセリフは
「〜だから俺は〜しなくても構わない」という類いのセリフだな

俺は面白そうだからと別学科の授業も沢山受けたもんだ

489 :デフォルトの名無しさん:2010/06/05(土) 18:25:46
理解する前に先に進んでも意味ないから
こいつは先読みする以前の問題だ

490 :デフォルトの名無しさん:2010/06/05(土) 18:25:51
>>487
権威を叩いて自分の権威を高めようという小物の意図がミエミエ

491 :デフォルトの名無しさん:2010/06/05(土) 18:30:08
>>490
じゃあダイクストラの"Go To Statement Considered Harmful"はどうよ?
当時一般的なgo to文を叩く小物?ダイクストラは大物だから叩いてもおk?
問題は中身だと思うのだが

492 :デフォルトの名無しさん:2010/06/05(土) 18:30:22
>>487
ポインタがよく理解できてないアホの寝言にしか見えないw

493 :デフォルトの名無しさん:2010/06/05(土) 18:31:13
初心者に勧めるのに適切かという議論から逸れてる

494 :デフォルトの名無しさん:2010/06/05(土) 18:31:20
初心者にいきなり難しい参考書を読ませようとする人はアホなの?

495 :デフォルトの名無しさん:2010/06/05(土) 18:32:08
理系なら良いけど文系には当てはまらない考え方だな>自分から率先して〜

496 :デフォルトの名無しさん:2010/06/05(土) 18:33:35
文系って普段なにやってるの?

497 :デフォルトの名無しさん:2010/06/05(土) 18:33:45
コンパ

498 :デフォルトの名無しさん:2010/06/05(土) 18:34:09
他にもっと簡単な参考書があるかもしれないが、K&Rが難しいってわけでもないだろ。
K&RでCを始めた人間がこの世にゴマンと居るのだから、別にK&Rで初めることに一切問題はない。

499 :デフォルトの名無しさん:2010/06/05(土) 18:34:26
理系がコードをコンパイルしてる間にも、文系はコンパとな?

500 :デフォルトの名無しさん:2010/06/05(土) 18:34:27
文系でもやるヤツは自分から先に進むけど。

501 :デフォルトの名無しさん:2010/06/05(土) 18:35:18
>>496
っていうか堂々と「大学は勉強する場所じゃない」とか言っちゃうのが文系
うちの親父とかもそう

502 :デフォルトの名無しさん:2010/06/05(土) 18:35:59
>>500
いや、そりゃそうだけど例外を一般化してどうすんのっていう
文系は一般的には学問的姿勢が身についてないどころか真っ向から逆らってる感じ

503 :デフォルトの名無しさん:2010/06/05(土) 18:36:27
お前は文系とか学問の何を知ってるんだ?w

504 :デフォルトの名無しさん:2010/06/05(土) 18:36:50
有名大学生なら、K&Rからでいいんじゃないの?


505 :デフォルトの名無しさん:2010/06/05(土) 18:41:09
>>503
逆にお前はそれらについて何を知ってるの?
そういうこと聞き出すのって詭弁じゃねーの?

506 :デフォルトの名無しさん:2010/06/05(土) 18:41:54
K&Rから始められないようなレベルで理系大学生ってのが大問題な気もするが。

507 :デフォルトの名無しさん:2010/06/05(土) 18:43:30
大昔の名著を教科書にする教授いるよな。もう書式とか言葉遣いまで古いの。アホかと

508 :デフォルトの名無しさん:2010/06/05(土) 18:43:49
>>4みたいなのが理系大学生なんだから、理系って底抜けのアホだよねw

509 :デフォルトの名無しさん:2010/06/05(土) 18:44:41
あ、このスレにも文系がいるのか

510 :デフォルトの名無しさん:2010/06/05(土) 18:46:07
>>508
一般と特殊を区別できないお前が底抜けのアホだろ。

511 :デフォルトの名無しさん:2010/06/05(土) 18:47:01
>>508
>>4と同列にされたら理系学生もキレるわなww

512 :デフォルトの名無しさん:2010/06/05(土) 18:47:56
文系・理系でわけることに意味ないだろ。
底辺理系より一流文系のほうが上だし。

513 :デフォルトの名無しさん:2010/06/05(土) 18:48:20
whileの意味くらい先読みせんでもわかるよなふつー。

514 :デフォルトの名無しさん:2010/06/05(土) 18:48:56
>>512
その比較自体、文系がかわいそうだよ

515 :デフォルトの名無しさん:2010/06/05(土) 18:49:53
つか文系ならwhile(a!=3)がわからないってどうなのよ

516 :デフォルトの名無しさん:2010/06/05(土) 18:50:20
理系は実験やらなんやらで色々大変そうだなー、ってのが文系だった俺のイメージ。
文系は手抜こうと思ったらどこまでも抜けるからな。

517 :デフォルトの名無しさん:2010/06/05(土) 18:51:35
自分で抜かなくてもいいしな。

518 :デフォルトの名無しさん:2010/06/05(土) 18:52:52
>>517

      ィ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;゙t,
     彡;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ヽ
     イ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;r''ソ~ヾ:;;;;;;゙i,
     t;;;;;;;リ~`゙ヾ、;;;;;;;;;;;;;;;;;;;;ノ    i,;;;;;;!
     ゙i,;;;;t    ヾ-‐''"~´_,,.ィ"゙  ヾ;;f^!   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     ト.;;;;;》  =ニー-彡ニ''"~´,,...,,.  レ')l. < おまえは何を言っているんだ
     t゙ヾ;l   __,, .. ,,_   ,.テ:ro=r''"゙ !.f'l.   \____________
      ヽ.ヽ ー=rtσフ= ;  ('"^'=''′  リノ
    ,,.. -‐ゝ.>、 `゙゙゙゙´ ,'  ヽ   . : :! /
 ~´ : : : : : `ヽ:.    ,rf :. . :.: j 、 . : : ト、.、
 : : : : : : : : : : ヽ、  /. .゙ー:、_,.r'゙: :ヽ. : :/ ヽ\、
  :f: r: : : : : : : : !丶  r-、=一=''チ^  ,/   !:: : :`丶、_
  : /: : : : : : : : :! ヽ、  ゙ ''' ''¨´  /   ,i: : : l!: : : : :`ヽ、
 〃: :j: : : : : : : ゙i   `ヽ、..,,__,, :ィ"::   ,ノ:: : : : : : : : : : : :\
 ノ: : : : : : : : : : :丶   : : ::::::::: : : :   /: : : : : : : : : : : : : : : :\


519 :デフォルトの名無しさん:2010/06/05(土) 18:53:04
そもそも!=がなんのことかわかってねぇだろ。

520 :デフォルトの名無しさん:2010/06/05(土) 18:54:11
ああ、理系って可愛い女の子すっごい少ないよね
クラスに一人とかで、ほぼ不細工w

521 :デフォルトの名無しさん:2010/06/05(土) 18:54:37
いや、そうでもないよ。

522 :デフォルトの名無しさん:2010/06/05(土) 18:55:49
お前ら彼女居るの?

523 :デフォルトの名無しさん:2010/06/05(土) 18:56:33
馴れ合いスレになって来たんだが?文系のせい?

524 :デフォルトの名無しさん:2010/06/05(土) 18:57:45
学力にコンプレックスがあるんじゃない?

525 :デフォルトの名無しさん:2010/06/05(土) 18:58:30
学力なんて社会出たら役に立たないだろjk

526 :デフォルトの名無しさん:2010/06/05(土) 18:59:33
社会に出る瞬間に役立つだろ

527 :デフォルトの名無しさん:2010/06/05(土) 19:00:03
>>525
学力すら獲得できないヤツなんて役に立たない以前に、害悪。

528 :デフォルトの名無しさん:2010/06/05(土) 19:00:24
こんな流れになるのも>>4がアホすぎるのがいけないだよ!

529 :デフォルトの名無しさん:2010/06/05(土) 19:01:51
興奮のあまりなまってるぞ、どこの田舎者だw

530 :デフォルトの名無しさん:2010/06/05(土) 19:02:11
>>527
いや勿論そうだけどそういうこと言ってるんじゃないよ
大体大学入った後も学力とか学歴にこだわるヤツってそれしか取り柄がない

531 :デフォルトの名無しさん:2010/06/05(土) 19:02:44
>>526
確かに社会に出る時点で学力によって階層化されるから
その社会では周りと同程度である学力は意味をなさないな

532 :デフォルトの名無しさん:2010/06/05(土) 19:03:21
>>530
学歴がないヤツほど、「オレが出世できないのは学歴がないせいだ」とか言って、学歴にこだわってるけどな

533 :デフォルトの名無しさん:2010/06/05(土) 19:05:18
まあ、学歴なんて大したものじゃないんだから、グダグダ言う前に、学歴くらい身につけておけって事だろ。

534 :デフォルトの名無しさん:2010/06/05(土) 19:05:29
>>532
ああ、そういうパターンもあるねww
それは本当に惨めだな。
でも大抵は色白の非リアが自己正当化のために学歴でもって下の人間を見下す、ってパターンが多いよね

535 :デフォルトの名無しさん:2010/06/05(土) 19:06:30
>>534
> でも大抵は色白の非リアが自己正当化のために学歴でもって下の人間を見下す、ってパターンが多いよね

多く無い。

536 :デフォルトの名無しさん:2010/06/05(土) 19:07:13
それは偏見だろ

537 :デフォルトの名無しさん:2010/06/05(土) 19:07:23
学歴で見下せることの出来る人間がいる職場って、どんだけ底辺の職場なんだよw

538 :デフォルトの名無しさん:2010/06/05(土) 19:08:44
>>537
いや職場じゃないって。
大体は2chでウサ晴らしてるでしょそういうヤツは。

539 :デフォルトの名無しさん:2010/06/05(土) 19:09:10
何だ、2ちゃんねる内の話か。

540 :デフォルトの名無しさん:2010/06/05(土) 19:09:36
>>534からすっごい学歴コンプレックスを感じるw

541 :デフォルトの名無しさん:2010/06/05(土) 19:09:53
色白の非リアってとこに悪意が籠ってるだろ?そういう見下し方はどうなのかね
チャリ通ってだけで焼けるから、それでも白いのはもう遺伝子レベルだよ

542 :デフォルトの名無しさん:2010/06/05(土) 19:10:56
2chみたいな匿名掲示板で学歴持ち出して見下すなんてアホすぎるだろw

543 :デフォルトの名無しさん:2010/06/05(土) 19:12:25
勝手に見下されたと思い込んでる方がポジション低過ぎなんだよ。

544 :デフォルトの名無しさん:2010/06/05(土) 19:13:25
>>542
学歴板にだって、このスレにだってそういう連中が実際居るのに何をおっしゃる

545 :デフォルトの名無しさん:2010/06/05(土) 19:15:28
学歴板以外での学歴の話題は学歴板に誘導される
それは学歴板がネタ雑談板でありキチガイ隔離板だからだ
それを一般的な2chのように言うな

546 :デフォルトの名無しさん:2010/06/05(土) 19:16:18
学歴板はともかく、このスレにそんなヤツいるか?
勝手に劣等感持ってるヤツならいるみたいだが。

547 :デフォルトの名無しさん:2010/06/05(土) 19:16:37
いや、矛盾してね?それ
学歴板以外でもそういう話題が出るってことは2chでそういう話題が出ること自体が一般的だってことだろ

548 :デフォルトの名無しさん:2010/06/05(土) 19:18:06
>>547
一般的ではないよ
犯罪者は捕まるが、犯罪は一般的ではないだろ

549 :デフォルトの名無しさん:2010/06/05(土) 19:18:25
>>547
お前みたいなヤツこそ隔離されるべきだな

550 :デフォルトの名無しさん:2010/06/05(土) 19:31:19
if(img_robot_flag[player_flag]>=4){
     img_robot_flag[player_flag]+=img_robot_cnt[player_flag]/64;
     img_robot_cnt[player_flag]+=2;
}

(中略)

if(img_robot_cnt[player_flag]>255){
img_robot_cnt[player_flag]=0;
}


全体がwhileループで回っているとして、これでimg_robot_flag[player_flag]が1ずつ増えてくれません。
情報が少なくて分かりづらいと思いますが、その理由を教えてください。
もう一個別のifで囲んだりして遠回りすると予定通り動くのですが・・・。

551 :デフォルトの名無しさん:2010/06/05(土) 19:41:37
printf()でimg_robot_cnt[player_flag]を表示させて見た?

552 :デフォルトの名無しさん:2010/06/05(土) 19:43:41
DrawFormatString( 170, 30, White, "img_robot_cnt[player_flag] = %d", img_robot_cnt[0]/64 );

この形では問題なく1ずつ加算されてます。
ですが+=の形にするとどうしてもうまくいきません。
またint()で囲んでも駄目でした。

553 :デフォルトの名無しさん:2010/06/05(土) 19:49:10
>>552に追記で

上記のDrawFormatStringで表示させるときには、>>550
img_robot_flag[player_flag]+=img_robot_cnt[player_flag]/64
を消してます。

またimg_robot_flag[player_flag]+=img_robot_cnt[player_flag]/64がある場合には
img_robot_flag[player_flag]が12になったり14になったりと挙動がおかしいです。


554 :デフォルトの名無しさん:2010/06/05(土) 19:49:55
img_robot_cnt[0]/64とimg_robot_cnt[player_flag]/64は
player_flagが0じゃないと別物だけどそこらへんは?

555 :デフォルトの名無しさん:2010/06/05(土) 19:50:45
player_flagも0です、すいません。

556 :デフォルトの名無しさん:2010/06/05(土) 19:52:54
codepad辺りでうpすれば?

557 :デフォルトの名無しさん:2010/06/05(土) 19:55:30
img_robot_cnt[player_flag]が0から255まで変化するんなら、
+される値も0から3まで変化して当たり前だと思うんだが。

558 :デフォルトの名無しさん:2010/06/05(土) 20:02:17
ロボットの画像を通常、右、左で4コマ*3枚をimg_robot[0][12]に格納しています。

そこで
DrawRotaGraphF(int(board_x1+zahyou_x[f]), int(board_y2-BLOCK_TATE*1),1.0f,0.0f,img_robot[f][img_robot_flag[f]],TRUE);

に対応させてカウンタが0〜255まで(img_robot_cnt[player_flag]が0〜3まで)まで動く際に、
それぞれパラパラ漫画のように表示される具合です。


559 :デフォルトの名無しさん:2010/06/05(土) 20:03:34
RoboCodeみたいなやつってのは分かるんだけど
中略ってとこに原因がないと考える根拠は?

560 :デフォルトの名無しさん:2010/06/05(土) 20:16:29
以下のように自己解決しました。
if(img_robot_flag[player_flag]>=4){
img_robot_flag[player_flag]=img_robot_flag[player_flag]-img_robot_flag[player_flag]%4+img_robot_cnt[player_flag]/64;
img_robot_cnt[player_flag]+=2;
}

前のままだと、img_robot_cnt[player_flag]が64になったとき、66になったとき、68になったとき〜で
それぞれimg_robot_flagに1を加算していたためうまく表示出来なかったようです。

お騒がせしました。

561 :デフォルトの名無しさん:2010/06/05(土) 20:19:09
おめでとう。

562 :デフォルトの名無しさん:2010/06/05(土) 20:23:47
while(1)が無限ループならwhile(2)でもwhile(10000)でもいいんじゃないか。なぜ1なんだ。
そこまで1にこだわる理由はなんだ

563 :デフォルトの名無しさん:2010/06/05(土) 20:26:32
じゃあgotoで

564 :デフォルトの名無しさん:2010/06/05(土) 20:32:13
while("forever")最強

565 :デフォルトの名無しさん:2010/06/05(土) 20:34:51
for(;"ever";)だろ

566 :デフォルトの名無しさん:2010/06/05(土) 20:38:11
foreverで1つの単語だし!

567 :デフォルトの名無しさん:2010/06/05(土) 20:38:45
forの場合は条件指定しなくても無限ループ作れる
for(;;) こっちのほうが使いやすい。


568 :デフォルトの名無しさん:2010/06/05(土) 20:43:34
>>566
ttp://ejje.weblio.jp/content/for+ever

569 :デフォルトの名無しさん:2010/06/05(土) 20:46:57
>>562
0(偽)か0以外(真)かだから1でも10000でもいいがメンドイので1をよく使うってか定番だね。

570 :562:2010/06/05(土) 20:56:14
>>569
なんとなくそんな理由だと思いました。すっきりしました

571 :デフォルトの名無しさん:2010/06/05(土) 21:18:59
-0 の場合はどうなるの?
PC では試せないが。

572 :デフォルトの名無しさん:2010/06/05(土) 21:57:03
>>487
別に
while (*p++ = *q++)
;
がしごくわかりにくい、とは思ったこともなかったのですが、そんなもんですかね。

573 :デフォルトの名無しさん:2010/06/05(土) 21:59:18
そんなものだよ世間知らず君

574 :デフォルトの名無しさん:2010/06/05(土) 23:07:08
要素がchar型でもint型でもおkなスタックって作れますか?
大学の課題で使いたいんですが、pushやpopを型に応じて2種類定義するのはなんかカッコ悪いので

575 :デフォルトの名無しさん:2010/06/05(土) 23:08:52
>>574
全部int型に入れればいいじゃん。

576 :デフォルトの名無しさん:2010/06/05(土) 23:12:27
>>575
演算子とか入れても大丈夫なんでしょうか?

577 :デフォルトの名無しさん:2010/06/05(土) 23:14:21
>>576
演算子ってchar型で'+'とか'-'ってこと?

それなら別にいいんじゃないの。

578 :デフォルトの名無しさん:2010/06/05(土) 23:15:35
>>577
そうです
式を逆ポーランド記法にしたいので

ありがとうございました

579 :デフォルトの名無しさん:2010/06/05(土) 23:17:41
その値が、char型かint型かを区別する必要があるなら、型情報も入れておかないとだめかもね。

charなら0、intなら1で、型情報、値の順で積んでいくようにして
1500+3000なら、

1, 1500, 0, '+', 1, 3000

みたいな感じに。

580 :デフォルトの名無しさん:2010/06/05(土) 23:31:18
忘れてました
標準入力から読み込んだ文字列を並び替えて、作業用にこのスタックを使うつもりです
逆ポーランド記法にした後は別のキューに入れて計算します

あと構造体のメンバに不定値があっても、それを参照しなければコンパイルや実行に影響は無いですか?

581 :デフォルトの名無しさん:2010/06/05(土) 23:34:34
馬鹿の考え休むに似たり

582 :デフォルトの名無しさん:2010/06/05(土) 23:37:27
このスレで覚えた諺使いたくてしょうがないのか?
可愛いやつだw

583 :デフォルトの名無しさん:2010/06/05(土) 23:41:42
何事も使わないと身につかないからな。

584 :デフォルトの名無しさん:2010/06/06(日) 00:05:20
ことわざを使うにはスレに書かれてないか調べてからじゃないとだめなのか

585 :デフォルトの名無しさん:2010/06/06(日) 00:06:24
だめじゃない

586 :デフォルトの名無しさん:2010/06/06(日) 00:14:29
>>582
きもちわるい。

587 :デフォルトの名無しさん:2010/06/06(日) 01:06:54
「馬鹿の考え」じゃなくて「下手の考え」。もとは囲碁の格言だ。

588 :デフォルトの名無しさん:2010/06/06(日) 01:30:53
次スレのタイトルは「ことわざなら俺に聞け(入門編)」でよろしいか

589 :デフォルトの名無しさん:2010/06/06(日) 01:34:28
いいよ

590 :デフォルトの名無しさん:2010/06/06(日) 01:40:19
構造体のメンバに不定値
不定値の部分は共用体を使いませう。

591 :デフォルトの名無しさん:2010/06/06(日) 01:43:33
>>583
良い心がけだ

592 :デフォルトの名無しさん:2010/06/06(日) 03:01:11
Cに限った話じゃないが、設計をスルーしていきなりプログラミングしようとする人が多いです
まずはフローチャートをかけと。設計しろと。Cは単なる道具にすぎないんだよ!

593 :デフォルトの名無しさん:2010/06/06(日) 03:04:49
能書きはいいからまず組め。

594 :デフォルトの名無しさん:2010/06/06(日) 03:07:11
>>592
フローチャートはやめてデータフローダイアグラムにしておいてくれ

595 :592:2010/06/06(日) 03:11:52
と大学の教授の口癖だったんだ。
設計ができてもCを使いこなせないとプログラミングできっこないよ

596 :デフォルトの名無しさん:2010/06/06(日) 03:17:39
>>592
ポールグレアム曰く、アメリカ人はとりあえず書き始め、その途中で修正を加えながら完成させる。
日本人はその前によく設計する。だからアメリカの車は糞で、日本の車は素晴らしいが、
プログラミングや映画についてはアメリカ人が得意。絵もそうだが、途中で修正するのは当然だって。
珠玉のプログラミングではとりあえず分かりやすい疑似コードで考えてそれを具体的なコードになおす
みたいなことが書いてあったかな。フローチャートって人に説明するにはいいけど、そこまで重要かな?

597 :デフォルトの名無しさん:2010/06/06(日) 03:23:00
人(未来の本人も含む)に説明できるソースコードが書けるなら別にフローチャート(等の補足資料)は要らないけどな。

598 :デフォルトの名無しさん:2010/06/06(日) 03:24:54
Cを使いこなすってのはCプログラミングにおいてのみ重要なことだろ
授業ではCを使ってたかもしれないが、それがCの授業じゃなくプログラミングの授業なら
Cは目的でなく単なる道具だからな

599 :デフォルトの名無しさん:2010/06/06(日) 03:26:28
>>596
第三者にみせて、処理の流れに矛盾がないかどうかチェックしてもらうことは意味のあることだと思う。

600 :デフォルトの名無しさん:2010/06/06(日) 03:33:48
高級言語で書けばそのままで既にフローチャートの代わりになってるだろ。
低級言語時代の遺物だろフローチャートの類なんて。


601 :デフォルトの名無しさん:2010/06/06(日) 03:37:29
よくわからんで設計したら、フローとかあってもなくて同じでしょ。(ハマるだけ)

602 :デフォルトの名無しさん:2010/06/06(日) 03:38:45
処理単位じゃなくてデータ単位で書くほうがよかろ

603 :デフォルトの名無しさん:2010/06/06(日) 03:39:23
>>596
UnixとかのOSもいきなりコーディングから始めたの?だとしたらすごいよな。
「ポインタが理解できない理由」という本にUnixの疑似プログラムが記載されていたけど
みてて複雑に絡み合っててすぐには理解できなかった。
あれを設計なしにコーディングして途中で修正加えて完成させたってのか・・。

604 :デフォルトの名無しさん:2010/06/06(日) 04:07:02
だれも設計しないなんて言ってないよ
完璧な設計をいつまで作ってなかなかコーディングし始めない人を批判してるんだよ

605 :デフォルトの名無しさん:2010/06/06(日) 05:14:24
設計がおかしいとコードを書けなくなることがある

606 :デフォルトの名無しさん:2010/06/06(日) 06:13:55
で?

607 :デフォルトの名無しさん:2010/06/06(日) 06:40:11
最近「で?」とだけレスするの流行ってるの?

608 :デフォルトの名無しさん:2010/06/06(日) 06:52:42
ここまで1セットです。

609 :デフォルトの名無しさん:2010/06/06(日) 07:35:01
バランスですよ、バランス。
いきなりコードを書くのは良くないが、いつまでも設計図を書いているのもよくない。
バランス感覚を養うただ一つの方法は経験を積むことです。

610 :デフォルトの名無しさん:2010/06/06(日) 14:00:05
テキストのデータを配列に格納するにはどのようにすればできますか?

file.txtのデータが
0.1
-0.5
0.32
0.65
0.76
-0.45

となっていて、それを配列w[100]に順番に格納していきたいです
よろしくお願いします

611 :デフォルトの名無しさん:2010/06/06(日) 14:11:25
FILE* file = fopen( "data.txt", "r" );
char buf[ 256 ];
double w[ 100 ];
int i = 0;
while( fgets( buf, 256, file ) != NULL )
{
  w[ i ] = atof( buf );
  i ++;
}
fclose( file );


612 :デフォルトの名無しさん:2010/06/06(日) 14:14:58
>>611
どうもありがとうございます


613 :610:2010/06/06(日) 14:23:52
もうひとつお願いします
double w[ 100 ]={ 0.1 , 0.5 , 0.32 ,0.65 , 0.76 , -0.45 , ・・・};
の配列をtxtファイルに1行づつ書き込んでいくにはどうすればいいですか?
なんどもすみません



614 :デフォルトの名無しさん:2010/06/06(日) 14:32:45
FILE* file = fopen( "data.txt", "w" );
char buf[ 256 ];
double w[ 100 ] = { 0.1 , 0.5 , 0.32 ,0.65 , 0.76 , -0.45 };
for( int i = 0; i < 10; i ++ )
{
  sprintf( buf, "%f\n", w[ i ] );
  fputs( buf, file );
}
fclose( file );

615 :デフォルトの名無しさん:2010/06/06(日) 14:57:15
>>614
ありがとうございました
うまくいきました

616 :デフォルトの名無しさん:2010/06/06(日) 20:49:09
staticのことで単刀直入に質問しますが
main関数内で変数を宣言するとき、頭にstaticつけようがつけまいが結果は変わりませんよね?

617 :デフォルトの名無しさん:2010/06/06(日) 20:50:38
いいえ

618 :デフォルトの名無しさん:2010/06/06(日) 20:50:57
思い切り変わります。

619 :デフォルトの名無しさん:2010/06/06(日) 20:52:06
>>616
static だと
初期化される
ヒープに確保される

なので結果が変わる事もあります

620 :デフォルトの名無しさん:2010/06/06(日) 20:58:48
>>616
http://pc12.2ch.net/test/read.cgi/tech/1274926862/7 の下の方の例

621 :616:2010/06/06(日) 21:04:07
ヒープ領域に確保されるんですか。勉強になりました。

変数の寿命という点では同じですよね?

622 :デフォルトの名無しさん:2010/06/06(日) 21:05:26
んなわけねー

623 :デフォルトの名無しさん:2010/06/06(日) 21:06:39
staticなローカル変数なんか使っちゃイカン

624 :デフォルトの名無しさん:2010/06/06(日) 21:06:53
main後もプログラムは動くんだぜ

625 :デフォルトの名無しさん:2010/06/06(日) 21:07:45
>>619
ヒープに確保されるわけねーだろw

626 :デフォルトの名無しさん:2010/06/06(日) 21:18:49
メイン関数内の変数をstaticにする利点がわからない

627 :デフォルトの名無しさん:2010/06/06(日) 21:22:33
>>626
大きな配列を用意する時とか

628 :デフォルトの名無しさん:2010/06/06(日) 21:23:33
>>625
じゃあスタックに確保されるの?

629 :デフォルトの名無しさん:2010/06/06(日) 21:24:24
>>628
ヒープとスタックしか知らんのか

630 :デフォルトの名無しさん:2010/06/06(日) 21:41:09
>>629
あとはレジスタくらいしか知らない

631 :616:2010/06/06(日) 21:42:10
>>627
main関数内で、大きな配列を扱うときにstatic入れるのは
自動で0初期化するためですか?

632 :デフォルトの名無しさん:2010/06/06(日) 21:45:07
>>627
ヒープ使え、ヒープ
staticだとメモリ足らなかったら起動できずに
OSがエラーメッセージ吐くぞ
ヒープ使ってたら自分でメッセージ出せる

633 :デフォルトの名無しさん:2010/06/06(日) 21:47:03
>>630
レジスタ知ってて.dataとか知らないのか

634 :デフォルトの名無しさん:2010/06/06(日) 22:03:24
>>631
callocでいいやん

635 :デフォルトの名無しさん:2010/06/06(日) 22:13:47
静的領域って起動時に自動的に確保されるヒープ領域みたいなもんだと
思ってたけど違うのか

636 :デフォルトの名無しさん:2010/06/06(日) 22:19:19
みたいなもんは等しいってわけじゃないから

637 :デフォルトの名無しさん:2010/06/06(日) 22:21:34
ヒープと表現すると不具合あるってこと?

638 :デフォルトの名無しさん:2010/06/06(日) 22:28:10
プログラムがメモリ上にロードされる時に
ヘッダ、命令、可変データ、不変データ、スタックを置くためのメモリが確保される
staticで確保されるメモリはこのうち可変データ(非const)と不変データ(const)だ
ヒープはそれとは別に確保される領域

639 :デフォルトの名無しさん:2010/06/06(日) 22:29:31
データ領域が2つに別れてるのは
もちろんメモリ保護のある状況だけだかんな

640 :デフォルトの名無しさん:2010/06/06(日) 22:39:24
プロテクトモードの由来だな。


641 :デフォルトの名無しさん:2010/06/06(日) 22:57:01
>>446
大学でそれってクレバーじゃないよ。もっともひどいやり方だよ。

642 :デフォルトの名無しさん:2010/06/06(日) 23:04:13
バークレーでいいよ。

643 :デフォルトの名無しさん:2010/06/06(日) 23:04:34
そいつに何言っても無駄w

644 :デフォルトの名無しさん:2010/06/06(日) 23:05:59
>>642
名門すぎんだろw

645 :デフォルトの名無しさん:2010/06/06(日) 23:16:17
>>632
そうできないOSもあるよ

646 :デフォルトの名無しさん:2010/06/06(日) 23:17:07
で?

647 :デフォルトの名無しさん:2010/06/06(日) 23:20:01
printf("で?\n");

648 :デフォルトの名無しさん:2010/06/06(日) 23:29:00
で?って流行ってるの云々

649 :デフォルトの名無しさん:2010/06/06(日) 23:29:43
組み込みならstatic使えばいいし
メモリ確保を遅延する環境はどうしようもない

650 :デフォルトの名無しさん:2010/06/06(日) 23:30:42
試した事ないから知らないんだけど
シグナルも飛ばずに即死するの? >遅延確保に失敗した場合

651 :デフォルトの名無しさん:2010/06/07(月) 00:29:26
>>648
で?

652 :デフォルトの名無しさん:2010/06/07(月) 00:31:52
面白くないぞ。話題について行けない中学生

653 :デフォルトの名無しさん:2010/06/07(月) 01:53:37
中学生がこんな幼稚なことするわけないだろw

654 :デフォルトの名無しさん:2010/06/07(月) 06:02:27
linuxでヒープ使い切ったらどうなるか試したことないや
少なくともmallocは0を返さないはずだよね

655 :デフォルトの名無しさん:2010/06/07(月) 11:36:26

FILE *f;
int c;
f = fopen("a.txt", "rb");
while ((c = fgetc(f)) != EOF) {
  printf("%X\n", c);
}

UTF8で”あ”と1文字だけ書かれたa.txtをバイナリモードで開いて
バイトコードを出力するプログラムを書いたんですが

E3
81
82
A

という結果になります。”あ”はUTF8でE38182なんでOKですが最後のAは謎です。
これはどっから来てるんでしょうか???

656 :デフォルトの名無しさん:2010/06/07(月) 11:44:15
>>655 \n

657 :デフォルトの名無しさん:2010/06/07(月) 11:51:59
>>656
ありがとうございます。改行でした。
実はa.txt内には直接改行は入ってないんですが、なんで改行出てきちゃうんでしょうか??

658 :デフォルトの名無しさん:2010/06/07(月) 11:54:47
vi で編集した?

659 :デフォルトの名無しさん:2010/06/07(月) 12:19:23
>>658
はいviです。
環境はMac snow leopardのMacVim7.2です。文字コードutf-8、改行コードはunix(LF)です。

660 :デフォルトの名無しさん:2010/06/07(月) 12:24:51
>>659
最後の行に改行を追加する旨警告メッセージが出なかった?
vi系は原則最後に改行文字を出力するから。

661 :デフォルトの名無しさん:2010/06/07(月) 12:35:27
vi は、わりと行指向のエディタです。

viで普通にファイルを作成すると、行の最後に改行文字がつきます。
ファイルが一行だけでも同じことで、改行文字が最後につきます。

ファイルの最後に改行文字がないようなファイルを編集すると、
保存時にファイルの最後に改行文字が付加されます。



662 :デフォルトの名無しさん:2010/06/07(月) 12:52:27
>>660-661
viが自動的に追加していたんですね。
ありがとうございます。本当に助かりました。

663 :デフォルトの名無しさん:2010/06/07(月) 17:10:04
>>650>>654
ディフォルトの設定のままだとNULLは返らない。
その場合、遅延確保に失敗したら即死する。
但し、確保しようとしたプロセスが死ぬとは限らない。

664 :デフォルトの名無しさん:2010/06/07(月) 18:10:35
>>>663
え、アドレス空間ぜんぶ空いてない場合でもNULLが返らないの?


665 :デフォルトの名無しさん:2010/06/07(月) 18:21:21
あー、流石にその場合はNULLだね。

666 :デフォルトの名無しさん:2010/06/07(月) 18:32:54
あ、そうなんだ。
じゃあ連続領域が確保できるかどうかについてはその時点で検証しないということ?

667 :デフォルトの名無しさん:2010/06/07(月) 19:35:22
標準入力で
abc123 de-50fg

みたいに入力してatoiで123と-50をintの配列に格納するときはどうすればいいでしょうか

上の文字列(abc...)の要素を先頭から順に見て(文字列のポインタを増やして)
数字が来たら(細かい分岐はとりあえず無視)atoiの引数にポインタ入れて整数にして格納ってできますか?
ちなみにポインタよくわかってないです

668 :デフォルトの名無しさん:2010/06/07(月) 20:03:38
すごい発見しました。staticをなんとポインタ変数の頭につけてみたんです。
static int *ip;→この時点でipはNULL初期化される。

669 :デフォルトの名無しさん:2010/06/07(月) 20:07:43
これはひどい釣り

670 :デフォルトの名無しさん:2010/06/07(月) 20:12:10
>>669
本当にNULL初期化されるから試してみなされ。

671 :デフォルトの名無しさん:2010/06/07(月) 20:12:46
このスレレベル落ちすぎだろ

672 :デフォルトの名無しさん:2010/06/07(月) 20:16:10
static付けるとbssに割り当てられるから、起動時に初期化されるだけ

673 :デフォルトの名無しさん:2010/06/07(月) 20:18:10
>>670
質問者にとっては珍しい出来事かもしれないが、回答者にとってはそれ当たり前なので、勘弁してください。

674 :デフォルトの名無しさん:2010/06/07(月) 20:18:41
>>672
bssってなんですか?

675 :デフォルトの名無しさん:2010/06/07(月) 20:24:25
>>674
ttp://ja.lmgtfy.com/?q=bss+%E3%82%BB%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3

676 :デフォルトの名無しさん:2010/06/07(月) 20:42:53
>>675
調べてきた
メモリにロードされたプログラムの中で、初期値のない静的変数が割り当てられるセグメントのこと。
block started by symbol の略。
でも0初期化されるから「初期値のない」じゃ説明がつかないな

677 :デフォルトの名無しさん:2010/06/07(月) 21:05:02
Cのスタートアップ処理がいい加減だと、bss領域とかが初期化されないこともある

678 :デフォルトの名無しさん:2010/06/07(月) 21:10:38
bssの処理をランタイムがやってる時点で糞アホだな
どこの組み込み系OSだよ

679 :デフォルトの名無しさん:2010/06/07(月) 21:18:35
昔、はまってた奴がいたんだよ

680 :デフォルトの名無しさん:2010/06/07(月) 21:35:46
>>667
strtol()してポインタが進んでいたらそれを格納してポインタを更新、そうでなければポインタを一つ進める

681 :デフォルトの名無しさん:2010/06/07(月) 21:37:17
パソコンアプリみたいにお膳立てしてくれる環境ばかりじゃないんだよ

682 :デフォルトの名無しさん:2010/06/07(月) 21:41:18
なんで組み込み屋って偉そうなの?

683 :デフォルトの名無しさん:2010/06/07(月) 21:42:02
ちゃちなプライドにしがみ付いていないと溺れっちまうからさ

684 :デフォルトの名無しさん:2010/06/07(月) 21:44:25
規格違反の処理系を使わなければいけない可哀想な人なんだから優しくしてあげなよ

685 :デフォルトの名無しさん:2010/06/07(月) 22:07:07
規格違反?

686 :デフォルトの名無しさん:2010/06/07(月) 22:08:18
携帯開発で病んでしまったんだろう

687 :デフォルトの名無しさん:2010/06/07(月) 23:10:41
>>685
どういう意図で疑問形にしたの?
なんか胡散臭いレスだな。

688 :デフォルトの名無しさん:2010/06/07(月) 23:16:15
胡散臭くてごめんくさい

689 :デフォルトの名無しさん:2010/06/07(月) 23:41:25
質問ですが、#include<stdio.h>の次のint main(void)ってありますよね?
このmainは何を表してるんですか?intは関数の型ですよね?voidは引数の
型は何でもいいってことですよね?mainとは何ですか?ここ適当にmanyとか
にしていいんですか?全く分からないのですが・・

690 :デフォルトの名無しさん:2010/06/07(月) 23:42:32
入門書とか読まずにやっているのか?

691 :デフォルトの名無しさん:2010/06/07(月) 23:45:20
>>689
voidは何も無しってこと。何でもいいんじゃなくて、何も無し。
mainとはエントリポイントに指定されている関数。そこからプログラムが始まる。

692 :デフォルトの名無しさん:2010/06/08(火) 00:10:12
>>691
いろいろなソース見てみると
int XXXXX()のXXXXの部分はmainばかりじゃないんですが
この場所は勝手に自分で作ったらいけないんですか?
あとmainだとどういう特性があるんですか?
>>690
入門書は分かりにくい、挫折した。

693 :デフォルトの名無しさん:2010/06/08(火) 00:13:17
関数は自分で作って良いけど…説明するのメンドイわ
じゃあ、#include<stdio.h>って言ってるけど、これが何か分かってるわけ?
分からなくて良いからとりあえずそんなもんだと思って進め。あとで分かる

694 :デフォルトの名無しさん:2010/06/08(火) 00:13:58
なんの本も無しにどうやって勉強するんだよ。

695 :デフォルトの名無しさん:2010/06/08(火) 00:15:25
つーか何を見てるんだろう
何も読んでないのにmain出てくる訳ないし

696 :デフォルトの名無しさん:2010/06/08(火) 00:16:00
まずは、仕様を読めと
タダで読めるんだし一読しとけ?

697 :デフォルトの名無しさん:2010/06/08(火) 00:16:52
入門サイトくらい見て全て理解して質問しろよ

698 :デフォルトの名無しさん:2010/06/08(火) 00:19:44
スレのレベルが落ちすぎ

699 :デフォルトの名無しさん:2010/06/08(火) 00:23:08
初心者にいきなり仕様書読めとかいう馬鹿がいるのかよ

700 :デフォルトの名無しさん:2010/06/08(火) 00:25:10
>>692
> いろいろなソース見てみると
> int XXXXX()のXXXXの部分はmainばかりじゃないんですが
> この場所は勝手に自分で作ったらいけないんですか?

自分で勝手に作ってもいいよ。実際に「int XXXXX()」でもいい。

> あとmainだとどういう特性があるんですか?

>>691に書いてあるけど、そこからプログラムが始まる(プログラム開始時にmain()が呼び出される)という特性がある。

701 :デフォルトの名無しさん:2010/06/08(火) 00:38:07
>>700の補足になるが
コンパイラはmainという名前の関数から始まると思っているから、コンパイル時に教えてやるという面倒な作業が増える
WinMain関数などはさらに面倒なことを定義してるので、素直にそれを使った方が他の人にも自分にもやさしい

702 :デフォルトの名無しさん:2010/06/08(火) 00:39:47
何故仮因数ってのを設定する必要があるんですか?
実引数の型を後でどうせ設定するんでしょ?

703 :デフォルトの名無しさん:2010/06/08(火) 00:41:22
実引数は可能であれば暗黙で仮引数の型にキャストされるよ。

704 :デフォルトの名無しさん:2010/06/08(火) 00:42:00
いんすうって読む?

705 :デフォルトの名無しさん:2010/06/08(火) 00:43:01
>>695>>696本だとイメージがわかない、一応持ってるけど読んでも全くわからん。
自分で作りますよね?
int many(void)としたらmanyはどう作用するんですか?

706 :デフォルトの名無しさん:2010/06/08(火) 00:46:31
>>704
ひきすう

707 :デフォルトの名無しさん:2010/06/08(火) 00:49:01
>>705
main()が呼び出され、その中でmany()を呼び出したらmany()が実行される

http://codepad.org/W35cHb8F

708 :デフォルトの名無しさん:2010/06/08(火) 01:07:10
>705

many自体はコンパイルできるが、標準Cではmain関数から実行されると決まっている。
manyだけで実行できるプログラムは書けない。

だけど、本も何も無しでわかるの?

持っている本は何?とっかかりとして本が悪すぎるのでは無いかな。

709 :デフォルトの名無しさん:2010/06/08(火) 01:59:10
C言語
でググれば初心者向けの解説サイトはたくさん出てくる

710 :デフォルトの名無しさん:2010/06/08(火) 02:30:30
>>708
犬でもわかるC言語

main関数は全ての関数の総元って考えてOK?
新たに関数設定するときmany()はどこに書けばいいのですか?

何故main(){}の中だけで作業しないんですか?
{}の中に作業全て行えばいいじゃないですか。

711 :デフォルトの名無しさん:2010/06/08(火) 02:33:49
main()の前に記述するか、宣言だけしてmain()の後に記述する
main()の中に書くと長くなるし、同じ操作を行いたい時また書かなきゃいけないだろ
というかもうここで質問すんな死ね

712 :デフォルトの名無しさん:2010/06/08(火) 03:13:08
はい。cのプログラムでは必ず main() が実行されます。この関数だけ特別です。

関数を定義するのは、一番外側でしか行えません。
mainなどの関数の中では関数を定義できません。一番外側ではないので。(もちろん、関数を使うだけならできます)

以下は、hello world と表示し、数字を1増やし、その数字も表示する。 これを3回繰り返すプログラムです。

#include <stdio.h>
int i=0;

void main() {
    printf("hello world");    i = i+1;    printf("%d", i);
    printf("hello world");    i = i+1;    printf("%d", i);
    printf("hello world");    i = i+1;    printf("%d", i);  
}

この 「hello world と表示して、数字を1増やし、数字も表示する」という部分は、結局3回とも同じ手順ですよね?
だから、この部分を関数としてまとめてしまえば、目的がシンプルになって読みやすくなります。 main() を見て「なにかを3回するんだな」ということが簡単にわかります。

#include <stdio.h>
int i =0;

void many(void) {
    printf("hello world");    i = i+1;    printf("%d", i);
}

void main() {
    many();    many();    many();
}

「many() が具体的に何を行うか?」は、とりあえず知らなくても、main()で「なにかを3回するんだな」と読めます。 こうすればいちいち処理の詳細を知らなくても簡単に読めます。
関数は、こうやって「プログラムを簡単に読めるようにするため」に使います。 簡単に読めるプログラムを書くのは、高速なプログラムを書くのと同じくらい高度で知的な作業です。

713 :デフォルトの名無しさん:2010/06/08(火) 03:20:38
Cにはクラスがないのが残念だけどね

714 :デフォルトの名無しさん:2010/06/08(火) 03:29:31
なければ作ればいい

715 :デフォルトの名無しさん:2010/06/08(火) 04:30:21

#include <stdio.h>
int i = 0;

void main() {
    printf("hello world");    i = i+1;
    printf("%d", i);    printf("hello world");
    i = i+1;    printf("%d", i);
    printf("hello world");    i = i+1;
    printf("%d", i);  
}

これは712とまったく同じことをするプログラムですが、すごく読みづらいです。
現実は、こういう入り組んだ処理の流れの中から、「つまり自分は何がしたいのか?」を探し出す作業になるはずです。

プログラムを読みやすく書き直すことは、すごく難しいことだと思います。
オブジェクト指向も関数型言語も、結局目的はここです。簡単に読めるようにするためです。難解に書いて偉そうにするためではありません。

簡単にする方法は、ソースだけを見てても、なかなか見えてきません。
でも、ソースを一行一行読みながら、紙に○や線で図形を書いてみると、「自分は何をしたかったのか?」が本当の意味で見えてくる場合が多いです。

ソースを読むときは、紙にらくがきしながら読むといいです。紙や黒板にらくがきしながら考えると、言葉ではなく映像として浮かび上がります。
人間にとって映像は、言葉よりも遥に扱いが容易なので、考察に向いてます。(コンピューターとは逆ですね)
ソースだけで考えるよりも、らくがきと平行して考えたほうが、ずっと理解が容易になるのでおすすめです。(人に説明するときも同じ)

そういう「らくがき方法」を、カッチリと定義したものに、UMLやBootch法などがあります。
「これはとても高級なことなのだ」とハッタリをかましたがる人もいますが、あれは結局、万人向けの”らくがき方法マニュアル”にすぎません。

自由ならくがきを書いてると、「これはUMLに添ってない図だ!」と横槍を入れて嘲笑ってくる人もいるでしょうけど、気にしなくていいです。
自分の頭の中のらくがきを、そのまま紙に書き写して思考するのが、それこそが各自にとっての最良の思考ツールなのですから。


716 :デフォルトの名無しさん:2010/06/08(火) 04:34:15
>>712
めっちゃ分かりやすい、ありがとうございます。
やっぱり実用書は理屈しか書いてないんでイメージしにくいです。
もっと想像力を鍛えます。関数を呼び起こすってのはプログラムの文を
そのまま呼び起こすってことなんですね!

717 :デフォルトの名無しさん:2010/06/08(火) 04:54:43
>>713
で?

718 :デフォルトの名無しさん:2010/06/08(火) 08:07:24
>>717
つまりお前の頭がどうしようもなく悪いってこと

719 :デフォルトの名無しさん:2010/06/08(火) 13:32:17
どうみても>>713は釣りなんだから

720 :デフォルトの名無しさん:2010/06/08(火) 14:00:41
C言語幼稚園
さくら クラス
みかん クラス
りんご クラス

721 :デフォルトの名無しさん:2010/06/08(火) 14:40:20
>>719
オブジェクト指向を勉強してからおいでよ

722 :デフォルトの名無しさん:2010/06/08(火) 16:56:16
『C には××がない』
 ↑
こういう奴は C 以外を使えばいい
××とやらが printf なだけでお手上げなタイプは

723 :デフォルトの名無しさん:2010/06/08(火) 16:57:52
>>712からの流れで言ってるのが分からない男の人って

724 :デフォルトの名無しさん:2010/06/08(火) 17:02:41
>>712をまともに読んでるやつなんていたの?

725 :デフォルトの名無しさん:2010/06/08(火) 17:04:19
流れが読めなかったからって意地張るなよ

726 :デフォルトの名無しさん:2010/06/08(火) 17:08:15
712から713につながる流れとやらが理解できないw

727 :デフォルトの名無しさん:2010/06/08(火) 17:10:17
>>726
俺だけじゃなくて安心した

728 :デフォルトの名無しさん:2010/06/08(火) 17:14:02
>>726>>727
マジで言ってんの?ただ関数を書くよりクラスで書いた方がよりその意味ではより効果的だということだよ
継承とポリモーフィズムなどの点において

729 :デフォルトの名無しさん:2010/06/08(火) 17:17:13
>>728
話がいきなり interface まで飛躍するのか
そんな流れにはついていけないよ

730 :デフォルトの名無しさん:2010/06/08(火) 17:17:56
飛躍してないよ>>712と同じ次元の話

731 :デフォルトの名無しさん:2010/06/08(火) 17:22:13
objective-c にでも行けばいい

732 :デフォルトの名無しさん:2010/06/08(火) 17:22:45
見てみたけど、知ったかしたいだけじゃない

733 :デフォルトの名無しさん:2010/06/08(火) 17:32:58
objective-cってC++以上に糞だな

734 :デフォルトの名無しさん:2010/06/08(火) 18:01:03
個人的にはCにOOPとかいらないけど、クラス(C++のStructで宣言出来る奴)ぐらいならほしい

735 :デフォルトの名無しさん:2010/06/08(火) 18:34:33
>>734
OOP的用途なら FILE と f* 関数群で それとなくやっちゃってるし…

文法的に
コンストラクタ/デストラクタ で 生成/消滅の入れ子構造が書きやすい というのは大きいと思う
# が 順序依存が発生するようだと、ちょと工夫

736 :デフォルトの名無しさん:2010/06/08(火) 18:36:30
> CにOOPとかいらない

802.3 に証明書とかいらない、みたいな違和感がある

737 :デフォルトの名無しさん:2010/06/08(火) 18:48:40
>>735
OpenGL もそうだよな。
要は使い方次第なのに、それが解ってないやつほど不満ばっか垂れるんだよな。


738 :デフォルトの名無しさん:2010/06/08(火) 18:50:57
OpenGLて

739 :デフォルトの名無しさん:2010/06/08(火) 19:12:05
malloc使うとき、メモリ不足で割り当てに失敗した場合NULLが返されます。
NULLが返されたとき、異常系処理としてプログラム終了のコード書きますよね?
自分は終了コード書かず、プログラムを継続させたい。
それには、使用されないメモリを解放して空き領域を作ればいい。
言うのは簡単だが、使用されないメモリがどれか判断がつきません。
どうしたらいいですか。

740 :デフォルトの名無しさん:2010/06/08(火) 19:22:03
>>739
自分の管理下での話なら GC(ガベージコレクション)あたりをググる

他人のアプリも含めたシステム全体についての話は…
あ き ら め る

741 :デフォルトの名無しさん:2010/06/08(火) 19:23:11
malloc()できないのにプログラム継続とかw

742 :デフォルトの名無しさん:2010/06/08(火) 19:26:30
>>739
あるプロセスが他のプロセスの事情を判断することは非常に困難だから、OS がメモリ不足といってきたらそれまで、だと思います。

743 :734:2010/06/08(火) 19:35:13
確かにOOPがいらないと書くと語弊があるようですね
継承がないクラスぐらいの意味合いでした

744 :739:2010/06/08(火) 19:35:18
やっぱり終了コード書かないといけないか。
せめてメモリの空き領域を知りたいですが、そんな都合のいい関数ないよね。

745 :デフォルトの名無しさん:2010/06/08(火) 19:42:29
>>744
OSによる。
連続して確保可能な最大の空き と 全空きの合計 とは一致しないこともあるんで…
空きを知ったところで、あまりおいしくない。

自分がどれだけ使っているかを知る → こんだけ使ってるからヤバいかも?
というアプローチはありかもね

746 :デフォルトの名無しさん:2010/06/08(火) 20:06:28
>>739
まずは不要になったら即freeするコードにしてみてはいかがか。

747 :デフォルトの名無しさん:2010/06/08(火) 20:10:03
>>744
昔は coreleft とかあったよ
その後ゲイツ OS の「進化」によって意味がなくなってきたんだけど
今でもシングルタスクな環境では作れば意味はあるね

748 :739:2010/06/08(火) 20:42:40
>>746
その「不要」をどうやって判断するかが難しい

749 :デフォルトの名無しさん:2010/06/08(火) 20:53:38
>>748
どういうの作ってんの?

750 :デフォルトの名無しさん:2010/06/08(火) 21:52:31
関数を設定例えば
double dorille(double x){}と設定して
int main(){}の中で呼び出してプログラム実行すると
即終了となるのは何故でしょう?理由が分かりません。

751 :デフォルトの名無しさん:2010/06/08(火) 21:56:47
>>750
エスパーするとgetchar();を入れればおk

752 :デフォルトの名無しさん:2010/06/08(火) 22:44:52
>>751
それは邪道。
pif ファイルを作れ。

753 :デフォルトの名無しさん:2010/06/08(火) 23:10:08
自作の関数は呼び出しが不可能なのか・・

754 :デフォルトの名無しさん:2010/06/08(火) 23:24:36
わざとなのかも知れないが、言語能力が低すぎるんじゃないか?


755 :デフォルトの名無しさん:2010/06/08(火) 23:27:06
>double dorille(double x){}
double値をリターンしてないわけだがなんで実行できるの

756 :デフォルトの名無しさん:2010/06/08(火) 23:35:21
>>750
Ctrl+F5で実行しろ

757 :デフォルトの名無しさん:2010/06/08(火) 23:36:11
また4だろw

758 :デフォルトの名無しさん:2010/06/08(火) 23:42:57
fgetsでstdinからポインタにintの値を入れたいのですが
どう処理すればよいでしょうか。

int *pt
fgets((char *)pt, **, **, stdin )と、キャストしてる時点でもう無理ですかね?

759 :デフォルトの名無しさん:2010/06/08(火) 23:46:16
>>758
int *pt
fgets((char *)pt, sizeof pt, stdin);
で OK.


760 :759:2010/06/08(火) 23:47:20
入力は Alt を押しながらテンキーでな。

761 :デフォルトの名無しさん:2010/06/08(火) 23:48:44
>>758
仮にできたとしても、文字列で入ってくるけどいいのか?

762 :デフォルトの名無しさん:2010/06/08(火) 23:53:00
>>759
ありがとうございます。
ただ、>>761さんの仰る通り文字列で入ってくるみたいです。

整数としてその後の処理で扱いたいのですが・・・
scanfとか使えって話になるんですかね?

763 :デフォルトの名無しさん:2010/06/08(火) 23:53:29
えっ

764 :デフォルトの名無しさん:2010/06/08(火) 23:53:28
>>761
無知は黙ってろ。
質問されたことを質問の通りに答えろ。
意訳など厳禁。
プログラマーの常識だろ。


765 :デフォルトの名無しさん:2010/06/08(火) 23:59:57
>>762
問題ない。

#include <stdio.h>
int main(){
int *pt;
fgets((char *)pt, sizeof pt, stdin);
printf("%d\n", pt);
return 0;
}
これで、
Alt+1 Alt+0 Alt+0 Alt+0 Enter
と入力してみ。Alt は毎回離せよ。数字はテンキーでな。
ちゃんと整数として扱われる。


766 :デフォルトの名無しさん:2010/06/09(水) 00:00:04
574です

後置記法にした文字列をキューに入れるんですが(引数は構造体、数はatoiで整数にして格納)詰みました
キューに期待した通りに数値が入ってるか確認しようとしてるんですが
strtokで演算子が来た時に対応する列挙定数をメンバに代入してるのに
実行すると何も表示されません
ただ演算子が来た時の処理はしないで、数が来た時だけメンバに代入をさせてそれを表示しようとすると
ちゃんと表示されます
strchrとか使っても同じ結果になって全くわからないんですが、どこがいけないんでしょうか?

ソースです(コンパイラはgcc)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10657.txt

767 :デフォルトの名無しさん:2010/06/09(水) 00:01:56
あ、convertの下のほうにi++;ってありますけど、試行錯誤してた時の消し忘れです
そこは実行には影響無いはずです

768 :デフォルトの名無しさん:2010/06/09(水) 00:05:06
>>765
Alt押しながらっていうのは、そういうことでしたか
理解できずに流していました、申し訳ないです。

ちょっとためしてみますね。
丁寧に説明していただき、ありがとうございました。

769 :デフォルトの名無しさん:2010/06/09(水) 00:42:22
なんだか低レベルの質問と意図的に遊んでいるレスと
振り回されているレスが何本も並行していてわけわからんな。

>>574
strtok()使うよりstrtol()辺りを使った方がよさそうな気がする。
それはさて、tpはstrtok()で切り出したエリアを指すポインタなのは言うまでもないよな。
一方、"+"は文字列リテラルへのポインタだ。
つまり、それらを比較しても常に一致しない。
tpのポイントしている先に文字'+'があるかどうかを知りたいのなら、* tp == '+'としないといけない。
要は、演算子の処理が全く働いていないと言うことだな。
それに気付けないと言うことは、デバッグの仕方ももうちっと工夫しないとね。

770 :デフォルトの名無しさん:2010/06/09(水) 00:50:45
>>765
>fgets((char *)pt, sizeof pt, stdin);


fgets((char *)&pt, sizeof pt, stdin);

だろ。

771 :デフォルトの名無しさん:2010/06/09(水) 00:53:04
頭が頭痛で痛い。

772 :デフォルトの名無しさん:2010/06/09(水) 00:59:20
>>769
すみません、言い忘れてたんですが *tp == '+' もやってみたんです
でもやっぱり同じ結果でした

ちょっとstrtol使ってできるか試してみます
ありがとうございました

773 :デフォルトの名無しさん:2010/06/09(水) 01:10:34
>>772
あー、出力されない方が問題か。
main()のwhileの条件がおかしい。
終端条件は、type == TNUM && value == 0で脱出だろ?
あんたのコードではtype != TNUM && value != 0で継続(つまりtype == TNUM || value == 0で脱出)になっている。
論理式になれていないなら、無理に各項を反転しようとしないで全体を括って ! で反転したら?

774 :デフォルトの名無しさん:2010/06/09(水) 01:13:20
コンピューターのプログラミング言語が沢山ありますが
数多くある言語すべて知ってないと行けないのでしょうか?
プログラマーになるならこれとこれやっとけば大丈夫って言うのはどれとどれでしょうか

775 :デフォルトの名無しさん:2010/06/09(水) 01:18:11
C++だけ覚えて業界に飛び込め。
後は必要になったら3日で覚えろ。

776 :デフォルトの名無しさん:2010/06/09(水) 01:21:28
アセンブラだけは絶対やっとけ。
CASL II か、Z80 の辺りがお薦め。
個人的には 6502 がいい。


777 :デフォルトの名無しさん:2010/06/09(水) 01:21:39
>>775
C++を一から覚えるには何日くらいで覚えられますか?

778 :デフォルトの名無しさん:2010/06/09(水) 01:23:29
>>773
while(!(条件))にしてできました!
ポインタをまだあまり理解してないのでconvert内が原因だと思い込んでました
今度からは出力がおかしい時は条件式も疑うようにします
どうもありがとうございました


779 :デフォルトの名無しさん:2010/06/09(水) 01:24:38
>>777
多分何年たっても無理

780 :デフォルトの名無しさん:2010/06/09(水) 01:47:22
>>777
言語は覚えるものじゃない。使うものだ。
つーか、スレ違い。

>>778
「出力がおかしい」から「条件式を疑う」というわけじゃないぞ。
単に>769の段階で出力ループの問題に気付かなかっただけだ。

781 :デフォルトの名無しさん:2010/06/09(水) 01:49:49
>>777
C++の仕様はデカイから、専業で真面目にやっても3年くらいはかかる。

782 :デフォルトの名無しさん:2010/06/09(水) 01:56:06
C++ なんかやるくらいなら C♯やったほうがいいよ。

783 :デフォルトの名無しさん:2010/06/09(水) 02:16:14
>>757
??
>>755
return って関数プログラム終了の時に書く奴じゃないですか?
double値をリターンしてないってどういうことですか?

784 :デフォルトの名無しさん:2010/06/09(水) 02:18:08
うぜえよアホ

785 :デフォルトの名無しさん:2010/06/09(水) 02:25:58
何か問題がおきたときはコード全部あげて、エラーが出たならエラーメッセージも貼る

786 :デフォルトの名無しさん:2010/06/09(水) 02:46:53
コーディングが一番気持ちいいのはpython

787 :デフォルトの名無しさん:2010/06/09(水) 03:24:36
一時期rubyもそういわれてたけど最近聞かなくなったな。
その感覚が普通になっちゃったのかな

788 :デフォルトの名無しさん:2010/06/09(水) 03:49:25
メソッドチェーンが正気の沙汰とは思えない

789 :デフォルトの名無しさん:2010/06/09(水) 04:38:24
へぇ。。。素直に理解できない人もいるのだな。。

790 :デフォルトの名無しさん:2010/06/09(水) 07:11:27
うぜえよアホ

791 :デフォルトの名無しさん:2010/06/09(水) 12:58:16
やっぱ、言語自体の面白さを問うなら、C、C++が一番だね。

お、こりゃ便利だね。っと実感できる。

C#とかは、GUIやらWEBの部品を組み合わせるだけだもんね。

って、ことで俺のお勧め、C。

792 :デフォルトの名無しさん:2010/06/09(水) 12:59:13
まあ、あくまで昔のコンソールアプリ用の言語だから、
コンソールアプリを作りながらとか空想しながらが一番いいよね。

793 :デフォルトの名無しさん:2010/06/09(水) 13:14:20
昔のコンソールアプリ用ってどういうこと?

794 :デフォルトの名無しさん:2010/06/09(水) 13:55:41
昔っからコンソールにしか使ったことがないという個人的感想だろ

795 :デフォルトの名無しさん:2010/06/09(水) 14:15:20
まあ他の言語ろくにつかったことないなら何も言わずにそのままC使ってればいいじゃない

796 :デフォルトの名無しさん:2010/06/09(水) 15:08:34
他の言語をまともに使うとCを選ぶ価値はないといっているかのように読めてしまって、俺もぼけたかなぁ。

797 :デフォルトの名無しさん:2010/06/09(水) 15:31:21
禿げるほどぼけてるね

798 :デフォルトの名無しさん:2010/06/09(水) 15:35:52
お前らなんでCの勉強始めたの?

799 :デフォルトの名無しさん:2010/06/09(水) 15:52:28
本です

800 :798:2010/06/09(水) 16:02:58
訂正
×なんで
○なぜ

801 :デフォルトの名無しさん:2010/06/09(水) 16:04:20
当時BASICが遅かったから

802 :デフォルトの名無しさん:2010/06/09(水) 16:06:04
というかまあ、Cを勉強して何を作るつもりなの

803 :デフォルトの名無しさん:2010/06/09(水) 16:10:36
UNIXに慣れるため。特に何を作ろうとは考えず、
どうやって動いているかに興味があった。

804 :デフォルトの名無しさん:2010/06/09(水) 16:14:19
若かったから何でもやってみたかったんだよ。

805 :デフォルトの名無しさん:2010/06/09(水) 16:50:11
現在なら、プログラマの嗜みとしてじゃないかな

806 :デフォルトの名無しさん:2010/06/09(水) 17:16:21
変な空気が漂ってるな・・・

807 :デフォルトの名無しさん:2010/06/09(水) 17:21:31
そこにCがあるから

808 :デフォルトの名無しさん:2010/06/09(水) 20:11:05
>>798
必要だと思ったから

809 :デフォルトの名無しさん:2010/06/09(水) 21:39:58
5/0みたいにわざと定義されてない計算結果を出力させたらinfって出たんですが
これってどういう意味ですか?

810 :デフォルトの名無しさん:2010/06/09(水) 21:41:09
W-Infinity

811 :デフォルトの名無しさん:2010/06/09(水) 21:43:12
あ、ちょっと調べたら自己解決しました

812 :デフォルトの名無しさん:2010/06/09(水) 22:21:17
test


813 :デフォルトの名無しさん:2010/06/09(水) 22:22:58
質問です

今、素数を算出し表示するコードを書いているのですが
今考えている計算式だと、2,3,5,7の数値が表示できません

何かいい計算式はないでしょうか

814 :デフォルトの名無しさん:2010/06/09(水) 22:30:08
エラストテネスのふるい

815 :813:2010/06/09(水) 22:35:24
これってつまり、求めたい数だけの配列を用意しなければならないということですよね?

単純に計算式でふるいにかけるより
プログラムとしては重くなるような気がするのですが、どうなのでしょうか
でも、素数を求めたいだけのプログラムなら何の問題もないでしょうね

回答ありがとうございました

816 :デフォルトの名無しさん:2010/06/09(水) 22:42:55
CでGUIをやるのにおすすめの本とかってありますか??
ググったのですが、いろんな意見があるみたいで・・・。

817 :デフォルトの名無しさん:2010/06/09(水) 22:45:57
Qt

818 :デフォルトの名無しさん:2010/06/09(水) 22:46:50
C#に鞍替え

819 :デフォルトの名無しさん:2010/06/09(水) 22:48:51
BCB

820 :デフォルトの名無しさん:2010/06/09(水) 22:50:28
delphi

821 :デフォルトの名無しさん:2010/06/09(水) 22:56:56
今の時代、Cじゃなかなか仕事貰えないですか?

822 :デフォルトの名無しさん:2010/06/09(水) 22:57:28
Cの入門書とかではループカウンタに int 型を使いますよね。
でも、例えばループ回数が100回とかだったら char とかでもいけると思うんです。
そうすればメモリ使用量がわずかに減ると思うんですが
上級者の方たちは、そうやって節約したりするんでしょうか?

それとも、そういうテクニックはあまり使わないんでしょうか?

823 :デフォルトの名無しさん:2010/06/09(水) 22:57:58
はい

824 :デフォルトの名無しさん:2010/06/09(水) 22:59:56
char型にしてもメモリ減らない上に処理遅いだけでいいことない

825 :デフォルトの名無しさん:2010/06/09(水) 23:02:02
まあな

826 :デフォルトの名無しさん:2010/06/09(水) 23:05:45
構造体と配列以外でそういうことはしなくていい

827 :デフォルトの名無しさん:2010/06/09(水) 23:13:23
せつやくするところが違う。

char a[N]とint a[N]なら意味はある。
ループは、内部で32bit整数として計算している可能性もあり動作が遅いかもしれない。

828 :デフォルトの名無しさん:2010/06/09(水) 23:30:17
カウンタはレジスタに割り当てられてる場合もあるしな
メモリアクセス云々もあるし、どうしてもって時じゃなければintで

829 :デフォルトの名無しさん:2010/06/09(水) 23:35:45
intが一番速いからね

830 :デフォルトの名無しさん:2010/06/10(木) 00:35:06
CoreアーキテクチャのCPUで1ループ1μOPが与える影響考えたら、頭が痛くなってきた
>>822じゃないが、ありがとう、勉強になった

831 :デフォルトの名無しさん:2010/06/10(木) 00:36:09
1ループって何?

832 :デフォルトの名無しさん:2010/06/10(木) 00:41:31
coreって命令を先に読むんだぜ。すごいよな!

833 :デフォルトの名無しさん:2010/06/10(木) 00:43:54
プリフェッチ?

834 :デフォルトの名無しさん:2010/06/10(木) 00:45:24
尻フェッチ

835 :デフォルトの名無しさん:2010/06/10(木) 01:24:27
C言語で色々な数式のプログラムの仕方を書いた本ってありませんか?
何かお勧めなものが有りましたら教えてください。

836 :デフォルトの名無しさん:2010/06/10(木) 01:30:17
定価から1割引、3割引、5割引、8割引を計算するプログラムを作りたいんですが
コンパイルまではうまく行ったのですが、うまく動作しません。

何が行けないのでしょうか
教えてください。

#include <stdio.h>

int main(void)
{
int teika,itiwari,sanwari,gowari,hatiwari;

/* 入力部分 */
printf("定価を入力してください");
scanf(" %d ",&teika);

/* 計算部分 */
itiwari =((int)(teika * 0.9));
sanwari =((int)(teika * 0.7));
gowari =((int)(teika * 0.5));
hatiwari=((int)(teika * 0.2));

/* 表示部分 */
printf("定価が%d円の時、1割引は%d円、3割引は%d円、5割引は%d円、8割引は%d円です。\n",&teika,&itiwari,&sanwari,&gowari,&hatiwari);
return 0;
}




837 :デフォルトの名無しさん:2010/06/10(木) 01:36:12
宿題は宿題スレへ

838 :デフォルトの名無しさん:2010/06/10(木) 01:36:43
printf("定価が%d円の時、1割引は%d円、3割引は%d円、5割引は%d円、8割引は%d円です。\n",teika,itiwari,sanwari,gowari,hatiwari);

839 :デフォルトの名無しさん:2010/06/10(木) 01:38:22
>>835
もっと具体的に
色々なと言われても範囲が広すぎる
「数式のプログラム」ってのはどういうものを想定しているんだ

840 :デフォルトの名無しさん:2010/06/10(木) 01:38:44
ここ

> printf("定価が%d円の時、1割引は%d円、3割引は%d円、5割引は%d円、8割引は%d円です。\n",&teika,&itiwari,&sanwari,&gowari,&hatiwari);



841 :デフォルトの名無しさん:2010/06/10(木) 01:39:54
scanf(" %d ",&teika); →scanf("%d",&teika);

842 :デフォルトの名無しさん:2010/06/10(木) 01:40:44
>>840
Mr. Debug

843 :デフォルトの名無しさん:2010/06/10(木) 01:41:26
>>841
こっちの方が見落としやすいね。コンパイルするまで気付かなかった

844 :デフォルトの名無しさん:2010/06/10(木) 01:43:02
>>839
そりゃあmathematicaみたいなものだろ

845 :デフォルトの名無しさん:2010/06/10(木) 01:45:26
皆様どうもありがとうございました。

ご指摘の通りprintf("定価が%d円の時、1割引は%d円、3割引は%d円、5割引は%d円、8割引は%d円です。\n",teika,itiwari,sanwari,gowari,hatiwari);
としましたが動かなかったところ

scanf("%d",&teika);
に直したら正常に動作できました!
スペースを入れてはいけないのですね。

ご協力いただきましてありがとうございました。(TT)

ちなみに宿題ではなく自己啓発なんです。

846 :デフォルトの名無しさん:2010/06/10(木) 02:09:45
>scanf(" %d ",&teika);

これは別にいいんじゃね?

847 :デフォルトの名無しさん:2010/06/10(木) 02:13:29
前はいいけど、後ろのは邪魔

848 :デフォルトの名無しさん:2010/06/10(木) 02:14:14
もう一個なんか入力受けて取るかctrl+zとか入力しないと進まない

849 :デフォルトの名無しさん:2010/06/10(木) 02:50:21
セミナーかよ
自己学習であってほしい

850 :デフォルトの名無しさん:2010/06/10(木) 03:00:34
レベルが下がりすぎ

851 :デフォルトの名無しさん:2010/06/10(木) 03:02:26
入門スレで何文句言ってんだ?

852 :デフォルトの名無しさん:2010/06/10(木) 03:06:03
>>850のレベルの高さに脱帽

853 :デフォルトの名無しさん:2010/06/10(木) 03:30:00
もういいからこの流れ

854 :デフォルトの名無しさん:2010/06/10(木) 06:59:22
ライブラリの作成コマンドを教えてください。

リターンだけの関数を記述したa.cのオブジェクト「a.o」を「cc -c a.c」で作りましたが、
「ld -o output /lib/crt0.o a.o -lc」
を実行してもエラー(そんなシンボル知らない)になってしまいます。
どうすれば良いのでしょうか?
※ldはmanで調べたとき例として出てきた文です。

855 :デフォルトの名無しさん:2010/06/10(木) 07:28:56
つ ar

856 :デフォルトの名無しさん:2010/06/10(木) 08:01:02
>>854
恐らくPOSIX環境だと思われるのだが、そういう環境依存の質問は環境を書くように。
で、a.oから例えばliba.aを作りたいなら>855の指摘するようにarコマンドを使えば宜しい。
arコマンドは、単なるアーカイバなので使い方も一般的なアーカイバに似ている。
arコマンドは単にライブラリ(アーカイブ)を作るだけでなくそれをリストアップするのにも
使えるので、manコマンドで説明を読んでおくことをお勧めする。

857 :デフォルトの名無しさん:2010/06/10(木) 08:04:31
シェアドライブラリを作りたいんじゃないの?

858 :デフォルトの名無しさん:2010/06/10(木) 08:28:20
確かにシェアードオブジェクトならUNIXスレかどっかかな。いずれにしても、これ以上はスレ違いだな。

859 :デフォルトの名無しさん:2010/06/10(木) 16:55:35
iPhoneってC言語対応?

860 :デフォルトの名無しさん:2010/06/10(木) 16:56:47
はい

861 :デフォルトの名無しさん:2010/06/10(木) 17:14:03
Jailbreakしたら、gccで自作ツールいけるみたいですね。

862 :デフォルトの名無しさん:2010/06/10(木) 17:31:34
>>859
iPhone版に行けカス

863 :デフォルトの名無しさん:2010/06/10(木) 17:56:49
SDKがObjective-CだからCだけじゃなんともならんだろけど。

864 :デフォルトの名無しさん:2010/06/10(木) 20:18:04
2つの自然数aとbの最大公約数gcd(a, b)を求め、それを出力するプログラムを作成せよ。
なお、m = a % b としたとき、gcd(a, b) は m≠0 の場合 gcd(b, m) に等しく、 m=0 の場合 b に等しい。


2つの自然数aとbを入力させ、a 人から b 人を選ぶ組み合わせ comb(a, b)を求め、それを出力するプログラムを作成せよ。
なお、comb(a, b) = comb( a-1, b) + comb( a-1, b-1) であり、 b==0 もしくは b==a のとき comb(a, b) = 1 である。


今週は2つありますが。。。よろしくお願いしますorz

865 :デフォルトの名無しさん:2010/06/10(木) 20:20:14
宿題は宿題スレへ

866 :デフォルトの名無しさん:2010/06/10(木) 20:55:18
>>865
そっちの人が少ないので、どうかお願いしますorz

867 :デフォルトの名無しさん:2010/06/10(木) 21:42:45
ふざけるな

868 :デフォルトの名無しさん:2010/06/10(木) 21:43:06
真面目です

869 :デフォルトの名無しさん:2010/06/10(木) 21:45:32
1番目のはできたから、これだけは助けてくださいorz

2つの自然数aとbを入力させ、a 人から b 人を選ぶ組み合わせ comb(a, b)を求め、それを出力するプログラムを作成せよ。
なお、comb(a, b) = comb( a-1, b) + comb( a-1, b-1) であり、 b==0 もしくは b==a のとき comb(a, b) = 1 である。

870 :デフォルトの名無しさん:2010/06/10(木) 21:46:23
>>869
これでいいだろ
if(a<0 || b<0 || b>a) return 0;

871 :デフォルトの名無しさん:2010/06/10(木) 21:47:18
宿題は宿題スレへ。勢いソートで上にあるスレに書き込むな

872 :デフォルトの名無しさん:2010/06/10(木) 21:55:42
>>869
数学的に、aCb って事?

873 :デフォルトの名無しさん:2010/06/10(木) 22:17:14
>>869
問題文は再帰を使えと誘導してる感じだな

874 :デフォルトの名無しさん:2010/06/10(木) 22:20:59
フェイクだろ。馬鹿らしい

875 :デフォルトの名無しさん:2010/06/10(木) 22:23:39
Cのための易しいアルゴリズム本ってなんですか?

876 :デフォルトの名無しさん:2010/06/10(木) 22:24:51
定本

877 :デフォルトの名無しさん:2010/06/10(木) 22:30:22
>>876
ありがとう、よさそうな本ですな。
明日本屋いってくる

878 :デフォルトの名無しさん:2010/06/10(木) 23:15:20
>comb(a, b) = comb( a-1, b) + comb( a-1, b-1)
これ意味がわからん。
comb( a-1, b) + comb( a-1, b-1) = comb( 2a-2, 2b )ならわかるが

879 :デフォルトの名無しさん:2010/06/10(木) 23:15:47
>>878
なんとかの三角形

880 :869:2010/06/10(木) 23:28:49
5C2 なら (5の階乗-2の階乗)÷2の階乗で求められるはず。
階乗を求め方はぐぐればある

881 :878:2010/06/10(木) 23:29:57
あんかミスった
>>869

882 :デフォルトの名無しさん:2010/06/11(金) 00:29:00
>>869
宿題スレに書き込んだ後、マルチだと判ったんで、ふざけるなと言いたいけど削除できないんだよな。
せめて、他スレに書くときは、最初のスレから誘導しろよ。

883 :デフォルトの名無しさん:2010/06/11(金) 01:12:38
午前様、マルチ見つけて鬼の首… もう寝ろバーカ

884 :デフォルトの名無しさん:2010/06/11(金) 01:28:12
>>869
#include <stdio.h>
#include <stdlib.h>

unsigned int comb(unsigned int a, unsigned int b)
{
if(b==0 || b==a) return 1;
return comb(a-1, b)+comb(a-1, b-1);
}

int main(int argc, char **argv)
{
if(argc != 3) return -1;
unsigned int a = (unsigned int)atoi(argv[1]);
unsigned int b = (unsigned int)atoi(argv[2]);
printf("comb(%u,%u)=%u\n", a, b, comb(a,b));
return 0;
}

885 :デフォルトの名無しさん:2010/06/11(金) 01:34:30
ふざけるな

886 :デフォルトの名無しさん:2010/06/11(金) 02:32:35


887 :デフォルトの名無しさん:2010/06/11(金) 07:43:39


888 :デフォルトの名無しさん:2010/06/11(金) 12:44:38
次の関数abcの機能を説明してくれ!

void abc(int a,int b) {
int c;

c=a;
a=b;
b=c;
}


889 :デフォルトの名無しさん:2010/06/11(金) 12:47:31
>>888
何もしない
以上

890 :デフォルトの名無しさん:2010/06/11(金) 13:24:36
そうね、何もしない。

891 :デフォルトの名無しさん:2010/06/11(金) 13:35:48
void(笑)

892 :デフォルトの名無しさん:2010/06/11(金) 13:57:57
意地悪な経験者が初心者を陥れてはストレス発散するスレはここですか?

893 :デフォルトの名無しさん:2010/06/11(金) 14:07:46
別に質問スレでもないし、いいんじゃね

894 :デフォルトの名無しさん:2010/06/11(金) 14:11:57
というか自演だろ

895 :デフォルトの名無しさん:2010/06/11(金) 14:19:07
a int型の変数
b int型の変数
c int型の変数

896 :デフォルトの名無しさん:2010/06/11(金) 14:31:02
>>895
ありがとう!

897 :デフォルトの名無しさん:2010/06/11(金) 14:31:14
>>888
関数として呼び出すときは何の効果もない
一応関数内ではaとbの値を交換しているが、関数内のローカル変数なのでとくに意味がない

898 :デフォルトの名無しさん:2010/06/11(金) 16:25:39
foo *bar; は、foo型の変数barを宣言、
&bar; は、変数barのアドレスを返す、

では、

*bar; これは一体何を返すのか教えてください。
C++やってて出て来たのですが、多分Cの問題だろうと思い、こちらに書かせて頂きました。

899 :デフォルトの名無しさん:2010/06/11(金) 17:12:30
> foo *bar; は、foo型の変数barを宣言

間違い。
foo型へのポインタ型の変数barを宣言。

900 :デフォルトの名無しさん:2010/06/11(金) 17:22:37
>>899
あ、確かに。すいません、凡ミスでした。
*bar; が知りたいのですが、こちらもお教え願えませんでしょうか?

901 :デフォルトの名無しさん:2010/06/11(金) 17:30:05
ポインタ変数 bar が指し示す foo 型のデータの実体

902 :デフォルトの名無しさん:2010/06/11(金) 17:43:31
>>901
ありがとうございます!
(*bar).foo();とメソッドを呼ぶ変わりにbar->foo();として呼べるのを思い出しました。
普段、->演算子しか使わないので、ピンと来ませんでした。
ありがとうございました。

903 :デフォルトの名無しさん:2010/06/11(金) 19:35:40
ということは
int *a;
ってやると、ポインタを入れる場所とint型変数の実体と、
領域が2つセットで自動的に確保されて、
ポインタの方にaという名前が付く、という理解でいいのでしょうか?

904 :デフォルトの名無しさん:2010/06/11(金) 19:36:50
>>903 int型変数の実体は確保されない。

905 :デフォルトの名無しさん:2010/06/11(金) 19:47:53
なるほど、実体仮体モデルですね

906 :デフォルトの名無しさん:2010/06/11(金) 20:16:50
ですね

907 :デフォルトの名無しさん:2010/06/11(金) 20:20:39
>>903
ちょっとまって、それはない

908 :デフォルトの名無しさん:2010/06/11(金) 20:54:56
>>903
実体は実体で別に準備しないといけない。

909 :デフォルトの名無しさん:2010/06/11(金) 20:57:48
char str[5] = "hello,world";

str[5]とした時点でバイト分の領域が確保されるはずです。
問題はこの後で、"hello,world"という12バイト分の文字列をstr領域に無理やり代入してみました。

この時点で不正なメモリにアクセスすることになるはずなのですが、コンパイラはOKらしいです。
sizeof使ってサイズを調べてみたら12バイトになってました。もうわけわかりません


910 :デフォルトの名無しさん:2010/06/11(金) 21:00:57
どのコンパイラ?

911 :デフォルトの名無しさん:2010/06/11(金) 21:01:49
>>909
とりあえずコードを見せてください。
おっしゃるとおりなら、それは不正なやりかたてす。環境によっては落ちるか落ちないかは時の運ということもあります。

912 :デフォルトの名無しさん:2010/06/11(金) 21:03:44
>>909
実装依存です
いわゆる鼻から悪魔です

char str[5]="hello"; // これは特別にok

913 :デフォルトの名無しさん:2010/06/11(金) 21:06:15
Ubuntsって、C言語のプログラミングの出来る環境ありますか?
vinelinux意外に、オススメのプログラミング環境があったら教えてくれないでしょうか?

914 :909:2010/06/11(金) 21:08:01
gcc version 3.4.4

#include <stdio.h>

int main(void)
{
char str[] = "hello,world";

printf("%d",sizeof(str));
return 0;
}


$ gcc -o test01 test01.c ←コンパイル問題なし

$ ./test01
12 ←どういうことやねん

915 :デフォルトの名無しさん:2010/06/11(金) 21:08:12
gccは使える。vineよりはubuntuの方が良い

916 :デフォルトの名無しさん:2010/06/11(金) 21:08:56
>>909
そのコンパイラが特殊だとしか言いようがない

917 :デフォルトの名無しさん:2010/06/11(金) 21:09:36
>>char str[] = "hello,world";

5じゃねえのかよ

918 :デフォルトの名無しさん:2010/06/11(金) 21:10:07
>>914
どこに char str[5] があるんだ?
バカなの? 死ぬの?

919 :909:2010/06/11(金) 21:10:20
すみません。[]の中に5がありませんでした

結果はこうでした
$ gcc -o test01 test01.c
test01.c: In function `main':
test01.c:5: warning: initializer-string for array of chars is too long

$ ./test01
5

920 :デフォルトの名無しさん:2010/06/11(金) 21:11:15
なんだ
ただの勘違いだったか

921 :デフォルトの名無しさん:2010/06/11(金) 21:11:58
初期化に使う値が多すぎる場合は
配列サイズの所で打ち切られるはずだ

922 :903:2010/06/11(金) 21:12:49
すると、実体を用意して数値を格納する変数として使えるようにするには
int *a;
int b;
*a = &b;
のようにすればいいんでしょうか?

923 :903:2010/06/11(金) 21:15:06
なんか違う気がしてきました
a = &b
ですか?
ポインタ難しいです

924 :デフォルトの名無しさん:2010/06/11(金) 21:16:35
>>922
そうです。それでいいです。

925 :デフォルトの名無しさん:2010/06/11(金) 21:16:35
ポインタに数値が格納されることはないから

926 :924:2010/06/11(金) 21:17:39
失礼、ちがった。
int *a
int b
a = &b
ですね。

927 :デフォルトの名無しさん:2010/06/11(金) 21:20:23
>>915
ありがとうございます。

人工知能(AI)に、興味があるのですがAIはC言語で組めるのでしょうか?
やっぱりRubyとかの方がいいのでしょうか?

928 :デフォルトの名無しさん:2010/06/11(金) 21:23:38
なぜ言語差があると考えるのだね

929 :909:2010/06/11(金) 21:24:45
>>921
なるほど。
実際には不正メモリアクセスは起こらず初期化時に打ち切られるんですね

930 :924:2010/06/11(金) 21:25:04
AI ってなんだろうか?
bonanza とかも AI なんですかね?

931 :デフォルトの名無しさん:2010/06/11(金) 21:26:42
>>929
普通は意図した動作とは違う動作になるので(値が足りなくなるから)
まずバグになる
てか、warningもerrorと差はないと考えて
warningも0になるようプログラムするのが良い

932 :デフォルトの名無しさん:2010/06/11(金) 21:30:47
>>927
どれでもいいんじゃね?関数型言語の方が適しているという話はあったが
ちなみにRubyのようなスクリプト言語よりはCの方が圧倒的に速いから、Cで良いんじゃね
新しい言語の方が多機能ではあるが

933 :909:2010/06/11(金) 21:37:47
>>931
勉強になりました。
実は他の人がそういうコード組んでて、それだ不正メモリアクセスするよと指摘してあげると
しねーよバカといわれたんです。その証拠にプログラムも問題なく動いていたからなぜ???と思った

934 :903:2010/06/11(金) 21:39:45
なんとなくわかってきたような気がします。
配列変数の場合はこんな感じでポインタを初期化すればいいんでしょうか?

int *a[10];
int b[10];
int i;
for( i = 0; i < 10; i++ ) {
  a[i] = &b[i];
}

935 :デフォルトの名無しさん:2010/06/11(金) 21:40:35
>>934
OK, OK.

936 :デフォルトの名無しさん:2010/06/11(金) 21:43:04
はい、はい。

937 :デフォルトの名無しさん:2010/06/11(金) 21:43:39
>>936
どうもどうも

938 :デフォルトの名無しさん:2010/06/11(金) 22:17:36
そうですか。
ありがとうございました。

AIをC言語で組む勉強にオススメの本などはないでしょうか?
前、探してみたところRubyとかだったので・・・

939 :デフォルトの名無しさん:2010/06/11(金) 22:22:56
どんなAIなの?

940 :デフォルトの名無しさん:2010/06/11(金) 22:29:36
>>938
まずは、既存の推論エンジンを使ってみて
推論エンジンとは何たるかを憶えることだな

それさえ解れば C でどう実装するかは作業でしかない

941 :デフォルトの名無しさん:2010/06/12(土) 10:06:31
if (! strcmp(...))

というのをよく見るんだが、読みにくいのでやめて欲しい。
if (strcmp(...) == 0) でいいじゃん、と思ってしまう。
== で比較するのはコストがかかるのだろうか。
だったらコンパイラが最適化(否定形に置き換え)してくれるのではないだろうか。

どうなの?

942 :デフォルトの名無しさん:2010/06/12(土) 10:12:26
慣れろ

943 :デフォルトの名無しさん:2010/06/12(土) 10:13:15
最適化しなくても変わんね

944 :デフォルトの名無しさん:2010/06/12(土) 10:13:30
>>941
私もstrcmp() == 0 と書くね。
まぁ、! strcmp() は慣用句だから。
ちなみに、まともなコンパイラなら同じコードになるように最適化する。

945 :デフォルトの名無しさん:2010/06/12(土) 10:13:36
では何故。

946 :デフォルトの名無しさん:2010/06/12(土) 10:14:41
読みにくくないから。
==0より簡単に書けるから。

947 :デフォルトの名無しさん:2010/06/12(土) 10:15:54
しかし違和感がある。
慣用句だから、と言えばそれまでだが。。

948 :デフォルトの名無しさん:2010/06/12(土) 10:27:57
違和感というなら strcmp() = 0 はどうよ?
言語と喧嘩しても仕方ないって

949 :デフォルトの名無しさん:2010/06/12(土) 10:34:16
それは違和感ない。
左辺と右辺が等しいとき、(左辺) - (右辺) は 0 に等しいからである。

950 :デフォルトの名無しさん:2010/06/12(土) 10:42:52
= 0 は代入だろw

951 :デフォルトの名無しさん:2010/06/12(土) 10:44:37
じゃぁ && とか || を制御構文代わりに使うのはどう思う?

952 :デフォルトの名無しさん:2010/06/12(土) 10:52:01
>>948
コンパイルエラー

953 :デフォルトの名無しさん:2010/06/12(土) 10:53:40
読めるけど使わないからどうでもいい。

954 :デフォルトの名無しさん:2010/06/12(土) 11:35:19
()の中が0かどうか、0じゃなければすぐ後ろが真で次が偽、慣れたらこちらのほうが簡単。
文も短くなるしね。

955 :デフォルトの名無しさん:2010/06/12(土) 11:38:53
()の中が0かどうか、0じゃなければすぐ後ろが真で次が偽、慣れたらこちらのほうが簡単。
文も短くなるしね。

956 :デフォルトの名無しさん:2010/06/12(土) 11:40:09
ありゃりゃ、大事なことじゃないけど2度言いました、すみません orz

957 :デフォルトの名無しさん:2010/06/12(土) 12:27:17
同じことなので2度言いました^^;

958 :デフォルトの名無しさん:2010/06/12(土) 12:42:30
(^_^;)

959 :デフォルトの名無しさん:2010/06/12(土) 13:25:57
>>950
そう、C ではね
C では strcmp() == 0 とも !strcmp() とも書くというだけ
言語と喧嘩しても仕方ないって

960 :デフォルトの名無しさん:2010/06/12(土) 13:30:55
if (0 == strcmp(...)) と書くやつだっているし。

961 :デフォルトの名無しさん:2010/06/12(土) 13:31:58
...はどういう意味ですか?

962 :デフォルトの名無しさん:2010/06/12(土) 13:33:27
省略してるだけでしょ

963 :デフォルトの名無しさん:2010/06/12(土) 14:29:58
>>960
代入と比較を間違えないようにと左辺に定数とか
もってくる奴がいるけど、正直きもすぎるw

964 :デフォルトの名無しさん:2010/06/12(土) 14:42:04
= で代入できてしまう言語仕様の方がきもい。

965 :デフォルトの名無しさん:2010/06/12(土) 15:01:51
=が演算子で代入が式として扱われるのが原因だから=で代入できてしまうこと自体が問題なのではない
きもいのなら代入式を廃して「左辺値=右辺値;」で代入文になるように文法の改定を提案したらどうだ

966 :デフォルトの名無しさん:2010/06/12(土) 15:10:31
>>941
おれもブール値のばあいは
if (b) ・・・
if (!b) ・・・
と書くけど
strcmp()のリターン値はブールじゃないから==や!=で比較する。

967 :デフォルトの名無しさん:2010/06/12(土) 15:22:24
!strcmp って書くやつは英語ができないやつだと思ってる。

968 :デフォルトの名無しさん:2010/06/12(土) 16:15:05
英語圏のプログラマで!strcmp()って書くヤツは英語ができないのかw

969 :デフォルトの名無しさん:2010/06/12(土) 16:15:35
!strcmp じゃ意味ちゃうべ

970 :デフォルトの名無しさん:2010/06/12(土) 16:25:03
>>969
常に false だな。

971 :デフォルトの名無しさん:2010/06/12(土) 16:27:04
お前ら一番最近作ったソフトどんなの?

972 :デフォルトの名無しさん:2010/06/12(土) 16:30:13
しょぼい掲示板

一度に140文字ずつしか書き込めないけどw

973 :デフォルトの名無しさん:2010/06/12(土) 16:41:27
:(;゙゚'ω゚'):

974 :デフォルトの名無しさん:2010/06/12(土) 16:46:49
小規模だけど、デーモンとそれ専用のクライアント

975 :デフォルトの名無しさん:2010/06/12(土) 16:55:58
>>965 勢いはいいけど…
#define NOT !

976 :デフォルトの名無しさん:2010/06/12(土) 17:01:33
ここにいる先生たちはmallocを自分で書けますか?

977 :デフォルトの名無しさん:2010/06/12(土) 17:03:29
かけますよ。

978 :デフォルトの名無しさん:2010/06/12(土) 17:05:27
malloc

979 :デフォルトの名無しさん:2010/06/12(土) 17:12:16
書きたくありませーん

980 :デフォルトの名無しさん:2010/06/12(土) 17:24:24
windowsとして、HeapAlloc呼び出すまで自力で書けって言うなら、俺には無理そうだな
そんな車輪の再発明みたいなことは

981 :デフォルトの名無しさん:2010/06/12(土) 18:34:24
windows なら VirtualAlloc 使おうよ

982 :デフォルトの名無しさん:2010/06/12(土) 18:38:29
「車輪の再発明」って言葉の意味を間違って使ってるやつ意外と多いよな。

983 :デフォルトの名無しさん:2010/06/12(土) 18:43:09
メモリをダンプしながら検証してたけど、うまくいかないので質問させてください。

文字列の一部を動的に確保したchar *hogeにコピーしようと思ってます。

char*piyo="ABCDEFG";
とやって、"BCDEF"をコピーする場合、

・hoge = (char*) malloc(5)ですか(6)ですか?
・strncpy(hoge, piyo+1, 5)とやったあと、*(hoge+5+1)=0は必要ですか?

984 :デフォルトの名無しさん:2010/06/12(土) 18:45:00
0で終端させたいのかさせたくないのかどっちかわからんと何とも言えない

985 :デフォルトの名無しさん:2010/06/12(土) 18:46:40
↑は*(hoge+5)=0の間違いでした。たぶん。
その後printf("%s\n", hoge)としたいので\0で終端させたいです。


986 :デフォルトの名無しさん:2010/06/12(土) 18:54:32
hoge = (char *)malloc(6);
strncpy(hoge, piyo+1, 5);
*(hoge + 5) = '\0';

987 :デフォルトの名無しさん:2010/06/12(土) 18:56:26
即レスthxです!

988 :デフォルトの名無しさん:2010/06/12(土) 18:59:52
せっかく n 系使っても、この使い方じゃセキュリティ対策にならないな

989 :デフォルトの名無しさん:2010/06/12(土) 19:01:47
>>981
ありがとう
昔の記憶で書いたのであれでしたが、ページ単位で確保するのはvirtualAlloc系でしたね
>>982
mallocぐらいになるとこう表現してもいいと思いましたが、違ってましたか

990 :デフォルトの名無しさん:2010/06/12(土) 19:04:59
>>980 なアナタは

991 :デフォルトの名無しさん:2010/06/12(土) 19:37:33
次スレ
C言語なら俺に聞け(入門編)Part 66
http://pc12.2ch.net/test/read.cgi/tech/1276339012/

992 :デフォルトの名無しさん:2010/06/12(土) 19:48:43
>>983>>986
sprintf()なら一発だぜ。
sprintf(hoge, "%.5s", piyo + 1);

993 :デフォルトの名無しさん:2010/06/12(土) 20:30:38
mallocの最終呼び出しAPIはHeapAlloc

994 :デフォルトの名無しさん:2010/06/12(土) 20:41:25
ふーん

995 :デフォルトの名無しさん:2010/06/12(土) 22:04:51
HeapAlloc であろうと VirtualAlloc であろうと、仮にそれで「作った」として
何ができたつもりになれるんだ? くっだらねー

996 :デフォルトの名無しさん:2010/06/12(土) 23:38:09
リーク追跡情報を付加する程度か? <自作malloc
環境によっちゃ既に仕込まれてたりするけど

997 :デフォルトの名無しさん:2010/06/13(日) 00:02:36
大抵既にある物より下のものしか出来ないのさorz

998 :デフォルトの名無しさん:2010/06/13(日) 00:19:52
>>995 コンパイラメーカーにでも言うんだな

999 :デフォルトの名無しさん:2010/06/13(日) 00:58:18
>>992
thxです。これでsprintf覚えました。
切り出す文字列が固定幅かそれに準ずる時はかなり使えますね。

1000 :デフォルトの名無しさん:2010/06/13(日) 01:07:10
>>999
固定じゃない場合は %.*s

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

192 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)