- ベストアンサー
配列と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)
- 専門家の回答
質問者が選んだベストアンサー
>コース数に「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」を入力した時点でおかしいのがわかるはずだし、 他の数で出こまで表示されるかで法則性もすぐにわかるはず。
その他の回答 (3)
- SAYKA
- ベストアンサー率34% (944/2776)
forが繰り返されるのは条件式が「真」である間だけ。 iの値と式の結果を表にして 条件が正しいか検証してごらん なぁに、ほんの0~4までしかないし すぐすぐ ほんとは いくないんだけど表の最初だけ書いておいてあげるよ ------------------- course=4 i : i<course-1 ---+------------ 0 : true
- okg00
- ベストアンサー率39% (1322/3338)
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++){ のどちらかとする必要があります。
- asuncion
- ベストアンサー率33% (2127/6289)
>for(i=0; i<course-1; i++){ course-1 と書いているのはなぜですか? このコードでは、courseが4のとき、iは0, 1, 2の順に変化します。
お礼
回答ありがとうございます お恥ずかしことに不等号の意味がわかっておりませんでした 以後気を付けます
お礼
回答ありがとうございます。 基本的な算数の部分で間違えてました 本当にお恥ずかしい