Помощник
Здравствуйте, гость ( Вход | Регистрация )
|
|
21:04:2008, 11:48
|
|
Новенький ![]() Группа: Программист Сообщений: 11 Регистрация: 7:04:2008 Пользователь №: 16 436 Репутация: 0
|
Zdravstvuyte.
ya tolko nachala izuchat vvod strok. vot primer s cin. delayu enter, no vvod ne proishodit. chto delat'. kakuyu postavit proverku v cykle? CODE #include <iosteam>
#include <string> using namespace std; int main(){ const int bufSize=10; char buf[bufSize]; char largest[bufSize]; int curLen,max=-1,cnt=0; cout<<"VVedite stroku"<<endl; while(cin>>buf){ curLen=strlen(buf); cnt++; if(curLen>max){ max=curLen; strcpy(largest,buf); } } cout<<"cnt="<<cnt<<endl; cout<<"max="<<max<<endl; cout<<"largest="<<largest; return(0); } Сообщение отредактировал tanil72 - 21:04:2008, 11:51 |
|
Сообщение
#1
|
|
![]() |
|
|
22:04:2008, 06:25
|
|
Новенький ![]() Группа: Программист Сообщений: 39 Регистрация: 15:04:2008 Пользователь №: 16 634 Специализация: Программист Репутация: 0
|
privet! tebe nado obazatel'no 'cin' ispol'zovat'??
|
|
Сообщение
#2
|
|
|
|
22:04:2008, 08:10
|
|
Божественный ![]() ![]() ![]() ![]() ![]() Группа: Модеры Сообщений: 1 869 Регистрация: 4:09:2006 Из: Минск Пользователь №: 6 316 Специализация: C++ Репутация: 31
|
tanil72, непонятно что Вам нужно сделать
|
|
Сообщение
#3
|
|
|
|
22:04:2008, 09:04
|
|
Новенький ![]() Группа: Программист Сообщений: 11 Регистрация: 7:04:2008 Пользователь №: 16 436 Репутация: 0
|
|
|
Сообщение
#4
|
|
|
|
22:04:2008, 09:13
|
|
Божественный ![]() ![]() ![]() ![]() ![]() Группа: Модеры Сообщений: 1 869 Регистрация: 4:09:2006 Из: Минск Пользователь №: 6 316 Специализация: C++ Репутация: 31
|
Строка вводится, длина строки рассчитывается, строка копируется и далее ожидается ввод новой строки. Именно так у вас и написано.
|
|
Сообщение
#5
|
|
|
|
22:04:2008, 10:57
|
|
Новенький ![]() Группа: Программист Сообщений: 39 Регистрация: 15:04:2008 Пользователь №: 16 634 Специализация: Программист Репутация: 0
|
tanil72
зделай так вот: Код #include <iostream.h> #include <string.h> void main( void ) { const int bufSize = 10; char buf[bufSize]; char largest[bufSize]; int curLen, max = -1, cnt = 0; cout << "VVedite stroku" << endl; for (;; cnt++ ) { cin >> buf; if ( buf[0] == 'x' && buf[1] == '\0' ) break; curLen = strlen( buf ); if ( curLen > max ) { max = curLen; strcpy( largest, buf ); } } cout << "cnt=" << cnt << endl; cout << "max=" << max << endl; cout << "largest=" << largest; } выход будет производиться по символу 'x' |
|
Сообщение
#6
|
|
|
|
22:04:2008, 11:59
|
|
Новенький ![]() Группа: Программист Сообщений: 11 Регистрация: 7:04:2008 Пользователь №: 16 436 Репутация: 0
|
спасибо. ваш код работает. если можно объясните,
почему buf с 0 индексом проверяется на равенство 'x' и buf с 1 индексом проверяется на конец строки. как идет нумерация у buf? что наоборот? я попробовала в своем варианте в while функцию peek для cin, работает: while (cin>>buf && cin.peek()!= '\n') { curLen = strlen( buf );++cnt; if ( curLen > max ) { max = curLen; strcpy( largest, buf ); } } tanil72 зделай так вот: Код #include <iostream.h> #include <string.h> void main( void ) { const int bufSize = 10; char buf[bufSize]; char largest[bufSize]; int curLen, max = -1, cnt = 0; cout << "VVedite stroku" << endl; for (;; cnt++ ) { cin >> buf; if ( buf[0] == 'x' && buf[1] == '\0' ) break; curLen = strlen( buf ); if ( curLen > max ) { max = curLen; strcpy( largest, buf ); } } cout << "cnt=" << cnt << endl; cout << "max=" << max << endl; cout << "largest=" << largest; } выход будет производиться по символу 'x' |
|
Сообщение
#7
|
|
|
|
22:04:2008, 12:35
|
|
Новенький ![]() Группа: Программист Сообщений: 39 Регистрация: 15:04:2008 Пользователь №: 16 634 Специализация: Программист Репутация: 0
|
|
|
Сообщение
#8
|
|
|
|
22:04:2008, 12:46
|
|
Новенький ![]() Группа: Программист Сообщений: 11 Регистрация: 7:04:2008 Пользователь №: 16 436 Репутация: 0
|
|
|
Сообщение
#9
|
|
|
|
22:04:2008, 13:02
|
|
Новенький ![]() Группа: Программист Сообщений: 39 Регистрация: 15:04:2008 Пользователь №: 16 634 Специализация: Программист Репутация: 0
|
tanil72
Можно на ты. Дело в том дорогая, что buf[0] - это первый элемент массива, buf[1] - второй. Соответственно введя с клавиатуры "x" и нажав энтер, в массиве появляется комбинация 'x\0', мы ее проверяем, и, следовательно если находим, то ломаем цикл, в следствии чего выходим из него!) а вот и самый лучший вариант: Код #include <iostream.h>
#include <string.h> void main( void ) { const int bufSize = 10; char buf[bufSize]; char largest[bufSize]; int curLen, max = -1, cnt = 0; cout << "VVedite stroku" << endl; for (; cin.peek() != '\n'; cnt++ ) { cin >> buf; cin.get(); curLen = strlen( buf ); if ( curLen > max ) { max = curLen; strcpy( largest, buf ); } } cout << "cnt=" << cnt << endl; cout << "max=" << max << endl; cout << "largest=" << largest; } |
|
Сообщение
#10
|
|
|
|
22:04:2008, 13:07
|
|
Новенький ![]() Группа: Программист Сообщений: 11 Регистрация: 7:04:2008 Пользователь №: 16 436 Репутация: 0
|
я извиняюсь, это я понимаю. может вопрос некорректен, но объясните бедной девушке,
а какая нумерация индексов у символов введенной строки. tanil72 Можно на ты. Дело в том дорогая, что buf[0] - это первый элемент массива, buf[1] - второй. Соответственно введя с клавиатуры "x" и нажав энтер, в массиве появляется комбинация 'x\0', мы ее проверяем, и, следовательно если находим, то ломаем цикл, в следствии чего выходим из него!) |
|
Сообщение
#11
|
|
|
|
22:04:2008, 13:09
|
|
Новенький ![]() Группа: Программист Сообщений: 39 Регистрация: 15:04:2008 Пользователь №: 16 634 Специализация: Программист Репутация: 0
|
tanil72
такая же как и у обычных массивов. buf[0] - соответствует первому символу.., buf[1] - 2-му.. и т.д..... |
|
Сообщение
#12
|
|
|
|
22:04:2008, 14:15
|
|
Новенький ![]() Группа: Программист Сообщений: 11 Регистрация: 7:04:2008 Пользователь №: 16 436 Репутация: 0
|
|
|
Сообщение
#13
|
|
|
|
22:04:2008, 17:12
|
|
Гуру ![]() ![]() ![]() Группа: Достойный программист Сообщений: 315 Регистрация: 3:11:2007 Пользователь №: 13 517 Репутация: 1
|
"x\0" это уже строка. каждая строка при вводе помещается в buf.
|
|
Сообщение
#14
|
|
|
|
23:04:2008, 04:34
|
|
Новенький ![]() Группа: Программист Сообщений: 39 Регистрация: 15:04:2008 Пользователь №: 16 634 Специализация: Программист Репутация: 0
|
tanil72
в buf[2], так же как и в buf[1] или buf[3] или buff[0] можно записать только один символ!! все они начинают писаться сначала в buf[0], потом в buf[1] и т.д. в конце каждой строки автоматически дописывается '\0' -- это тоже один символ! он означает конец строки. если мы с клавиатуры вводим "x", то в buf[0] записывается символ 'x', а в buf[1] символ конца строки, т.е. '\0' С ниалучшеми пожеланиями. Ваш всемогущщий Антон. |
|
Сообщение
#15
|
|
![]() |
|
Текстовая версия | Сейчас: 6:07:2008 - 17:26 |