Cin peek c что это
Перейти к содержимому

Cin peek c что это

  • автор:

 

What is cin.peek, and what does it do?

Can someone explain what the cin.peek statement and what it is doing in the above code? How does EOF|| cin.peek() == ‘\n’) affect this.

When I enter a float value, the first else value activates but a result still shows. How do I adapt the code to make the total fee not appearing?

Zoe stands with Ukraine's user avatar

Sohel 's user avatar

2 Answers 2

the ‘peek’ function on input streams (in your case cin ) retrieves the next character from the stream without actually consuming it. That means that you can «preview» the next character in the input, and on the next call to any consuming operation (overloaded operator >> or cin.read ) will read that character and consume it.

The condition eof() || cin.peek == ‘\n’ checks if either the end of the input file stream is reached or if the user provided a newline character.

Regarding your other question: In case of an invalid input (e.g. a floating-point value), you do not exit the function. Thus, you continue execution and hence print the value. Simply exit from the function using return 1; .

Thomas Lang's user avatar

peek looks at a character without removing it from the stream. That code is checking to make sure that the next character in the stream is the end of the file or the end of a line without extracting the character from the stream and damaging a subsequent valid input.

It cannot accept a floating point number because cin >> NumChild will read an int and will stop as soon as it hits the decimal point. Example: input «3.14». numChild will contain 3. The «.14» remains in the stream, so peek will read ‘.’ , not the end of the file or a newline, and prints the error message.

It then continues with the rest of the program because nothing told it to stop. You need a loop around the input to continue requesting more input until a valid input is provided.

How to use cin.get(), cin.peek() and cin.putback() in c++ programming.

First of all, we have to understand how we used to take input while working on a console-based app. We use cin>>var to take some var variable into our program. The variable can be of int, double, char or string type. But the question is how this input works?

So when we give input on running this program and suppose we give input as cplusplus then this input is stored in input buffer stream like this and pointer(arrow) is placed at the first buffer.

Note:- This is not the pointer which holds the address.

Since we are using char type variable so the first value is stored in the variable var as ‘c’ and the pointer move to the next input buffer i.e. ‘p’.

Now if we are using another cin statement in our program may be for a variable var1 of char data type then the next value in the input buffer stream is assigned to the variable var1.

 

std:: istream::peek

Returns the next character in the input sequence, without extracting it: The character is left as the next character to be extracted from the stream.

If any internal state flags is already set before the call or is set during the call, the function returns the end-of-file value ( EOF ).

Internally, the function accesses the input sequence by first constructing a sentry object (with noskipws set to true ). Then (if good ), it reads one character from its associated stream buffer object by calling its member function sgetc , and finally destroys the sentry object before returning.

Calling this function sets the value returned by gcount to zero.

Parameters

Return Value

The next character in the input sequence, as a value of type int .

If there are no more characters to read in the input sequence, or if any internal state flags is set, the function returns the end-of-file value ( EOF ), and leaves the proper internal state flags set:

flag error
eofbit No character could be peeked because the input sequence has no characters available (end-of-file reached).
failbit The construction of sentry failed (such as when the stream state was not good before the call).
badbit Error on stream (such as when this function catches an exception thrown by an internal operation).
When set, the integrity of the stream may have been affected.

Multiple flags may be set by a single operation.

If the operation sets an internal state flag that was registered with member exceptions , the function throws an exception of member type failure .

Что такое cin.peek и для чего он нужен?

Может кто-нибудь объяснить, что такое оператор cin.peek и что он делает в приведенном выше коде? Как EOF|| cin.peek() == ‘\n’) повлиять на это.

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

Решение

функция ‘peek’ для входных потоков (в вашем случае ‘cin’) извлекает следующий символ из потока, фактически не потребляя его. Это означает, что вы можете «просмотреть» следующий символ на входе, и при следующем вызове любой потребляющей операции (перегруженный оператор >> или cin.read) прочитает этот символ и использует его.

Состояние eof() || cin.peek == ‘\n’ проверяет, достигнут ли конец потока входного файла, или если использование предоставило символ новой строки.

По поводу вашего другого вопроса: В случае неверного ввода (например, значение с плавающей запятой), вы не выходите из функции. Таким образом, вы продолжаете выполнение и, следовательно, печатаете значение. Просто выйдите из функции, используя return 1; ,

Другие решения

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

Он не может принять число с плавающей запятой, потому что cin >> NumChild будет читать int и остановится, как только он достигнет десятичной точки. Пример: введите «3.14». numChild будет содержать 3. «.14» остается в потоке, поэтому peek будет читать ‘.’ , а не конец файла или символ новой строки, и печатает сообщение об ошибке.

Затем он продолжается с остальной частью программы, потому что ничто не велело ей остановиться. Вам нужен цикл вокруг ввода, чтобы продолжить запрашивать больше ввода, пока не будет предоставлен действительный ввод.

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *