2017-02-18 3 views
-1

Привет, ребята У меня есть следующий код, я не понимаю, почему в функции «strcount» последняя строка не отображает всю строку еще раз? Спасибо заранее!После подсчета символов счетчик застрял?

#include <iostream> 
const int ArSize = 10; 
void strcount(const char * str); 

int main() 
{ 
    using namespace std; 
    char input[ArSize]; 
    char next; 

    cout << "Enter a line:\n"; 
    cin.get(input, ArSize); 
    while(cin) 
    { 
     cin.get(next); 
     while(next != '\n') 
      cin.get(next); 
     strcount(input); 
     cout << "Enter next line (empty line to quit):\n"; 
     cin.get(input, ArSize); 
    } 
    void strcount(const char * str) 
    { 
     using namespace std; 
     static int total = 0; 
     int count = 0; 

     cout << "\"" << str <<"\" contains "; 
     while(*str++) 
      count++; 
     total += count; 
     cout << count << " characters\n"; 
     cout << total << " characters total\n" << endl; 
     cout << str << endl; 
    } 
+1

Правильный инструмент для решения таких проблем - ваш отладчик. Перед тем, как просить о переполнении стека, вы должны пропустить свой код по очереди *. Для получения дополнительной информации, пожалуйста, прочтите [Как отлаживать небольшие программы (Эрик Липперт)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Как минимум, вы должны \ [изменить] ваш вопрос, чтобы включить пример [Минимальный, полный и проверенный] (http://stackoverflow.com/help/mcve), который воспроизводит вашу проблему, а также замечания, сделанные вами в отладчик. –

+0

Почему вы ожидаете 'cout << str' для печати исходной строки? Вы понимаете, что вы изменяете указатель 'str' в цикле' while', правильно? –

+0

Я рекомендую использовать 'std :: string' и' std :: getline' для чтения текста от пользователя. Гораздо проще, чем беспокоиться о переполнении массива или отсутствии нулевого символа завершения. –

ответ

2

В функции strcount

while(*str++) 

str шагом, пока не будет достигнут конец строки.

Затем пытается вывести

cout << str << endl; 

не покажет ничего, как и str теперь указывает на конец строки.

+0

Благодарю всех вас за помощь, теперь я понимаю. – AndyE