Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2017, 19:19   #1
armchair
Пользователь
 
Регистрация: 05.12.2015
Сообщений: 36
По умолчанию Защита от дурака

Помогите, пожалуйста. Программа должна печатать только цифры (а не буквы и прочие символы, знак минус может стоять в самом начале) и при нажатии enter выводить полученное число на экран. Почти всё нормально, только если я ввожу 10 или более цифр, на экран выводится 0. Что нужно исправить, чтобы число выводилось независимо от его "длины"? Заранее спасибо.

// Вводятся только числа.


Код:
#include "conio.h" // для getch().
#include <iostream>
#include <string>
#include <sstream> // для stringstream.
using namespace std;

int main()
{
int n = 0, flgS = 0, c = 0, q = 0; 
unsigned char k = 'a'; // переменная для ввода.
string str; // строка для цифр и минуса.

while (k != '|')
{
k = getch(); // ввод без отображения.
if (k == '|') break;

if ((k == '-') && (c == 0) && (flgS == 0)) // если символ минус, и число символов 0, 
//и минус ни разу не отображался (флаг 0).
{
flgS=-1; // если отображается минус.
cout << '-'; // отображаем минус.
str.push_back(k); // минус помещаем в строку.
c++; // число символов.
}

if ((k >= '0') && (k <= '9')) // если символ цифра.
{
cout << k; // отображаем цифру.
str.push_back(k); // символ в строку.
c++; // число символов.
q++; // число цифр.
}

if (k == '\b' && c != 0) // если backspace и число символов не 0.
{
cout << '\b'; // курсор на шаг назад.
cout << ' '; // затираем последий символ.
cout << '\b'; // курсор на шаг назад.
if (!str.empty()) // если строка не пуста, 
str.pop_back(); // то извлекаем один.
q--; // число цифр уменьшили.
if (q < 0) q = 0; // если получили отрицательное значение, то делаем 0. 
c--; // число символов уменьшили.
if (c <= 0) // если удалённый символ был последним,
{
flgS = 0; // обнуляем флаг, чтобы можно было снова отображать минус.
c = 0; // количество символов 0.
} 
}

if ((k == 13) && (c != 0) && (q != 0)) break; // если, хотя бы, одна цифра введена, то выход. 

}
stringstream stream(stringstream::in | stringstream::out); // создаётся объект для внутреннего форматирования.
stream << str; // вводим строку числовых символов.
stream >> n; // извлекаем число.
cout << endl << n << endl;

system("pause");
return 0; 
}

Последний раз редактировалось Аватар; 20.04.2017 в 19:42.
armchair вне форума Ответить с цитированием
Старый 20.04.2017, 19:31   #2
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Цитата:
Сообщение от armchair Посмотреть сообщение
stringstream stream(stringstream::in | stringstream:ut); // создаётся объект для внутреннего форматирования.
stream << str; // вводим строку числовых символов.
stream >> n; // извлекаем число.
cout << endl << n << endl;
Проблема в этом преобразовании в число. У каждого числового типа есть максимальное значение, которое оно может хранить.

Попробуй
Код:
cout<<str<<endl;
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Старый 20.04.2017, 20:50   #3
armchair
Пользователь
 
Регистрация: 05.12.2015
Сообщений: 36
По умолчанию

Большое Вам спасибо! Теперь всё как надо работает.)
armchair вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
защита от дурака MASTER116 Помощь студентам 4 06.05.2014 11:35
Защита от дурака на Си Анжелика-конст Помощь студентам 9 10.03.2013 17:37
Защита от дурака на СИ mazila2507 Общие вопросы C/C++ 1 17.09.2012 12:09
защита от дурака phasha Помощь студентам 5 03.10.2011 11:45
Защита от дурака Ericnex Помощь студентам 2 13.04.2011 18:35