我有一个文本文件如下:

sf5 sd6 sh7

sh7 sd6 sf5(两个或其他27个可能组合的任意顺序)。
我正试图从中提取值
但是,我想按任何可能的顺序来做,所以sf(somenumber)可以在这3个位置中的任何一个,也可以在另外两个位置中。因此,我试图使用5,6, and 7作为我的宏之一。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>

typedef struct test
{
    char * values;
}test;

int main(int argc, char * argv[])
{
    test t;
    FILE * file;
    char str[100];
    int a,b,c;

    if(argc > 1)
    {
        file = fopen(argv[1],"r");

        if(file == NULL)
        {
            exit(1);
        }
    }

    else
    {

        exit(1);
    }

    while(fgets(str,100,file) != NULL)
    {
        t.values = strtok(str," \n");

        if(t.values == NULL)
            exit(1);
        if(strstr(t.values,"sf"))
        {
            a = atol(t.values+2); // the number two positions after the letter
        }


        if(strstr(t.values,"sd"))
        {
            b = atol(t.values+2); // the number two positions after the letter

        }


        if(strstr(t.values,"sh"))
        {
            c = atol(t.values+2); // the number two positions after the letter

        }

        printf("Value of a: %d\n Value of b: %d\n Value of c: %d\n",a,b,c);

    }
}

但是,输出只对第一个值“sf5”正确,就好像没有分析第二个值一样。另外,如果我把“sf5”移到末尾,它的值将为零,这同样毫无意义。
基本上,只有第一个strstr语句能够成功工作。任何帮助都将不胜感激!

最佳答案

strstr函数提供搜索字符串的位置,如果未找到,则为空。必须在atol函数中使用此结果才能获得关联的值。
在下面的代码中,我使用变量token存储strstrstr的结果:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>

int main(int argc, char * argv[])
{
    FILE * file;
    char str[100];
    int a,b,c;

    if(argc > 1)
    {
        file = fopen(argv[1],"r");
        if(file == NULL)
        {
            exit(1);
        }
    }
    else
    {
        exit(1);
    }

    while(fgets(str,100,file) != NULL)
    {
        char *token;

        token = strstr(str,"sf"));
        if (token != NULL)
        {
            a = atol(token+2); // the number two positions after the letter
        }

        token = strstr(str,"sd"));
        if (token != NULL)
        {
            b = atol(token+2); // the number two positions after the letter

        }

        token = strstr(str,"sh"));
        if (token != NULL)
        {
            c = atol(token+2); // the number two positions after the letter
        }

        printf("Value of a: %d\n Value of b: %d\n Value of c: %d\n",a,b,c);
    }
    fclose(file);
}

关于c - 在C中读取文本文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28995374/

10-10 08:28