2013-12-15 3 views
0

следующая программа должна рассчитывать количество раз, когда пользователь вводит целое число. пример: пользовательские входы 42 42 10 10. программа должна выйти: 42 происходит 2 раза, 10 - 2 раза.Неверный выход. C++ primer 1.4.4

проблема: код не выдаст последний результат для номера 10, пока вы не введете другой номер. Я вставил код ниже. этот код исходит из C++ primer. 1.4.4

#include <iostream> 
int main() 
{ 
    // currVal is the number we're counting; we'll read new values into val 
    int currVal = 0, val = 0; 

    // read first number and ensure that we have data to process 
    if (std::cin >> currVal) 
    { 
     int cnt = 1; // store the count for the current value we're processing 

     while (std::cin >> val) 
     { // read the remaining numbers 

      if (val == currVal) // if the values are the same 
       ++cnt;   // add 1 to cnt 
      else 
      { // otherwise, print the count for the previous value 
       std::cout << currVal << " occurs " << cnt << " times" << std::endl; 
       currVal = val; // remember the new value 
       cnt = 1;   // reset the counter 
      } 

     } // while loop ends here 

     // remember to print the count for the last value in the file 
     std::cout << currVal << " occurs " << cnt << " times" << std::endl; 
    } // outermost if statement ends here 

    return 0; 
} 
+1

Используя код как есть, вам нужно ввести нечисловую строку, а также эти цифры, и вы получите счет, не вводя новый номер. – splrs

+0

@splrs, я очень новичок в программировании. вы могли бы привести пример того, что такое «нечисловая строка»? или пример кода, необходимого для исправления проблемы вывода? – Matt

+0

Попробуйте ввести 10 10 42 42 _z_. Это даст вам правильные счета и не запустит другой, то есть программа закончит. – splrs

ответ

2

Ваша программа написана правильно для серии числовых входов, разделенных пробелами.

Вам необходимо предоставить указание конца файла программе, чтобы он завершил цикл while и распечатал счет для окончательных данных. В Windows вы можете сделать это, введя [Ctrl] - [Z] в качестве первого символа новой строки. В Linux, UNIX и Mac OS X [Ctrl] - [D] выполняет аналогичную задачу.

В качестве альтернативы вы можете поместить свой набор значений в текстовый файл и использовать перенаправление для подачи вашей программы. Предположим, например, что вы поместили свои данные в файл с именем data.txt в тот же каталог, что и ваш исполняемый файл. В окне терминала, вы можете запустить программу следующим образом:

myprogram < data.txt 

Как отметили некоторые другие, не-цифровой ввод также будет работать на месте конца файла. Например, вы можете ввести 42 42 10 10 fred, и он будет выводить то, что вы ожидаете. Тем не менее это не является целью программы. Например, если вы вводите 42 42 10 10 fred 37, программа останавливается на fred и не увидит 37.

+0

Это отличный ответ, и его следует принять. Конечно, этот раздел книги выглядит ужасно. – neuronet

Смежные вопросы