C言語なら俺に聞け(入門篇) Part 24
レス数が1000を超えています。これ以上書き込みはできません。
0001('A`)
2008/01/23(水) 19:12:56・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
前スレ
C言語なら俺に聞け(入門篇) Part 23
http://pc11.2ch.net/test/read.cgi/tech/1198295362/
教えて欲しいのではなく丸投げしたいならこちらへ
C/C++の宿題を片付けます 103代目
http://pc11.2ch.net/test/read.cgi/tech/1200318925/
0002デフォルトの名無しさん
2008/01/23(水) 19:16:03Part 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/
0003デフォルトの名無しさん
2008/01/23(水) 19:16:24Part 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/
Part 21 ttp://pc11.2ch.net/test/read.cgi/tech/1194384258/
Part 22 ttp://pc11.2ch.net/test/read.cgi/tech/1196489491/
0004デフォルトの名無しさん
2008/01/23(水) 19:18:180005デフォルトの名無しさん
2008/01/23(水) 20:23:31puts("1乙");
}
0006デフォルトの名無しさん
2008/01/23(水) 21:03:28scanf("%c",&command);
switch(command){
{case'a'〜'c'}
case'd':
{exit(0);}←??
default{}
}}}
a〜cはプロトタイプ宣言した関数の呼び出しです。
dのときだけreturn 0;に飛ばしてループを終了させたいんですけどbreak使うんですかね?
このexit(0)を使うやり方だとどうもループさせた時に入力エラーが一回余分に出てしまいます;
0007デフォルトの名無しさん
2008/01/23(水) 21:05:380008デフォルトの名無しさん
2008/01/23(水) 21:17:48default{…;}
}(1)}(2)}
(1)だと繰り返さず終わってしまうので(2)の方を考えてます。
0009デフォルトの名無しさん
2008/01/23(水) 21:23:55直接 return 0; したらだめなのか?
0010デフォルトの名無しさん
2008/01/23(水) 21:30:30何をしたいのか整理してくれないか?
ついでに、擬似コードをやめてC言語で書いてくれ
0011デフォルトの名無しさん
2008/01/23(水) 21:41:06あと一番上のscanf(%c,command)の%cを%xに、
case(a~d)を1~4に変えることで正常に作動させることができました;
0012デフォルトの名無しさん
2008/01/23(水) 21:43:20case'a'〜'c'}
こんなコードもコンパイルしてくれんの?
0013デフォルトの名無しさん
2008/01/23(水) 21:44:080014デフォルトの名無しさん
2008/01/23(水) 21:44:280015デフォルトの名無しさん
2008/01/23(水) 21:53:271~4 はコンパイルエラー。
0016デフォルトの名無しさん
2008/01/23(水) 21:55:37優秀なコンパイラたんだと警告だす
0017デフォルトの名無しさん
2008/01/23(水) 21:57:34while(1) のみ定型句と見なしてエラー出さないくらいしてくれ。
0018デフォルトの名無しさん
2008/01/23(水) 21:59:490019デフォルトの名無しさん
2008/01/23(水) 22:08:10while(flg){
scanf("%c",&command);
switch(command){
case 'a':
case 'b':
case 'c':
break;
case 'd':
flg = 0;
break;
default:
}
}
だせぇ・・・
while(command!='d')やらwhile(command)も考えたがダサい。
なんか上手いやり方ないか?
0020デフォルトの名無しさん
2008/01/23(水) 22:09:390021デフォルトの名無しさん
2008/01/23(水) 22:12:07scanf("%f", &f);
printf("%f",f);
で、実行して、fに100.1とか入力すると、
100.09998とか表示されてしまうんですが、何故なのでしょうか?
0022デフォルトの名無しさん
2008/01/23(水) 22:12:360023デフォルトの名無しさん
2008/01/23(水) 22:14:35直す方法は何かなっいですか?
0024デフォルトの名無しさん
2008/01/23(水) 22:15:37それもいやなら固定小数点でググれ。
0025デフォルトの名無しさん
2008/01/23(水) 22:16:100026デフォルトの名無しさん
2008/01/23(水) 22:16:250027デフォルトの名無しさん
2008/01/23(水) 22:17:07100.1 に関しては。
0028デフォルトの名無しさん
2008/01/23(水) 22:18:230029デフォルトの名無しさん
2008/01/23(水) 22:19:580030デフォルトの名無しさん
2008/01/23(水) 22:22:110031デフォルトの名無しさん
2008/01/23(水) 22:30:58誤差はしょうがないということでおkですね。
0032デフォルトの名無しさん
2008/01/23(水) 22:33:550033デフォルトの名無しさん
2008/01/23(水) 22:37:39#include <stdio.h>
int main(void)
{
static char *month[] = {"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"};
int i;
char *p;
for(i = 0; i < sizeof(month)/sizeof(month[0]); i++){
for(p = month[i]; *p != '\0'; p++)
if(*p == 'r')
break;
if(*p != '\0')
puts(month[i]);}
return 0;
}
これを小文字のrだけじゃなく大文字のRも大丈夫なようにするにはどうすればいいのでしょうか?
0034デフォルトの名無しさん
2008/01/23(水) 22:38:440035デフォルトの名無しさん
2008/01/23(水) 22:39:090036デフォルトの名無しさん
2008/01/23(水) 22:39:38if((*p == 'r') || (*p == 'R'))
tolower()
0037デフォルトの名無しさん
2008/01/23(水) 22:39:410038デフォルトの名無しさん
2008/01/23(水) 22:43:00どうもありがとうございました。
0039デフォルトの名無しさん
2008/01/23(水) 23:28:020040デフォルトの名無しさん
2008/01/24(木) 06:17:38{if (meiro[p][q]!=1)
{int dir;
meiro[p][q]=3;
dir = rand()%4+1;
if (dir==1&&meiro[p+2][q]!=3)
{meiro[p+1][q]=3;
wall(p+2,q);}
if (dir==2&&meiro[p-2][q]!=3)
{meiro[p-1][q]=3;
wall(p-2,q);}
if (dir==3&&meiro[p][q+2]!=3)
{meiro[p][q+1]=3;
wall(p,q+2);}
if (dir==4&&meiro[p][q-2]!=3)
{meiro[p][q-1]=3;
wall(p,q-2);
}}}
p,qはmeiro[p][q]に対応していて、meiro[偶数][偶数]の点です。
迷路を自動生成するプログラム作ってます。
色々調べて壁伸ばし法で作ることにして、wall関数なるものを自作しました。
0:道 1:壁 3:作りかけの壁
一応、迷路っぽいものはできるのですが、なんというかすかすかのものができてしまいます。
0041デフォルトの名無しさん
2008/01/24(木) 10:09:400042デフォルトの名無しさん
2008/01/24(木) 18:13:59C言語っつーよりアルゴリズムの問題だと思うけど、
どのみちそこだけ出されてもなんとも言えない
wallをどういう風に呼んでるかとか、
どのタイミングと条件でmeiro[x][y]を1にセットするのかとか
わからないと
0043デフォルトの名無しさん
2008/01/24(木) 20:39:200044デフォルトの名無しさん
2008/01/24(木) 20:45:25伸ばす方向に壁ができてたらそれで終わりにしないで、空いている方向を選ぶようにしてみたら?
0045デフォルトの七資
2008/01/24(木) 21:09:14for(j=0;j<=3;j++){
for(i=j+1;i<=4;i++){
if(a[j]<a[i]){
H=a[i];
a[i]=a[j];
a[j]=H;
}
}
}
この
H=a[i];
a[i]=a[j];
a[j]=H;
はどういう意味ですか?
0046デフォルトの名無しさん
2008/01/24(木) 21:13:560047デフォルトの名無しさん
2008/01/24(木) 21:14:31スワップ
aのi番目とj番目の要素を入れ替えてる
0048デフォルトの名無しさん
2008/01/24(木) 21:14:58a[i]とa[j]の値を入れ替えている。
0049デフォルトの七資
2008/01/24(木) 21:18:41左から大きい順になるんですかね??
0050デフォルトの名無しさん
2008/01/24(木) 21:19:130052デフォルトの七資
2008/01/24(木) 21:21:230053デフォルトの名無しさん
2008/01/24(木) 21:26:450054デフォルトの名無しさん
2008/01/24(木) 21:30:24for(i=j+1;i<=4;i++){
if(a[j]<a[i]){
H=a[i];
a[i]=a[j];
a[j]=H;
}
}
}
半角スペース" "の変わりに、前角スペース" "を使うとずれないよ。
0055デフォルトの名無しさん
2008/01/24(木) 21:32:380056デフォルトの名無しさん
2008/01/24(木) 21:37:21 と普通の空白を交互に置いてもいける。
0057デフォルトの名無しさん
2008/01/24(木) 21:37:570058デフォルトの名無しさん
2008/01/25(金) 00:14:32専ブラによる
0059デフォルトの名無しさん
2008/01/25(金) 01:56:46以下のプログラムをコンパイルしてみたところ、
よく分からないエラーが出ました。
#include<stdio.h>
#include<stdlib.h>
typedef struct{
char *word;
int num;
} BUCKET;//7行目
main(int argc, char* argv[])
{
int i,j;
if(argc<2){
printf("一つ以上の引数を入力してください\n");
exit(1);
}
BUCKET p[argc-1];//16行目
}
↓エラー内容
・・・\kadai51.c(16) : error C2275: 'BUCKET' : typedef 識別子に、クラス メンバ アクセス演算子 (->) を使用しました。
・・・\kadai51.c(7) : 'BUCKET' の宣言を確認してください。
・・・\kadai51.c(16) : error C2146: 構文エラー : ';' が、識別子 'p' の前に必要です。
・・・\kadai51.c(16) : error C2065: 'p' : 定義されていない識別子です。
・・・\kadai51.c(16) : error C2109: 配列または、ポインタでない変数に添字が使われました。
OSはWinXP、コンパイラはVisualC++6.0を使用しました。
XPではCは正しくコンパイルできないのですか?
誰か教えてください!
0060デフォルトの名無しさん
2008/01/25(金) 02:00:39>BUCKET p[argc-1];//16行目
VCでは可変長配列はサポートされてない。
というかC言語のつもりならブロックの途中に宣言入れちゃ駄目だよ?
0061デフォルトの名無しさん
2008/01/25(金) 02:02:35どっちにしろVCはC99に対応してないけど
0062デフォルトの名無しさん
2008/01/25(金) 02:02:58BUCKECT p[ 100 ]にしてみろ。
可変個にしたければmalloc使うかC++に乗り換えるか。
0063定数にして余分に取る
2008/01/25(金) 02:04:55#include<stdlib.h>
typedef struct{
char *word;
int num;
} BUCKET;//7行目
main(int argc, char* argv[])
{
int i,j;
if(argc<2){
printf("一つ以上の引数を入力してください\n");
exit(1);
}
BUCKET p[10];//16行目
}
006459
2008/01/25(金) 02:07:12できないんですね・・・
pを固定長にして試してみます。
どうもありがとうございました。
0065デフォルトの名無しさん
2008/01/25(金) 02:25:540066デフォルトの名無しさん
2008/01/25(金) 02:32:29が初心者向け
006767
2008/01/25(金) 03:02:03main関数の中の途中で2次元配列を宣言したら実行時エラーになりました。
char hairetu[500][500];のように宣言したら、
abc.exeは動作を中止しました、と言って止まります。
この配列には代入も何もしていません。
宣言だけでエラーになります。
グローバル変数に移動するとそのエラーは消えました。
C++では変数の宣言はどこでも可能なはずですが、
なぜ実行時エラーになってしまうのでしょうか?
0068デフォルトの名無しさん
2008/01/25(金) 03:09:05new vector つかえ
0069デフォルトの名無しさん
2008/01/25(金) 03:11:09スレ違いだ。
0070デフォルトの名無しさん
2008/01/25(金) 03:11:12for(int n=0;n<500;n++)p[n]=new char [500];
p[0][0]=100;
ならできるはず
0071デフォルトの名無しさん
2008/01/25(金) 03:17:25p[0][0]=100;
てのは何ざんしょ
0072デフォルトの名無しさん
2008/01/25(金) 03:32:170073デフォルトの名無しさん
2008/01/25(金) 04:08:42これはC言語も同じなのですか?後どうして危険なんですか?
0074デフォルトの名無しさん
2008/01/25(金) 04:15:09そんな話聞いた事ないなぁ
007567
2008/01/25(金) 04:19:2768さん、69さん、70さん、71さん、72さん、
質問に答えてくれてありがとうございます。
私の質問はC言語でなくC++に関するものなので
スレ違いでしたらすみません。
---
エラーの原因はメイン関数の中で500*500の配列は大きすぎるから、
ということでいいのでしょうか?
グローバル変数の場所で宣言するなら事前に確保できるので
エラーにならない、と。
メイン関数を走らせている最中に変数を確保するには
newやvectorで確保する方がいい、ということでしょうか。
0076デフォルトの名無しさん
2008/01/25(金) 04:25:00007767
2008/01/25(金) 04:40:16疑問が解決しました。みなさんありがとうございました。
また、スレ違いすみませんでした。
0078デフォルトの名無しさん
2008/01/25(金) 05:11:52Cには以下の4つの領域があります。
コード(code)->プログラム
データ(data)->外部変数
ヒープ(heap)->malloc,new
スタック(stack)->関数の内部変数
このうち、スタック領域のサイズはデータ、ヒープより小さいく、大きな配列を
確保しようとすると最大サイズを超えることがあるということです。
0079デフォルトの名無しさん
2008/01/25(金) 08:28:28たぶん言いたいことは宣言じゃなくて定義な。
Javaでそんな話は聞いたことないがCならポインタじゃないかなぁ?
int * hoge, fuga;とか
0080デフォルトの名無しさん
2008/01/25(金) 08:41:23自然と一変数ごとに一行となる。
構造体メンバ(やクラスのメンバ変数、フィールド)は、
きちんとコメントをつけると、一行ずつのほうが書きやすい。
ごくたまに、 int x, y; のように非常に関連性の高い変数を
同じ行で定義することもないわけではない。
0081デフォルトの名無しさん
2008/01/25(金) 08:42:47そ、そんな宗派が・・・
0082デフォルトの名無しさん
2008/01/25(金) 13:31:20main{
char *month[12] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
int i;
for(i = 0; i < 12; i++){
if(*month[i] == 'r' || *month[i] == 'R')
puts(month[i]);
}
}
これで実行してみた所何も出てこなかったのですが、何ででしょうか?
0083デフォルトの名無しさん
2008/01/25(金) 13:34:17Rで始まる月は無いから。
0084デフォルトの名無しさん
2008/01/25(金) 13:43:410085デフォルトの名無しさん
2008/01/25(金) 13:48:030086デフォルトの名無しさん
2008/01/25(金) 15:00:24最小公倍数を求めなさい。
このプログラムをお願いします。
0087デフォルトの名無しさん
2008/01/25(金) 15:05:310088デフォルトの名無しさん
2008/01/25(金) 15:09:33うせろ屑
0089デフォルトの名無しさん
2008/01/25(金) 15:13:41最小公倍数
・aとbが等しいか比較する。
・等しくない時aとbのどちらが大きいか比較する。
・小さい方は自分の値を自分に足す。(a += a)
上を繰り返す。
最大公約数
a,bの小さいほうで両方を割る。
どちらかが割り切れなかったら小さい方から1引いた値で両方を割る
上を繰り返す。
0090デフォルトの名無しさん
2008/01/25(金) 15:14:180091デフォルトの名無しさん
2008/01/25(金) 15:14:56a += aじゃまずいな。
a,bはとっておいて、計算用の変数に足していかないと。
0092デフォルトの名無しさん
2008/01/25(金) 16:27:43#include <stdio.h>
int main(){
int x,y,r,t;
printf("x=");scanf("%d",&x);
printf("y=");scanf("%d",&y);
if(x<y){
int z=x;
x=y;
y=z;
}
t=x*y;
CHECK:
if(y==0){
printf("%d,%d",x,t/x);
goto END;
}
r=x;
MOD:
r-=y;
if(r>=y)goto MOD;
x=y;
y=r;
goto CHECK;
END:
return 0;
}
0093デフォルトの名無しさん
2008/01/25(金) 16:45:23S=1+(1+2)+(1+2+3)+-----+(1+2+3+---+n)
で1重ループでならできたんですが
2重ループでの作り方が分かりません。
低レベルですが教えて下さい。
0094デフォルトの名無しさん
2008/01/25(金) 16:49:26for(i=1; i<=n; i++) for(j=1; j<=i; j++) s += j;
0095デフォルトの名無しさん
2008/01/25(金) 17:08:17ありがとうございます。
0096デフォルトの名無しさん
2008/01/25(金) 18:41:15これのptr++ってどういう意味ですか?
ptrは[個数を記憶するもの]と分かるんですが
=2とできる意味も分からないです。
0097デフォルトの名無しさん
2008/01/25(金) 18:43:460098デフォルトの名無しさん
2008/01/25(金) 18:45:12インクリメント演算子知らんのか?
0099デフォルトの名無しさん
2008/01/25(金) 18:48:16けど、i++とかなら分かるけど
prime[ptr++]=2
となると分かりません
0100デフォルトの名無しさん
2008/01/25(金) 18:49:110101デフォルトの名無しさん
2008/01/25(金) 18:50:01prime[pt]=2;
ptr++;
まぁこういことだな
0102デフォルトの名無しさん
2008/01/25(金) 18:53:37010373
2008/01/25(金) 18:54:01解答ありがとうございます。
変数宣言じゃなく変数定義でした。
確かにCでは複数定義は危険ですね、JavaはCの書き方に依存してるのかな?
後で先生に聞いてみます。
0104デフォルトの名無しさん
2008/01/25(金) 18:56:280105デフォルトの名無しさん
2008/01/25(金) 18:57:180106デフォルトの名無しさん
2008/01/25(金) 18:58:430107デフォルトの名無しさん
2008/01/25(金) 20:12:560108デフォルトの名無しさん
2008/01/25(金) 21:17:18Cでそんだけgoto使うと、なんか新鮮さを感じるね。
0109デフォルトの名無しさん
2008/01/25(金) 22:16:16prime[ptr++] = 2;
for(i=3; i<=M; i++) {
for(j=0; j<ptr; j++) if(i%prime[ptr]==0) break;
if(j==ptr) prime[ptr++] = i;
}
ループの中はちょっと違うかもしれんが、こんな感じで素数を求めてくプログラムかな。
0110デフォルトの名無しさん
2008/01/25(金) 23:07:44メインにアドレス返却する方法を使うみたいですけど、よく分かりませんm(_ _)m
while文じゃ無理でしょうか?
void input_data(Person *pmem) /* データ入力関数 */
{
char buf[BUF];
while(1)
{
printf("\nName : ");
scanf("%s",&buf[0]); /* 名前の入力 */
if(strlen(&buf[0]) <= NAME_MAX) /* 入力文字数のチェック */
{
strcpy(&pmem->name[0],&buf[0]);
break; /* メンバにコピー */
}
printf("\nSorry. Input less than %d characters.\n",
NAME_MAX+1);
}
0111デフォルトの名無しさん
2008/01/25(金) 23:14:33何言ってるかわからん。
>メインにアドレス返却する方法
って何のことだ?
>"END"と入力されたら、入力終了する条件を追加したくて
だけなら、strcmp()でいいはずだが。
もうちょっとやりたいことを整理しる。
0112デフォルトの名無しさん
2008/01/25(金) 23:21:08呼び出した方で処理すれば?
0113デフォルトの名無しさん
2008/01/25(金) 23:21:39ついでに
scanf("%s",&buf[0]); /* 名前の入力 */
は
scanf("%s",buf); /* 名前の入力 */
と同じ。
&buf[0]を使うよりbufを使ったほうがすっきりするだろ
0114デフォルトの名無しさん
2008/01/25(金) 23:26:02名前が20文字以上入力されたら再入力、ENDが入力されたら強制終了する条件式
を作りたいわけですけど、条件の書き方が分からないです
0115デフォルトの名無しさん
2008/01/25(金) 23:29:11スミません。かなり初心者なので、処理方法でパニくってます
>>113
サンクス。勉強になりました
0116デフォルトの名無しさん
2008/01/25(金) 23:40:41strcmpで"END"かどうか判断して、真だったらreturnすりゃあいいんでない?
0117デフォルトの名無しさん
2008/01/26(土) 00:44:30windowsなのかLinuxなのか、プログラム中で
知る方法はないでしょうか?
0118デフォルトの名無しさん
2008/01/26(土) 01:02:30(仮想環境のことじゃないよね?)
同じバイナリでWindowsでもLinuxでも動く、というようなことを
しようというのでなければ(可能か?)、コンパイル時に#ifdefで
__linux__ とかが定義されてるかどうかを見るのが一応簡単。
(Windowsでのコンパイルで-D__linux__とかやって
意図的に誤作動させることは可能)
0119デフォルトの名無しさん
2008/01/26(土) 01:12:44普通、そういうことは使用とは思わない
バイナリを分ける
0120デフォルトの名無しさん
2008/01/26(土) 01:24:260121デフォルトの名無しさん
2008/01/26(土) 01:35:50そんな方向に頑張るな。
0122デフォルトの名無しさん
2008/01/26(土) 01:38:49われわれが作成するmain関数の前に、コンパイルが組み込んだOS依存のコードが走る。
だから、Windows用にコンパイルしたプログラムをLinuxで実行しようとすると、main関数
に到達する以前に異常終了する。
と、思う。
0123デフォルトの名無しさん
2008/01/26(土) 01:39:59おいwwwwww
0125デフォルトの名無しさん
2008/01/26(土) 01:43:55説明するのもめんどくさいぐらい何から何まで間違ってる
0126デフォルトの名無しさん
2008/01/26(土) 01:47:47そもそも実行ファイルの形式が違うので、
互いに実行を開始することすらできない。
0127デフォルトの名無しさん
2008/01/26(土) 01:49:58OS=Windows_NT
と設定されてるからそれを調べればいい。まあふつーはビルド時にifdefするもんだが。
0128デフォルトの名無しさん
2008/01/26(土) 01:50:260129デフォルトの名無しさん
2008/01/26(土) 02:12:48但し、カーネルが詳細を知らないからロードさえできないけど。
0130デフォルトの名無しさん
2008/01/26(土) 03:53:500131130
2008/01/26(土) 04:10:04void x(a[], const b[], const c[])
{
printf("%d",b[0];
a[i] = (10 + b[i]) - c[i];
printf("%d",b[0])
}
このときの上下のプリントで違う値が出力されてしまうのですが原因が分かる方いませんか?
0132デフォルトの名無しさん
2008/01/26(土) 04:16:310133デフォルトの名無しさん
2008/01/26(土) 04:16:350134デフォルトの名無しさん
2008/01/26(土) 04:17:05いや、そんな動かないコード渡されてもw
0135デフォルトの名無しさん
2008/01/26(土) 05:32:24ほれ。違う値がプリントされる例だ。
#include <stdio.h>
int i = 0;
void x(int a[], const int b[], const int c[])
{
printf("%d\n",b[0]);
a[i] = (10 + b[i]) - c[i];
printf("%d\n",b[0]);
}
int main()
{
int a[] = { 0 };
x(a, a, a);
return 0;
}
0136デフォルトの名無しさん
2008/01/26(土) 10:08:44printf("%d %d %d\n",a,b,c);
0137デフォルトの名無しさん
2008/01/26(土) 10:27:38a,b,cも同じアドレスを指しているから、a[0]の内容が10になれば、
b[0]も10になるんじゃないの。
0138デフォルトの名無しさん
2008/01/26(土) 10:43:34わかってて一つの可能性を示してやってんだろ。
0139デフォルトの名無しさん
2008/01/26(土) 12:08:51サイズのバイトデータを、取り出すことは可能なのでしょうか?
例えばファイルの10バイト目から20バイト目までを読み込むというような事がしたい
のですが、どなたか分かる方がいましたら教えてくれませんか?
0140デフォルトの名無しさん
2008/01/26(土) 12:10:15環境示さにゃ分からんぜよ。
0141デフォルトの名無しさん
2008/01/26(土) 12:12:37できるよ。
0142139
2008/01/26(土) 12:13:23環境はFedoraCore8です。
0143デフォルトの名無しさん
2008/01/26(土) 12:13:270144デフォルトの名無しさん
2008/01/26(土) 12:23:36int h;
char buf[20];
h = open("ファイル名", O_RDONLY);
lseek(h, 10, SEEK_SET);
read(h, buf, 20)
close(h)
0145139
2008/01/26(土) 12:25:32ありがとうございます。
早速試してみます。
0146デフォルトの名無しさん
2008/01/26(土) 14:00:28>例えばファイルの10バイト目から20バイト目までを読み込むというような事がしたい
>read(h, buf, 20)
にほんごよめますか?
Can you read Japanese?
0147デフォルトの名無しさん
2008/01/26(土) 14:30:14君のほうが何か思い込みをしておる
0148デフォルトの名無しさん
2008/01/26(土) 15:03:18おかしくはないな。
0149デフォルトの名無しさん
2008/01/26(土) 15:07:000150デフォルトの名無しさん
2008/01/26(土) 15:35:0310バイト目から20バイト読み込む
10バイトから20バイトまで読み込む
さぁ仲間はずれはどれだ
>ファイルの特定の位置から任意のサイズのバイトデータを、取り出す
って言ってるんだから、10バイト目から10バイト分読み込みたいって素直に書けばよかっただろうに
0151デフォルトの名無しさん
2008/01/26(土) 19:10:59そういう場合は普通 Can は使わない。
Do you speak Japanese? でおk。
0152デフォルトの名無しさん
2008/01/26(土) 19:16:28Can you〜だと嫌味も軽く含んでいるから
0153デフォルトの名無しさん
2008/01/26(土) 19:20:37そんな表現自体無いんだよ。英語には。
0154デフォルトの名無しさん
2008/01/26(土) 19:22:45Can you speak Englishのフレーズは使うわけねーだろwwwwwwwww
0155デフォルトの名無しさん
2008/01/26(土) 19:23:280156デフォルトの名無しさん
2008/01/26(土) 20:02:080157デフォルトの名無しさん
2008/01/26(土) 20:14:560158デフォルトの名無しさん
2008/01/26(土) 20:43:41Canに強勢置けばいいよ・
0159デフォルトの名無しさん
2008/01/26(土) 20:49:36HA-HA-HA-HA.
0160デフォルトの名無しさん
2008/01/26(土) 20:50:490161デフォルトの名無しさん
2008/01/26(土) 21:03:260162デフォルトの名無しさん
2008/01/26(土) 21:04:150163デフォルトの名無しさん
2008/01/26(土) 21:11:230164デフォルトの名無しさん
2008/01/26(土) 21:27:22大きい順に並べなさい。
#include<stdio.h>
int main (void)
{
int i,j,m,a[6];
for(i=0;i<=5;i++){
scanf("%d",&a[i]);
printf("%d",a[i]);
}
printf("\n");
for(j=0;j<=4;j++){
for(i=5;i>j;i--){
if(a[i-1]<a[i]){
m=a[i];
a[i]=a[i-1];
a[i-1]=m;
}
}
}
for(i=0;i<=6;i++){
printf("%d\n",a[i]);
}
printf("\n");
}
実行できないんですけどどこがおかしいですか?
0165デフォルトの名無しさん
2008/01/26(土) 21:34:42ただ実行できないでなくて、何をしたら何がおきたかを正確に書け。
コンパイルしたらこういうエラーが出たとか。
こういう値を入力したのにこういう間違った結果が出たとか。
実行したらアクセス違反で落ちたとか。
鼻から悪魔が出てきたとか。
0166デフォルトの名無しさん
2008/01/26(土) 21:35:38for(i=0;i<=6;i++){
printf("%d\n",a[i]);
}
な・・7番目だと・・・・・
0167デフォルトの名無しさん
2008/01/26(土) 21:37:570168デフォルトの名無しさん
2008/01/26(土) 21:38:03a[i-1]ってゆう、文字を、a[J]に変えてみると、いいかもしれませんと、ヒントです
0169デフォルトの名無しさん
2008/01/26(土) 21:40:17整数は何個でも入れられて
実行してもばらばらにでます。
0170デフォルトの名無しさん
2008/01/26(土) 21:40:430171デフォルトの名無しさん
2008/01/26(土) 21:41:09馬鹿かお前
0172デフォルトの名無しさん
2008/01/26(土) 21:42:540173デフォルトの名無しさん
2008/01/26(土) 21:47:29int main(void)
{
int i, j, m, a[6];
for (i = 0; i < 6; i++) {
scanf(" %d", &a[i]);
}
printf("\n");
for (j = 0; j <= 4; j++) {
for (i = 5; i > j; i--) {
if (a[i-1] < a[i]) {
m=a[i];
a[i]=a[i-1];
a[i-1]=m;
}
}
}
for (i = 0; i < 6; i++) {
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
0174デフォルトの名無しさん
2008/01/26(土) 21:56:44ありがとうございます。
明日実行してみます。
0175子羊
2008/01/26(土) 22:36:16#include <stdlib.h>
#define BUFSIZE 100
#define MAX 100
#define TRUE 1
#define FALSE 0
#define NUMBER '0'
#define EPS 1.0E-6
void push(double);
double pop(void);
int next(char []);
int iswhite(char);
int isnum(char);
double str2no(char []);
/* global variable, array, pointer */
int sp = 0;
double stack[MAX];
char buf[BUFSIZE];
char *bufp = buf;
0176子羊
2008/01/26(土) 22:43:22{
int type;
double op2;
char s[MAX];
while ((type = next(s)) != EOF) {
switch (type) {
case NUMBER:
push(str2no(s));
break;
case '+':
push(pop() + pop());
break;
case '*':
push(pop() * pop());
break;
case '-':
op2 = pop();
push(pop() - op2);
break;
case '/':
op2 = pop();
if (op2 < EPS) {
fprintf(stderr, "error: zero division\n");
exit(1);
}
0177子羊
2008/01/26(土) 22:44:44push(pop() / op2);
break;
case '\n':
printf("\t%10.4f\n", pop());
break;
default:
fprintf(stderr, "error: unknown command %s\n",
s);
exit(1);
}
}
}
int isnum(char c)
{
/* 各自この部分を作る */
}
int iswhite(char c)
{
/* 各自この部分を作る */
}
0178子羊
2008/01/26(土) 22:46:39{
if (sp < MAX) {
stack[sp] = val;
sp++;
}
else {
fprintf(stderr, "error: stack full, ");
fprintf(stderr, "can't push %f\n",
val);
exit(1);
}
}
double pop(void)
{
if (sp > 0) {
sp--;
return stack[sp];
}
else {
fprintf(stderr, "error: stack empty\n");
exit(1);
}
}
0179子羊
2008/01/26(土) 22:47:36{ int i, c;
if (bufp == buf) {
if (fgets(buf, BUFSIZE, stdin)
== NULL) {
return EOF;
}
}
while(iswhite(c = *bufp) == TRUE)
bufp++;
/* 各自この部分を作る */
}
double str2no(char s[])
{
double val, power;
int i, sign;
/* 各自この部分を作る */
return sign * val / power;
}
0180子羊
2008/01/26(土) 22:47:38{
int type;
double op2;
char s[MAX];
while ((type = next(s)) != EOF) {
switch (type) {
case NUMBER:
push(str2no(s));
break;
case '+':
push(pop() + pop());
break;
case '*':
push(pop() * pop());
break;
case '-':
op2 = pop();
push(pop() - op2);
break;
case '/':
op2 = pop();
if (op2 < EPS) {
exit(1);
}
0181子羊
2008/01/26(土) 22:48:12double pop(void);
int next(char []);
int iswhite(char);
int isnum(char);
double str2no(char []);
double stack[MAX];
char buf[BUFSIZE];
char *bufp = buf;
0182子羊
2008/01/26(土) 22:49:12{
int type;
double op2;
char s[MAX];
while ((type = next(s)) != EOF) {
switch (type) {
case NUMBER:
push(str2no(s));
break;
case '+':
push(pop() + pop());
break;
case '*':
push(pop() * pop());
break;
case '-':
push(pop() / op2);
break;
case '\n':
printf("\t%10.4f\n", pop());
break;
default:
fprintf(stderr, "error: unknown command %s\n",
s);
exit(1);
}
0183子羊
2008/01/26(土) 22:53:17(数値は0以上の実数)
0184デフォルトの名無しさん
2008/01/26(土) 22:53:59どなたか教えていただけませんか。おねがいします。
#include <stdio.h>
#include <math.h>
double func(double x)
{
double w1 = 0.1062 * x * (1 - 4.248 * 0.00001 * x * x);
double f;
return f = w2/(2*3.14);
}
void main()
{
int x = 4;
double result;
FILE* output;
output=fopen("output.csv","w");
for(x = 4; x <= 50; x++)
{
result = func(x);
printf("x=%d, f=%10.2lf\n", x, result);
fprintf(output, "%d, %10.2lf\n", x, result);
}
fclose(output);
getchar();
}
0185デフォルトの名無しさん
2008/01/26(土) 22:55:170186デフォルトの名無しさん
2008/01/26(土) 22:58:380187子羊
2008/01/26(土) 23:00:080188デフォルトの名無しさん
2008/01/26(土) 23:08:22ソースが長い時はテキストファイルをどこかにあげろ。
お前のレスをわざわざコピペしてつなぎ合わせさせるのか?
0189デフォルトの名無しさん
2008/01/26(土) 23:12:07あげなおしたほうがいいかも
0190デフォルトの名無しさん
2008/01/26(土) 23:12:10そもそも宿題など丸投げはスレ違い。
0191デフォルトの名無しさん
2008/01/26(土) 23:16:500192子羊
2008/01/26(土) 23:21:060193デフォルトの名無しさん
2008/01/26(土) 23:21:390194デフォルトの名無しさん
2008/01/26(土) 23:23:050195デフォルトの名無しさん
2008/01/26(土) 23:25:150196デフォルトの名無しさん
2008/01/26(土) 23:45:25#include<stdio.h>
int main (void)
{
int i,a[8],x=0;
printf("8ビットの2進数を入力して下さい:");
for(i=7;i>=0;i--){
scanf("%d",&a[i]);
}
i=7;
while(i>=0){
x=x*2+a[i];
i--;
}
printf("%d\n",x);
return(0);
}
8ビットの2進数(0or1)入れても実行
できなかったんですがどこがまずいですか?
0197デフォルトの名無しさん
2008/01/26(土) 23:50:32動いてるみたいだけど?
どう動かないの?
0198デフォルトの名無しさん
2008/01/26(土) 23:54:11正常に動いてる。
8回入力してみた?
1 1 0 1 1 0 0 0 みたいに
0199デフォルトの名無しさん
2008/01/26(土) 23:54:48strtol を使うってのは反則なんだろうな。
それはともかく、入力するとき桁をスペースなり改行なりで区切ってないとかか?
0200184
2008/01/26(土) 23:56:35ありがとうございました。
0201デフォルトの名無しさん
2008/01/27(日) 00:10:28数字の間隔をとって入力
しないといけないんですか?
0202デフォルトの名無しさん
2008/01/27(日) 00:12:460203デフォルトの名無しさん
2008/01/27(日) 00:46:44x=x*2+a[i];
xってずっと0入れんの?
計算できるか??謎
0204デフォルトの名無しさん
2008/01/27(日) 00:48:140205デフォルトの名無しさん
2008/01/27(日) 00:50:17getcharで取得すればいいよ。
そうすりゃループでも 改行いれずに1文字づつ配列に格納していってくれる。
でそれをatoiで整数に戻せばいいんじゃね
0206デフォルトの名無しさん
2008/01/27(日) 00:52:25getchar → atoi はまあできないこともないがひと手間かかる。
どうせエラーチェックなんて期待されてないだろうし、ただ '0' 引くだけでいいよ。
0207デフォルトの名無しさん
2008/01/27(日) 01:02:03手がかりが無さ過ぎて困ってます
0208デフォルトの名無しさん
2008/01/27(日) 01:03:040209デフォルトの名無しさん
2008/01/27(日) 01:03:11デバッガでも使えば?
それだけじゃわかんねーし
0210デフォルトの名無しさん
2008/01/27(日) 01:03:44ないならprintf("dbg:%s:%d\n", __FILE__, __LINE__);
をばら撒きまくってどこまでちゃんと実行できているのかチェックしろ
0211デフォルトの名無しさん
2008/01/27(日) 01:04:32ありがとうございます。
0212207
2008/01/27(日) 01:08:25mainの一番最初にprintfしてるんですがそれすら出力されません
0213デフォルトの名無しさん
2008/01/27(日) 01:09:130214デフォルトの名無しさん
2008/01/27(日) 01:09:21main()ででかい配列を宣言してるとか。
0215デフォルトの名無しさん
2008/01/27(日) 01:12:32お前を助けるための手がかりが無さ過ぎて困ってます。
0216デフォルトの名無しさん
2008/01/27(日) 01:15:38static でもあんまりでかいと起動できない事がある。
0217デフォルトの名無しさん
2008/01/27(日) 01:16:01ソース晒せ
0218デフォルトの名無しさん
2008/01/27(日) 01:16:35自分の環境と違うとか
0219デフォルトの名無しさん
2008/01/27(日) 01:23:120220207
2008/01/27(日) 01:30:00コンパイラはgccでMake介してやってます。今までもこうしてきました
DLLてなんですか
もうすぐ卒論提出日 私オワりました
0221デフォルトの名無しさん
2008/01/27(日) 01:31:150222デフォルトの名無しさん
2008/01/27(日) 01:33:01つーか今頃コンパイル云々言ってるようじゃ終わってる気が
0223デフォルトの名無しさん
2008/01/27(日) 01:33:1700〜99まで来るとA0〜ZZという順番で振りたいと思っています。
なるべく楽に出来る方法はないでしょうか?
よろしくお願い致します。
0224デフォルトの名無しさん
2008/01/27(日) 01:34:07やったね!
0225デフォルトの名無しさん
2008/01/27(日) 01:36:05ソースをガシガシ削っていって、その現象の再現する最小のソースを作り出すんだ。
0226デフォルトの名無しさん
2008/01/27(日) 01:38:10普通のn進数じゃないんだな。めんどくせ。
0227デフォルトの名無しさん
2008/01/27(日) 01:42:52一応聞いておくけど、
コンパイルしてるのはどのマシンで、
動かないのはどのマシンだ?
0228デフォルトの名無しさん
2008/01/27(日) 01:43:42まず、このプログラムが実行できるかどうかためしてみるんだ。
int main() { return 0; }
0229デフォルトの名無しさん
2008/01/27(日) 01:48:25そうか。
バイナリを持って行ってるって可能性もあるのか。
0230デフォルトの名無しさん
2008/01/27(日) 01:50:1399の次がA0ならA9の次は?
下の位にいつアルファベットがでてくるんだ。
0231デフォルトの名無しさん
2008/01/27(日) 01:51:19AA〜ZZ じゃなくて A0〜ZZ なのか?
自分で作れば?
0232デフォルトの名無しさん
2008/01/27(日) 01:53:12そうなんです。スマートにできればいいんですが、
N進数に直すのに数値を割ってごちゃごちゃしてしまいそうなので、
何かいい方法はないかと模索中です。
0233デフォルトの名無しさん
2008/01/27(日) 01:55:100234デフォルトの名無しさん
2008/01/27(日) 01:58:030235デフォルトの名無しさん
2008/01/27(日) 02:06:18A0〜ZZまで出力するのを作る。
そして99まで来たらA0へ処理を切り替えればいい
0236デフォルトの名無しさん
2008/01/27(日) 02:09:480237デフォルトの名無しさん
2008/01/27(日) 02:12:06だがなんで次がA0なのに最終的にZZになるんだw
0238デフォルトの名無しさん
2008/01/27(日) 02:13:56とかで宣言されて、何度か使い回された後の buf を NULL で埋め尽くすにはどうすれば出来ますか?
素朴に行くと、forループで埋めるというのもありますが、他に便利な方法がありますか?
0239デフォルトの名無しさん
2008/01/27(日) 02:14:450240デフォルトの名無しさん
2008/01/27(日) 02:14:510241デフォルトの名無しさん
2008/01/27(日) 02:15:44memset()
ただ、memset(buf, NULL, sizeof buf); とかやると、ド素人ってのがバレバレになる。
0242デフォルトの名無しさん
2008/01/27(日) 02:16:160243デフォルトの名無しさん
2008/01/27(日) 02:16:420244デフォルトの名無しさん
2008/01/27(日) 02:19:08整数のが来るとこで使ったときは標準では未定義だっけ?
0245デフォルトの名無しさん
2008/01/27(日) 02:19:27char num[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for ( int i = 0; i < 36 * 36: i++ ) {
printf ( "%c%c", num[ i % 36 ], num[ i / 36 ] );
}
0246デフォルトの名無しさん
2008/01/27(日) 02:19:53やっぱりド素人だというのがバレバレになる。
#if するなら構わんが。
0247245
2008/01/27(日) 02:19:580248デフォルトの名無しさん
2008/01/27(日) 02:20:580249デフォルトの名無しさん
2008/01/27(日) 02:21:460250デフォルトの名無しさん
2008/01/27(日) 02:22:19gcc のメンバ変数ポインタとかな。
0251デフォルトの名無しさん
2008/01/27(日) 02:23:200252デフォルトの名無しさん
2008/01/27(日) 02:26:000253デフォルトの名無しさん
2008/01/27(日) 02:26:420254デフォルトの名無しさん
2008/01/27(日) 02:28:48「SEEK_SETが0以外の処理系ってあるんですか」とかゴネてるやつとかいたら、おかしいしな。
0255デフォルトの名無しさん
2008/01/27(日) 02:30:44という点を誤解してるんだろう。
まあ、俺も書いてて紛らわしいと思ったが。
NULL で埋めるつもりで 0 クリアすると、という意味だ。
memset(buf, 0, sizeof buf); みたいな。
0256デフォルトの名無しさん
2008/01/27(日) 03:24:03例えば
struct sockaddr_in server;
・・・
server.sin_port = htons(7743);
server.sin_addr.s_addr = htonl(任意のIP);
とするとポート番号は直接htons関数に渡せるのは分かるんですが、
任意のIPは直接渡せませんよね?
渡せる場合例えばホスト表記で168.192.77.43というIPだとどのように書けばいいのですか?
また、渡せないとしたらIPを収めるin_addr構造体のs_addr変数にIPを収めると思うのですが、
例えばホスト表記で168.192.77.43というIPだとどのように代入すれば良いのでしょうか?
0257デフォルトの名無しさん
2008/01/27(日) 03:32:550258256
2008/01/27(日) 03:38:54こんな便利な関数があったんですね・・
初心者丸出しで申し訳ないです。
ありがとうございました
0259デフォルトの名無しさん
2008/01/27(日) 03:48:370260デフォルトの名無しさん
2008/01/27(日) 03:51:250261256
2008/01/27(日) 04:35:16名無しさんにちなんでつけたんですが・・
0262デフォルトの名無しさん
2008/01/27(日) 04:43:15「7743 ポート番号」とかでぐぐればわかると思うよ
0263デフォルトの名無しさん
2008/01/27(日) 04:44:280264デフォルトの名無しさん
2008/01/27(日) 04:46:230265デフォルトの名無しさん
2008/01/27(日) 04:53:32>>261の2行目
0266デフォルトの名無しさん
2008/01/27(日) 04:56:42ハハハ…。
ちなみに743にしなかったのは1023までがwell-knownだからなんだぜー。
…おやすみなさいorz
0267デフォルトの名無しさん
2008/01/27(日) 04:59:16ほんとやばいな・・さっさと寝よう・・・
0268232
2008/01/27(日) 10:02:39数値を36進数に変換するだけなのですが、
無駄にコードが長くなってしまって。
>>234
>>235
>>236
>>237
すみません。
ご指摘どおり誤植でした。
>>245
参考になりました。ありがとうございます。
0269デフォルトの名無しさん
2008/01/27(日) 15:25:03int main (int argc, const char * argv[]) {
// insert code here...
int hp=100;
int k;
printf("魔王が現れた!!¥n");
while (hp>=0){
printf("攻撃してください¥n");
printf("1>爆弾,2>こん棒¥n");
scanf("%d",&k);
switch (k) {
case 1:
printf("爆弾攻撃!!魔王に10のダメージ¥n");
hp=hp-10;
continue;
case 2:
printf("こん棒攻撃魔王に5のダメージ¥n");
hp=hp-5;
continue;
default:printf("さあ早く");
continue;
}
printf("やった!!魔王を倒した¥n");
break;
}
return 0;
}
一方的に魔王に攻撃するプログラムを作成したいのですが
実行すると最後の魔王を倒したが表示されずに終了してしまいます
どうすれば良いのでしょうか
お願いします
0270デフォルトの名無しさん
2008/01/27(日) 15:35:160271デフォルトの名無しさん
2008/01/27(日) 15:36:14int main (int argc, const char * argv[])
{
// insert code here...
int hp = 100, k;
printf("魔王が現れた!!\n");
while (hp >= 0) {
printf("攻撃してください\n");
printf("1>爆弾,2>こん棒\n");
scanf(" %d", &k);
switch (k) {
case 1:
printf("爆弾攻撃!!魔王に10のダメージ\n");
hp -= 10;
break;
case 2:
printf("こん棒攻撃魔王に5のダメージ\n");
hp -= 5;
break;
default:
printf("さあ早く");
break;
}
}
printf("やった!!魔王を倒した\n");
return 0;
}
0272デフォルトの名無しさん
2008/01/27(日) 16:07:52ありがとうございます!!
0273デフォルトの名無しさん
2008/01/27(日) 17:58:37printf("K*100L=%1d",K*100L);
と入力したら、なぜか「K*100L=1234000」と出ました。
「K*100L」の「L」はどこへ消えてしまったのでしょうか?
0274デフォルトの名無しさん
2008/01/27(日) 18:02:22どうなるとおもってLつけたんだよwwww
Lはlong int 型であることを明示する
0275デフォルトの名無しさん
2008/01/27(日) 18:39:22>int k=1234;
>printf("K*100L=%1d",K*100L);
>と入力したら、なぜか「K*100L=1234000」と出ました。
大嘘を書くな。或いはコピペくらいミスるな。
0276デフォルトの名無しさん
2008/01/27(日) 18:45:14K*100は「K*(long int)100」の省略形ってことでいいですか?
>printf("K*100L=%1d",K*100L);
すまんまちがえた。「printf("K*100L=%ld",K*100L); 」だった。
0277デフォルトの名無しさん
2008/01/27(日) 18:46:050278デフォルトの名無しさん
2008/01/27(日) 18:47:510279デフォルトの名無しさん
2008/01/27(日) 19:41:03C言語始めたばかりの超ビギナーで・・・
0280デフォルトの名無しさん
2008/01/27(日) 19:44:230281デフォルトの名無しさん
2008/01/27(日) 20:10:020282232
2008/01/27(日) 23:06:21地道に計算するしかないでしょうか?
A9の場合、36*10 + 9とやれば答えが出るのはわかっているのですが、
教えて頂いた配列を使ったやり方が、目から鱗のシンプルさだったので、
同じくシンプルな実装方法があれば、是非ご教授お願いできないでしょうか。
よろしくお願い致します。
0283デフォルトの名無しさん
2008/01/27(日) 23:20:300284デフォルトの名無しさん
2008/01/27(日) 23:32:42どうせ文字セットに依存するコードになるのなら、
数字なら '0' を引いて、アルファベットなら 'A' 引いて 10 足すとかやった方が
分かりやすいんじゃないかと思う。
0285デフォルトの名無しさん
2008/01/27(日) 23:34:25恐らくもっともシンプルな解はstrtolを使う。
0286デフォルトの名無しさん
2008/01/27(日) 23:34:55この値をを1桁目と2桁目の2つに分け、別の変数に入れたいです。
1桁目をA1 2桁目をA2のように。。。
どのような演算をしたらよいでしょうか。
ご教授ください。
n = strchr(num, 'A') - num;
n = strchr(num, '0') - num;
各桁を数値に変換するのはこれでできるけど。
0288デフォルトの名無しさん
2008/01/27(日) 23:39:300289デフォルトの名無しさん
2008/01/27(日) 23:40:1510で割ったり余りをだしたり
0290245
2008/01/27(日) 23:44:55これも無理やり感漂う方法な気もするけど、こんなのどう?
isalpha( num ) ? num - 'A' + 10 : num - '0';
ラッパ関数でも作ればシンプルになりそうだけど。
strtolの方がわかりやすいかな
0291232
2008/01/28(月) 00:52:48>>284
>>285
>>287
>>290
発想次第で面倒と思っていた処理でも、
こんなにシンプルになる方法がいくつもあるとは、奥が深いですね。
皆様に教えて頂きました事、大変勉強になりました。
ご親切にありがとうございました。
0292デフォルトの名無しさん
2008/01/28(月) 13:50:49コマンドラインで実行しないといけないプログラムを自動化したいんだけど
たとえば,
system("programname login");
って実行したら,コマンドプロンプトの画面に
User Name>
と出てコマンド入力を求められます.
引き続きパスワードなども聞かれるのですが,
system関数では実行処理が終わるまで制御が戻りません.
このような追加入力が必要な場合どういうコーディングをすればいいの?
0293デフォルトの名無しさん
2008/01/28(月) 13:55:09その入力が標準入力で、事前に入力項目が判っているなら
(つまりコマンドプロンプトでprogramname login < foo できるなら)
system("programname login < foo")とでもすればいい。
大抵の環境で巧くいくと思う。
入力項目を動的に変更したいなら大抵の環境でpopen()が使えると思う。
そうでないなら、大きく環境に依存することになるから
該当環境のスレ若しくは板で聞いたほうが早いかもしれない。
0294デフォルトの名無しさん
2008/01/28(月) 14:49:19int s;
int dx;
int i;
printf("f(x)=x^2について\n");
printf("x軸方向の刻み幅大:");
s=0;
dx = 3/10;
for(i=0;i<3;i=i+dx){
s=s+(i*i*dx);
}
printf("s=%d\n",s);
区分求積法やってるんですけどソース実行すると
途中で止まるんです…
お願いします。。
0295デフォルトの名無しさん
2008/01/28(月) 14:52:15つまりdx が0なので無限ループ。
0296デフォルトの名無しさん
2008/01/28(月) 14:53:13それでforが無限ループになってる。
小数を扱う場合はdoubleを使え。
0298292
2008/01/28(月) 16:28:12返答ありがとうございます.
>(つまりコマンドプロンプトでprogramname login < foo できるなら)
これがうまくいかなかったので
pp = _popen("programname login", "w");
fprintf(pp, "user");
fprintf(pp, "12345678");
_pclose(pp);
他サイトも参考にして,こうやって組んでみました,
これだと,DOS窓は開くものの,追加入力と窓のクローズが
実行されません.
根本的に使い方まちがってますか?
0299デフォルトの名無しさん
2008/01/28(月) 21:19:57使い方はあっていると思うけど、パスワード入力が標準入力じゃないんじゃね?
だとしたら、その方法はでは無理。パスワード入力で何が起きているか、Spy++ででも見てみたら?
0300デフォルトの名無しさん
2008/01/28(月) 21:49:27このinをx方向にwidth,y方向にheight分だけずらした新しいポインタを得るには
どうしたらいいでしょうか?
0301デフォルトの名無しさん
2008/01/28(月) 21:51:420302デフォルトの名無しさん
2008/01/28(月) 21:51:490303デフォルトの名無しさん
2008/01/28(月) 21:52:520304デフォルトの名無しさん
2008/01/28(月) 21:53:580305300
2008/01/28(月) 21:54:07で
in[y][x] = (x, y)の画素
見たいな感じでデータが入ってるんですが.
これをy, xだけ特定値分だけずらした新しいポインタが欲しいのですが
0306デフォルトの名無しさん
2008/01/28(月) 21:57:350307デフォルトの名無しさん
2008/01/28(月) 22:01:01そりゃないわ・・・。
0308デフォルトの名無しさん
2008/01/28(月) 22:02:45unsigned char * を作る事は可能だが、
unsigned char ** は無茶。
0310デフォルトの名無しさん
2008/01/28(月) 22:05:41width と height を保存する構造体作って、
in[y + size->height][x + size->width] を取得する関数を作っときゃいいんじゃね?
0311デフォルトの名無しさん
2008/01/28(月) 22:05:460312デフォルトの名無しさん
2008/01/28(月) 22:08:140313デフォルトの名無しさん
2008/01/28(月) 22:16:34いまだにコンパイラの細かい使い方がわかりません。
学習書などに書いてある「コンパイラのマニュアルを見て」
見てもさっぱり理解できません。できるのはコンパイルすることだけ
マニュアルとかがわかりやすいコンパイラを誰か教えてください
書籍とかでもいいんですけど。
ちなみに今使ってるのは「.NET Framework SDK」です
もしかしてスレ違いですか?
0314デフォルトの名無しさん
2008/01/28(月) 22:18:390315デフォルトの名無しさん
2008/01/28(月) 22:22:12初心者なら警告レベルと最適化オプションとパスとリンク関連のオプション覚えておけばいいんじゃね
0316デフォルトの名無しさん
2008/01/28(月) 22:23:32F7押すだけなんだし。
0317デフォルトの名無しさん
2008/01/28(月) 22:24:52インクルードディレクトリやライブラリディレクトリいじったり、
マクロ定義したりする程度じゃね? 普通いじるとしても。
0318313
2008/01/28(月) 22:31:20一年くらい前から0から独学で勉強を始めたのですが
もう少し色んな知識を覚えないと駄目ですね
0319デフォルトの名無しさん
2008/01/28(月) 22:33:37どちらかというと現状でいろいろと詰め込もうとしすぎている感じがする。
とはいえコンパイラとSDKの違い位は知っててもいいかな?
Wikipedia程度の知識でも初めは十分じゃね?
0320デフォルトの名無しさん
2008/01/28(月) 22:39:02リンクの設定やインクルードパスの設定をしないと使えないから
勉強になると思うぞ
0321313
2008/01/28(月) 22:51:20なんか共通言語でどうのこうの書いてあるから変だなと・・・
正直全然大したことはできませんが、色々試して勉強してみます
まずは>>320さんの言う通りにやってみようかな
0322デフォルトの名無しさん
2008/01/28(月) 23:40:43Cの基礎は一通りは分かってる って扱いになりますかね?
ならないか
0323デフォルトの名無しさん
2008/01/28(月) 23:44:15っつかCの世界だと実際にやってるかやってないかが一番重要だしなぁ
0324デフォルトの名無しさん
2008/01/28(月) 23:46:120325デフォルトの名無しさん
2008/01/28(月) 23:46:45while(NULL)というのはFALSEと同じに考えていいのでしょうか?
0326デフォルトの名無しさん
2008/01/28(月) 23:55:390327デフォルトの名無しさん
2008/01/28(月) 23:56:59顔面に硫酸ぶっ掛けられて
痛いとかではすまないだろ?
0328デフォルトの名無しさん
2008/01/29(火) 00:00:01whileになんか式を入れてて、その値がNULLになったらって考えてるんじゃね?
0329デフォルトの名無しさん
2008/01/29(火) 00:06:360330デフォルトの名無しさん
2008/01/29(火) 00:15:12サーティファイです
今 3級は持ってるんですけど
こんなのじゃ意味無いよなぁ
最低でも2級は取らないとなぁ..
0331デフォルトの名無しさん
2008/01/29(火) 00:19:580332デフォルトの名無しさん
2008/01/29(火) 00:24:18これか。
職業プログラマなら、1級とれないとだめだな。
0333デフォルトの名無しさん
2008/01/29(火) 00:29:26結果、全員が2級合格。プログラム未経験者含め数名が1級合格。
その程度の試験。あるに越したことはないが業務レベルに比べれば大したことはない。
0334デフォルトの名無しさん
2008/01/29(火) 00:30:17まだまだほど遠いなぁ
しょせん俺なんかカスだな
0335デフォルトの名無しさん
2008/01/29(火) 00:48:58実用的かつ難易度高いソース書きたいなら
やっぱ業務とかに携わったりとかで、一日8時間普通にソース見てないと。
0336デフォルトの名無しさん
2008/01/29(火) 01:33:28調べる時にはポインタ変数でインクリメントって出来る?
いや、基本的には出来ないってのはわかってるんだが
↑の2つが指定された課題なもんで
意図してるところが違うことなんじゃないかと思い始めて…
0337デフォルトの名無しさん
2008/01/29(火) 01:47:120338デフォルトの名無しさん
2008/01/29(火) 01:50:45宣言の時には
char *hoge[]{
}
で、
走査するときにはポインタ変数を使えって言われたんだ
でも配列はインクリメントできないから、普通無理だよね?
何か方法あるのかな?ってことです
0339デフォルトの名無しさん
2008/01/29(火) 01:51:26char *hoge[]={
…
}
で
0340デフォルトの名無しさん
2008/01/29(火) 01:52:23char *hoge[] = { ...... };
char **p = hoge;
p++;
というのはできる
0341デフォルトの名無しさん
2008/01/29(火) 01:52:25int num[] = { 1, 2, 3, -1 };
for ( int * p = num; *p != -1; p++ ) {
if ( *p % 2 == 0 ) *p++;
}
0342デフォルトの名無しさん
2008/01/29(火) 02:02:39それやってみたんだが
それぞれの配列の先頭のアドレスがポインタ変数に格納されるから
インクリメントするたびに、配列の部分は何も変わらないみたいなんだけど…
つまり
char *hoge[] = {};
*hoge++;
と同じ
0343デフォルトの名無しさん
2008/01/29(火) 02:04:320344デフォルトの名無しさん
2008/01/29(火) 02:08:56もう一度チェックしてみる
0345デフォルトの名無しさん
2008/01/29(火) 02:13:00言いたい事がわかった希ガス。
つまり、
char *hoge[] = { ...... };
hoge[0][0] = 1;
ということをポインタで出来るか、ということだよね?
それなら、面倒だけど、
char *hoge[] = { ...... };
char **p = hoge;
char *pp;
p++;
pp = *p;
*pp = 1;
pp++;
ということになるな。
0346デフォルトの名無しさん
2008/01/29(火) 02:51:43>hoge[0][0] = 1;
>ということをポインタで出来るか、ということだよね?
そういうことです…わかりにくくてすみませんorz
>>345
そのやり方でいけました
ありがとうございましたorz
0347デフォルトの名無しさん
2008/01/29(火) 02:55:080348デフォルトの名無しさん
2008/01/29(火) 03:14:11かなり根本的に別のもんじゃねーかそれwww
0349デフォルトの名無しさん
2008/01/29(火) 07:55:23それは>>305に教えてやるべきだったな
0350デフォルトの名無しさん
2008/01/29(火) 11:03:220351デフォルトの名無しさん
2008/01/29(火) 13:08:060352デフォルトの名無しさん
2008/01/29(火) 15:00:17ダブルポインタ使ってポインタ配列を動的確保したいのかな
だとすれば、xとyを仮にint型と仮定して
unsigned char **array(int x, int y)
{
unsigned char **pa;
int i;
/*ポインタ配列を動的確保*/
pa=(unsigned char**)malloc(x*sizeof(char*));
if(!pa) /*エラー処理*/
for(i=0;i<x;i++) {
/*配列要素を動的確保*/
pa[i]=(unsigned char*)malloc(y*sizeof(char));
if(!pa[i]) /*エラー処理*/
}
return pa;
}
とかの関数を作って呼び出し側から(仮にx=4, y=10としたら)
int x=4, y=10;
unsigned char **in=arrya(x,y);
で後は、普通の配列と同様に使いまわせるはず
ただ、処理が終わったらfree()しない駄目だけど
0353352
2008/01/29(火) 15:05:10訂正
>int x=4, y=10;
>unsigned char **in=arrya(x,y);
正しくは、
int x=4, y=10;
unsigned char **in=array(x,y);
です
0354デフォルトの名無しさん
2008/01/29(火) 16:28:580355デフォルトの名無しさん
2008/01/29(火) 16:35:250356デフォルトの名無しさん
2008/01/29(火) 16:41:55そうじゃねぇだろ
0357デフォルトの名無しさん
2008/01/29(火) 17:52:37>>352で拙いか?
unsigned char **in=array(x,y);でin[x][y]となっているハズで
そのまま要素数を指定すれば配列のアドレスを指すと思うけど?
0358デフォルトの名無しさん
2008/01/29(火) 19:27:410359デフォルトの名無しさん
2008/01/29(火) 19:55:32だいたい「普通の配列と同様に使い回せる」って何だよ
0360デフォルトの名無しさん
2008/01/29(火) 19:58:30バカはお帰りください
0361デフォルトの名無しさん
2008/01/29(火) 20:07:12こいつ人格攻撃始めちゃったよ
0362デフォルトの名無しさん
2008/01/29(火) 20:13:140363デフォルトの名無しさん
2008/01/29(火) 20:14:410364デフォルトの名無しさん
2008/01/29(火) 20:19:450365352
2008/01/29(火) 20:19:48>>360は別人だけど
面倒だけど簡単な例として
(array()は>>352で示した通り)
nt main()
{
/*例として*/
int x=3,y=5;
unsigned char **in=array(x,y);
int i, j;
/*例として*/
for(i=0;i<x;i++) {
for(j=0;j<y;j++) {
in[i][j]=('A'+i)*(j+1);
}
}
for(i=0;i<x;i++) {
for(j=0;j<y;j++) {
printf("%c ",in[i][j]);
}
printf("\n");
}
for(i=0;i<x;i++)
free(in[i]);
free(in);
return 0;
}
>>352及びx,yをそれぞれ指定してやればすんなり可変長の2次元配列が簡単に組める
特に行列での演算やる時は普通に使うけどな
0366デフォルトの名無しさん
2008/01/29(火) 20:21:13こいつ別人のふりし始めちゃったよ
0367デフォルトの名無しさん
2008/01/29(火) 20:26:44char str[100] = {0};
・・・・・・
と
void func() {
char str[100];
memset(str, 0, sizeof(str));
・・・・・・
とするのって、同じだと思って問題ない?
どっちの方がいいとかあるならそれも教えて欲しい
0368デフォルトの名無しさん
2008/01/29(火) 20:37:08文字列として扱うなら、全部0で埋める必要ないよ。
自称上級者で、memset()するのがいいって信じ込んでるやつとかけっこういるけど。
0369デフォルトの名無しさん
2008/01/29(火) 20:38:350370デフォルトの名無しさん
2008/01/29(火) 20:40:070371デフォルトの名無しさん
2008/01/29(火) 20:44:40ついこないだ上司に質問したばっかりの内容とカブってるけど
パっとみ、宣言と同時に{0}だと、ん?って思うから
memsetなり、ループで全部0で埋め尽くすなりしたほうが、跡でソース見たときにわかりやすいらしいから
後者のほうがいいみたいよ。
どっちも配列の中身は一緒だけど。
0372デフォルトの名無しさん
2008/01/29(火) 20:45:370373デフォルトの名無しさん
2008/01/29(火) 20:47:200374デフォルトの名無しさん
2008/01/29(火) 20:47:37普通は char str[100] = ""; じゃないのか?
0375デフォルトの名無しさん
2008/01/29(火) 20:49:000376デフォルトの名無しさん
2008/01/29(火) 20:49:320377デフォルトの名無しさん
2008/01/29(火) 20:49:450378デフォルトの名無しさん
2008/01/29(火) 20:50:23変数名 str で文字列として扱わないとか
逆にそんな命名する頭を疑うわ。
0379デフォルトの名無しさん
2008/01/29(火) 20:51:17ほ、ほら、ゲーム作成過程でのStrong(力)かもしれないじゃない!!!・・・じゃない!!!
0380デフォルトの名無しさん
2008/01/29(火) 20:51:46だから文字列として扱うならって前置きしてるじゃん。
それに文字列でもないのにstrって変数にしてたら、そこもちょっとおかしい。
0381デフォルトの名無しさん
2008/01/29(火) 20:52:59文字列を0の全クリアで初期化するスタイルは正しくない。
0382デフォルトの名無しさん
2008/01/29(火) 20:53:370383デフォルトの名無しさん
2008/01/29(火) 20:58:490384デフォルトの名無しさん
2008/01/29(火) 22:30:24while(適当){
str[i] - '0'
}
って記述は何を意味してるんでしょうか
strはchar型の配列なんですが、意味不明です
0385デフォルトの名無しさん
2008/01/29(火) 22:32:260386デフォルトの名無しさん
2008/01/29(火) 22:36:19そしてその文字に対応する数を求めてる
0387デフォルトの名無しさん
2008/01/29(火) 22:36:37str[i] - '0'
0388デフォルトの名無しさん
2008/01/29(火) 22:39:28これ、文字から整数にするのに他に方法ありますか?
筆算するプログラムを書いてるんですが、後から0が表示されなくなるんです。
0389デフォルトの名無しさん
2008/01/29(火) 22:41:450390デフォルトの名無しさん
2008/01/29(火) 22:42:080391デフォルトの名無しさん
2008/01/29(火) 22:43:270392デフォルトの名無しさん
2008/01/29(火) 22:47:54atoi関数を使用してみます。
後者の方は引数一杯でびっくりしたので前者にしてみます。
0393デフォルトの名無しさん
2008/01/29(火) 22:53:53void input(char* buf)
{
char str[70];
int i , j ;
printf("input data");
scanf("%s",str);
i = strlen(str);
j = 0;
while(i>0){
buf[j] = atoi(str[i]);
j++;
i--;
}
return 0;
}
逆順に格納してるのは意図的です。
bufは他で初期化済みです。
これは変換した値を渡すことが出来ないんでしょうか。
0394デフォルトの名無しさん
2008/01/29(火) 22:55:26atoi……
0395デフォルトの名無しさん
2008/01/29(火) 22:56:25文字列を渡せ
0396デフォルトの名無しさん
2008/01/29(火) 22:56:380397デフォルトの名無しさん
2008/01/29(火) 22:56:560398デフォルトの名無しさん
2008/01/29(火) 22:57:310399デフォルトの名無しさん
2008/01/29(火) 23:09:04tmp[0] = str[i];
buf[j] = atoi(tmp);
でもいいけど、'0'を引いたほうがいいな
0400デフォルトの名無しさん
2008/01/29(火) 23:24:24すみません。ありがとうございます。
void lineprint(char c,char* line,int digit){
int i,k;
printf("%c",c);
for(i = 69;i >= 0;i--){
printf("%d",line[i]);
}
printf("\n");
return 0;
}
という関数が筆算の表示部分なんですが、配列の要素が無い部分、つまり0が入ってる初期化された部分にスペースを代入してから表示しようとすると、計算結果が0になった場合、0が表示されません。
つまり0が並んでるのは見栄えが良くないのでスペースを入れて消そうと考えたのですが・・・
スペースはfor文で配列に数字が入っていない部分に代入、表示させたいのです。
引数のcは、+等の四則記号部分、lineは筆算の配列部分、digitは配列の要素数をstrlenで取得した物です。
0401デフォルトの名無しさん
2008/01/29(火) 23:30:530402デフォルトの名無しさん
2008/01/29(火) 23:32:00そしてサイズをチェックできない関数を使わない。
0403デフォルトの名無しさん
2008/01/29(火) 23:35:28サイズを保持または指定する整数のオーバーフローに気をつける
0404デフォルトの名無しさん
2008/01/29(火) 23:37:100405デフォルトの名無しさん
2008/01/29(火) 23:46:14どうすればバッファオーバーフローが起こらないことを保証できるか考えてコーディングする。
0406デフォルトの名無しさん
2008/01/29(火) 23:55:49int main(void){
int year, month, day, week, tmpm, tmpy, i;
int daymax[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
year = tmpy = 2008;
month = tmpm = 1;
day = 1;
if(year % 400 == 0 || (year % 100 != 0 && year % 4 == 0)) daymax[1] = 29;
if (tmpm < 3) {
tmpy--;
tmpm += 12;
}
week = (tmpy + tmpy/4 - tmpy/100 + tmpy/400 + (13*tmpm+8)/5 + day) % 7;
for(; month <= 12; day++, week++){
if(week == 7) week = 0;
if(day == 1){
printf("\n***** %04d / %2d *****\n", year, month);
for(i=0; i < week; i++) printf(" ");
}
printf(" %2d", day);
if(day == daymax[month-1]){
putchar('\n');
day = 0;
month += 1;
continue;
}
if(week == 6) putchar('\n');
}
return 0;
}
カレンダー作成で何度か修正を試みたのですがエラーがでてしまいます、
どこがおかしいのでしょうか?
0407デフォルトの名無しさん
2008/01/29(火) 23:58:410408デフォルトの名無しさん
2008/01/29(火) 23:58:42{
size_t buf_size = sizeof(int)*n;
int* p = malloc(buf_size);
memset(p, 0, buf_size);
}
以前こんなコードを見かけたけど、
size_t=32bit sizeof(int)=4 の場合
foo(0x40000000U);
とかやっちゃうとおかしな事になるね
こういうのもオーバーフローの遠因になったりする
0409デフォルトの名無しさん
2008/01/30(水) 00:18:11配列から指定の要素を削除するのに、
ソートかけて、二分検索かけて、見つかった箇所から、
一個づつ添字ずらすより早くやる方法ありますでしょうか?
0410デフォルトの名無しさん
2008/01/30(水) 00:20:07ビンソート(バケットソート)
ハッシュ
0411デフォルトの名無しさん
2008/01/30(水) 00:22:50・その配列は先頭から末尾の要素が連続している必要があるのか
0412デフォルトの名無しさん
2008/01/30(水) 00:25:220413デフォルトの名無しさん
2008/01/30(水) 00:27:11ソート状態を保たなきゃいけない場合は、ハッシュとか使えないでしょ。
0414デフォルトの名無しさん
2008/01/30(水) 00:28:37初心者向けな説明が書かれているサイトありますか?
0415デフォルトの名無しさん
2008/01/30(水) 01:18:47基礎はあそこで十分だろ
0416デフォルトの名無しさん
2008/01/30(水) 04:32:080417デフォルトの名無しさん
2008/01/30(水) 04:48:390418デフォルトの名無しさん
2008/01/30(水) 04:53:12でもcの基礎的な部分はUNIX系のmanpageが便利だと思う
0419デフォルトの名無しさん
2008/01/30(水) 05:49:20線形探索のが早いだろw
0420デフォルトの名無しさん
2008/01/30(水) 05:58:35int i,j;
int*ptr=&i;
printf("ptr==&i → %d\n",ptr==&i);
printf("ptr==&j → %d\n",ptr==&j);
これ頼む!後数時間後でC言語の試験があるんだ!卒業がかかってるにもかかわらずやる気なくてごめんなさい、後でいくらでもあやまるから教えてくださいっ!
0421デフォルトの名無しさん
2008/01/30(水) 06:06:49なにが分からないの?
0422デフォルトの名無しさん
2008/01/30(水) 06:22:360423デフォルトの名無しさん
2008/01/30(水) 06:26:331
0
0424デフォルトの名無しさん
2008/01/30(水) 06:27:06ptr==&j → 0
0425デフォルトの名無しさん
2008/01/30(水) 06:28:160426デフォルトの名無しさん
2008/01/30(水) 06:29:240427デフォルトの名無しさん
2008/01/30(水) 06:36:370428デフォルトの名無しさん
2008/01/30(水) 06:53:35c:\documents and settings\my documents\visual studio 2005\projects\karennda7\karennda7.cpp(4) : error C3872: '0x3000': この文字を識別子で使用することはできません
[この文字を識別子で使用することはできません]が大量に出てしまいます。
0429デフォルトの名無しさん
2008/01/30(水) 06:56:02全角文字つかってない?
0430デフォルトの名無しさん
2008/01/30(水) 12:35:58空白に全角がいるんじゃねーの?
コピペしたコードによくある。
0431デフォルトの名無しさん
2008/01/30(水) 17:36:29格納せよ。
・次に異なる6個の数字を入力し、順番に配列MAN[6]に格納せよ。
・ソート方法Aを用いて配列COM、MANの要素をそれぞれ小さい順に並べよ。
・配列COMに含まれる配列MANの数字の個数countを求めよ。
・最後に、配列COM、MANの全要素、変数countを
result.outに書き込め。
・出力形式は自由とするが、main関数内は10行以内にすること。
[ソート方法A]
・作業用の配列として、要素が100個のint型の配列Workを用意する。
・配列Workの各要素は、0に初期化する。
・ソートしたい配列xの要素を順番に読んで、Work[その値]を+1する。
・作業3をすべてのxの要素について行った後、Workの要素を小さい方から順番に
よんで、Workの値が0でなければ、xに書き戻します。
という課題が出たんですが、全然できないので、誰か助けて下さい
0432デフォルトの名無しさん
2008/01/30(水) 17:38:210433デフォルトの名無しさん
2008/01/30(水) 17:47:370434デフォルトの名無しさん
2008/01/30(水) 21:04:570435デフォルトの名無しさん
2008/01/30(水) 21:58:54解凍もしたのに、まだコンパイラが起動できない。どうしたらいいか教えてくださいです。
0436デフォルトの名無しさん
2008/01/30(水) 22:02:08http://www.chem.scphys.kyoto-u.ac.jp/nonnonWWW/ogawara/lecture/borland.html
この手順どおり最初からやってみたら?
0437デフォルトの名無しさん
2008/01/30(水) 22:08:200438デフォルトの名無しさん
2008/01/30(水) 22:23:14ありがとう。
0439デフォルトの名無しさん
2008/01/30(水) 22:31:16コンパイルは無事できたんですが、実行するとエラーが出てしまいます。
ttp://www9.plala.or.jp/sgwr-t/
のサイトの15-5にある例とほとんど同じに作ったつもりなんですが…
0440デフォルトの名無しさん
2008/01/30(水) 22:33:090441デフォルトの名無しさん
2008/01/30(水) 22:41:53http://applis.servehttp.com/index.htm
の00006387.cです。パスはtest。
ほとんど同じなのになんでダメなんだろう。恥ずかしい…
0442デフォルトの名無しさん
2008/01/30(水) 22:41:57a.exa とかタイプしたんじゃねーの?
きっとエラーメッセージは command not found だべ。
0443デフォルトの名無しさん
2008/01/30(水) 22:42:51どうかよろしくお願いします。
0444デフォルトの名無しさん
2008/01/30(水) 22:47:518行目 table の大きさは?
0445デフォルトの名無しさん
2008/01/30(水) 22:49:23というかアイコンをダブルクリックして実行してますのでそれはないです。
一応コマンドプロンプトからそれを確認しつつ実行しましたがダメでした。
0446デフォルトの名無しさん
2008/01/30(水) 22:50:210447デフォルトの名無しさん
2008/01/30(水) 22:52:37あの、c言語使うときのお勧めのテキストエディタってなんですか?
フリーでお願いします・・・
総合環境はいらないです・・・・
0448デフォルトの名無しさん
2008/01/30(水) 22:53:39メモ帳 or vi
0449デフォルトの名無しさん
2008/01/30(水) 22:54:27大きさ指定したら実行できました!でも無限ループするようになってしまいました。
ちょっと急用ができたため後で自力で直そうと思います。
ありがとうございました。
0450デフォルトの名無しさん
2008/01/30(水) 22:55:49検索したら
http://www.forest.impress.co.jp/lib/offc/document/txteditor/
のサイトがでてきたんですがK2Editorとかはだめなんですかね?
0451デフォルトの名無しさん
2008/01/30(水) 23:00:38emacs サクラエディタ 秀丸エディタ
0452デフォルトの名無しさん
2008/01/30(水) 23:04:580453デフォルトの名無しさん
2008/01/30(水) 23:32:43それかvim
0454デフォルトの名無しさん
2008/01/30(水) 23:43:250455デフォルトの名無しさん
2008/01/31(木) 00:50:460456デフォルトの名無しさん
2008/01/31(木) 00:51:310457デフォルトの名無しさん
2008/01/31(木) 00:56:37どうすれば出来ますか
0458デフォルトの名無しさん
2008/01/31(木) 00:57:100459デフォルトの名無しさん
2008/01/31(木) 01:01:19まずVRAMとかフレームバッファとか言われているメモリへのアクセス方法をぐぐってみるのはどうだろうか?
0460デフォルトの名無しさん
2008/01/31(木) 01:03:530461デフォルトの名無しさん
2008/01/31(木) 15:43:59void func1()
{
char buff[16];
scanf_s("%s", buff, sizeof(buff)); // ←こいつを
}
// func1とは別スレッドで実行
void func_2()
{
// ここから終了させたい
}
0462デフォルトの名無しさん
2008/01/31(木) 17:40:280463デフォルトの名無しさん
2008/01/31(木) 17:46:000464デフォルトの名無しさん
2008/01/31(木) 20:40:07身長の低い順に氏名、学籍番号、身長を画面に出力するプログラムを作成せよ」という問題がでました。
まず、クイックソートのプログラムとしては
#include <stdio.h>
void quick_sort(int sort_data[], int start_index, int end_index )
{
int ascending_index = start_index;
int descending_index = end_index;
int temp_data;
int pivot_value = sort_data[start_index + (end_index - start_index )/2 ];
printf("quicksort %d - %d ",start_index,end_index);
printf("pivot_value %d\n",pivot_value);
do{
while (sort_data[ascending_index] < pivot_value)
ascending_index++;
while (sort_data[descending_index] > pivot_value)
descending_index--;
if (ascending_index > descending_index)
break;
temp_data = sort_data[ascending_index];
sort_data[ascending_index] = sort_data[descending_index];
sort_data[descending_index] = temp_data;
} while ( ++ascending_index <= --descending_index );
if (descending_index > start_index )
quick_sort(sort_data, start_index, descending_index );
if(ascending_index < end_index)
quick_sort(sort_data, ascending_index, end_index );
return;
}
という感じになりました。
0465デフォルトの名無しさん
2008/01/31(木) 20:44:30#include <stdio.h>
#define NAME_MAX 20
struct student_data{
int number ;
char name[NAME_MAX+1];
double height;
};
int main (void)
{
#define STUDENT_DATA_MAX 5
struct student_data input_data[STUDENT_DATA_MAX];
struct student_data * data_p;
int input_count;
for (input_count=0; input_count < STUDENT_DATA_MAX; input_count +=1){
printf("Student number->");
scanf("%d",&input_data[input_count].number);
printf("Name->");
scanf("%s",input_data[input_count].name);
printf("Height->");
scanf("%lf",&input_data[input_count].height);
}
for (input_count=0,data_p = input_data;
input_count < STUDENT_DATA_MAX;
input_count +=1, data_p ++){
printf("%d ",data_p->number);
printf("%s ",data_p->name);
printf("%lf\n ",data_p->height);
}
return 0;
}
までは自分でやってみたのですが、この2つを組み合わせる方法が分りません。どなたか教えていただけませんか?
0466デフォルトの名無しさん
2008/01/31(木) 22:15:460467デフォルトの名無しさん
2008/01/31(木) 23:16:19{
:
}
int main (void)
{
:
}
の順に並べればよろし
0468デフォルトの名無しさん
2008/01/31(木) 23:34:570469デフォルトの名無しさん
2008/01/31(木) 23:35:440470デフォルトの名無しさん
2008/01/31(木) 23:41:20ここで処理を終了しますって意味で明示的にreturn;するのはあり。
0471デフォルトの名無しさん
2008/01/31(木) 23:43:320472デフォルトの名無しさん
2008/01/31(木) 23:47:57できたらテンプレート周りが楽になりそうだけど
0473デフォルトの名無しさん
2008/01/31(木) 23:49:05void bar() { return foo(); }
は gcc だと警告吐かれた。
もちろん g++ だと大丈夫だった。
0474デフォルトの名無しさん
2008/01/31(木) 23:50:08VC6 あたりはできないけど、規格上大丈夫になってるよ。
多分、そのテンプレート周りを考慮しての決定なんだろうと思ってる。
0475デフォルトの名無しさん
2008/02/01(金) 03:54:41POSIX環境でのマルチスレッドプログラムについて教えてください。
POSIXスレッドを使ったマルチスレッドプログラムで、
特定のスレッドのみ指定時間Sleepさせる方法はありますか?
0476デフォルトの名無しさん
2008/02/01(金) 04:13:480477デフォルトの名無しさん
2008/02/02(土) 14:34:2812 34 56
34 56 78
…
みたいなのはfscanf(fp,"%d %d %d\n",x,y,z);
でいけるのはわかったのですが
12,34,56,
67,89,10,
…
みたいなのは、どうやって読み込むのでしょうか
また、ファイルによってスペースだったりカンマだったり
列が3列だったり5列だったり…とあって
どうやって条件分岐させていくのか検討がつきません
0478デフォルトの名無しさん
2008/02/02(土) 14:39:480479デフォルトの名無しさん
2008/02/02(土) 15:38:14そのやり方を教えて下しあ><
0480デフォルトの名無しさん
2008/02/02(土) 15:50:11printf("古いファイル名を入力\n");
gets(oldname);
printf("名前1を入力\n");
gets(nam1);
printf("名前2を入力\n");
gets(nam2);
sprintf(newname,"%s%s\n",nam1,nam2);
if (rename(oldname,newname) == 0;
printf("%sを%sに変更しました\n",oldname,newname);
こんな感じでsprintfで格納した変数でリネームしたいのですが
上手くいきませんでした。良い方法ありましたら教えてください神様。
0481デフォルトの名無しさん
2008/02/02(土) 15:52:22なにこれ
0482デフォルトの名無しさん
2008/02/02(土) 15:58:29fscanf(fp,"%d,%d,%d\n",x,y,z);
0483デフォルトの名無しさん
2008/02/02(土) 16:06:29fgetsして、strspn等str*系関数を使う。
0484デフォルトの名無しさん
2008/02/02(土) 16:53:380485デフォルトの名無しさん
2008/02/02(土) 16:58:390486デフォルトの名無しさん
2008/02/02(土) 17:01:03すみません、タイプミスでした。
if (rename(oldname,newname) == 0);
>>483
なるほど!アドバイスありがとうございます!
0487デフォルトの名無しさん
2008/02/02(土) 17:03:32なにこれ
0488デフォルトの名無しさん
2008/02/02(土) 17:03:330489デフォルトの名無しさん
2008/02/02(土) 17:53:31http://www1.cts.ne.jp/~clab/hsample/Func/Func08.html
0490デフォルトの名無しさん
2008/02/02(土) 19:07:33すみません、タイプミスでした。
if (rename(oldname,newname) == '\0');
0491デフォルトの名無しさん
2008/02/02(土) 19:07:580492デフォルトの名無しさん
2008/02/02(土) 19:25:02なにこれ -> '\0'
0493デフォルトの名無しさん
2008/02/02(土) 19:55:44どこで見ることができるのでしょうか?
0494デフォルトの名無しさん
2008/02/02(土) 19:58:370495デフォルトの名無しさん
2008/02/02(土) 19:58:500496デフォルトの名無しさん
2008/02/02(土) 20:54:53stdio.hにあるのは関数を使えるようにするための宣言だけ。
関数の実装はリンカがリンク時にくっつけるライブラリファイルの中にある。
コンパイラによってはソースが公開されてたりもする。
0497デフォルトの名無しさん
2008/02/02(土) 21:05:55すみません、タイプミスでした。
if (rename(oldname,newname) != EOF);
0498デフォルトの名無しさん
2008/02/02(土) 22:29:56なにこれ
0499デフォルトの名無しさん
2008/02/02(土) 22:35:05雑談スレに書いたのですがレスがもらえなかったので
良かったら評価のほうしていただけますか?
http://toku.xdisc.net/cgi/up2/frew.html
のxs5050のファイル
友人の組んだC言語のプログラムなのですが本職の人から見たら
どの程度なのでしょう?
(プログラマーとして就職できる、中学生レベル等)
友人は2ちゃん嫌いのため代理しました。許可は取ってます。
ウイルスなどはありません。
よろしくお願いします
説明
====================
Zバッファ法でつくりました。
ポリゴンと視線の交点の座標をテクスチャ座標に
変換して。テクスチャマッピングしてます。
C言語で組みました。
DDraw,D3Dは使っていません。
====================
0500デフォルトの名無しさん
2008/02/02(土) 22:39:200501デフォルトの名無しさん
2008/02/02(土) 22:50:05書き方や考え方知るにもソースないんじゃ何も言いようが無い
0502デフォルトの名無しさん
2008/02/02(土) 22:58:55コードを書く力ってことなら、趣味の学生に負けてる職業プログラマっていっぱいいるしなぁ。
っていうか、趣味っていえるくらいプログラミングに時間をつかってて、それを数年も続けているなら、
職業プログラマの上位30〜50%以上には入ってるんじゃないの?
0503デフォルトの名無しさん
2008/02/02(土) 23:14:280505デフォルトの名無しさん
2008/02/02(土) 23:22:090506デフォルトの名無しさん
2008/02/02(土) 23:25:15reallocでchar分を512個分にし、文字列を追加したいんですが、
どうすればできますかね?
0507デフォルトの名無しさん
2008/02/02(土) 23:27:39ふつーstrcat() だけど、そういう意味じゃなくて?
0508デフォルトの名無しさん
2008/02/02(土) 23:38:01あまり大き過ぎても答えられないかもしれないし、ほどほどに
0509デフォルトの名無しさん
2008/02/02(土) 23:39:38char* p = (char*)calloc(256,sizeof(char));
(文字列を入れる処理)
p = (char*)realloc((void*)p,512);
(文字列を追加する処理)
0510デフォルトの名無しさん
2008/02/02(土) 23:48:53callocとreallocはそれぞれ別々のポインタを使って処理したいんですが、どうすればいいですかね?
0511デフォルトの名無しさん
2008/02/02(土) 23:51:36なら、realloc意味なくね?
0512デフォルトの名無しさん
2008/02/02(土) 23:53:22reallocに渡すポインタとリターン値を受けるポインタを別々にしたいってことかもよ。
0513デフォルトの名無しさん
2008/02/02(土) 23:54:220514デフォルトの名無しさん
2008/02/02(土) 23:56:51(文字列を入れる処理)
char *pr = ((char*)realloc((void*)pc,512))+256;
(文字列を追加する処理)
free((void*)pc);
0515デフォルトの名無しさん
2008/02/03(日) 00:34:14if(buf == NULL)
{
puts("確保失敗")
}else{
buf = "文字列";
char *tmp = (char *)realloc(buf,512);
if(tmp == NULL)
{
puts("領域の変更に失敗")
}else{
buf = tmp;
文字列追加処理
}
}
free(buf);
return 0;
}
0516デフォルトの名無しさん
2008/02/03(日) 00:35:340517デフォルトの名無しさん
2008/02/03(日) 00:37:15> buf = "文字列";
この行は
strcpy(buf, "文字列");
だよ。
0518デフォルトの名無しさん
2008/02/03(日) 00:38:06ここは、
strcat(buf, "追加文字列");
だよ。
0519デフォルトの名無しさん
2008/02/03(日) 00:46:130520499
2008/02/03(日) 02:25:54のxs5090のファイルです<(_ _)>
>>505
友人がニートなのですが就職できるか
知りたいと思って聞いてみたいと思いました。
(そのことでよく喧嘩になるので客観的な評価が欲しいと)
>>508
一部でも結構です。すいませんです。
0521デフォルトの名無しさん
2008/02/03(日) 02:31:30コメントが少なすぎて解読に手間が掛かる
0522デフォルトの名無しさん
2008/02/03(日) 02:34:340523デフォルトの名無しさん
2008/02/03(日) 02:36:550524デフォルトの名無しさん
2008/02/03(日) 02:39:51就職できるかどうかっていう観点でレスすると
プログラムの書き方はかなり問題があるがこれだけできるなら
本人さえやる気出せば就職できるところは見つかるだろう(年齢によるけど
中小の会社なら実力は未経験に近くても人柄が気に入られればとってくれるところは多いぞ
0525499
2008/02/03(日) 02:44:45専門用語は私には、よく分からないのでコピペして
伝えておきます。
ありがとうございます。
>>524
そうですか。友人は口は達者なんですけど
一応、やればできるってことですね。
ありがとうございました。
0526デフォルトの名無しさん
2008/02/03(日) 02:49:51このtxt分で何時間かかったかにもよるけど。
0527デフォルトの名無しさん
2008/02/03(日) 02:51:08一応補足しておくと就職試験やらで520のソースを出されたらさすがに取ってくれる会社はほぼないと思います。
仕事にしたいなら他の人もいってるように関数分けるとかソースわけるとかコメント増やすとか
プログラムの書き方もう少しきちんとしたほうがいいです。
要はやる気出して勉強すれば就職するだけなら無理ではないよってことで。
0528デフォルトの名無しさん
2008/02/03(日) 03:00:11とりあえずそれを踏まえつつここを読んでおくように言っておくといいよ。
ttp://www.pro.or.jp/~fuji/mybooks/cdiag/
0529デフォルトの名無しさん
2008/02/03(日) 03:17:29新卒じゃないならC++くらい扱えたほうがいいなぁ
0530デフォルトの名無しさん
2008/02/03(日) 03:27:340531デフォルトの名無しさん
2008/02/03(日) 03:30:32rename() が失敗したときは非零の値を返すのだから(K&R2)
if (rename(oldname, newname) == 0)
でいいと思います。
それから、これは明らかに「タイプミス」ではないですよ。用語に注意。
0532デフォルトの名無しさん
2008/02/03(日) 04:49:33まだまだ…(中略)…まだまだ改善の余地がある
1.コピペしすぎ
2.グローバル変数多すぎ
3.命名規則が不明
4.即値使いすぎ
5.構造体にメンバ多すぎ
と知ったかぶってレスしてみる
0533デフォルトの名無しさん
2008/02/03(日) 04:54:140534デフォルトの名無しさん
2008/02/03(日) 04:54:420535デフォルトの名無しさん
2008/02/03(日) 08:50:21すみません、タイプミスでした。
#include<stdio.h>
int main(void)
{
printf("古いファイル名を入力\n");
gets(oldname);
printf("名前1を入力\n");
gets(nam1);
printf("名前2を入力\n");
gets(nam2);
sprintf(newname,"%s%s\n",nam1,nam2);
while (rename(oldname,newname) != 0)
{
printf("%sを%sに変更しました\n",oldname,newname);
}
return 0;
}
0536デフォルトの名無しさん
2008/02/03(日) 08:57:00見づらいよ
0537デフォルトの名無しさん
2008/02/03(日) 10:38:27さらにその複数の引数の組もマクロで定義したいんですが、上手く出来ません。
例えば次のようなコードです。
#include <stdio.h>
#define KAKE(X,Y) (X*Y)
#define TWO_ARGS "4,5"
void main()
{
int ret;
ret = KAKE(4,5); // これはエラーとならない
ret = KAKE(TWO_ARGS); // コンパイルエラー
printf("%d\n", ret); // 20と表示される事を期待している
}
0538537
2008/02/03(日) 10:39:00「マクロ 'KAKE' に指定された実引数の数が少なすぎます。」
と出ています。
エラーが発生している文『ret = KAKE(TWO_ARGS);』が
マクロにより『ret = KAKE(4,5);』と展開される事を期待したのですが
『4,5』が一つの文字列リテラルとして扱われているような気がします。
ちなみに
『#define TWO_ARGS "4,5"』の行を
『#define TWO_ARGS (4,5)』としても
『#define TWO_ARGS 4,5』としても上手くいきませんでした。
何か良い方法はないでしょうか?
0539デフォルトの名無しさん
2008/02/03(日) 11:12:57でいいと思うが
0540デフォルトの名無しさん
2008/02/03(日) 11:14:52#include <stdio.h>
#define KAKE(x, y) ((x)*(y))
#define KAKE_(x) KAKE(x)
#define TWO_ARGS 4, 5
int main() {
int ret;
ret = KAKE(4, 5);
ret = KAKE_(TWO_ARGS);
printf("%d\n", ret);
return 0;
}
0541デフォルトの名無しさん
2008/02/03(日) 11:30:47537じゃないけど、コンパイラ教えて。
VC2005だと通らない
0542デフォルトの名無しさん
2008/02/03(日) 11:50:150543デフォルトの名無しさん
2008/02/03(日) 11:52:47規格違反ではないと思う。多分。
0544デフォルトの名無しさん
2008/02/03(日) 11:58:32勝手にインデントが消えちゃうんだよ。
インデントを残す方法を教えてケロ
0545デフォルトの名無しさん
2008/02/03(日) 11:59:27スペースで代用するしかない
0546デフォルトの名無しさん
2008/02/03(日) 12:03:29専ブラ入れてポップアップさせれば
専ブラによってはインデントされて見える。
例えば俺の使ってる V2C は、
レス番号を打ち込むか、レス番号に相当する数値を選択してクリックすると、
レスアンカーがなくてもポップアップしてくれる。
0547デフォルトの名無しさん
2008/02/03(日) 12:12:36もしかして全角スペースか?
0548デフォルトの名無しさん
2008/02/03(日) 12:16:00ブラウザ上でインデントを付ける事は可能。
0549デフォルトの名無しさん
2008/02/03(日) 12:26:49 あ
あ
0550デフォルトの名無しさん
2008/02/03(日) 12:27:180551デフォルトの名無しさん
2008/02/03(日) 12:51:00こっちはあんどえぬびいせぴいせみころん
こっちは全角スペース
0552デフォルトの名無しさん
2008/02/03(日) 12:54:58基本的には半角スペースが表示されるが、
専ブラでコピペすると nbsp が保存されることがある罠。
0553デフォルトの名無しさん
2008/02/03(日) 14:35:01Pythonじゃあるまいし
0554デフォルトの名無しさん
2008/02/03(日) 14:39:40こういう事平気で言えるの人の書くプログラムは読みたくないな
0555デフォルトの名無しさん
2008/02/03(日) 14:49:25インデントは計画的に。
0556デフォルトの名無しさん
2008/02/03(日) 14:59:290557デフォルトの名無しさん
2008/02/03(日) 15:08:572chなんだし見やすくしたい人はやるし、どーでもいい人は別にそのままでいいと思う
0558デフォルトの名無しさん
2008/02/03(日) 15:12:010559デフォルトの名無しさん
2008/02/03(日) 15:13:380560デフォルトの名無しさん
2008/02/03(日) 15:13:510561デフォルトの名無しさん
2008/02/03(日) 17:41:010563デフォルトの名無しさん
2008/02/03(日) 18:18:38失礼な奴だ
0564デフォルトの名無しさん
2008/02/03(日) 18:24:150565デフォルトの名無しさん
2008/02/03(日) 20:23:21for文を使い、\0まで達するまでiをインクリメントし数えるのと、
strlenを使うのとでは、どちらのほうが早いですか?
0566デフォルトの名無しさん
2008/02/03(日) 20:30:200567デフォルトの名無しさん
2008/02/03(日) 20:32:02CPUにあわせて最適化してあるかもしれないし
0568デフォルトの名無しさん
2008/02/03(日) 20:41:480569デフォルトの名無しさん
2008/02/03(日) 20:52:30速いかどうかだと実測あるのみ。
0570デフォルトの名無しさん
2008/02/03(日) 20:59:150571デフォルトの名無しさん
2008/02/03(日) 20:59:520572デフォルトの名無しさん
2008/02/03(日) 21:08:57APIの時に、やれって言われたんだが。
意味が分からん。他の種類とかも教えてケロ
0573デフォルトの名無しさん
2008/02/03(日) 21:10:27コンパイラのマニュアル見れよ。
0574デフォルトの名無しさん
2008/02/03(日) 21:12:20memcpyなんかわざわざロングでコピーして端数を調整したりとか
0575デフォルトの名無しさん
2008/02/03(日) 21:18:12のってなかったお。簡単な説明しかみつからないお。
0576デフォルトの名無しさん
2008/02/03(日) 21:21:53コンパイラの名前を書かないとわからんよ。
警告のレベルだと思うけど。
0577デフォルトの名無しさん
2008/02/03(日) 21:26:30cpad for borland c++compiler
0578デフォルトの名無しさん
2008/02/03(日) 21:29:120579デフォルトの名無しさん
2008/02/03(日) 21:30:47Borland C++ Compilerですか?
0580499
2008/02/03(日) 22:00:23すいません。長いプログラム読んでいただいたのに
失礼でした。すべてにレスしたいのですが
私がすると、とんちんかんなレスになってしまいそうなので…( ゜_゜;)
友人にはコピペして送ります。
すいませんでした。
スレ違い失礼しました。
0581デフォルトの名無しさん
2008/02/03(日) 22:07:10起動時にDOS窓が出なくなる。
てかコンパイラのリファレンスに載ってねぇわけないじゃん。
見てるの間違えてるか、見方分かんないか、見て無いか、どれかじゃね?
0582デフォルトの名無しさん
2008/02/03(日) 22:19:06見てないだな。
cpadの説明書睨んでたんだぜ
0584デフォルトの名無しさん
2008/02/04(月) 22:12:44以下プログラムの抜粋です。
m_sort(void* base,int n_elem,int size,int(*empare)(void*,void*))
{
void *x,*w;
x=base+(n_elem-1)/2;
ここでbase+(n_elem-1)/2はvoidポインタなのでxに代入すると
エラーが出てしまうのですが、関数の引数の
size=sizeof(int,char等)
と設定し、このsizeを使ってなんとか解決できませんか?
よろしくお願いします。
0585デフォルトの名無しさん
2008/02/04(月) 22:19:490586584
2008/02/04(月) 22:22:44無理でしょうか?
0587デフォルトの名無しさん
2008/02/04(月) 22:24:23要するに qsort みたいな関数を作りたいということ?
0588584
2008/02/04(月) 22:27:31その通りで、汎用関数を作りたいのです。
0589デフォルトの名無しさん
2008/02/04(月) 22:33:43>>585 のいう通りにすればおk
x=(char*)base+(n_elem-1)/2*size;
0590584
2008/02/04(月) 22:50:15え・・・と・・・
sizeを掛けるとその型になるんですか?
x=(char*)base+(n_elem-1)/2*size;
ってたぶん
x=(char*)base+((n_elem-1)/2)*size;
ですよね?
0591デフォルトの名無しさん
2008/02/04(月) 22:53:26x = (char *)base + size * (n_elem - 1);
0592584
2008/02/04(月) 22:58:05やっと意味が分かりました・・・
charポインタ扱いにして、サイズ分だけずらしていけばいいんですね!
どうもありがとうございました・・・
0593デフォルトの名無しさん
2008/02/05(火) 00:03:04>>430
空白の部分に全角入ってるからエラーが出てるってことですか?
0594デフォルトの名無しさん
2008/02/05(火) 01:29:54空白には全角スペース、半角スペースがある。
一般的にコンパイラは全角文字を受け付けない。もちろんリテラルは別。
エディタの設定等で全角スペースに色をつけることもできる。
全置換で全角スペースを半角スペースに変換するのでもいい。
0595デフォルトの名無しさん
2008/02/05(火) 09:25:56問題・解答等を教えて欲しいのですが?
いないかぁ..
0596デフォルトの名無しさん
2008/02/05(火) 09:39:440597デフォルトの名無しさん
2008/02/05(火) 13:51:18みたいな配列を同じ数字(例えば0)で初期化したいのですが、
for(i=0;i<256;i++)
{
num[i]=0;
}
みたいに一個づつ入れるしかないでしょうか?
0598デフォルトの名無しさん
2008/02/05(火) 14:06:34配列宣言時なら、
int num[256] = {0,}で0にはできる。
そうでないなら、地道に入れるしかないんじゃないかな。
# 勿論、C++のstd::fill()のような関数に仕立てておくのはあり。
0599デフォルトの名無しさん
2008/02/05(火) 14:22:08その形でいくつか試してみたところ、例えば
int num[256] = {1,};
だと一個目の要素だけが1になって、残りは全部0になったのですが、これは、
「初期化すると、{}内で個数が足りてない要素は全部0で初期化される」
という解釈で良いのでしょうか?
0600デフォルトの名無しさん
2008/02/05(火) 14:39:24いいよ。
そういう時は、アセンブラで出力してみることと規格を探してみることの両方やるといい。
0601デフォルトの名無しさん
2008/02/05(火) 14:41:49はじめたばかりで今のところアセンブラとかさっぱりですが、心の隅にとどめておきます。
0602598
2008/02/05(火) 14:47:230以外にもいろいろ使う積もりなら、こんな関数でも作っておいたら?
void fillInt(int * foo, unsigned size, int val) {for (unsigned ic = 0; ic < size; ++ic) foo[ic] = val;}
0603デフォルトの名無しさん
2008/02/05(火) 14:50:220604デフォルトの名無しさん
2008/02/05(火) 14:51:040605313
2008/02/05(火) 18:17:03C言語で何をするかが、分りません。
皆さんは、C言語で何をしてるんですか?
0606デフォルトの名無しさん
2008/02/05(火) 18:20:410607デフォルトの名無しさん
2008/02/05(火) 18:20:440608605
2008/02/05(火) 18:34:02冬休みで、暇なのでとりあえず違う言語の勉強をしようと思ってます。
いろいろ調べて、「C言語は基本」っていろんなホームページで書いてありました。
でも、C言語はGUIのアプリケーションを作れないし、ネット環境でも使わないと書いてありました。
0609605
2008/02/05(火) 18:34:570610デフォルトの名無しさん
2008/02/05(火) 18:39:010611デフォルトの名無しさん
2008/02/05(火) 19:10:090612デフォルトの名無しさん
2008/02/05(火) 19:45:40オススメのコンパイラないですか?
0613デフォルトの名無しさん
2008/02/05(火) 19:51:57なぜベクター限定・・・・・・
0614デフォルトの名無しさん
2008/02/05(火) 19:57:32使いなれてる?サイトだからです。
だから
なるべくベクターでお願いします
0615デフォルトの名無しさん
2008/02/05(火) 20:20:110616デフォルトの名無しさん
2008/02/05(火) 20:24:220617デフォルトの名無しさん
2008/02/05(火) 20:26:56そもそも、そんな甘えを言ってる時点で
プログラムなんてできるわけがない。
0618デフォルトの名無しさん
2008/02/05(火) 20:52:28main () {
char *s;
scanf("%s",s);
return0;
}
上記のようなプログラムを作成し、実行しました。
すると、
入力が「111111111111111」のときは正常終了したのですが、
入力が「1111111111111111111111111111」のときはセグメント例外がおきてしまいました。
ここで質問です。なぜ二度目の実行でセグメント例外が起きてしまったのでしょうか?
自分は、「ポインタ宣言時に確保したメモリの範囲外に書き込もうとしため」と考えたのですが、そもそも一度目の実行で1byte(char一個分)以上の入力ができてしまっていますよね。この時点で、理由がわかりません。
よろしくお願いします。
0619デフォルトの名無しさん
2008/02/05(火) 20:57:36char *s;
に1byteだろうが突っ込むこと自体が間違い
短いときうまくいったのはたまたま指している先が書き込めるとこだったというだけ
0620デフォルトの名無しさん
2008/02/05(火) 21:21:41正常終了したのはたまたま運が良かっただけ。
そのプログラムには文字列を格納する領域が1bitたりとも確保されていない。
0621デフォルトの名無しさん
2008/02/05(火) 22:14:45ヘッダーファイルに書いている#defineの値をコンパイル時のオプションで
変更できると聞いたのですがどう指定すればいいのでしょうか?
0622デフォルトの名無しさん
2008/02/05(火) 22:22:17BCCだけど、同じオプションでいけないかな?
http://www.geocities.jp/bleis_tift/cpp/option.html#define
コンパイラマニュアルを探した方が早いと思うよ。
0623デフォルトの名無しさん
2008/02/05(火) 23:01:24Cは基本だなんてとんでもない。
プロが使う、使い方を間違えると大怪我をする、切れ味の鋭い包丁みたいなもんだ。
食事用のナイフならpythonとかjavaとかVBとかをどうぞ。
0624デフォルトの名無しさん
2008/02/05(火) 23:18:34お前はそうなんだろうな
0625デフォルトの名無しさん
2008/02/05(火) 23:18:50改行コードがCF+LFになってしまいます。改行コードをLF
にすることは可能でしょうか。
ちなみにファイルに情報を書き込む際の
改行コードは'\n'を使用しています。
0626デフォルトの名無しさん
2008/02/05(火) 23:19:51バイナリモードでfopen()
0627デフォルトの名無しさん
2008/02/05(火) 23:26:29えっそんな簡単な方法で良いんですか?
0628デフォルトの名無しさん
2008/02/05(火) 23:27:040629デフォルトの名無しさん
2008/02/05(火) 23:29:58念のためにいっとくけど改行コードの扱い方が変わるからな
(そんな変わらんけど。単に'\n’だと思ってればよかったあの頃とは違うだけで)
ただ開き方かえるだけじゃないからな
0630デフォルトの名無しさん
2008/02/05(火) 23:39:50"br"でfopenするのは当然なんでしょうけど。
どうもありがとうございました。
0631デフォルトの名無しさん
2008/02/06(水) 00:05:59*p++ = a * b;
この計算式は どういう順序になるのでしょうか?
a×bの値がpに入り pのアドレスが++ ?
0632デフォルトの名無しさん
2008/02/06(水) 00:09:340633デフォルトの名無しさん
2008/02/06(水) 00:26:18まぁ、"r"で入力しておいて"wb"で出力ってのもありだけどね。
0634デフォルトの名無しさん
2008/02/06(水) 01:36:04それであってるのかぁ..
あと
(*p)++;
は pの値が++されるだけですか?
0635デフォルトの名無しさん
2008/02/06(水) 01:42:040636デフォルトの名無しさん
2008/02/06(水) 01:58:03いや、だれだってそうだろう。Cが簡単とか基本とか誰がデマながしとんのや?
0637デフォルトの名無しさん
2008/02/06(水) 03:05:16決してお手軽ではないけどね。
0638デフォルトの名無しさん
2008/02/06(水) 06:49:280639デフォルトの名無しさん
2008/02/06(水) 06:57:55まるで、「英語は簡単じゃない」って言うようなもんだぞ。
0640デフォルトの名無しさん
2008/02/06(水) 07:05:04>>637
>>639
早く寝ろよニート
0641デフォルトの名無しさん
2008/02/06(水) 07:20:100642デフォルトの名無しさん
2008/02/06(水) 07:22:560643デフォルトの名無しさん
2008/02/06(水) 07:58:49とりあえずはじめるのに参考になるサイトは山ほどあるから。
0644デフォルトの名無しさん
2008/02/06(水) 08:50:58アドレスが++されるんでしょうか?
0645デフォルトの名無しさん
2008/02/06(水) 08:56:00*pがアドレスならば、そうなります。
つまり、インクリメントされるのはpではありません。
0646デフォルトの名無しさん
2008/02/06(水) 14:36:04maximize
14
plum 4 4500
apple 5 5700
orange 2 2250
strawberry 1 1100
melon 6 6700
------------------------
fscanf(fp,"%s%d",i,j);
while(fscanf(fp,"%s%d%d",x[i].name,&(x[i].size),&(x[i].price)) ==3)
i++;
dp2.txtというファイルの中身を読みだして、引数に代入したいのですが
上のプログラムの場合、2回目のfscanfで読みだすのはplumからでしょうか?それともファイルの始めにもどってしまうのでしょうか?
よろしくお願いします。
0647デフォルトの名無しさん
2008/02/06(水) 14:48:390648デフォルトの名無しさん
2008/02/06(水) 14:48:51plumから
実際に試せばわかりそうなものだが
0649デフォルトの名無しさん
2008/02/06(水) 21:32:43今ソケットの勉強をしてるんですが同期非同期について小学生でもわかるような説明を誰かしてくれませんか?
ちょっとしたチャットアプリを作成しようと思ってるんです。
調べた結果、
同期:送信側と受信側が同じ時間をすごす=同期がとれてるといった言葉のとおり。
非同期:送信側は受信側の都合を考えずにデータを投げる、受信側はどんな状態だろうがそれを受け取り処理をして、できあがったら応答する。
だと思うんですけど、いまいち自分で何を言っているかわかってないんです('A`)
もっと分りやすく相手にも伝えられるようにするにはなんていえばいいんでしょうか・・・。
0650デフォルトの名無しさん
2008/02/06(水) 21:35:380651デフォルトの名無しさん
2008/02/06(水) 21:41:280652デフォルトの名無しさん
2008/02/06(水) 22:11:01第6回 万年カレンダー(2)
キーボードから年と月を入力し、その月のカレンダーを表示する。
47 :ha:2008/02/06(水) 22:01:47
#include <stdio.h>
int is_bissextile(int year)
{
/*
閏年かどうか判定する関数
閏年なら1,そうでなければ0を返す
*/
int bis;
if((year % 400) == 0 || ((year % 4) == 0 && (year % 100) != 0)){
bis = 1;
}
else {
bis = 0;
}
土曜日の場合は,既に入っているので入れない
*/
if((first_dow + i)%7!=1) printf("\n");
}
0653デフォルトの名無しさん
2008/02/06(水) 22:11:57丸投げじゃねーかwwww
宿題スレいけw
0654デフォルトの名無しさん
2008/02/06(水) 22:12:06bis = ( year % 400 == 0 || (year % 4 == 0 && year % 100 != 0));
*/
return bis;
}
main()
{
/*
2008年2月のカレンダーを表示する
2月1日が金曜日であることがわかっているものとする
(課題では,前回のプログラムを使って1日の曜日を計算する)
*/
int year = 2008;
int month = 2;
int first_dow = 5; /* 1日は金曜日 */
int i;
int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if(is_bissextile(year)) { /* 閏年なら,2月を29日までにする */
days[1] = 29;
}
printf(" %d年%2d月\n", year, month);
printf("日 月 火 水 木 金 土\n");
0655デフォルトの名無しさん
2008/02/06(水) 22:12:36すいませんwww行ってきますwwwwww
0657デフォルトの名無しさん
2008/02/06(水) 22:25:26なるほど、やってみます!
0658デフォルトの名無しさん
2008/02/06(水) 22:54:20一つ目は、fgetsとgets関数の違いは簡単に言えば、文字数が指定できるか否かでしょうか?
二つ目は、もしfgets関数で最後NULL文字を考慮しないと、どうなるのでしょうか?
0659デフォルトの名無しさん
2008/02/06(水) 22:59:57改行文字の扱いが違う
null文字を考慮しないって?char配列より大きい文字列突っ込ませようとするってこと?
はみ出した先が書き込めたりしてうまく動くこともあるけどやっちゃだめ
0660デフォルトの名無しさん
2008/02/06(水) 23:29:15違いは、使っていいものと絶対使っちゃダメなもの。
0661デフォルトの名無しさん
2008/02/06(水) 23:30:56バグ
gets() は絶対に使用してはならない。
前もってデータを知ることなしに gets() が何文字読むかを知ることはできず、
gets() がバッファの終わりを越えて書き込み続けるため、
gets() を使うのは極めて危険である。
これを利用してコンピュータのセキュリティが破られてきた。
代わりに fgets() を使うこと。
0662658
2008/02/06(水) 23:40:22>>659->>660
>>改行文字の扱いが違う
>>違いは、使っていいものと絶対使っちゃダメなもの。
とは・・・・?考えてもピントきませんです。。。
>>661
はい、何だか難しいですが、要するにバッファオーバーフローですね。
0663デフォルトの名無しさん
2008/02/06(水) 23:43:18入力の最後のenter押して終わったときにその改行文字が格納されるかどうかです
0664658
2008/02/06(水) 23:44:33サンクスです、ってきり文字数が指定できるか、どうかだと思っていました。
0665デフォルトの名無しさん
2008/02/07(木) 00:10:06>>とは・・・・?考えてもピントきませんです。。
>>661
getsを例にした入門書やサンプルがあるかも知れないけど、gets使う癖がつくこと自体が危険なので使わないこと。
0666デフォルトの名無しさん
2008/02/07(木) 00:11:40とかだとオーバーフロー防げるとかどこかのサイトで見たけど大丈夫なん?
0667デフォルトの名無しさん
2008/02/07(木) 00:13:26char str[256]に対してなら大丈夫です。
0668デフォルトの名無しさん
2008/02/07(木) 00:17:280669デフォルトの名無しさん
2008/02/07(木) 00:17:39defineで例えばMAX 255にして
char str[MAX]だとした場合
scanf( "%MAXs" ,str );
はもちろん駄目だよね・・・となると汎用性が狭まるなぁ
0670デフォルトの名無しさん
2008/02/07(木) 00:22:39"%255s"という文字列を作ればいいだけじゃないか
0671デフォルトの名無しさん
2008/02/07(木) 00:23:30仕様があいまいだし危険だから使わない方がいいんだが。
自前でカンマやタブで分割してatoiとかatofとかで読むことをお勧めする。
0672デフォルトの名無しさん
2008/02/07(木) 00:25:070673デフォルトの名無しさん
2008/02/07(木) 00:28:16こんな感じでできなくはない。
#include <stdio.h>
#define S(x) # x
#define SS(x) S(x)
#define STR_LEN 255
void func()
{
char str[STR_LEN + 1];
scanf("%" SS(STR_LEN) "s", str);
}
でも、余り使い勝手はよくないのでfgets()を使えば?
0674デフォルトの名無しさん
2008/02/07(木) 00:28:24それでも×だろ。
0675デフォルトの名無しさん
2008/02/07(木) 00:29:440676デフォルトの名無しさん
2008/02/07(木) 00:31:07なにが×?
0677デフォルトの名無しさん
2008/02/07(木) 00:34:011バイト飛び出す。
0678デフォルトの名無しさん
2008/02/07(木) 00:35:250679デフォルトの名無しさん
2008/02/07(木) 00:43:24それがバグとなると探すのが死ねる
0680658
2008/02/07(木) 00:47:52サンクスでした。。。
0681デフォルトの名無しさん
2008/02/07(木) 00:49:21お前は絶対プログラマになるな
0682デフォルトの名無しさん
2008/02/07(木) 01:34:27Void bofw(const char *str2){
char str2[80];
strcat(str1, str2);
}
これは、 char str2[80]にstr1, str2を合体させたものを
入れると解釈して良いでしょうか?
もう一つは
Void bofw(const char *str2){
char str1[80];
strncat(str1, str2, sizeof(str1) -strlen(str1) -1)
これの、"-strlen(str1) -1"が理解できません、
特にsizeof(str1)から-strlen(str1)の部分です
どうして"-"引くのでしょうか?
0683デフォルトの名無しさん
2008/02/07(木) 01:52:10char str1[80]に合体して入れる際に、
sizeof(str1)で文字列がstr1分で、文字数がstr1-1分少ないと言う
感じで宜しいでしょうか?
0684デフォルトの名無しさん
2008/02/07(木) 01:58:17strcat(str1, str2) はstr1のうしろにstr2をくっつけたものをstr1にいれる
二つ目のstrlen(str1) + 1 は(str1にある文字列の長さ) + (ヌル文字)を表わしてて、
sizeof(str1)から引くことで、まだ使用されてない配列サイズを計算してるんだろう。
どちらのコードも少しおかしい気はするが。。。
(str2が二つあったり、初期化してなかったり)
0685デフォルトの名無しさん
2008/02/07(木) 02:23:44レス、ありがとうございます。
>>strcat(str1, str2) はstr1のうしろにstr2をくっつけたものをstr1にいれる
どうして、"char str2[80]; "としてあるのに、str1にいれるのでしょうか?
>>二つ目のstrlen(str1) + 1 は(str1にある文字列の長さ) + (ヌル文字)を表わしてて、
sizeof(str1)から引くことで、まだ使用されてない配列サイズを計算してるんだろう。
これに関しては、"あいうえお\など0"例を書いて戴けると真に幸いです・・・イメージしにくいのでorz
0686デフォルトの名無しさん
2008/02/07(木) 02:34:43一つ目はそのコード書いた人に聞いてくれよw
正直何がしたいのかよくわからんです。写し間違えしてない?
二つ目は、
char str[80] = "abcde";
とすると、
sizeof(str) == 80
strlen(str) == 5
だから、strの残りサイズは、80 - 5 - 1 = 74となる。(最後の-1はヌル文字の分)
strncatに74を渡すことで、あと74文字までつなげられるぞと言ってるわけ。
0687デフォルトの名無しさん
2008/02/07(木) 03:06:56わたくしは、「ちゃー!」って呼んでます
0688デフォルトの名無しさん
2008/02/07(木) 03:08:250689デフォルトの名無しさん
2008/02/07(木) 03:10:59ついでにいいですか?
C++←これは何てよむのですか
わたくしは、「シープラ」って言ってるのですが、隣の人が「シープラプラ」だというので
0690デフォルトの名無しさん
2008/02/07(木) 03:25:13日本ではシープラプラが多いです
0691685
2008/02/07(木) 04:13:09ありがとうございました。
理解できました、参考書を見直しても写した通りです。
0692685
2008/02/07(木) 04:55:24度々、申し訳ありませんが
結局は"strncat(str1, str2, sizeof(str1) -strlen(str1) -1)"
こうする事で何の意味(意義)があるのか、詳しく参考書に書いてありません
簡単にセキュrティ云々としか書いてありません
普通に"strcat(str1, str2)"で繋げてはいけないのでしょうか ?
0693685
2008/02/07(木) 04:59:28どうして、これが対策になるんですかね
0694デフォルトの名無しさん
2008/02/07(木) 05:13:33たとえば10文字しか入れられない領域に7文字と8文字を連結したらどうなる
0695デフォルトの名無しさん
2008/02/07(木) 06:42:48普通は、そこまでしてstrncat()なんか使わないし。
0696デフォルトの名無しさん
2008/02/07(木) 07:22:10str1 を初期化もしてないのに strcat/strncat なんてするわけがない。
0697デフォルトの名無しさん
2008/02/07(木) 08:07:500698デフォルトの名無しさん
2008/02/07(木) 11:32:38fgets(str, 256, stdin);
//色々処理
}while(str[0]);
キーボードから入力した文字列で色々処理して、何も入力せずEnterを押したら終了、
という処理をやろうと上のようなプログラムを書いたのですが、Enterを押してもループを抜けてくれません。
fgetsでEnterを押すだけだと、ヌル文字だけの文字列は代入されないのでしょうか?
0699デフォルトの名無しさん
2008/02/07(木) 11:37:340700デフォルトの名無しさん
2008/02/07(木) 11:48:04お邪魔しました。
0701デフォルトの名無しさん
2008/02/07(木) 12:05:210702デフォルトの名無しさん
2008/02/07(木) 13:26:47をエートワッって読むのは第2外国語に仏語を選んだマイノリティー
0703デフォルトの名無しさん
2008/02/07(木) 13:38:24,
echouant, mais une
,
fierte en tant que noble est forte
exceptionnellement.
0704682&685
2008/02/07(木) 17:19:15>>694
溢れてしまいます
>>695->>696
あまり、当てにしないようにします、かなり詳しい大先生方(皆さん)を当てにさせてもらいますw
あと、確認解釈の為、質問させて下さい整理できたので・・・
要するにこれは
Void bofw(const char *str2){
char str1[80];
strncat(str1, str2, sizeof(str1) -strlen(str1) -1)
>>686で書かれているように、74文字までしか格納できなと解釈していいのでしょうか?
0705デフォルトの名無しさん
2008/02/07(木) 17:28:400706デフォルトの名無しさん
2008/02/07(木) 17:30:260707デフォルトの名無しさん
2008/02/07(木) 19:25:44#define y2 456
・・・・
#define y99 10
x[0] = y1;
x[1] = y2;
・・・・・・・・・・
x[99] = y99;
こういうことをループを使って簡単にやる方法はないですか?
いちいち手作業で代入するのが面倒くさいです
0708デフォルトの名無しさん
2008/02/07(木) 19:27:200709デフォルトの名無しさん
2008/02/07(木) 19:28:31x[100] = {234, 456,……,10}って初期化したほうがよくね?
0710デフォルトの名無しさん
2008/02/07(木) 19:28:320711デフォルトの名無しさん
2008/02/07(木) 19:28:36#defineじゃなくてconst int hoge[]
みたいなので用意しとけば?Cなので配列の添え字とかには使えないのだけれど
0713デフォルトの名無しさん
2008/02/07(木) 19:30:29#define y1 234
#define y2 456
・・・・
#define y99 10
というフォマットでデータを複数保存していまして
別のデータを使うたびにいちいち手作業で代入するのが面倒くさいです
0714デフォルトの名無しさん
2008/02/07(木) 19:32:220715デフォルトの名無しさん
2008/02/07(木) 19:33:21x[i] = y(ここにiという数字が入る);
}
みたいなことはできないんですか?
0716デフォルトの名無しさん
2008/02/07(木) 19:33:470717デフォルトの名無しさん
2008/02/07(木) 19:34:390718デフォルトの名無しさん
2008/02/07(木) 19:38:11>>717
ありがとうございました
0719デフォルトの名無しさん
2008/02/07(木) 19:40:58#include <stdio.h>
main()
{
int z[] = {1,2,3,4,5,6,7,8,9};
int a = 10, c = 20;
int *pt_a, *pt_b, d;
pt_a = &a;
pt_b = z;
z[3] = *pt_a + 5;
*(pt_b + 1) = c;
pt_b += 2;
d = *pt_b;
pt_b += d;
*pt_a = *(pt_b + 1);
で printfで%dで出した場合
*pt_a *pt_b d z[1] z[2] z[3]
の値はいくつになりますかね? 教えて下さい。
0720デフォルトの名無しさん
2008/02/07(木) 19:41:450721デフォルトの名無しさん
2008/02/07(木) 19:46:09目で追うの面倒いから実行させてみた
順に 7, 6, 3, 20, 3, 15
っていうか自分で実行してみりゃ一発でわかるだろうに、なぜ訊くか
0722デフォルトの名無しさん
2008/02/07(木) 19:48:16define01.hとかにして必要なデータをincludeするか
ファイル操作つかえばいいよ
ファイル操作が分からないなら C言語 ファイル操作 でぐぐれ
0723デフォルトの名無しさん
2008/02/07(木) 20:52:51以外に別種の乱数が生成できるってやり方はないか?
0724デフォルトの名無しさん
2008/02/07(木) 21:08:09ここにgetsとか入れるとおもうんですがどうも上手くいきません
#include <stdio.h>
int main()
{
char szName[32];
printf("What is your name?---");
/* ここ */
printf("Your name is %s.\n", szName);
return 0;
}
初心者過ぎる質問ですが・・・
0725デフォルトの名無しさん
2008/02/07(木) 21:14:00として、とりあえずちゃんと日本語表示される?
0726デフォルトの名無しさん
2008/02/07(木) 21:17:53はい、ちゃんと表示できます。
0727デフォルトの名無しさん
2008/02/07(木) 21:39:08でいけるけど、gets使うのはなぁっていうのはまだ早いか。
とりあえずいける
0728デフォルトの名無しさん
2008/02/07(木) 21:44:210729デフォルトの名無しさん
2008/02/07(木) 21:51:32#include <stdio.h>
int main(int argc, char *argv[])
{
printf("Your name is %s.\n", argv[1]);
return 0;
}
としておいて、このソースでyournameという実行ファイルつくって
> yourname "山田太郎"
Your name is 山田太郎
みたいに引数で表示したい日本語文字列を与えるのは用途が違う感じ?
0730デフォルトの名無しさん
2008/02/07(木) 21:51:55最初はstdin固定で。
0731724
2008/02/07(木) 21:57:31いい感じのサンプルソースが見つからなくてどうも行き詰ってた状態です
思い出しながらやってるんですがgetsって何で嫌われてるんだっけ?
>>729
用途と言うより基本が思い出せないのでとりあえず関数内で収めてしまいたいのです。
最初の一歩がわかればあとは自分でいけると思うのですが・・・
>>730
kwsk
0732デフォルトの名無しさん
2008/02/07(木) 22:00:33char str[5]
gets( str );
で aaaaaaaaaaaaaaaaaa
と入力した場合、
aaaa\n [aaaaaaaaaaa...] とオーバーしたものもメモリに書き込まれてしまう。
ようはオーバーフローを起こしてる。
0733デフォルトの名無しさん
2008/02/07(木) 22:01:21メクラかお前
0734デフォルトの名無しさん
2008/02/07(木) 22:02:16日本の将来が危ぶまれる。
0735デフォルトの名無しさん
2008/02/07(木) 22:03:08氏ねよ
0737デフォルトの名無しさん
2008/02/07(木) 22:14:010738デフォルトの名無しさん
2008/02/07(木) 22:19:52ちょっとまてその前にそのNULLは何だ
NULLはポインタに対して使うもんだぞ
0739724
2008/02/07(木) 22:19:54>>735
google使ってないわけないじゃないですか。
これ以上いると荒れそうなので帰るぜ('A`)ノ
0740デフォルトの名無しさん
2008/02/07(木) 22:22:27今度は「.の前に改行が入っちゃうんですけど」とか言って、
自身では解決できずに再度質問するんだろう。
0741デフォルトの名無しさん
2008/02/07(木) 22:24:49お前は何を言ってるんだ
0742デフォルトの名無しさん
2008/02/07(木) 22:29:24getsでググって出てくる1番上の結果の抜粋に、極めて的確に書かれている。
> gets() は絶対に使用してはならない。前もってデータを知ることなしにgets()
> が何文字読むかを知ることはできず、gets() がバッファの終わりを越えて書き込み続けるため、
> gets() を使うのは極めて危険である。
この文章の意味が分からないと言ってきたのなら、
それはそれでまだフォローのしようもあるというものだが。
0743デフォルトの名無しさん
2008/02/07(木) 22:38:35俺も業務について2年目だけど、コードブロックそのものを改行を入れてしっかり書いてくれない人が嫌いだ
if( 〜〜 ) { ←これ 改行してから書けといいたい
0744デフォルトの名無しさん
2008/02/07(木) 22:41:500745デフォルトの名無しさん
2008/02/07(木) 22:43:160746デフォルトの名無しさん
2008/02/07(木) 22:52:04を読んでみたんですがちょっと読むのに厳しいような気がしてるんですけど
これは、C言語がまだ理解出てないってことですかね?
0747デフォルトの名無しさん
2008/02/07(木) 22:56:130748デフォルトの名無しさん
2008/02/07(木) 22:56:38たった2年で何を勝手なことを
K&Rすら改行していないというのにお前にそれを否定する論拠があるのか?
0749デフォルトの名無しさん
2008/02/07(木) 22:59:440750デフォルトの名無しさん
2008/02/07(木) 23:05:23見づらくなければそれでいい
0751デフォルトの名無しさん
2008/02/07(木) 23:13:190752デフォルトの名無しさん
2008/02/07(木) 23:27:32改行しない { は括弧の対応が判別できなかった。
それ以降、自分では改行するようになってしまった。
それは #if を多用しないって考えるのが正解。
0754デフォルトの名無しさん
2008/02/07(木) 23:48:20そんなこと気にしてるようじゃ
0755デフォルトの名無しさん
2008/02/07(木) 23:53:58少なくとも当時の秀丸は。
0756デフォルトの名無しさん
2008/02/07(木) 23:59:470757デフォルトの名無しさん
2008/02/08(金) 00:00:560758デフォルトの名無しさん
2008/02/08(金) 00:02:310759デフォルトの名無しさん
2008/02/08(金) 00:03:050760デフォルトの名無しさん
2008/02/08(金) 00:03:560761デフォルトの名無しさん
2008/02/08(金) 01:40:00あなたはPASCAL 爺さん?それともVB坊や?
0762デフォルトの名無しさん
2008/02/08(金) 01:43:00アルゴリズムはちょっとわからなければ、写経して実際に動かしてprintfやらお好みのもので経過を調べて、とにかく自力で体得するのが吉。読んだだけわからなくても、それが普通だと思います。まさしく今が習得すべき時期ですよ。ベストを尽くしてください。
0763デフォルトの名無しさん
2008/02/08(金) 01:43:140764デフォルトの名無しさん
2008/02/08(金) 01:45:32太古からある emacs でなんら問題ないのに、人はどうして見た目のよい糞エディタを使うのか?
0765デフォルトの名無しさん
2008/02/08(金) 01:59:57やつに「K&R」 と言っても通じないんじゃないかな?
0766デフォルトの名無しさん
2008/02/08(金) 02:00:52太古からの正当なる系統であるvimでなんら問題ないのに
人はどうして「純粋な」エディタとは言えないemacsを無理に使おうとするのか?
0767デフォルトの名無しさん
2008/02/08(金) 02:10:28vi は作者自身が消えるべき、といってるくらいで、あまりにも機能がなさすぎ。vim は vi のイミテーションでしかない(と作者がドキュメントの冒頭に書いてる)。
いや、私は bash のキーバインドは vi にしている‥‥。
0768デフォルトの名無しさん
2008/02/08(金) 07:27:18とりあえずCtrlに画鋲置いといた。
0769デフォルトの名無しさん
2008/02/08(金) 09:52:10イテッ
0770デフォルトの名無しさん
2008/02/08(金) 10:39:53わたしの ぼうけんは これで おわってしまった!!
0771デフォルトの名無しさん
2008/02/08(金) 11:21:490772デフォルトの名無しさん
2008/02/08(金) 12:44:060773デフォルトの名無しさん
2008/02/08(金) 18:42:360774デフォルトの名無しさん
2008/02/08(金) 19:02:10fseek(fp, 0L, SEEK_SET);や
rewind(fp);
でファイルの先頭に戻して
fprintf()でヘッダ部分を書き出しているのですが
書き出した分のデータが消されてしまっているようで
データにズレが発生してます。
ファイルは
if((fpo=fopen(OutFileName, "w")) == NULL){例外処理}
で発生させています。
解決方法ご教授ください
0775デフォルトの名無しさん
2008/02/08(金) 19:02:39fpoではなくfpです
0776デフォルトの名無しさん
2008/02/08(金) 19:06:00次のどれか。
・ヘッダを「挿入」する手段はないので諦めて、一番最初にヘッダを書く。
・一旦ファイルを作っておいて、ヘッダだけのファイルと合成する。
0777デフォルトの名無しさん
2008/02/08(金) 19:12:42レスありがとうございます
挿入できないのですか…
ファイルが大量にあって、今の方法だと後から挿入するしか手がない感じです
ナンテコッタイ
0778デフォルトの名無しさん
2008/02/08(金) 19:18:05system("echo header | cat - body.data > whole.data");
# popen("cat - body.data > whole.data", "w")の方が楽かも知れず。
つーか、fopen("w")した直後にヘッダを書くだけじゃん。
0779デフォルトの名無しさん
2008/02/08(金) 19:22:42ありがとうございます。
fopen w の直後にヘッダ書いて出来ました
脳みそ足りてませんでした
0780デフォルトの名無しさん
2008/02/08(金) 21:54:44答え合わせしたいのですが...
いないよなぁ
0781デフォルトの名無しさん
2008/02/08(金) 21:57:05問題を教えてください(こっそりと)
0782デフォルトの名無しさん
2008/02/08(金) 23:01:150x1234を0x123fにするには (28) と (29) を行う。その演算子の
記号は (30) である。 また、上位1バイトを0にし、下位1バイトをそのままに
するには、 (31) と (32) を行う。その演算子の記号は (33) である。
ビットを反転するには、 (34) と排他的論理和を行うか、ビット演算子の反転
を使用する。そのビット演算子(反転)の記号は (35) である。
(28)の解答群
ア 0x0000 イ 0x000F ウ 0x1230 エ 0xfff0 オ 0xffff
(29)、(32)の解答群
ア 論理和 イ 論理積 ウ 排他的論理和 エ 否定論理和 オ 否定論理積
(30)、(33)、(35)の解答群
ア & イ | ウ ^ エ ~ オ !
(31)の解答群
ア 0x0001 イ 0x000f ウ 0x00ff エ 0xf000 オ 0xff00
(34)の解答群
ア 0x0000 イ 0x0001 ウ 0x1111 エ 0x1010 オ 0xffff
0783デフォルトの名無しさん
2008/02/08(金) 23:01:59Cのポインタをはずすことを何か一つの用語であらわすことはできますか?
Perlなら\1を${\1}することを\1をデリファレンスすると言いますが、
Cではchar *aを*aすることをなんと言えばよいのでしょうか?
0784デフォルトの名無しさん
2008/02/08(金) 23:16:440785783
2008/02/08(金) 23:21:03ありがとうございます。英訳的にはindirect referenceでしょうか。
参照というとC++の参照を思い出しますね。ちょっと紛らわしい。
0786デフォルトの名無しさん
2008/02/08(金) 23:26:43キャスト演算子は、式の結果を一時的に指定したデータ型に変更するものである。例
えば、double型の変数aの小数点以下を切り捨てるには、 (36) と記述する。
キャスト演算子は (37) であり、算術演算子より優先順位が (38)
ため、int型の変数a、bの除算を実数の精度で計算し、その結果をdouble型の変数c
に格納する記述は (39) である。
また、キャスト変換はポインタにも有効であり、int型の配列の内容を1バイトずつ
参照することができる。
なお、次のプログラムの出力結果は処理系によって異なる場合があるが、本問では考
慮しないものとする。
#include <stdio.h>
main()
{
int a[] = {0x01020304, 0x05060708};
int i;
char *p;
p = (40) ;
for (i = 1;i <= 8; i++)
printf(゙%x゙,*p++);
}
0787デフォルトの名無しさん
2008/02/08(金) 23:27:56ポインタからポインタが指す先のデータを得る操作をindirectionと呼ぶ
0788デフォルトの名無しさん
2008/02/08(金) 23:28:43ア int a イ int (a) ウ (int a) エ (int) a オ a(int)
(37)の解答群
ア 単項演算子 イ 関係演算子 ウ 比較演算子 エ 論理演算子 オ 条件演算子
(38)の解答群
ア 高い イ 低い
(39)の解答群
ア c = a / b イ (double)c = a / b ウ c = (double)a / b エ c = (double)(a / b)
(40)の解答群
ア char a イ char *a ウ (char) a エ (char) *a オ (char *) a
0790デフォルトの名無しさん
2008/02/08(金) 23:31:07ほんとは最後の問7 問8の答えが知りたいのですが 打つのが大変なんで...
文が見づらくてすいませんm(_ _)m
解答をお願いいたします。
0791デフォルトの名無しさん
2008/02/08(金) 23:33:440792デフォルトの名無しさん
2008/02/08(金) 23:33:510793デフォルトの名無しさん
2008/02/08(金) 23:34:120794デフォルトの名無しさん
2008/02/08(金) 23:39:330795デフォルトの名無しさん
2008/02/09(土) 00:04:510796デフォルトの名無しさん
2008/02/09(土) 00:16:55っていうかCの説明の1番目に出てきた
0797名無し
2008/02/09(土) 00:33:17エディタでmainなどを説明通り打ち込み、.cで保存したテキストファイルを生成する事は出来たのですが、コンパイラをどのようにして使えばいいのかが分かりません。
色々ツールが入っていましたので、どれにドラックしていいのかわかりませんでした。
宜しければ、このコンパイラで、これが本体だよみたいな感じでお教えになってもらえれば幸いです>ω<
0798デフォルトの名無しさん
2008/02/09(土) 00:36:02とりあえずコンパイラでググれ。
0799デフォルトの名無しさん
2008/02/09(土) 01:04:59これでOK.
0800デフォルトの名無しさん
2008/02/09(土) 01:08:22Cpad でググれ
0801デフォルトの名無しさん
2008/02/09(土) 01:27:22ときどきfloatも美味しそうに聞こえるから困る
0802デフォルトの名無しさん
2008/02/09(土) 01:28:10どなたか解答をお願いいたします。
0803デフォルトの名無しさん
2008/02/09(土) 01:30:30だからCpad使えってwwwwwwwwwwwwwwwwwwwww
猿でもいける総合環境だぞwwwwwwwww
http://hp.vector.co.jp/authors/VA017148/pages/install/bcc.html
これみても導入できないなら、まずPCの知識からつけましょう
0804デフォルトの名無しさん
2008/02/09(土) 01:33:55俺はカーニハンって聞くとカニバリズムを思い出して、
リッチと聞くとなんか怪しい魔法使いか何かじゃないだろうかと、
ワルプルギスの夜のような印象を受ける。K&Rを見ればコリアを思い出す。
0805デフォルトの名無しさん
2008/02/09(土) 01:36:330806デフォルトの名無しさん
2008/02/09(土) 01:43:170807デフォルトの名無しさん
2008/02/09(土) 01:44:040808デフォルトの名無しさん
2008/02/09(土) 04:48:02(28)イ
(29)ア
(30)イ
(31)ウ
(32)イ
(33)ア
(34)オ
(35)エ
(36)エ
(37)ア
(38)ア
(39)ウ
(40)オ
0809デフォルトの名無しさん
2008/02/09(土) 06:14:460810デフォルトの名無しさん
2008/02/09(土) 10:39:48英語だとdereference。
規格では間接参照と訳されているが、
参照剥がし、参照外し、逆参照なんかもよく聞く。
0811デフォルトの名無しさん
2008/02/09(土) 21:48:550812デフォルトの名無しさん
2008/02/09(土) 22:02:370813デフォルトの名無しさん
2008/02/10(日) 02:50:150814デフォルトの名無しさん
2008/02/10(日) 03:48:140815デフォルトの名無しさん
2008/02/10(日) 04:59:210816デフォルトの名無しさん
2008/02/10(日) 06:25:310817デフォルトの名無しさん
2008/02/10(日) 07:55:18こいつに問7、8を書いてやってくれ
解答は俺が担当してやる、問題用紙がないのでね
0818デフォルトの名無しさん
2008/02/10(日) 08:31:430819デフォルトの名無しさん
2008/02/10(日) 12:45:01/*語尾変換プログラム*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int f_read(void);
int w_cnv(int ln);
#define CHRSIZE sizeof(char)
char str[20][(254 + 2)* CHRSIZE * 2 + sizeof(char)];
main()
{
int ln;
int i;
int cnt;
ln = f_read();
cnt = w_cnv(ln);
for(i=0;i<ln;i++) printf("%s",str[i]);
printf("\n文章中を%d件変換し、\n",cnt);
printf("文末を%d件付加しました。\n",ln);
}
/*ファイル入力*/
int f_read(void)
{
FILE *fp;
0820デフォルトの名無しさん
2008/02/10(日) 12:55:33int cnt = 0;
if((fp = fopen("word.dat","r")) == NULL){
printf("入力ファイルがオープンできません\n");
exit(1);
}
while( (46) != NULL)
(47) ;
fclose(fp);
return(cnt);
}
/*変換*/
int w_cnv(int ln)
{
int i;
int cnt = 0;
char w_str[256];
for(i=0;i<ln;i++){
while( (48) != NULL){
strcpy(w_str,strstr(str[i],"な") + CHRSIZE * 2);
strcpy(strstr(str[i],"な"),"にゃ");
(49) ;
cnt++;
}
strcpy( (50) ,"にゃ\n");
}
return(cnt);
}
0821デフォルトの名無しさん
2008/02/10(日) 13:10:32ア fgets(buf,255,fp) イ fgets(fp,buf,255) ウ fscanf("%s",buf,fp) エ fscanf(fp,"%s",buf)
(47)の解答群
ア strcpy(buf,str[cnt++]) イ strcpy(buf,str[cnt+1],buf) ウ strcpy(str[cnt++],buf) エ strcpy(str[cnt+1],buf)
(48)の解答群
ア strcat(str[i],"な") イ strchr(str[i],"な") ウ strcpy(str[i],"な") エ strstr(str[i],"な")
(49)の解答群
ア strcat(w_str,str[i]) イ strcat(str[i],w_str) ウ strcpy(w_str,str[i]) エ strcpy(str[i],w_str)
(50)の解答群
ア strchr(str[i],`\0') イ strchr(str[i],`\n') ウ strchr(w_str[i],`\0') エ strchr(w_str[i],`\n')
文中の「な」を「にゃ」に変換し、さらに文末の語尾に「にゃ」を付加して表示するプログラムです
0822デフォルトの名無しさん
2008/02/10(日) 13:21:58それがどうしたい?
0823デフォルトの名無しさん
2008/02/10(日) 13:25:080824デフォルトの名無しさん
2008/02/10(日) 13:57:12申し訳ないです..m(_ _)m
解答が知りたかったもんで..
0825デフォルトの名無しさん
2008/02/10(日) 15:18:070826デフォルトの名無しさん
2008/02/10(日) 16:05:4216進数でテキストファイルに以下のように書き込んでいるのですが、
01ABD
03DAE
これをASCIIコード形式で出力することはできませんか?
わかる方教えて下さい。
環境 WindowsXP 開発環境 VS2008EE
0827デフォルトの名無しさん
2008/02/10(日) 16:22:10char str[] = "DDDD";
printf("%d", str[0]);
見たいな感じで出せばいいだけじゃないの?
0828デフォルトの名無しさん
2008/02/10(日) 16:41:02確かにできそうですね。とりあえず、それでやってみます。
レスありがとう
0829デフォルトの名無しさん
2008/02/10(日) 17:15:37あたりのほうがよくね?
0830デフォルトの名無しさん
2008/02/10(日) 19:52:57ちなみにlog4cっていうのを見つけて、VCビルド用のMakefileでnmakeしたら
構文エラーが・・・
log4cのdllってどこかにないでしょうか?
0831デフォルトの名無しさん
2008/02/10(日) 19:54:31Windowsならイベントログに書き出すとか。
0832デフォルトの名無しさん
2008/02/10(日) 19:55:28http://d.hatena.ne.jp/tanarky/20070615
構文エラー直した方が早いんじゃない?
0833デフォルトの名無しさん
2008/02/10(日) 20:18:06>>831
できればログの出力先を設定で切り替えられるのがいいです。log4j的なやつ
>>832
http://log4c.cvs.sourceforge.net/log4c/log4c/msvc6/
↑にあったMakefileなんですがnmake用じゃないのかなぁ
そもそも
http://sourceforge.net/cvs/?group_id=38627
↑のCVSリポジトリのログインパスワードがわからなかったりします。
modulenameとあったので「log4c」とかいれてみたんですが弾かれる;;
0834デフォルトの名無しさん
2008/02/10(日) 20:44:500835デフォルトの名無しさん
2008/02/10(日) 20:58:03ありがとうございます。
とりあえずmingwのmakeでmake自体は動きました。
しかし、コンパイルエラー・・・
../src/log4c/rc.c(335) : error C2017: エスケープシーケンスの使い方が正しくありません。
もう少し粘ってみたいと思います。
0836デフォルトの名無しさん
2008/02/10(日) 21:14:51そこAnonymousならパスワード訊かれてもただEnter叩くだけって書いてあるじゃん。
0837デフォルトの名無しさん
2008/02/10(日) 21:19:14うおwちゃんと書いてあったのですね。(吊
ありがとうございます。
0838デフォルトの名無しさん
2008/02/10(日) 21:50:12EMBEDDED_LIBRARYというdefineがあるのですが、
これって何のためのdefineでしょうか?
また、こういうdefine変数の意味の調べ方ってどうすればよいのでしょうか?。。
0839デフォルトの名無しさん
2008/02/10(日) 21:52:510840830
2008/02/10(日) 22:00:15CVSからエクスポートしたあとmsvc6のフォルダにあるMakefileをmingwのmakeでmakeしました。
このときVC2005のcmd経由で使う場合はMakefile中のダブルクォートのエスケープが
[\"]ではうまくいかないようなのでシングルクォートで囲みました。
最終的にmakeはエラーでとまってしまったのですがdll自体のビルドは完了しており、
サンプル関連のファイルを作成する部分だったので無視しました。
0841830
2008/02/10(日) 22:04:12MS_COMPILER_VER=MSVC8
連投ですみません。
以上、参考まで。
0842デフォルトの名無しさん
2008/02/10(日) 22:06:02VisualStudioのようなIDEやEmacsやVimなどのtags
とくにGNU globalなんかを使うと便利ですよ
0843デフォルトの名無しさん
2008/02/10(日) 23:57:24charやintみたいに定義することってできるでしょうか?
0844デフォルトの名無しさん
2008/02/11(月) 00:02:08聞きたいことがわからん。
型を定義したいならtypedef
typedef int MyIntger;
typdef struct tagHoge HOGE;
0845デフォルトの名無しさん
2008/02/11(月) 00:02:100846デフォルトの名無しさん
2008/02/11(月) 00:02:430847デフォルトの名無しさん
2008/02/11(月) 00:02:500848デフォルトの名無しさん
2008/02/11(月) 00:07:52例えばcharなら1バイト、longなら4バイトみたいにサイズ取られてますが
そんな風にtekitouは16バイトっていうような型を作りたいんです
0849デフォルトの名無しさん
2008/02/11(月) 00:11:28char c[16];
} tekitou;
tekitou x; /* 16バイト */
こんな感じか?
0850デフォルトの名無しさん
2008/02/11(月) 00:15:01そうじゃないなら>>849でおkだが・・・
64bitくらいまでなら規格や環境によってはあるがそれ以上を好きにとなると自作するしかない。
多倍長演算とかでぐぐればいろいろ見つかる。
0851デフォルトの名無しさん
2008/02/11(月) 00:16:150852デフォルトの名無しさん
2008/02/11(月) 00:18:45自分で16バイトの数値を計算するプログラムを書いてやる必要があります。
0853デフォルトの名無しさん
2008/02/11(月) 00:23:50取り合えず多倍長演算をぐぐってみます、説明下手で申し訳なかったです
レスくださった方ありがとう
0854デフォルトの名無しさん
2008/02/11(月) 19:27:03int test[256][256];
例えばこういう変数を作ってその中身を保存しておきたい場合、
どういう方法でやるのが良いのでしょうか?
もしくはどんなキーワードでググればおkでしょうか。
0855デフォルトの名無しさん
2008/02/11(月) 19:31:440856デフォルトの名無しさん
2008/02/11(月) 19:35:00ありがとうございます、早速調べてみます。
0857デフォルトの名無しさん
2008/02/11(月) 19:42:13ダウト
そこは、fwrite(test, sizeof(int), 256 * 256, fp)のように「要素サイズ」と「要素数」を適切に使うべき。
0858デフォルトの名無しさん
2008/02/11(月) 20:59:10入門書を2冊ほど読み終わった程度なのでレベルはとても低いです。
そこで質問です。次に勉強しようと思ってる事なんですけど
Windowsでなにかしらプログラムを作る勉強をしようと思ってます。
VisualC++を開発環境にした書籍がとても多いんですが (「Visual C++〈1〉はじめてのWindowsプログラミング」とか)
WindowsでC言語を勉強していくのでしたら、こういった本で
VisualC++を勉強していけばいいんでしょうか?
C++全然わからないんで、VisualC++使えるのかどうかも不安なんですが・・・
わかりづらい文ですみません、ご教授お願いします
0859デフォルトの名無しさん
2008/02/11(月) 21:14:170860デフォルトの名無しさん
2008/02/11(月) 21:26:35あとはソースが公開されているようなのを拾ってきて他人の作ったプログラムを
まずは読んでみるのがいいと思うよ
vc自体はコンソールプログラムのプロジェクトを作ってコンパイルの流れを掴むといい
0861858
2008/02/11(月) 22:38:41C++使えなくても問題ないってことですよね?
安心しました、書籍探してもC++の事ばかり書いてあったんで
>>860
apiがさっぱりわからないんで、本読んで勉強してみますね
Cの基礎勉強してから人のソース読んでも見慣れない単語が多かったのは
apiだったと最近知った程度のレベルですw
0862デフォルトの名無しさん
2008/02/11(月) 22:52:36書籍でVisual C++と言っていれば、C++使っている可能性が高い罠。
立ち読みして確認しておくべし。
0864デフォルトの名無しさん
2008/02/11(月) 23:52:15本とか無くても作れるだろうから
まずはそれで慣れたらどうよ?
0865デフォルトの名無しさん
2008/02/12(火) 00:06:580866デフォルトの名無しさん
2008/02/12(火) 00:15:47ラッパーだからWin32APIをウィザードのように使いこなせればおk?
0867デフォルトの名無しさん
2008/02/12(火) 00:21:15「次へ」を連打してる姿を想像した
0868デフォルトの名無しさん
2008/02/12(火) 00:27:31むしろ無しでいけるならなしの方がいい。
API使いこなせるならそれでおk
0869デフォルトの名無しさん
2008/02/12(火) 00:35:02>>858
http://wisdom.sakura.ne.jp/system/winapi/win32/index.html
これが良さげ
>>866
その理解でOK
0870デフォルトの名無しさん
2008/02/12(火) 01:11:26レスありがとう。
今までC#やらJavaやらHaskellやらテキトーにやってきたけど、
>>869のWindowsプログラミングやってみたら案外面白かった。(Eclipse+CDT+MinGW)
0871858
2008/02/12(火) 08:36:04>>864
流石にそろそろマウスだけでも動かしたくて・・・
もう演習問題をやるのは飽きましたorz
>>865
MFC・・・APIとの違いがよくわかりませんが注意します
もう少し用語の勉強もしないと駄目ですねorz
>>869
ありがとうございます
人のお勧めとかの本はすぐ手をだしてしまう性分なので
もう今すぐ買ってしまおうかと思ってますw
0872デフォルトの名無しさん
2008/02/12(火) 11:44:530873デフォルトの名無しさん
2008/02/12(火) 20:14:23の使い方のことなのですが
これでif部分を分岐させるためには
#defineで何がしかのフラグを建てないとダメってことですよね?
0874デフォルトの名無しさん
2008/02/12(火) 20:20:25でも例外として、コメントアウトの代わりやコードの切り替えに
#if 0 や #if 1 を使うことはある。
ネストできるのがポイント。
0875デフォルトの名無しさん
2008/02/12(火) 20:25:00コンパイル時にオプション-DDEBUG見たいな感じで渡すこともあります
0876デフォルトの名無しさん
2008/02/12(火) 20:34:40なるほど
「今回はココスルーしておくか」ってときに
#if0にしたりするのですね。
>コンパイル時にオプション-DDEBUG見たいな感じで渡すこともあります
argv[]に入れるときみたいな感じで
コンパイル時にDEBUGが入ってくる、ということですよね?
そのときはDEBUGの部分のソースが回る、ということですね
なんとか整理ついてきました!ありがとうございました!
0877デフォルトの名無しさん
2008/02/13(水) 03:02:100878デフォルトの名無しさん
2008/02/13(水) 03:13:15嫌われるに値するだけの理由があるから。
入門者は取り敢えず、そういうもんだと思えばいいことです。
0879デフォルトの名無しさん
2008/02/13(水) 11:38:33int global; というグローバル変数があるとする。
ローカル関数の中で、
static void foo(void)
{
global = 3;
違う関数();
printf("%d\n", global);
}
こんなコードで、画面に「3」が表示されることは期待できない。違う関数()の中でglobalの
値が変わっているかもしれないから。
このように、プログラムの見通しが極めて悪くなる元凶だから。
0880デフォルトの名無しさん
2008/02/13(水) 14:04:490881デフォルトの名無しさん
2008/02/13(水) 14:14:23他の人もグローバル変数を使うと名前が衝突しないかチェックしなきゃいけないとか。
とにかくデメリット満載。
0882デフォルトの名無しさん
2008/02/13(水) 18:34:01%{flags}[width}{precision}[typeのオウレティックス]type
え?何コレ、復活の呪文?%typeとか書けばいいの?
0883デフォルトの名無しさん
2008/02/13(水) 18:35:47多分具体例と表示結果みたほうがてっとりばやいかと
0884デフォルトの名無しさん
2008/02/13(水) 18:42:23クラスのプライベート変数だってCで記述するところのファイル内にスコープが閉じたスタティックなグローバル変数みたいなものだし。
0885デフォルトの名無しさん
2008/02/13(水) 18:59:03オウレティックスって何だそれ。
プレフィクスの間違いか?
0886デフォルトの名無しさん
2008/02/13(水) 19:08:21{flags} は + とか - とか 0 とか
{width} は幅 (≒文字数)
{precision} は精度
{typeのオウレティックス} は l とか h とか
type は s とか c とか d とか
例えば、flags が 0 で width が 3 で精度省略で type が d だと、 %03d になる
0887デフォルトの名無しさん
2008/02/13(水) 19:41:280888デフォルトの名無しさん
2008/02/13(水) 19:49:41どの括弧だよ・・・
そとにstaticで書いた場合はそもそもstaticで得られる意味が違う
0889デフォルトの名無しさん
2008/02/13(水) 21:25:57とか思ってる糞初心者の俺にはありがたい流れだ
0890デフォルトの名無しさん
2008/02/13(水) 21:27:320891デフォルトの名無しさん
2008/02/13(水) 21:28:35{ } の外の事なら Yes.
内部リンケージのグローバル変数になる。
外部リンケージのグローバル変数よりゃいくぶんかマシ。
0892デフォルトの名無しさん
2008/02/13(水) 21:29:46どこからでも取れてうめぇwwww
って思ってるけど大人になると、
どこ歩いてもぶつかってうぜぇwwwwwwww
ってなるようなもん。
0893デフォルトの名無しさん
2008/02/13(水) 21:34:08グローバル変数は使わんがな。
0894デフォルトの名無しさん
2008/02/13(水) 21:36:360895デフォルトの名無しさん
2008/02/13(水) 21:40:220896デフォルトの名無しさん
2008/02/13(水) 21:41:130897デフォルトの名無しさん
2008/02/13(水) 21:49:460898デフォルトの名無しさん
2008/02/13(水) 23:46:240899デフォルトの名無しさん
2008/02/13(水) 23:47:070900デフォルトの名無しさん
2008/02/14(木) 00:06:42ちょっと頑張ればアセンブラでも可能だけど…
0901デフォルトの名無しさん
2008/02/14(木) 00:32:54言語仕様・ライブラリ面での支援がないというだけのこと。
0902デフォルトの名無しさん
2008/02/14(木) 07:30:22要求レベルによると思う。
C++ をコンパイルして吐かれたアセンブリ言語のコードと
同じようなコードを書いたとして、
果たしてそれは 「オブジェクト指向」 と言えるのかというと、
俺は正直微妙だと思う。
特にアクセス制限まわりが。
0903デフォルトの名無しさん
2008/02/14(木) 13:44:250904デフォルトの名無しさん
2008/02/14(木) 15:02:17既にfpsを表示させているので、そのfpsの下に表示させたいです。
ソース下の方に"敵爆破"のコードが書かれているのですが、そのコードの中にスコア加算すると考えています。
使用:Visual C++ 2005 Express Edition
OS:Windows XP
0905デフォルトの名無しさん
2008/02/14(木) 15:20:450906デフォルトの名無しさん
2008/02/14(木) 16:29:03>C++ をコンパイルして吐かれたアセンブリ言語のコード
たとえばメソッド探索について言うと、C++のような静的型付けの言語の場合、
コンパイル時にある程度解決できるので、例としてあげるのはどうかと思う。
アセンブラでやるなら、型情報を持ったレコードを定義してマクロ使うとか、
ディスパッチャ呼び出すとかするんでないかな?
0907デフォルトの名無しさん
2008/02/14(木) 20:34:19断じてそいつらはオブジェクト指向言語ではない。
0908デフォルトの名無しさん
2008/02/14(木) 22:49:54ときどきコードなのか日記なのか判らなくなる
0909デフォルトの名無しさん
2008/02/14(木) 23:13:430910デフォルトの名無しさん
2008/02/14(木) 23:22:14コンパイラのサポートは受けられないけど
0911デフォルトの名無しさん
2008/02/14(木) 23:25:080912デフォルトの名無しさん
2008/02/14(木) 23:28:42おもしろいか?
0913デフォルトの名無しさん
2008/02/14(木) 23:29:260914デフォルトの名無しさん
2008/02/15(金) 00:41:11C++でもクラスのメンバ変数全部publicとか燃やしたくなるコードを書く人もいる。
0915デフォルトの名無しさん
2008/02/15(金) 00:50:080916デフォルトの名無しさん
2008/02/15(金) 01:13:440917デフォルトの名無しさん
2008/02/15(金) 03:26:34こんな感じ。
/* Hoge.h */
#pragma once /* 面倒臭いからこれ使わせて */
typedef struct Hoge Hoge;
Hoge *Construct();
void Foo(Hoge *hoge);
void Destruct(Hoge **hoge);
/* Hoge.cpp */
struct Hoge {
int foo; /* Hoge.cpp 以外からは触れない */
};
Hoge *Construct() { return (Hoge*)calloc(1, sizeof (Hoge)); }
void Foo(Hoge *hoge) { printf("%d\n", hoge->foo); }
void Destruct(Hoge **hoge) { free(*hoge); *hoge = NULL; }
0918デフォルトの名無しさん
2008/02/15(金) 09:01:18プロトタイプベースなオブジェクト指向は出来るんじゃね?
メリットあるとは思えないが。
それと「OOPLと同等のソースコード」を書き上げるのはCではムリだろ。
>>911
メンバ変数/関数として変数名、値を保存するバッファ、アクセス属性を持った
構造体のリストを持った構造体をクラスとして宣言して、動的にクラスを作っていけば
実行時にエラー出す程度のことは出来る。
C++やJAVAのような「ソースコード」をCで書くことに拘りすぎ。
0919デフォルトの名無しさん
2008/02/15(金) 11:10:30int data = 0;
char temp[32];
do{
fgets(temp, sizeof(temp), stdin);
data = atoi(temp);
}while(data);
数字が入っていないとatoiの戻り値が0になるのを利用してこんな風に書いていたのですが、
dataに0も含む数値を入力するようにしたくなって困ってしまいました。
atoiの戻り値が0を入力されての0なのか数字が入力されなくての0なのかを判別したり、
tempに数値が入っているかを判別したりできる関数はありますでしょうか?
0920デフォルトの名無しさん
2008/02/15(金) 11:19:360921デフォルトの名無しさん
2008/02/15(金) 12:12:14ありがとうございます、調べてみます
0922デフォルトの名無しさん
2008/02/15(金) 12:14:590923デフォルトの名無しさん
2008/02/15(金) 12:15:02数値かどうかなら、1文字目を isdigit する手もある。
0924デフォルトの名無しさん
2008/02/15(金) 12:30:400925デフォルトの名無しさん
2008/02/15(金) 14:09:45sscanf()で同じことをやろうと思ったら、%nで取得する必要がある。
0926デフォルトの名無しさん
2008/02/15(金) 14:11:530927デフォルトの名無しさん
2008/02/15(金) 14:20:56文字列のどこまで変換に使ったかは戻り値じゃ判らんのだよ。
0928デフォルトの名無しさん
2008/02/15(金) 14:25:070929デフォルトの名無しさん
2008/02/15(金) 14:29:360930デフォルトの名無しさん
2008/02/15(金) 14:34:39そのうちの一つを取り上げて、勝手に要るものとして扱うのはいかがなものか。
0931とけび
2008/02/15(金) 14:39:40ファイルの出力先のディスクの空き容量のチェックするところを
作成中なのです。
空き容量までは調べられたのですが、マウントポイントでいうところの
どこなのか?が調べられなくて困っています。
環境はVineLinuxです。
ディスク容量は、「statfs」で調べました。
dname = strdup(filename);
dirname(dname);
if (statfs(dname, &stStatfs) == 0) {
fprintf(stderr, "空きサイズ : %d\n", stStatfs.f_bfree*stStatfs.f_bsize);
}
分かる方よろしくお願いします。
0932デフォルトの名無しさん
2008/02/15(金) 14:59:180933デフォルトの名無しさん
2008/02/15(金) 17:01:01必要になる可能性が高いモノではあると俺も思う。
>>928
間違ったからといって「けっ そんなのいらねぇや」は、小学4年生までな。
おじさんとの約束だ。
0934デフォルトの名無しさん
2008/02/15(金) 17:04:24一方的に否定するもんでもないと思うけどな
0935デフォルトの名無しさん
2008/02/15(金) 17:10:070936デフォルトの名無しさん
2008/02/15(金) 18:48:26元の質問を考えれば
要らないとしか言いようが無い
0937デフォルトの名無しさん
2008/02/15(金) 18:52:270938デフォルトの名無しさん
2008/02/15(金) 19:17:490939デフォルトの名無しさん
2008/02/15(金) 19:21:290940デフォルトの名無しさん
2008/02/15(金) 19:23:08つまり、0のときどちらかが知りたいのならば、数字じゃない文字の位置は関係ない。
0941デフォルトの名無しさん
2008/02/15(金) 19:27:440942デフォルトの名無しさん
2008/02/15(金) 19:29:470943デフォルトの名無しさん
2008/02/15(金) 21:30:22どうやって検出するのか教えていただけないでしょうか
0944デフォルトの名無しさん
2008/02/15(金) 21:44:28どんな文字列をどういう風に変換したいんだ?
0945デフォルトの名無しさん
2008/02/15(金) 21:50:32if(sscanf(buf, "%d", &n) == 1) {
先頭に数値があった
} else {
先頭に数値がなかった
}
0946デフォルトの名無しさん
2008/02/15(金) 23:06:51#include <iostream.h>
void main()
{
int i;
i = 5 + 15;
cout << "計算すると";
cout << i;
cout << "になります。" << endl;
}
っていう簡単なプログラムを組んで、デバッグしようとすると、
fatal error C1083: include ファイルを開けません。'iostream.h': No such file or directory
っていうエラーが出てデバッグできないんだ。
プログラム以前の問題で申し訳ないが、理由が想像できる人いないか?
環境はVisual C++ Express Editionで、http://lets-go.hp.infoseek.co.jp/c_setting09.htmlに書いてあることは一通りやったと思う。
0947デフォルトの名無しさん
2008/02/15(金) 23:09:04#include <iostream>
でどう?
0948デフォルトの名無しさん
2008/02/15(金) 23:19:14エラーが増えた…。
error C2065: 'cout' : 定義されていない識別子です。
error C2065: 'endl' : 定義されていない識別子です。
って言われた。
0949デフォルトの名無しさん
2008/02/15(金) 23:20:47cout → std::cout
endl → std::endl
ってやるのが面倒なら
using namespace std;
0950デフォルトの名無しさん
2008/02/15(金) 23:29:21エラーの”数”は気にしなくていい。
1つ目のエラーが、より”後ろ”にずれたら、ある意味改善したと思っていい。
0951デフォルトの名無しさん
2008/02/15(金) 23:30:05やってみたら、ビルドの時点で
LINK : fatal error LNK1104: ファイル 'user32.lib' を開くことができません。
って言われたんだが、どういう意味か分かるか?
0952951
2008/02/15(金) 23:33:08>>950
プログラミング以前の問題(多分環境設定)でつまずいてるんで、後ろ云々の問題じゃない気がする…。
素人考えで違ってたらすまん。
0953デフォルトの名無しさん
2008/02/15(金) 23:36:28sscanf()の場合は、例えば"%d%n"としてどこまで変換したか取得すればいい。
strtol()なら、ポインタを用意しておけばそこにどこまで変換したかを設定してくれる。
どちらの場合も、変換に使わなかった最初の文字を指しているから、その先に
ナル文字があれば全て変換された(=数字文字のみ)ことが判る。
0954デフォルトの名無しさん
2008/02/15(金) 23:38:09今日から始めるなら、
なんでViusal C++ 2008にしなかったんだい。
なんで946のような古い書き方をしているんだい。
そんな古い資料、よっぽどの名著でもない限り窓から捨ててしまえ。
0955デフォルトの名無しさん
2008/02/15(金) 23:38:30さっきのページの、ライブラリファイルのディレクトリの追加はやってるか?
そのディレクトリにファイル user32.lib はあるか?
0956デフォルトの名無しさん
2008/02/15(金) 23:40:52参考にしているサイトやら本やらをもう1回見直して間違いないなら他を参考にしたほうがいい
0957デフォルトの名無しさん
2008/02/15(金) 23:43:07とりあえずプログラムの勉強始めようと思ってぐぐったら、紹介されてたのが2005だったんだ。
まずはプログラム組めるようになりたかったんで、動けばなんでもいいかなー、と。(実際、動かせてないんだが)
とりあえず2008に移行してみるよ。
アドバイス、サンクス。
0958デフォルトの名無しさん
2008/02/15(金) 23:44:260959943
2008/02/15(金) 23:56:47ちょっと引っかかる点はあるもののとりあえずありがとう
>>944
>>943は>>942でなんか言ってることへの質問でした
とくに変換したい文字列とかはありませんでした
0960デフォルトの名無しさん
2008/02/16(土) 00:20:06なんちゃって管理者っぽいことをしてたんじゃないか?
0961デフォルトの名無しさん
2008/02/16(土) 01:45:16いや、2005を使うのは別にいいよ。
0962とけび
2008/02/16(土) 12:08:37いろいろ調べましたら、debianのdfのソースやfreebsdのソースを
見ることができたのですが、OS依存やシンボリックリンクで
異なるマウントポイントになっているのを検出が面倒なので
932の方のやり方で対処しました。
ありがとうございます。
0963デフォルトの名無しさん
2008/02/17(日) 19:38:36IT関係の仕事に転職を考えていてC言語、JAVAという言葉を知っているのですが何から手をつけたらいいか分かりません。
今やっていること。
基本情報処理の資格本購入。
初級シスアドの資格本購入。
自作PCの本の購入しPC内部の基礎を学ぼうと思いました。
希望職種は、システム運用を希望しています。
0964デフォルトの名無しさん
2008/02/17(日) 19:55:39買うだけじゃなくて試験もうけろ。もうすぐ締め切りだぞ。
あと、自作で何か作れ。パクリでもいい。むしろパクれ。世に出さなくていいから。
0965デフォルトの名無しさん
2008/02/17(日) 20:01:000966デフォルトの名無しさん
2008/02/17(日) 20:17:58役に立たないことで有名かつ、もうすぐ試験そのものがなくなるし・・・
言葉を知ってるだけ、本を持つだけ、学ぼうと思うだけなんて小学生でもできる。
転職考える人間ってことは社会人でしょ?自分でとりあえずやってみるって選択肢はないのか?
0967デフォルトの名無しさん
2008/02/17(日) 20:27:48>何から手をつけたらいいか分かりません
まず本を読むところからはじめればいいじゃないか
0968デフォルトの名無しさん
2008/02/17(日) 20:42:28JAVA 程度のことは常識として知っておかなくてはならないと思います。
C も同じく、かもしれませんが、素直にどうぞ、とはいえないつらさがあります。
今なさっていることで、間違いはないと思います。道のりは長いのですが、
いずれ知らなければならないことですから、回避するわけにもいきますまい。
いろいろ知るうちに、より詳しい方向性が見えてくるかもしれません。
0969デフォルトの名無しさん
2008/02/17(日) 21:19:08私がいる…
職業訓練校でシスアド勉強したけど、イマイチ…
現在、サバ管やってみたくて求職ちう。
0970デフォルトの名無しさん
2008/02/17(日) 21:56:39作れ、といったところで、963はCやJavaが
プログラムを作るためのものであるということを
認識していない可能性が考えられる。
0971デフォルトの名無しさん
2008/02/17(日) 22:02:340972デフォルトの名無しさん
2008/02/17(日) 22:49:090973デフォルトの名無しさん
2008/02/17(日) 22:56:04つまりアナルまでってこと。
0974デフォルトの名無しさん
2008/02/17(日) 23:00:380975デフォルトの名無しさん
2008/02/17(日) 23:03:540976デフォルトの名無しさん
2008/02/17(日) 23:13:300977デフォルトの名無しさん
2008/02/17(日) 23:27:170978デフォルトの名無しさん
2008/02/18(月) 00:17:52970さん、、、すいません。知りません。
すこしずつ、覚えていきます。
覚えるのにいいプログラムとかあれば教えてくただければ幸いです。
今の仕事は、一応保守になりますけどITではなく機械のメンテをやっています。
そこの仕事はまだITの知識は必要ないし、業界的にも下火でもうやっていっても会社があり続けるか
不安でそんなところにしがみつくよりも転職活動を始めて転職できるときにしたいと思いました。
世の中不安のない業界なんてないぞといわれそうですが、潜在的でもなくももうすでにあちらこちらで
その兆候が表面化していて危ないぞという話ではじめている。
しかも、職場の雰囲気も最悪でブラック企業そのもので昭和の高度経済成長初期の考え方みたいな感じで
分かりやすく言うと気合だけ体育会系の不良ばかりの部活みたいな感じです。
なので、できるときにできることをする。
自分の人生なので、悔いのないようにしたいので転職を考えて、転職先としては、同じような感じではあるが
知識は全く別物のシステム系の運用サポートを考えています。
ただ、どんな業界のどんなシステムの運用にするかはまだよく分かっていません。
これからそういったところも勉強していきたいと思います。
0979デフォルトの名無しさん
2008/02/18(月) 00:34:410980デフォルトの名無しさん
2008/02/18(月) 00:50:36機器メンテだってフライスやネジ加工の知識なくてもやっていけるが同分野の知識ならあるに越したことはないって感じだろ?
どっぷり一つの知識のエキスパートになるのもいいが、それだと結局今のように
先行きが不安になってくると鞍替えすることになってしまう。
まずはどういう分野がありどういう知識があるのかを知るのが先かな?
0981デフォルトの名無しさん
2008/02/18(月) 00:55:120982デフォルトの名無しさん
2008/02/18(月) 00:55:400983デフォルトの名無しさん
2008/02/18(月) 09:59:20午後問題のプログラミングは、
参考書2冊、プログラム専用基本問題集4冊 合計6冊を二年がかりで潰して
ようやくコードが読めるようになったyo
午前はまだやってない
0984デフォルトの名無しさん
2008/02/18(月) 10:36:060985デフォルトの名無しさん
2008/02/18(月) 11:17:170986デフォルトの名無しさん
2008/02/18(月) 11:29:200987デフォルトの名無しさん
2008/02/18(月) 21:11:420988デフォルトの名無しさん
2008/02/18(月) 22:14:50この業界で転職をするんだったら、資格より業務経歴書が重要
自分で勉強をするよりどっかの会社にもぐりこんで業務経験をつむのがよろしいかと
忠告
IT業界もブラック企業ばかりだから、転職には十分注意を!
中にはまじめな会社がある
0989デフォルトの名無しさん
2008/02/18(月) 22:24:00以前全従業員50人くらいの会社で働いてたけど、いろいろと融通きいてくれたり、無理すぎる体制とか受注しそうになったとき、上の人が断ってたりしてくれてたな。
で転職で今は全部で20人くらいの超小規模だけど、こっちも同様に社員のことを大事に扱ってくれてるな。
大手企業に就職した知人はノイローゼ気味になってる・・・
0990デフォルトの名無しさん
2008/02/18(月) 22:25:100991デフォルトの名無しさん
2008/02/18(月) 22:28:31小さいところは社長の力が大きいだけ。
0992デフォルトの名無しさん
2008/02/18(月) 22:28:45全従業員たった20人だよ。
小さい会社っしょ?
その分気楽にできるからいいけど。
0993デフォルトの名無しさん
2008/02/18(月) 22:29:59いわゆる使い捨ての駒のような感覚で扱ってるんだろ
0994デフォルトの名無しさん
2008/02/18(月) 22:33:33int *ptr;
ptr = array;
配列名の後に[]をつけずに、配列名だけ単独で書くと[配列の先頭要素へのポインタ]という解釈は間違っていますか?
厳密にお願いします。
0995デフォルトの名無しさん
2008/02/18(月) 22:34:26あってる
0996デフォルトの名無しさん
2008/02/18(月) 22:35:13式の中では、配列型はポインタ型へ暗黙の変換を持つという規則がある。
0997デフォルトの名無しさん
2008/02/18(月) 22:36:480998デフォルトの名無しさん
2008/02/18(月) 22:40:350999デフォルトの名無しさん
2008/02/18(月) 22:40:511000デフォルトの名無しさん
2008/02/18(月) 22:41:17`⌒丶、'ー-、_ + 十
 ̄\―ヽ._ 二_‐-
\ \  ̄ ‐-  ̄二二_ ―_,r'⌒ヽー、
 ̄\ ̄ \‐- ╋__..ニ -―― ´ ̄ __... -―一┘
+ ニニ ー--\ ⌒Y´ ̄ `丶 __ __,. -‐二´  ̄ ―
_ ヽ.._ ^ω^ ノ -‐
/⌒ 丶' ⌒) バカにはコピペできないカッコいいAA
/ ヽ / /
/ /へ ヘ / /l
/ \ ヾミ //
(__/| \___ノ/
〉 /
-=≡ /⌒⌒ヽ/⌒ヽ/\
-=≡ ./⌒ヽ, /  ̄ \\ ヽ/⌒ヽ,
-=≡ / |_/__i.ノ ,へ _ _/ \\/ | /ii
-=≡ ノ⌒二__ノ__ノ  ̄ ̄ \ヽ |./ |i
-=≡ ()二二)― ||二) ()二 し二) ― ||二)
-=≡ し| | \.|| .| .|\ ||
-=≡ i .| ii i | .ii
-=≡ ゙、_ ノ .゙、 _ノ
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。