Closed. This question is off-topic. It is not currently accepting answers. Learn more。
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
四年前关闭。
我试图通过输入文件的不同行运行tokenize函数。
根据以前的经验,我觉得自己走上了正确的道路。在输入文件中循环总是让我困惑。到目前为止,它只通过第一条线。
它将吃掉除第一行以外的每一行的第一个字符,并跳过对最后一行的处理。
你需要
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
四年前关闭。
我试图通过输入文件的不同行运行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;
}
根据以前的经验,我觉得自己走上了正确的道路。在输入文件中循环总是让我困惑。到目前为止,它只通过第一条线。
最佳答案
下面这一行的行为方式可能不是您所想的。
while(fgets(str, 80, src) && fgetc(src)!=EOF){
它将吃掉除第一行以外的每一行的第一个字符,并跳过对最后一行的处理。
你需要
while(fgets(str, 80, src) != NULL){
关于c - 在C中的输入文件的行中循环的麻烦,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29505924/
10-11 19:31