Написал программу на c++, почему то не выполняется вторая часть программа. Помогите отладить ее пожалуйста.

// Условие задачи. Дан массив символов(chra) надо определить сколько процентов составляет букв, а сколько цифр.
#include <iostream>
#include <locale>
#include <stdio.h>
 using namespace std;
int main()
{ setlocale (LC_CTYPE, "rus");
 char a[3];
  int j=0, k=0, i=0, s;
  for (i=0; i<3; i++) {
      cout<<"Введите элемент массива";
      cin>>a[i]; 
      if ('0'<=a[i]<='9') {
          k++; }
         else  j++ ;}
{s=j+k;
k=j*100/s;
cout<<"Процентов чисел ="<<k<<endl;
j=k-100;
cout<<"Процент букв ="<<j<<endl;}
system ("pause");
return 0;
}

Выражение '0'<=a[i]<='9' будет всегда давать true, поскольку сначала выполнится '0'<=a[i] и даст true или false, а затем выполнится treu<='9' или false<='9' соответственно. Булево значение в контексте выражения будет приведено к типу char: т.е. к '\1' или '\0', что всегда меньше '9'.

Правильный оператор будет выглядеть так:

        if ('0' <= a[i] && a[i] <= '9')
            k++;
        else
            j++;

Выражение k=j*100/s; не будет работать правильно, поскольку, учитывая контекст, деление целочисленное. Счётчики могут быть целочисленными, но вычисление и результат (проценты) должны быть с плавающей точкой: типа double или float. Т.е.

    double digit_percentage = k * 100.0 / (j + k);  // 100.0 - это литерал типа double!
    double letter_percentage = 100 - digit_percentage;
    cout << "Процентов чисел =" << digit_percentage << endl;
    cout << "Процент букв =" << letter_percentage << endl;

Фигурные скобки во «второй части» программы не нужны. Переменная s здесь тоже не нужна.

Кстати, для этой программы массив тоже не нужен. Хватит простой переменной типа char для приёма символа из стандартного ввода.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

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

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.