gpt4 book ai didi

c - 我正在编写一个函数来执行 "while",但为什么会出错?

转载 作者:行者123 更新时间:2023-11-30 16:05:08 25 4
gpt4 key购买 nike

我正在编写一个函数来执行“while”来计算文本文件中字母和数字的数量。我想将它分成 2 个“while”的 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;

}

最佳答案

您的 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() 将继续读取主循环完成的位置,这可能是文件的末尾。

关于c - 我正在编写一个函数来执行 "while",但为什么会出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1895979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com