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