我正在尝试通过输入文件的不同行运行我的tokenize函数。
void
tokenize(FILE *src, char* buffer)
{
fprintf(stdout,"%s\n", buffer);
int i = 0;
while ( buffer[i] != '\n'){
if(buffer[i] == ' '){
i++ ;
}else if (buffer[i]=='+'){
fprintf(stdout,"+ Addition operator\n");
i++;
}else if (buffer[i]=='-'){
fprintf(stdout,"- Subtraction operator\n");
i++;
}else if (buffer[i]=='*'){
fprintf(stdout,"* Multiplication operator\n");
i++;
}else if (buffer[i]=='/'){
fprintf(stdout,"- Division operator\n");
i++;
}else if (buffer[i]=='^'){
fprintf(stdout,"- Exponentiation operator\n");
i++;
}else if( buffer[i]== '>'){
if(buffer[i+=1] == '='){
fprintf(stdout, ">= Comparison Operator\n");
i+=2;
}else{
fprintf(stdout,"> Comparison Operator\n");
i+=1;
}
}else if( buffer[i]== '<'){
if(buffer[i+=1] == '='){
fprintf(stdout, "<= Comparison Operator\n");
i+=2;
}else{
fprintf(stdout,"< Comparison Operator\n");
i+=1;
}
}else if (isdigit((int)buffer[i])){
fprintf(stdout, "%c Simple Numeral\n",buffer[i]);
i++;
}else if (buffer[i] == ')'){
i++;
}else if (buffer[i] == '('){
i++;
}
}
}
int
main(int argc, const char* argv[])
{
FILE* src = input_from_args(argc, argv);
char str[80];
while(fgets(str, 80, src) && fgetc(src)!=EOF){
tokenize(src, str);
}
return 0;
}
我觉得我在以前的经历基础上走在了正确的轨道上。通过输入文件进行循环总是让我困惑。到目前为止,它只通过第一行。
答案 0 :(得分:2)
以下这一行的行为方式可能与您没有意图相符。
while(fgets(str, 80, src) && fgetc(src)!=EOF){
除了第一个字符外,它会占用每行的第一个字符,并跳过最后一行的处理。
你需要
while(fgets(str, 80, src) != NULL){
答案 1 :(得分:0)
看起来您可能希望使用类似getline的内容一次读取一行并进行解析。有关详细信息,请参阅手册页中的示例代码。