C文件I / O故障

时间:2015-02-19 02:02:28

标签: c file parsing io

我正在尝试在C中创建一个可以查看指定文件中所有字符的方法,并计算特定字符的出现次数。

因此...

输入:Some_File.c

输出:发生字母“J”:文件中的'x'次。

我所拥有的东西:

int main()
{
    int jsCount = jsCounter();
    fin(jsCount);
}

//this counts # of "j"s in a file

int jsCounter()
{
    FILE *fp;
    int c;
    int count = 0;
    char myChar =   "j";
    fp = fopen("Doc.c", "r");

    while((c = fgetc(fp)) != EOF) {
        if ( c == myChar)
            count = count + 1;
    }
    return count;
}

//This sends info to User (How many "j"s were found)

fin(int jsCount)
{
    printf("You have a total of");
    printf("%d" jsCount);
}

我得到的错误:

方法没有返回正确的数字...... 警告...... “初始化从指针生成整数而没有强制转换[默认情况下启用] |”

编辑我为计数返回值0,即使文档中有超过0个j 我来自Java,对C来说很新......有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

  1. 这是错误的

    char myChar =   "j";
    

    它试图将常量字符串"j"的地址分配给myChar,正确的方法是

    char myChar = 'j';
    

    在c中,字符串文字由双引号"some string"分隔,字符常量由'x'等单个qoutes分隔,表达式'x'给出字符x的ascii代码

    还有多字符字符常量,但它们是实现定义的,所以我无法告诉你它们的含义。

    根据您使用的编译器,您可以启用编译器警告,以防止出现此类错误,gcc您可以使用以下内容

    gcc -Wall -Wshadow -Wextra -Werror ${source} -o ${program}
    

    注意:检查fopen()是否未返回NULL,因为如果确实如此,则不应尝试从文件中读取。

  2. 您没有包含所需的任何标题文件

    • stdio.h
  3. 您需要在main()

    中使用之前声明这些功能
    void fin(int jsCount);
    int jsCounter();
    
  4. fin()需要返回类型,如果它不是要返回任何内容,那么void

    void
    fin(int jsCount)
    {
        printf("You have a total of");
        printf("%d", jsCount);
    }
    
  5. printf()中的最后一个fin()缺少格式字符串和参数之间所需的,,您实际上可能只是

    printf("You have a total of %d\n", jsCount);
    
  6. 奖金,在c中有一个三元运算符,它就像这样工作

    count += (c == myChar) ? 1 : 0;
    

    等同于

    if (c == myChar)
        count += 1;
    else
        count += 0;
    

    另外,还有一个复合赋值运算符+=

    x += y;
    

    装置

    x = x + y;
    
  7. 这是您程序的修复版本

    #include <stdio.h>
    
    void fin(int jsCount);
    int jsCounter();
    
    int main()
    {
        int jsCount = jsCounter();
        fin(jsCount);
    }
    
    int jsCounter()
    {
        FILE *fp;
        int   c;
        int   count  = 0;
        char  myChar = 'l';
    
        fp = fopen("Doc.c", "r");
        if (fp == NULL)
        {
            printf("error opening the file\n");
            return 0;
        }
        while ((c = fgetc(fp)) != EOF)
            count += (c == myChar) ? 1 : 0;
        return count;
    }
    
    void
    fin(int jsCount)
    {
        printf("You have a total of %d", jsCount);
    }