Как начать чтения файла со второй строки ? - C (СИ)
Формулировка задачи:
Всем привет ! Может кто подсказать как начать чтения из файла в консоль со второй строки , дело в том что при генерации файла , первая строка и только лишь первая строка, время от времени выходит не верной ( не подходит под условие задачи) .Вот та часть кода что отвечает за вывод :
Вот весь код целиком
void OutputToConsloe()
{
FILE *InputFile = fopen("input.txt","r");
char str[10];
int line_counter;
for(line_counter=0;line_counter<16;line_counter++)
{
for(int i=0;i<10;i++)
{
str[i]=fgetc(InputFile);
printf("%c",str[i]);
}
}
_getch();
}Решение задачи: «Как начать чтения файла со второй строки ?»
textual
Листинг программы
#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>
void TextMassage();
void CreateFile();
void OutputToConsloe();
int M =15;//приростил на 1 из за бага ,в файл первой строкой записывается цепочка не подходящая к условию
char V [3]={'a','b','c'};
main()
{
TextMassage();
srand(time(NULL));
CreateFile();
OutputToConsloe();
}
void TextMassage()
{
setlocale(LC_ALL,"UA");
printf ("Задание:\nСоздать программу на языке С , которая будет продуцировать \nцепочки (слова) в трехсимвольном алфавите V={a,b,c} с записью их в файл, причем\nдлина L цепочек ограничена: L1 <= L <= L2 и для каждой цепочки, отобранной в\nфайл, должно выполняться условие < A >.Общее количество цепочек вфайле должно быть не более M.\nУсловие < A >:\nСодержит не менее двух символов «с», начинается на символ «а», а символ «b»\nвстречается только по два (парами)\nL1 = 5\tL2 = 10\tM = 15\n");
}
void CreateFile()
{
FILE *InputFile = fopen("input.txt","w");
int counter ;//предел генерации слов
int counter_c ;//счетсчик количества с
int counter_db ;//cчетчик встреч b НЕ по два
int counter_b;//cчетчик встреч b
//нужно два счетчика b для исключения ситуаций "bbb"
bool a ;//истинность условия что а перове
for(counter =0,counter_c=0,counter_db=0,counter_b=0;counter<1024;counter++,a =false,counter_c=0,counter_db=0,counter_b=0)
{
int L =5 + rand()%6;
char Line[L];
for(int i =0 ;i<L ;i++)
{
Line[i]=V[rand()%3];
}
if(Line[0]==V[0])
{
a=true;
for(int i =1 ;i<L ;i++)
{
if(Line[i]==V[2])
{
counter_c++;
}
if(Line[i]==V[1]&&Line[i-1]!=V[1]&&Line[i+1]!=V[1])
{
counter_db++;//abbbaac abcbb abbbbabca
}
if(Line[i]==V[1])
{
counter_b++;//abbbaac abcbb abbbbabca
}
}
}
if(a==true&&counter_c<3&&counter_db==0&&counter_b%2==0)
{
for(int i =0 ;i<L ;i++)
if(i<L-1)
fprintf(InputFile,"%c",Line[i]);
else
fprintf(InputFile,"%c\n",Line[i]);
}
}
fclose(InputFile);
}
void OutputToConsloe()
{
FILE *InputFile = fopen("input.txt","r");
char str[10];
int line_counter;
for(line_counter=0;line_counter<M;line_counter++)
{
fscanf(InputFile,"%s",str);
if(line_counter>0)
printf("%s\n",str);
}
_getch();
}
Объяснение кода листинга программы
- Переменная M равна 15.
- В массиве V содержатся символы 'a', 'b' и 'c'.
- В функции main() вызываются функции TextMassage(), CreateFile() и OutputToConsloe().
- В функции TextMassage() выводится задание на экран.
- В функции CreateFile() создается файл
input.txtдля записи в него. - В функции CreateFile() используется цикл для генерации 1024-символьных строк.
- В функции CreateFile() проверяется, что первая буква строки - 'a'.
- В функции CreateFile() проверяется, что в строке есть не более двух символов 'b'.
- В функции CreateFile() проверяется, что в строке есть не менее двух символов 'c'.
- В функции CreateFile() проверяется, что количество строк в файле не превышает 15.
- В функции CreateFile() выводится сгенерированная строка в файл, если она удовлетворяет всем условиям.
- В функции OutputToConsloe() открывается файл
input.txtдля чтения из него. - В функции OutputToConsloe() используется цикл для чтения строк из файла.
- В функции OutputToConsloe() выводится каждая строка на экран.
- В конце программы вызывается функция _getch() для приостановки выполнения программы до нажатия клавиши.