我正在尝试在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来说很新......有什么帮助吗?
答案 0 :(得分: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
,因为如果确实如此,则不应尝试从文件中读取。
您没有包含所需的任何标题文件
stdio.h
您需要在main()
void fin(int jsCount);
int jsCounter();
fin()
需要返回类型,如果它不是要返回任何内容,那么void
void
fin(int jsCount)
{
printf("You have a total of");
printf("%d", jsCount);
}
printf()
中的最后一个fin()
缺少格式字符串和参数之间所需的,
,您实际上可能只是
printf("You have a total of %d\n", jsCount);
奖金,在c中有一个三元运算符,它就像这样工作
count += (c == myChar) ? 1 : 0;
等同于
if (c == myChar)
count += 1;
else
count += 0;
另外,还有一个复合赋值运算符+=
x += y;
装置
x = x + y;
这是您程序的修复版本
#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);
}