在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");
}
}
}
}
答案 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);