#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 использует для получения количества входных символов…….