-2

file.txt の文字がスペース ' ' であるか、このコードを使用していないかをテストしようとしています:

char *Appartient (FILE *f, char *S)
{
    int i = 0, nbdechar = 0, nbocc = 0, PosdePremierChar, space = 0;
    char c;
    while ((c = getc(f)) != EOF) {
        PosdePremierChar = ftell(f);
        if (c == S[0]) {
            nbdechar = 0;
            for (i = 1; i < strlen(S); i++) {
                c = getc(f);
                if (c == S[i]) {
                    nbdechar++;
                }
            }
            if (nbdechar == strlen(S) - 1) {
                nbocc++;
            } else {
                rewind(f);
                fseek(f, PosdePremierChar - 1, SEEK_CUR);
                while ((c = getc(f)) != ' ');
            }
        } else {
            while ((c = getc(f)) != ' ') {
                space++;
            }
        }
    }
    printf("\n Le nb d'occurence est %d", nbocc);
    if (nbocc == 0) {
        return "false";
    } else {
        return "true";
    }
}

しかし、デバッガーで変数「c」を検査すると、奇妙な記号「ے」がゴミのように表示されます。

変数 'c​​' の値が -1 で、文字 'ے' として解釈されることを示すデバッガーのスクリーンショット

なにが問題ですか

4

3 に答える 3

0

未定義の動作fが発生する場合に備えて、開いているかどうかをテストしませんでした。ファイルが開いているかどうかを確認してください

FILE *file;
int   chr;

if ((file = fopen("test.txt", "r")) == NULL)
 {
    fprintf(stderr, "Cannot open `test.txt'\n");
    return -1;
 }

while (((chr = fgetc(file)) != EOF) && (chr == ' '))
    printf("space\n");

たとえば、 ではなく である必要があるため、 を返すため、のchr型を宣言する必要があります。intfgetc()intEOFintchar

また、デバッグモードは変数の値を追跡するのに便利です。尋ねる方法を知っていれば、必要に応じて、ASCII、10 進数、または 16 進数で値を取得できると思います。

于 2015-05-24T14:37:51.440 に答える