2

私のプロジェクトの一環として、Cのファイルから読み取ろうとしています。

私の目的は、そのファイル内の単語(空白、コンマ、セミコロン、または改行文字で区切られている)をトークンに解析することです。

そのために私は文字ごとに読まなければなりません。

do {

    do {

        tempChar = fgetc(asmCode);
        strcpy(&tempToken[i], &tempChar);

        i++;

    } while (tempChar != ' ' || tempChar != ':' || tempChar != ';' || tempChar != ',' || tempChar != '\n');//reading until the given parameters

    i = 0;

    //some other code with some other purpose

} while (tempChar != EOF);//reading until the end of the file

次のコードはファイルから読み取りますが、内部の条件が適用されないため、読み取りが停止しません。

私はここで何が間違っているのですか?

PStempCharとtempTokenの両方がchar変数として定義されています。また別の

4

2 に答える 2

4

このコード行で問題が発生していると思います。

while (tempChar != ' ' || tempChar != ':' || tempChar != ';' || tempChar != ',' || tempChar != '\n');

||を使用したため、条件は常に真であり、無限ループになります。これを試してください、これはうまくいくかもしれません:

while (tempChar != ' ' && tempChar != ':' && tempChar != ';' && tempChar != ',' && tempChar != '\n');

if(feof(asmCode))また、私はよりも好きif (tempChar == EOF)です。値tempCharがEOFと同じ場合、は機能しif (tempChar == EOF)ません。

于 2012-12-27T15:56:42.683 に答える
0

私があなたのコードで見るように、タイプtempcharはcharです:char tempchar

strcpy(&tempToken[i], &tempChar);charのコピーには使用できません。strcpyは文字列をstingバッファにコピーします。

次の固定コードを試してください

do {

    do {

        tempChar = fgetc(asmCode);

        if (tempChar == EOF)
            break;
        tempToken[i]= tempChar;

        i++;

    } while (tempChar != ' ' || tempChar != ':' || tempChar != ';' || tempChar != ',' || tempChar != '\n');//reading until the given parameters
    tempToken[i]='0';
    i = 0;  // this will erase the old content of tempToken !!! what are you trying to do here ?

    //some other code with some other purpose

} while (tempChar != EOF);//reading until the end of the file
于 2012-11-09T22:07:37.477 に答える