Форум программистов, компьютерный форум CyberForum.ru

Switch - case vs While loop - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Сформировть массив по правилу http://www.cyberforum.ru/cpp-beginners/thread417781.html
из элементов массива a,заполненного целыми числами,сформировть массив b того же размера по правилу:четные элементы массива a удвоить, нечетные оставить без измененний!
C++ Работа с клавиатурой. Итак, понадобилось поработать с клавой. Прочитал про keybd_event и иже с ними. Но вопрос-можно ли отключить клавиатуру? То есть, чтобы при нажатии клавиш ничего не происходило? Выдернуть шнур не предлагать) http://www.cyberforum.ru/cpp-beginners/thread417779.html
задача на Массив C++
Дан масив Скопировать все его элементы в другой массив такого же размера в обратном порядке расположения элементов
C++ [C++] Указатели весчь ?
Хочу узнать + и - указателей и узнать у народа пользуетесь ли вы ими или нет
C++ Обмен значений между двумя вещественными переменными. http://www.cyberforum.ru/cpp-beginners/thread417763.html
Помогите пожалуйста, решить задачи =))) Разработайте процедуру, которая получает через параметры две вещественные переменные х, у и обменивает переменные их значениями. Например, до вызова процедуры переменные имеют значения: х=5; у=8. После вызова процедуры переменные имеют значения: х=8; у=5. Запрещено создавать темы с множеством вопросов во всех разделах, кроме разделов платных услуг....
C++ Написать программу нахождения суммы чисел по правилу (n-нечетное) a^1 + a^3 + a^5 + ... + a^n подробнее

Показать сообщение отдельно
Leeto
 Аватар для Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
26.12.2011, 12:50     Switch - case vs While loop
Код нормально работает если используется While loop и do - while, но криво работает если switch-case

Коротко о коде: Надо подсчитать кол - во букв, слов и строк. Ввод текста заканчивается при вводе ^C (EOF). При switch case version почему то ввод текста заканчивается при нажатии enter при этом ничего нормально не считается.

Как поправить код?

Код ниже

Switch case version
Код
// function example
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
using namespace std;
char ch;

int main ()
{
  
  cout <<"enter your text: " ;
  cin >> ch; 


    int numChars = 0; 
	int numLines = 0;
	int numWords = 0;

	switch ((ch=getchar())!= EOF)
    {
	/*numChars++;	*/
		
	case  ' '||'\t' ||'\n' : numWords++; break;
	  
	case  '\n' :			 numLines++; break;

	default  :				 numChars++; break;
			 
    }

	

	numLines += 1; // for some reason it needs to add one and the results are correct

 cout << "CharCounter results: " << numChars;
 cout << endl;

 cout <<"WordsCounter results: " << numWords;
 cout << endl;

 cout <<"LinesCounter results: " << numLines;
 cout << endl;

  system ("pause");
  return 0;
}

while loop version

Код
// function example
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
using namespace std;
char ch;

int main ()
{
  
  cout <<"enter your text: " ;
  cin >> ch; 


    int numChars = 0; 
	int numLines = 0;
	int numWords=0;
	char  Wch = ch == ' ' || ch == '\t' ||ch == '\n';

	while ((ch=getchar())!= EOF)
    {
	/*numChars++;	*/
		
     if (ch == ' '  || ch == '\t' ||ch == '\n'  )
		
		 numWords++;// increase the count of characters by one if ch is NOT '\n' AND NOT a blank space
	  
	 else 
			 {
	   numChars++;
			 }

	 if(ch == '\n')
			 {
	   numLines++; // increase the count of lines by one if ch IS '\n'

			 }
    }
	numLines += 1; // for some reason it needs to add one and the results are correct

 cout << "CharCounter results: " << numChars;
 cout << endl;

 cout <<"WordsCounter results: " << numWords;
 cout << endl;

 cout <<"LinesCounter results: " << numLines;
 cout << endl;

  system ("pause");
  return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 22:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru