int loop; int hoge[10]; for(loop=0;loop<=10;loop++){
hoge[loop]=0; } でコンパイル、実行するとhoge[9]の次の領域にloopが置かれていることがある(実際、そこに置かれるというのはgdbで確認した)ので、変数loopがforループのインクリメント以外で書き変わり、無限ループになることがあるよ、というのを目の前で実演(無限ループを実行し)し、「こう書いたらダメですよ」と口うるさく説明した、その30分後に書いてくれる素敵すぎる人達なんです…orz まったくもって話を聞いてない。 ナメられてるのかなぁ。
皆様コメントありがとうございます (スコア:1)
>という考え方はC言語に関してまったく通用しないことから叩き込めよ。
教えてる、はずなんですけど…。
他にも、整数配列を操作するfor文で
int hoge[100];
for(loop=0;loop<=100;loop++){
hoge[loop]=some_function(loop);
}
みたいなことを書くのは、日常茶飯事&何度も「やったらダメ」と言っているのに聞いてくれない、という状況でしてorz
>とても卑猥な4文字でも仕込んでたのかと思った
実は「やや肥満」という単語でした。
この単語を出したところで本質では無いので伏せ字?にしただけです。
>この前のエントリのも合わせて考慮すると、まだ研修レベルですね。
>C言語での実作業を任せるのはかなり恐い。
まぁ、研修、というか専門が情報でない人に対する授業なので良いんですが…
他でC言語を使わない生活になっていることを望みます…
>終端の'\0'のことも教えておくべきではないかと思いました。
これはさすがに教えてます。だから余裕をもって10バイト分なんだと思いますが…
>で,正しくはどう書いたら良いのでしょうか?
というタイトルに対し、コメントで
>本当のところは、コピーの必要がないじゃないの?
とありますが、コメントの方正解です。
BMIを計算させて、その値で「やせ型」「普通」「やや肥満」「肥満」と表示させるプログラムなだけなのです。
if(BMI<18.5){
printf("やせ型です\n");
}else if(BMI<25){
printf("普通です\n");
}else if(BMI<30){
printf("やや肥満です\n");
}else{
printf("肥満です\n");
}
ということを書けば良いだけ(なことに加え、最初に出してきたソースはこのように書いてあった)のところを、
if(BMI<18.5){
strcpy(hoge,"やせ型");
}else if(BMI<25){
strcpy(hoge,"普通");
}else if(BMI<30){
strcpy(hoge,"やや肥満");
}else{
strcpy(hoge,"肥満");
}
printf("%sです\n",hoge);
と書き直して出してきた、というわけです。
これは、さすがに愚痴らざるを得ない、と思えますよねorz
#もうね、自分の教え方が悪いのかと、本当に落ち込みます。
Re:皆様コメントありがとうございます (スコア:1)
>int hoge[100];
>
>for(loop=0;loop<=100;loop++){
> hoge[loop]=some_function(loop);
>}
これをやったら(forの継続条件のところにイコール入れると他の変数を壊す)という話、
int loop;
int hoge[10];
for(loop=0;loop<=10;loop++){
hoge[loop]=0;
}
でコンパイル、実行するとhoge[9]の次の領域にloopが置かれていることがある(実際、そこに置かれるというのはgdbで確認した)ので、変数loopがforループのインクリメント以外で書き変わり、無限ループになることがあるよ、というのを目の前で実演(無限ループを実行し)し、「こう書いたらダメですよ」と口うるさく説明した、その30分後に書いてくれる素敵すぎる人達なんです…orz
まったくもって話を聞いてない。
ナメられてるのかなぁ。
Re: (スコア:0)
問題は、hogeの型はcharの配列ではなくて、const char*で良いってことに気が付いていないこと。気が付いてないから、配列を使って、コピーをしてはまると。
Re:皆様コメントありがとうございます (スコア:1)
const char* hoge;
if(BMI<18.5){
hoge="やせ型";
}else if(BMI<25){
hoge="普通";
}else if(BMI<30){
hoge="やや肥満";
}else{
hoge="肥満";
}
printf("%sです\n",hoge);
ってことですね。
他の言語の経験者にまず教えるべきは、
Cには文字列型がないってことなんだろうなあ。