将txt文件中的所有字符串转换为c中的小写

时间:2016-02-24 18:02:47

标签: c file lowercase

我被指派将所有字符串转换为txt文件中的小写,然后将其输出到新的txt文件中,但我似乎无法找到任何地方如何做到这一点。任何帮助都会非常受欢迎!谢谢你这就是我现在所拥有的,但最后有y,所以我想是否有更好的方法去做,或者如果我可以删除顶部有两个点的y ..

#include<stdio.h>
#include<process.h>

void main() {
   FILE *fp1, *fp2;
   char a;

   fp1 = fopen("test.txt", "r");
   if (fp1 == NULL) 
   {
      puts("cannot open this file");
      exit(1);
   }

   fp2 = fopen("test1.txt", "w");
   if (fp2 == NULL) {
      puts("Not able to open this file");
      fclose(fp1);
      exit(1);
   }

   do
   {
      a = fgetc(fp1);
      a = tolower(a);
      fputc(a, fp2);
   } while (a != EOF);

   fcloseall();
   getch();
}

1 个答案:

答案 0 :(得分:1)

当您从文件中读取输入时,应始终在继续使用之前检查是否获得了有效输入。在您的情况下,您可以在该行中获得输入。

a

在继续使用之前,您需要检查if ( a != EOF ) { a = tolower(a); fputc(a, fp2); } 是否为有效输入。

char c;

要更新的另一件事。不要使用

int c; 

使用

char

代替。

EOF类型可以是您平台上的签名类型或无符号类型。如果它是无符号类型,则永远不会有负值。因此,它永远不会等于经常-1的{​​{1}},这将导致无限循环。

如果您查看fgetc的文档,您会发现其返回类型为int,而不是char

您的程序可以更新为:

void main() {
   FILE *fp1, *fp2;
   int a;

   // Add rest of your code
   // ...

   do
   {
      a = fgetc(fp1);
      if ( a != EOF )
      {
         a = tolower(a);
         fputc(a, fp2);
      }
   } while (a != EOF);

   // Add rest of your code
   // ...
}

do-while循环可以简化为:

   while ( (a = fgetc(fp1)) != EOF )
   {
      a = tolower(a);
      fputc(a, fp2);
   }