こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

配列と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;
}

====================================================

投稿日時 - 2008-11-06 19:28:33

QNo.4458452

困ってます

質問者が選んだベストアンサー

>コース数に「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」を入力した時点でおかしいのがわかるはずだし、
他の数で出こまで表示されるかで法則性もすぐにわかるはず。

投稿日時 - 2008-11-06 19:36:17

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

forが繰り返されるのは条件式が「真」である間だけ。

iの値と式の結果を表にして 条件が正しいか検証してごらん
なぁに、ほんの0~4までしかないし すぐすぐ


ほんとは いくないんだけど表の最初だけ書いておいてあげるよ

-------------------
course=4

i : i<course-1
---+------------
0 : true

投稿日時 - 2008-11-06 19:37:28

お礼

回答ありがとうございます。
基本的な算数の部分で間違えてました
本当にお恥ずかしい

投稿日時 - 2008-11-06 19:50:19

ANo.3

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++){
のどちらかとする必要があります。

投稿日時 - 2008-11-06 19:37:07

ANo.1

>for(i=0; i<course-1; i++){

course-1 と書いているのはなぜですか?
このコードでは、courseが4のとき、iは0, 1, 2の順に変化します。

投稿日時 - 2008-11-06 19:35:49

お礼

回答ありがとうございます
お恥ずかしことに不等号の意味がわかっておりませんでした
以後気を付けます

投稿日時 - 2008-11-06 19:47:57