Форум программистов CODEBY.NET Хостинг в Беларуси — Active Technologies

Разработка бизнес сайтов

Нужны клиенты? Тогда сюда быстрее...
X   Сообщение сайта
(Сообщение закроется через 2 секунды)

Здравствуйте, гость ( Вход | Регистрация )




> что у меня неправильно со строками в Cin
tanil72
Вставить ник
сообщение 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
 
Новая тема 
Ответов (1 - 14)
biz
Вставить ник
сообщение 22:04:2008, 06:25
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 39
Регистрация: 15:04:2008
Пользователь №: 16 634
Специализация: Программист



Репутация: - 0 +


privet! tebe nado obazatel'no 'cin' ispol'zovat'??
Подняться вверх 
 
Сообщение #2
European
Вставить ник
сообщение 22:04:2008, 08:10
Цитата Ответить 


Божественный
*****

Группа: Модеры
Сообщений: 1 869
Регистрация: 4:09:2006
Из: Минск
Пользователь №: 6 316
Специализация: C++



Репутация: - 31 +


tanil72, непонятно что Вам нужно сделать
Подняться вверх 
 
Сообщение #3
tanil72
Вставить ник
сообщение 22:04:2008, 09:04
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 11
Регистрация: 7:04:2008
Пользователь №: 16 436



Репутация: - 0 +


Цитата(European @ 22:04:2008, 09:10 ) *
tanil72, непонятно что Вам нужно сделать


Не вводится строка с клавиатуры с таким кодом,
бесконечно ввожу слова,
пока не сделаю Ctrl+Z, что, естественно, прерывает выполнение.
Подняться вверх 
 
Сообщение #4
European
Вставить ник
сообщение 22:04:2008, 09:13
Цитата Ответить 


Божественный
*****

Группа: Модеры
Сообщений: 1 869
Регистрация: 4:09:2006
Из: Минск
Пользователь №: 6 316
Специализация: C++



Репутация: - 31 +


Строка вводится, длина строки рассчитывается, строка копируется и далее ожидается ввод новой строки. Именно так у вас и написано.
Подняться вверх 
 
Сообщение #5
biz
Вставить ник
сообщение 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
tanil72
Вставить ник
сообщение 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 );
}
}

Цитата(biz @ 22:04:2008, 11:57 ) *
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
biz
Вставить ник
сообщение 22:04:2008, 12:35
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 39
Регистрация: 15:04:2008
Пользователь №: 16 634
Специализация: Программист



Репутация: - 0 +


Цитата(tanil72 @ 22:04:2008 - 14:59) *
я попробовала в своем варианте в while функцию peek для cin, работает:
while (cin>>buf && cin.peek()!= '\n') {
curLen = strlen( buf );++cnt;
if ( curLen > max ) {
max = curLen;
strcpy( largest, buf );
}
}


странно... а у меня почему-то не работает... icq 373706950 << бей
Подняться вверх 
 
Сообщение #8
tanil72
Вставить ник
сообщение 22:04:2008, 12:46
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 11
Регистрация: 7:04:2008
Пользователь №: 16 436



Репутация: - 0 +


извиняюсь, работает, но с ошибкой: cnt неправильно считает.
так почему в твоем варианте такие индексы у buf
Цитата(biz @ 22:04:2008, 13:35 ) *
странно... а у меня почему-то не работает... icq 373706950 << бей

Подняться вверх 
 
Сообщение #9
biz
Вставить ник
сообщение 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
tanil72
Вставить ник
сообщение 22:04:2008, 13:07
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 11
Регистрация: 7:04:2008
Пользователь №: 16 436



Репутация: - 0 +


я извиняюсь, это я понимаю. может вопрос некорректен, но объясните бедной девушке,
а какая нумерация индексов у символов введенной строки.
Цитата(biz @ 22:04:2008, 13:52 ) *
tanil72
Можно на ты.
Дело в том дорогая, что buf[0] - это первый элемент массива, buf[1] - второй. Соответственно введя с клавиатуры "x" и нажав энтер, в массиве появляется комбинация 'x\0', мы ее проверяем, и, следовательно если находим, то ломаем цикл, в следствии чего выходим из него!)

Подняться вверх 
 
Сообщение #11
biz
Вставить ник
сообщение 22:04:2008, 13:09
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 39
Регистрация: 15:04:2008
Пользователь №: 16 634
Специализация: Программист



Репутация: - 0 +


tanil72
такая же как и у обычных массивов. buf[0] - соответствует первому символу.., buf[1] - 2-му.. и т.д.....
Подняться вверх 
 
Сообщение #12
tanil72
Вставить ник
сообщение 22:04:2008, 14:15
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 11
Регистрация: 7:04:2008
Пользователь №: 16 436



Репутация: - 0 +


а символы собственно введенной строки (не x, не '\0') идут в buf[2] и т.д?
Цитата(biz @ 22:04:2008, 14:09 ) *
tanil72
такая же как и у обычных массивов. buf[0] - соответствует первому символу.., buf[1] - 2-му.. и т.д.....


Сообщение отредактировал tanil72 - 22:04:2008, 14:17
Подняться вверх 
 
Сообщение #13
gamecreator
Вставить ник
сообщение 22:04:2008, 17:12
Цитата Ответить 


Гуру
***

Группа: Достойный программист
Сообщений: 315
Регистрация: 3:11:2007
Пользователь №: 13 517



Репутация: - 1 +


"x\0" это уже строка. каждая строка при вводе помещается в buf.
Подняться вверх 
 
Сообщение #14
biz
Вставить ник
сообщение 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


Быстрый ответ  Ответить  Новая тема 

> Быстрый ответ
Полужирный
Курсив
Подчеркнутый
Вставить изображение
Смайлики
Цитата
Код
 
 Отправлять уведомления об ответах на e-mail |  Включить смайлики |  Добавить подпись
   

 

RSS Текстовая версия Сейчас: 6:07:2008 - 17:26
с нами можно связаться по:
телефону: +375-(29)-632-60-67
e-mail:info@codeby.net