当前位置: 代码迷 >> C语言 >> [求助]txt文件读取问题
  详细解决方案

[求助]txt文件读取问题

热度:327   发布时间:2007-08-21 10:43:27.0
[求助]txt文件读取问题

5/5/9 6/6/10 8/8/11 7/7/12 6/6/7
7/7/13 8/8/14 2/10/15 1/9/16
2/2/17 8/11/18 6/12/19 4/4/20
7/13/21 1/1/22 3/3/23 5/14/24
文件如上f.txt,逐行读取,如若后面跟的是三个字符串,直接读取成1 2 3,四个则读取成1 2 3,3 4 1两行数据,如果是五个则读取成1 2 3,3 4 1,4 5 1三行数据,最多五个。其中12345是指第几个字符串。高手们,求助呀,写了一个,只能读一行。郁闷,不会跳到下一行。
#include <stdio.h>
#include <string.h>
int main(void)
{
char tmp[1024];
char myarray[5][20],str[81];
char c;
int i,num=0,word=0;
char *bak=tmp;

FILE *fp=fopen("e://f.txt","rt");

if(!fp)
{
printf("can't open file ,exiting ...\n");
}

while(fgets(bak =tmp,1023,fp))
{
for(i=0;(c=str[i])!='\n';i++)
{
if(c==' ')
word=0;
else if(word==0)
{
word=1;
num++;
}
}
if(num==3)
{
sscanf(tmp,"%s %s %s\n",myarray[0],myarray[1],myarray[2]);
printf("%s %s %s\n", myarray[0],myarray[1],myarray[2]);
}
putchar('\n');
if(num==4)
{
sscanf(tmp,"%s %s %s %s\n",myarray[0],myarray[1],myarray[2],myarray[3]);
printf("%s %s %s\n", myarray[0],myarray[1],myarray[2]);
printf("%s %s %s\n", myarray[2],myarray[3],myarray[0]);
}
putchar('\n');
if(num==5)
{
sscanf(tmp,"%s %s %s %s %s\n",myarray[0],myarray[1],myarray[2],myarray[3],myarray[4]);
printf("%s %s %s\n", myarray[0],myarray[1],myarray[2]);
printf("%s %s %s\n", myarray[2],myarray[3],myarray[0]);
printf("%s %s %s\n", myarray[3],myarray[4],myarray[0]);
}
putchar('\n');
}
return 0;
}

搜索更多相关的解决方案: txt  文件  include  字符  

----------------解决方案--------------------------------------------------------

不知道如何跳到下一行,有人帮我改一下吗


----------------解决方案--------------------------------------------------------
哦,好像没有人帮我哦
----------------解决方案--------------------------------------------------------
我只说说
while(!eof)
fgets();
说明:这是伪码
不到文件结尾,用fgets读取每一行
----------------解决方案--------------------------------------------------------

每一行格式不一样呢,试了一下,出不来
----------------解决方案--------------------------------------------------------

#include <stdio.h>
#include <string.h>
int main(void)
{
char tmp[1024];
char myarray[5][20];
int i=0,line_num=1;
char *bak=tmp;

FILE *fp=fopen("e://f.txt","rt");

if(!fp)
{
printf("can't open file ,exiting ...\n");
}

while(fgets(bak = tmp, 1023, fp)!=EOF)
{
switch (sscanf(tmp, "%s %s %s %s %s", myarray[i][i], myarray[][],...))
{
case 3:
sscanf(tmp,"%s %s %s\n",myarray[0],myarray[1],myarray[2]);
printf("%s %s %s\n", myarray[0],myarray[1],myarray[2]);
break;
case 4:
sscanf(tmp,"%s %s %s %s\n",myarray[0],myarray[1],myarray[2],myarray[3]);
printf("%s %s %s\n", myarray[0],myarray[1],myarray[2]);
printf("%s %s %s\n", myarray[2],myarray[3],myarray[0]);
break;
case 5:
sscanf(tmp,"%s %s %s %s %s\n",myarray[0],myarray[1],myarray[2],myarray[3],myarray[4]);
printf("%s %s %s\n", myarray[0],myarray[1],myarray[2]);
printf("%s %s %s\n", myarray[2],myarray[3],myarray[0]);
printf("%s %s %s\n", myarray[3],myarray[4],myarray[0]);
break;
defalt:
printf("bad line of date at %d\n", line_num);
}
fclose(fp);
return 0;
}
请大家帮忙改一下,运行有错误


----------------解决方案--------------------------------------------------------
我彻底无语。。。。。。。。。。
楼上,别人的“示例代码”不要照抄好不好???



[此贴子已经被作者于2007-8-23 20:53:04编辑过]


----------------解决方案--------------------------------------------------------
....5555

----------------解决方案--------------------------------------------------------

#include <stdio.h>
#include <string.h>
int main(void)
{
char tmp[1024];
char myarray[5][20];
int i=0,line_num=1;
char *bak=tmp;

FILE *fp=fopen("e://f.txt","rt");

if(!fp)
{
printf("can't open file ,exiting ...\n");
}

while(fgets(bak = tmp, 1023, fp)!=EOF)
{
switch (sscanf(tmp, "%s %s %s %s %s", myarray[i], myarray[i+1],myarray[i+2],myarray[i+3],myarray[i+4]))
{
case 3:
sscanf(tmp,"%s %s %s\n",myarray[0],myarray[1],myarray[2]);
printf("%s %s %s\n", myarray[0],myarray[1],myarray[2]);
break;
case 4:
sscanf(tmp,"%s %s %s %s\n",myarray[0],myarray[1],myarray[2],myarray[3]);
printf("%s %s %s\n", myarray[0],myarray[1],myarray[2]);
printf("%s %s %s\n", myarray[2],myarray[3],myarray[0]);
break;
case 5:
sscanf(tmp,"%s %s %s %s %s\n",myarray[0],myarray[1],myarray[2],myarray[3],myarray[4]);
printf("%s %s %s\n", myarray[0],myarray[1],myarray[2]);
printf("%s %s %s\n", myarray[2],myarray[3],myarray[0]);
printf("%s %s %s\n", myarray[3],myarray[4],myarray[0]);
break;
defalt:
printf("bad line of date at %d\n", line_num);
}
fclose(fp);
return 0;
}
}
修改后如上,还是只能对第一行进行判断 55555555

[此贴子已经被作者于2007-8-24 9:06:26编辑过]


----------------解决方案--------------------------------------------------------

有人帮我看一下吗?


----------------解决方案--------------------------------------------------------
  相关解决方案