我正在尝试从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
即使以下代码从文件中读取,它也不会停止读取,因为它不会在内部应用条件。
我在这里做错了什么?
P.S。 tempChar& tempToken被定义为char变量。另一个
答案 0 :(得分:4)
我想这行代码出了问题:
while (tempChar != ' ' || tempChar != ':' || tempChar != ';' || tempChar != ',' || tempChar != '\n');
由于您使用了||,因此条件始终为true,使其成为无限循环。 试试这个,这可能有效:
while (tempChar != ' ' && tempChar != ':' && tempChar != ';' && tempChar != ',' && tempChar != '\n');
另外,我更喜欢if(feof(asmCode))
而不是if (tempChar == EOF)
。如果值tempChar与EOF相同,则if (tempChar == EOF)
将不起作用。
答案 1 :(得分: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