首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文件处理错误

文件处理错误
EN

Stack Overflow用户
提问于 2013-11-25 16:41:20
回答 3查看 111关注 0票数 0

我在文件处理上有2个问题。

  1. 文件(Txt)不是使用fstream.Here创建的是我的代码

#包括#include #包括void () {char string80;int len;std::cout<<“输入字符串";std::cin>>string;len=strlen( string );std::fstream文件;file.open("RO1.TXT",std::ios::out 000-std:ios:in);for(int i=0;i

没有创建文件的问题是,名称RO1.TXT是否已损坏?

2.如果我使用ifstream和ifstream构建,那么文件就会创建,但是会显示一个额外的字符代码。

代码语言:javascript
复制
   #include<iostream>
#include<conio.h>
#include<fstream>

void main()
{std::ofstream file;
char string[80];
int len;
file.open("RO1.TXT");

std::cout<<"Enter a string ";
std::cin>>string;
 len=strlen(string);

for(int i=0;i<len;i++)
    file.put(string[i]);
file.close();
std::ifstream file1;
file1.open("RO1.TXT");
char ch;
while(file1)
{file1.get(ch);
std::cout<<ch;
}
file1.close();
getch();
}

问题是正在显示额外的字符。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-25 16:49:59

从它读取时,您需要检查ifstream是否仍然有效;您读取并显示,但是如果流已经结束.试试这个:

代码语言:javascript
复制
std::ifstream file1;
file1.open("RO1.TXT");
char ch;
while(file1.good())
{
   file1.get(ch);
   if (file1.good())
    std::cout<<ch;
}

更新

这可能会帮助您解决第一个问题:

std::fstream doesn't create file

您必须从模式参数中删除std::fstream::in,或者按照上面的链接指定std::fstream::trunc

票数 1
EN

Stack Overflow用户

发布于 2013-11-25 16:46:20

最后一个字符会显示两次,因为在读取文件之前(即读取文件结束之前),您正在检查文件流错误。您需要在获得字符后检查错误。

票数 2
EN

Stack Overflow用户

发布于 2013-11-25 16:50:10

代码语言:javascript
复制
while (file1)
{
    file1.get(ch);
    std::cout<<ch;
}

是错的

代码语言:javascript
复制
while (file1.get(ch))
{
    std::cout<<ch;
}

是对的。

您的版本是错误的,因为只有在尝试阅读和失败之后,file1才会变成假的。这就是为什么在文件末尾会出现重复字符的原因。您调用file.get的次数比文件中的字符多一次,但是由于没有在正确的位置检查错误,所以调用std::cout<<ch的次数也比文件中的字符多一次。

有时候,似乎世界上每一个程序员在他们刚开始的时候都犯了这个错误。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20198370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档