【问题标题】:to upper case every words in file in C将C中文件中的每个单词都大写
【发布时间】:2020-05-03 12:06:32
【问题描述】:

你能告诉我我可以对我的代码做哪些调整或任何简化吗?什么不应该 我再说一遍,我应该改变什么?此代码将每个单词转换为大写,如果您发现一些问题,请编写以修复它))

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(){
    FILE * fPtr, *fPtr1;
    int c; /*to store characters*/
    char filename[20];
    char filename2[20] = "temp.txt";
    printf("Enter name of file: ");
    scanf("%19s%*c",filename);
    fPtr = fopen(filename, "r");
    fPtr1 = fopen(filename2, "w");
    c = fgetc(fPtr);
    while(c!=EOF){
        if(c!='\n'){
            if(islower(c)){
                fputc(c-32,fPtr1);
            }else{
                fputc(c,fPtr1);
            }
        }else{
            fputc(c,fPtr1);
        }
        c = fgetc(fPtr);
    }
    fclose(fPtr);
    fclose(fPtr1);
    remove(filename);
    rename(filename2,filename);
    fPtr = fopen(filename, "r");
    c = fgetc(fPtr);
    while(c!=EOF){
        printf("%c",c);
        c = fgetc(fPtr);
    }
    fclose(fPtr);
}

【问题讨论】:

  • 如果你知道islower,你也应该知道toupper,不要使用c-32这样的表达方式
  • 谢谢,我会解决的

标签: c file word uppercase toupper


【解决方案1】:

这个程序按你说的做。但我建议你做一些改变,你未来的自己会喜欢的。

首先,始终初始化变量;这个习惯将有助于防止你未来的代码中出现奇怪的错误。将ints 设置为超出预期范围的值(例如,在这种情况下可能为 -1);设置指向NULL的指针;将 char 数组设置为 { '\0' }"\0"

接下来,在fopen 之后检查NULL 的文件指针(fPtrfPtr1)。

最后,对于这段代码,你不需要检查换行符;如果参数不是小写字母,islower 将返回 0。

【讨论】:

    【解决方案2】:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>
    
    #define MAX 20
    
    char *mygets(char *s, size_t sz) {
      int ch;
      size_t i = 0;
    
      while((ch = getchar()) != '\n' && i < sz)
        s[i++] = ch;
    
      s[i] = '\0';
    
      return s;
    }
    
    int main(void) {
      FILE *fPtr;
      char filename[MAX+1];
      int c, i;
    
      printf("Enter name of file: ");
      mygets(filename, MAX+1);
    
      if(!strstr(filename, ".txt"))
        strcat(filename, ".txt");
    
      if((fPtr = fopen(filename, "r+")) == NULL) {
        fprintf(stderr, "Could not open %s\n", filename);
        exit(1);
      }
    
      i = 0;
      while((c = fgetc(fPtr)) != EOF) {
        fseek(fPtr, i, SEEK_SET);
        fputc(toupper(c), fPtr);
        i++;
      }
    
      rewind(fPtr);
    
      while((c = fgetc(fPtr)) != EOF)
        putchar(c);
    
      fclose(fPtr);
    
      return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2020-03-29
      • 2020-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-07
      • 1970-01-01
      • 2021-10-05
      • 2016-03-20
      相关资源
      最近更新 更多