c - C 中的文件 I/O、fgets() 和 strtok() 函数

标签 c

file.txt 内:

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

当我执行代码时,所有“function()”都不起作用。第一个标记(token#1)采用“FIRST”,printf#1 打印“FIRST”并进入 if 条件。到目前为止,还好。 if 条件内的标记采用“TYPEONE”,并且 printf#2 打印“TYPEONE”。我认为 token 目前保留“TYPEONE”。但是当我使用 strcmp 并比较 token 和“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");
                }

        }
    }
}

最佳答案

我实际上不知道你用你的样本假装什么,但它的格式不正确。我刚刚对您调用的函数的结果进行了最低限度的测试,以便能够编译和运行您发布的示例程序。但无论如何,我不太明白你想要用它做什么。请发布完整且可验证的代码示例(您的 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;
 }

关于c - C 中的文件 I/O、fgets() 和 strtok() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49219083/

相关文章:

c - 素数生成器(spoj)

c - 在 C 中使用 "gets"作为字符串输入

c - 在函数 c 中使用枚举定义全局变量

c - ucrtbased.dll 与 ucrtbase.dll

ios - 如何开始使用 OpenGL ES?

创建convert_line_endings函数

从文件或标准输入读取并删除空行的 C 程序

c - 出现错误时安全退出到特定状态

c - 使用C从txt文件中获取具体数据

c++ - Linux编程中的多目录 "make"