2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Где ошибка?
Сообщение26.12.2010, 22:42 


06/11/10
66
Условие - Напишите программу, которая запрашивает у пользователя имя текстового файла, объединяет каждые подряд идущие две строки в этом файле (с простановкой символа ‘+’ между ними) и выводит результат как на экран терминала, так и в новый файл.


#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char c;
int i=0;
FILE *Res;
Res=fopen("D:\Программирование\task4.2\task4.2\\text.txt","rt");

while (!feof(Res))
{
c=fgetc(Res);
if (c=='\n')
i++;
if ((i % 2==0))
Res=fopen("D:\Программирование\task4.2\task4.2\\text.txt","wt");
fprintf(Res,"+");
}
fclose(Res);
getchar();

}

 Профиль  
                  
 
 Re: Где ошибка?
Сообщение27.12.2010, 14:14 
Аватара пользователя


23/05/10
145
Москва
У Вас в цикле перепутаны файлы с исходными данными и с результатом.
Нужно по возможности избегать действий с файлами внутри циклов. Перед циклом все открыли, поработали, закрыли.
Например можно так (вроде должно работать):

код: [ скачать ] [ спрятать ]
Используется синтаксис C
void func( char *in_file_name, char *out_file_name)
{
    char c;
    int lnum = 0;
    FILE *in_file, *out_file;
   
    in_file = fopen( in_file_name, "r");
    out_file = fopen( out_file_name, "w");
   
    while ( (c = fgetc( in_file)) != EOF )
    {
        if ( c == '\n' )
        {
            fputc( (lnum % 2 == 1) ? ('\n') : ('+'), out_file);
            lnum++;
        } else
        {
            fputc( c, out_file);
        }
    }
   
    fclose( in_file);
    fclose( out_file);
}
 


-- Пн дек 27, 2010 15:17:10 --

P.S. конечно для результата не стоит открывать тот же файл...

 Профиль  
                  
 
 Re: Где ошибка?
Сообщение28.12.2010, 19:16 


30/12/09
95
Главная ошибка у вас здесь:

The Last Samurai в сообщении #392069 писал(а):
Код:

      c=fgetc(Res);
      if (c=='\n')
         i++;



Вообще говоря для завершения строки может использоваться не только '\n' но и пара "\r\n", а также просто '\r', в зависимости от операционной системы.
Ваш код будет работать только под юниксом, но судя по используемым вами именам файлов вы пытаетесь запускать под windows, а там именно "\r\n".
Чтобы ваш код был переносимым следует использовать fgets вместо fgetc.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group