2017-01-26 1 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

귀하의 컴파일러를 하드 코딩이 코드에 대한 진단 메시지를 발행 했어야의, text에 널 (NULL) 종료를 추가하고 확인하기 위해 두 번째 루프를 변경했습니다. 그들을 읽으십시오. – EOF

답변

1

프로그램에 몇 가지 문제가 있습니다.

첫 번째로 getc()은 이 아니라 char입니다. 유효한 char 값이 아니므로 EOF을 보유 할 수 있도록해야합니다. 따라서 dateint으로 선언해야합니다.

이 문제를 해결하면 두 번째 문제로 인해 프로그램이 즉시 종료됩니다. 입력 및 출력에 동일한 파일을 사용하고 있기 때문입니다. 파일을 쓰기 모드로 열면 파일이 비워져 읽을 필요가 없습니다. 출력을 열기 전에 파일 읽기를 마칠 때까지 기다려야합니다.

strcpy(text[i],date); 

인수 strcpy()을해야 문자열, 즉 포인터 char의 배열을 종료 NULL로하지만, text[i]datechar (단일 문자)입니다

세 번째 문제는이 라인입니다. 컴파일러 경고를 사용하도록 설정했는지 확인하십시오. 해당 행에서 잘못된 인수 유형에 대해 경고해야합니다. 하나의 문자를 복사하려면, 단지 일반 할당 사용

text[i] = date; 

을하지만 그 루프 의도가 무엇인지 정말 모르겠어요 그 모든 text[i]에 복사 date. 나는 당신이 읽은 각 문자를 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); 
    } 
}