c++问题getline函数和文件操作。

自己想开发一个小程序,从txt文本中读入一行字符,如果这一行为空就跳过,不为空就将该文本名字改为这一行字符。代码是这样的:intmain(intargc,char*arg... 自己想开发一个小程序,从txt文本中读入一行字符,如果这一行为空就跳过,不为空就将该文本名字改为这一行字符。代码是这样的:
int main(int argc,char* argv[])
{
if(argc==1)
cout<<"没有文件!"<<endl;
else
for(int i=1;i!=argc;i++)
{
string temp(argv[i]);
ifstream infile(temp.c_str());
string line;
while(geline(infile,line))
{
if(line.empty())
continue;
}
line="ren "+temp+' '+line+".txt";
system(line.c_str());
infile.close();
}
return 0;
}
请各位大侠指教,感激不尽!
这样的代码编译出来总是把文本名字改为空,不知道问题出在哪里? 已经加入break了,还是不行啊?而且如果我把line初始化成什么字符串,它就把文本名字改成什么。
展开
 我来答
Juncox
推荐于2017-10-06 · TA获得超过1638个赞
知道大有可为答主
回答量:1904
采纳率:0%
帮助的人:1597万
展开全部

#include <iostream>

#include <fstream>

#include <string>

using namespace std;

int main(int argc, char* argv[])

{

 if(argc==1){ cout<<"没有文件!"<<endl; return 0;}

 

 for(int i=1;i!=argc;i++){

  string temp(argv[i]);

  ifstream infile(temp.c_str());

  string line="";

  while(getline(infile, line))

  {

   if(!(line.empty())) break;

  }

  infile.close();  // 先关闭文件, 再进行改名

  if(!(line.empty())){ // line有内容

   line="ren "+temp+' '+line+".txt"; 

   cout<<"运行命令: "<<line<<endl;

   system(line.c_str());

  }

  else

   cout<<"文件"<<temp<<"内容为空或文件不存在!"<<endl;

 }

 return 0;

}

正能量女战神
高粉答主

推荐于2017-09-21 · 关注我不会让你失望
知道大有可为答主
回答量:1.8万
采纳率:80%
帮助的人:2086万
展开全部
  c++getline函数:
  原型

  istream& getline ( istream &is , string &str , char delim );  istream& getline ( istream& , string& );
  参数
  is 进行读入操作的输入流  str 存储读入的内容  delim 终结符
  返回值
  与参数is是一样的
  功能
  将输入流is中读到的字符存入str中,直到遇到终结符delim才结束。对于第一个函数delim是可以由用户自己定义的终结符;对于第二个函数delim默认为 '\n'(换行符)。  函数在输入流is中遇到文件结束符(EOF)或者在读入字符的过程中遇到错误都会结束。在遇到终结符delim后,delim会被丢弃,不存入str中。在下次读入操作时,将在delim的下个字符开始读入。
  ‍
  c++文件操作:
  C++用 ifstream 声明输入文件对象,用 ofstream 声明输出文件对象。
  使用ofstream简化文件输出(不用使用fwrtie):
  使用ifstream简化文件输入(不用使用fread):
  ‍‍
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
vbtraz
2009-11-30 · TA获得超过5532个赞
知道大有可为答主
回答量:4152
采纳率:0%
帮助的人:4445万
展开全部
while(geline(infile,line))
{
if(line.empty())
continue;
}
你这是打算一直循环到eof, 最后当然就是空

应该是 if(line.empty()) continue; else break;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhlonglt
2009-11-30 · TA获得超过130个赞
知道小有建树答主
回答量:109
采纳率:0%
帮助的人:0
展开全部
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(int argc,char* argv[])
{
if(argc==1)
cout<<"没有文件!"<<endl;
else
for(int i=1;i!=argc;i++)
{
string temp(argv[i]);
ifstream infile(temp.c_str());
string line;
while(!infile.eof())
{
getline(infile,line);
if(line!="") break;
}
line=line+".txt";
infile.close();
rename(temp.c_str(),line.c_str());
}
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友350302d
2009-11-30 · TA获得超过669个赞
知道小有建树答主
回答量:1048
采纳率:0%
帮助的人:609万
展开全部
#include<iostream>
#include<string>
#include<fstream>
using namespace std;
int main(int argc,char* argv[])
{
if(argc==1)
cout<<"没有文件!"<<endl;
else
for(int i=1;i!=argc;i++)
{
string temp(argv[i]);
ifstream infile(temp.c_str());
string line;
while(getline(infile,line))
{
if(!line.empty())
{
break;//不为空,跳出循环?
}
}
line="ren "+temp+' '+line+".txt";
infile.close();//应该先close,再执行system命令
system(line.c_str());

}
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式