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

即使下面的代码从文件中读取,它也不会停止读取,因为它不会在 while 中应用条件。

我在这里做错了什么?

PS tempChar 和 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);用来复制字符。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 回答