Переписать в другой файл текст, переведя его в верхний регистр - C (СИ)
Формулировка задачи:
Текст программы: (на языке Turbo C)
Данная программа должна брать из одного файла строчные буквы и выводить их во второй файл. но только заглавными. При чем строчные буквы написаны в строчки в первом файле и также они должны быть написаны во втором (т.е. построчно), с количеством замен строчных на заглавные. Здесь же есть какая-то ошибка, так как данная программа выдает во второй файл только первую строку с заглавными буквами, но общее количество замен подсчитывает. Помогите, кто знает... Заранее благодарен.
#include <stdio.h> #include <string.h> #include <ctype.h> #include <stdlib.h> void main () {int n, SMALL=0; char S[80], ch, s2; FILE *fd, *fr, *fn; fd=fopen ("L://Tekst.txt","rt"); fr=fopen ("L://Tekst2.txt","wt"); fn=fopen ("L://Tekst.txt","rt"); clrscr(); fgets (S, 80, fn); while (!feof(fd)); {ch=fgetc(fd); islower(ch); if(islower(ch)) SMALL=SMALL++;} printf ("%i /n", SMALL); fprintf (fr, "%i /n", SMALL); puts (S); strupr(S); puts(S); fputs(S, fr); printf ("/n znachenie zapisano v file Tekst2.txt/n"); getch(); clrscr();}
Решение задачи: «Переписать в другой файл текст, переведя его в верхний регистр»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <ctype.h> #define FIN_NAME "text.txt" #define FOUT_NAME "text2.txt" int main(void){ char buf[BUFSIZ], *p; FILE *fin, *fout; int cnt; if ( ( fin = fopen(FIN_NAME, "r") ) == NULL ){ fprintf(stderr, "Can't open input file!\n"); exit(1); } if ( ( fout = fopen(FOUT_NAME, "w") ) == NULL ){ fprintf(stderr, "Can't open output file!\n"); exit(1); } while ( fgets(buf, BUFSIZ, fin) ){ cnt = 0; for ( p = buf; *p; ++p ){ if ( islower(*p) ){ ++cnt; *p = toupper(*p); } } fprintf(fout, "%s\tCHANGES: %d\n", buf, cnt); if ( ferror(fout) ){ fprintf(stderr, "Can't write to output file!\n"); exit(1); } } if ( ferror(fin) ){ fprintf(stderr, "Can't read from input file!\n"); exit(1); } fclose(fin); fclose(fout); exit(0); }
Объяснение кода листинга программы
- Объединение файлов начинается с включения необходимых заголовочных файлов: stdio.h, stdlib.h и ctype.h.
- Определение имен файлов для чтения и записи: FIN_NAME и FOUT_NAME.
- Объявление переменных: char buf[BUFSIZ], p; FILE fin, *fout; int cnt.
- Проверка доступности файла для чтения и записи, и если файл не может быть открыт, программа выводит сообщение об ошибке и завершает свою работу с кодом 1.
- Чтение из файла с помощью функции fgets(buf, BUFSIZ, fin) и запись в файл с помощью функции fprintf(fout,
%s\tCHANGES: %d\n
, buf, cnt). - Использование цикла while для чтения каждой строки из файла.
- Использование цикла for для проверки каждого символа в строке.
- Использование функции islower() для определения, является ли текущий символ строчным.
- Использование функции toupper() для преобразования строчного символа в верхний регистр.
- Увеличение счетчика cnt, если текущий символ является строчным.
- Запись преобразованной строки и счетчика в выходной файл.
- Проверка ошибок при записи в файл и вывод сообщения об ошибке при обнаружении ошибки.
- Проверка ошибок при чтении из файла и вывод сообщения об ошибке при обнаружении ошибки.
- Закрытие файлов fin и fout с помощью функции fclose().
- Выход из программы с кодом 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д