Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 1
Регистрация: 12.03.2014
Сообщений: 61
1

Функции <cctype>

05.05.2015, 14:07. Показов 1516. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите никак не пойму почему break в цикле не срабатывает ((
Нужно вводить числовые значения в массив , либо пока он не заполниться , либо при вводе других данных.
А выходит так что ввод прекращается, а цикл крутится дальше
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <cctype>
#include <iostream>
using namespace std;
 
int main()
{
    double a[10];
    int n,x,S;
    S=0;
    n=0;
    cin >> x;
    while(isdigit(x)|| n<10 )
    {
        if (isdigit(x)==1) break;
 
        a[n]=x;
        S+=a[n];
        n++;
        cout << "Summa = " << S;
        cin >> x;
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.05.2015, 14:07
Ответы с готовыми решениями:

Аналог функции isalpha() (<cctype>)
Здравствуйте) Я так понял, функция isalpha() не работает с русскими буквами(?), пришлось написать...

Непонятны разные функции библиотеки cctype
Код #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;cctype&gt; void strcount(const std::string...

Написать программу с использованием функции cctype
Программа, которая читает клавиатурный ввод до символа @ и повторяет его, за исключением...

Cctype
Ку, как правильно использовать функцию &quot;isalpha ()&quot; с pointer если можно с примером.

5
Эксперт по математике/физикеЭксперт С++
2048 / 1366 / 395
Регистрация: 16.05.2013
Сообщений: 3,505
Записей в блоге: 6
05.05.2015, 14:09 2
Лучший ответ Сообщение было отмечено zhundik как решение

Решение

Возможно потому, что true не есть 1?
0
0 / 0 / 1
Регистрация: 12.03.2014
Сообщений: 61
05.05.2015, 14:26  [ТС] 3
Ilot, Всмысле? При смене 1 на 0 он вообще не работает, только одну итерацию делает.
П.С. True разве не все числа отличные от нулю?

Добавлено через 14 минут
Переписал так, вроде работает, но все равно не ясно почему 1 он воспринимает как false, 0 как true
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main()
{
    double a[10];
    int n,x,S;
    S=0;
    n=0;
 
       while (cin>>x)
        {
        if (isdigit(x)==1) break;
 
        a[n]=x;
        S+=a[n];
        n++;
        cout << "Summa = " << S;
        cin >> x;
        }
 
}
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
05.05.2015, 14:43 4
Цитата Сообщение от Ilot Посмотреть сообщение
Возможно потому, что true не есть 1?
true при преобразовании в целое должен приводиться к 1 по Стандарту 4.5/6:
A prvalue of type bool can be converted to a prvalue of type int, with false becoming zero and true becoming one.
Другое дело, что isdigit возвращает int, а не bool. И в качестве истинного результата может быть всё что угодно, отличное от нуля. Поэтому сравнивать результат isdigit с единицей довольно глупо.
zhundik, пиши проще:
C++
1
if (isdigit(x)) break;
2
Эксперт по математике/физикеЭксперт С++
2048 / 1366 / 395
Регистрация: 16.05.2013
Сообщений: 3,505
Записей в блоге: 6
05.05.2015, 14:46 5
Попробуйте так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <cctype>
#include <iostream>
using namespace std;
const int SIZE = 10;
int main()
{
    double a[SIZE];
    int n = 0;
    int S = 0;
    char x;
    cin >> x;
    do {
        if(!isdigit(x))
            break;
        a[n] = x - '0';
        S += a[n];
        ++n;
        cout << "Summa = " << S << std::endl;
        cin >> x;
    } while((isdigit(x) && (n < SIZE) ));
 
    return 0;h
}
Вы этого хотели добиться? Просто не совсем понятна постановка задачи...
1
0 / 0 / 1
Регистрация: 12.03.2014
Сообщений: 61
05.05.2015, 14:52  [ТС] 6
Ilot, Tulosba, Спасибо всем, уже сам решил)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <cctype>
#include <iostream>
using namespace std;
 
int main() // программа заполнения массива числами с проверкой ввода и подсчетом среднего числа массива и др инф
{
    double a[10];
    int n,x,S,f,k;
    k=0;
    S=0;
    n=0;
 
 
       while (cin>>x && n<10) // проверка на вместимость в массив
        {
        if (isdigit(x)==1) break; // проверка на число или нет
 
        a[n]=x; // присваевываем значения массиву
        S+=a[n]; // считаем сумму
        f++;
        n++;
 
        }
 
        cout << "Srednee: " << S/n << endl; // вывод среднего
 
        for (int i = 0; i<10; i++) // цикл проверки значений выше среднего значения
        {
            if ((a[i])>=(S/n)) k++;
 
        }
        cout << "Kolichestvo: = " << n << " Vishe srednego = " << k; // вывод остальной информации
}
0
05.05.2015, 14:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.05.2015, 14:52
Помогаю со студенческими работами здесь

Использование cctype
1. Напишите программу, которая читает клавиатурный ввод до символа @ и повторяет его, за...

Функции. Как после одного возвратного значения функции отталкиваться от возврата другой функции
Написал код, в котором 2 функции одна возвращает стринговое значение, вторая должна бы вернуть...

excel. создать таблицу значение кусочно-непрерывной функции y на интервале [xmin; xmax] с шагом h, для расчета функции y используя логические функции

Для функции токов найти время в которое эти функции максимальны !
Для функций токов, вычислить значение времени, при которых функции достигают своего максимального...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru