Переписать файл, заменяя строчные буквы прописными - 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 );
}
}
Объяснение кода листинга программы
- В функции
printFileоткрывается файл с помощьюfopenна чтение (r) и выводится его содержимое с помощьюfgetcиprintf. - В функции
modifyFileоткрывается файл с помощьюfopenна чтение и запись (r+), и выводится его содержимое с помощьюfgetc. - Для каждой буквы в файле выполняется следующее:
- С помощью
fseekустанавливается позиция в файле. - С помощью
fputcзаменяется буква на прописную с помощью функцииtoupper. - Позиция в файле сдвигается на следующую букву с помощью
fseek.
- С помощью
- После обработки всех букв файл закрывается с помощью
fclose.