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;
}
} 展开
界面如下(很丑):
指定文件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;
}
} 展开
3个回答
展开全部
很简单,因为您的文本的最后一行之后还有一个新航,即最后一行内容并不是"ab",而是空,即'"ab"的下一行,需要改正代码如下即可
while(!feof(p))
//检测指针是否到了文件尾
{
memset(ch,
0,
256);
fgets(ch,
sizeof(ch),
p);
lstrcat(ed,
ch);
}
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);
}
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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询