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/