Я пытаюсь разработать этот счетчик слов (вместе с линией и счетчиками символов). Правила состоят в том, что все это слово, кроме всего, что разделено пробелами, вкладками, новыми строками, точками с запятой и дефисом. Например: 'xyz' 'go; down' 'hey..howareyou' все 1 слово каждый, и 'эй: ты' tacos-burrito 'каждый 2 слова.Счетчик слов, получающих отрицательное значение в C
Мой подход заключается в следующем:
#include <stdio.h>
#include <stdlib.h>
int main(){
int charHolder, result, wordCount, lineCount = 0;
int recursiveSeparatorCheck(charOther){
if(isspace(charOther)||charOther=='\t'||charOther=='\n' || charOther ==':' || charOther == '-')
return 1;
return 0;
}
while ((charHolder = getchar()) != EOF){
if(charHolder == '\n')
lineCount++;
result++;
if(recursiveSeparatorCheck(charHolder) == 1)
continue;
wordCount++;
}
printf("Number of char: %d \n", result);
printf("Number of lines: %d \n", lineCount);
printf("Number of words: %d \n", wordCount);
return (EXIT_SUCCESS);
}
Когда я запускаю свою программу, и кормить его, чтобы прочитать файл, который имеет 20 линий и 160 слов, он печатает следующее:
Number of char: 1130
Number of lines: 20
Number of words: -4195164
ли кто-нибудь знает, что я делаю неправильно? Спасибо за вашу помощь!
Вы забыли инициализировать все переменные, но 'lineCount'. Запуск вашей программы через Valgrind может помочь вам найти такие ошибки. Кроме того, вам нужно '#include'. Наконец, 'int recursiveSeparatorCheck (charOther)' должен быть 'int recursiveSeparatorCheck (int charOther)'. –
5gon12eder
Просто примечание, но вы можете заменить все свое предложение long if на 'strchr (" \ t \ n: - ", charOther)! = NULL'. –
, если в коде было указано только одно объявление переменной на строку, эта проблема никогда бы не произошла. Это связано с тем, что «только потому, что конкретная последовательность кода может быть написана/соблюдена, не означает, что она должна использоваться. Это также яркий пример того, почему все локальные переменные должны быть инициализированы в декларации – user3629249