• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

что у меня неправильно со строками в Cin

  • Автор темы tanil72
  • Дата начала
T

tanil72

Zdravstvuyte.
ya tolko nachala izuchat vvod strok. vot primer s cin.
delayu enter, no vvod ne proishodit. chto delat'. kakuyu postavit proverku v cykle?
[codebox]#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);
}
[/codebox]
 
E

European

tanil72, непонятно что Вам нужно сделать
 
E

European

Строка вводится, длина строки рассчитывается, строка копируется и далее ожидается ввод новой строки. Именно так у вас и написано.
 
B

biz

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'
 
T

tanil72

спасибо. ваш код работает. если можно объясните,
почему 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'
 
B

biz

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

странно... а у меня почему-то не работает... icq 373706950 << бей
 
B

biz

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;
}
 
T

tanil72

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

biz

tanil72
такая же как и у обычных массивов. buf[0] - соответствует первому символу.., buf[1] - 2-му.. и т.д.....
 
G

gamecreator

"x\0" это уже строка. каждая строка при вводе помещается в buf.
 
B

biz

tanil72
в buf[2], так же как и в buf[1] или buf[3] или buff[0] можно записать только один символ!!
все они начинают писаться сначала в buf[0], потом в buf[1] и т.д.
в конце каждой строки автоматически дописывается '\0' -- это тоже один символ! он означает конец строки.
если мы с клавиатуры вводим "x", то в buf[0] записывается символ 'x', а в buf[1] символ конца строки, т.е. '\0'

С ниалучшеми пожеланиями. Ваш всемогущщий Антон.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!