2014 dxdy logo

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

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




 
 Где ошибка?
Сообщение26.12.2010, 22:42 
Условие - Напишите программу, которая запрашивает у пользователя имя текстового файла, объединяет каждые подряд идущие две строки в этом файле (с простановкой символа ‘+’ между ними) и выводит результат как на экран терминала, так и в новый файл.


#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 
Аватара пользователя
У Вас в цикле перепутаны файлы с исходными данными и с результатом.
Нужно по возможности избегать действий с файлами внутри циклов. Перед циклом все открыли, поработали, закрыли.
Например можно так (вроде должно работать):

код: [ скачать ] [ спрятать ]
Используется синтаксис 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 
Главная ошибка у вас здесь:

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

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



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

 
 
 [ Сообщений: 3 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group