Выравнивание текста в файле по левому краю - C (СИ)
Формулировка задачи:
Доброго времени суток уважаемые програмисты. я писал программу, которая делает выравнивание по левому краю т.е. убирает лишние пробелы непойму в чем ошибка... помогите зарание спасибо
#include <stdio.h> #include <stdlib.h> #include <windows.h> //Тут определена функция CharToOem(char, char) - она нам очень нужна. //Дело в том, что ввод текста программы производится в редакторе MS Visual Studio C++ (кодовая страница 1251), //а вывод сообщений на экран в консольном режиме (кодовая страница 866), //поэтому вместо русского текста выводятся кракозяблики (кодовая страница не та). //Переопределение кодовой страницы консоли SetConsoleOutputCP(1251) как в Borland C в MS естественно не сработало, //поэтому используем перекодировку сообщений в 866 страницу заранее, используя CharToOem(char, char), //которая перекодирует ANSI (1251) в OEM (866). OemToChar делает обратную операцию. #include <conio.h> //А тут определена функция getch(). //Эта функция возвращает в программу символ, нажатый юзером на клавиатуре. #define maxLines 100 //Максимальное количество строк во входном файле (ну не больше же ста строк будет в учебном файле ...) //============================================================================================================================================ //функция *open4rd: открыть файл для чтения, //если такого файла нет - создать и принять текст с клавиатуры FILE *open4rd(char *fName) { //========================================= русификация вывода в консоль ================================================================= char messg1[]="Файл не найден - "; CharToOem(messg1, messg1); char messg2[]="Введите путь и имя файла: "; CharToOem(messg2, messg2); char messg3[]="Недопустимое имя файла - "; CharToOem(messg3, messg3); char messg4[]="Файл успешно создан - "; CharToOem(messg4, messg4); char messg5[]="Введите текст с клавиатуры (eof - конец ввода):"; CharToOem(messg5, messg5); char messg6[]="Пытаемся создать - "; CharToOem(messg6, messg6); //========================================= переменные модуля ============================================================================ char txtLine[1024]; // это строка для ввода с клавиатуры FILE *pFile; // это входной и выходной файлы long i; // это счетчик строк во вводимом файле char fNameWin[255]; // это путь и имя файла в кодировке 1251 //========================================= НАЧАЛО ПРОГРАММЫ ============================================================================= pFile = fopen (fName, "r"); //попытка открытия на чтение с именем по умолчанию if (pFile == NULL) //если файл не найден, введем его с клавы { printf("\n%s%s\n%s\n", messg1, fName, messg2); gets(fName); //запрос имени файла, OemToChar(fName, fNameWin); //перекодировка имени из страницы консоли 866 в страницу windows 1251 pFile = fopen (fNameWin, "r"); //попытка открытия на чтение с введенным именем if (pFile == NULL) //если нет указанного юзером файла, будем его создавать { printf("%s'%s'\n%s'%s'\n", messg1, fName, messg6, fName); while ( (pFile=fopen(fNameWin, "w")) == NULL ) // { printf("%s '%s'\n", messg3, fName); //крутимся здесь, пока не создадим файл, gets(fName); OemToChar (fName,fNameWin); //у которого допустимое имя } // printf("%s '%s'\n%s\n", messg4, fName, messg5); for (i=1; i< maxLines; i++) //вводим много строк, но не бесконечно много { gets(txtLine); //эта функция построчно читает с клавы if ( txtLine[0]!= 'e' && txtLine[1]!= 'o' && txtLine[2]!= 'f') {fprintf(pFile, "%s\n", txtLine);} //пишем в файл else break; //если введено "eof", окончить ввод } system("cls"); //почистить экран после окончания ввода текста файла fclose(pFile); //закрыть файл, а то он на запись открыт был pFile = fopen(fNameWin, "r"); //открыть на чтение, при этом происходит сброс указателей } OemToChar(fName, fName); //запомним допустимое имя в кодировке 1251 return pFile; } FILE *pFile, *textOut; //это исходный и результирующий файлы char txtLine[200]; //это строка из файла long i=0; //это явное объявление позиции внутри строки pFile = open4rd(fName); // вывести для юзера while((fgets(txtLine, sizeof(txtLine), pFile))!=NULL) // на экран {printf("%s", txtLine);} // файл с исходным текстом fclose(pFile); // pFile = open4rd(fName); // textOut = fopen ( defResult, "w"); // while((fgets(txtLine, sizeof(txtLine), pFile ))!=NULL) // выровнить по левому краю (удаление лишних пробелов) { // и записать результат i=0; while(txtLine[i] == ' ') {i++;} // в третий файл fprintf( textOut, "%s", txtLine+i ); // defaultResult.txt } // fclose(pFile); fclose(textOut); // textOut = fopen (defResult, "r"); // вывести для юзера на экран while((fgets(txtLine, sizeof(txtLine), textOut))!=NULL) // файл с результирующим {printf( "%s", txtLine);} // (выровненным по левому краю) fclose(textOut); // текстом
Решение задачи: «Выравнивание текста в файле по левому краю»
textual
Листинг программы
if (!(txtLine[0] == 'e' && txtLine[1] == 'o' && txtLine[2] == 'f'))
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д