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

Switch - case vs While loop - C++

Восстановить пароль Регистрация
 
Leeto
 Аватар для Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
26.12.2011, 12:50     Switch - case vs While loop #1
Код нормально работает если используется 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2011, 12:50     Switch - case vs While loop
Посмотрите здесь:

C++ switch case
C++ Switch - case
C++ switch i case
case-switch C++
C++ switch-case, как писать в самом case
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
KATbIK
 Аватар для KATbIK
86 / 81 / 10
Регистрация: 02.08.2011
Сообщений: 335
26.12.2011, 12:58     Switch - case vs While loop #2
break; - убери
Leeto
 Аватар для Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
26.12.2011, 13:14  [ТС]     Switch - case vs While loop #3
Цитата Сообщение от KATbIK Посмотреть сообщение
break; - убери
не что то так не работает.

Код
#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 chW = ' '||'\t' ||'\n';


		switch (ch=getchar()!= 4)
    {
		
	case  ' ' : numWords++; 

	case '\t' : numWords++; 

	case '\n' : numWords++; numLines++; 

	default  :	numChars++; 
			 
    }

	

	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;
}
Но я вот так сделал вроде нормально. Мож как то проще можно ?

Код
#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 chW = ' '||'\t' ||'\n';
	while ((ch=getchar())!= 4)
		switch (ch)
    {
		
	case  ' ' : numWords++; break;

	case '\t' : numWords++; break;

	case '\n' : numWords++; 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;
}
Заранее спасибо !
darkknight2008
 Аватар для darkknight2008
61 / 61 / 6
Регистрация: 16.10.2011
Сообщений: 200
26.12.2011, 13:25     Switch - case vs While loop #4
Ты походу вообще не понимаешь работу switch-case. Он не может тебе заменить цикл, считай он заменяет ифы.
Было
while(...)
{
if(...)
...
else if (...)
...
else if (...)
..
}
Стало

while(...)
{
switch(...)
{
case ...:
...
break;
case ...:
...
break;
}
}

Добавлено через 3 минуты
Так будет чутка проще.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
switch (ch)
{
case '\n' : 
  numLines++;  
case  ' ' :
case '\t' : 
  numWords++; 
  break;
default  :      
  numChars++; 
  break;
                         
}
Добавлено через 1 минуту
Цитата Сообщение от Leeto Посмотреть сообщение
char chW = ' '||'\t' ||'\n';
Это вообще бредовая строчка.

Добавлено через 1 минуту
Еще, если ты введешь два пробела подряд, то программа посчитает это за 2 слова.
Yandex
Объявления
26.12.2011, 13:25     Switch - case vs While loop
Ответ Создать тему
Опции темы

Текущее время: 11:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru