cin.gcount() и его приложения

#c

#c

Вопрос:

Я написал следующий код

 #include< iostream>  
using namespace std;  
int main()  
{  
 char a[30];  
 cin.read(a,10);  
 cout<<(cin.gcount());  
  system("pause");  
  return 0;     
}  
  

результат был 10, как и ожидалось …. но затем я написал следующий код

 #include< iostream>    
using namespace std;   
int main()    
{    
 char a[30];    
 cin>>a;   
 cout<<(cin.gcount());    
  system("pause");    
  return 0;       
}   
  

Я ввел «привет», который был сохранен в …. на этот раз результат был 0 вместо 5 … если cin.gcount () возвращает количество байтов, прочитанных в последней операции ввода, почему такая разница

Ответ №1:

Возвращает количество символов, извлеченных при последнем неформатированном вводе 
операция, выполняемая над объектом.

Неформатированные операции ввода, которые изменяют значение, возвращаемое 
эта функция - это те, которые выполняются следующими функциями - членами: 
получать, getline, игнорировать, просматривать, читать, readsome, возвращать и отменять получение.
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Однако обратите внимание, что peek, putback и unget не извлекают символы. 
Таким образом, gcount всегда будет возвращать ноль после вызова любого из них.

Источник: http://www.cplusplus.com/reference/iostream/istream/gcount

std::cin это не неформатированный ввод.

Ответ №2:

Я полагаю, это потому, что gcount предназначен только для неформатированного чтения. >/» rel=»nofollow»>Оператор>> является форматированным средством чтения, read — нет.

Ответ №3:

На самом деле cin.gcount() работает только в том случае, если ему предшествует команда get() getline() или read() ….. так что это не сработает так, как вы пытаетесь …. для справки… http://www.cs.hmc.edu /~geoff/classes/hmc.cs070.200109/notes/io.html

Комментарии:

1. Остальные три команды, т.е. get() getline() read all, сохраняют входные данные в буфере, который gcount использует для получения количества входных символов…….