2017-01-26 5 views
-1

Мне нужно записать в файл с прописными буквами несколько строк, а затем отобразить на экране с строчными буквами. После этого мне нужно записать в файл новый текст (в нижнем регистре). Я пишу код, но он не работает. Когда я запускаю его, мой файл кажется неповрежденным, а конвертация в нижний регистр не работаетЧтение и запись в файл в c

#include <stdio.h> 
#include <stdlib.h> 
#include <ctype.h> 

void main(void) { 
    int i; 
    char date; 
    char text[100]; 
    FILE *file; 
    FILE *file1; 
    file = fopen("C:\\Users\\amzar\\Desktop\\PC\\Pregatire PC\\Pregatire PC\\file\\da.txt","r"); 
    file1 = fopen("C:\\Users\\amzar\\Desktop\\PC\\Pregatire PC\\Pregatire PC\\file\\da.txt","w"); 

    printf("\nSe citeste fisierul si se copiaza textul:\n "); 

    if(file) { 
     while ((date = getc(file)) != EOF) { 
      putchar(tolower(date)); 
      for (i=0;i<27;i++) { 
       strcpy(text[i],date); 
      } 
     }  
    } 

    if (file1) { 
     for (i=0;i<27;i++) 
     fprintf(file1,"%c",text[i]); 
    } 
} 
+0

Вашего компилятора должно выпустили диагностические сообщения об этом коде. Читай их. – EOF

ответ

1

С вашей программой существует несколько проблем.

Первый, getc()int, а не char. Это необходимо для того, чтобы он мог удерживать EOF, так как это недопустимое значение char. Поэтому вам нужно объявить date как int.

Когда вы исправите это, вы заметите, что программа заканчивается немедленно из-за второй проблемы. Это связано с тем, что вы используете один и тот же файл для ввода и вывода. Когда вы открываете файл в режиме записи, это освобождает файл, поэтому читать нечего. Вы должны подождать, пока вы закончите чтение файла, прежде чем открывать его для вывода.

Третья проблема эта линия:

strcpy(text[i],date); 

Аргументы strcpy() должны быть строки, то есть указатели на нуль-терминатором массивы из char, но text[i] и date являются char (одиночные символы). Убедитесь, что включены предупреждения о компиляторе - эта строка должна была предупредить вас о неправильных типах аргументов. Чтобы скопировать отдельные символы, просто использовать обычное задание:

text[i] = date; 

Но я не совсем уверен, что вы собираетесь с этим циклом, который копирует date в каждый text[i]. Я подозреваю, что вы хотите скопировать каждый символ, который вы читаете, в следующий элемент text, а не во всех из них.

Наконец, когда вы сохраняли в text, вы не сохранили версию в нижнем регистре.

Вот исправленная программа. Я также добавил нулевой терминатор text, и изменил вторую петлю, чтобы проверить, что вместо жесткого кодирования длиной 27.

#include <stdio.h> 
#include <stdlib.h> 
#include <ctype.h> 

void main(void) { 
    int i = 0; 
    int date; 
    char text[100]; 
    FILE *file; 
    FILE *file1; 
    file = fopen("C:\\Users\\amzar\\Desktop\\PC\\Pregatire PC\\Pregatire PC\\file\\da.txt","r"); 

    printf("\nSe citeste fisierul si se copiaza textul:\n "); 

    if(file) { 
     while ((date = getc(file)) != EOF) { 
      putchar(tolower(date)); 
      text[i++] = tolower(date); 
     } 
     text[i] = '\0'; 
     fclose(file); 
    } else { 
     printf("Can't open input file\n"); 
     exit(1); 
    } 

    file1 = fopen("C:\\Users\\amzar\\Desktop\\PC\\Pregatire PC\\Pregatire PC\\file\\da.txt","w"); 
    if (file1) { 
     for (i=0;text[i] != '\0';i++) 
      fprintf(file1,"%c",text[i]); 
     fclose(file1); 

    } else { 
     printf("Can't open output file\n"); 
     exit(1); 
    } 
} 
Смежные вопросы