Ошибка обработки файла

0

У меня 2 проблемы с обработкой файлов.

  1. Файл (txt) не создает с помощью fstream.Here мой код
#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();
}

Проблема заключается в дополнительном символе.

  • 0
    Ваш отступник ужасен! Пожалуйста, убери это.
  • 0
    Извините за это ..
Показать ещё 6 комментариев
Теги:

3 ответа

1
Лучший ответ

Вам нужно проверить, действительно ли 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, как сказано в приведенной выше ссылке

2

Последний символ отображается дважды, потому что вы проверяете ошибки потока файлов перед чтением из файла (т.е. Перед чтением конца файла). После получения символа вам нужно проверить наличие ошибки.

  • 1
    @ MsFreedom911: К сожалению, во многих школах неправильно учтены циклы ввода-вывода, и ваша - одна из них.
  • 0
    да ты прав
2
while (file1)
{
    file1.get(ch);
    std::cout<<ch;
}

неправильно

while (file1.get(ch))
{
    std::cout<<ch;
}

верно.

Ваша версия неверна, потому что она только после того, как вы попытаетесь прочитать и не сработаете, что file1 становится ложным. Вот почему вы получаете повторяющийся символ в конце вашего файла. Вы вызываете file.get еще раз, чем у вас есть символы в файле, но поскольку вы не проверяете ошибку в нужном месте, вы также вызываете std::cout<<ch еще раз, чем в файле есть символы.

Иногда кажется, что каждый программист в мире совершает эту ошибку, когда они начинают.

  • 0
    Я думаю, это потому, что, очевидно, каждая школа в мире совершает эту ошибку, когда она начинается и в течение двадцати лет после этого.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню