| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Вопросы о целочисленных переменных и о сим.массиве |
| Автор: goodwen053 5.4.2011, 19:15 |
| Здравствуйте, я новичок в С++, у меня есть 3 вопроса: 1. Как задать условие: если введено не число? 2. Есть трёхзначное число типа int, как мне сложить все его цифры? 3. Нужно ввести текст, он может быть разной длины, как сделать так, чтобы размер символьного одномерного массива куда заносится текст автоматически принял нужную размерность? И как с определённого элемента в одномерном символьном массиве сдвинуть вправо все остальные элементы, при этом так же увеличивая его размерность? |
| Автор: alexvs11 5.4.2011, 19:22 |
в консоли сделать if( 1 != scanf( "%d", .. или int a; if( (cin >> a).fail() ) |
| Автор: Vard 5.4.2011, 19:39 | ||||
2. Воспользоваться операцией получения остатка от деления и целочисленным делением
3. Я думаю, тут необходимо динамическое выделение памяти (malloc и free либо new, delete) |
| Автор: goodwen053 5.4.2011, 21:50 | ||
| alexvs11, благодарю за помощь, всё заработало. Vard, так же благодарю за помощь, со вторым вопросом, у меня всё получилось, но я не совсем понимаю вот эту запись:
Что здесь обозначает знак "%"? |
| Автор: mes 5.4.2011, 23:17 |
остаток от деления.. |
| Автор: volatile 6.4.2011, 01:00 | ||
кардинальное решение 2-го вопроса
|
| Автор: mes 6.4.2011, 08:04 | ||
или: итерацию по v также вынести в оглавление цикла :
|
| Автор: goodwen053 6.4.2011, 21:11 |
| Благодарю за помощь, всё понял. А как быть с 3-вопросом? Я, как понимаю, нужно через указатели, а как увеличивать размерность символьного массива? Может для 3-вопроса есть какие либо функции по работе со строками? |
| Автор: mes 7.4.2011, 17:55 |
http://cplusplus.com/reference/string/string/c_str/ a const ? |
| Автор: goodwen053 7.4.2011, 19:44 | ||||||||
Я вот если так пишу, и уже в консоли набираю какой либо текст с пробелами, то он запоминает только до первого пробела. Я пытаюсь сделать вот так:
Выдаёт ошибку: [C++ Error] Unit1.cpp(16): E2285 Could not find a match for 'istream::getline(string,unsigned int)' и ссылается на вторую строку. А когда пишу вот эту строку в коде:
Выдаёт ошибку ссылаясь на эту строку в коде:[C++ Error] Unit1.cpp(19): E2285 Could not find a match for 'string::insert(int,char)' Как мне исправить эти ошибки?Компилятор у меня С++ Builder Borland 6. И не совсем понимаю вот эту строку:
Здесь переменная, где записана длина строки - это len, или size_t? |
| Автор: mes 7.4.2011, 21:12 |
| site_t - тип ( аффикс _t даже пытается подсказать |
| Автор: baldina 9.4.2011, 15:27 |
| Автор: goodwen053 10.4.2011, 18:57 | ||
На счёт третьего вопроса я часть сделал (код ниже), но у меня задание, ввести текст (предложения заканчивающиеся точками) и если по ошибке после точки не был введён пробел, сдвинуть всё содержимое и поставить после точки этот пробел. Делаю, как показано ниже на коде и ничего не работает. Если ввожу текст на русском языке, он вообще ничего не выводит (должен вывести изменённый текст), а если на английском, тогда кучу символов беспорядочных, как мне это исправить?
|
| Автор: volatile 10.4.2011, 19:31 |
это присвоение, а не проверка. нужно if(text[i]=='.' дальше, здесь вы затираете символ стоящий после точки, а не вставляете. для того чтобы вставить, я бы посоветовал сделать две строки. и копировать из одной в другую, по символьно, проверяя условие |
| Автор: goodwen053 10.4.2011, 22:04 | ||
Вот я использую в том же коде внутри if строчку:
Компилятор постоянно выдаёт ошибку [C++ Error] Unit1.cpp(23): E2294 Structure required on left side of . or .* Вот почему это так? |
| Автор: volatile 11.4.2011, 00:47 | ||||
goodwen053, Не могу больше смотреть как вы мучаетесь, ловите
|
| Автор: goodwen053 13.4.2011, 18:28 |
| volatile, благодарю) |