Как начать чтения файла со второй строки ? - 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() для приостановки выполнения программы до нажатия клавиши.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д