配列とfor文の組み合わせがうまくいきません
初心者なので質問文でおかしなことを言ってるかもしれませんが
よろしくお願いします
ソースは下に貼り付けました。
コースの数を入力し、そのコースに名前をつけるという
プログラムを書いたのですが
forでcoursename[0]からcoucename[3]までの4つに名前を入力しようと
コース数に「4」を入力しても
forによって繰り返されるのは
coursename[0]からcoucename[2]までの3つでした
どう直せばいいのでしょうか
====================================================
#include <stdio.h>
#define MAX_COURSE 5 /*最大数*/
int main(void){
int course = 0; /*コース数*/
char coursename[MAX_COURSE][100]; /*コース名*/
char line[100]; /*入力用文字型配列*/
int i;
/*コース数の入力*/
while (course < 1 || 5 < course){
printf("コース数の入力を行ってください。(1~5)\n");
printf("INPUT : ");
fgets(line, sizeof(line), stdin);
sscanf(line, "%d", &course);
}
/*コース名の入力*/
printf("コース名の入力を行ってください。\n");
for(i=0; i<course-1; i++){
printf("%d科目 : ", i+1);
fgets(line, sizeof(line), stdin);
sscanf(line, "%s" , coursename[i]);
}
return 0;
}
====================================================
回答(4件)
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示
forが繰り返されるのは条件式が「真」である間だけ。
iの値と式の結果を表にして 条件が正しいか検証してごらん
なぁに、ほんの0~4までしかないし すぐすぐ
ほんとは いくないんだけど表の最初だけ書いておいてあげるよ
-------------------
course=4
i : i<course-1
---+------------
0 : true
この回答へのお礼
回答ありがとうございます。
基本的な算数の部分で間違えてました
本当にお恥ずかしい
No.3ベストアンサー10pt
for(i=0; i<course-1; i++){
courceが4の場合、for文で条件を満たすのは0,1,2しかないですから当然です。この場合、
for(i=0; i<course; i++){
for(i=0; i<=course-1; i++){
のどちらかとする必要があります。
No.2ベストアンサー20pt
>コース数に「4」を入力しても
>forによって繰り返されるのは
>coursename[0]からcoucename[2]までの3つでした
>
for(i=0; i<course-1; i++)
なんだから、courseに「4」を入力したら
for(i=0; i<(4-1); i++)
↓
for(i=0; i<3; i++)
となるから、0~2までで正しい。
というか、「1」を入力した時点でおかしいのがわかるはずだし、
他の数で出こまで表示されるかで法則性もすぐにわかるはず。
>for(i=0; i<course-1; i++){
course-1 と書いているのはなぜですか?
このコードでは、courseが4のとき、iは0, 1, 2の順に変化します。
この回答へのお礼
回答ありがとうございます
お恥ずかしことに不等号の意味がわかっておりませんでした
以後気を付けます
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示












