繁体   English   中英

如何从文件中读取数字以获取C中的大小

[英]How do I read a number from a file to get the size in c

对于作业,我必须创建2个文件,每个文件的数字都超过100位。 我可以很好地做到这一点,但是当需要确切找出文件中有多少位数时,我尝试了fgets(),但我认为我处理得不好。 任何帮助是极大的赞赏。

#include <stdio.h>
#include <stdlib.h>
#include<time.h> 
#include <stdio.h>
int getc(FILE *stream);
int getchar(void);

这并不是我的问题所必需的,但这是我代码的一部分,最终我将需要获取每个数字的大小并将其作为参数传递给这里:

int * add(int * a,int s_a,int * b,int s_b){
  if(s_b<s_a){
    int tmp_s;
    int * tmp_a;

    tmp_s=s_a;
    s_a=s_b;
    s_b=tmp_s;

    tmp_a=a;
    a=b;
    b=tmp_a;
  }
  int * out= (int *)malloc (sizeof(int)*(s_b+1));
  int i, carry,sum;
  carry=0;
  for(i=0;i<s_a;i++){
    sum=((a[i])+b[i]%10)+carry;
    carry=(a[i]+b[i])/10;
    out[i]=sum;
  }
  for(i;i<s_b;i++){
    sum=(b[i]+carry)%10;
    carry=(b[i]+carry)/10;
    out[i]=sum;
  }
  out[i]=carry;
  return out;

}

这是我在文件中添加随机数的地方,我不添加空格,因为它应该都是一个非常长的数字。 尽管我拥有此函数的大小,但这并不是该函数的用途,并且下一个函数正常工作后,print语句将被注释掉。

void addrandomNums(char * fileName){
  srand ( time(NULL) );
  FILE *ffp;
  ffp=fopen(fileName,"w");//if the file exsisists then we erase and write    
 new stuff
  int sizeOfNum=rand()%10000+100;//the size of the number will be from 100-10099(I think)the instructions said a number greater than 100 digits so I tried to make this as wide of a range as possible
  printf("Size of the number for this file is: %d  digits \n",sizeOfNum);
  for(int i=1;i<sizeOfNum;i++){
    fprintf(ffp,"%d", rand() % 10);//adds a number from 0-9
  }
  fclose(ffp);
}

这是需要帮助的功能,我不知道我在做什么错。

int getNumDigits(char * fileName){
    int numDigits=0;
    FILE *fp=fopen(fileName,"w");
    printf( "Reading the file: %s \n" ,fileName) ;
    if (fp == NULL) 
        printf("The file is not found!!");
    return 0;  
    do
    { 
        // Taking input single character at a time 
        char c = fgetc(fp); 

        // Checking for end of file 
        if (feof(fp)) 
            break ; 

        printf("%c", c); 
        numDigits++;
    }  while(1); 
    fclose(fp);
    printf("***The number of characters present in file is: %d \n",numDigits);
    //getch();
    return numDigits;
}
int main(void) {
    addrandomNums("num1.txt");

    addrandomNums("num2.txt");
    int size1=getNumDigits("num2.txt");

    return 0;
}

谢谢大家的帮助,这是固定代码。 我非常感谢您的帮助。

 int getNumDigits(char * fileName){
     int numDigits=0;
     FILE *fp=fopen(fileName,"r");

     printf( "Reading the file: %s \n" ,fileName) ;
   //char buffer[MAX]=fgets()
   // int length=strlen(fgets(buffer, MAX, fp));
   if (fp == NULL) 
   printf("The file is not found!!");
   char c;      
   do{ 
       // Taking input single character at a time 
       c = fgetc(fp);   
       // Checking for end of file 
       if (feof(fp)){ 
         numDigits++;
         break ; 
       }
       numDigits++;
    }  while(1); 
     fclose(fp);
     printf("***The number of characters present in file is: %d \n",numDigits);
   printf("All Done.");
   return numDigits;
 }

循环问题:

                                 // problem code
int numDigits=0;
char c;      
do {                           
  c = fgetc(fp);   
  // Checking for end of file 
  if (feof(fp)){ 
    numDigits++;
    break ; 
  }
  numDigits++;
}  while(1); 
  • 减1

    当需要退出时,无需在计数上加+ 1。

  • 将所有字符计数为数字

    没有测试来确定所读取的字符是否为数字。

  • 退出条件不足

    在罕见的输入错误,OP与代码回路永远fgetc(fp)返回EOFfeof(fp) 不是真的。

  • 计数可能会轻易超过INT_MAX


一些修复:

// int numDigits=0;
unsigned long long numDigits = 0;
unsigned long long numCharacters = 0;
//char c;      
int c;  // fgetc() typically returns 257 different values    
do { 
  c = fgetc(fp);   
  // if (feof(fp)){ 
  //  numDigits++;
  //  break ; 
  // }
  if (c == EOF) {
    break;
  } 
  // numDigits++;
  if (isdigit(c)) numDigits++;
  numCharacters++;
}  while(1); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM