首页 > 解决方案 > 如何做一个将文件中单词的第一个字符大写的 C 程序?

问题描述

    #include <stdio.h>

    int main()
    {
        FILE *fp;
        int i;
        int pos;

        fp=fopen("test.txt","r+");
        fseek(fp,0,SEEK_END);
        pos=ftell(fp);

        char ch[pos-1];
        fseek(fp,0,SEEK_SET);


        ch[0]=ch[0]-32;

        i=0;
        while(ch[i]=fgetc(fp)!=EOF){


            if(ch[i]!=' '){
                fseek(fp,1,SEEK_CUR);
                i++;
            }
            else{
                fseek(fp,1,SEEK_CUR);
                i++;
                ch[i]=fgetc(fp);
                ch[i]=ch[i]-32;
                fprintf(fp,"%c",ch[i]);
            }       
        }
        fclose(fp);








    }

我想制作将文件中单词的第一个字符大写的 C 程序。但是当我运行此代码时,.txt 文件出错了。fgetc() 的用法是错误的吗?这个问题我的错在哪里?fscanf 是移动光标吗?

标签: cfilecapitalization

解决方案


在你的 while 循环的条件下,你有

ch[i] = fgetc(fp) != EOF

由于 != 的优先级高于 =,这相当于

ch[i] = (fgetc(fp) != EOF)

哪个不评估字符,而是比较中的 0 或非零值。

在我看来,一个更好的方法是读取整个字符串,修改它,然后以写入模式再次打开文件并写回,如果你要为内容分配一个数组。


推荐阅读