C 文件 I/O 麻烦
C File I/O Trouble
我正在尝试用 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);
}
我遇到的错误:
该方法未返回正确的数字...
警告...
"initialization makes integer from pointer without a cast [enabled by default]|"
edit我返回计数值 0,即使文档中有超过 0 个 j
我来自 Java,对 C 还很陌生……有什么帮助吗?
这是错误的
char myChar = "j";
它试图将常量字符串"j"
的地址分配给myChar
,正确的方法是
char myChar = 'j';
在c中,字符串字面量由双引号"some string"
分隔,字符常量由单引号分隔,如'x'
,表达式'x'
给出字符[=26的ascii码=].
也有多字符常量,但它们是实现定义的,所以我无法告诉你它们的含义。
根据你使用的编译器,你可以启用编译器警告,这将防止这种错误,对于gcc
你可以使用以下
gcc -Wall -Wshadow -Wextra -Werror ${source} -o ${program}
注意:检查 fopen()
没有 return NULL
,因为如果有,你不应该尝试从文件.
您没有包含任何需要的头文件
stdio.h
在 main()
中使用函数之前需要声明它们
void fin(int jsCount);
int jsCounter();
fin()
需要一个 return 类型,如果它不是 return 任何东西那么 void
void
fin(int jsCount)
{
printf("You have a total of");
printf("%d", jsCount);
}
fin()
中的最后一个printf()
缺少格式字符串和参数之间需要的,
,实际上你可以
printf("You have a total of %d\n", jsCount);
Bonus,在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);
}
我正在尝试用 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);
}
我遇到的错误:
该方法未返回正确的数字... 警告... "initialization makes integer from pointer without a cast [enabled by default]|"
edit我返回计数值 0,即使文档中有超过 0 个 j 我来自 Java,对 C 还很陌生……有什么帮助吗?
这是错误的
char myChar = "j";
它试图将常量字符串
"j"
的地址分配给myChar
,正确的方法是char myChar = 'j';
在c中,字符串字面量由双引号
"some string"
分隔,字符常量由单引号分隔,如'x'
,表达式'x'
给出字符[=26的ascii码=].也有多字符常量,但它们是实现定义的,所以我无法告诉你它们的含义。
根据你使用的编译器,你可以启用编译器警告,这将防止这种错误,对于
gcc
你可以使用以下gcc -Wall -Wshadow -Wextra -Werror ${source} -o ${program}
注意:检查
fopen()
没有 returnNULL
,因为如果有,你不应该尝试从文件.您没有包含任何需要的头文件
stdio.h
在
中使用函数之前需要声明它们main()
void fin(int jsCount); int jsCounter();
fin()
需要一个 return 类型,如果它不是 return 任何东西那么void
void fin(int jsCount) { printf("You have a total of"); printf("%d", jsCount); }
fin()
中的最后一个printf()
缺少格式字符串和参数之间需要的,
,实际上你可以printf("You have a total of %d\n", jsCount);
Bonus,在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);
}