Member 13020549 Ответов: 1

Как мне заставить работать мои последние 3 цикла for?


Проблема в том, что последние три цикла for моей программы не запускаются. Предполагается, что программа подсчитывает появление символов на входе, отображает количество раз, когда эти символы встречаются, и символы, которые встречаются указанное количество раз

#include<stdio.h>
#include<ctype.h>

int main(void){
    
    char str[50000];
    int x;
    int lowerCase;
    int upperCase;
    int digit;
    int specialCharacter;
    int total;
    int max = 0;
    
    printf("Enter a string and press Control-D when done: \n ");
    scanf(" %c", str);
    
    x = lowerCase = upperCase = digit = specialCharacter = total =0;
    
    for(;str[x]!='\0';x++){
        while ((str[x]= fgetc(stdin)) != EOF){
            
            if(str[x] >= 'A' && str[x] <='Z') upperCase++;
            else if(str[x] >= 'a' && str[x] <='z') lowerCase++;
            else if(str[x] >= '0' && str[x] <='9') digit++;
            else if(str[x] == '\n' || str[x] == '\t' || str[x] == ' '){}
            else specialCharacter++;
            
        }
    }
    
    total = lowerCase + upperCase + digit + specialCharacter;
    
    
    printf("\n%dcharacters\n",total);
    printf("lowercase= %d , uppercase=%d , digit=%d , special=%d \n", lowerCase,upperCase,digit,specialCharacter );
    
    for(int a=0; a<128; a++){
        if(str[a]>max)
            max=str[a];
    }
    
    for(int a=max; a>=0; a--){
        for(int b=0; b<128; b++){
            if(str[b]==a){
                printf("\n\nCharacters occuring %d times: ", str[b]);
                for(int c=33; c<127; c++){
                    if(str[c]==a){
                        printf("%c",c);
                        
                        
                    }
                }
                printf("\n");
                break;
                
                
            }
        }
    }
    
    
}
<pre><pre lang="c#">


Что я уже пробовал:

Я пытался изменить свои формулы, но у меня ничего не получилось, я знаю, что циклы работают, но они не показывают весь вывод.

Это мой вывод, который я получаю сейчас:



Введите строку и нажмите Control-D, Когда закончите:
привет
4характеристики
нижний регистр= 4, верхний регистр=0, цифра=0, специальный=0


Символы, встречающиеся 0 раз: ! " #$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ [\]^_ ' abcdefghijklmnopqrstuvwxyz { / }~

он должен вывести к этому:



Введите строку и нажмите Control-D, Когда закончите:
привет
4характеристики
нижний регистр= 4, верхний регистр=0, цифра=0, специальный=0

Символы, встречающиеся 2 раза: l
Символы, встречающиеся 1 раз: h, e, o
Символы, встречающиеся 0 раз: ! " #$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdfgijkmnpqrstuvwxyz{|}~

Graeme_Grant

Что такое 3-й цикл, требующий, чтобы сделать его циклом? Вы уверены, что требования выполнены?

Знаете ли вы, как использовать отладчик? Знаете ли вы, как устанавливать точки останова и оценивать значения во время работы приложения?

Patrice T

Не все могут или хотят запускать ваш код.
Добавление образца ввода с фактическим выходом и ожидаемым выходом может помочь нам понять, что не так.

Member 13020549

Это мой вывод, который я получаю сейчас:

Введите строку и нажмите Control-D, Когда закончите:
привет
4характеристики
нижний регистр= 4, верхний регистр=0, цифра=0, специальный=0


Символы, встречающиеся 0 раз: ! " #$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ [\]^_ ' abcdefghijklmnopqrstuvwxyz { / }~

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

Member 13020549

я обновил это и прошу прощения за свою медлительность я новичок в программировании и использовании этого сайта

Patrice T

без проблем.
Вы отвечаете, он уже огромен по сравнению с некоторыми другими запросчиками.

Member 13020549

он должен вывести к этому:

Введите строку и нажмите Control-D, Когда закончите:
привет
4характеристики
нижний регистр= 4, верхний регистр=0, цифра=0, специальный=0

Символы, встречающиеся 2 раза: l
Символы, встречающиеся 1 раз: h, e, o
Символы, встречающиеся 0 раз: ! " #$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdfgijkmnpqrstuvwxyz{|}~

Graeme_Grant

Установка точек останова, оценка локальных объектов и переступание через код покажут вам, что именно происходит. Это называется "отладка".

sourcebewithyou

Хмм. Это ведь с, верно ?

Member 13020549

да это с

Graeme_Grant

Просто исправил вашу маркировку вопроса с C# на C.

1 Ответов

Рейтинг:
0

Patrice T

Цитата:
Я знаю, что циклы работают, но они не показывают весь вывод.

Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Member 13020549

есть ли отладчик для mac, мой профессор никогда не сообщал об этом нашему классу

Patrice T

Выполните поиск по имени IDE / компилятора и отладчику, который вы должны найти.

Graeme_Grant

Другая форма отладки состоит в том, чтобы эхом воспроизводить состояния переменных в вашем коде и смотреть на выходные значения по мере изменения кода. Аналогичный принцип действует и в реальном мире. В коммерческих приложениях регистраторы используются для отслеживания того,как выполняется код, когда пользователь использует приложение; веб-сайты имеют журналы активности и т. д...

Patrice T

Конечно

Member 13020549

неважно я все понял

Patrice T

Отладчик-это инструмент, вам нужно научиться ему быть эффективным.

Member 13020549

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

Graeme_Grant

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

Patrice T

Должна быть почти вторая глава