Re: Чтение строк из файла. Проект на C
От: AleksandrN Россия  
Дата: 17.01.13 07:55
Оценка:
Здравствуйте, Moonshiner, Вы писали:

M>Добрый день.


M>Подскажите пожалуйста, стоит задача читать из файла некоторое количество символов (сейчас я читаю 10 символов).



Добавил комментарии в код.

M>

M>#include <stdio.h>
M>#include <stdlib.h>

M>int main(void)
M>{
M>    FILE *in, *out;

M>    char buf[10];
M>    char tmp;
M>    char end = '\n';
M>    int a;
M>//    int i;
M>//    i = 0;

M>    if ((in = fopen("D:\\test\\log.txt","r"))==NULL)
M>        {
M>            printf("Ошибка чтения файла.\n"); // В консольной программе сообщения об ошибках лучше выводить в stderr. Так-же можно использовать функцию perror(), которая ещё напишет и причину ошибки.
M>            exit(1);
M>        }
M>    if((out = fopen("D:\\test\\1.txt","w+"))==NULL)
M>                {
M>                    printf("Ошибка создания файла.\n");
M>                    exit(1);
M>                }
M>    while(!feof(in))
M>    {
M>        a = 0;
M>        fread(&buf,sizeof(buf),1,in);  // Задача "читать из файла некоторое количество символов" почти выполнена :). Почти - потому, что не проверяется значение, возвращаемое fread().
M>        while(tmp !='\n' && !feof(in)){ // На первой итерации цикла while(!feof(in)) переменная tmp не инициализирована.
M>            tmp = getc(in);
M>        }
M>        printf("Конец строки \n"); // А вот не факт. Т.к. tmp не инициализирована, то там, на первой итерации, может выть всё, что угодно, в том числе и '\n'. В этом случае это будет не конец строки, а середина.
M>        if ((tmp = getc(in)) == '\n')
M>        {
M>                a++;
M>        }
M>        if (a > 2) // В этом месте переменная а всегда будет иметь значение 0 или 1.
M>        {
M>            printf("Неверная строка в буфере");
M>        }
M>        else
M>        {
M>            fwrite(&buf,sizeof(buf),1,out);
M>            fwrite(&end,sizeof(char),1,out);
M>        }
M>    }
M>    printf("%s",buf);
M>    fclose(in);
M>    fclose(out);


M>    return 0;
M>}

M>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.