Код, который я разместил, подсчитывает пробелы в предложении, я хочу изменить его, чтобы он подсчитал все символы во входном предложении.- fbN 21 сек. Назад
Есть еще один счетчик вне условия if
.
#include <stdio.h>
int main(void)
{
int c;
int countSpaces = 0;
int countChars = 0;
puts("Type sentence:");
do {
c = getchar();
countChars += 1;
if (c == ' ') {
countSpaces += 1;
}
} while (c != '\n');
printf("Sentence contains %d spaces and %d characters.\n", countSpaces, countChars);
return 0;
}
Две ноты.foo += 1
является сокращением для foo = foo + 1
без сложности приоритета foo++
.
Без блоков if
или while
играет с огнем.В конце концов вы случайно напишите это.
if( condition )
do something
whoops this is not in the condition but it sure looks like it is!
Всегда используйте блочную форму.
$ ./test
Type sentence:
foo bar baz
Sentence contains 2 spaces and 12 characters.
Обратите внимание, что здесь написано 12, потому что оно включает перевод строки.Это потому, что он проверяет, что c
равно после , оно уже подсчитано.Вы можете исправить это, проверив c
как прочитанное.Это довольно обычная идиома цикла «прочитай и проверь».
// Note, the parenthesis around `c = getchar()` are important.
while( (c = getchar()) != '\n' ) {
countChars++;
if (c == ' ') {
countSpaces++;
}
}
$ ./test
Type sentence:
foo bar baz
Sentence contains 2 spaces and 11 characters.