c语言——读取多行文本问题

用VC6写的一个简单程序,实现在点击打开时读入指定目录下的多行文本。界面如下(很丑):指定文件1.txt文件内容为:abcdabcab但是运行生成的结果是:abcdabc... 用VC6写的一个简单程序,实现在点击打开时读入指定目录下的多行文本。

界面如下(很丑):

指定文件1.txt文件内容为:
abcd
abc
ab

但是运行生成的结果是:
abcd
abc
ab
ab

最后一行输出了两次,这是什么原因?

请详细说明一下,多谢~~~

打开按钮ID:ID_MENUITEMOPEN

文本框ID:IDC_EDIT1

涉及代码如下:

void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
switch(id)
{
case ID_MENUITEMOPEN:
{
FILE *p=fopen("c:\\1.txt","r"); //定义文件指针,读取指定目录文件
TCHAR ch[256];
TCHAR ed[256]={0};
while(!feof(p)) //检测指针是否到了文件尾
{
fgets(ch,sizeof(ch),p);
lstrcat(ed,ch);
int w=strlen(ed);
ed[w-1]='\0';
lstrcat(ed,"\r\n");
}
SetDlgItemText(hwnd,IDC_EDIT1,ed);
fclose(p);
}
break;
default:
break;
}
}
展开
 我来答
L_o_o_n_i_e
推荐于2016-03-24 · TA获得超过4.2万个赞
知道大有可为答主
回答量:8507
采纳率:38%
帮助的人:5090万
展开全部
feof(p) 应当在读语句后测定,也就是:
读,测定,如果不是EOF则输出。
你现在的次序是:
测定,读,输出,回到测定。
所以读到EOF,你重复输出了最后一次成功读入的内容。
------------
简单修改:
if ( fgets(ch,sizeof(ch),p)==NULL) break;
铁淑敏宁丙
2019-02-25 · TA获得超过3.6万个赞
知道大有可为答主
回答量:1.2万
采纳率:33%
帮助的人:1082万
展开全部
很简单,因为您的文本的最后一行之后还有一个新航,即最后一行内容并不是"ab",而是空,即'"ab"的下一行,需要改正代码如下即可
while(!feof(p))
//检测指针是否到了文件尾
{
memset(ch,
0,
256);
fgets(ch,
sizeof(ch),
p);
lstrcat(ed,
ch);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
千锋教育
2015-11-06 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
展开全部
1、用fgets函数可以读取文件中某行的数据,某列数据就必须一个一个读入每行的第几个字符,再存入到一个字符串当中。

2、例程:

#include<stdio.h>
#include<string.h>
void main()
{
char a[100],b[100],c[100];
int i=3,j=4,k=0; //第三行,第四列
FILE *fp = fopen("data.txt","r");
while(fgets(c,100,fp)){ //读入每行数据
i--;
if(i==0) strcpy(a,c); //读到第三行数据
b[k++]=c[j-1]; //把每行的那列字符拷到b中
}
b[k]=0;
printf("第%d行数据:%s\n",i,a);
printf("第%d列数据:%s\n",j,b);
fclose(fp);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式