我正在写一个函数来做“while”来计算文本文件中的字母和数字的数量。我想把它分成2个“2”的功能。 但是在创建第一个函数后它出错了。怎么了?
#include "stdafx.h"
#include "stdlib.h"
#include "ctype.h"
void countDig (FILE* input, char num, int numCount);
int _tmain(void)
{
FILE* input;
char num;
char ch;
int numCount = 0;
int chCount = 0;
input = fopen("123.txt", "r");
if (!input)
{
printf("No file \a\n");
exit (101);
}
while ((fscanf(input, " %c", &ch)) == 1)
{
printf(" %c\n", ch);
if (isalpha(ch))
chCount++;
}
countDig (input, num, numCount);
printf("ch count: %d", chCount);
return 0;
}
void countDig (FILE* input, char num, int numCount)
{
FILE* f;
char n;
int nc;
while ((fscanf(f, " %c", &n)) == 1)
{
printf(" %c\n", n);
if (isdigit(n))
nc++;
}
printf("number count: %d", nc);
return;
}
更正后:
#include "stdafx.h"
#include "stdlib.h"
#include "ctype.h"
void countDig (FILE* input, char num, int numCount);
int _tmain(void)
{
FILE* input;
char num;
char ch;
int numCount = 0;
int chCount = 0;
input = fopen("123.txt", "r");
if (!input)
{
printf("No file \a\n");
exit (101);
}
while ((fscanf(input, " %c", &ch)) == 1)
{
printf(" %c\n", ch);
if (isalpha(ch))
chCount++;
}
countDig (input, num, numCount);
printf("ch count: %d", chCount);
return 0;
}
void countDig (FILE* input, char num, int numCount)
{
char n;
int nc = 0;
while ((fscanf(input, " %c", &n)) == 1)
{
printf(" %c\n", n);
if (isdigit(n))
nc++;
}
printf("number count: %d", nc);
return;
}
答案 0 :(得分:1)
您的countDig
函数需要FILE*
但不使用它。相反,它使用未初始化的本地FILE*
:
void countDig (FILE* input, char num, int numCount)
{
FILE* f;
char n;
int nc;
while ((fscanf(f, " %c", &n)) == 1) // f is uninitialised here
你可能意味着这样的事情:
void countDig (FILE* input, char num, int numCount)
{
char n;
int nc;
while ((fscanf(input, " %c", &n)) == 1)
您还在使用nc
而未初始化它 - C不会自动将变量设置为零;你必须自己做:
int nc = 0;
后续代码后的 编辑:据我所知,你还有其他几个未初始化的变量,但除此之外代码应该有效。唯一的另一个问题是countDig()
可能找不到任何内容,因为_tmain()
中的初始循环已经一直读到文件的末尾。 countDig()
将继续读取主循环完成的位置,这可能是文件的结尾。
答案 1 :(得分:0)
在countDig
函数中,您的File* f;
变量未初始化,nc
也没有初始化。
最后在这个功能中,numCount
参数的意图是什么?
答案 2 :(得分:0)
计算您到达文件末尾的字母,然后尝试从未初始化的文件句柄中读取更多内容...
答案 3 :(得分:0)
您需要关闭并重新打开FILE*
。在第一个while循环之后,FILE*
位于文件的末尾,因此当您尝试在函数中再次循环它时,它将无法工作。