在C中更改文本文件大小写和复制数据

时间:2015-12-07 17:33:35

标签: c text-files

我正在创建一个程序,它从一个文件复制文本文件数据,并在选择时将其大小写更改为更低或更高,但是当我执行程序时,我收到以下结果,并且不会更改或复制文本大小写。

    #include <stdio.h>
    int main() {

             FILE *fp  = NULL;
            FILE *fp2 = NULL;
            char str[200];
            char var;
            int i;
            char copy;



            fp = fopen("file1.txt", "a");
            fp2 = fopen("file2.txt", "w");

            printf("Enter choice: ");
            scanf(" %c", &var);

            if (fp != NULL && var == 'L') {

                    while ( fgets(str, 200, fp) != NULL ) {

                            putchar(tolower(fp[i]));
                            i++;
                    }

                    puts(str);
            }
            else if (fp != NULL && var == 'U') {

                    while ( fgets(str, 200, fp) != NULL ) {

                            putchar(toupper(fp[i]));
                            i++;
                    }

                    puts(str);
            }
            else {

                    printf("ERROR: No proper choice was made \n");
            }
    while (1) {

                copy = fgetc(fp);

                if (copy == EOF) {

                        break;
                }
                else {

                        putc(copy , fp2);
                }
        }

        return 0;

        fclose(fp);
        fclose(fp2);

}

我得到的输出是:

    Enter choice: U
▒▒

2 个答案:

答案 0 :(得分:0)

问题是你使用fgets,它从文件中读取一个字符串。更好的方法是使用fgetc,它一次只读取一个字符并适当地处理它。

答案 1 :(得分:0)

putchar(tolower(fp[i]));应该生成编译器警告。确保编译器警告全部启用或考虑新的编译器。

替换2个位置,包括上部和下部。

while ( fgets(str, 200, fp) != NULL ) {
   putchar(tolower(fp[i]));
   i++;
}

// With to iterate over each character
while (fgets(str, sizeof str, fp) != NULL) {
  for (i=0; str[i]; i++) {
    putchar(tolower(str[i]));
  }
}

更改为int,以便正确区分fgetc()EOF返回的所有字符。

打开&#34; r&#34;从文件的开头读取

// fp = fopen("file1.txt", "a")
fp = fopen("file1.txt", "r");