请教:fget不能循环重复读取文本的内容?怎么破

guitarliu123 2016-10-22 04:51:38
#include<iostream>
#include<fstream>
#include<strstream>
#include<cmath>
#include<string>
#include <cstring>
#include <stdio.h>
using std::endl;
using std::cin;
using std::cout;
using std::string;
using namespace std;
int main()
{
FILE *fp,*fp1;
int i,j;
char str1[100];
char strchar1[3];
if ((fp1 = fopen("database.txt", "r")) == NULL)
{
printf("fopen() error %d: %s\n", errno, strerror(errno));
exit(-1);
}

str1[strlen(str1)] = '\0';
for(i=0;i<=100;i++)
{
while(fgets(str1, sizeof(str1), fp1)) //此处只能读取一遍成语数据,怎么办?
{
cout<<str1;
}

return 0;
}
}
...全文
179 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ouyang_Lianjun 2016-10-23
  • 打赏
  • 举报
回复
上述代码运行环境为:vc++6.0
1.txt中的内容为:

程序运行结果输出为:

代码我没修改什么,直接可以运行,没注释那些,一样是可以运行的
Ouyang_Lianjun 2016-10-23
  • 打赏
  • 举报
回复
#include<iostream>
#include<fstream>
#include<strstream>
#include<cmath>
#include<string>
#include <cstring>
#include <stdio.h>
using std::endl;
using std::cin;
using std::cout;
using std::string;


using namespace std;
int main()
{
	FILE *fp, *fp1;
	int i, j;
	char str1[100];
	char strchar1[3];
	if ((fp1 = fopen("1.txt", "r")) == NULL)
	{
	printf("fopen() error %d: %s\n", errno, strerror(errno));
	exit(-1);
	}

//	str1[strlen(str1)] = '\0';
//	for (i = 0; i <= 100; i++)
//	{
		while (fgets(str1, sizeof(str1), fp1))   //fgets会自动为str1添加结尾符‘\0’
		{
			cout << str1;
		}

		return 0;
	//}
}
eastfriendwu 2016-10-22
  • 打赏
  • 举报
回复
在while循环前面加一行 rewind(fp)或者 fseek( fp, 0, SEEK_SET) 文件流指针移到开头。
paschen 版主 2016-10-22
  • 打赏
  • 举报
回复
可以通过fseek设置文件指针位置 http://en.cppreference.com/w/c/io/fseek 比如重新设置到开头:fseek( fp, 0, SEEK_SET)

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧