2

私はコードの何が問題だったのかをほぼ何時間も把握しようとしていますが、それを見つけることができないようです. 私のコードはコンパイルされていました。これは、コンパイラに違反するエラーがないことを示していますが、私のプログラムは思い通りに動作しません。

私のコードは次のとおりです。

#include <stdio.h>
#define MAXNUM 3
#define MAXLEN 9

int main ()
{
        char input[MAXNUM][MAXLEN];
        int count;
        int a = 0;
    for ( count = 0; (count + 1) < MAXNUM; count++ ) { 
    printf ( "Enter number: (12XXXXXXX): " );
        if ((fgets ( input[count], sizeof(input), stdin )) != 0 ) {
            a = atoi (input[count]);
            if ((( a / 10000000 ) >= 13 ) || (( a / 10000000 ) <= 11 )) {
            //error message
            }
        } else {
            //error message
        }
    } 
    return 0;

}

プログラムは 3 つの入力を受け取ることになっていましたが、4 つかかると致命的に終了します。他の機能は正しく機能しています (間違った入力の処理など)。唯一の問題は、ユーザーからの入力を求める回数にあるようです。間違いは for ループ条件にあると思い込み、それを理解しようとしましたが、役に立ちませんでした。誰でも指摘できますか?

*わかりました。for ループ状態にあります: * (count + 1) <= MAXNUM

4

1 に答える 1

0

for()ループは 1 回から頻繁に繰り返されます。だからというより

for ( count = 0; (count + 1) < MAXNUM; count++ ) {

と置換する

for ( count = 0; count < MAXNUM; count++ ) {

OPが独自の解決策で質問を編集したことに気付きました:

(count + 1) <= MAXNUM;

これはほぼ同等です。count + 1オーバーフローした場合の処理​​は、選択したコンパイラによって異なります。慣用的count < MAXNUMな解決策をお勧めします。

于 2013-09-06T01:33:38.187 に答える