Переписать в другой файл текст, переведя его в верхний регистр - 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.