C言語なら俺に聞け(入門篇) Part 22
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2007/12/01(土) 15:11:31・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
前スレ
C言語なら俺に聞け(入門篇) Part 21
http://pc11.2ch.net/test/read.cgi/tech/1194384258/
教えて欲しいのではなく丸投げしたいならこちらへ
C/C++の宿題を片付けます 100
http://pc11.2ch.net/test/read.cgi/tech/1195668114/
0002デフォルトの名無しさん
2007/12/01(土) 15:12:15Part 2 ttp://pc8.2ch.net/test/read.cgi/tech/1153818463/
Part 3 ttp://pc8.2ch.net/test/read.cgi/tech/1160682950/
Part 4 ttp://pc8.2ch.net/test/read.cgi/tech/1162999861/
Part 5 ttp://pc8.2ch.net/test/read.cgi/tech/1165022193/
Part 6 ttp://pc10.2ch.net/test/read.cgi/tech/1167325490/
Part 7 ttp://pc10.2ch.net/test/read.cgi/tech/1170064980/
Part 8 ttp://pc11.2ch.net/test/read.cgi/tech/1171946674/
Part 9 ttp://pc11.2ch.net/test/read.cgi/tech/1173284217/
Part 10 ttp://pc11.2ch.net/test/read.cgi/tech/1174290325/
Part 11 ttp://pc11.2ch.net/test/read.cgi/tech/1176800483/
Part 12 ttp://pc11.2ch.net/test/read.cgi/tech/1178620766/
Part 13 ttp://pc11.2ch.net/test/read.cgi/tech/1179301993/
Part 14 ttp://pc11.2ch.net/test/read.cgi/tech/1181735298/
Part 15 ttp://pc11.2ch.net/test/read.cgi/tech/1182719692/
Part 16 ttp://pc11.2ch.net/test/read.cgi/tech/1184003625/
Part 17 ttp://pc11.2ch.net/test/read.cgi/tech/1185286631/
Part 18 ttp://pc11.2ch.net/test/read.cgi/tech/1187213990/
Part 19 ttp://pc11.2ch.net/test/read.cgi/tech/1190342593/
Part 20 ttp://pc11.2ch.net/test/read.cgi/tech/1192455273/
0003デフォルトの名無しさん
2007/12/01(土) 15:36:240004デフォルトの名無しさん
2007/12/01(土) 15:39:280005デフォルトの名無しさん
2007/12/01(土) 20:55:35http://www.geocities.jp/mirrorhenkan/
0006デフォルトの名無しさん
2007/12/01(土) 23:24:46そこのファイルを指定することできる?
0007デフォルトの名無しさん
2007/12/01(土) 23:31:23pwd、ってことはUNIX?
環境変数を取って来る関数がある。getenv()だったか。
それで環境変数PWDの値をとってくればいい。
0008デフォルトの名無しさん
2007/12/01(土) 23:50:26専用スレで答えてもらえなかったので・・・・とにかく困っています
Dim ti As Integer
Private Sub Command1_Click()
Image1.Visible = True
Timer1.Enabled = True
Text1.Text = Time
ti = 0
Text2.Text = ""
Text3.Text = ""
End Sub
Private Sub Command2_Click()
Text2.Text = Time
Text3.Text = Str(ti)
Timer1.Enabled = False
Image1.Visible = False
End Sub
0009デフォルトの名無しさん
2007/12/01(土) 23:50:58End
End Sub
Private Sub Text1_Change()
End Sub
Private Sub Timer1_Timer()
ti = ti + 1
End Sub
質問ですが、このソースでクリア(空白?)の
>>Text2.Text = ""
Text3.Text = ""
等は書いても書かなくてもいいのでしょうか?
0010デフォルトの名無しさん
2007/12/01(土) 23:56:061th/sports/part2/*
1th/work/part1/*
1th/work/part2/*
2th/sports/part1/*
2th/sports/part2/*
2th/work/part1/*
2th/work/part2/*
みたいに8個くらいの別のディレクトリに入ってるファイルに対して
同じプログラムをかけないといけない場合どうしますか?
どういう風に実行していきます?
ルートディレクトリから指定したらそのパソコンでしか使えないでしょ。
0011デフォルトの名無しさん
2007/12/02(日) 00:09:410012デフォルトの名無しさん
2007/12/02(日) 10:07:02日本語でおk
0013デフォルトの名無しさん
2007/12/02(日) 12:09:12前半と後半のつながりがさっぱりわからんが
const char* path[] =
{
"1st/"
"2nd/"
};
for (i = 0; i < sizeof(path) / sizeof(path[0]); i++) {
/* path[i] について処理 */
}
>ルートディレクトリから指定したらそのパソコンでしか使えないでしょ。
相対パスで指定するかユーザに指定してもらえば?
0014デフォルトの名無しさん
2007/12/02(日) 14:43:58新ジャンル『アルゴリズム女』
http://yutori.2ch.net/test/read.cgi/news4vip/1196506706/
サンプル、稚拙でスマン
/*------------------------------------------------------------------------------*/
男「御昼何食べる?」
女「:end; if ( FALSE == errlavele ) { GOTO step1; } else { GOTO step2; } 」
男「スパゲッティでいいか?」
/*------------------------------------------------------------------------------*/
女「while ( sub() ) { sex(); sex(); sex(); sex(); sex(); sex(); }」
男「くはっこのスキモノめ、オレ体力もつかな♪」
女「sub(){ exit(-1); } 」
0015デフォルトの名無しさん
2007/12/02(日) 17:15:54うん、すれ違いだね
0016デフォルトの名無しさん
2007/12/02(日) 19:28:260017デフォルトの名無しさん
2007/12/02(日) 19:30:22情報処理用語の読み方を確認するスレ
http://pc11.2ch.net/test/read.cgi/tech/1056173956/
0018デフォルトの名無しさん
2007/12/02(日) 19:31:130019デフォルトの名無しさん
2007/12/02(日) 19:36:04#include <stdlib.h>
#include <time.h>
struct card{int face;int suit;};
typedef struct card Card;
void fillDeck(Card *,char *[],char *[]);
void shuffle(Card *);
void deal(Card *,char *[],char *[]);
main()
{
Card deck[52];
char *face[]={"2","3","4","5","6","7","8","9","10","ジャック","クィーン","キング","エース"};
char *suit[]={"ダイヤ","クラブ","ハート","スペード"};
srand(time(NULL));
fillDeck(deck,face,suit);
shuffle(deck);
deal(deck,face,suit);
return 0;
}
0020デフォルトの名無しさん
2007/12/02(日) 19:36:45void fillDeck(Card *wDeck,char *wFace[],char *wSuit[])
{
int i;
for(i=0;i<=51;i++)
{
wDeck[i].face=i%13;
wDeck[i].suit=i/13;
}
}
void shuffle(Card *wDeck)
{省略}
void deal(Card *wDeck, char *face[], char *suit[])
{省略}
参考書には、関数fillDeckで配列の初期化を行っていると書いてあるのですが、
具体的な操作の説明が書いてなく困っています。
誰か分かる方、説明お願いします。
0021デフォルトの名無しさん
2007/12/02(日) 19:38:16system関数
0022デフォルトの名無しさん
2007/12/02(日) 19:39:51>for(i=0;i<=51;i++)
>{
>wDeck[i].face=i%13;
>wDeck[i].suit=i/13;
>}
見たまんまじゃん。
どこがわからんの。
0023デフォルトの名無しさん
2007/12/02(日) 19:40:210024デフォルトの名無しさん
2007/12/02(日) 19:41:41ありがとうございます。
0025デフォルトの名無しさん
2007/12/02(日) 19:45:03どうもありがとう。
0026デフォルトの名無しさん
2007/12/02(日) 19:59:06を数字4294967295に変換できる関数はないでしょうか。
atoiではできませんでした。
0027デフォルトの名無しさん
2007/12/02(日) 20:00:21int *heap;
heap = (int *)malloc(sizeof(int) * 10);
↑
こういう例題があるんですが、
(int)はキャスト変換で、(int)の右の値をint型に変換しているんだとして、
(int *)と、*がついているのは何故ですか?
0028デフォルトの名無しさん
2007/12/02(日) 20:03:300029デフォルトの名無しさん
2007/12/02(日) 20:06:56int は -2147483647〜2147483647 なので、4294967295 は表現できないから無理
0030デフォルトの名無しさん
2007/12/02(日) 20:12:40strtolとかsscanfでlongにするとか
0031デフォルトの名無しさん
2007/12/02(日) 20:15:35(int)はキャストじゃなくて、sizeof(int)の一部。
sizeof()で演算子になってて、()内の物のサイズを計算する。
sizeof(int)だと、int型のサイズ。
0032デフォルトの名無しさん
2007/12/02(日) 20:17:400033デフォルトの名無しさん
2007/12/02(日) 20:20:330034デフォルトの名無しさん
2007/12/02(日) 20:24:070035デフォルトの名無しさん
2007/12/02(日) 20:33:06int *型とは??
ポインタ型変数とは、int型の普通の変数のアドレスを持っている変数
って意味ではないんでしょうか?
>>31
すみません。多分、誤解だと思うのですが、私が言っているのは、
(int *)malloc
の、 ↑この部分の * のことです。分かり辛くてすみません!!
003626
2007/12/02(日) 20:39:00#include <stdio.h>
int main ()
{
char a[]= "4294967295";
unsigned int b;
sscanf(a,"%lu",&b);
printf("%lu",b);
return 0;
}
0037デフォルトの名無しさん
2007/12/02(日) 20:43:04うーん・・・。
intポインタは「intを指すポインタですよ」ってだけ。
*intでアドレス先のデータをintとして処理する。
だからmalloc(sizeof(int) * 10)で確保した領域を
int *ですと教えないとintとして使えない。
(int *)にキャストする事によって
(*heap)や*(heap+1)やheap[2]という形でint配列としてアクセスできる。
0038デフォルトの名無しさん
2007/12/02(日) 20:46:29void *型を理解しましょう。
004026
2007/12/02(日) 20:57:51どうもありがとうございます
>>34
borlandなので?strtollはつかえなかったです。
strtolはlongintまでなのでできませんでした。
>>33
long long int?はよくわからなかったんですがコンパイルできませんでした。
ところで
char a[] ="4294967295";
if(strcmp(a,"2147483647") > 0){
800000以上の処理;}
else{
atoiで変換;}
といったコードは数字を正しくできるんでしょうか。
strcmpが文字コードなので期待しているとうりに使えるかどうかがわかりません。
0041デフォルトの名無しさん
2007/12/02(日) 21:10:23heap[1]
0042デフォルトの名無しさん
2007/12/02(日) 21:18:50C89以降は暗黙的に型変換されるのでキャスト不要のはず。
0043デフォルトの名無しさん
2007/12/02(日) 21:19:14桁数が同じならうまく行くだろう
0044デフォルトの名無しさん
2007/12/02(日) 21:21:18そうゆう場合の質問はこちらでよろしいのでしょうか?
0045デフォルトの名無しさん
2007/12/02(日) 21:23:230046デフォルトの名無しさん
2007/12/02(日) 21:29:35桁数が同じならいける場合があるけど違うならダメ
0047デフォルトの名無しさん
2007/12/02(日) 21:29:53{
int i;
double s,xl,xr,dx;
s=0,0; //積分区間の面積の総和
dx=(b-a)/(double)n; //分割区間の長さ
for(i=0;i<n;++i){
xl = a + dx * (double)i; //y[n]のx座標
xr = xl + dx; //y[n+1]のx座標
s = s + (fn(xl)+fn(xr)) * dx / 2.0; // (上底+下底)*高さ/2
}
return(s);
}
計算部分のみ載せました。変なとこあったらご指導お願いします
0048デフォルトの名無しさん
2007/12/02(日) 21:36:08x^2積分したら0.33なったぞ。
どんな問題があるのか説明すれ
0050デフォルトの名無しさん
2007/12/02(日) 21:37:25intとdoubleの間の算術演算はdouble精度で行われるから、キャストいらんよ
0052デフォルトの名無しさん
2007/12/02(日) 21:38:31xlに代入する値が間違ってる希ガス
005352
2007/12/02(日) 21:41:27特におかしいところは無い気がするんだが…
0054デフォルトの名無しさん
2007/12/02(日) 21:46:14すみません、説明足らずでしたm(_ _)m
私は積分区間0〜1、fn=4*sqrt(1-x*x) で分割数を変えて誤差を測りながら実行してみたんです(積分計算すれば結果はπ)
本来なら分割数を倍するごとに誤差は1/4ずつ小さくなるのですが、私の場合綺麗に1/3ずつ小さくなってってしまうのです
-1.14159 -0.40954 -0.14648 -0.05177... といった具合に
それで、台形法のプログラム自体に手落ちがあるのではないのかとこちらに相談しに来た次第です
0055デフォルトの名無しさん
2007/12/02(日) 21:47:07どなたか.zipでください。
0056デフォルトの名無しさん
2007/12/02(日) 21:49:38誰にも身分を明かさぬまま、スパイのごとく一生を送るといいよ。
0057デフォルトの名無しさん
2007/12/02(日) 21:50:48ありがとうございます。修正しておきます
>>52
私も何度も見直したのですが、何が駄目なのかさっぱりです(T_T)
0058デフォルトの名無しさん
2007/12/02(日) 21:51:00005957
2007/12/02(日) 21:57:17そろそろスレ違いになるので数学板のほうでも覗いてきます
答えてくださった方々、ありがとうございましたm(_ _)m
0060デフォルトの名無しさん
2007/12/02(日) 21:58:030061デフォルトの名無しさん
2007/12/02(日) 21:58:54代数で計算してみればいいけど、それで正しいよ。
0062デフォルトの名無しさん
2007/12/02(日) 22:20:40int main(void)
{
int i,j,k,data1[10],data2[10];
int *p1;
int *p2;
printf("入力された文字を表示するプログラム\n");
printf("10個の文字を入力してください\n");
p1=data1;
for(i=0;i<=9;i++){
scanf("%d",&p1);
p1++;
} /*ここまでで10個の数字を入力した*/
/*ここからは10個の数字のうちの奇数とそれ以外を区分する関数*/
for(i=0;i<=9;i++){
p1--;
}
for(i=0;i<=9;i++){
printf("%d\n",p1);
p1++;
}
return 0;
}
入力された文字をポインタを使って表示させたいんですが、
このままだと、表示されずに違う数字が表示されてしまうのですが・・・
違いの指摘、よろしくおねがいします。
0063デフォルトの名無しさん
2007/12/02(日) 22:23:26たぶんこう
×scanf("%d",&p1);
○scanf("%d",p1);
×printf("%d\n",p1);
○printf("%d\n",*p1);
0064デフォルトの名無しさん
2007/12/02(日) 22:26:05ありがとうございます!うまく通ってくれました!
よろしければ、なぜそのようにしたら通ったのか教えてくれませんか?
0065デフォルトの名無しさん
2007/12/02(日) 22:31:51printfの方は、*を付けなかったらアドレスを表示するだけ
p1の指す先を見る場合は*p1
0066デフォルトの名無しさん
2007/12/02(日) 22:40:44ポインタのこの部分がずっとわからなくて今日なんとか克服しようと
頑張っていましたが、やはりつまってしまいました。
わかりやすい説明のおかげでスッキリしました。
本当にありがとうございます。
0067デフォルトの名無しさん
2007/12/02(日) 23:04:03006819-20
2007/12/02(日) 23:06:57うわー・・・事故解決しました・・・
理解した瞬間、今までの自分が理解出来なくなりました;;
スッキリしたのでmapionで遊んできます。
レスサンクスでした。
またそのうち来ます。
0069デフォルトの名無しさん
2007/12/02(日) 23:40:01nanとかinfとかでるエラー一番きらい。
0070デフォルトの名無しさん
2007/12/02(日) 23:48:14キーボードから2つの整数を読み込み〜
ってのと、
キーボードから整数を二つ入力し、変数a,bに格納する。
って、同じことですか??
0071デフォルトの名無しさん
2007/12/02(日) 23:51:060072デフォルトの名無しさん
2007/12/02(日) 23:51:35まあ同じ
0073デフォルトの名無しさん
2007/12/02(日) 23:52:44>>72
ありがとうございます。
0074デフォルトの名無しさん
2007/12/02(日) 23:53:330075デフォルトの名無しさん
2007/12/03(月) 00:17:00先日、やさしいC++〜まずは「C言語」からはじめよう!!〜という本を買いました
本書のP22の¥にC言語を用いての文字の表示について書かれていて
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
printf("test\n");
system("PAUSE");
return 0;
}
・・・と、付属のソフト(Dev-C++)へ入力すると
コマンドプロンプトで「test」と表示されるそうなのですが
「Projest is not compiled」と表示され、なぜか出来ません。
本書に書かれているありがちなミスの例には
・「;」が「:」になっていませんか?
・「半角」で入力されていますか?
・入力場所は合っていますか?
といったものが挙げられているため、上記について何度も確認をしてみたのですがそれらしいミスは自分には見つけることが出来ませんでした。
私一人では解決できそうに無いので、どなたかお力を貸していただけるとありがたいです。
0076デフォルトの名無しさん
2007/12/03(月) 00:44:12よっぽど難しい本だな。
0077デフォルトの名無しさん
2007/12/03(月) 00:46:30ソフトといやらの使い方間違ってんじゃないの?
0078デフォルトの名無しさん
2007/12/03(月) 00:54:44なんかめんどくさい書き方だなw
実際test表示するだけなら
#include <stdio.h>
main(){
printf("test\n");
}
だけ書けばおk。この書き方がいいかどうかは知らんがw
エラー文が「Projest is not compiled」
って表示されてるってことは、コンパイルせずに
いきなりプログラムを実行しようとしてるんじゃ…
0079デフォルトの名無しさん
2007/12/03(月) 00:59:46「コンパイルできてません」てエラー出てる様に見えるけど?
008075
2007/12/03(月) 01:09:18>>78をコピペしてみましたがエラーが出てしまいました
「Project is not compiled」と表示される原因も解明し、>>78、>>79の予想が見事に的中しコンパイルせずにプログラムを実行させてました
このまま同じソフトを使用し続けても打開できそうに無いので、もっと使いやすいソフトを模索してみようと思います
レスを下さった皆様、こんなくだらない質問に付き合っていただき誠にありがとうございました
0081デフォルトの名無しさん
2007/12/03(月) 01:14:380082デフォルトの名無しさん
2007/12/03(月) 01:15:10ちょww
最初はそんなもんだろwww
ほかのソフトに移っても似たような壁に最初はぶつかるよ。
その度ソフト変えてちゃ何も身につかない。
0083デフォルトの名無しさん
2007/12/03(月) 01:16:24switch( 値%2){
case 0://偶数
break;
case 1://奇数
break;
}
008475
2007/12/03(月) 01:25:19私の考えが愚かでした
自分の理解力、技術力、英語力を棚に上げソフトのせいにしようとしていました
レスありがとうございます、やはり現在使用中のソフトでもう少しだけ頑張ってみます
プログラミング等に詳しい友人がいないので、自分に合った入門者向けの書籍や使用中のソフトの参考書を探して日々精進したいと思います
0085デフォルトの名無しさん
2007/12/03(月) 01:27:540086デフォルトの名無しさん
2007/12/03(月) 01:35:14char [3];
sacanf("%c",&a,&b,&c);
0087デフォルトの名無しさん
2007/12/03(月) 01:49:11scanf("%c%c%c", &a[0], &a[1], &a[2]);
0088デフォルトの名無しさん
2007/12/03(月) 01:55:38char aaa[] = "あいうえお"; と宣言したとします。これを
あ
い
う
え
お
と表現したいです。この場合"あ"という文字のみ表現したいのですが
どのように書いたら宜しいのでしょうか?
pritnf("%s%s",aaa[0],aaa[1]);
無理でしょうかこれは
0089デフォルトの名無しさん
2007/12/03(月) 01:59:11腐るほど試して教科書読んで試してから
わからなかったら書き込め。
0090デフォルトの名無しさん
2007/12/03(月) 02:03:22計算結果より計算量と勝負するのはいやだ。
0091デフォルトの名無しさん
2007/12/03(月) 02:04:49すいません、何通りか試した結果エラーで表示されないので質問しました。
解説読んだ限りですと、2バイト使用なのでアドレス2個表示すればいいのかな?
と思ったのですが2バイト分を指定して表示するという方法が思いつかないもので・・・
0092デフォルトの名無しさん
2007/12/03(月) 02:09:330093デフォルトの名無しさん
2007/12/03(月) 02:19:24たくさん使うプログラムは危険?
0094デフォルトの名無しさん
2007/12/03(月) 02:44:30有難うございます!マルチバイト表示出来たの初めてです
pritnf("%c%c",aaa[2*x-2],aaa[2*x-1]);
で出来ました。ヒント有難うございます
0095デフォルトの名無しさん
2007/12/03(月) 03:26:18error C2275: 'FILE' : この型は演算子として使用できません
: 'FILE' の宣言を確認してください。
error C2065: 'fpin' : 定義されていない識別子です。
っていうエラーがでてしまいます。どなたか解決策を教えてください。
#include <stdio.h>
int main()
{int i, j;
double S, h;
double x[15], y[15];
char c;
h = 0.1;
printf("入力\n");
FILE *fpin;
fpin=fopen("in.txt", "r");
while(fscanf(fpin, "%c", &c) != EOF)
for(i=0; i<15; i++)
{fscanf(fpin, "%lf", &x[i]);
fscanf(fpin, "%lf", &y[i]);
printf("x[%d] = %lf y[%d] = %lf \n", i, x[i], i, y[i]);
}
printf("面積\n");
S = 0.0;
for(i=0; i<14; ++i)
{
S += h*(y[i] + y[i+1])/2.0;
}
printf("S=%15.10lf \n", S);
getchar();
}
入力データ→http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5388.txt
0096デフォルトの名無しさん
2007/12/03(月) 03:33:43009795
2007/12/03(月) 04:33:2495です。解決しました。
ありがとうございました。
0098デフォルトの名無しさん
2007/12/03(月) 07:10:51int b[a];
て、できる?
0099デフォルトの名無しさん
2007/12/03(月) 07:11:44int a=5;
int b[a];
もできるけど。
0100デフォルトの名無しさん
2007/12/03(月) 07:12:30俺はこう書いたんだ
if(answer == 'y' || answer == 'Y' )
これをもうちょっと縮めて書くことはできない?
条件増やしまくるとマンドクサくなるんだが……。
0101デフォルトの名無しさん
2007/12/03(月) 10:03:560102デフォルトの名無しさん
2007/12/03(月) 10:28:190103デフォルトの名無しさん
2007/12/03(月) 11:08:46一目見て何をやってるか判断できるような書き方を徹底したほうがいい。
組み込み系のような非力な環境や画像処理でもない限り、処理速度が問題になることはそうそう無い。
効率はプログラム完成後にプロファイラ使って、時間食ってる関数を重点的に修正すれば劇的に改善する。
そもそも中級〜上級スレ向きの話題だしな。
0104デフォルトの名無しさん
2007/12/03(月) 11:30:37#define ANY_CASE_MATCH(v,lc) ((v) == (lc) || (v) == (lc) + 'A' - 'a')
if(ANY_CASE_MATCH(answer,'y')){}
0105デフォルトの名無しさん
2007/12/03(月) 15:50:34可読性重視ならよけいに100のままで良くね?
0106デフォルトの名無しさん
2007/12/03(月) 15:54:16>103は暗にそう言っているのではないか?
0107デフォルトの名無しさん
2007/12/03(月) 15:56:410108デフォルトの名無しさん
2007/12/03(月) 16:14:32を
for(i=max;i && !flg[i];i--) statement;
と書くと同じようには動きません。
何故でしょうか。
0109デフォルトの名無しさん
2007/12/03(月) 16:18:070110デフォルトの名無しさん
2007/12/03(月) 16:19:36違うように書いているのだから、同じように動かないのは当然ですね。
0111デフォルトの名無しさん
2007/12/03(月) 16:53:08#include <stdio.h>
int main(){
int flg[10] = {0,0,1,0,0,1,1,0,0,0};
int i;
for(i=9;i;i--) if(!flg[i]) printf("%d",i);//987431
putchar('\n');
for(i=9;i && !flg[i];i--) printf("%d",i);//987
return 0;
}
flg[0]が読み取られないじゃねえか馬鹿野郎
0113デフォルトの名無しさん
2007/12/03(月) 18:27:21皆さんコンパイラはどれをつかってるんですか?
0114デフォルトの名無しさん
2007/12/03(月) 18:29:330115デフォルトの名無しさん
2007/12/03(月) 18:37:02マイクロソフト社のビジュアルスタジオだっけ?
あれってC++とかしかないんだよね?
0116デフォルトの名無しさん
2007/12/03(月) 18:41:180117デフォルトの名無しさん
2007/12/03(月) 18:44:40マイクロソフトのビジュアルスタジオ
↓
CVC
↓
CBC
↓
BCC
0118デフォルトの名無しさん
2007/12/03(月) 18:46:380119デフォルトの名無しさん
2007/12/03(月) 18:59:53聞いたんだよ・・・
ビジュアルスタジオっていうのはC++しかないんだよねって
だから俺もBCCとか使おうかなって意味です・・
0120デフォルトの名無しさん
2007/12/03(月) 19:00:310121デフォルトの名無しさん
2007/12/03(月) 19:05:430122デフォルトの名無しさん
2007/12/03(月) 19:08:09ビジュアルスタジオはVB,VC++,VC♯が入ってるくさい。
0123デフォルトの名無しさん
2007/12/03(月) 19:09:110124デフォルトの名無しさん
2007/12/03(月) 19:09:28普通にプロジェクト作ると、拡張子cのファイルもC++としてコンパイルしてくれるけど。
0125119
2007/12/03(月) 19:20:39無知な俺にいろいろ教えてくれてありがとう
C++はCからの派生ということだと思っているんだが
C++はC+αってことでいいのかな?
ならVC#をDLすればCもC++もコンパイルしてくれるってこと?
0126デフォルトの名無しさん
2007/12/03(月) 19:32:270127デフォルトの名無しさん
2007/12/03(月) 19:33:390128デフォルトの名無しさん
2007/12/03(月) 19:34:400129デフォルトの名無しさん
2007/12/03(月) 19:36:07すぐわかる。
0130デフォルトの名無しさん
2007/12/03(月) 19:39:02間違い。C++はCのうち重要な機能が割愛されていたりするので要注意。
# まぁ、入門レベルじゃ関係ないが。
0131デフォルトの名無しさん
2007/12/03(月) 19:48:10そんたのあったっけ?後学のために教えてくれ。
0132デフォルトの名無しさん
2007/12/03(月) 19:53:35(´・ω・`)どうせc99乙って言われるがな
0133デフォルトの名無しさん
2007/12/03(月) 20:14:51暗黙の型システムの侵犯につながる機能があちこち塞がれている。
void*から他のポインタ型への暗黙の変換がないことはその最たる例。
0134デフォルトの名無しさん
2007/12/03(月) 20:17:40だったんですが、違うんでしょうか?
0135デフォルトの名無しさん
2007/12/03(月) 20:19:470136デフォルトの名無しさん
2007/12/03(月) 20:22:11個人的にはTurbo C++ Explorerも真のRADでいい感じなんだが。
コマンドラインでのコンパイルもbcc32.exeで可能だし、BCCと使い勝手は変わらない。
0137デフォルトの名無しさん
2007/12/03(月) 20:23:39例えがわけわかめ
0138デフォルトの名無しさん
2007/12/03(月) 20:27:130139デフォルトの名無しさん
2007/12/03(月) 20:28:59現在のCの文法の概念が
C++から取り入れられてるのが多い。
0140デフォルトの名無しさん
2007/12/03(月) 20:31:39C++はCの上位互換ではない。
0141デフォルトの名無しさん
2007/12/03(月) 20:35:16マジすか?
Cで書いたソースを、まんま拡張子だけ.cppに変えてコンパイルすると
通るって聞いたけど。
0142デフォルトの名無しさん
2007/12/03(月) 20:39:120143デフォルトの名無しさん
2007/12/03(月) 20:40:44実際のところ、Cのみの処理系なんてもうほとんど存在しないんだし、
だいたいの人はC++処理系をC処理系として利用してるだろう。そんなに気にすることじゃないよ。
0144デフォルトの名無しさん
2007/12/03(月) 20:42:40malloc()の戻り値を適切な型にキャストしてなきゃ通らんだろうし
っていうか、それなんて言うコンパイラ?
0145デフォルトの名無しさん
2007/12/03(月) 20:43:29頼むよ、猫!!orz
ちなみに UNIX C と、Windows C はどう違いますか?
0146デフォルトの名無しさん
2007/12/03(月) 20:44:470147デフォルトの名無しさん
2007/12/03(月) 20:48:08ここ↓に書いてあったんですよ!
http://www.kumei.ne.jp/c_lang/cpp/cpp_00.htm
「極端なことをいうと全部C言語で書いてもC++のプログラムになります。嘘だと思ったら、今まで書いてきたCのソースファイルを「xxx.c」から「xxx.cpp」にリネームして、C++でコンパイルしてみてください。多分問題なくコンパイルできるはずです。」
0148デフォルトの名無しさん
2007/12/03(月) 20:50:06中身がCソースで拡張子がcppの場合は、C++ソースとしてコンパイルするので問題になる可能性がある。
つまり、C++としてのCへの準拠度の話なわけだ。
もちろん、拡張子がcppでも、コンパイラにCソースとしてコンパイルするようオプションを指定すれば問題無いはず。
0149デフォルトの名無しさん
2007/12/03(月) 20:51:47違いっていうよりも共通項は文法のみ
簡単なC言語のプログラミングならそうかわらんだろうけど
API関連となると全く変わってくる
0150デフォルトの名無しさん
2007/12/03(月) 20:52:11「malloc関数が返すアドレスは、void型のポインタです。
この型は、どんなポインタ変数にも代入出来るという型なので、
本当は(int *)にキャストする必要はないのですが、
C++コンパイラではキャストしないとエラーがでます。」
らしいです。
>>143
↑みたいな例が駄目な例なんですね。
0151デフォルトの名無しさん
2007/12/03(月) 20:53:01初期化の数が多いとエラーが出て思うようにいきません。
文字の数を減らす以外に方法はないですか?
char hairetu[5][5]={
{"笑","笑","笑","笑","笑"},
{"笑","笑","笑","笑","笑"},
{"笑","笑","笑","笑","笑"},
{"笑","笑","笑","笑","笑"},
{"笑","笑","笑","笑","笑"}
};
0152デフォルトの名無しさん
2007/12/03(月) 20:54:160153デフォルトの名無しさん
2007/12/03(月) 20:56:250154デフォルトの名無しさん
2007/12/03(月) 20:56:36その人は糖尿病医やってるけど暇と金をもてあまして
VS購入して「こんな事できるんだぜ」って自慢したくて
しかたがないプログラマーだからね
0155デフォルトの名無しさん
2007/12/03(月) 20:57:54そうなんですか。いいこときいた。
猫に理解できる筈ないですもんねぇ。。
0156デフォルトの名無しさん
2007/12/03(月) 20:59:18コードはどうしようもないけどお世話になったよ「猫でも」には
0157デフォルトの名無しさん
2007/12/03(月) 21:04:00どっちもオレなんだけどw
「C++ソースとしてのC文法」と「CソースとしてのC文法」。この違いを理解してくれ。
VC2005やBCCなどのC++処理系を使っても、Cソースとして書いてCソースとしてコンパイルする限り問題は起こらない。
そういう意味で気にするなと言っている。そもそもC++はスレ違いだし。
0158デフォルトの名無しさん
2007/12/03(月) 21:10:30違います!↑の位置がもろ>>143に向いてたので誤解されちゃいましたねorz
「駄目な例」ってのは、「malloc関数を使う時はCの文法がC++のコンパイラで通らない」
って意味で、↑は、上の「malloc関数が返すアドレスは〜〜」の文章を指してるんですね。
分かりづらくてすみません!汗
「C++ソースとしてのC文法」と「CソースとしてのC文法」。
これが若干違うんですね。スレ違い、失礼しました。
0159デフォルトの名無しさん
2007/12/03(月) 21:15:09UNIX C に慣れた人間が、Windowsフォーム、バリバリのアプリケーション
を作れるようになるには、どのくらいかかるでしょうか?
0160デフォルトの名無しさん
2007/12/03(月) 21:16:50UNIXもフォームはあるだろう UNIXでアプリを作れるならたいしたことはないだろう
DOS、CUIしかやったことないならかなりかかる
0161デフォルトの名無しさん
2007/12/03(月) 21:18:07DOSだけなので、かなりかかりますね。。ありがとうございました。
0162デフォルトの名無しさん
2007/12/03(月) 21:21:45GUIプログラミングの出来る、C#とかボーランドC++とかなら速いのでは?
使い方で憶えることは多いけど、動かせればVC++よりは速そう
0163デフォルトの名無しさん
2007/12/03(月) 21:23:10>VC2005やBCCなどのC++処理系を使っても
なんと無く違和感あるな。
C++コンパイラとしてもCコンパイラとしても動くんであって、
別にC++の処理系使ってCのソースコンパイルしてる訳じゃないんじゃ?
0164デフォルトの名無しさん
2007/12/03(月) 21:26:19うむ。正しくはC/C++処理系だね。
0165デフォルトの名無しさん
2007/12/03(月) 21:30:56でも今求められてるのは、VC++なんです。死亡するしか・・・
何が分からないって、レジストリとかINIファイルとかが分かりません・・・。
これらの扱い方を知るのにはどのくらいかかるでしょうか?
0166デフォルトの名無しさん
2007/12/03(月) 21:32:40適切な本があれば一日でおk
0167デフォルトの名無しさん
2007/12/03(月) 21:32:59C++ではできなくなったことを考えると、やはり推奨されない書き方なんでしょうか?
0168デフォルトの名無しさん
2007/12/03(月) 21:37:25VBじゃないんだから
適切な型を適切な場所に書きましょうや
0169デフォルトの名無しさん
2007/12/03(月) 21:38:24んだば、がんばるべ。
0170167
2007/12/03(月) 21:47:07そうですよね。いちおう慣習に従いたいと思いまして質問しました。
やはり、面倒でも普段からきっちり書く癖を付けとくのは大事ですよね
0171デフォルトの名無しさん
2007/12/03(月) 21:48:13.DATと同じく、慣習的に設定を記録するテキストファイルを「.INI」で
保存しているだけなんでしょうか?
0172デフォルトの名無しさん
2007/12/03(月) 21:49:29自分で使う分にはいいんでないかな。
0173デフォルトの名無しさん
2007/12/03(月) 21:52:59DOS窓からコンパイル、実行しようとしてもできないのですが
0174デフォルトの名無しさん
2007/12/03(月) 21:57:32了解しました!ありがとうございました!!
0175デフォルトの名無しさん
2007/12/03(月) 22:01:17それくらい自分で調べないと、先は厳しいぞ?
はっきり言って、プログラミングは調べ物のオンパレードだ。
0176デフォルトの名無しさん
2007/12/03(月) 22:01:50VS2005コマンドプロンプトを開いてそこからコンパイルしる
0177デフォルトの名無しさん
2007/12/03(月) 22:05:24どうにか解決できました・・・
type 名前.cで一度開かないとだめみたいでしたね
わからないことが多すぎ
これじゃぁ先が思いやられるなorz
0178デフォルトの名無しさん
2007/12/03(月) 22:07:440179デフォルトの名無しさん
2007/12/03(月) 22:09:56違うのですか?
できれば教えてほしいのですが
0180デフォルトの名無しさん
2007/12/03(月) 22:15:00Visual C++ 2005 Expressを使ってると仮定するけど。
まずは↓あたりを参考にしてセットアップしてくれ。
http://lets-go.hp.infoseek.co.jp/c_setting09.html
0181デフォルトの名無しさん
2007/12/03(月) 22:23:01Platform SDKをインスコすればいいのですね?
0182デフォルトの名無しさん
2007/12/03(月) 22:34:03さらにコマンドラインでコンパイルしたいなら、
1.↓のファイルを別名でコピーとかしてバックアップしておく。
C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat
2.テキストエディタで↑を開く。
3.以下の3行を探して編集する。
@set INCLUDE=先頭にPlatform SDKのIncludeフォルダを追加(セミコロン区切り)
@set LIB=先頭にPlatform SDKのLibフォルダを追加(セミコロン区切り)
@set LINK=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib
4.スタートメニューから[Visual Studio 2005 コマンド プロンプト]を起動。
5.cl.exe hoge.c
0183デフォルトの名無しさん
2007/12/03(月) 22:52:06それをやるとどうなるの?
180のやつですぐコンパイルできるんじゃないのですか?
初心者過ぎてすいません><
0184デフォルトの名無しさん
2007/12/03(月) 22:56:04コマンドラインでコンパイルしたいんでしょ?
>>180はIDEのセットアップ。>>182はVS2005コマンドラインのセットアップ。
コマンドラインを使わないなら>>182は不要。
0185デフォルトの名無しさん
2007/12/03(月) 22:59:23こまんど・・・らいん?
0186デフォルトの名無しさん
2007/12/03(月) 23:02:34コマンドライン=DOS窓
0187デフォルトの名無しさん
2007/12/03(月) 23:08:00ありがとうございます
アプリケーションからOSを操作することによってどうなるのですか?
0188デフォルトの名無しさん
2007/12/03(月) 23:10:31struct s1
{
int num;
};
のように、中のメンバを1個にするなら、あまり意味がないと思っていいのでしょうか?
0189デフォルトの名無しさん
2007/12/03(月) 23:13:34敢えてそうしているプログラムがあるなら、何か理由があるのでしょう。
普通は、そういうところにこそコメントを書いておくものですが。
0190デフォルトの名無しさん
2007/12/03(月) 23:13:54アプリケーションからOSを操作することができます。
0191デフォルトの名無しさん
2007/12/03(月) 23:14:05アプリケーションからOSを操作したいんですか?
0192デフォルトの名無しさん
2007/12/03(月) 23:14:39アプリケーションからDOS窓を操作できると考えていいのですか?
0193デフォルトの名無しさん
2007/12/03(月) 23:16:04DOS窓から起動
0194151
2007/12/03(月) 23:18:32char hairetu[5][5]={
{1,1,1,1,1},
{1,1,1,1,1},
{1,1,1,1,1},
{1,1,1,1,1},
{1,1,1,1,1}
};
型が違うので#define 1 笑とできないのですが、
別の表記の仕方ありますか?
笑笑笑笑笑
笑笑笑笑笑
笑笑笑笑笑
笑笑笑笑笑
笑笑笑笑笑
結果的に上のように表示して、上のようにしたいのですが。
switch(map[5][5])が使えず参っています。
0195デフォルトの名無しさん
2007/12/03(月) 23:18:39/* #include <string.h> は要らないかな・・・ */
int testchk(char[] str) {
printf("%s", &str);
return 0;
}
void main() {
// int rev(char[]);
char str[5] = "aaaa";
testchk(str);
}
エラー E2293 dame.c 3: ) が必要
*** 1 errors in Compile ***
間違ってないと思うのですが、なぜ3行目に ) が必要だとエラーが出るのでしょうか?
)を足しても )が必要だと言われ続けます。)の数は間違ってないと思います。
0196デフォルトの名無しさん
2007/12/03(月) 23:19:17待て。
DOS窓はOSじゃない・・・とも言い切れないがなんか違う。
うまく簡単に言えんなぁ。
ようは、マウスから入力してWindowsを操作する(GUI)のではなくて
キーボードから文字を打ち込むことでWindowsを操作する(CUI)ためのアプリだ。
WindowsXPだと、スタートメニュー→全てのプログラム→アクセサリ→コマンドプロンプトだ。
0197デフォルトの名無しさん
2007/12/03(月) 23:22:24int testchk(char str[]) {
0198デフォルトの名無しさん
2007/12/03(月) 23:22:46確かめてないけど、
int testchk(char str[]) {
こうちゃうか?
char[] strとかってC++はそう書けたっけ?
Cなら他には char* strとか?
0199デフォルトの名無しさん
2007/12/03(月) 23:27:21あなたは間違っていません
世の中のCコンパイラが間違っているのです
これでいい?
0200デフォルトの名無しさん
2007/12/03(月) 23:29:30int testchk(char str[]) {
printf("%s", str);
return 0;
}
0201デフォルトの名無しさん
2007/12/03(月) 23:30:12マウスから操作するのではなく
キーボードで操作するところまでは理解できました。
アプリケーションでOSを動かすというのは
例えば
普通はマウスでDOS窓を開いた場合はアプリケーションでOSを動かしたとは言わない
しかしキーボードから文字を打ち込みDOS窓を開いた場合(開けるかわからんが)はアプリケーションでOSを動かしたといえる
こんな感じですかね?
0202デフォルトの名無しさん
2007/12/03(月) 23:33:36超エスパーだが、こういうことがしたい?
int i,j;
for(i=0;i<5;i++){
for(j=0;j<5;j++){
switch(map[i][j]){
case 1:
printf("笑");
break;
default:
printf(" ");
break;
}
}
printf("\n");
}
なんか正直switchとかdefineとか、
出てくるところが分からないんだけど
0203デフォルトの名無しさん
2007/12/03(月) 23:42:38>>201
キーボードから文字を打ち込みDOS窓を開くって、スタートメニューのファイル名を指定して実行の文字列にcmdを
入れるって事を意識してる?
また、別の手法でドス窓から別のDOS窓を新規で起動しても、
「アプリケーションでOSを動かした」とは言えない気がする。
この場合、DOS窓と言うOSアプリケーションでOSのアプリをもう一個動かしたと表現するなら理解出来そうな気がする。
0204デフォルトの名無しさん
2007/12/03(月) 23:43:29意味が分からないんだけど、複雑に考えすぎじゃない?
そもそもアプリケーションでOSを動かすってどこから出てきた?
0205デフォルトの名無しさん
2007/12/03(月) 23:44:27>アプリケーションでOSを動かす
>>187 = >>201なら、「アプリケーションでOSを動かす」という言葉は忘れろ。
誰もそんなことは言ってない。
Windows(またはDOS窓)には「環境変数」と言うものがあって、
VC(またはcl.exe:コンパイラ)は、実行するときにその「環境変数」から動作環境を取得する。
その環境変数の設定が>>182であり、>>184でいう「VS2005コマンドラインのセットアップ」
それぞれの環境変数(動作環境)の意味は、まずは知らなくても良いと思うよ。
0206デフォルトの名無しさん
2007/12/03(月) 23:45:46OSに対して何かのリクエストを働きかけて結果のレスポンスを得る事が
「OSを動かす」事でいいの?
0207デフォルトの名無しさん
2007/12/03(月) 23:53:380208デフォルトの名無しさん
2007/12/03(月) 23:55:15お前は 「コンパイルする方法を知りたい」 のか?
「DOS窓からコンパイルする方法を知りたい」 のか?
0209デフォルトの名無しさん
2007/12/04(火) 00:07:44なんかややこしくなってきたorz
とりあえずC言語が終わったらその意味を調べることにするよ
ありがとうございました
>>208
コンパイルする方法をしりたいです。
DOS窓からはtype 名前.cで読み込ませcl 名前.cでコンパイルしたんだけど
なんか違うらしい・・・
できればコンパイルの方法を教えてください
0210デフォルトの名無しさん
2007/12/04(火) 00:10:28>とりあえずC言語が終わったらその意味を調べることにするよ
今調べなさい
0211デフォルトの名無しさん
2007/12/04(火) 00:11:19えーと
APIを導入するみたいなことで・・・
APIとはアプリケーションからOSを起動するみたいなことだったから
0212デフォルトの名無しさん
2007/12/04(火) 00:13:23すいません・・・
今調べました
VC++で組んだプログラムで電源をOFFにしたりできるってことですよね?
0213デフォルトの名無しさん
2007/12/04(火) 00:14:00今Unixシステムコールでパイプを使う練習してるのですが、
下のように書くと親プロセスがread()のあたりで止まってしまいます。
これはなぜなんでしょうか。
int main(int argc, char ** argv)
{
pid_t pid = fork() ;
int fd[2] ;
pipe(fd) ;
if( pid == 0 )
{
close(1) ;
dup2(fd[1],1) ;
execlp("echo","echo","hoge",NULL) ;
}
else if( pid > 0 )
{
int status ;
close(0) ;
dup2(fd[0],0) ;
waitpid(pid,&status,0) ;
char buffer[10] = {'\0'} ;
read(0,buffer,sizeof(buffer)) ; // ここで止まる
printf("%s",buffer) ;
printf("end\n") ;
}
return 0 ;
}
0214デフォルトの名無しさん
2007/12/04(火) 00:14:05起動じゃないな
処理を依頼するって感じ
APIによっては機能を借りるとか
0215デフォルトの名無しさん
2007/12/04(火) 00:18:52もちろんそういうAPIもある。ExitWindowsExだっけ?
0216デフォルトの名無しさん
2007/12/04(火) 00:24:03で、それがしたいのか?
かいつまんで調べるんじゃなくてコマンドラインについて勉強してください
0217デフォルトの名無しさん
2007/12/04(火) 00:26:01VC++立ち上げてメニュー項目のツール選んだらドロップダウンの
項目の中にVS2005コマンドプロンプトってのがあるでしょ?
それを開いたらパスの通ったいわゆるDOS窓ってやつが開くから
そこからcd..でコンパイルしたいファイルのあるフォルダに移動して
そこでcl.exeを使用してコンパイル出来る。
ファイル名を指定して実行でcmdって打ってコマンドプロンプト
開いてもそれはパスの通ってないコマンドプロンプトだから意味無い
ていうか、普通にIDEの機能使ってコンパイル・実行してれば
良いじゃん
0218213
2007/12/04(火) 00:35:52お邪魔しました。
0219デフォルトの名無しさん
2007/12/04(火) 00:39:22すいません
俺のせいで・・・
とりあえずもう一度調べてまた来ます
0220デフォルトの名無しさん
2007/12/04(火) 00:41:25止まらんぞ?
0221デフォルトの名無しさん
2007/12/04(火) 00:50:15■最近流行りのSM系サイトを知っていますか?
それは「SMプレイをすること」を最終目的とした人達が集まる出会い系サイトのことです。
普通の出会い系サイトと一味違った、熱い出会いが全国各地で繰り広げられています。
《ブログ SM系サイトが会える訳》
http://smsite.blog123.fc2.com/
ブログでは管理人一押しのSM系サイトを紹介しています。
是非ご利用下さい。
0222デフォルトの名無しさん
2007/12/04(火) 00:51:12Platform SDKを入れる目的はC/C++のネイティブコードを生成するためだ。
何故なら、VC++2005Express単体では.NETベースのアプリしか作れないから。
もちろん人によってはWinAPIを使うためでもあるんだが、それはWindows GUIプログラムを
やるようになってから気にすればいい話で、入門には全く関係無いと思っていい。
だからとりあえずは、「.NET用のコンパイラをC/C++に対応させるために必要」とだけ考えればいいよ。
…って、もういないのか。
0223デフォルトの名無しさん
2007/12/04(火) 01:17:20/* #include <string.h> は要らないかな・・・ */
int testchk(char str[]) {
printf("%s", str);
return 0;
}
void main() {
// int rev(char[]);
char str[5] = "aaaa";
testchk(str);
}
で正常に動作しました。皆さんありがとうございました。
char[] str としていたのが原因でした。 char str[] でOKでした。
C言語はちょろっとやって、今はJavaをずっとやっているせいで配列の書き方Javaみたいに
書いてしまって間違ってました。 Javaだと String[] args とか書くので・・・あちゃー・・・。
こりゃ間違いに気づかないわ・・・。
0224デフォルトの名無しさん
2007/12/04(火) 03:19:07ただのC/C++プログラム書くだけだったら、ただのVC++ EEでも
標準C/C++ライブラリは使えるし、
コンパイラもネイティブな機械語吐くしで、
Platform SDK要らなくないか?
0225デフォルトの名無しさん
2007/12/04(火) 08:00:40そもそも「笑」が2byteだということを理解してる?
0226デフォルトの名無しさん
2007/12/04(火) 08:21:32Javaはcharって2byteだよね。C言語のcharは1byteだから 「笑」は1つの要素内には入りきれない
って事か。他の人の質問だけどオレも思い出しつつ勉強になるw
0227デフォルトの名無しさん
2007/12/04(火) 08:53:410228デフォルトの名無しさん
2007/12/04(火) 10:43:260229デフォルトの名無しさん
2007/12/04(火) 12:23:300230デフォルトの名無しさん
2007/12/04(火) 12:27:400231デフォルトの名無しさん
2007/12/04(火) 13:50:51調べてみたが、どうやら標準C/C++のコンソールアプリだけならその通りらしい。
必ずPlatform SDKも入れてたからあんまり深く考えてなかったよ。
というわけで、Windows APIが不要ならばPlatform SDKは不要ということだな。
まあ入れておいても損は無いものだし、どうせ後で使いたくなるだろうから、
面倒くさいセットアップは最初に済ませておいたほうがラクだというのは変わらんが。
0232デフォルトの名無しさん
2007/12/04(火) 14:06:18OSを再インストールしているかも知れない。
0233デフォルトの名無しさん
2007/12/04(火) 14:53:29スマンが何が言いたいのかわからん。結論を述べてくれ。
0234デフォルトの名無しさん
2007/12/04(火) 15:29:11>232
>どうせ後で使いたくなるだろうから、
そんとき入れれば充分。
0235デフォルトの名無しさん
2007/12/04(火) 20:19:10格納している配列要素の値を0に書き換える。すると新しい配列においては、もとの配列で
大きい方から数えて2番目の数値が最大値となっている。さらにもう一度、この新しい配列
における最大値を格納している配列要素の値を0に書き換える。するとこの時点でのさらに
新しい配列では、最初の配列において大きい方から数えて3番目の数値が最大となってい
る。このことを利用して、下記のプログラムを作成せよ。
(ここで示した方法は、いわゆる整列(ソーティング)問題の1つの解法となり得るが、効率的
な方法ではない)
まずメイン関数において、キーボードから正の整数の個数(100以内)を入力し、次いで実
際の数値を配列に入力する。そしてメイン関数はサブ関数に、入力した個数と配列を引数とし
て渡す。
サブ関数は、これらの配列から、まず1番目に大きい数を見つけて、それを別途設けた配列
の先頭の要素に格納し、次に2番目に大きい数を見つけてこれをこの配列の先頭から数えて
2番目の要素に格納し、という処理を最後の数に至るまで繰り返す。これにより新しい配列に
は大きい数から順に並んでいることになるので、これを引数を利用してメイン関数に渡す。(す
なわちサブ関数は引数を3つ持つことになる。1つはデータの個数を示す変数、1つは入力デ
ータを格納する配列、残りの1つはサブ関数で計算した結果を格納する配列である)
最後にメイン関数はサブ関数で計算された新配列の値を若い方の要素から順に(即ち大き
い数から順に)画面に表示する。またこの数列の中央値を表示する(中央値に小数が含まれ
る場合は、その小数を切り捨てた整数を表示することとする)。
0236デフォルトの名無しさん
2007/12/04(火) 20:22:460237デフォルトの名無しさん
2007/12/04(火) 23:36:42あれ、wchar_tって4byteのこともあるの?
wのcharで必ず2byteだと思ってた
0238デフォルトの名無しさん
2007/12/05(水) 00:17:56Linuxだと4byteだったりすることもある
0239デフォルトの名無しさん
2007/12/05(水) 00:24:38wchar_tって文化固有の言語をサポートする固定長の文字コードのことだったような。
0240デフォルトの名無しさん
2007/12/05(水) 00:28:03void sort_ch(char *buf) {
int i, j;
char key;
for (i=1; buf[i] != '\0'; ++i) {
for (j=i; j>=1; --j) {
if (buf[j] < buf[j-1] ){
key = buf[j];
buf[j] = buf[j-1];
buf[j-1] = key;
}
}
}
}
int main() {
char buf[256] = {'\0'};
fgets(buf, sizeof(buf), stdin);
sort_ch(buf);
printf("%s\n", buf);
return 0;
}
ポインタ変数を扱う場合、配列( [ ] )として扱わず、間接参照演算子( * )を用いること。
これがわかりません・・・どうすればいいんでしょうか
0241デフォルトの名無しさん
2007/12/05(水) 00:37:13そういやwはダブルじゃなくてワイドだよね orz 逝ってくる
0242デフォルトの名無しさん
2007/12/05(水) 01:04:20#include <stdio.h>
void sort_ch(char *buf)
{
int i;
int j;
char key;
for ( i = 1 ; *(buf + i) != '\0' ; ++i )
{
for ( j = i ; j >= 1 ; --j )
{
if ( *(buf + j) < *(buf + j - 1 ) )
{
key = *(buf + j);
*(buf + j) = *(buf + j - 1 );
*(buf + j - 1 ) = key;
}
}
}
}
int main( void )
{
char buf[256] = {0};
fgets( buf, sizeof(buf), stdin );
sort_ch( &buf[0] );
printf("%s\n", &buf[0]);
return 0;
}
0243デフォルトの名無しさん
2007/12/05(水) 01:05:57追記。
自分だけなら別にいいけど、人にソースを見せる場合とかは、
つめすぎず、ifやらwhileやらの行に{をつけず
改行してインデントをつけて{をつけると、ブロックが分りやすくなるよ。
っていうか自分で見てても分りやすくなってミスってる部分すぐわかる。
0244デフォルトの名無しさん
2007/12/05(水) 01:10:28説明忘れてた。
char型配列はアドレスが1づつずれてる(1Byteだから)
だから*ポインタの指し示すアドレスの中身
(*は中身 &はアドレス)
よって、bufの中身 *buf で そのbufが保存しているアドレス+iとかjとか、つまりカウントアップさせていっているから
1づつアドレスがずれて処理が出来るってこと。
ポインタは「アドレス」と「アドレスが示す中身」を把握すればどってことないよ
0245デフォルトの名無しさん
2007/12/05(水) 01:49:59>>240
要するに buf[i] を *(buf + i) と書け、ってことだ
0246デフォルトの名無しさん
2007/12/05(水) 02:36:13{
char name
int low, high, average;
int count;
Order *key;//構造体へのポインタ
}Firtst;
このような構造体を作成し
First **first; を宣言します。
これに対して領域の確保+ゼロクリアを行いたいのです。
どのようにすればよいのでしょうか。
それと
first = (first**)malloc(number, sizeof(First)); //numberは全体の個数
first[0][0].name = '\0';
とすると実行時にエラーが発生します。
何故なのでしょうか。
よろしくお願いします。
0247デフォルトの名無しさん
2007/12/05(水) 04:20:04なんでポインタのポインタなの?
意図は?
0248デフォルトの名無しさん
2007/12/05(水) 09:47:23a[1][0], a[1][1]
a[2][0], a[2][1], ・・・, a[2][100]
・・・
といった感じで
配列の要素数も配列の個数も不明
要素数×配列数 = number
numberの大きさはファイルから読み込むようにしたいのです
0249デフォルトの名無しさん
2007/12/05(水) 09:55:190250240
2007/12/05(水) 10:25:57勉強になりました!
0251デフォルトの名無しさん
2007/12/05(水) 10:30:28>first = (first**)malloc(number, sizeof(First));
この場合、mallocが返すのはFirstへのポインタ、つまりFirst*型
それをポインタのポインタに変換すんのは無茶
0252デフォルトの名無しさん
2007/12/05(水) 10:56:122x+y+3z=11
4x+3y+10z=28
2x+4y+17z=31
Gaussの消去法とLU分解法でお願いします。
0253246
2007/12/05(水) 11:01:07ありがとうございました
0254デフォルトの名無しさん
2007/12/05(水) 11:14:48初心者過ぎてわかりません。
日本語でお願いします。
0255デフォルトの名無しさん
2007/12/05(水) 11:17:50方針としては、要素数が配列毎に一定なら二次元配列は諦めて配列で管理するようにすることを検討することをお勧め。
# 手頃でパフォーマンスも落ちない。
要素数も各配列毎にまちまちだったりするならポインタの配列として管理することになる。
それらが動的だったりするならリスト構造を使うことになるかな。
0256デフォルトの名無しさん
2007/12/05(水) 11:18:00教科書見ても、載ってないので手が出ないんです。
先ほど連立一次方程式をGaussの消去法とLU分解法で解いて欲しいんです。
0257デフォルトの名無しさん
2007/12/05(水) 11:22:490258デフォルトの名無しさん
2007/12/05(水) 11:25:19x=3
y=2
z=1
0259デフォルトの名無しさん
2007/12/05(水) 11:35:03上から順に(1)式(2)式(3)式とする。
(3)式から(1)式を引いて(4)式とする。
(2)式から(1)式を2倍したものを引いて(5)式とする。
(4)式から(5)式の3倍を引くとzが確定する。
(4)式に代入するとyが確定する。
(1)式に代入するとxが確定する。
0260252
2007/12/05(水) 12:02:280261デフォルトの名無しさん
2007/12/05(水) 12:15:04>259
0262デフォルトの名無しさん
2007/12/05(水) 12:18:00自分で考える気がないなら宿題スレへ
http://pc11.2ch.net/test/read.cgi/tech/1195668114/
0263252
2007/12/05(水) 12:20:400264デフォルトの名無しさん
2007/12/05(水) 14:03:010265デフォルトの名無しさん
2007/12/05(水) 16:06:06本などを見るとオープンするファイルの拡張子が.datとなっているものを
よく見かけるのですが.txtとどう違うんですか?
0266デフォルトの名無しさん
2007/12/05(水) 16:07:580267デフォルトの名無しさん
2007/12/05(水) 16:08:05c的には何ら変わりがない。
もしあんたが、拡張子毎に違うアクションを起こすようなGUIを使っているなら、違うアクションを割り当てることができるくらいの違い。
0268デフォルトの名無しさん
2007/12/05(水) 16:10:03そうなんですか
ありがとうございました
0269デフォルトの名無しさん
2007/12/05(水) 16:14:580270デフォルトの名無しさん
2007/12/05(水) 17:23:000271デフォルトの名無しさん
2007/12/05(水) 17:39:38文章から、アルファベットやら半角スペースを取り除くってのはどう?
0272デフォルトの名無しさん
2007/12/05(水) 17:49:290273デフォルトの名無しさん
2007/12/05(水) 17:57:110274デフォルトの名無しさん
2007/12/05(水) 20:09:46マルチバイトが判定できればいい、かつShiftJIS限定だけど。
1バイト目は0x81〜0x9F、および0xE0〜0xFCの範囲って決まってんだから、
あるバイトがその範囲内なら次の1バイトと合わせて1文字ってみなせばいい。
馬鹿正直に
if ( (0x81 <= c && c <= 0x9F) && (0xE0 <= c && c <= 0xFC) )
って書いてもいいけど、With UNZに
if ( ((unsigned char)((c ^ 0x20) - 0xA1) <= 0x3B) )
って(Pentium向けの)最適化が載ってるな。
0275デフォルトの名無しさん
2007/12/05(水) 21:52:33ネイティブコード=機械語
SDKはネイティブコードが使えるようになる?でいいんですよね?
C言語をコンパイルするとそれは機械語に変換されるのではないのですか?
質問がよくわからなくてすいません・・・
0276デフォルトの名無しさん
2007/12/05(水) 22:02:14もう治安が悪くなってしまったのかな。
28歳だけど今からC言語勉強してもプログラマにはなれませんかね。
0277デフォルトの名無しさん
2007/12/05(水) 22:08:520278デフォルトの名無しさん
2007/12/05(水) 22:22:15SDK は Software Development Kit (ソフトウェア開発キット)の略
例えば Microsoft Platform SDK は MS プラットフォーム用のソフトウェアを
開発するために必要なライブラリとかヘッダファイルとかツールとかをまとめたもの
ネイティブコードがどうとかいったものではない
0279デフォルトの名無しさん
2007/12/05(水) 22:40:26VC++だけではウインドウを表示したりすることができない
文字を表示することはできるが
ソフトウェアを作ることができない
そこでSDKを導入することによりC言語でソフトウェアが作成できるようになる
こんな感じで理解しておk?
0280デフォルトの名無しさん
2007/12/05(水) 22:45:06/ \
__/ ヽ
/ ′ _ ._ ` ̄`ヽ
{ ´・ .〈・ }
`ーl r、_) ノ
r''⌒`丶、 `ニニ' `‐t‐''´
! \ /
ヽ \ , イ
\ `L__,, -‐'´ |
\ ノ \ !
`'ー--‐'′ \__,ノ
星野カービィ
0281デフォルトの名無しさん
2007/12/05(水) 23:04:17>文字を表示することはできるが
>ソフトウェアを作ることができない
文字を表示するだけのプログラムは、ソフトウェアではないと。
0282デフォルトの名無しさん
2007/12/05(水) 23:04:57int AAA(st)
STR_BB *st;
{
long CCC();
int ddd = OK;
処理...
return( ddd );
}
これってなんですか?
int型のint AAAっていう関数を、仮引数 st を取るものとして作ってる??
その後の
STR_BB *st;
は一体何・・??
int ddd = OK;
は int型の変数dddなのに、何故、「OK」を代入してる??
分からないことだらけです!教えてください!
0283デフォルトの名無しさん
2007/12/05(水) 23:09:36ん〜
ウインドウを表示たりするプログラムが作れないってことでいいかな?
0284デフォルトの名無しさん
2007/12/05(水) 23:20:45それは昔のCで使われてた古い書き方
int AAA(st)
STR_BB *st;
{
}
は
int AAA(STR_BB *st)
{
}
と一緒
OKの方は
#define OK 0
とかじゃねーの?
0285デフォルトの名無しさん
2007/12/05(水) 23:21:06>int AAA(st)
> STR_BB *st;
ANSI前の古い書き方で、「int AAA(ATR_BB *st)」とほぼ同じ意味。
>int ddd = OK;
どこかで「OK」が#defineされてたりするんじゃないか?
コード上でなければ、コンパイル時に-DOK=1とか付いてるとか
0286デフォルトの名無しさん
2007/12/05(水) 23:22:08それでおk
0287デフォルトの名無しさん
2007/12/05(水) 23:25:01APIを使わなくても
ウィンドウを表示するプログラムは作れるよ!
0288デフォルトの名無しさん
2007/12/05(水) 23:31:51そうなんですね、大変助かりました!
OKはドンぴしゃり!!
#define OK 0
#define NG -1
でした。昔の書き方なんですね。入門書を目を皿にして読んでも見つからない筈です。
聞いてよかった・・本当に大変助かりました!!!ありがとうございました!!
AAA(STR_BB *st)の、STR_BBは構造体でしょうか?
structは省略できるんでしたっけ・・・
AAA関数の中にある、
long CCC();
は何でしょうか?CCCっていう関数??
初心者すぎてすみません!!
0289デフォルトの名無しさん
2007/12/05(水) 23:37:31ありがとうございます
>>287
そうなんですか?
それは全部C言語でプログラムを組まないといけないんですよね?
あとVC++のアプリケーションからのコンパイル方法を教えてほしいのですが・・・
DOS窓からなら名前.cを作成できコンパイルできるのですが
VC++2005はc++ファイルしか作れなくて困っています。
0290デフォルトの名無しさん
2007/12/05(水) 23:47:36>AAA(STR_BB *st)の、STR_BBは構造体でしょうか?
さぁ?
多分charかchar*かじゃないの?勘だけど。
どこかで#defineされてるかtypedefされてると思う。
>>289
>VC++2005はc++ファイルしか作れなくて困っています。
C++とプロジェクトは同じで良いから、
新しい項目→C++ファイル(.cpp)を選んで、ファイル名に「〜〜.c」まで書くか(ファイルがない場合)
既存項目の追加で「〜〜.c」を選択(既にファイルが有る場合)
0291デフォルトの名無しさん
2007/12/06(木) 00:31:01一応できましたが・・・
なぜデバッグなしでビルドじゃないといけないんでしょうか??
0292デフォルトの名無しさん
2007/12/06(木) 01:53:44構造体だったようです。
必ずしも、
AAA(struct STR_BB *st)としなくてもいいんですね。
構造体を関数に受け渡す方法を勉強すればいいでしょうか・・ありがとうございました。
0293デフォルトの名無しさん
2007/12/06(木) 02:57:33どこかスレないでしょうか?
履歴がないのでどこも採ってくれないんですけど…。
0294デフォルトの名無しさん
2007/12/06(木) 04:04:36共有メモリについて質問があります。
複数プロセス間で参照する共有メモリとして、
メモリマップドファイルを検討しているのですが
以下の認識であっていますでしょうか
・mallocで動的に確保する場合に(3M確保を想定)発生する
O/Sのページング作業がありませんか?
(連続した物理メモリを取る為に、メモリの入れ替え作業が
必要になりファイルにメモリの内容を書いたりする事全般)
・メモリマップドファイルの確保、読み書きは普通のファイル
より高速らしいですが、普通のメモリ確保とどう違いますか?
・メモリマップドファイルを確保したプロセスが解放せず死亡
した場合にファイルに書く事はできますか?
・そもそも、メモリを確保する際ページング作業をしない保障はWIndowsではできないのでしょうか?そうだとしたら、ディスクをFlashMemory等のRAMディスクにした場合高速にできますか?
当方、組み込み系システムの詳細設計レベルしかやったことがなく、
共同作業している設計者がダウンした為、初めてWINDOWSで基本設計
しています。
時間的要件があるので、処理時間が特定できないのはマズいのですが・・
0295デフォルトの名無しさん
2007/12/06(木) 08:16:16そもそもページングファイル(スワップ)使うんじゃなかったっけ?
RAMディスク上のファイル使うか、VirtualAllocExあたり使うかか?
WinXPってRTOSじゃないし重いしで、組み込みのレベルで処理時間特定出来るか微妙な気がするけど。
書いてて思ったんだが、C言語の話でもないし、
Win32APIスレとかの方がちゃんとした回答返って来るんでない?
0296デフォルトの名無しさん
2007/12/06(木) 11:30:40サーバと接続済みのクライアントがソケットを閉じる前に
一方的に接続を切った場合、サーバプログラムがかって
に終了してしまいます。
クライアントが一方的に切断した場合でもサーバプログ
ラムが動きつづけるようにするにはどうすればよいでしょ
うか?
0297デフォルトの名無しさん
2007/12/06(木) 12:39:27>・mallocで動的に確保する場合に(3M確保を想定)発生する
> O/Sのページング作業がありませんか?
ページングが発生する可能性はある
発生させたくなければ、あらかじめ確保しておけばいいんでないか
>・メモリマップドファイルの確保、読み書きは普通のファイル
> より高速らしいですが、普通のメモリ確保とどう違いますか?
メモリマップドファイルに書いた内容は最終的に必ずファイルに出力される
普通のメモリ確保は物理メモリが不足してない限りページングファイルに書き出されない
>・メモリマップドファイルを確保したプロセスが解放せず死亡
> した場合にファイルに書く事はできますか?
誰が書くのん?
ファイルは残ったままなので、別の誰かが続きを書くことはできる
>・そもそも、メモリを確保する際ページング作業をしない保障はWIndowsではできないのでしょうか?
マイコンピュータのプロパティの詳細設定のパフォーマンスの設定の詳細設定の仮想メモリで
ページングファイルを「なし」にすればいいんじゃない?
exeイメージやメモリマップドファイルのページングは無理だけど
>時間的要件があるので、処理時間が特定できないのはマズいのですが・・
例えばページングが起きないとしても、そのメモリがCPUのキャッシュに載ってるか載ってないかでアクセス時間は大幅に変わる
if文みたいな条件分岐も、CPUの分岐予測がヒットするかしないかで処理時間が変動する
処理の実行中に他のプロセス・スレッドにCPUを奪われることもあるし
かなり難しいと思うけどな
0298デフォルトの名無しさん
2007/12/06(木) 12:56:38CPU、メモリ、チップセット、VGA、HDD…処理速度が変る要因が多すぎる。
仮にそれを統一したとしても、いつLANからパケット飛んできて割り込み入るか
なんて分からないし、誰かが机にぶつかってマウスがちょこっと動いただけでも
処理時間が変る可能性がある。ドライバのバージョンが違っただけでも、システム
全体の処理が変わってくる。
x86 CPUの動作は複雑だし、上のレスにもあるように if 文一つ入るだけで
必要クロックが変わる(バイトコード上は同じであるにも関わらず)。
全てがキャッシュヒットかつ分岐予測が当たった場合のベストケースと、
全てがキャッシュミスかつ分岐予測が外れた場合のワーストケース、くらいなら
頑張れば出せるかもしれない。ただしキャッシュミスした時に、メモリからロード
するのに何クロックかかるかは、チップセットやメモリ次第。
ある特定のプロセスが、プロセス切り替えのコストを除いて純粋に実行されている
時間(クロック)ならある程度絞れるだろうけど、例外が発生しうる可能性は十分に
あるし、完全じゃないね。
0299デフォルトの名無しさん
2007/12/06(木) 13:00:18キャッシュヒット、パーシャルレジスタストール(だっけ?)を考慮・制御
するのは、C言語じゃ無理だと思う。
0300デフォルトの名無しさん
2007/12/06(木) 14:33:17123 を
arr[0] = 1
arr[1] = 2
arr[3] = 3
のように格納したいのです。
0302デフォルトの名無しさん
2007/12/06(木) 14:43:20scanf("%1d%1d%1d", &arr[0], &arr[1], &arr[2]);
0303デフォルトの名無しさん
2007/12/06(木) 14:46:00http://updas.net/up/download/1196919710.zip
このテキストの暗号/複合化のソースを教えてください
このテキストファイルはXOR暗号されており16進数になっています
KEYは215です
凄腕のかたお願いします
0304デフォルトの名無しさん
2007/12/06(木) 14:48:51というか板違い
0306デフォルトの名無しさん
2007/12/06(木) 15:05:05クライアントが一方的に切断した場合でもサーバプログ
ラムが動きつづけるようにすれば良い。
0307デフォルトの名無しさん
2007/12/06(木) 15:07:39SIGHUPとかSIGPIPEとかかな?
0308デフォルトの名無しさん
2007/12/06(木) 15:11:19rubyだが
file = File.open('c:\test.txt','r')
buf = ""
while tmp = file.read(2)
buf += (tmp.hex ^ 0xd7).chr
end
print buf
これでどうかな?
元に戻すのは正直わからん
0309デフォルトの名無しさん
2007/12/06(木) 15:14:54(a xor b) xor b を求めてごらん。
0310デフォルトの名無しさん
2007/12/06(木) 15:16:01* read(), write()のエラーハンドリングを正しく行う
* SIGPIPEがsocket通信というコンテキストで、いつ発生するのか調べる
* SIGPIPEのシグナルハンドラを設定し、適切な処理を行う
SIGHUPって発生したっけ?
0311デフォルトの名無しさん
2007/12/06(木) 15:21:39module Main (main) where
import System
import Data.Char
import Data.Bits
import Numeric
key :: Int
key = 0xd7
main = do
args <- getArgs
case args of
[infile] -> readFile infile >>=
putStr . map toUpper . encode 0xd7
_ -> error ""
encode :: Int -> String -> String
encode k [] = []
encode k (x:xs) =
showHex (ord x `xor` k) (encode k xs)
0312303
2007/12/06(木) 15:24:03あのC++でお願いできませんか?
だれかー><
0313デフォルトの名無しさん
2007/12/06(木) 16:15:350314デフォルトの名無しさん
2007/12/06(木) 16:46:26int main(void)
{
int a,b,c;
a-50;
b=100;
c=a+b;
printf("変数 a の値は %d\n",a);
printf("変数 b の値は %d\n",a);
printf("変数 c の値は %d\n",a);
return 0;
}
プログラム実行結果
変数 a の値は 50
変数 b の値は 100
変数 c の値は 150
と"Cの掟"と言う入門書に書いてました。
なぜprintf関数の最後が三個ともsなのかわかりません。
ためしにコンパイルしてみた所
警告 W8019 c2.c 7: コードは効果を持たない(関数 main )
警告 W8004 c2.c 16:'c'に代入した値は使われていない(関数 main)
Turbo Incremental Lind 5.00 Copyright (c) 1997,200 Borland
とでてきます。
全部意味がわかりません。コンパイラがぶっこわれているのでしょうか?
誰か教えてください!
0315デフォルトの名無しさん
2007/12/06(木) 16:48:26”三個ともa”です。すみません・・・orz
0316デフォルトの名無しさん
2007/12/06(木) 16:50:310317デフォルトの名無しさん
2007/12/06(木) 16:53:24可能性2:目の錯覚。本当は2番目と3番目の printf は b と c。
0318デフォルトの名無しさん
2007/12/06(木) 16:56:24しかしエラーについては少しわかりかねます。
打ち間違えはないものとしてお願いします。
0319デフォルトの名無しさん
2007/12/06(木) 16:56:37初心者向けの本での誤植って最悪だな。
0320デフォルトの名無しさん
2007/12/06(木) 16:59:05printf("変数 b の値は %d\n",a); → printf("変数 b の値は %d\n",b);
printf("変数 c の値は %d\n",a); → printf("変数 c の値は %d\n",c);
に直してみて
0321デフォルトの名無しさん
2007/12/06(木) 17:03:220322デフォルトの名無しさん
2007/12/06(木) 17:06:27printf("%.10f", x);
こうか?
0323デフォルトの名無しさん
2007/12/06(木) 17:07:28足し算やら掛け算やら演算をさせて表示させたいんですが
できませんか?
0324デフォルトの名無しさん
2007/12/06(木) 17:07:33ありがとうございました。問題は解決しました。
単純なミスで重々すみませんorz
初心者にありがちなことでめんどくさがらずに教えてくださったみなさまに感謝です。
0325デフォルトの名無しさん
2007/12/06(木) 17:09:20やってもみないで訊いてるだろ
float x = 0.0000000001;
float y = 0.0000000002;
printf("%.10f", x + y);
0326デフォルトの名無しさん
2007/12/06(木) 17:19:27いえ、今やっているんですが
なぜか自分のプログラムだと少数点6位までしか表示されなくて・・・
0327デフォルトの名無しさん
2007/12/06(木) 17:24:17%.10にしたらできました
ありがとうございました
0328デフォルトの名無しさん
2007/12/06(木) 23:32:01質問は2つあります。
1)これはスレ違いかも知れませんが
$ man abs
No manual entry for abs
absをmanで調べた時このように出ます。
どうすればいいのでしょうか?
2)関数ポインタについて質問します。
例えば以下のようなサブルーチンを想定します。
double a(double x){
0329デフォルトの名無しさん
2007/12/06(木) 23:34:35続き
double a(double x){
return x;
}
これを、これは間違っていると思いますが、
void p(double *a(double)){
printf("%f\n", a(10));
}
のように関数を引数にして他の関数に渡したいのです。
とてもくだらない話かも知れませんが、どうすればいいのか分からないので教えてください。
0330デフォルトの名無しさん
2007/12/06(木) 23:50:12「関数を引数にして」の意味がわからない。
関数へのポインタを渡したいのか、関数の戻り値を渡したいのか、どっちだ?
もっと言うと、何をしたい?
0331デフォルトの名無しさん
2007/12/06(木) 23:57:39printf("%f\n", a(10));
}
これだと、double* までが戻り値の型になるから
void p(double (*a)(double)){
printf("%f\n", a(10));
}
だっけ?
0332デフォルトの名無しさん
2007/12/07(金) 00:02:25#include <math.h>
double func(double x){
return fabs(x);
}
void print_func(double (*func)(double)){
printf("%f\n", func(-5.5));
}
int main(void){
print_func(&func);
return 0;
}
$ gcc -lm a.c
$ ./a.out
5.500000
出来ました!!!
あじゅじゅしたー
0333デフォルトの名無しさん
2007/12/07(金) 00:02:260334デフォルトの名無しさん
2007/12/07(金) 00:42:51doubleでは落ちないのに
多分ある程度より小さい数を扱うと0では無いのに0とされてしまう現象があるとおもう
0335デフォルトの名無しさん
2007/12/07(金) 00:53:02その通りでございます
プログラムは物理的な存在と意識できる瞬間だな
0336デフォルトの名無しさん
2007/12/07(金) 00:53:06関数を探してみたのですが、見つけられなかったので教えてください
0337デフォルトの名無しさん
2007/12/07(金) 00:55:00remove
ただし、誰か(自分自身も含む)がアクセスしていると消えない
0338デフォルトの名無しさん
2007/12/07(金) 00:56:140339デフォルトの名無しさん
2007/12/07(金) 01:05:04ありがとー
0340デフォルトの名無しさん
2007/12/07(金) 13:35:02サンプル頼む。
>>336
remove()で消えることになっているけれど、実際の動作は環境依存。
Unixだと、>337のようには振る舞わない。
0341デフォルトの名無しさん
2007/12/07(金) 15:17:34123456789
の各桁の数字を順に配列に入れるのってどうするんですか? 例
num[0]=1 num[1]=2
0342デフォルトの名無しさん
2007/12/07(金) 15:21:47num[0] = str[0];
num[1] = str[1];
num[2] = str[2];
num[3] = str[3];
num[4] = str[4];
num[5] = str[5];
num[6] = str[6];
num[7] = str[7];
num[8] = str[8];
0343デフォルトの名無しさん
2007/12/07(金) 15:27:100344デフォルトの名無しさん
2007/12/07(金) 15:30:12つーか、せめてループにしろよw
0345デフォルトの名無しさん
2007/12/07(金) 15:45:14続きですがscanfで文字列を受け取り、それを各桁を配列に入れようと思うのですが、ループの終了条件が解りません。
0346デフォルトの名無しさん
2007/12/07(金) 15:46:140347デフォルトの名無しさん
2007/12/07(金) 15:51:170348デフォルトの名無しさん
2007/12/07(金) 16:17:37for (i=0;str[i]!='\0';i++)
num[i]=atoi(&str[i]);
で str[6]を見たところ7が覧~しいのに789が返って来ます どうすればいいですか?
0349デフォルトの名無しさん
2007/12/07(金) 16:31:53(その目的で)atoi()しちゃいけません。
0350デフォルトの名無しさん
2007/12/07(金) 16:39:120351デフォルトの名無しさん
2007/12/07(金) 16:40:04num[i]=str[i] - '0';
0352デフォルトの名無しさん
2007/12/07(金) 16:41:10sizeof() で配列の長さを調べる
for で回す
num[0]~[8] までを printf で表示してみる
num[6] なら 7 が来ると予想される
str[6] だから 7 から終端までが表示される
別におかしいところは見当たらない
0353デフォルトの名無しさん
2007/12/07(金) 16:42:580354デフォルトの名無しさん
2007/12/07(金) 16:46:550355デフォルトの名無しさん
2007/12/07(金) 16:49:156789 が来る
0356デフォルトの名無しさん
2007/12/07(金) 16:51:21教訓。やりたいことを書かないから
・からかわれる
・おちょくられる
・教えたがりに間違いを教わる
羽目になる。
0357デフォルトの名無しさん
2007/12/07(金) 16:52:060358デフォルトの名無しさん
2007/12/07(金) 16:55:170359デフォルトの名無しさん
2007/12/07(金) 16:58:12>>348になるのは頭がおかしい
0360デフォルトの名無しさん
2007/12/07(金) 16:58:32数百桁の計算ならGMPライブラリ使えばいいんじゃないの?
0361デフォルトの名無しさん
2007/12/07(金) 18:36:330362デフォルトの名無しさん
2007/12/07(金) 18:42:551797693134862315708145274237317043567980705675258449965989174768031572607800
2853876058955863276687817154045895351438246423432132688946418276846754670353
7516986049910576551282076245490090389328944075868508455133942304583236903222
948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000
0363デフォルトの名無しさん
2007/12/07(金) 18:43:55有効桁数という言葉をご存知でしょうか?
0364デフォルトの名無しさん
2007/12/07(金) 18:53:500365デフォルトの名無しさん
2007/12/07(金) 20:01:15とある本には
main←関数の名前
すなわち関数であるみたいなことがかかれており
とあるHPには
↓のようなものがが関数の構造であると書かれておりました
int main(void) {return 0;}
関数というのは実際どのことをいうのでしょうか?
0366デフォルトの名無しさん
2007/12/07(金) 20:30:43別にその2つに矛盾は無いと思うが。
普通「関数」という場合、名前も含めたものを指す(>>365の後者)
「関数の構造」のうち、「関数の名前」が「main」。
Cに無名関数はないから、関数の名前≒関数と言えなくもない。
戻り値
↓ ↓
int main(void)
↑
関数名
0367366
2007/12/07(金) 20:32:09面倒なので…
左から順に戻り値(int)、関数名(main)、引数(void)、関数本体({ return 0; })
みたいな感じかね。
0368デフォルトの名無しさん
2007/12/07(金) 20:34:20ありがとうございました。
もうひとつ質問いいですか?
たとえば
int main(void) {return 0;}
をビルドするときデバッグなしでビルドにしないとちゃんと起動しません・・・
なぜだか教えてください
0369デフォルトの名無しさん
2007/12/07(金) 21:13:50そんな質問の仕方で答えが返ってくると思う?
0370デフォルトの名無しさん
2007/12/07(金) 21:16:41getchar なり system("pause") なり色々ぐぐってみれば
0371デフォルトの名無しさん
2007/12/07(金) 21:20:010372デフォルトの名無しさん
2007/12/07(金) 21:23:530373デフォルトの名無しさん
2007/12/07(金) 21:56:14するのではいけないのかね?
0374デフォルトの名無しさん
2007/12/07(金) 22:01:59一文字入力を行うための関数がgetchar()らしいのですが
文字を入力できるようにするためにすぐ終了しないということですか??
0375デフォルトの名無しさん
2007/12/07(金) 22:19:360376デフォルトの名無しさん
2007/12/07(金) 23:19:47すいません
ではどういうことか教えていただけませんか?
0377デフォルトの名無しさん
2007/12/08(土) 01:50:28例えば
00000000:0000:000000 (8桁:4桁:6桁)
は取り込む
0000:000000:00000000 (4桁:6桁:8桁)
は取り込まない…という感じです。
while(fread(buf, 256, file))
{
matching = sscanf(buf, "%8x:%4x:%6x\n", &a, &b, &c);
if(matching != 3 )
{
continue;
}
else
{
first = a;
second = b;
third = c;
}
}
上記の場合、例えば%8xなら、8桁を越える数値は無視されますが、7桁だと取り込まれますよね?
0378デフォルトの名無しさん
2007/12/08(土) 02:14:270379デフォルトの名無しさん
2007/12/08(土) 17:45:17できれば使い方が載っているサイトとか教えてもらえるとありがたいんですが。
0380デフォルトの名無しさん
2007/12/08(土) 18:34:05まさかマルチかね
0381デフォルトの名無しさん
2007/12/08(土) 19:43:120382デフォルトの名無しさん
2007/12/08(土) 19:44:130383デフォルトの名無しさん
2007/12/08(土) 20:54:47�@char型の配列[0]〜[3]に"0x01" "0x02" "0x03" "0x04"と格納されている値を、
0x01020304のデータとしてlong型の変数に格納する。
�A上記の逆のケースで、long型の変数に格納されている0x01020304というデータを
char型の配列0]〜[3]に"0x01" "0x02" "0x03" "0x04"と格納する。
0384デフォルトの名無しさん
2007/12/08(土) 20:57:470385デフォルトの名無しさん
2007/12/08(土) 21:01:470386デフォルトの名無しさん
2007/12/08(土) 21:13:53((x>>16)&15)+'0'
0387デフォルトの名無しさん
2007/12/08(土) 21:26:35すみません。変数アドレスでもポインタを使って配列のように扱えるようですが?
0388デフォルトの名無しさん
2007/12/08(土) 22:09:47ってのはどうだろ。
0389デフォルトの名無しさん
2007/12/08(土) 22:30:15もちろん
ただし配列はない場合は、ポインタをインクリメントするとどこを指すかわからない
0390デフォルトの名無しさん
2007/12/08(土) 23:12:39今時エンディアン気にする必要がある環境だと、
htonlあるかどうか、微妙なんじゃない?
0391デフォルトの名無しさん
2007/12/08(土) 23:35:380392デフォルトの名無しさん
2007/12/08(土) 23:39:080393デフォルトの名無しさん
2007/12/09(日) 00:08:30取り込んだ後の桁数判定がどうにも思いつかないんで、ヒントでもいいので教えてもらえませんか?
とりあえず別の方法を考えついたんですが
1 : まず数値を文字列として取り込む
2 : strlenで長さを判定
3 : 一致したら改めてsscanfでその文字列を数値に変換して格納
なんだか思いっきり無駄なような気がしてなりません…
0394デフォルトの名無しさん
2007/12/09(日) 00:22:113はsscanfじゃなくてsprintfだな、きっと。
最初は無駄でもいい。
効率より動くことが優先。
正しく動いたら、その後で効率を考えるんだ。
遅くても、動かないコードの無限大まし。
動かないコードは何の役にも立たない。
0395デフォルトの名無しさん
2007/12/09(日) 00:29:28sscanf()にかけるまえに、文字列がフォーマットどおりか確認すれば?
3行程度でしょ。
0396デフォルトの名無しさん
2007/12/09(日) 00:34:548桁以下なら
if(a&0xf0000000)
0397デフォルトの名無しさん
2007/12/09(日) 01:07:24ありがとうございます!とても参考になりました。
0398デフォルトの名無しさん
2007/12/09(日) 12:14:47--------
数値の定数の場合、数値の末尾にアルファベットを付けて、具体的な型を表現することがあります。このアルファベットをサフィックス(接尾子)といいます。
サフィックスは小文字でも大文字でも構いません。「U」と「UL」は整数に、「F」は小数に使います。「L」は整数に使えばlong int、小数に使えばlong doubleとして扱われます。
例)
f = 3.14f; /* float */
f = 3.14; /* double */
f = 3.14L; /* long double */
サフィックスを使わなければ、整数は「signed int」、小数は「double」と判断されます。
--------
と説明があるのですが、意味がよく??
例の中にある、「 f = 」の「変数f」は、元々、flot型として宣言されていて、
f = 3.14L; /* long double */
とした場合、「変数f」が、long double型に変わるということ???
0399デフォルトの名無しさん
2007/12/09(日) 13:03:10例えば
float f, g;
f = .......;
g = f * 3.14;
などと書いたとき、3.14 は double 型なので、 f をいったん double に変換してから 3.14 を掛け、
結果を float に変換し戻して g に代入するという面倒な手順を踏むことになる。
g = f * 3.14f;
と書けば float のまま掛け算する。
long doubleの方は、例えば
long double x = 1.2345678901234567890;
などと書いても、この定数値 1.234.... は double 型の精度であって、long double 型の精度を持った定数ではない。
それでは困るんだよ long double 精度の定数値が必要なんだ、という場合は
long double x = 1.2345678901234567890L;
などとする必要がある。
0400告知 ・・・ 2ch サーバーダウン(鯖落ち)情報 part177
2007/12/09(日) 13:23:57749 名前:マァヴ ◆jxAYUMI09s [] 投稿日:2007/12/08(土) 17:56:40 ID:mzzKkj6v0 ?PLT(25001)
2007年12月11日の 午前11時00分より 正午まで
サーバセンターでスイッチのメンテナンスを行うんだけど
そのスイッチにぶら下がってるサーバはほとんど2chのサーバだったりする(^_^;)
たぶん、大量に繋がらないサーバが出るはず(^_^;)
752 名前:マァヴ ◆jxAYUMI09s [] 投稿日:2007/12/08(土) 18:05:32 ID:mzzKkj6v0 ?PLT(25001)
>749
日本時間です(^_^;)
0401デフォルトの名無しさん
2007/12/09(日) 14:46:53黄金分割法をやりたいのですがうまくいきません。
黄金分割法については
http://mikilab.doshisha.ac.jp/dia/research/report/2003/0612/003/report20030612003.html
とりあえず上のアルゴリズムで作ってみた自作ソースは
#include <stdio.h>
#include <math.h>
#define r 0.3819 /*黄金比r*/
#define eps 0.05
#define imax 100 /*回数*/
/*探索する関数の宣言*/
double f(double x)
{
return x*x-50*x;
}
double a=0.0,b=1000.0;
double c,d;
int i=0;
0402デフォルトの名無しさん
2007/12/09(日) 14:48:17{
c=a+r*(b-a);
d=b-r*(b-a);
printf(" a b c d \n");
do{
c=a+r*(b-a);
d=b-r*(b-a);
if(f(c)>f(d)){
printf("if %5f,%5f,%5f,%5f\n",a,b,c,d);
c=d;
a=c;
}
else{
printf("else %5f,%5f,%5f,%5f\n",a,b,c,d);
d=c;
b=d;
}
}while(fabs(d-c)>eps);
printf("x=%f\n",d);
return 0;
}
0403デフォルトの名無しさん
2007/12/09(日) 14:49:36a b c d
else0.000000,1000.000000,381.9000000,618.100000
x=381.90000000
みたいになります。
何回も繰り返してほしいのに一回しか繰り返されないので
収束していかないんです。
どこが問題でしょうか?
elseとでてるのはifとelseどっちの処理にいったのか
見たかったので書いただけです。
0404デフォルトの名無しさん
2007/12/09(日) 14:51:23難しい・・が、ようやく理解したような気がします・・。
数値の後ろに、3.14f や、3.14L のように、サフィックスをつけなければ、
小数は「double」型だとC言語コンパイラに判断されてしまうので、
float型として計算してほしければ、
g = f * 3.14f;
とすればいいってことでしょうか・・・。
・・・基本的なところですが、
f = 3.14; /* double */
と、書いた場合、変数が「f」で、定数が「3.14」になるんでしょうか?
0405デフォルトの名無しさん
2007/12/09(日) 15:21:44> d=c;
この時点で、下のwhile条件は成立しなくなるだろ。
d-cは0なんだから。
0406デフォルトの名無しさん
2007/12/09(日) 15:30:25なるほど、たしかに。
for文とかでも色々試してみましたけど結局
break文にfabs(d-c)>epsを使っていたので
同じ理由で一回しかできなかったようです。
ありがとうございました。
0407デフォルトの名無しさん
2007/12/09(日) 16:04:09そんな感じ
0408デフォルトの名無しさん
2007/12/09(日) 16:22:57なるほど・・ありがとうございます。
「具体的な型を表現することがあります。」
と書いてあるのは、「(末尾にアルファベットをつけた時だけ)具体的な型に一時的に変換できます」
ってことですね。「ことがあります」ってことは、できないこともあるんでしょうか?
0409デフォルトの名無しさん
2007/12/09(日) 16:50:05と、
++i
はどう違うんですか?
0410デフォルトの名無しさん
2007/12/09(日) 16:53:16i = 1;
n = i++;
printf("%d %d\n", n, i);
結果
1 2
i = 1;
n = ++i;
printf("%d %d\n", n, i);
結果
2 2
0411デフォルトの名無しさん
2007/12/09(日) 16:54:22どっちかと言うと、i++を使う人の方が多いかな
0412デフォルトの名無しさん
2007/12/09(日) 16:57:04昔それで撃沈したコテハンが居た
0413デフォルトの名無しさん
2007/12/09(日) 16:57:53単純に値を増やす場合はどっちでもいいけど、
別の変数に代入する場合は、>>410みたいに先加算と後加算というふうに使い分けできるよ
0414デフォルトの名無しさん
2007/12/09(日) 17:10:47=より+の方が優先順位が低いから、
n = i++;
の場合、先にiがnに代入されてしまって、その後iが+1される、
と考えていいんでしょうか・・・
0415デフォルトの名無しさん
2007/12/09(日) 17:16:10というのはどういう意味ですか?
0416デフォルトの名無しさん
2007/12/09(日) 17:29:42n=i
i++;
n=++i は
i++
n=i
になる
単体でのi++と++iの記述は同じ意味だから
n=i++ は
n=i
++i
n=++i は
++i
n=i
と買いても同じことを表す…分かりづらいなw
0417デフォルトの名無しさん
2007/12/09(日) 17:41:03n = ++i;
と、
n = (i++);
は同じになるんですかね?
0418デフォルトの名無しさん
2007/12/09(日) 17:43:32「ことがあります」ってのは、必要に応じてプログラマがそのように書くことがありますってことだよ
0419デフォルトの名無しさん
2007/12/09(日) 17:45:56long int 型に time_t という新しい名前をつける。
long int x;
と書くところを、
time_t x;
と書くことが出来るようになる。
0420デフォルトの名無しさん
2007/12/09(日) 17:47:27!!
主語はプログラマーだったのか!!
分かりにくい・・・「〜と書くと、〜という意味としてコンパイラに判断されます」
みたいな初心者向けの説明がよかったにょ・・・orz
ともあれ、大変助かりました。ありがとうございました。
0421デフォルトの名無しさん
2007/12/09(日) 17:52:01なるほど。
time_t が新たな型の名前になるんですね。
「time_t」が「log int」の別名として使える有効範囲は、
typedef long int time_t;
の表記のあるファイル内と考えてよいでしょうか?
0422デフォルトの名無しさん
2007/12/09(日) 17:54:37ってどういう意味ですか?
すんごいたくさん見かけるんですが、どこかで#defineされてる様子もなく・・・
0423デフォルトの名無しさん
2007/12/09(日) 18:01:40ローカル変数みたいに、関数の中に typedef があれば、その関数内に限る
グローバル変数みたいに外にあれば、ファイル全体
0424デフォルトの名無しさん
2007/12/09(日) 18:07:48http://msdn2.microsoft.com/ja-jp/library/323b6b3k(VS.80).aspx
0425デフォルトの名無しさん
2007/12/09(日) 18:08:230426デフォルトの名無しさん
2007/12/09(日) 18:17:12優先順位の問題じゃないので、括弧の有無は影響しない。
i = 1 の場合、
i++ を評価した結果は 1 で、それとは別に副作用として i の値を 1 増やす (i=2にする) 効果がある。
++i を評価した結果は 2 で、それとは別に副作用として i の値を 1 増やす (i=2にする) 効果がある。
n = ++i; と n = (i++); は異なる。なぜなら i++ と ++i の評価結果は異なるので、nに代入される値が変わる。
n = i++; と n = (i++); は一緒。なぜなら括弧の有無は影響しない。
i++; n = i; と ++i; n = i; は一緒。なぜなら i++ と ++i の評価結果は異なるが、それをどこにも代入しないのでその違いに意味はない。副作用だけを利用する例。
0427デフォルトの名無しさん
2007/12/09(日) 18:17:45なるほど。ありがとうございます。
0428デフォルトの名無しさん
2007/12/09(日) 18:37:55ありがとうございます。。
ですが、errnoって何でしょう?いろいろググったんですが、
どうにもよく分からず・・・
0429デフォルトの名無しさん
2007/12/09(日) 18:45:01open()とか低水準関数を使ってエラーになったときに、エラーの種類がセットされる変数
0430デフォルトの名無しさん
2007/12/09(日) 18:55:36そうすると、バイナリで書き込みたい場合、UNIXCではどうするんでしょうか?(スレ違いでしたらすみません)
0431デフォルトの名無しさん
2007/12/09(日) 18:58:340432デフォルトの名無しさん
2007/12/09(日) 18:59:18Windowsで、テキストモードってのは、書き込みのときに \n が \r\n に変換されて、
読み込みのときは \r\n が \n に変換されるって動作をする。
バイナリだと、変換が行われないで、\n は \n のまま読み書きされる。
unix系だと、テキストでもバイナリでも\n の変換が行われないって動作になる。
0433デフォルトの名無しさん
2007/12/09(日) 19:06:46そうすると、UNIXでは、バイナリファイルも、テキストエディタで人間に
読まれちゃうのでしょうか?
つまり、Windowsだと、バイナリファイルをテキストエディタで開くと、
ミAタシ燧,ゥ゙R・ニ
みたいな感じで読めないじゃないですか。それがUNIXだと全部読まれてしまう??
0434デフォルトの名無しさん
2007/12/09(日) 19:09:08それはない
一緒
0435デフォルトの名無しさん
2007/12/09(日) 19:14:49テキストファイルって言っても、単に文字コードの範囲で数値が書き込まれてるバイナリファイルだから。
バイナリファイルって言われてるのは、文字コードとか関係なしで数値が書き込まれてるから、
テキストエディタで開いても読めない。
0436デフォルトの名無しさん
2007/12/09(日) 19:16:09ありがとうございます。低水準入出力関数というのを調べたんですが、
使用するためには、<io.h>をインクルードする必要があるらしく、どう探しても、
io.h はどのプロジェクトでもインクルードされていないし、
errno_t nErr = 0;
の記述のあるファイルでも、低水準関数は一度も使われてないようなんです。
そうすると、
「errno のエラーコードを処理する関数の戻り値の型またはパラメータに使用され」
るという、errno_t は、ここではどういう役割になるんでしょう?
そもそもこの↓文法がよく分かりません。
errno_t nErr = 0;
nErr も、errno_t も、どこにも宣言がなく、突然使われてるようなんです。orz
0437デフォルトの名無しさん
2007/12/09(日) 19:20:34たとえば、アスキーコードで「1」は0x31だから、バイナリモードでも、テキストモードでも、
数値の0x31を書き込んで、テキストエディタで開くと「1」が表示される。
数値の0x1とか0xffとかは通常の表示できる文字コードじゃないから、それを書き込んで、エディタで
開いても、読める文字は表示されない。
0438デフォルトの名無しさん
2007/12/09(日) 19:28:31errno_t というのはC99になってから、新しく導入された型っぽいね。
strcpy_s()とか、安全な関数のリターン値の型になってた。
0439デフォルトの名無しさん
2007/12/09(日) 19:37:07>そもそもこの↓文法がよく分かりません。
>errno_t nErr = 0;
文法は
int x = 0;
と同じ。それ自体が nErr の宣言だ。
errno_t は >>424 に stddef.h、crtdefs.h って書いてあるだろ。
その中見てみれ。
0440デフォルトの名無しさん
2007/12/09(日) 19:38:21なるほど。。。そういうことですね。
では、
「今日の日付:12月9日」
みたいな文章を、.datファイルにバイナリで書き込みたい場合は、
UNIXCだと、どうするんでしょう?
0441デフォルトの名無しさん
2007/12/09(日) 19:40:29fprintf(fp, "今日の日付:12月9日");
fclose(fp);
0442デフォルトの名無しさん
2007/12/09(日) 19:47:59繰り返しの条件式はどうすればいいのでしょうか?
0443デフォルトの名無しさん
2007/12/09(日) 19:53:36ファイルをfgetsで読み込んでいる場合は、その戻り値がNULLだったら終了
0444デフォルトの名無しさん
2007/12/09(日) 19:56:50そうか、なるほど!
MSDN をよく見たら、「errno_t整数」の上に、「型」って書いてありますね。
これは整数型で、今まで、errno に入れられていたエラーコードを入れるために
用意された新しい型なんですかね?
>>439
stddef.h には、
#define errno (*_errno())
って書いてありました。
(*_errno())
こ、、、これは一体・・・・?
CRTDEFS.H には、こう↓ありました。
#if !defined(__midl)
_CRT_DEPRECATE_TEXT("This name was supported during some Whidbey pre-releases. Instead, use the standard name errno_t." ) typedef int errcode;
#else
typedef int errcode;
#endif
typedef int errno_t;
#endif
errno_t はつまり、int だと思っていいんでしょうか?
0445デフォルトの名無しさん
2007/12/09(日) 19:58:52b をつけることは変わらないんですね。それで、区別させるということですね。
納得しました。ありがとうございました。
0446デフォルトの名無しさん
2007/12/09(日) 20:04:06>errno_t はつまり、int だと思っていいんでしょうか?
わざわざ新しい名前を導入してまで本来の型を隠してるんだから、errno_t 型は errno_t 型だと思っておくべき。
将来のバージョンで long に変わるかもしれんし (ないだろうけど)。
0447デフォルトの名無しさん
2007/12/09(日) 20:12:19fp = fopen("argv[1]", "r")
としたのですが、これでは開けませんでした
どのようにすればいいのでしょうか
0448デフォルトの名無しさん
2007/12/09(日) 20:13:23○ fp = fopen(argv[1], "r")
0449デフォルトの名無しさん
2007/12/09(日) 20:13:27fp = fopen(argv[1], "r");
0450デフォルトの名無しさん
2007/12/09(日) 20:13:50ありがとうございます
0451デフォルトの名無しさん
2007/12/09(日) 20:16:12すばやい返答ありがとうございます!
0452デフォルトの名無しさん
2007/12/09(日) 20:55:28という例題があるんですが、何故( )をつけるんでしょうか?
#define errno (*_errno())
で、*_errno() を囲ってる ( ) と同じ意味でしょうか?
0453デフォルトの名無しさん
2007/12/09(日) 20:58:00100NUM ⇒ 100(100)
0454デフォルトの名無しさん
2007/12/09(日) 21:10:41こうやって使うため
#include <stdio.h>
#define NUM (100)
int twice(int x){
return 2*x;
}
int main(){
printf("%d",twice NUM);
return 0;
}
0455デフォルトの名無しさん
2007/12/09(日) 21:21:18計算式用に作ったものだから、計算がおかしくならないようにするため・・・
で合ってますか?
ちなみにこれ↓はどういう意味でしょう?マクロ名・・・ではないですよね?
#define TRUE !FALSE
0456デフォルトの名無しさん
2007/12/09(日) 21:24:18>#define TRUE !FALSE
おそらく別の所でFALSEがdefineされてる
(きっと#define FALSE 0)
!演算子は知っているよね?
FALSEの論理反転をTRUEと定義している
0457デフォルトの名無しさん
2007/12/09(日) 21:31:00#define TRUE 1
#define FALSE 0
でいいけどな。
0458デフォルトの名無しさん
2007/12/09(日) 22:01:04#include<stdio.h>はprintf関数を使えるようにする命令なのに
VC++で#include<stdlio.h>を抜いても
ちゃんと文が表示されるのです。
#includeの意味っていったい・・・
0459デフォルトの名無しさん
2007/12/09(日) 22:02:520460デフォルトの名無しさん
2007/12/09(日) 22:08:14stdio.hですね・・・
0461デフォルトの名無しさん
2007/12/09(日) 22:14:58afxなんとかとかってインクルードしてるとか?
Cとしてコンパイルしてたら、プロトタイプなしでもコンパイルはできるね。
0462デフォルトの名無しさん
2007/12/09(日) 22:35:17afxなんとかってなんですか??
Cとしてコンパイルしてましたが・・・
プロトタイプなしってどういうことですか??
ちなみに文は
#include<stdio.h>
int main(void)
{
printf("aaaa");
return 0;
}
の練習文でやったのですが・・
0463デフォルトの名無しさん
2007/12/09(日) 22:42:20プロトタイプってのは、関数のリターン値とか引数の型が定義されてる文で、
stdio.h の中で、標準入出力の関係のプロトタイプが書かれてるから、
プログラム中で、引数やら間違えると、エラーになるって仕組み。
C++はプロトタイプがないとエラーになるけど、Cはなくてもコンパイルと実行ができる。
(そのかわり、引数の型やら数を間違えてると、実行時落ちる)
ちなみに、そのコードは、なにを参考にして書いたの?
0464デフォルトの名無しさん
2007/12/09(日) 22:46:03ということは書いといたほうがいいわけですね
ちなみに引数はさっきの文でいうと(void)ってことですかね??
えーと
HPです
0465デフォルトの名無しさん
2007/12/09(日) 22:50:34main()の引数はvoidだね。
ptintf()は違う。
> #include<stdio.h>
最近、こういう書き方のコードをちょくちょく見るんで、どっかで広めてるやつがいるのかなと思って訊いた。
0466デフォルトの名無しさん
2007/12/09(日) 22:58:11書いといたほうがいい。
なお、
#include
は、「ファイルxxxの中身を、ここに取り込む」という意味。
それをプリプロセッサが解釈して、ファイルの中身を展開する。
コンパイラにプリプロセス処理をするだけのオプションがあるだろうから、
それでプリプロセス処理したファイルを吐き出させてみるとよくわかるよ。
0467デフォルトの名無しさん
2007/12/09(日) 22:59:26HP-UXと申すか。
0468デフォルトの名無しさん
2007/12/09(日) 23:04:540469デフォルトの名無しさん
2007/12/09(日) 23:06:250470デフォルトの名無しさん
2007/12/09(日) 23:49:37とりあえずつけといて問題ないってことですね
プリプロセス処理って文字の調整??みたいな感じじゃなかったですか?
0471デフォルトの名無しさん
2007/12/10(月) 01:05:55プリプロセッサだのプロトタイプだのそんなの分かるわけないだろ
0472デフォルトの名無しさん
2007/12/10(月) 02:48:31そのコードの#include <stdio.h>をコメントアウトしたら
warning C4013: 'printf' undefined; assuming extern returning int
の警告が出力されたので、プログラムが完成していないように見えるけど?
0473デフォルトの名無しさん
2007/12/10(月) 08:18:24warningは「"printf"の宣言が無いから、とりあえずintを返す関数と思っておくよ」と言っている。
printfの戻り値(intだけど)を何も使ってないので、動作に影響は出ないはず。
0474デフォルトの名無しさん
2007/12/10(月) 08:33:58別の翻訳単位にある関数を引数の数めちゃくちゃとかで呼べたりするのか?
0475デフォルトの名無しさん
2007/12/10(月) 08:56:07呼べると思うが、まともに動かないと思われ。
0476デフォルトの名無しさん
2007/12/10(月) 08:56:11main() {
char *malloc();
int *p = (int *)malloc(size);
...
}
なんて書かれ方をしていた。
で、これが通るように考慮されて規格が定められた。
0477デフォルトの名無しさん
2007/12/10(月) 18:40:45なんか良さそうなバイブル本みたいな本無いですか?
0478デフォルトの名無しさん
2007/12/10(月) 19:05:31それやったらローカルでプロトタイプ宣言されるのかと思ったら、グローバルで宣言されてるのな(bcc)
0479デフォルトの名無しさん
2007/12/10(月) 22:55:25printf("c = %x",c);
とするとc = ffffffaaと表示されるのをc = aaとするにはどうすればいいのですか?
0480デフォルトの名無しさん
2007/12/10(月) 22:58:03printf("c = %x",(unsigned char)c);
0481デフォルトの名無しさん
2007/12/10(月) 23:23:23レス遅れまくってすみません。ありがとうございました。
>#define TRUE !FALSE
の ! だけは、「でなければ」という意味の演算子としての役割なんですね。
ちなみに、「!FALSE」という名前を、「TRUE」の別名として定義したい
場合にはどうすればいいのでしょう?(演算子と文字列の区別のつけ方として・・)
0482デフォルトの名無しさん
2007/12/10(月) 23:28:55printf("c = %hhx", c); // C99
>>480
可変個引数関数では既定の実引数拡張の規則にしたがって、
unsigned charはintに昇格されるから、そのキャストは意味がない。
0483デフォルトの名無しさん
2007/12/10(月) 23:30:51unsigned にしたら、符号拡張がなくなるから、ffffffがなくなるんじゃないの?
0484デフォルトの名無しさん
2007/12/10(月) 23:58:35unsigned char *ABC;
int i;
struct Struct_HensuMei {
unsigned char Member_Mei[12] ;
・
・
・
} ;
.
.
.
for(i=0; i<6; i++)
{
Struct_HensuMei.Member_Mei[i] =
((ABC[i*2+0] << 4) & 0x00f0)
| (ABC[i*2+1] & 0x000f);
}
0485デフォルトの名無しさん
2007/12/11(火) 00:02:56すみません。構造体定義が抜けていました。
unsigned char *ABC;
int i;
struct Struct_HensuMei {
unsigned char Member_Mei[12] ;
・
・
・
} ;
struct Struct_HensuMei Struct_HensuMei;
・
・
・
for(i=0; i<6; i++)
{
Struct_HensuMei.Member_Mei[i] =
((ABC[i*2+0] << 4) & 0x00f0)
| (ABC[i*2+1] & 0x000f);
}
0486デフォルトの名無しさん
2007/12/11(火) 01:07:44大学でやってるCを自宅でもやりたいと思ってるんだけど、
そういうのを自宅でやるのはどうすればいいの?
できれば無料でやりたいんだけど、
どんなソフトをインストールすればいいのか教えてください。
大学ではUNIXとか使ってます。
0487デフォルトの名無しさん
2007/12/11(火) 01:19:350488デフォルトの名無しさん
2007/12/11(火) 01:21:19http://www.digitalmars.com/download/dmcpp.html
0489デフォルトの名無しさん
2007/12/11(火) 01:30:310490デフォルトの名無しさん
2007/12/11(火) 01:31:44じゃあ、少しは苦労しろ
0491486
2007/12/11(火) 02:20:07>>488
見てみたんですが、どれを落とせばいいのか分からないです・・・。
無料でできるのはどれか教えていただけませんか?
そもそも、C言語始めるのに必要なものって何なんですか?
コンパイラとか良く分からないんですけど・・・。
0492デフォルトの名無しさん
2007/12/11(火) 02:27:130493デフォルトの名無しさん
2007/12/11(火) 02:32:23そういうことを学ぶために学校行ってるんじゃねーの?
大抵クラスに詳しい奴の一人や二人は必ずと言っていいほどいるから
そういう奴と友人になるチャンスに恵まれてるのも学校のいいところ
0494デフォルトの名無しさん
2007/12/11(火) 02:38:07配列内には文字として数値の他に演算子も文字として定義されているのですが・・。
演算子はifを使って処理はできているのですが数値変換だけうまくいかないものでお聞きしたいです。
0495デフォルトの名無しさん
2007/12/11(火) 03:58:33http://www.knatech.info/dev-mingw-install.html
0496デフォルトの名無しさん
2007/12/11(火) 07:40:24atoiは、数字以外の文字に出会ったらそこで呼び出し元に戻る。
そこをうまく使えば可能。
0497デフォルトの名無しさん
2007/12/11(火) 09:10:58見たままとしか・・・。
charの配列からそれぞれ下位4ビットを取り出して並べてる。
上手く言えないなぁ。
((0x31 << 4) & 0x00f0) | (0xfa & 0x000f);
=> 0x1a
0498デフォルトの名無しさん
2007/12/11(火) 13:06:27そういうときこそstrtol()の出番ですぜ。
0499デフォルトの名無しさん
2007/12/11(火) 13:55:19と
for (; ch=fgetc(fp) != '@'; total++) または for (; (ch=fgetc(fp) != '@'); total++)
で、上ではループのたびにchにfgetcしたものが入っていたのですが、下ではchに入っておらず、ループの条件は正常でした。
なぜ下では代入されないのでしょう?
0500デフォルトの名無しさん
2007/12/11(火) 13:59:07ch=fgetc(fp) != '@';
ch=(fgetc(fp) != '@');
0501デフォルトの名無しさん
2007/12/11(火) 14:01:24演算子には優先順位というものがあって、
==は=よりも優先順位が高い
for (; ch=fgetc(fp) != '@'; total++)
は
for (; ch= (fgetc(fp) != '@'); total++)
と解釈される。
代入演算子(=)は右辺の値を返すので条件としては正常
演算子の優先順位を全て覚える必要は無いが、
代入演算子はほぼ全ての演算子より優先順位が低い、ということくらいは覚えておいた方がいい
0502デフォルトの名無しさん
2007/12/11(火) 14:06:36素早い返答ありがとうございます
よく分かりました!
0503デフォルトの名無しさん
2007/12/11(火) 14:07:43わけわからなくなっています.
struct A{
double (*f[100])(double);
(double *)(*funk)(double);
};
void function(){
struct A hoge;
hoge->funk=hoge->f[0];
return;
}
0504デフォルトの名無しさん
2007/12/11(火) 14:11:07struct A{
double (*f[100])(double);
(double *)(*funk)(double);
};
void function(struct A *hoge; ){
hoge->funk=hoge->f[0];
return;
}
0505デフォルトの名無しさん
2007/12/11(火) 14:11:55そうしたいならキャストすれば?
0506デフォルトの名無しさん
2007/12/11(火) 14:14:45どうみても型が違うじゃん
0507デフォルトの名無しさん
2007/12/11(火) 14:23:45funkの指すものを関数のポインタ配列fの先頭アドレスにしたいのです.
構造体の宣言から間違っているでしょうか?
0508デフォルトの名無しさん
2007/12/11(火) 14:26:150509デフォルトの名無しさん
2007/12/11(火) 14:34:57今,構造体の宣言のなかで
(double *)(*funk)(double); ではなく
double (**funk)(double);にして
関数内で
math->funk=math->f;
としたらコンパイル通りました.
正直理屈がわかりません.ただ,ヒントをありがとうございます.
考えて見ます.
0510デフォルトの名無しさん
2007/12/11(火) 14:42:07double(**)(double) 戻値型がdoubleで引数が(double)の関数へのポインタへのポインタ
double (*[100])(double) 戻値型がdoubleで引数が(double)の関数へのポインタの配列[100]
0511デフォルトの名無しさん
2007/12/11(火) 15:05:27ありがとうございます.
ようやく理解できました.
0512デフォルトの名無しさん
2007/12/11(火) 15:21:05てどう書けば良いんでしょうか?
下記はダメでした.
int (*)(const void *a, const void *b) get_hoge()
{
}
0513デフォルトの名無しさん
2007/12/11(火) 15:27:090514デフォルトの名無しさん
2007/12/11(火) 15:45:30typedef int (*PFNFUNC)(const void *, const void *);
PFNFUNC get_hoge() { }
仕組みの勉強としては>>513の方が明確だけどね
0515デフォルトの名無しさん
2007/12/11(火) 16:14:350516デフォルトの名無しさん
2007/12/11(火) 16:27:40C言語のプログラムの中から別のプログラム(コンソールで動く実行ファイル)を呼び出したいです。
別プログラムは他言語で作られているため、ソースをincludeして使うとかではなく、
既にexeとして生成されたものをただ呼び出して使いたいです。
int main(){
execl("program.exe",/*〜その他引数を羅列〜*/,NULL);
printf("完了\n");
}
このようにexecl関数で実行することができるのですが、
この方法だと元のプログラムのプロセスが終了されてしまうようです。
(この場合、次の行のprintfは実行されません。)
別プログラムを呼び出して、また元プログラムに戻る方法があったら教えてください。
0517デフォルトの名無しさん
2007/12/11(火) 16:34:51fork()
0518デフォルトの名無しさん
2007/12/11(火) 16:35:36f(x)=ax^4+bx^3+cx^2+dx+e としたとき
f(f(x)) の展開式を求めたいのですが
都合の良いコマンドはないでしょうか?
ちなみにa〜eは数値でも可(但し1以外で全部バラバラ)です
powも考えたのですが、xには値を入れたくないので無理でした
0519デフォルトの名無しさん
2007/12/11(火) 16:37:56ググるか作れ
0520デフォルトの名無しさん
2007/12/11(火) 16:46:41ぐぐって調べてみたら、fork()はUNIX専用のようです。
コンパイラがWindowsでのbcc32なので、この関数自体実装されていないようで。
これに代わる方法ありませんか?
0521デフォルトの名無しさん
2007/12/11(火) 16:49:17CreateProcess
0523デフォルトの名無しさん
2007/12/11(火) 17:08:55mathematica
0524デフォルトの名無しさん
2007/12/11(火) 17:28:08ありがとうございます!
system()を使ったらあっさり解決できました!
0525デフォルトの名無しさん
2007/12/11(火) 20:10:05関数の中身がなんなのかいまいちよく分かりません。
どなたか、木構造で主に必要な関数
にどんなものがあるか教えてもらえませんか?
0526デフォルトの名無しさん
2007/12/11(火) 21:00:21その「見たまま」をもう少し日本語で!
ビット演算子とかよく分かりません。これは何をしてる処理なんでしょうか?
0527デフォルトの名無しさん
2007/12/11(火) 21:13:260528デフォルトの名無しさん
2007/12/11(火) 21:16:45それはビット演算子が「分からない」んじゃなくて
ビット演算子を「知らない」だけじゃないのか?
もしそうならぐぐれ
0529七誌
2007/12/11(火) 22:12:380530デフォルトの名無しさん
2007/12/11(火) 22:46:410531デフォルトの名無しさん
2007/12/12(水) 02:39:10#include <stdlib.h>
int main(void)
{int f,h,i,j,k,l;
int count[25];
char str[1024];
FILE *infp,*outfp;
if((infp=fopen("in.txt","r"))==NULL)
{ printf("ファイルを開けません。");
exit(EXIT_FAILURE); }
if((outfp=fopen("out.txt","w"))==NULL)
{ printf("ファイルを作成できません。");
exit(EXIT_FAILURE); }
for(h=0;h<=25;h++)
{count[h]=0;}
while(fgets(str,1024,infp)!='\0')
for(j=65,k=0;j<=90,k<=25;j++,k++)
{
for(i=0;i<=256;i++)
{if(str[i]==j || str[i]==j+32)
{count[k]++;}
else if(str[i]=='\0')
break; } }
for(f=0,l=97;f<=25,l<=122;f++,l++)
{fprintf(outfp,"%c: %d個\n",l,count[f]);}
fclose(infp);
fclose(outfp);}
in.txtのテキストデータの各文字(大文字小文字区別せず)の文字数をカウントし、out.txtに出力するプログラムなんですけど
fprintfがうまく機動しません。printfだったらきれいに表示されるのに… ファイルの操作難しいっすね
0532デフォルトの名無しさん
2007/12/12(水) 02:41:290533デフォルトの名無しさん
2007/12/12(水) 02:52:18printfでもfprintfでもちゃんと表示されたけど?ただ、 z の個数があってないみたいだが。
つか、マジックナンバーはやめようぜ。65は'A'にすべき。
0534デフォルトの名無しさん
2007/12/12(水) 03:03:47count[25]が原因か
0535デフォルトの名無しさん
2007/12/12(水) 03:13:230536デフォルトの名無しさん
2007/12/12(水) 11:09:010-25だから26回回ってると思うよ^^;
0537デフォルトの名無しさん
2007/12/12(水) 11:09:53宣言が25ね。
0538デフォルトの名無しさん
2007/12/12(水) 11:16:350539デフォルトの名無しさん
2007/12/12(水) 19:34:54勤怠表をcsvファイルで作り、ファイル入出力で
社員番号 氏名 基本給 手当 通勤費 日数 残業代 総労働時間 総合計金額
を読み込み?基本給と手当と通勤費と日数と残業代と総労働時間から
総合計金額を出すプログラムを作りたいのですが、総合計金額を出す条件式が分かりません。
残業代は基本給の1.35/160(月のトータルの基本時間)で計算するのは分かっているのですが
どうやって条件式を書いたらいいのか分かりません・・・。
先生に聞いてもヒントをくれるだけで、そのヒントも分かってる人前提で話しているので
意味が分かりません。 どなたか教えて下さい。よろしくお願いします。
ちなみに使ってる環境はwindows XP コンパイラはgccです。
0540デフォルトの名無しさん
2007/12/12(水) 19:50:32まあ普通の会社だな
0541デフォルトの名無しさん
2007/12/12(水) 20:13:34いい会社だな。
0542デフォルトの名無しさん
2007/12/12(水) 20:16:35もう一つの帳簿のデータが無いと完璧とはいえない
0543デフォルトの名無しさん
2007/12/12(水) 20:16:390544デフォルトの名無しさん
2007/12/12(水) 20:26:18総合計金額=基本給+手当て+通勤費+残業単価*(総労働時間-160);
0545539
2007/12/12(水) 20:36:52これはif文で書けばいいのでしょうか?
ちなみに10人分の総合計金額を出さなくてはいけないのですが
10人目までwhile文で繰り返してbreakでいいのでしょうか・・。
分からないループに入って頭真っ白です。
0546デフォルトの名無しさん
2007/12/12(水) 20:45:520547デフォルトの名無しさん
2007/12/12(水) 20:55:11csvに10人分入ってるなら、EOFまで読めば?
0548デフォルトの名無しさん
2007/12/12(水) 22:01:45Excelファイルのデータを読み込む方法ってありますか?(csvではなく、xls)
ぐぐってみると、VC++などで読み込む方法はいくつか解説されているのですが、
その他の環境でそれをすることは可能でしょうか?
VC++のほうの解説だと、Office2000やXPがインストールされた環境でのみ動作するようですが・・・
使用しているコンパイラはBorlandのbcc32です
0549デフォルトの名無しさん
2007/12/12(水) 22:06:53特殊なライブラリーがなければダメでしょ
ExecelファイルをCSV出力してそれをよめば?
0550デフォルトの名無しさん
2007/12/12(水) 22:34:530551デフォルトの名無しさん
2007/12/12(水) 23:23:58COMの扱いはBCCよりVC++が長けているので、そっちでの解説が多いのは当然。
けどBCCでも不可能ではない。ただ、いずれにせよCでは面倒。せめてC++は欲しい。当然、実行環境にExcelが必要、Excel本体を使うのだから。
もちろん、Excel抜きに自分でファイルの中身を読み取っていくことも
理論的には可能だし、一太郎やOpenOffice.orgなんかはそうしているはず。
Excel 97-2003ブックは、OLE構造化ストレージにBIFFを詰め込んだもの。
なお、構造化ストレージの読み書きはWindows APIの機能として用意されている、COMだけど。
2007は全く別物で、Office Open XMLをZIP圧縮したもの。やるならあと頑張れ。道なき道を覚悟しろ。
0552デフォルトの名無しさん
2007/12/12(水) 23:35:24アクセスしたほうがいいんじゃまいか。スレ違うけど。
ODBC-Excelドライバ経由で叩く手もあるよね。癖があるけど。
OOXMLならまだ触りやすい気もするかな、かな。
0553デフォルトの名無しさん
2007/12/13(木) 03:52:08と勘違いしたのは俺だけでいい。
0554デフォルトの名無しさん
2007/12/13(木) 03:58:55cygwin
0555デフォルトの名無しさん
2007/12/13(木) 12:21:120556デフォルトの名無しさん
2007/12/13(木) 12:41:21C言語でスレッドプログラミングの勉強をするのにいい本ってありませんか?
どなたか知っている方いたら教えてください。
0557デフォルトの名無しさん
2007/12/13(木) 13:04:390558デフォルトの名無しさん
2007/12/13(木) 14:00:27Sleep();の値にはint型の数値しか取り扱えないのでしょうか?
また、マイクロ秒単位でのウェイト処理をする方法はないでしょうか?
0559デフォルトの名無しさん
2007/12/13(木) 14:17:26だいたい10msが限界
CPUのタイムスタンプカウンタでも使って、
ビジーループすればいいんじゃないかね。
0560デフォルトの名無しさん
2007/12/13(木) 15:49:17HTMLから全てのURLを抽出するにはどうすればいいですか?
0561デフォルトの名無しさん
2007/12/13(木) 15:59:40全部な
0562デフォルトの名無しさん
2007/12/13(木) 15:59:420563デフォルトの名無しさん
2007/12/13(木) 16:01:38>>562の方が的確でFTPもおkと言ってきたか
フフぬかったわ
0564デフォルトの名無しさん
2007/12/13(木) 16:01:460565デフォルトの名無しさん
2007/12/13(木) 16:03:29httpsとかもありますよね?
0566デフォルトの名無しさん
2007/12/13(木) 16:04:06こんな感じだろう
while(1){
m = str.find("://");
n = min( str.find(" ") , str.find("\"") );
printf("http%s\n",str.substr(m,n-m));
str=str.substr(m+1);
}
0567デフォルトの名無しさん
2007/12/13(木) 16:05:110568デフォルトの名無しさん
2007/12/13(木) 16:05:50たとえば、mailto:には//ありませんよね
0569デフォルトの名無しさん
2007/12/13(木) 16:12:29イメージタグとか、リンクタグとか、Java スクリプトとか、PHPとか色々あるから全て抽出するには全部の判定を入れる
あと曖昧な記述にも対応しなければ行けない
0570デフォルトの名無しさん
2007/12/13(木) 16:13:54マトモなHTMLパーザを使いましょう。
0571デフォルトの名無しさん
2007/12/13(木) 16:17:17あとURLを別の文字で置換している場合はプログラムの構造を把握しなければならず困難
0572デフォルトの名無しさん
2007/12/13(木) 16:27:230573デフォルトの名無しさん
2007/12/13(木) 16:31:100574デフォルトの名無しさん
2007/12/13(木) 17:45:210575デフォルトの名無しさん
2007/12/13(木) 21:47:29よろしいでしょうか?
0576デフォルトの名無しさん
2007/12/13(木) 21:59:22.[TLDs](/|\s)を探して、前後の文字連中がURIとして
延長可能そうならのばす、って言う感じで処理したことはある。
IDNがマイナーだった時代の話。
0577デフォルトの名無しさん
2007/12/13(木) 22:21:400578デフォルトの名無しさん
2007/12/13(木) 22:58:37計算時間と入力nの関係をグラフにする場合軸は対数ですか?
0579デフォルトの名無しさん
2007/12/13(木) 23:01:100580デフォルトの名無しさん
2007/12/13(木) 23:07:450581デフォルトの名無しさん
2007/12/13(木) 23:29:27グローバルのImageクラスを宣言したいのですが、
理由として、おそらくWM_PAINT内で何度もロードを行うことが
処理に負担をかけてしまうと思ったからです。
//行頭
Image myImg(_T("kuso01.jpg\0\0"));
//ここで宣言するとgdiplusbitmap.h内の
lastResult = DllExports::GdipLoadImageFromFile(…
でフリーズします。
WinMain(){
GdiplusStartup(&gdiToken, &gdiSI, NULL);
setlocale(LC_ALL, "");
//↓以下プロシージャ内で宣言すると正常に動作する
・・・
Image myImg(_T("kuso01.jpg\0\0"));
}
externだとポインタの指定がおかしいのかエラー吐かれたので、
UNICODEが悪いのか、何が原因なのか教えて下さい。
頼みます。
0582デフォルトの名無しさん
2007/12/13(木) 23:46:29ここはC言語のスレだ。
C言語では「クラス」なぞ宣言出来ない。
他所池他所
つか自分で答え書いてんじゃん。
>Image myImg(_T("kuso01.jpg\0\0"));
で実行されるコードの中に
> lastResult = DllExports::GdipLoadImageFromFile(…
を呼ぶコードがあって、その時点では
>GdiplusStartup(&gdiToken, &gdiSI, NULL);
が実行されてないからだろ。
0583デフォルトの名無しさん
2007/12/13(木) 23:54:58スマソ
0584デフォルトの名無しさん
2007/12/14(金) 00:21:55基本情報技術者試験関連スレ
0585デフォルトの名無しさん
2007/12/14(金) 09:19:35エンター押さなくて良いやつ教えて下さい
0586デフォルトの名無しさん
2007/12/14(金) 09:48:430587デフォルトの名無しさん
2007/12/14(金) 10:03:310588デフォルトの名無しさん
2007/12/14(金) 10:28:51ccやgcchのオプションで、-Oや-xOを用いて
最適化レベルを指定するとき、4や5といった高レベルにすると
計算結果が変わったり意図しない動作をすることがあると聞いたのですが、
具体的にはどういった処理で差異がでるのでしょうか?
通常はO2以上っは使わない方がいのでしょうか?
0589デフォルトの名無しさん
2007/12/14(金) 10:39:490590デフォルトの名無しさん
2007/12/14(金) 10:40:20私の知る限り、最適化で値が変わるのは実数演算のみだから余り気にする必要はない。
何故なら、実数演算の場合は完全に値が一致することを前提にプログラムを組む方が稀だから。
ついでに言えば、一致させる必要がある場合はコンパイラとターゲットCPUごとにオプションを微調整する必要があると思った方がいい。
0591デフォルトの名無しさん
2007/12/14(金) 11:12:57C言語の参考書は何を使いましたか??
またオススメの書籍はなんですか??
0592デフォルトの名無しさん
2007/12/14(金) 11:21:17スレ違いです。
ちなみに私は、所謂K&Rは読みましたが、参考書としては使っていません。
その他の本も同様です。
0593デフォルトの名無しさん
2007/12/14(金) 11:21:42char*型の戻り値を持つユーザー定義関数がうまく動作させられません。
char* function(引数){
char* str;
〜処理〜
return str;
}
内部でstrに入れる文字数が長いとダメとか、
printf("%s",function()); では表示されないのに
(c++になってしまいますが)cout<<function()<<'\n';では表示されたりとか、その逆だったりとか、
一見呼び出し側で問題無いように見えても、
1回呼び出すだけなら大丈夫でも、for文などで回してやるとエラーが出て停止したりとか。
char*型というのはそもそも、「char mojiretsu[100]」のように長さを指定する文字列と比べて、
必要な領域を確保される、長さに上限は無い、そういう型だと認識していましたが、間違っていますか?(ある程度以上の長さ入れるとマズイとか)
function内部のstrを、「str[20]」のように固定長の配列にするとうまく動いたりもしますが、
str[20]をstr[10]にすると文字化けしたり、はたまたstr[100]にすると表示されなかったりと、
(戻り値として返そうとしているのは半角4〜8文字程度で、10でも箱が足りないことは無いはずなのに)
いずれもコンパイルは通るので、メモリ周りでなにかマズイ処理になってるのだと思いますが・・・
コンパイラはBorland Bcc5.5フリー版です。
もう3日ぐらい悩んでます お願いします・・・
0594デフォルトの名無しさん
2007/12/14(金) 11:28:52char* str だけだと入れる場所は無いからダメ。
char str[10] だと、関数抜けると無効だからダメ。
malloc等で動的に確保するか、動作確認したいだけなら static にするとか。
0595デフォルトの名無しさん
2007/12/14(金) 11:41:38>必要な領域を確保される、長さに上限は無い
もう理解していることだったらすまないが、勝手に確保なぞされない
Cならmalloc、C++ならnewで確保せねばならない
それで今回のケースだが、たとえばchar str[10]みたいにすると、
ローカル変数のスコープは関数内だから関数から抜けた時点でどうなるか分からない
char *strみたいなとこにmallocもせず直接ぶっこんだなら、上に書いたようにNG
mallocせねばならない
0596デフォルトの名無しさん
2007/12/14(金) 11:51:40>>594
>char str[10] だと、関数抜けると無効だからダメ。
やはりそうですか・・・
そのように宣言してから、
return str; で終了すると、コンパイル時に「問題のあるポインタ変換」といった警告メッセージが出ます。
コンパイルは成功するのですが、main関数側で呼び出すと、不安定になります。(表示されたりされなかったり、文字化けしたり、複数回実行するとエラー出て停止したりと。)
回避策として、return &str[0]; とやると警告メッセは出なくなりますが、不安定なのはいっしょです。
>>595
>勝手に確保なぞされない
ありがとうございます!私が間違って覚えていたようです。
今回使っているstrの宣言を「char* str=(char *)malloc(100);」にして、
さっそく試してみたら、問題なく動作しました。
しかし、今回のようにreturnで返すために格納する変数の場合、
free(str);でメモリ開放することができないのでは?
(return文で使うため、その後に処理を書けない。)
動いてはいるものの、メモリ開放せずに関数を終了してしまうのは問題あるような気がします。
何か方法はありますか?
0597デフォルトの名無しさん
2007/12/14(金) 11:53:52その場合、呼んだ関数側で解放すればいい。
0598デフォルトの名無しさん
2007/12/14(金) 12:30:23void main(){
printf("%s\n",function());
}
のように呼び出す場合、どうやって開放すれば良いですか?
0599デフォルトの名無しさん
2007/12/14(金) 12:32:04"char*"を文字列型(JavaのString)みたいに考えてるようだが、それは正確ではない。
char(8bit整数)型のポインタが"char*"なだけで、Cではたまたまそこに文字列を入れる
慣例になってる(コンパイラもそう判断している)ってだけ。
それ以外の扱いはint*やdouble*と変わらん。
0600デフォルトの名無しさん
2007/12/14(金) 12:32:18char* p = function();
printf("%s\n", p);
free(p);
}
こうなるべ。
まあ static char str[10];
でも動くけどな。
0601デフォルトの名無しさん
2007/12/14(金) 12:33:07char *temp = function();
if (temp != NULL){
printf("%s\n", temp);
free(temp);
}
0602デフォルトの名無しさん
2007/12/14(金) 12:41:27やっと違和感が解消しました。
どうやら、私に教えてくれた先輩が間違っていたようで・・・
「char*型は、文字数固定なし、制限なく使える文字列変数だ」のように教わって覚えていたもので。
たしかにint*やdouble*でmalloc - freeしてるのと比べて扱いが特殊なのには疑問というか違和感を感じていました。
>>600-601
なるほど。
まずメイン側でもポインタ変数を一時的に用意して、そこに格納し、あとでそれを開放するという形を取れば良いということですね。
>まあ static char str[10];でも動くけどな。
このようにした場合、あとで開放しなくても大丈夫なのですか?
0603デフォルトの名無しさん
2007/12/14(金) 12:46:50開放する必要は無い。プログラムの最初から最後まで残ってるけどな。
0604デフォルトの名無しさん
2007/12/14(金) 13:10:46ということは、何百回もループさせて呼び出すような関数の場合、
あまり良い使い方ではないということですか?
0605デフォルトの名無しさん
2007/12/14(金) 13:15:29メモリ食いすぎたら調べればよい
0606デフォルトの名無しさん
2007/12/14(金) 13:51:27staticな変数は、その関数を何回呼ぼうと同じ場所の同じものが使われる。
0607デフォルトの名無しさん
2007/12/14(金) 13:57:43示すプログラムを教えてほしいです。
さらに、そのコンパイル結果をコピーできるようなプログラムを教えてほしいです。
0608デフォルトの名無しさん
2007/12/14(金) 14:02:530609デフォルトの名無しさん
2007/12/14(金) 14:10:18はい
0610デフォルトの名無しさん
2007/12/14(金) 14:23:56TimeGetTime()で取得するシステムタイム時間にて
約49日で0クリアされますが、その際にバグがあり、修正を行ったのですが、
すぐに検証する事が出来ません。
システムタイムを任意の値にセットする事は可能でしょうか?
0611デフォルトの名無しさん
2007/12/14(金) 14:27:330612デフォルトの名無しさん
2007/12/14(金) 14:37:23ありがとうございます!
これで心置きなく使えます
0613デフォルトの名無しさん
2007/12/14(金) 14:41:42システムタイムの変更は出来ないという事でおkでしょうか?
ラッパー使ったことないので、調べてみたのですが、
支援ソフトつかわないとダメってことでしょうか?
0614デフォルトの名無しさん
2007/12/14(金) 14:58:47できないという確信はない。できるかもしれん。
ラッパーというのは、DWORD myTimeGetTime() { return timeGetTime(); } みたいな
関数を作れってこと。
0615デフォルトの名無しさん
2007/12/14(金) 15:23:16ご親切にありがとうございました。
0616デフォルトの名無しさん
2007/12/14(金) 17:00:02int main(void){
int r,ki,tree; int cell[100][100]={0};
int i,j; int a=0;
char iff;
scanf("%d",&r); scanf("%d",&tree);
for(j=0;j<4*r;j++){
cell[j][r-2]=1;
}
cell[tree][r-1]=2;
cell[tree][r]=3;
for(j=0;j<4*r;j++){
for(i=0;i<4*r;i++){
printf("%d",cell[j][i]);
}
printf("\n");
}
while(1){
printf("増やしますか?\ny or n : ");
/***********************************************/
scanf("%s",&iff);
if(iff=='y'){
a++;
cell[tree-a*2][r+a*2]=4;
:
:
/**********/以下の部分で、treeが0になってしまうのですが、なぜかわかりません。
0617デフォルトの名無しさん
2007/12/14(金) 17:08:54cell の添字がマイナスになったらtree壊すべ
0618デフォルトの名無しさん
2007/12/14(金) 20:07:24レスありがとうございます。
じゃあ配列でこういう書き方は出来ないってこと?
0619デフォルトの名無しさん
2007/12/14(金) 20:40:47そうじゃなくて、マイナスにならないよう、値をちゃんとチェックしろ、ということ。
0620デフォルトの名無しさん
2007/12/14(金) 20:56:00どうもありがとう
0621デフォルトの名無しさん
2007/12/14(金) 22:44:35int i, len, k = 0;
char *cp,*dp;
char buff[BUFFSZ],*array[BUFFSZ];
for(i = 0 ; i < BUFFSZ ; i++){
array[i] = NULL;
}
printf("文字列を入力してください。\n");
printf("\",\"(カンマ) で区切り配列に格納し、ファイルに出力します。\n\n");
scanf("%s",buff);
for(cp = buff ; *cp != '\0' ; cp++){
数値を入力すると強制終了してしまう・・・。
どなたか教えてください・・・。
0622デフォルトの名無しさん
2007/12/14(金) 22:50:16> array[i] = NULL;
これは array[i] = 0; だな。
NULLは間違い。
さらに言えば、バッファのクリアもいらない。
自称上級者でも、バッファのクリアしろって言うやついるけど、だまされるな。
0623デフォルトの名無しさん
2007/12/14(金) 22:57:12わかりづらい書き方だけど、
arrayはポインタの配列だからNULLであってるだろ。
scanfって最後に'\0'入れたっけ?
0624デフォルトの名無しさん
2007/12/14(金) 22:58:37ほんとうだ。
ポインタの配列だった。
0625デフォルトの名無しさん
2007/12/14(金) 22:59:33はい。有料です。
2ちゃんねる使用料
■閲覧
1スレッド 25円
■書きこみ
1レス 10
スレ立て 500円(大人の時間、ニュース速報は1000円)
混雑時は立てる事が出来ない場合がありますが、その時は課金されません
■書きこみ放題
・プラチナプラン 4800円 閲覧無料 スレ立て200円、通常3スレ/月、実況5スレ/週の無料サービス
・ゴールドプラン 3500円 閲覧無料 スレ立て半額 HOT!
払わないと、大変なことになるかもしれませんね・・・( ̄ー ̄)ニヤリ
2ちゃんねるは有料だった
ソース
http://www.geocities.jp/guide_2ch/
0626デフォルトの名無しさん
2007/12/14(金) 23:02:21自動的に\0はつけられるよ。
バッファあふれたら別だけど
0627デフォルトの名無しさん
2007/12/14(金) 23:05:200628デフォルトの名無しさん
2007/12/15(土) 00:05:58エスパーすると、
>char buff[BUFFSZ],*array[BUFFSZ];
char buff[BUFFSZ],array[BUFFSZ][BUFFSZ];
こうすると動く気がする。
0629デフォルトの名無しさん
2007/12/15(土) 00:57:14arrayに渡すエリアの確保を忘れているとかか?
arrayはポインタの配列だからarrayに色々データを入れるのなら
何処かでmallocでエリアを作らんとだめじゃね?
0630デフォルトの名無しさん
2007/12/15(土) 01:20:410631デフォルトの名無しさん
2007/12/15(土) 01:28:390632デフォルトの名無しさん
2007/12/15(土) 03:05:47OpenCVのライブラリいじってタイトルバー消すにはどうしたらいい?
そもそもライブラリ見ても、タイトルバーの消し方がわからん。
何かいい方法知りませんか。
0633デフォルトの名無しさん
2007/12/15(土) 11:32:490634デフォルトの名無しさん
2007/12/15(土) 12:05:27強化学習が分かれば
囲碁のプログラミングも出来るかな?
0635デフォルトの名無しさん
2007/12/15(土) 12:22:59OpenCVの機能じゃなくて、Win32APIの話になる。
すれ違いなので↓こっちへ
http://pc11.2ch.net/test/read.cgi/tech/1196874830/
0636デフォルトの名無しさん
2007/12/15(土) 12:26:120637デフォルトの名無しさん
2007/12/15(土) 12:35:47基本はヒューリスティックの自動構築ですか?
冬休みに10級くらいで打てるソフトを作りたい。
0638デフォルトの名無しさん
2007/12/15(土) 12:40:080639デフォルトの名無しさん
2007/12/15(土) 12:52:44囲碁のソフトを作るのには有利ですか?
0640デフォルトの名無しさん
2007/12/15(土) 13:06:51でも不利になることは無いと思うよ
0641632
2007/12/15(土) 13:09:46ありがとうございます
0642デフォルトの名無しさん
2007/12/15(土) 13:16:27ゲームプログラミングをしたことありますか?
0643デフォルトの名無しさん
2007/12/15(土) 13:27:530644デフォルトの名無しさん
2007/12/15(土) 13:30:08ボーリングスコア計算を練習で作ってみてって言われてストライクスペアの計算知らなかったから最初は困った。。。
0645デフォルトの名無しさん
2007/12/15(土) 13:33:16あるよ
というか専門分野
囲碁じゃないけど
0646デフォルトの名無しさん
2007/12/15(土) 14:24:49友達になりませんか?
当方、専門を通信にしようかAIにしようか迷っている
電気電子系の学生です。
相談に乗ってもらえるとありがたしでつ。
Skypeのアカウント名は
sunsunlight_heart
でつ。
連絡待ってます。
(といっても今日は5時まで家に帰ってきませんが)
0647デフォルトの名無しさん
2007/12/15(土) 14:31:380648デフォルトの名無しさん
2007/12/15(土) 14:34:38同じくw
0649デフォルトの名無しさん
2007/12/15(土) 14:46:10してしまいます。たぶん、どっかしらをちょろっと直せば
動くと思うんですが、どなたかわかりませんか?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TXT "fileout.txt"
#define BUFFSZ 128
void fileout(int,char*); /* ファイル出力 */
int main(int argc, char *argv[]){
int i, len, k = 0;
char *cp,*dp;
char buff[BUFFSZ],*array[BUFFSZ];
for(i = 0 ; i < BUFFSZ ; i++){
array[i] = NULL;
}
printf("文字列を入力してください。\n");
printf("\",\"(カンマ) で区切り配列に格納し、ファイルに出力します。\n\n");
scanf("%s",&buff);
0650デフォルトの名無しさん
2007/12/15(土) 14:47:13for(cp = buff ; *cp != '\0' ; cp++){
while(*cp == ' ') cp++; /* 空白を飛ばす */
if(*cp == ',') cp++; /* カンマを飛ばす */
if(*cp == '"'){ /* 引用符の場合 */
dp = ++cp;
for(len = 0 ; *cp != '"' ; cp++){
len++; /* 引用符で囲まれた文字数 */
if(*cp == '\0') break;
}
}else{
dp = cp;
for(len = 0 ; *cp != ',' ; cp++){
if(*cp == ' ' || *cp == '"'){
break;
}
len++; /* カンマ間の文字数 */
}
cp--;
}
0651デフォルトの名無しさん
2007/12/15(土) 14:48:27array[k] = malloc(len + 1);
strncpy(array[k], dp, len);
*(array[k] + len) = '\0';
k++;
}
if(k > BUFFSZ) break;
}
fileout(1,0);
for(i = 0 ; array[i] != NULL ; i++){
fileout(2,array[i]);
}
fileout(3,0);
system("PAUSE");
return 0;
}
0652デフォルトの名無しさん
2007/12/15(土) 14:51:19static FILE *fp;
switch(x){
case 1:
fp = fopen(TXT,"w");
break;
case 2:
fprintf(fp,"%s\n",num);
break;
case 3:
fclose(fp);
break;
}
}
>>649-651 連書すみません。
0653デフォルトの名無しさん
2007/12/15(土) 15:09:14if(*cp == ' ' || *cp == '"'){
↓
if(*cp == ' ' || *cp == '"' || *cp=='\0'){
0654デフォルトの名無しさん
2007/12/15(土) 15:11:25×scanf("%s",&buff);
○scanf("%s",buff);
0655デフォルトの名無しさん
2007/12/15(土) 15:16:14ありがとうございます!!正常に稼動しました!!
もっと基礎を勉強する必要があると反省しました・・・。
0656デフォルトの名無しさん
2007/12/15(土) 16:25:02なんですが、コンパイル後起動させようとするとそのまま停止
してしまいます。m=1000にして1000までの素数を求めると起動
します。なぜでしょうか?ただパソコンのスペックが低いせい
かもしれませんが・・・
int main(void)
#define l 10000
{
int m=10000,i,j,q,p[l];
for(i=1;i<m;i++) p[i]=0; /*配列の初期化=フラグを0にしておく.フラグが0の間は素数の可能性がある*/
p[1]=1; /*1は素数じゃないので除外(=配列に格納されてるフラグを1にする)*/
q=2;
for(j=pow(q,2);j<m;j=j+q) p[j]=1; /*p[4]=1,p[6]=1,p[8]=1,....2以外の偶数は素数じゃないので除外*/
/*ここからは奇数の中で素数じゃないのを除外するループ*/
q=3; /*1以外で一番小さい奇数3を最初に代入*/
while(pow(q,2)<=m){
for(j=pow(q,2);j<m;j=j+2*q) p[j]=1;/*p[pow(3,2)=9]=1,p[9+2*3=15]=1,p[15+2*3=21]=1,...と3の倍数で
再び奇数となるものだけを除外していく*/
q += 2; /*2加算することにより、次は5,その次は7の倍数を除外...と順に奇数をたどって除外していく*/
}
/*ココからは最終的にフラグが0だった(=素数と判明した)数を出力する*/
for(i=1;i<m;i++){ /*i=2にしておけばp[1]=1;は書かなくていい*/
if(p[i]==0) printf("%d\n",i);
}
}
0657デフォルトの名無しさん
2007/12/15(土) 16:31:360658デフォルトの名無しさん
2007/12/15(土) 16:40:30環境は?
スタックオーバーフロー起こしてんじゃないのかな。
配列をグローバルにするか、staticつけてごらん。
0659デフォルトの名無しさん
2007/12/15(土) 16:44:24とかつかえ
0と1しか記録しないのに32bit使うのがおかしい
0660デフォルトの名無しさん
2007/12/15(土) 16:46:28printf入れて確認したほうがいいよ。
0661デフォルトの名無しさん
2007/12/15(土) 16:47:510662デフォルトの名無しさん
2007/12/15(土) 16:48:030663デフォルトの名無しさん
2007/12/15(土) 16:49:338倍も使うがやむを得ず初心者はcharでもよい
0664デフォルトの名無しさん
2007/12/15(土) 16:50:090665デフォルトの名無しさん
2007/12/15(土) 16:58:060666デフォルトの名無しさん
2007/12/15(土) 17:00:110667デフォルトの名無しさん
2007/12/15(土) 17:01:220668デフォルトの名無しさん
2007/12/15(土) 17:01:38それ使ってます!
もしかしてそれが原因ですか?
0669こうやるんだよ
2007/12/15(土) 17:04:11#include <stdlib.h>
#include <math.h>
#define l 10000
int *pp;
int p(int x){ int m=x/32,n=x%32; return (pp[m]>>n)&1; }
void p_on(int x){ int m=x/32,n=x%32; pp[m]|=(1<<n); }
main(){
int m=10000,i,j,q;
pp = (int*)calloc(l/32+1,4);
p_on(1);
q=2; for(j=pow(q,2);j<m;j=j+q) p_on(j);
q=3;
while(pow(q,2)<=m){
for(j=pow(q,2);j<m;j=j+2*q)p_on(j);
q += 2;}
for(i=1;i<m;i++)if(p(i)==0) printf("%d\n",i); }}
0670こうやるんだよ
2007/12/15(土) 17:05:16まずは、BCC developerいれておけ
LSIは駄目すぎ
0671デフォルトの名無しさん
2007/12/15(土) 17:07:26http://www.cospa.com/
これのことか
0672デフォルトの名無しさん
2007/12/15(土) 17:24:25↓じゃあかんの?
int isprime(unsigned int x)
{
unsigned int i;
if (x < 4) return 0;
if (x % 2 == 0) return 1;
if (x % 3 == 0) return 1;
for (i = 3; i < x; i++)
{
if (x % i == 0) return 1;
}
return 0;
}
0673デフォルトの名無しさん
2007/12/15(土) 17:25:400674デフォルトの名無しさん
2007/12/15(土) 17:26:190675デフォルトの名無しさん
2007/12/15(土) 17:29:010676デフォルトの名無しさん
2007/12/15(土) 17:34:25お手軽でよく動くのはbccだ
0677デフォルトの名無しさん
2007/12/15(土) 17:37:53お願いです。
いろいろ話を聞かせて欲しいです。
0678デフォルトの名無しさん
2007/12/15(土) 18:01:35それ以降は
1の位が1379の時だけ調べれば
10000回のループから
1000回のループに減らせるんじゃないか?
1回のループで4回調べる事になるけど
0679デフォルトの名無しさん
2007/12/15(土) 19:01:160680デフォルトの名無しさん
2007/12/15(土) 19:04:42printf("%s\n",fname);
if((fp=fopen(fname,"r"))==NULL){
printf("can't open math001.c: %s\n",fname);
exit(1);
}
}
という関数があった(これは抜粋)として、
printf文でdata001.txtを表示できてて、かつ、emacsでそのファイル(data001.txt)の中身を表示できるのに
can't openmath001.c data001.txtって表示されるんですけど
なんででしょうか?
引数のfnameにはdata[k].fname1という構造体配列の文字列から送ってます。
0681デフォルトの名無しさん
2007/12/15(土) 19:07:310682デフォルトの名無しさん
2007/12/15(土) 19:08:540683デフォルトの名無しさん
2007/12/15(土) 19:11:290684デフォルトの名無しさん
2007/12/15(土) 19:14:50パスが違うとか
0685デフォルトの名無しさん
2007/12/15(土) 19:18:35それはその動かないプログラムに問題があるとしか・・・
0686デフォルトの名無しさん
2007/12/15(土) 19:19:250687デフォルトの名無しさん
2007/12/15(土) 19:21:110688デフォルトの名無しさん
2007/12/15(土) 19:21:44みじかくして考えてみます。
0689デフォルトの名無しさん
2007/12/15(土) 19:23:24data001.txt のあるディレクトリ内に作られるかどうか確かめたら?
0690デフォルトの名無しさん
2007/12/15(土) 19:27:430691デフォルトの名無しさん
2007/12/15(土) 19:49:49実行したらまわるけど、コメント文じゃなくしたら
同じことに。文字列の領域オーバーかともおもったけど
その関数まで全く同じにしているのde
0692デフォルトの名無しさん
2007/12/15(土) 19:54:29ドラワル ゲストチアドラ
pass:dragons
http://kissho4.xii.jp/50/src/5yoshi3437.zip.html
0693デフォルトの名無しさん
2007/12/15(土) 19:56:070694デフォルトの名無しさん
2007/12/15(土) 20:02:33pass:dragons
http://www.uploda.net/cgi/uploader1/index.php?dlpas_id=0000276270.zip
0695デフォルトの名無しさん
2007/12/15(土) 20:25:49Skypeじゃなくてどこか適当なスレで相談に乗るよ
ちなみに>>647は別人
0696デフォルトの名無しさん
2007/12/15(土) 20:26:55ガチで悩んでいます。
お願いです。Skypeで連絡をください。
sunsunlight_heart
0697デフォルトの名無しさん
2007/12/15(土) 20:29:48セックルしようよ
0698デフォルトの名無しさん
2007/12/15(土) 20:33:11話はそれからだ。
0699デフォルトの名無しさん
2007/12/15(土) 20:39:37自分の都合だけで他人が気安く友達になってくれるものなのか?
0700デフォルトの名無しさん
2007/12/15(土) 20:41:430701デフォルトの名無しさん
2007/12/15(土) 20:42:13上から実行されるようなコンパイラの仕様にした、ってことでしょうか?
0702デフォルトの名無しさん
2007/12/15(土) 20:43:570703デフォルトの名無しさん
2007/12/15(土) 20:46:340704デフォルトの名無しさん
2007/12/15(土) 21:34:33おれはRubyが書けます。
でもRubyは実用的なソフトの範囲ではとても有用だけど、
アルゴリズムとかを駆使する速度重視のプログラミングでは役に立たないと思います
。
囲碁のソフトを作るにはやはりC++ですか?それともJavaですか?
オブジェクト指向じゃないと嫌です。
0705デフォルトの名無しさん
2007/12/15(土) 21:39:090706デフォルトの名無しさん
2007/12/15(土) 21:40:17縦書きのエディタがあれば右から実行されるのではないかな。
0707デフォルトの名無しさん
2007/12/15(土) 21:40:51ここはCのスレなので他所でやってください。
0708デフォルトの名無しさん
2007/12/15(土) 21:45:05なぜここに来たんだろう
0709デフォルトの名無しさん
2007/12/15(土) 21:57:57int argc, char *argv[]
の意味がわかりません。ググッてみましたが
わかりつくした人の解説のようで、オレの
ハートには届きません。
どなたかオレにわかるようにできる限り簡単に
説明してもらえませんでしょうか?voidとの
違いとか・・・。
0710デフォルトの名無しさん
2007/12/15(土) 22:01:120711デフォルトの名無しさん
2007/12/15(土) 22:02:15char *argv[] → コマンドライン引数を区切った文字列配列(実行ファイル名含む)
例:
hoge.exe /piyo -uma
argc == 3
argv == {"hoge.exe", "/piyo", "-uma"}
0712デフォルトの名無しさん
2007/12/15(土) 22:14:00お前のハートに届けてやるぜ!
俺の歌を聞けー!!!
レッツゴー!突ーき抜けようぜ
夢で見た夜明けへ〜
まだまだとおいけっどー
0713デフォルトの名無しさん
2007/12/15(土) 22:17:05Ruby厨のおれとしてはとても不思議
0714デフォルトの名無しさん
2007/12/15(土) 22:19:14手続き型言語⊃オブジェクト指向言語
0715デフォルトの名無しさん
2007/12/15(土) 22:26:28マルチパラダイムって言葉を知らないか。
0716デフォルトの名無しさん
2007/12/15(土) 22:32:58object.method
って記法出来るっけ?
0717デフォルトの名無しさん
2007/12/15(土) 22:37:01http://pc11.2ch.net/test/read.cgi/tech/1197090562/
0718デフォルトの名無しさん
2007/12/16(日) 00:13:44Dev-C++だと問題なくコンパイルできても
ボーランドでコンパするとint argc が使われていないと
エラーがでます。voidにすると正常に。
要するにDos面で分割コンパするときに
bcc32 ファイル名 ファイル名・・・
ってみたいな操作するときに必要?
0719デフォルトの名無しさん
2007/12/16(日) 00:21:25合コンでおk
argv を使うなら argc もチェックしたほうがいい
0720デフォルトの名無しさん
2007/12/16(日) 00:21:390721デフォルトの名無しさん
2007/12/16(日) 00:26:10すいません。エラーでなく、警告でした。
思い通りの動作をしても警告されるのは気分よくないです。
0722デフォルトの名無しさん
2007/12/16(日) 00:37:250723デフォルトの名無しさん
2007/12/16(日) 07:22:14struct tm t_tm;
strptime(str, "%Y-%j %H:%M:%S", &t_tm);
time_t t = mktime(&t_tm);
printf(ctime(&t));
とすると、月日が正しく設定されません。
150というのはthe day of the yearなんですが、
月日を与えることなく%jのみで正しくstruct tmを得るには、
どのようにしたら良いでしょうか。
環境 OS X 10.4 + GCC 4.0.1
0724723
2007/12/16(日) 07:52:00struct tm t_tm;
t_tm.tm_year = 2007 - 1900;
t_tm.tm_mon = 0;
t_tm.tm_mday = 150;
t_tm.tm_hour = 12;
t_tm.tm_min = 34;
t_tm.tm_sec = 56;
として、1月の150日目とすることで動きました。
0725デフォルトの名無しさん
2007/12/16(日) 08:39:07#define _XOPEN_SOURCE
int main()
{
char str[] = "2007-150 12:34:56";
struct tm t_tm;
setlocale(LC_TIME, "en_US.iso88591");
char* ret = (char*)strptime( str, "%Y-%j %H:%M:%S", &t_tm);
char buf[256];
strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", &t_tm);
puts(buf);
return 0;
}
2007-05-30 12:34:56
問題なく表示された
ちなみに環境はlinux上のgcc (GCC) 4.1.2 20070925 (Red Hat 4.1.2-33)
Cygwin上のgcc(3.4.4.3)でやると構造体に変な書き込みをして、おかしくなるね
tm構造体のtm_mdayが酷いことになってた、tm_monも何故か-2になるし
0726デフォルトの名無しさん
2007/12/16(日) 15:36:33「1ビット左にシフトすると、元の数の2倍の値になる」
らしいのですが、
10進数の10を、2進数にすると、1010
1010を左に1ビット知るとすると、0100
0100をまた10進数に直すと、4
で、全然2倍になってないですよね?どういうことでしょうか?
計算の仕方とか教えてください!お願いします。
0727デフォルトの名無しさん
2007/12/16(日) 15:38:11×知るとすると
○シフトすると
0728デフォルトの名無しさん
2007/12/16(日) 15:52:46ビットの数が全然足りない
たとえば、intなら4バイトだから、
00000000 00000000 00000000 00000000
これぐらい必要
00000000 00000000 00000000 00000001 ・・・ 1
00000000 00000000 00000000 00000010 ・・・ 2
00000000 00000000 00000000 00000100 ・・・ 4
00000000 00000000 00000000 00001000 ・・・ 8
00000000 00000000 00000000 00010000 ・・・ 16
4bitしか表現範囲を持たない型って聞いたこと無いけど、
表現範囲を超えるシフトをしたら、>>726がいってるとおりの事象が起こる
これをオーバーフローと
0729デフォルトの名無しさん
2007/12/16(日) 15:53:58だからシフトとすると5桁の10100 になってこれは20
0730デフォルトの名無しさん
2007/12/16(日) 15:55:58全てのビットに対して同様のことが起こるから任意の数で2倍になる
0731デフォルトの名無しさん
2007/12/16(日) 16:11:460732デフォルトの名無しさん
2007/12/16(日) 16:15:360733デフォルトの名無しさん
2007/12/16(日) 16:22:58>>729の言うとおり5桁にしてシフトしてから10進数にすると、確かに 2倍になってる。
で、
>>728
を見ると 2進数の桁が増えるたびに10進数での値は2倍になってますね。。
頭の0は電卓で打ち込むと消えるので、関係ないと思ってたのですが、
シフトするときの桁数に影響するんですね。
オーバーフローというのは、
10000000 00000000 00000000 00000000
のような数のときにシフトしたら、2倍にならないってことですね。
>>730
ありがとうございます。>>728の図のことですね。
0734デフォルトの名無しさん
2007/12/16(日) 16:25:29なるほど。
で、右シフトすると、10/1、16/1になるわけですね!(10進数で見た時に)
0735デフォルトの名無しさん
2007/12/16(日) 16:53:54char *str = "abcde";
は、メモリ上のどこかに実際に存在する"abcde"の値のあるアドレスを、
ポインタ型変数、*str に代入しているのだと説明がありました。
では、"abcde" がメモリ上のどこにもなかったらどうなるんでしょう?
このプログラムは常に動くとは限らないんでしょうか?
0736デフォルトの名無しさん
2007/12/16(日) 16:58:38コンパイルバグ
0737デフォルトの名無しさん
2007/12/16(日) 16:59:57算術シフトと論理シフトの違いも
2進数でマイナスを表すには2の補数を使う
これは値を反転させて1を加えたもの
0100・・・ 4
↓(反転)
1011
↓(1を加える)
1100・・・ -4
戻し方は、もう一度同じ操作を繰り返す。
本題、-4を右シフトして、1/2にしてみると・・・。(つまり-2)
1100・・・ -4
↓
0011・・・ 3
おかしいことになる。これは論理シフトといって、符号ビットを考慮しないシフトのため。
一番左のビットは符号ビットといって、0ならプラス、1ならマイナスを表す。今度は算術シフトをやってみる。
1100・・・ -4
↓(算術シフト 符号ビットを残しておく)
1110・・・ -2
-2がもとまる。こういう処理ができるのは符号付の型の場合。
unsigned intのような符号なしの場合、マイナスは表現できない。
なぜなら、一番左は符号ビットとして扱われないから。
0738デフォルトの名無しさん
2007/12/16(日) 17:10:35コンパイルバグというのは、コンパイルしようとしたら、エラーが出るってことでしょうか?
0739デフォルトの名無しさん
2007/12/16(日) 17:11:28基本的にそれはない。
"abcde"はリテラル文字といって、特殊な領域に確保されるようになっている。
ただ、リテラル文字の領域を破壊することは可能。
そのstrに対して、何らかの文字をstrcpyで上書きしてごらん。
この場合は、処理系によって動作がことなる。
ほとんどの場合、coreになるはず。
0740デフォルトの名無しさん
2007/12/16(日) 17:13:09コンパイラのバグって意味でしょ
リテラル文字の領域が確保されない、なんてことはない。
0741デフォルトの名無しさん
2007/12/16(日) 17:14:42プログラムの実行はmainに突入する前にストップするだろ。
0742デフォルトの名無しさん
2007/12/16(日) 17:22:21実メモリが不足していようが、
仮想メモリに展開されるから、ロードモジュールをメモリ展開するときに落ちるってことはあまりないと思うけど
あぁ、でもスワップ領域もお腹いっぱいだとありえるのかな
0743デフォルトの名無しさん
2007/12/16(日) 17:23:17ありがとうございます。リテラル文字についてちょっと勉強してみます。
0744デフォルトの名無しさん
2007/12/16(日) 17:34:46abcdeは文字列リテラルだ。
文字列リテラルは静的領域に確保される。
Windows、組み込み機器等例えどんな環境だとしても
書き換えが不可能な場所に確保される。
メモリ上に文字列リテラルがないとしたら
OSもしくはハードウェア上で障害が発生している。
"abcde"というデータが壊れている場合、その壊れたデータをchar型として扱う。
その結果、わけのわからない文字が画面に表示される等の現象が発生
"abcde"が存在する場所にアクセスできない場合、メモリアクセスエラーが発生。
暴走、もしくはOSが用意したエラーメッセージを出力
0745デフォルトの名無しさん
2007/12/16(日) 17:37:27実行段階で領域不足というのはありえない。
メモリ不足ならロード時にエラー終了。実行はされない。
0746デフォルトの名無しさん
2007/12/16(日) 17:41:160747デフォルトの名無しさん
2007/12/16(日) 17:42:12仮想メモリがない環境もいっぱいあるんだよ。
0748デフォルトの名無しさん
2007/12/16(日) 17:42:320749デフォルトの名無しさん
2007/12/16(日) 18:19:070750デフォルトの名無しさん
2007/12/16(日) 18:25:270751デフォルトの名無しさん
2007/12/16(日) 18:26:300752デフォルトの名無しさん
2007/12/16(日) 18:35:51OSと処理したい画像のフォーマットくらいは書けや
0753デフォルトの名無しさん
2007/12/16(日) 19:48:52このソースのままプログラムを実行すると
入力した文字が関数inputStr()によってきちんとmain の中のstr[]にコピーされます
しかし17-20行目を削除し、22-46の#if 0 #endif で囲まれた部分を有効にして走らせると
str[]の中身がおかしくなります
どうしたらよいでしょうか?ご享受頂きたいです
0754デフォルトの名無しさん
2007/12/16(日) 20:08:57menuselectの中、
>fgets(buf,2,stdin);
てやるなら
>char buf[1];
じゃなくてbuf[2]て宣言しろよ
それで隣の領域破壊しているかもしれない
0755デフォルトの名無しさん
2007/12/16(日) 20:49:23#include <process.h>
#include <math.h>
#include "glibw32.h"
void sen(int,int,int,int);
void swap(int *,int *);
void main(){
FILE *fp;
int mon,kousui,m,mm,tbl[12],max=0;
double pi=3.141592,ag,agplus;
if((fp=fopen("kousui.dat","r"))==NULL)
{
printf("file open error\n");
exit(1);
}
while(fscanf(fp,"%d %d",&mon,&kousui)!=EOF){
tbl[mon-1]=kousui; //該当月の降水量をテーブルに格納
if(tbl[mon-1]>max)max=tbl[mon-1]; //月間降水量の最大降水量をmaxへ
}
0756デフォルトの名無しさん
2007/12/16(日) 20:49:53for(m=0;m<12;m++){
tbl[m]=; //各月の降水量を最大月間降水量を100とした値に変換
// printf("%d\n",tbl[m]);
}
ginit(200,200,WHITE); //グラフィックの初期化
ag=-pi/2; //角度の補正(グラフの最初は90度から開始)
agplus=2*pi/12; //1か月分の角度を計算(360÷12をラジアン角で表現)
mm=11; //前月の初期化(1月の前月は12月。テーブルは0から始まるので12月は11に・・・)mm
for(m=0;m<12;m++){ //mは月
sen(); //枠線の描画
sen(); //グラフの描画
ag+=agplus;
mm=m;
}
gend();
0757デフォルトの名無しさん
2007/12/16(日) 20:50:42void sen(int sx,int sy,int ex,int ey){
a=(float(ey)-float(sy))/(float(ex)-float(sx));//一次方程式の傾き計算
b=sy-a*sx;//一次方程式の切片計算
for(x=sx;x<=ex;x++){
y=a*x+b;
// printf("%d %d\n",xv,y);
if(FLG==1)
pset(y,x);
else
pset(x,y,BLUE);
}
void swap(int *a,int *b){
int w;
w=*a;
*a=*b;
*b=w;
return;
}
レーダーチャート作ろうとしていますが分からないところがいくつかあります。
分かる方いらっしゃいますか?
0758デフォルトの名無しさん
2007/12/16(日) 21:03:40>Windows、組み込み機器等例えどんな環境だとしても
>書き換えが不可能な場所に確保される。
大嘘もいいとこだ。
Windowsですらコンパイラによるのに。
0759デフォルトの名無しさん
2007/12/16(日) 21:04:29例をあげてくれ
0760デフォルトの名無しさん
2007/12/16(日) 21:14:03>>759
下のコードはVC2005だとメモリアクセス違反で止まるけど、
BCC5.5だと標準出力に「best」が表示される。
#include <stdio.h>
#include <string.h>
int main()
{
char *p = "test";
p[0] = 'b';
puts(p);
return 0;
}
0761デフォルトの名無しさん
2007/12/16(日) 21:33:440762デフォルトの名無しさん
2007/12/16(日) 21:38:54人の話聞いてないんだからぁ
0764デフォルトの名無しさん
2007/12/16(日) 23:40:14>レーダーチャート作ろうとしていますが分からないところがいくつかあります。
>分かる方いらっしゃいますか?
そんなのエスパーしかいないよ。
まず、何がわからないか、書くんだ。
0765デフォルトの名無しさん
2007/12/17(月) 00:00:18文字列リテラルについて調べましたが、やはりよくわかりません。
"abcde" というデータは、プログラマが配列に記憶させてはじめて繋がった
文字としてメモリ上に記憶されるのではないのでしょうか?
「文字列リテラルは静的領域に確保される。書き換えが不可能な場所に確保される。」
というのは、プログラマが、"abcde"という文字列を打ち込んだ時に初めて確保される。
という意味とは違う・・・?
0766デフォルトの名無しさん
2007/12/17(月) 00:22:13> プログラマが、"abcde"という文字列を打ち込んだ時に初めて確保される。
違う。文字列リテラルとはプログラムがロードされたときに既に確保され、
プログラムが動作しているときには(多分)書き換えられないものだ
(厳密には書き換えても良いが、書き換えた場合、未定義になる)
プログラム上で変更することがある場合は文字列リテラルでは無く
文字列の配列を使うべきだ
また、配列を使う場合は予め最大サイズを確保する必要がある
0767デフォルトの名無しさん
2007/12/17(月) 00:28:340768デフォルトの名無しさん
2007/12/17(月) 00:34:32>「文字列リテラルは静的領域に確保される。書き換えが不可能な場所に確保される。」
ROM上に確保されるので書き換えらんない、と思っとけ。
組込みだと実際にそういうのもあるし。
0769デフォルトの名無しさん
2007/12/17(月) 00:41:00以下のような実装を多々みかけます。
しかし、俺の上の連中はそれは汚くて危険極まりない
コードだと言います。私にはどんな危険があるのか
不明なので誰か教えてくれませんか?
int func()
{
処理
if(err)
goto ERR;
ERR;
ポインタの解放等々
}
もしポインタの解放なんかを一ヶ所でまとめて行うなら
javaやC#のようなExceptionに相当する部分があっても
いいと思うのはやはり馬鹿の考えることなのでしょうか。
0770デフォルトの名無しさん
2007/12/17(月) 01:03:56それはいい発想だよ
現にGNUあたりのいくつかのプロダクトではそのようなソースを見かける
もしくは、try,catchをgotoを使ってマクロで実現するってのもあり。
Cにはいわゆるtry〜catch〜finalizeが無いから、そういう使い方をするし、
try,catchよりもオーバーヘッドが少ない
じゃあ何でダメなのかっていうと、gotoを乱用すると処理があっちこっちに飛んで、
可読性の悪いコードになるから。
gotoを扱いきれるなら話は別だけど、チームで仕事してたら、必ずしも理想どおりにはいかない。
gotoを変な風に使う人とか、gotoが多いとソースを正しく読解できない人が出てくるかもしれないからね。
0771デフォルトの名無しさん
2007/12/17(月) 01:09:25goto文有害論を盲信してるだけだから、気にするな。
特に危険が無いから実装も多い。
ただ、波風を立てずに会社に居たいなら従っておいたほうがいいだろうな。
従っておいても無害だし。
>javaやC#のようなExceptionに相当する部分があっても
>いいと思うのはやはり馬鹿の考えることなのでしょうか。
CにExceptionに相当する機能が無いから、
C++、Java、C#に実装されたわけで…
0772デフォルトの名無しさん
2007/12/17(月) 07:38:22あえて危険な例を挙げるならこんなの
int func()
{
int *p,*q
if((p=malloc(sizeof(int))) == NULL)
goto ERR;
if((q=malloc(sizeof(int))) == NULL)
goto ERR;
//処理
if(err)
goto ERR;
ERR;
free(p);
free(q);
return 0;
}
まあ気をつけてコーディングすれば簡単に防げるけど
0773デフォルトの名無しさん
2007/12/17(月) 07:58:02{
int *p,*q
if((p=malloc(sizeof(int))) == NULL)
goto PERR;
if((q=malloc(sizeof(int))) == NULL)
goto QERR;
//処理
if(err)
goto ERR;
ERR;
free(q);
QERR;
free(p);
PERR;
return 0;
}
0774デフォルトの名無しさん
2007/12/17(月) 08:05:21今ひとつ綺麗じゃないが、かといって他にうまいやり方も見つからないんだよな。
こういったエラー処理はいっつも悩む。
0775デフォルトの名無しさん
2007/12/17(月) 08:08:43int *p = NULL, *q = NULL;
とか
FILE *fp = NULL;
とかにしとくだろ
0776デフォルトの名無しさん
2007/12/17(月) 09:59:390777デフォルトの名無しさん
2007/12/17(月) 10:11:28#define SAFE_DELETE(p) { if(p) { delete (p); (p)=NULL; } }
みたいなマクロを使った方がまだましかも
0778デフォルトの名無しさん
2007/12/17(月) 11:10:27インデントが多段になってしまうのが欠点だけど・・・そんなの関係n(略
int func() {
int *p = malloc(sizeof(int));
if (p) {
int *q = malloc(sizeof(int));
if (q) {
// 処理
free(q);
}
free(p);
}
return 0;
}
0779デフォルトの名無しさん
2007/12/17(月) 11:11:180780デフォルトの名無しさん
2007/12/17(月) 12:42:08>>776にあるように、free(NULL)やdelete NULLは何もしないことって決められてたハズ。
なので if (p) のチェックは無くてもOKじゃね?
関数呼び出しが行われなくなる分、極わずかに早くなるかもしれんが…x86みたいに
分岐予測ペナルティがシャレにならん処理系だと、大人しく呼び出した方がいいかも。
0781デフォルトの名無しさん
2007/12/17(月) 13:17:310782デフォルトの名無しさん
2007/12/17(月) 15:06:33TCP/IPのソケット通信なんですが、
受信専用プロセス(A)と送信専用プロセス(B)を分けます。
Aでソケットを作り、相手から接続があれば、
それをプロセス間通信でBにソケットを渡します。
その方法はどうやったら良いでしょうか?
0783デフォルトの名無しさん
2007/12/17(月) 19:12:55色々検索して解らなかったので質問します。
何かキーを押すと進むみたいな関数って無いんでしょうか?
.exeをクリックしてコマンドプロンプトが開く時に
キーを押すまで窓を開いたままにするのが目的です。
自分と同じ質問してた所ではgetchar();を入れろと書かれてました。
書き方の例等教えてください。お願いします。
0784デフォルトの名無しさん
2007/12/17(月) 19:19:10sendmsg
0785デフォルトの名無しさん
2007/12/17(月) 19:55:17ふざけんな
やる気ないならやめろ
あるなら参考書なりサイトなりを一通り見ろ
0786デフォルトの名無しさん
2007/12/17(月) 20:07:48コンソールのプログラムは、普通コマンドプロンプトから実行する。
0787デフォルトの名無しさん
2007/12/17(月) 20:15:21#include <stdio.h>
int main(){
getchar()
return 0;
}
0788デフォルトの名無しさん
2007/12/17(月) 20:20:57書き方の例: getchar();
0789デフォルトの名無しさん
2007/12/17(月) 20:23:03Windows XP や Windows 2000 ならば、スタート→ファイル名を指定して実行、にて"cmd" を入力して OK ボタンをクリックします。
ここで起動するのが、コマンドプロンプト、あるいはコマンドインタープリタと呼ばれるプログラムです。
使用方法については色々調べてみてください。
>>785
わからへんときは、ほんましょうもないこともわからんのや、おまえさんもそんなことあらへんか?
0790デフォルトの名無しさん
2007/12/17(月) 20:26:230791デフォルトの名無しさん
2007/12/17(月) 20:44:170792デフォルトの名無しさん
2007/12/17(月) 20:50:27「ファイル名を指定して実行」から起動する方法を教える人が多いんだろ。
スタート→すべてのプログラム→アクセサリ→コマンドプロンプト
いつもこうやって起動してるんだが、少数派なのかな?
0793デフォルトの名無しさん
2007/12/17(月) 20:54:050794デフォルトの名無しさん
2007/12/17(月) 20:57:23面倒くささを自分のレスで体現してるじゃん
0795デフォルトの名無しさん
2007/12/17(月) 21:20:070796デフォルトの名無しさん
2007/12/17(月) 21:22:360797デフォルトの名無しさん
2007/12/17(月) 21:26:350798デフォルトの名無しさん
2007/12/17(月) 21:28:58ショートカットなかったりすると厄介だから
0799デフォルトの名無しさん
2007/12/17(月) 23:30:21亀レスだが、某3Dライブラリのサンプルからそのままもってきただけ
複数ラベルよりかは綺麗に書けるかな?ってくらいのノリだからペナルティとか気にしたらイクナイ
0800デフォルトの名無しさん
2007/12/18(火) 14:34:20プログラムの進行に応じて、データはそのままで配列の個数を再設定して使う方法はありますか?
int* nums;
nums=(int*)malloc(10);
上の定義ののち、
nums=(int*)malloc(20);
という処理をすると、元とは別の場所に領域を確保されてしまい、
元のデータは読めなくなってしまいます。
int型に限らず(doubleやcharやその他構造体でも)、プログラムの進行によって何件あるか不確定な、
途中で何件でも増加する可能性のあるデータを確保する変数を扱いたいのです。
課題で作れと言われてるのが、学校の全学生のデータを管理するプログラムで、
学生1名のデータ(氏名、身長、体重、成績などなど)を格納する構造体をつくり、それを全学生数分の配列で扱い、
学生情報の追加・削除の機能を持ち、ファイルからの読み出し/書き込みの機能も持つ・・・というもの。
読み込むファイルによって学生数が10人だったり1000人だったりする可能性がある上に、
「追加」の機能で学生数はいくらでも増やすことが可能。
ファイルを読み込んだ時点で、最初に動的確保して配列を定義、ここまではOKとして。
ファイルからもらった人数+α分の配列を作るようにしたとしても、
もしプログラム上でそれを超える人数が追加されたら、壊れてしまいます。
できれば1件追加するごとに配列を1件ずつ拡大のようにできればいいのですが。
何か手段無いですか?
長文すみません
0801デフォルトの名無しさん
2007/12/18(火) 14:35:19realloc
0802デフォルトの名無しさん
2007/12/18(火) 14:43:57>801の書いているようにrealloc()を使うのが素直なケースだが、malloc()とfree()だけでも同じことはできるぞ。
# つーか、realloc()の実態はmalloc()+memcpy()+free()みたいなもんだからな。
0804デフォルトの名無しさん
2007/12/18(火) 14:54:49数件、あるいは25〜50%くらい一気に広げたほうがいいかもな。
要素数が確定していない場合は構造体+リンクリストを使うのも定跡。
0805デフォルトの名無しさん
2007/12/18(火) 15:26:53で済むリスト構造を採用する方がスマートだね。
最近のPCじゃrealloc()のコストなんて誤差なんだろうけど。
0806デフォルトの名無しさん
2007/12/18(火) 15:35:44それと、初心者にCでリスト構造なんて虐め以外の何者でもないぞ。
0807超初心者
2007/12/18(火) 17:59:41足し算のプログラムを作り、数字以外が入力された時は【エラー】と
出力したいのですがさっぱり分かりません。どうすれば出来るか教えて
貰えると物凄く助かります!!
0808デフォルトの名無しさん
2007/12/18(火) 18:03:33エラーを表示しない足し算プログラムは作れるのかい?
それは宿題かい?
0809デフォルトの名無しさん
2007/12/18(火) 18:06:19宿題なら宿題スレへ、そうでないなら判るところまで作りこんだソースを貼れ。
0810デフォルトの名無しさん
2007/12/18(火) 18:10:07作りかけでも出来損ないでもいいから、試行錯誤したソース貼れよ。
0811超初心者
2007/12/18(火) 18:23:39なんか違う気がして
ちょっと恥ずかしかったので・・・。
#include <stdio.h>
main () {
int x;
int y;
printf("最初の数字を入力してください > ");
scanf("%d", &x);
printf("足したい数字を入力してください > ");
scanf("%d", &y);
printf("答え %d\n", x + y);
return 0;
}
よろしくお願いします。
0812デフォルトの名無しさん
2007/12/18(火) 18:25:45方針としては、scanf()では数字以外を入力することができない為「数字以外が入力された」という状況を作れない。
従って、一旦全て文字列として入力してから数字かどうかを判別することになる。
文字列として入力するにはfgets()、数字かどうかを判別にするにはsscanf()かstrtol()が使える。
0813デフォルトの名無しさん
2007/12/18(火) 18:28:16でもまあほかのやり方覚えておいたほうがいいな。
0814超初心者
2007/12/18(火) 18:29:300815デフォルトの名無しさん
2007/12/18(火) 18:34:14どうせバッファクリアにfgets使うし(fflushでもいいか?)
まずはfgets使ってみては?
0816超初心者
2007/12/18(火) 18:36:04頑張ってみます!!
0817デフォルトの名無しさん
2007/12/18(火) 18:36:550818デフォルトの名無しさん
2007/12/18(火) 18:37:390819デフォルトの名無しさん
2007/12/18(火) 18:42:30# 余計なお世話だったかしら?
0820デフォルトの名無しさん
2007/12/18(火) 19:01:47#include <ctype.h>
int isnum(char *buffer)
{
int i;
for (i = 0; buffer[i] != '\n' && buffer[i] != '\0'; i++)
{
if (isdigit(buffer[i]) == 0)
{
return 0;
}
}
return 1;
}
0821デフォルトの名無しさん
2007/12/18(火) 19:47:540822デフォルトの名無しさん
2007/12/18(火) 21:37:08これってシーケンシャルな値は期待できない?
0823デフォルトの名無しさん
2007/12/18(火) 21:40:50あるいは,freadの引数が、buffer, 1, 1, fpでは「無い」というオチか?
0824デフォルトの名無しさん
2007/12/18(火) 21:53:16vc2003使用、freadはその引数だし戻り値=1も確認した上で飛ぶんだよね
0825デフォルトの名無しさん
2007/12/18(火) 21:56:18テキストストリームに対してftellを呼び出した場合の戻り値は処理系定義
0826デフォルトの名無しさん
2007/12/18(火) 22:00:250827デフォルトの名無しさん
2007/12/18(火) 22:35:56普通に実行してちゃんと終わるが、2乗ごときでpow()を使うのは無駄。
もしかしたら、とんでもなく実数演算が遅くて止まって見えるのかも知れず。
0828デフォルトの名無しさん
2007/12/18(火) 22:38:54試しにfreadだけを繰り返し実行してみると途中で戻り値=0になり
見てみると丁度ftellの戻り値が連番から飛ぶポイントでした
freadの後にftellするとファイルの最後まで読めるのになぁ。。。
0829デフォルトの名無しさん
2007/12/18(火) 22:42:350830デフォルトの名無しさん
2007/12/18(火) 22:56:06>つーか、毎回拡張するコードを実直にブロックコピーで実現する実装なんていまどきあるの?
とりあえずぱっと見、FreeBSD の libc、VC8 の CRT、Cygwin の libc あたりはさすがに毎回ブロックコピーにはなってない。
どこまで頑張るかはそれぞれ違いそう。
0831デフォルトの名無しさん
2007/12/18(火) 23:06:32こんな感じ
do{
read_sz=fread(buf,1,1,fp);
if(read_sz==0)break
pos=ftell(fp);
if(抜ける条件)break
}while(1);
posには1,2,3,4,5,6....という風にシーケンシャルな値を期待してるけど実際には途中で
.....50,51,200,201...という風に返ってきてしまう
doの中でftellを実行しないと、丁度51,200と連番が飛ぶところでread_sz=0となる
ということです
0832デフォルトの名無しさん
2007/12/18(火) 23:21:130833デフォルトの名無しさん
2007/12/18(火) 23:30:13実行して結果だけで判断してるの?
0834デフォルトの名無しさん
2007/12/18(火) 23:50:42ありがとうー。そういう制限があるの知りませんでした。
そして、>>823さんのエスパーの意味が今分かりました。ありがとー。
>>833
デバッガは勿論使っていますが、説明なので簡素化しています。
具体的にはどうのような書き方になります?
0835デフォルトの名無しさん
2007/12/19(水) 00:19:37だから>>825だといってるじゃないか
0836デフォルトの名無しさん
2007/12/19(水) 00:30:170837デフォルトの名無しさん
2007/12/19(水) 00:48:530838デフォルトの名無しさん
2007/12/19(水) 18:40:52整数を全て加えた値を表示するプログラムを作りたいのですが↓のように書いたのですが
うまくいきません。どこが悪いか教えていただけないでしょうか。
#include <stdio.h>
int main(void)
{
int a,b,sum=0;
puts("二つの整数を入力してください。");
printf("整数1:"); scanf("%d",&a);
printf("整数2:"); scanf("%d",&b);
if(a>b){
do{
sum=sum+b;
b=b+1;
}while(b>=a);
}
printf("%d以上%d以下の全整数の和は%dです。\n",b,a,sum);
else{
do{
sum=sum+a;
a=a+1;
}while(a>=b);
}
printf("%d以上%d以下の全整数の和は%dです。\n",a,b,sum);
return(0);
}
0839デフォルトの名無しさん
2007/12/19(水) 18:45:36a>b(かa<b)になるように,aとbを入れ換えたほうが楽
0840デフォルトの名無しさん
2007/12/19(水) 18:50:10どのように「うまくいかない」のか書いたほうがいいと思うが、
・ a と b にちゃんと値が入っているか printf() などで確認
・計算のループ中に printf() などを入れて経過を確認
すると良いかもね。
0842デフォルトの名無しさん
2007/12/19(水) 18:53:31その結果を足し算で使っちゃってるa,bを使ってる
if文とwhile文の判定が全部逆
の2つだな
0843デフォルトの名無しさん
2007/12/19(水) 19:02:010845838
2007/12/19(水) 19:22:13本当にありがとうございました
0846デフォルトの名無しさん
2007/12/19(水) 19:24:15付けるか」をアドバイスしたいところてん。
0847デフォルトの名無しさん
2007/12/19(水) 20:00:36分割コンパイルをつかうと聞いたんだけど、
いくらかファイルにわけて分割コンパイルはしているが
段階的に実行できていない。
段階的に実行することを説明してる本もしくはサイトないですか?
0848デフォルトの名無しさん
2007/12/19(水) 20:07:09makeファイル
バッチファイルでもかまわないよ
cc -c a.c
cc -c b.c
cc -c c.c
cc -o a.o b.o c.o
ここ参照
http://www-analab.sys.es.osaka-u.ac.jp/~taji/lecture/comp02/comp02-5.pdf
0849デフォルトの名無しさん
2007/12/19(水) 20:08:34そのときの構造体の宣言は
struct kani{
char gazami[20];
char zuwai[20];
char zarigani[20];
};
のままじゃだめなんですか?
0850デフォルトの名無しさん
2007/12/19(水) 20:09:34で求めて表示するプログラムを作成したいのですがうまくいきません
#include <stdio.h>
#include <math.h>
int main() {
double a , b, c ,A ;
printf( "b = " );
scanf( "%lf" , & b );
printf( "c = " );
scanf( "%lf" , & c );
printf( "cosA = " );
scanf( "%lf" , & A);
a = b*b+c*c-2*b*c*cos(A);
printf( "a = %lf\n" , sqrt(a) );
自分なりに作ってコンパイルも通るのですが、おかしな数字になってしまいます。
間違っているところありましたらご指摘お願いします。
0851デフォルトの名無しさん
2007/12/19(水) 20:10:41・初期化後
・ループ中
・終了前
で出力させれば十分だろう。
でも、デバッグコードは可読性を損なう原因になり、コードが長くなるとバグの原因にもなりうる。
「書かなければバグは入らない」の大原則に従えば、デバッグコードも書かないほうがいい。
本当はデバッガの使い方を覚えるのが一番だな。
0852デフォルトの名無しさん
2007/12/19(水) 20:14:52角度とラジアンの変換していないんだろ
0853デフォルトの名無しさん
2007/12/19(水) 20:24:26struct kani{
char* gazami;
char* zuwai;
char* zarigani;
};
ってことかな。
0854849
2007/12/19(水) 20:40:14…その後main文内で参照するときには…わかんないです
struct kani{
char gazami[20];
char zuwai[20];
};
int main(void){
struct kani inu;
inu = (struct kani *)malloc(sizeof(struct kani));
:
こういうものだと思っていたんですが、全然動かなくて
0855デフォルトの名無しさん
2007/12/19(水) 20:43:570856デフォルトの名無しさん
2007/12/19(水) 20:44:20戻り値はポインタだぞ。
0857デフォルトの名無しさん
2007/12/19(水) 20:53:10×struct kani inu;
○struct kani *inu;
0858デフォルトの名無しさん
2007/12/19(水) 21:40:48のサンプルをコンパイルしようとしたところ
undefined reference to `ERR_load_crypto_strings'
undefined reference to `RSA_generate_key'
・・・
などと、エラーが出てしまいます。
どうすればコンパイルできるようになるのでしょうか?
0859デフォルトの名無しさん
2007/12/19(水) 21:44:440860デフォルトの名無しさん
2007/12/19(水) 21:52:18あなた自身の内に秘めた、無限の力が解き放たれたとき
マジレスすると、浮動小数点で表すことのできる値の上限を超えたとき。
だったかなw
0861847
2007/12/19(水) 21:54:12main関数と複数あるうちの1つずつ関数をコンパイルにかけるんですよね?
makefileとかはつかってますよ。
ただし関係ある関数をあつめて1つのファイルにして
複数のオブジェクトを作って実行はやってますけど。
0862デフォルトの名無しさん
2007/12/19(水) 22:02:233.0/0.0
0863デフォルトの名無しさん
2007/12/19(水) 22:09:06> 段階的にチェック
っていう意味が通じてない。
>>848
はがんばって解釈したようだが「そうではない」ってことなのかな?
(cc の -o ってそうだっけ?)
うまく伝えられないのなら、
1.自分の問題を、これ以上出来ないってほど単純化した環境を作り、
それを貼り付けるなり、貼り付けるには大きすぎる場合はどこかにアプする。
2.やりたいことを具体的に書く。
3.やったことと結果を具体的に書く。
あたりで伝えよ。
0864847
2007/12/19(水) 22:22:34段階的に実行していくんじゃないの?
0865デフォルトの名無しさん
2007/12/19(水) 22:27:37これも不思議な日本語だよな。
がんばって解釈すると >>853 になるよね。
配列をmallocでメモリ確保したい
→しかもそれは「構造体の配列」ってことだから、意訳して「構造体内の配列」
って感じで。
せめて、「配列を含む構造体をmallocでメモリ確保したい」なら意図が伝わる可能性がある。
質問者が真っ先に知るべきなのは、直面している問題よりもむしろ
ttp://www.hyuki.com/writing/techask.html
こういこと。
0866デフォルトの名無しさん
2007/12/19(水) 22:31:18>>848 を修正すると。
cc -c a.c
cc -c b.c
cc -c c.c
cc a.o b.o c.o
こんな感じだ。(実行ファイルは a.out な)
gccならccをgccに置き換えよ。clなら-cを/cに置き換えよ。
せめてコンパイラが何か教えてくれ。
加えて、こういうことではないなら、何がしかヒントをくれ。
0867847
2007/12/19(水) 22:35:38検査ファイル1があるとしてそれを取り入れ処理する関数
検査ファイル2があるとしてそれを取り入れ処理する関数
検査ファイル3があるとしてそれを取り入れ処理する関数
出力結果を出す関数
この5つが別々にファイルかかれてるとして
入力ファイルがあっているか、
1つめの検査ファイルの結果があっているか、
2つめ。。。そして最終的な結果があっているか。
っていう風にみていきたいんだけど。どういう風にすればいいのかなって。
0868デフォルトの名無しさん
2007/12/19(水) 22:36:450869デフォルトの名無しさん
2007/12/19(水) 22:37:340870847
2007/12/19(水) 22:46:16じゃなくて段階的に実行するときにどうやって分割コンパイルを使うのか
ですよ
0871デフォルトの名無しさん
2007/12/19(水) 22:49:45質問の意味が
1.足し算をする関数がある
int MyAdd(int a,int b) { return a+b; }
2.引き算をする関数がある
int MySub(int a,int b) { return a-b; }
3.これら各々の関数が正常に動作することを確認してから結合したい。
ってことならまず
1-1."1"を確認する。下記のMyAddの引数を変え、それっぽい動作するか確認。
#include <stdio.h>
int MyAdd(int a,int b) { return a+b; }
int main(void){ printf("%d\n",MyAdd(123,456)); return 0; }
1-2."2"を確認する。下記のMySubの引数を変え、それっぽい動作するか確認。
#include <stdio.h>
int MySub(int a,int b) { return a-b; }
int main(void){ printf("%d\n",MySub(123,456)); return 0; }
1-3. 結合して確認する
#include <stdio.h>
int MyAdd(int a,int b) { return a+b; }
int MySub(int a,int b) { return a-b; }
int main(void){ printf("%d\n",MyAdd(123,MySub(456,789))); return 0; }
こういことか?
0872847
2007/12/19(水) 22:51:170873デフォルトの名無しさん
2007/12/19(水) 22:59:59じゃまず。
1."MyAdd.c"を下記の内容で作成。
int MyAdd(int a,int b) { return a+b; }
2."MySub.c"を下記の内容で作成。
int MySub(int a,int b) { return a-b; }
1-1-0.MyAddテストソースを作る。"TestAdd.c"を下記内容で作成。
#include <stdio.h>
int MyAdd(int,int);
int main(void) { printf("%d\n",MyAdd(123,456)); return 0; }
1-1-1.分割コンパイルしたい場合は下記。(コンパイラはgccと仮定する)
gcc -c MyAdd.c
gcc -c TestAdd.c
gcc MyAdd.o TestAdd.o
実行ファイルはa.outもしくはa.exe。
一気にコンパイルリンクまでやってよければ下記だけでよい(gcc -c 何チャラは不要)。
gcc MyAdd.c TestAdd.c
1-2-0.MySubテストソースを作る。"TestSub.c"を下記内容で作成。
以下同文。
これで君の質問は終了でよいか?
0874デフォルトの名無しさん
2007/12/19(水) 23:08:35int add(int);
int main()
{ int sum;
sum = add(10);
printf("sum = %d\n", sum);
sum = add(20);
printf("sum = %d\n", sum);
sum = add(100);
printf("sum = %d\n", sum);
return 0;
}
int add(int x)
{ static int gokei = 0;
gokei += x;
return gokei; }
私はint gokei = 0;とあるので、読み込むたびにsumは0になって、
sum = 10,sum = 20,sum = 100と表示されると思うのですが、
参考書にはコンパイルして実行した結果sum = 10,sum = 30,sum = 130(改行省略)
と表示されると書いてありました。
staticにした変数は書き換えられなくなるのですか?
それとも、初期化できなくなる、という意味なのでしょうか?
0875デフォルトの名無しさん
2007/12/19(水) 23:11:34その参考書にはstaticの説明が書いてないのか?
0876デフォルトの名無しさん
2007/12/19(水) 23:12:410877デフォルトの名無しさん
2007/12/19(水) 23:12:46関数内で定義したstatic変数は、その関数からしか見えないだけで、そ
れ以外はグローバル変数と同じような挙動。だから、初期化 gokei = 0
というのはプログラム開始時にしか行われない。関数に入る度に gokei
= 0 されるのではない。
0878デフォルトの名無しさん
2007/12/19(水) 23:13:50int add(int x) { static int gokei = 0; gokei += x; return gokei; }
この場合のstaticは、ほぼ下記に等しい
int gokei = 0; /* グローバル変数 */
int add(int x) { gokei += x; return gokei; }
違いはadd関数以外からでもアクセスできるかどうかの違いだけ。
君がどう思うかどうかは関係ない。
0879デフォルトの名無しさん
2007/12/19(水) 23:14:410880デフォルトの名無しさん
2007/12/19(水) 23:23:11見づらくて仕方が無い
0881デフォルトの名無しさん
2007/12/19(水) 23:24:23kwsk
0882デフォルトの名無しさん
2007/12/19(水) 23:35:17OpenSSLのライブラリを読み込んでないんだろ。
0883デフォルトの名無しさん
2007/12/19(水) 23:49:24gcc -lssl
とライブラリを指定したらあっさりできました・・
インクルードファイルを指定するだけではダメだったんですね・・orz
ありがとうございました
0884デフォルトの名無しさん
2007/12/20(木) 00:05:47馬鹿なことは止めてくれとフロントにいって
0885デフォルトの名無しさん
2007/12/20(木) 00:13:5601 "CASILLAS" Iker Casillas Fernandez 1981/05/20 185cm/79kg
13 "CODINA" Jordi Codina Rodriguez 1982/04/27 188cm/79kg
25 "DUDEK" Jerzy Dudek 1973/03/23 187cm/81kg
DF(Defensas)
02 "M. SALGADO" Michel Salgado Fernandez 1975/10/22 174cm/75kg
03 "PEPE" Kleper Laveran Lima Ferreira "Pepe" 1983/02/26 187cm/81kg
04 "SERGIO RAMOS" Sergio Ramos Garcia 1986/03/30 183cm/73kg
05 "CANNAVARO" Fabio Cannavaro 1973/09/13 175cm/72kg
12 "MARCELO" Marcelo Vieira da Silva Junior 1988/05/12 174cm/73kg
15 "DRENTHE" Royston Drenthe 1987/04/08 172cm/78kg
16 "HEINZE" Gabriel Ivan Heinze 1978/04/19 178cm/72kg
21 "METZELDER" Christoph Metzelder 1980/11/05 193cm/84kg
22 "TORRES" Miguel Torres Gomez 1986/01/28 185cm/75kg
0886デフォルトの名無しさん
2007/12/20(木) 01:11:430887デフォルトの名無しさん
2007/12/20(木) 01:27:180888デフォルトの名無しさん
2007/12/20(木) 02:32:04お前はリファクタリングを全然理解していない
3章、4章、6章の一部、8章の一部、9章は
手続き型の言語でも有効なテクニックだぞ
0889デフォルトの名無しさん
2007/12/20(木) 07:19:370890デフォルトの名無しさん
2007/12/20(木) 07:42:190891デフォルトの名無しさん
2007/12/20(木) 07:53:11・環境
・目的
・疑問点
・ソース(一部抜粋でも可)
くらいは最低でも書いて欲しいところ。
0892800
2007/12/20(木) 08:04:24malloc,free またはreallocで配列を定義しなおすと、いちいち全データコピーが発生するようですな。
やってみましたが、無駄に工程数が増える感じで、しっくりこなかったです。
もっとも、学生数数百人分のデータ程度なら、どのみち処理は一瞬で済んだので、動作スピード的にストレスに感じることはなかったですが。
そこで、>>804-806の人が教えてくれた、「リンクリスト」「リスト構造」とやらを調べてみました。
おおむね、要素数が不確定な配列で、要素をシンプルに増減させるサンプルは作れました。
これって、増減の処理はリンクを書き換えるだけでいいとして、
目的の箱に読み下記したい場合、そこまでアクセスするのにいちいちスタートに設定した領域から、
for文などで必要回数分回して辿らないと探せないような感じですが、この処理は無駄ではないですか?
普通に配列で取り、各要素に読み書きするのと比べて、アクセスピード的にどのぐらいのデメリットになりますか?
前者(malloc-freeまたはrealloc)を使うのと、後者(リスト構造)を使うのとどちらを選択すればいいか悩むところです。
要素の増減: 前者<<後者
要素へのアクセス: 前者>>後者
になりそうな想像ですが、プログラマーのみなさんはどちらを主に使いますか?
0893デフォルトの名無しさん
2007/12/20(木) 08:12:370894デフォルトの名無しさん
2007/12/20(木) 08:27:040895デフォルトの名無しさん
2007/12/20(木) 09:17:10途中の要素を削除したり途中に追加したりするには不向きだ。
線形リストは線形探索には向くが、2分探索なんかはできない。
そのかわり、要素の追加/削除が簡単だ。
そんな風に使い分ける。
0896デフォルトの名無しさん
2007/12/20(木) 09:45:070897デフォルトの名無しさん
2007/12/20(木) 09:52:590898デフォルトの名無しさん
2007/12/20(木) 10:21:04Gakuseimeibo *x; を10確保したら、初めのアドレスをpに追加する あとはリストにする
すると10万人登録でき、アクセス時間は最大で10個たどるだけ
0899デフォルトの名無しさん
2007/12/20(木) 11:46:12要素の増減が頻繁ならリスト
0900デフォルトの名無しさん
2007/12/20(木) 12:39:20どんなアルゴリズム・データ構造も長所短所がある。
何をしたいか、どんな機能が必要かによって実装を選択するのですよ。
適切な実装を選択するのも、プログラマーの能力です。
0901デフォルトの名無しさん
2007/12/20(木) 12:52:07{
item_t *items;
size_t items_count;
size_t max_items_count;
size_t delta;
}
int container_expand(struct *container)
{
if(container->items_count < container->max_items_count) return 1;
return container_resize(container, container->max_items_count + container->delta);
}
とかやっとけばOK
リンクリストはデータがメモリ上に散らばってキャッシュミスが多くなる傾向にあるから
Cの用途を考えるとそうむやみに使うもんでもない。
0902849
2007/12/20(木) 13:24:04どうもありがとう。
0903874
2007/12/20(木) 14:43:19>>877、>>878ありがとうございました。
>>880、すみません、次からは気をつけます。
0904デフォルトの名無しさん
2007/12/20(木) 14:50:21あれマジやめて欲しいよね。
コードサイズは増えるしなによりfreeする際に
HDDにスワップアウトしていた領域をまたガリガリアクセスするからもう最悪。
gotoどころじゃない害悪ありまくりの糞作法だよ。
0905デフォルトの名無しさん
2007/12/20(木) 15:05:260906デフォルトの名無しさん
2007/12/20(木) 15:17:54プログラム終了まで使うmalloc()はfree()が不要。
それだけのことだろ。
0907デフォルトの名無しさん
2007/12/20(木) 15:18:050908デフォルトの名無しさん
2007/12/20(木) 15:19:050909デフォルトの名無しさん
2007/12/20(木) 15:19:54勝手にfreeしてくれる、程度の認識なんだけども。
0910デフォルトの名無しさん
2007/12/20(木) 15:20:510911デフォルトの名無しさん
2007/12/20(木) 15:22:09>HDDにスワップアウトしていた領域をまたガリガリアクセスするからもう最悪。
じゃあこれって明示的にfreeしなくても起こるんじゃないの?
0912デフォルトの名無しさん
2007/12/20(木) 15:22:490913デフォルトの名無しさん
2007/12/20(木) 15:23:590914デフォルトの名無しさん
2007/12/20(木) 15:24:110915デフォルトの名無しさん
2007/12/20(木) 15:26:110916デフォルトの名無しさん
2007/12/20(木) 15:26:440917デフォルトの名無しさん
2007/12/20(木) 15:27:030918デフォルトの名無しさん
2007/12/20(木) 15:51:47killしちゃえば綺麗に解放される。
ただし重くなる諸刃の剣
0919デフォルトの名無しさん
2007/12/20(木) 16:10:03「Program Files」や、「Documents And Settings」フォルダを指定することってできますか?
ロングファイルネームのディレクトリ名や日本語ディレクトリ名は大丈夫でしたが、
あいだにスペースが入ったフォルダだけは読み込めないようで・・・
0920デフォルトの名無しさん
2007/12/20(木) 16:22:29opendir()っていうUNIXっぽい関数が出てくるのに、「Program Files」
とかWindowsっぽい名前が出てくるのが怪しげ。ちゃんと環境を書くべし。
0921デフォルトの名無しさん
2007/12/20(木) 16:30:060922デフォルトの名無しさん
2007/12/20(木) 17:27:28ダブルクォートでくくればOK。
0923デフォルトの名無しさん
2007/12/20(木) 18:32:51以下のソースを作っているのですが、構造体のメンバ?のところでエラーがでてしまいます。
どうも構造体のメンバー変数の型が間違っているらしいのですが…改善案を教えていただけますか?
ttp://www.uploda.net/cgi/uploader4/index.php?dlpas_id=0000023780.c
DLパスは1111です
0924デフォルトの名無しさん
2007/12/20(木) 19:09:23実行時エラーなのかコンパイルエラーなのか、エラーメッセージは何か、くらい書いてくれ。
LISTなのかPARENTなのか、ごっちゃになってるぞ。
0925デフォルトの名無しさん
2007/12/20(木) 19:12:53PARENT のメンバーのcfirst、clastはstruct LIST *なんじゃないの?
あー、、struct XX は typedef したほうがすっきりするぞ。
あとnextとかprevもへんだろ
0926デフォルトの名無しさん
2007/12/20(木) 19:59:29int siguma(int a,int d,int n);
int syokou, kousa, retu, sum;
int main()
{
printf("初項を入力してください---");
scanf("%d", &syokou);
printf("交差を入力してください---");
scanf("%d", &kousa);
printf("何列目までの和を求めますか?---");
scanf("%d", &retu);
printf("列目\n");
if (retu >= 0)
sum = siguma(syokou, kousa, retu);
printf("合計は%dです\n", sum);
return 0;
}
int siguma(int a,int d,int n)
{
if (n <= 0)
return 0;
else
return a + (n - 1)d + siguma(n - 1);
}
等差数列のn項までの和を表すプログラムを作ろうとしているのですが、
コンパイルすると、「23行目(elseの下の行)に ; がない」と表示されて
コンパイルできません。何がいけないのでしょうか?ヒントをください。
コンパイラはBCC5.5でBCC developerも使ってます。
0927デフォルトの名無しさん
2007/12/20(木) 20:01:020928デフォルトの名無しさん
2007/12/20(木) 20:10:12今度は「23:呼び出し時のパラメータが足りない」と出ました…
0929デフォルトの名無しさん
2007/12/20(木) 20:15:250930デフォルトの名無しさん
2007/12/20(木) 20:16:060931デフォルトの名無しさん
2007/12/20(木) 20:19:21= na + d { 1+2+3+・・・+(n-1)}
=na + dn(n-1)/2
だろう
0933デフォルトの名無しさん
2007/12/20(木) 20:33:520934デフォルトの名無しさん
2007/12/20(木) 20:35:060935デフォルトの名無しさん
2007/12/20(木) 20:53:140936デフォルトの名無しさん
2007/12/20(木) 20:56:302.979900 10.197000
3.999600 10.494990
5.049099 10.894950
6.138594 11.399860
6.278580 12.013719
8.479952 12.741577
9.754110 13.589572
11.113067 14.564983
11.569565 15.676290
こんな感じの表示をこういう風に整えたいんですかどうすればできますか?
2.980000 8.999000
2.979900 10.197000
3.999600 10.494990
5.049099 10.894950
6.138594 11.399860
6.278580 12.013719
8.479952 12.741577
9.754110 13.589572
11.113067 14.564983
11.569565 15.676290
各行はfor文の1回のループごとに出力されます
0937デフォルトの名無しさん
2007/12/20(木) 21:04:480938デフォルトの名無しさん
2007/12/20(木) 21:05:060939デフォルトの名無しさん
2007/12/20(木) 22:11:50printf("%-10d %-10d", a, b);
-は左揃え、10は桁数
あとは分かるだろ
っつか、printfぐらいぐぐれよw
0940デフォルトの名無しさん
2007/12/20(木) 22:13:27%-12.8dぐらいがいいかな
0941デフォルトの名無しさん
2007/12/20(木) 22:22:340942デフォルトの名無しさん
2007/12/20(木) 22:24:55しかも\nもないwww
0943デフォルトの名無しさん
2007/12/20(木) 22:51:46fopen/fcloseをラップして開いていくファイル数をすべて管理してプログラム終了時点にチェックする
fcloseしたFILE *がどうなってるかって処理系依存?
nullでも代入しといてnullになっていないFILE *が閉じていないとかできるかと思ったけどだめっぽいな
0944デフォルトの名無しさん
2007/12/20(木) 23:29:22break文が何故かうまくいきません。
下のプログラムのbreakの使い方間違ってますか?
キーボードからの読み込みを何かの条件でbreakしたいんですが…
教えてください
char a[100],w;
char *cpt;
int i;
cpt=a;
printf("please input strings:");
for(i=0;i<100;i++){
scanf("%c",&cpt[i]);
if(cpt[i]==w)break;
}
for(i=0;i<100;i++){
if(cpt[i]==' ')for(i=i+1;i<100;i++){printf("%c",cpt[i]);
}
}
0945デフォルトの名無しさん
2007/12/20(木) 23:34:370946デフォルトの名無しさん
2007/12/20(木) 23:37:51scanfをforで回しても、おそらくおぬしの意図した動作はしないぞ。
あと、出力処理の周辺が意味不明。
for文が2個あることも、ifがあることもワケワカメ
0947デフォルトの名無しさん
2007/12/20(木) 23:52:42レスありがとう
初期化しても駄目なんです…
わしが意図してる動作はどうすれば可能なのですヵ?
出力に関しては空白があったらその後の文字を表示させるというものです。
何とかbreakできればうまくいくと思うんです。
0948デフォルトの名無しさん
2007/12/21(金) 00:00:30その、wを初期化した部分を晒せ。
0949デフォルトの名無しさん
2007/12/21(金) 00:09:46そもそも何でbreakしたいんだ・・・
空白を含めすべて文字列を読み込むんで、出力のとき空白までを無視すればいいじゃないか
0950デフォルトの名無しさん
2007/12/21(金) 00:35:38w=0;
こんな感じです。
>空白を含めすべて文字列を読み込むんで、出力のとき空白までを無視すればいいじゃないか
それができたならこんな苦労してないですよ…
どうやって空白までを無視できるんですか??
0951デフォルトの名無しさん
2007/12/21(金) 00:39:010952デフォルトの名無しさん
2007/12/21(金) 00:43:18なら
forループ内にifいれて
strcmpで比較して一致の場合にbreakでループぬけりゃいいんじゃね?
0953デフォルトの名無しさん
2007/12/21(金) 00:53:00isgraph、strcmpかぁ
頑張ってみますわ
0954デフォルトの名無しさん
2007/12/21(金) 01:05:21if( strcmp(str,"end") == 0 ) break;
endと入力したら一致でループ脱出
0955デフォルトの名無しさん
2007/12/21(金) 01:17:53ありがとう
う〜ん、何故か文字化けが発生してまう
0956デフォルトの名無しさん
2007/12/21(金) 01:37:35そりゃどう引っ繰り返したってbreakしないわけだ。
その理由が判らないなら、そんなカスみたいなコードは捨てて入門書をきちんと読め。
0957800,892
2007/12/21(金) 01:46:03ありがとうございます。
用途によって使い分ければ良いということですね。
>>899
工夫してみます。
>>901
>Cの用途を考えるとそうむやみに使うもんでもない。
Cの用途とは?
OSやアプリケーション、組み込みに至るまでソフトウェア開発で広く使われている言語という認識でしたが、
リスト構造が不向きな用途とはどのようなものか、
詳しく教えていただけるとさいわいです。
0958デフォルトの名無しさん
2007/12/21(金) 01:54:06オワタの教える簡単C言語
とか執筆しようかな
0959デフォルトの名無しさん
2007/12/21(金) 02:10:57char a[100];
char w='0';
char *cpt;
int i;
cpt=a;
int chk=0; /*空白を探すときのチェックフラグ*/
printf("please input strings:");
for(i=0;i<100;i++){
scanf("%c",&cpt[i]);
if(cpt[i]==w)break;
}
for(i=0;i<100;i++){
if(chk==1)printf("%c",cpt[i]; /*空白を通過していれば、次の行にてチェックフラグが1になっているので表示*/
if(cpt[i]==' ') chk=1; /*空白を見つけた時点でチェックフラグを1に。*/
}
0960デフォルトの名無しさん
2007/12/21(金) 02:31:09あんたも入門者?
w='0'って、何考えてるの?
0961デフォルトの名無しさん
2007/12/21(金) 02:36:04char a[100];
fgets(a, sizeof(a), stdin);
printf("%s", strchr(a, ' '));
ってことじゃないのかね。
0962デフォルトの名無しさん
2007/12/21(金) 06:51:14>リスト構造が不向きな用途とはどのようなものか、
たとえば2分探索できるかどうか、考えてみなよ。
0963デフォルトの名無しさん
2007/12/21(金) 07:54:49↓とか簡単なサンプルも載ってるので、面倒がらずに最後まで目を通すといい。
http://www9.plala.or.jp/sgwr-t/lib/libtop.html
ここも全てのライブラリを網羅してるわけではないが、参考にはなるだろう。
初心者ほど用意されているものを自分で作って、うまく動かなくて苦労してる人が多い。
動作を理解したり、拡張する目的ならそれもいいけどさ。
0964デフォルトの名無しさん
2007/12/21(金) 08:59:26struct ABC stData[] = {・・・};
int num = sizeof(stData) / sizeof(stData[0]);
int num = sizeof(stData) / sizeof(struct ABC);
構造体の要素数を知りたい時、どちらの方法が常套手段なんでしょうか?
一番知りたいのは・・・↓
sizeof(stData[0])とsizeof(struct ABC)は等しいという事は、保証されていますか?
0965デフォルトの名無しさん
2007/12/21(金) 09:16:57sizeof演算子の結果はオペランドの型で決まるので、どちらでも同じ。
どちらが常套手段、と言うことはないだろう。好みの問題。
ちなみに規格票には
sizeof array / sizeof array[0]
という例が載ってた。
0966デフォルトの名無しさん
2007/12/21(金) 09:18:09何かトリックでもない限り、問題ない。
前者はstDataの型が変わっても使えるメリットがある。
0967964
2007/12/21(金) 09:27:33どちらかは、構造体の境界をパティングしたサイズで、
一方はパティングしていないサイズが出るのかと、
変な妄想してました。
0968デフォルトの名無しさん
2007/12/21(金) 09:41:550969デフォルトの名無しさん
2007/12/21(金) 13:01:55まじで卒業できないよう><
0970デフォルトの名無しさん
2007/12/21(金) 13:02:48中退でおk
もしくは転科汁
0971デフォルトの名無しさん
2007/12/21(金) 13:46:47ぱそこんのコンセントおぬけばしゅーりょーするとおもいますっ(>_<)
0972デフォルトの名無しさん
2007/12/21(金) 14:16:04俺はプログラムとかよくわからないけど自分じゃけっこうエロイ
と思ってるから教えてあげるよ
while();
の()のなかが偽になったら終了するらしい
つまり、0になったら終了する
なんかしらないけどカッコの中の式が正しいと1で正しくないと0になるらしい
例
x=1のとき
真(x=1)
偽(x=4)
0973デフォルトの名無しさん
2007/12/21(金) 14:17:45969だった
0974デフォルトの名無しさん
2007/12/21(金) 14:20:370975デフォルトの名無しさん
2007/12/21(金) 14:34:24それは何かのギャグか?
0976デフォルトの名無しさん
2007/12/21(金) 20:12:56C言語を動かすためにサイトを見てまわったんですが
そこで『Borland C++ Compiler』をインストールしてどう使うかのサイトを参考にしたんですけど
コンパイラはできたんですけど、実行ファイルをクリックしても画面が一瞬出るだけで
すぐに消えてしまうんです。何か解決方法はありますでしょうか?
ちなみにOSはVistaです。
0977デフォルトの名無しさん
2007/12/21(金) 20:15:55プロンプトで実行
0978デフォルトの名無しさん
2007/12/21(金) 20:23:190979デフォルトの名無しさん
2007/12/21(金) 20:29:180980デフォルトの名無しさん
2007/12/21(金) 23:44:40早速入門サイトに乗っていたコード(Hello worldの表示)を打ち込み、コンパイルしようと思ったのですがやり方が分からなくてかれこれ2時間ほど固まっています
「ビルド」というのはどこをどうすれば出来る処理なのでしょうか
0981デフォルトの名無しさん
2007/12/21(金) 23:47:532005だとメニューにビルドがあるけど、2008だと違うのだろうか。
0982デフォルトの名無しさん
2007/12/21(金) 23:50:40VCの仕様変更がされてなかったら、F7でビルド、Ctrl + F7でコンパイル。
0983デフォルトの名無しさん
2007/12/21(金) 23:52:080984923
2007/12/22(土) 06:03:05実行時エラーと戦ってるので近いうちにまたくることになりそうです(;´д⊂)
0985質問
2007/12/22(土) 10:38:52名前:山田 太郎
カナ:ヤマダ タロウ
上記のように、名前欄を入力した場合、カナ入力欄に自動で入力させる
方法を調べております。
どなたか、ご教授宜しくお願いします。
0986デフォルトの名無しさん
2007/12/22(土) 10:53:27IMM32でぐぐれ
0987質問
2007/12/22(土) 10:58:59>>986
C言語で作れる方ご教示願います。
名前:山田 太郎
カナ:ヤマダ タロウ
上記のように、名前欄を入力した場合、カナ入力欄に自動で入力させる
方法を調べております。
どなたか、ご教示宜しくお願いします。
0988デフォルトの名無しさん
2007/12/22(土) 11:01:040989デフォルトの名無しさん
2007/12/22(土) 11:22:06山田 ヤマダ
佐藤 サトウ
太郎 タロウ
花子 ハナコ
って辞書もっとけばいいじゃん。
何も難しいことはない。
0990質問
2007/12/22(土) 11:33:56すいません。
IMM32は、候補を出す機能のことですか?
名前:入力時、入力のタイミングで同時に入力できる方法もここにありますか?
例
名前:山
カナ:ヤマ
すいませんが、ご教示宜しくお願い致します。
0991質問
2007/12/22(土) 11:37:44ご回答有難うございます。
辞書についても考えましたが、入力した、キー反映型での
カナ入力方法でないと、何通りもある、名前から一発表示できないと
考え質問させて頂いております。
0992デフォルトの名無しさん
2007/12/22(土) 11:44:392つにファイルわけて分かりやすくするの?
サーバとかワケわからないんだけど
0993デフォルトの名無しさん
2007/12/22(土) 11:44:400994デフォルトの名無しさん
2007/12/22(土) 11:47:38OS書けよボケ
Windowsならimm32ってヒントが出てるんだから、
更に質問する前に自分でちょっとは調べろよ。
0995デフォルトの名無しさん
2007/12/22(土) 11:47:52キミの部屋にあるコンセントと、それに繋がっている電気機器を考えるんだ。
0996デフォルトの名無しさん
2007/12/22(土) 11:51:40http://www.google.co.jp/
0997デフォルトの名無しさん
2007/12/22(土) 11:54:550998デフォルトの名無しさん
2007/12/22(土) 11:56:060999デフォルトの名無しさん
2007/12/22(土) 11:59:18#define bool
#endif
見たいな感じで typedef int bool; が定義されてたら、宣言しない見たいなのは無理でしょうか?
1000質問
2007/12/22(土) 11:59:58自社ソフトにて、顧客入力箇所があり、
名前:とカナ:で入力箇所が異なるセル内で、同時入力ができれば
と思い、質問させて頂いております。
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。