#c #string #integer #extract #fstream
#c #строка #целое число #извлечение #fstream
Вопрос:
#include <iostream>
#include <fstream>
int main()
{
std::ifstream file("input.txt");
char currentChar;
int charCount = 0;
while (file >> currentChar)
{
charCount ;
if (currentChar == 'a')
{
std::cout << charCount;
}
}
в приведенном выше примере количество символов, которое печатается, очень велико. Если я перемещаю charcount в оператор if и превращаю входные данные в повторения символа ‘a’, он подсчитывается правильно (или будет правильно подсчитывать количество a). Является ли «file>> currentChar» причиной столь значительного увеличения числа символов? И если да, то что он делает? Почему?
Ответ №1:
Это не «массово большой». Вы просто выводите текущее количество каждый раз, когда сталкиваетесь с буквой a
, и поскольку вы не включаете никаких пробелов или новых строк, тогда каждое число будет объединено вместе и будет выглядеть как огромное число.
Попробуйте это:
std::cout << charCount << std::endl;
И подумайте о том, чтобы сделать это только один раз после цикла. Если только по какой-то причине вы не хотите показывать все промежуточные значения.
Комментарии:
1. На самом деле вы правы — в моем коде, который я переписал здесь, в stackoverflow, я инициализировал charCount равным нулю. В моем реальном коде он не инициализирован. Я увеличивал неинициализированную переменную, поэтому я получал значения севернее 1 миллиона, даже несмотря на то, что длина входного файла составляла всего несколько сотен символов и в нем была только одна буква «а». Я надеялся распечатать его положение в файле. Я ценю разъяснение, что число не должно быть таким высоким, хотя!
2. Я подозревал, что это тоже могло иметь место, но я должен учитывать сомнения, когда код написан в вопросе. Очень важно, чтобы вы не вводили повторно свою программу, задавая вопросы. Вы должны скопировать / вставить. Вы могли бы дополнительно помочь вашему вопросу, показав фактический результат и указав, сколько
a
символов было в файле. Это помогло бы выявить проблему, которая затем сделала бы очевидным, что код вашего вопроса не соответствует действительности.