Гласные не обнаруживаются правильно, показывая необычные результаты - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь получить гласные и согласные отдельно и сохранить их в "vowels.txt " и "consonant.txt" из строки, которая находится в файле. Но согласные встречаются правильно, а гласные - нет. Пожалуйста, взгляните на мой фрагмент кода и помогите понять, как я могу решить эту проблему.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int vowelIndex = 0;
int consIndex = 0;

int isVowel(char chr) {
    switch(chr) {
        case 'a':
        case 'e':
        case 'i':
        case 'o':
        case 'u':
            return 1;
        default:
            return 0;
    }
}

char *readFile() {
    FILE* fp = fopen("character.txt","r");
    char str1[20];
    char* buffer = (char*)malloc(sizeof(char)*50);

//  fscanf(fp,"%s",str1);
    for (int i = 0; i < 6;i++) {
        fscanf(fp,"%s",str1);
        strcat(buffer,str1);
        strcat(buffer," ");
    }
    fclose(fp);
    return buffer;

}

void writeFile(char* fname, char* content) {
    FILE* fp = fopen(fname,"w"); // accessing the file in write mode
    fputs(content,fp);
    fclose(fp);
}

int main(void) {
    char *buff = readFile();
    char *vowels = (char*)malloc(sizeof(char)*18);
    char *cons = (char*)malloc(sizeof(char)*30);

    for (int i = 0; i < strlen(buff); i++) {
        if (isVowel(buff[i])) {
            printf("buffer inspect : %c\n",buff[i]);  
            vowels[vowelIndex] = buff[i];
            vowelIndex++;

        } else {
            cons[consIndex] = buff[i];
            consIndex++;
        }
    }

    printf("\nVowerls : %s\n",vowels);
    printf("\nCons : %s\n",cons);

    writeFile("vowels.txt",vowels); // writing to the file
    writeFile("consonant.txt",cons); // writing to the file:


    return 0;
}

Пожалуйста, помогите мне найти это.

1 Ответ

1 голос
/ 09 июля 2020

Ваш лог c для определения, является ли символ гласным или символ правильным, но есть проблема с обработкой файла и нулевого символа.

Измените функцию readFile, как показано ниже:

char *readFile() {
    FILE* fp = fopen("character.txt","r");
    char str1[20];
    char* buffer = (char*)malloc(sizeof(char)*50);
int i;
  fgets(buffer,50,fp);
  /* fscanf(fp,"%s",buffer);
    for ( i = 0; i < 6;i++) {
        fscanf(fp,"%s",str1);
        strcat(buffer,str1);
        strcat(buffer," ");
    }
  */  fclose(fp);
    return buffer;

}

И в основном, после l oop, добавьте нулевой символ в конце строки гласных и cons, как показано ниже.

int main(void) {
    char *buff = readFile();
    char *vowels = (char*)malloc(sizeof(char)*18);
    char *cons = (char*)malloc(sizeof(char)*30);
    int i;
    printf("strlen = %d\n",strlen(buff));
    for (i = 0; i < strlen(buff); i++) {
        if (isVowel(buff[i])) {
            printf("buffer inspect : %c\n",buff[i]);
            vowels[vowelIndex] = buff[i];
            vowelIndex++;

        } else {
            cons[consIndex] = buff[i];
            consIndex++;
        }
    }
    vowels[vowelIndex] = '\0';
    cons[consIndex] = '\0';

    printf("\nVowels : %s\n",vowels);
    printf("\nCons : %s\n",cons);

    writeFile("vowels.txt",vowels); // writing to the file
    writeFile("consonant.txt",cons); // writing to the file:


    return 0;
}
...