从文本中读取字符串,拆分后转化成long保存进数组,但是总是一个很奇怪的错,请帮忙看一下
我的需求是这样的
从一个test.txt的文本中按行读取字符串
test.txt中的内容是这样的
1,2
3,4
5,8
我先把每行从逗号拆分成两个字符串,比如1,2被分成1和2.然后再把他们分别转换成long型数字保存进数组
下面是我的代码。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLINE 100
#define BUFLEN 1024
//用于保存从文件中读取的字符串
char *array[MAXLINE];
//保存转化成数字的结构,比如“1,2”转化成数字后保存为userItem[0]=1,userItem[1]=2
long userItem[10][2];
/**
字符串转化成数字
**/
long stringToNum(char *str){
long i=0,s=0;
printf("s=%s,",str);
while(*str!='\0'){
i=*str-'0';
s=s*10+i;
str++;
}
printf("s=%ld\n",s);
return s;
}
这是我的字符串分割的方法。
/**
把字符串根据逗号作为分割副,分成两端,再分别转化成long,保存到long num[2]
**/
void slip(long num[2],char str[]){
int in=0;
char *p[20];
char *buf=str;
//用“,”做分割符进行分割
while((p[in]=strtok(buf,","))!=NULL) {
buf=p[in];
in++;
buf=NULL; }
//把分割后的字符串分别转换成数字,保存进数组long num[2]
num[0]=stringToNum(p[0]);
num[1]=stringToNum(p[1]);
}
/**
从文本中读取文件,写入到字符串数组中
**/
readfileIntoCharArray(char *array[MAXLINE]){
FILE *file;
char buf[BUFLEN];
int len=0,i=0;
file=fopen("test.txt","r");
if(!file)return -1;
while(fgets(buf,BUFLEN,file))
{
len=strlen(buf);
array[i]=(char*)malloc(len+1);
if(!array[i])break;
strcpy(array[i++],buf);
}
fclose(file);
array[i]="end";
}
我的main方法
int main()
{
//读取文本,往array中读入字符闯
readfileIntoCharArray(array);
int i=0;
for(i=0;i<MAXLINE;i++){
if(array[i]=="end"){
break;
}
//把每个字符串分割后,转化成long,保存进数组userItem[i]
slip(userItem[i],array[i]);
}
}
这里我遇到了奇怪的问题
比如我的.test.txt总的数据是
1,1
1,4
2,1
可是我最后遍历userItem时候得到的数组却是类似
1,1
1,-18
2,-28
之类的数据,很奇怪,text.txt中的数据,第一列(红色的部分)都成功并且正确的转化成了对应的long类型数字,但是第二列则基本上都不正确
这个时候我就在
long stringToNum(char *str){
long i=0,s=0;
printf("传入的字符串=%s,",str);
while(*str!='\0'){
i=*str-'0';
s=s*10+i;
str++;
}
printf("处理后的结果=%ld\n",s);
return s;
}
方法中加上了红色的部分打印我的传入的*str和最后处理结果s。我得到如下结果
传入的字符串=1,处理后的结果=1
传入的字符串=1
,处理后的结果=-28
传入的字符串=1,处理后的结果=1
传入的字符串=4
,处理后的结果=2
传入的字符串=2,处理后的结果=2
传入的字符串=1
,处理后的结果=-28
传入的字符串=2,处理后的结果=2
传入的字符串=2
,处理后的结果=-18
传入的字符串=2,处理后的结果=2
传入的字符串=3
,处理后的结果=-8
传入的字符串=2,处理后的结果=2
传入的字符串=4
,处理后的结果=2
传入的字符串=3,处理后的结果=3
传入的字符串=1
,处理后的结果=-28
传入的字符串=3,处理后的结果=3
传入的字符串=3
,处理后的结果=-8
传入的字符串=4,处理后的结果=4
传入的字符串=3
,处理后的结果=-8
传入的字符串=4,处理后的结果=4
传入的字符串=5
,处理后的结果=12
观察这些结果,我发现
比如第一行数据,传入的字符串=1,处理后的结果=1。是正确的。
可是第二行数据就变成了
传入的字符串=1
,处理后的结果=-28
这里出现一个奇怪的问题,
1.莫名其妙的,多了一个换行
2.传入的字符串是1,可是处理后的结果确实-28
这到底是为什么??我哪里出错了
请高人指点
希望我问题描述的足够明白。谢谢啦。