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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
#1

Switch - case vs While loop - C++

26.12.2011, 12:50. Просмотров 470. Ответов 3
Метки нет (Все метки)

Код нормально работает если используется 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
Посмотрите здесь:

Исправить ошибку: break statement not within loop or switch - C++
#include &lt;iostream&gt; using namespace std; int main() { int x; {cout &lt;&lt; &quot;Grade&quot;; cin &gt;&gt;x; ...

Switch-case - C++
Можно ли так писать? switch (simvol) { case (('(') or ('1') or ('2') or ('3') or ('4') or ('5') or ('6') or ('7') or ('8')...

Switch (Case) - C++
У меня есть программа, в ней по сути 2 подпрограммы, как сделать что бы при включении программы было меню выбора какое задание выполнять ? ...

switch и case - C++
Пишет, что switch не содержит case, но судя по коду - это не так... как же заставить его видеть этот case? #include &lt;iostream&gt; ...

Проблема со switch/case - C++
есть функция мэйн: int _tmain(int argc, _TCHAR* argv) { printf(&quot;1- default\n2-user\n&quot;); int t; scanf(&quot;%i&quot;, &amp;t); switch(t) ...

switch case 1 ИЛИ 2 - C++
делаю разбор вводимых команд, некоторые обрабатываются похоже, команды однобуквенные, разбираю кейсом, но вот как сделать чтобы 1 блок...

Switch case калькулятор - C++
добрый вечер всем,в калькуляторе нужно найти процент вот мой код,где ошибка? #include &lt;iostream&gt; using namespace std; int...

Оператор switch case - C++
Вопрос состоит в следующем: почему после case ставится одинарное двоеточие вместо обычных фигурных скобок, и где еще в C++ используется...

Case switch и функции - C++
Имеется задание : 1. Сформировать динамический одномерный массив, заполнить его случайными числами и вывести на печать. 2. Выполнить...

Оператор Switch,Case - C++
Парни можете ли вы объяснить все функции оператора Switch и Case. Буду очень признателен :)

switch... case и #include - C++
как добавить source код в case как это делается правольно #include &quot;stdafx.h&quot; #include &quot;conio.h&quot; #include &quot;stdio.h&quot; ...

Оператор case switch - C++
можно ли в Си, ввести оператор выбора так, чтобы проверялось не точное совпадение, а проверялось входит ли переменная в заданный интервал ?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
KATbIK
86 / 81 / 10
Регистрация: 02.08.2011
Сообщений: 335
26.12.2011, 12:58     Switch - case vs While loop #2
break; - убери
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
62 / 62 / 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
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru