C中的文件I / O,fgets()和strtok()函数

时间:2018-03-11 10:41:33

标签: c

在file.txt中:

FIRST TYPEONE  
FIRST TYPETWO  
FIRST TYPETHREE  
SEC TYPETHREE  
FIRST TYPETWO  
FIRST TYPEONE  
SEC TYPETWO  
FIRST TYPETHREE  
FIRST TYPEONE  

当我执行代码时,所有“function()”都不起作用。第一个令牌(令牌#1)取“FIRST”,printf#1打印“FIRST”并进入if条件。到目前为止,没关系。 if条件内的令牌采用“TYPEONE”,printf#2打印“TYPEONE”。我认为令牌目前保持“TYPEONE”。但是当我使用strcmp并比较令牌和“TYPEONE”时,它不会进入这种情况(条件#1)等等 条件#1内的function()不起作用,printf函数不会在屏幕上打印“type1”。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE_SIZE 200

int main()
{   
    char lineSize[MAX_LINE_SIZE];
    char *token;
    FILE *f = fopen("file.txt", "r");
    while (i< 9)
    {
        fgets(lineSize, MAX_LINE_SIZE, f); 
        token = strtok(lineSize, " "); //token#1

        printf("%s\n", token); //printf#1

        if( strcmp(token, "FIRST") == 0 )
        {   
            token = strtok(NULL , " "); //token#2

            printf("%s\n\n", token); //printf#2


            if( strcmp(token, "TYPETWO") == 0 )
                {function(); printf("type2\n");
                }
            else if( strcmp(token, "TYPETHREE") == 0 )
                {function(); printf("type3\n");
                }
            else if( strcmp(token, "TYPEONE") == 0 ) //condition#1
                {function(); printf("type1\n");
                }
        }

        else if( (strcmp(token, "SEC")) == 0  ) 
        {
            token = strtok(NULL, " ");

            if( (strcmp(token, "TYPETWO")) == 0 )
                {
                    function();
                    printf("type2\n");
                }

            else if( (strcmp(token, "TYPETHREE")) == 0 )
                {
                    function();
                    pritf("type3\n");
                }

        }
    }
}

1 个答案:

答案 0 :(得分:0)

我实际上并不知道你假装的样品是什么,但它形成了不良。我只是对您调用的函数的结果进行了最小的测试集,以便能够编译和运行您发布的示例程序。但无论如何,我并不确切地知道你想要什么。请发布一个完整且可验证的代码示例(您的i变量既未定义,也未在任何地方初始化,任何地方都没有function()定义,也没有函数返回值检查任何地方的错误) 您对function()的意思不起作用......在任何地方都没有定义函数function()。如果您不发布function(),我们如何诊断diff -u会发生什么?

接下来是您的程序所需的一组修改(以补丁文件--- pru.c.orig 2018-03-12 09:03:54.000000000 +0200 +++ pru.c 2018-03-12 09:17:11.000000000 +0200 @@ -1,23 +1,41 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <errno.h> + #define MAX_LINE_SIZE 200 +void function() +{ + printf("in function();\n"); +} + int main() { char lineSize[MAX_LINE_SIZE]; char *token; FILE *f = fopen("file.txt", "r"); + int i = 0; + + if (!f) { /* CHECK FOR ERRORS */ + fprintf(stderr, + "ERROR: fopen: file.txt: %s\n", + strerror(errno)); + exit(1); + } + while (i< 9) { fgets(lineSize, MAX_LINE_SIZE, f); token = strtok(lineSize, " "); //token#1 + if (!token) break; /* CHECK FOR ERRORS */ printf("%s\n", token); //printf#1 if( strcmp(token, "FIRST") == 0 ) { token = strtok(NULL , " "); //token#2 + if (!token) break; /* CHECK FOR ERRORS */ printf("%s\n\n", token); //printf#2 @@ -36,6 +54,7 @@ else if( (strcmp(token, "SEC")) == 0 ) { token = strtok(NULL, " "); + if (!token) break; /* CHECK FOR ERRORS */ if( (strcmp(token, "TYPETWO")) == 0 ) { @@ -46,9 +65,13 @@ else if( (strcmp(token, "TYPETHREE")) == 0 ) { function(); - pritf("type3\n"); + printf("type3\n"); } } + i++; } + if (i < 9) /* CHECK FOR ERRORS */ + fprintf(stderr, "ERROR: less than 9 lines of input (%d).\n", i+1); + return 0; } 的形式)以使其可以运行,但是下次请检查您的代码是否至少可以运行这里的东西(错误信息足够清晰,可以自己做)

mSearchView.setIconified(false);
相关问题