C 从动态分配的文件中计算最重出现的元音
在代码的第一部分中,我为一个文件中的五个字符串分配了空间,并将它们打印出来,这就解决了第二部分,我试图为每个字符串计算文件中的每个元音。我想我的代码已经很接近了,但每次计数器都显示为零。我认为第二次尝试读取文件时可能会出现问题,但可以使用正确方向的提示C 从动态分配的文件中计算最重出现的元音,c,arrays,file,char,dynamic-memory-allocation,C,Arrays,File,Char,Dynamic Memory Allocation,在代码的第一部分中,我为一个文件中的五个字符串分配了空间,并将它们打印出来,这就解决了第二部分,我试图为每个字符串计算文件中的每个元音。我想我的代码已经很接近了,但每次计数器都显示为零。我认为第二次尝试读取文件时可能会出现问题,但可以使用正确方向的提示 #include <stdio.h> #include <stdlib.h> #include <string.h> int main( int argc, char *argv[] ) { char
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main( int argc, char *argv[] )
{
char max[1024];
char** buff;
int i=0 ,num = 5;
FILE *infile;
int lc = 0; //counts how many lines there are
//asks for file name if none is supplied
if ( argc < 2 )
{
printf("Must supply file name\n");
return 1;
}
infile = fopen( argv[1], "r" );
//checks to see if file opens
if ( infile == NULL )
{
printf("could not open %s\n", argv[1]);
return 1;
}
buff = (char**)calloc(sizeof(max),sizeof(char));
int k;
for(k=0; k<num;k++){
buff[k] = (char*)calloc(sizeof(max),sizeof(char));
}
while(fgets(max,sizeof(max),infile)){
strcpy(buff[i],max);
i++;
}
int x;
for(x =1; x<i;x++){
lc++;
printf("%d:%s",x,buff[x]);
}
int counter[5];
char c;
rewind(infile);
for(i=0; i<5; i++){
counter[i]=0;}
while (fscanf(infile,"%d",&c))
{
if (c=='a' || c=='A')
counter[0]++;
else if (c=='e' || c=='E')
counter[1]++;
else if (c=='i' || c=='I')
counter[2]++;
else if (c=='o' || c=='O')
counter[3]++;
else if (c=='u' || c=='U')
counter[4]++;
}
for(i = 0; i < 5; i++){
printf("counter[%d] = %d\n", i, counter[i]);
}
#包括
#包括
#包括
int main(int argc,char*argv[])
{
最大字符数[1024];
字符**浅黄色;
int i=0,num=5;
文件*填充;
int lc=0;//计算有多少行
//如果未提供文件名,则询问文件名
如果(argc<2)
{
printf(“必须提供文件名\n”);
返回1;
}
infle=fopen(argv[1],“r”);
//检查文件是否打开
if(infle==NULL)
{
printf(“无法打开%s\n”,argv[1]);
返回1;
}
buff=(char**)calloc(sizeof(max),sizeof(char));
int k;
对于(k=0;k您正在使用fscanf(infle,“%d”和&c)进行阅读%d
用于数字,但您需要字符。请改用%c
。如果(infle==NULL){peror(argv[1]);…}
。告诉用户哪个文件,为什么无法打开该文件,并在stderr上告诉他们。为什么要使用scanf?如果要从文件中获取字符,请使用fgetc
。