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

Объяснение кода листинга программы

  1. Объединение файлов начинается с включения необходимых заголовочных файлов: stdio.h, stdlib.h и ctype.h.
  2. Определение имен файлов для чтения и записи: FIN_NAME и FOUT_NAME.
  3. Объявление переменных: char buf[BUFSIZ], p; FILE fin, *fout; int cnt.
  4. Проверка доступности файла для чтения и записи, и если файл не может быть открыт, программа выводит сообщение об ошибке и завершает свою работу с кодом 1.
  5. Чтение из файла с помощью функции fgets(buf, BUFSIZ, fin) и запись в файл с помощью функции fprintf(fout, %s\tCHANGES: %d\n, buf, cnt).
  6. Использование цикла while для чтения каждой строки из файла.
  7. Использование цикла for для проверки каждого символа в строке.
  8. Использование функции islower() для определения, является ли текущий символ строчным.
  9. Использование функции toupper() для преобразования строчного символа в верхний регистр.
  10. Увеличение счетчика cnt, если текущий символ является строчным.
  11. Запись преобразованной строки и счетчика в выходной файл.
  12. Проверка ошибок при записи в файл и вывод сообщения об ошибке при обнаружении ошибки.
  13. Проверка ошибок при чтении из файла и вывод сообщения об ошибке при обнаружении ошибки.
  14. Закрытие файлов fin и fout с помощью функции fclose().
  15. Выход из программы с кодом 0.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.286 из 5
Похожие ответы