我正在编写一个“while”的函数,但为什么会出错呢?

时间:2009-12-13 09:15:21

标签: c function while-loop

我正在写一个函数来做“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;

}

4 个答案:

答案 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*位于文件的末尾,因此当您尝试在函数中再次循环它时,它将无法工作。