С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

Switch - case vs While loop - C++

26.12.2011, 12:50. Просмотров 517. Ответов 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2011, 12:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Switch - case vs While loop (C++):

Оптимальная конструкция switch-case-while / while-switch-case - C++
Имеется конструкция типа: switch() { case 1: while() { ... }

Switch case внутри switch case - C++
Привет всем! Нужна помощь. Пишу калькулятор с консольным меню. Так вот, используется цикл while, внутри которого у меня switch...

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

Исправить ошибку: 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 подпрограммы, как сделать что бы при включении программы было меню выбора какое задание выполнять ? ...

3
KATbIK
86 / 81 / 10
Регистрация: 02.08.2011
Сообщений: 335
26.12.2011, 12:58 #2
break; - убери
1
Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
26.12.2011, 13:14  [ТС] #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;
}
Заранее спасибо !
0
darkknight2008
62 / 62 / 6
Регистрация: 16.10.2011
Сообщений: 200
26.12.2011, 13:25 #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 слова.
0
26.12.2011, 13:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.12.2011, 13:25
Привет! Вот еще темы с ответами:

case-switch - C++
Вот то задание что с case-switch надо сделать помогите знаю что задание дурное

Switch - case - C++
Обязательно с использованием классов Есть задача. Дан массив вещественных чисел. а) Ко всем отрицательным элементам прибавить элемент...

switch case - C++
как в блок-схеме изображается switch case?

Switch + case - C++
Суть задания: Задан шифр книги из библиотеки в виде шестизначного целого числа. Определить к какому подразделу ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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