2014-01-29 3 views
-1

Это код, который я пытался выполнить на TurboC++ 3.0 (да, я знаю, что он древний, но не могу помочь), когда программа переходит в цикл, он пропускает значение y каждый раз, включая первую попытку. Любая помощь будет оценена, но, пожалуйста, избегайте втирать соль в раны, спрашивая, почему TurboC++ 3.0. Заранее спасибо.cin.getline (char, int) пропускается, когда в цикле

void main() 
{ 
    int x, z; 
    char y[10]; 
    for (int i=0;i<5;i++) 
    { 
     cout<<"\nX:"; 
     cin >> x; 
     cout<<"\nY:"; 
     cin.getline(y,10); 
     cout<<"\nZ:"; 
     cin>>z; 
    } 
    for(i=0;i<5;i++) 
    { 
     cout<<x<<"\n"; 
     cout.write(y, 10)<<"\n"; 
     cout<<z<<"\n\n"; 
    } 
} 

и даже если я использую cin.get (VAR), где переменная является характер, я все еще получаю странные результаты, как сердца, алмаз или даже смайлик.

+4

Вы можете, по крайней мере, отступить от кода правильно :( –

ответ

0

Вы получаете странные результаты, потому что вы не завершаете строку стиля c нулевым символом ('\ 0').
Проблема, с которой вы сталкиваетесь, заключается в том, что бит бит или бит бит установлен. Для того, чтобы удалить это, выполните следующие действия: -

Вы можете использовать

cin.clear() ; 

очистить, если какие-либо ошибочные биты установлены, а затем использовать

cin.ignore(100, '\n') ; 
// 100 is just a random no, change it depending on your size of input. 

игнорировать любые несоответствующие символы INT потока.

или вы можете сделать следующее: -

после cin>>x просто введите cin.ignore(), она будет вымывать любые символы новой строки, присутствующие в буфере.

0

он пропускает значение у

cin >> x считывает ввод до тех пор, пока не найдет то, что это не цифра - в данном случае, в конце-линии символов. Этот символ остается в потоке.

getline считывает ввод до тех пор, пока не найдет символ конца строки (или конец потока). Поскольку вы оставили его в потоке, он сразу находит его и ничего не читает.

Вы можете позвонить cin.ignore(-1,'\n'), чтобы проигнорировать остальную часть первой строки после прочтения x (предполагая, что ваша доисторическая библиотека ведет себя как современная).

я все еще получаю странные результаты, как сердца, алмаз или даже смайлик

cout.write(y, 10) неправильно - есть до 9 действительных символов в y, а затем нулевой символ. Вы хотите, чтобы cout << y рассматривал его как строку с нулевым символом и печатал только допустимые символы.

+0

Я понял вашу мысль о ** cout.write() **, будучи неправильным, но в чем его решение? – user2529412

+0

@ user2529412: Как я уже сказал, 'cout <

+0

** cin.ignore (-1, '\ n') ** пропускает вход для y. Он переходит к следующему входу для x и отображает фигуры и последний заданный вход для x. – user2529412

Смежные вопросы