更新时间2018-10-25 10:53:38
#include <stdio.h>
int main()
{
FILE *fp;
int b,e,i,a=0;
char s[100];
fp=fopen("t.txt","r");
while(fgets(s,100,fp)!=NULL)
{
a++;
b=e=-1;
i=0;
while(s[i])
if (s[i++]=='D')
{
b=i;
break;
}
if (b!=-1)
while(s[i])
if (s[i++]!='D')
{
e=i-1;
break;
}
if (b!=-1)
printf("line %d begin=%d end=%d ",a,b,e);
}
fclose(fp);
return 0;
}
关于这个问题,想再咨询一下,我在前面加了一个if(s[0]!="M"){continue;}来判断每行是否是MNXXX这样的格式,然后将其省略,怎么不对呢?如果MN下面是一大行好操作,但是这个是很多行,希望再具体点儿给个判D的头和尾的操作?
你的确可以用
if(s[0]!="M")来判断(若其它数据的开头没有M的话)
程序可以改成以下的(以块来判断)
#include <stdio.h>
int main()
{
FILE *fp;
int b,e,i,a=0,l,bl,el;
char s[100];
fp=fopen("t.txt","r");
while(fgets(s,100,fp)!=NULL)
{
if (s[0]=='M')
{
if (a) //考虑第一块
{
if (b!=-1)
{
printf("第%d块的D出现在第%d行的第%d个字符
",a,bl,b);
printf("在第%d行的第%d个字符结束
",el,e);
}
}
a++;
b=e=-1;
l=0;
continue;
}
l++;
i=0;
while(s[i])
if (s[i++]=='D')
{
if (b==-1)
{
b=i;
bl=l;
}
el=l;
e=i;
}
}
if (b!=-1) //最后一块处理
{
printf("第%d块的D出现在第%d行的第%d个字符
",a,bl,b);
printf("在第%d行的第%d个字符结束
",el,e);
}
fclose(fp);
return 0;
}
从几次你的问题,发现你基础还是待提高的,因为程序用的都是很基础的循环。
还有,上次的问题希望你能结贴给我,现在360问答中有太多不懂装懂混水的,关键管理有时也会不负责。要打击我回贴积极性的。
好简单的事情。烂读撒。反正人家也是听不懂的。