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

Тема в разделе "Общие вопросы по С и С++", создана пользователем tanil72, 21 апр 2008.

  1. tanil72

    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]
     
  2. biz

    biz Гость

    privet! tebe nado obazatel'no 'cin' ispol'zovat'??
     
  3. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    tanil72, непонятно что Вам нужно сделать
     
  4. tanil72

    tanil72 Гость

    Не вводится строка с клавиатуры с таким кодом,
    бесконечно ввожу слова,
    пока не сделаю Ctrl+Z, что, естественно, прерывает выполнение.
     
  5. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Строка вводится, длина строки рассчитывается, строка копируется и далее ожидается ввод новой строки. Именно так у вас и написано.
     
  6. biz

    biz Гость

    tanil72
    зделай так вот:
    Код (Text):
    #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. tanil72

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

     
  8. biz

    biz Гость

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

    tanil72 Гость

    извиняюсь, работает, но с ошибкой: cnt неправильно считает.
    так почему в твоем варианте такие индексы у buf
     
  10. biz

    biz Гость

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

    а вот и самый лучший вариант:
    Код (Text):
    #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;
    }
     
  11. tanil72

    tanil72 Гость

    я извиняюсь, это я понимаю. может вопрос некорректен, но объясните бедной девушке,
    а какая нумерация индексов у символов введенной строки.
     
  12. biz

    biz Гость

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

    tanil72 Гость

    а символы собственно введенной строки (не x, не '\0') идут в buf[2] и т.д?
     
  14. gamecreator

    gamecreator Гость

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

    biz Гость

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

    С ниалучшеми пожеланиями. Ваш всемогущщий Антон.
     
Загрузка...

Поделиться этой страницей