对于作业,我必须创建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;
}
答案 0 :(得分:0)
循环问题:
// 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)
返回EOF
和feof(fp)
,不为true。
计数可能会轻易超过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);