Переписать файл, заменяя строчные буквы прописными - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Дан символьный файл f, состоящий из малых латинских букв и знаков препинания. Перепи-сать файл, заменяя строчные буквы прописными. Распечатать файл до и после преобразования printFile() работает, только последний символ выводится почему-то 2 раза. modifyFile() стирает и не пишет в файл ничего.
#include <stdio.h>
#include <ctype.h>
#define nameF "f.txt"
 
void printFile(const char *fName)
{
    char c;
    FILE *f;
    if ((f = fopen(fName, "r")) == NULL)
         printf("Can't open file %s.\n", fName);
    else
    {
        printf("%s:\n", fName);
        while (!feof(f))
        {
            fscanf(f, "%c", &c);
        printf("%c", c);
    }
        fclose(f);
    }
}
void modifyFile(const char *fName)
{
    char c;
    FILE *f;
    if ((f = fopen(fName, "w+")) == NULL)
        printf("Error. File %s was not created.\n", fName);
    else
    {
    while ((c = getc(f)) != EOF)
    {
//      toupper(c);
        putc(c, f);
    }
    fclose(f);
    }
}
int main()
{
    printf("Original file ");
    printFile(nameF);
    modifyFile(nameF);
    printf("\nModified file ");
    printFile(nameF);
    return 0;
}

Решение задачи: «Переписать файл, заменяя строчные буквы прописными»

textual
Листинг программы
void printFile(const char *fName){
    FILE *file;
    char c;
    if ( ( file = fopen( fName, "r" ) ) == NULL )
        printf( "Error\n" );
    else {
        while ( ( c = fgetc( file ) ) != EOF ){
            printf( "%c", c );
        }
        fclose( file );
    }
}
 
void modifyFile(const char *fName){
    FILE *file;
    char c;
    if ( ( file = fopen( fName, "r+" ) ) == NULL )
        printf( "Error\n" );
    else {
        int i = 0;
        while ( ( c = fgetc( file ) ) != EOF ){
            fseek( file, i, SEEK_SET );
            fputc( toupper( c ), file );
            i++;
            fseek( file, i, SEEK_SET );
        }
        fclose( file );
    }
}

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

  1. В функции printFile открывается файл с помощью fopen на чтение (r) и выводится его содержимое с помощью fgetc и printf.
  2. В функции modifyFile открывается файл с помощью fopen на чтение и запись (r+), и выводится его содержимое с помощью fgetc.
  3. Для каждой буквы в файле выполняется следующее:
    • С помощью fseek устанавливается позиция в файле.
    • С помощью fputc заменяется буква на прописную с помощью функции toupper.
    • Позиция в файле сдвигается на следующую букву с помощью fseek.
  4. После обработки всех букв файл закрывается с помощью fclose.

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


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

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

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