Здравствуйте, 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>