我有一个文本文件如下:
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/