У меня 2 проблемы с обработкой файлов.
#include<iostream> #include<conio.h> #include<fstream> void main() {char string[80]; int len; std::cout<<"Enter a string "; std::cin>>string; len=strlen(string); std::fstream file; file.open("RO1.TXT",std::ios::out|std::ios::in); for(int i=0;i<len;i++) file.put(string[i]); file.seekg(0); char ch; while(file) {file.get(ch); std::cout<<ch; } file.close(); getch(); }
Проблема в том, что файл RO1.TXT
не создан, RO1.TXT
что мой fstream поврежден?
2.If я строю using ofstream и ifstream, то файл создает, но дополнительный символ отображается код
#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();
}
Проблема заключается в дополнительном символе.
Вам нужно проверить, действительно ли ifstream по-прежнему действует, когда вы читаете его; Вы читаете, а затем показываете, но если поток закончился... Попробуйте следующее:
std::ifstream file1;
file1.open("RO1.TXT");
char ch;
while(file1.good())
{
file1.get(ch);
if (file1.good())
std::cout<<ch;
}
ОБНОВИТЬ
Это может помочь вам с первой проблемой:
std :: fstream не создает файл
Вы должны удалить std :: fstream :: in из аргумента mode или указать std :: fstream :: trunc, как сказано в приведенной выше ссылке
Последний символ отображается дважды, потому что вы проверяете ошибки потока файлов перед чтением из файла (т.е. Перед чтением конца файла). После получения символа вам нужно проверить наличие ошибки.
while (file1)
{
file1.get(ch);
std::cout<<ch;
}
неправильно
while (file1.get(ch))
{
std::cout<<ch;
}
верно.
Ваша версия неверна, потому что она только после того, как вы попытаетесь прочитать и не сработаете, что file1
становится ложным. Вот почему вы получаете повторяющийся символ в конце вашего файла. Вы вызываете file.get
еще раз, чем у вас есть символы в файле, но поскольку вы не проверяете ошибку в нужном месте, вы также вызываете std::cout<<ch
еще раз, чем в файле есть символы.
Иногда кажется, что каждый программист в мире совершает эту ошибку, когда они начинают.