Форум Gatchina OnLine  

Вернуться   Форум Gatchina OnLine > Hard&Soft > Программирование и разработка

Программирование и разработка Обсуждение вопросов программирования

Ответ
 
Опции темы Опции просмотра
Старый 20.03.2007, 21:33   #1
M@GIC
Местный
 
Аватар для M@GIC
 
Регистрация: 23.01.2006

Нарушения:[Посмотреть]
Задачки на С++

Собственно напсиана программа котрая открывает текстовый файл и счаитывает оттуда текст,выводится на экран. Если найдена цифра от 0-9 то заменяется на её эквивалент в беквенном виде тоесть (0-ноль, 1- один итд)
Собственно написал но заметил один баг то что последний сивол выводится 2 раза. Х3 почему

PHP код:
#include<iostream>
#include<fstream>
#include <conio.h>
using namespace std;
int main()
{
char buffer[1];
ifstream open;
open.open("file.txt");
if (
open.fail())
    {
        
cout<<"Unable to open input file!"<<endl;
        
getch();
        return 
1;
    }
while(!
open.eof())
     {
         
open.read(buffer,sizeof(buffer));
         switch(
buffer[0])
         {
          case 
'0':cout<<"zero";break;
          case 
'1':cout<<"one";break;
          case 
'2':cout<<"two";break;
          case 
'3':cout<<"three";break;
          case 
'4':cout<<"four";break;
          case 
'5':cout<<"five";break;
          case 
'6':cout<<"six";break;
          case 
'7':cout<<"seven";break;
          case 
'8':cout<<"eight";break;
          case 
'9':cout<<"nine";break;
          case 
'.':cout<<"."<<endl;break;
          case 
'\n':break;
          default :
cout<<buffer[0];break;
         }

     }

open.close();
getch();

M@GIC вне форума   Ответить с цитированием
Старый 20.03.2007, 22:04   #2
ΛLIEN
пришелец
 
Аватар для ΛLIEN
 
Регистрация: 23.01.2006
Адрес: Земля, 013 в центуре

Нарушения:[Посмотреть]
Сначала надо бы попытаться считывать, а потом уже проверять на eof, вапсТчета.

PHP код:
....
while(
open.read(buffer,sizeof(buffer)) > && !open.eof())
     {
         switch(
buffer[0]) 
         { 
          case 
'0':cout<<"zero";break; 
          case 
'1':cout<<"one";break; 
          case 
'2':cout<<"two";break; 
          case 
'3':cout<<"three";break; 
          case 
'4':cout<<"four";break; 
          case 
'5':cout<<"five";break; 
          case 
'6':cout<<"six";break; 
          case 
'7':cout<<"seven";break; 
          case 
'8':cout<<"eight";break; 
          case 
'9':cout<<"nine";break; 
          case 
'.':cout<<"."<<endl;break; 
          case 
'\n':break; 
          default :
cout<<buffer[0];break; 
         } 
     } 
... 
Да и вообще "!open.eof()" в данном случае фтопку. =)

Просто
PHP код:
while(open.read(buffer,sizeof(buffer)) > 0
__________________
Use the Source, Luke!
ΛLIEN вне форума   Ответить с цитированием
Старый 20.03.2007, 22:19   #3
M@GIC
Местный
 
Аватар для M@GIC
 
Регистрация: 23.01.2006

Нарушения:[Посмотреть]
2 Alien

Спасиб. Теперь корректно всё работает.
M@GIC вне форума   Ответить с цитированием
Старый 21.03.2007, 12:42   #4
kainen
lsd made me a prostitute
 
Аватар для kainen
 
Регистрация: 24.01.2006

Нарушения:[Посмотреть]
Простите за занудство, но этот свитч выглядит как говно
kainen вне форума   Ответить с цитированием
Старый 28.04.2007, 01:56   #5
M@GIC
Местный
 
Аватар для M@GIC
 
Регистрация: 23.01.2006

Нарушения:[Посмотреть]
Ещё вопросик. Имеется текстовый файл.Структура файла следующая
login: password: group
Есть какое то условие удаление строки. Считываем файл по строкам. Условие выполнилось и надо удалить данную строку. Предположим что файловый указатель установлен на начало этой строки. Собсвенно вопрос как удалить???
Зы создание резервного файла и переписи в него всех остальных записей(которые не удовлетовряют условию), с последующей его переименовкой не катит.

Последний раз редактировалось M@GIC. 28.04.2007 в 01:57.
M@GIC вне форума   Ответить с цитированием
Старый 28.04.2007, 10:01   #6
Executer
Гость
 

Нарушения:[Посмотреть]
А файл большой?
Можно сначала загнать все что надо в массив, а потом записать поверх в этот файл...
  Ответить с цитированием
Старый 28.04.2007, 10:54   #7
M@GIC
Местный
 
Аватар для M@GIC
 
Регистрация: 23.01.2006

Нарушения:[Посмотреть]
Цитата:
Сообщение от Executer Посмотреть сообщение
А файл большой?
Можно сначала загнать все что надо в массив, а потом записать поверх в этот файл...
Не катит.
M@GIC вне форума   Ответить с цитированием
Старый 28.04.2007, 11:17   #8
Yago De Malina
нихт местный
 
Аватар для Yago De Malina
 
Регистрация: 23.01.2006

Нарушения:[Посмотреть]
нужно на c++ обязательно?
в ворде проще будет....
только если условие подходящее
Yago De Malina вне форума   Ответить с цитированием
Старый 28.04.2007, 11:35   #9
kainen
lsd made me a prostitute
 
Аватар для kainen
 
Регистрация: 24.01.2006

Нарушения:[Посмотреть]
Цитата:
Сообщение от M@GIC Посмотреть сообщение
Не катит.
Нет способа в WinAPI каким-либо образом удалить кусок из середины файла. Теоретически, однако, это возможно, но при длине удаляемого куска кратной размеру блока.
kainen вне форума   Ответить с цитированием
Старый 28.04.2007, 11:51   #10
Executer
Гость
 

Нарушения:[Посмотреть]
Раз неудовлетворяют простые методы, можно посложнее
Можно сделать так:
открываем файл. Затем считываем строки, если встретили строку, которую надо удалить - запоминаем это место, далее первую строку, которую не надо удалять помещаем на это место. И обновляем запомненоое место. Вконце изменяем длину файла и сохраняем...
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 06:13. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot