У меня есть следующий код для подсчета вхождения каждой буквы во входной строке. Цикл while выполняется правильно. Теперь у меня есть arr[]
, содержащий номер 'a' в arr[0]
, 'b's в arr[1]
и так далее.Печать каждой буквы во входном потоке
Однако, printf
не отображает полное содержание arr
. (Пример o/p, приведенный ниже).
Если я вообще прокомментирую петлю while, printf
печатает все 26 arr[]
значений отлично! Что я могу пропустить в этой простой программе?
Если какой-либо помощи, я использую VS 2008.
int arr[26]={'\0'};
int i = 0, c = 0, idx = 0, count = 0;
while((c = getchar()) != EOF) {
if('a' <= c && 'z' >= c) {
idx = c - 'a';
arr[idx] = arr[idx]+1;
}
}
for(count = 0; count < 26; count++) {
printf("arr[%d] = %d\n", count, arr[count]);
}
Выходы, которые я получаю (сохраняет изменения для различных входов):
abcxyz
arr[0] = 1
arr[1] = 1
^CPress any key to continue . . .
abcabc
arr[0] = 2
arr[1]
^CPress any key to continue . . .
@Nobilis: Обновленный код счет для прописных букв, а также сделал печать более значимой :)
int main()
{
int arr[26]={'\0'};
int i = 0, c = 0, idx = 0, count = 0;
while((c = getchar()) != EOF)
{
if('a' <= c && 'z' >= c)
{
idx = c - 'a';
arr[idx] = arr[idx]+1;
}
if('A' <= c && 'Z' >= c)
{
idx = c - 'A';
arr[idx] = arr[idx]+1;
}
}
for(count = 0; count < 26; count++)
{
printf("%c or %c = %d\n", ('A'+count), ('a'+count), arr[count]);
}
}
Ваша проблема в том, что не все входные символы подсчитаны? Я только что запустил ваш код с вводом 'abcabc', и я правильно получил счет:' arr [0] = 2 arr [1] = 2 arr [2] = 2'. Получаете ли вы какие-либо предупреждения (кроме неиспользованного 'i')? – Nobilis
Рядом с: int arr [26] = {'\ 0'}; Ваш код совершенно верный. Вы должны искать проблему в другом месте. Для инициализации массива вы инициализируете int с char. Это совершенно легально C и работает отлично, но вы не должны привыкнуть к чему-то. – Geod24
Входные символы считаются точными. Если я укажу ввод как «abcxyz», я вижу (используя отладчик VS) arr [0], arr [1], arr [2] и arr [23], arr [24], arr [25], содержащие 1. Все остальные значения arr равны 0. Но когда я пытаюсь распечатать его, я получаю следующий, неполный вывод: 'abcxzy arr [0] = 1 arr [1] = 1^CPНажмите любую клавишу для продолжения. , «. – VivereJay