C функция ввода строки и расчета - PullRequest
0 голосов
/ 29 января 2020
    #include <stdio.h>
    #include <string.h>
    #define SIZE 30
    int countWord(int a[]);
    int countSpace(int a[]);
    int countVowel(int a[]);
    int printResult(int a[]);

int main()//starting main 
{
    char string1[SIZE];
    printf("%s","Enter a string less than 29 characters");
    scanf("%29[^\n]",string1);  //anything except \n.

    printResult(string1);
}
int countWord(int a[]){
    int count=1;
    for(size_t i=0;i<SIZE&&a[i]!='\0';++i){ 
        if(a[i]==' '){
            count++;
        }
    }
    return count;
}
int countSpace(int a[]){
    int count1=0;
    for(size_t i=0;i<SIZE&&a[i]!='\0';++i){ 
        if(a[i]==' '){
            count1++;
        }
    }
    return count1;
}
int countVowel(int a[]){
    int count2=0;
     for(size_t i=0;i<SIZE&&a[i]!='\0';++i){
         if(strchr("aeiouAEIOU", a[i])){
            count2++;
        }
     }
     return count2;
}
int countNum(int a[]){
    int count3=countWord(a)-countVowel(a)-countSpace(a);
    return count3;
}
int printResult(int a[]){
    printf("Your sentence include\n");
    printf("Number of words:%d\n",countWord(a));
    printf("Number of spaces:%d\n",countSpace(a));
    printf("Number of vowels:%d\n",countVowel(a));
    printf("Number of consonants and special characters:%d\n",countNum(a));
}

эта программа просит пользователя ввести строку и вычислить, сколько слов, пробела, гласных ... но я получаю очень неправильный результат после ввода строки. Я думал, лог c в порядке и пытался найти какие-либо проблемы здесь

Ответы [ 2 ]

1 голос
/ 29 января 2020

пытается найти какие-либо проблемы здесь

Экономьте время, включите все предупреждения. Это ключевая ошибка.

Типы просмотра.

int printResult(int a[]);

  char string1[SIZE]; 
  printResult(string1);

Ошибки подсчета слов с " ", " abc def ", " abcd".

Альтернатива : установить флаг для начала слова.

int countWord(int a[]){
int countWord(const int_but_I_suspect_you_want *a) {
  int count=0;
  int start_of_word_possible = 1;
  while (*a) {
    if (isspace(*a)) {
      start_of_word_possible = 1;
    } else {
      if (start_of_word) count++;
      start_of_word_possible = 0;
    }
    a++;
  }
  return count;
}
0 голосов
/ 29 января 2020

Не зная исходную строку, которую вы ввели, невозможно узнать, какой неожиданный результат вы увидели, но вот общие рекомендации:

  • Поскольку вы работаете со строками, это будет более идиоматическим c для обмена int a[] на const char *a во всех ваших прототипах и функциях функций.
  • Прокомментируйте фразу anything except \n. после scanf вызова main.
  • Если вы не собираетесь возвращать значение в int printResult(const char *a, сделайте его void printResult(const char *a.
  • Минимальная подпись для main равна int main(void){...return 0;}.

С учетом только этих изменений и после ввода This is a string я получаю такой результат:

Количество слов: 4
Количество пробелов: 3
Количество гласных: 4
Количество согласных и специальных символов: -3

Потому что 4 - 3 - 4 == -3, похоже, все значения были рассчитаны правильно.

Код обновлен согласно моим комментариям выше:

int main(void)//starting main 
{
    char string1[SIZE];
    printf("%s","Enter a string less than 29 characters");
    scanf("%29[^\n]",string1);//anything except \n.

    printResult(string1);

    return 0;
}
int countWord(const char *a){
    int count=1;
    for(size_t i=0;i<SIZE&&a[i]!='\0';++i){ 
        if(a[i]==' '){
            count++;
        }
    }
    return count;
}
int countSpace(const char *a){
    int count1=0;
    for(size_t i=0;i<SIZE&&a[i]!='\0';++i){ 
        if(a[i]==' '){
            count1++;
        }
    }
    return count1;
}
int countVowel(const char *a){
    int count2=0;
     for(size_t i=0;i<SIZE&&a[i]!='\0';++i){
         if(strchr("aeiouAEIOU", a[i])){
            count2++;
        }
     }
     return count2;
}
int countNum(const char *a){
    int count3=countWord(a)-countVowel(a)-countSpace(a);
    return count3;
}
void printResult(const char *a){
    printf("Your sentence include\n");
    printf("Number of words:%d\n",countWord(a));
    printf("Number of spaces:%d\n",countSpace(a));
    printf("Number of vowels:%d\n",countVowel(a));
    printf("Number of consonants and special characters:%d\n",countNum(a));

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...