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

Помогите поправить код. - C++

Войти
Регистрация
Восстановить пароль
 
Leeto
 Аватар для Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
25.12.2011, 20:35     Помогите поправить код. #1
Условие:
Напишите С- программу, которая запрашивает текст с клавиатуры на input. На output выдает количество символов, количество слов, количество строк которое было введено. Чтение с клавиатуры осуществить с помощью функции getchar(). Чтение с клавиатуры должно быть остановлено при помощи ввода shutdown-code ^D (CTRL + D). ^D имеет ASCII-значение 4. Используйте while loop.

Существует несколько проблем:

1. По отдельности у меня эти три функции работают вроде как нормально. Вместе (как в коде) ниже. Что то они не очень работают. Программа компилируется, но прежде чем вывести
"WordsCounter results: " и
"StringsCounter results: "
выдает какое то замысловатое число с буквенной частью.
Как это поправить ?

2. Не знаю как ввести CTRL + D. Поэтому ввел пока табуляцию, но ее приходится вводить три раза, чтобы прога выдала результат.
Как ввести корректно CTRL + D?

3. Есть еще алгоритмическая ошибка.
Почему то подсчет слов введется только в пределах последней строки.
А надо чтобы подсчет ввелся со всех строк.
Как это реализовать ?

Пожалуйста, помогите.

Код
#include <iostream>
#include <string>
#include <stdio.h>
#include <conio.h>
#define IN 1
#define OUT 0
using namespace std;
 
int CharsCounter (string str)
{
        int Sumlength = 0;
        int c=0;
        while ((c=getchar())!= '\t')
    {
        int length = str.length();
        Sumlength = Sumlength+length;
        }
        return Sumlength;
}
 
 
int WordsCounter (string str)
{
int c, counter,state;
state=OUT;
c=0;
counter=1;
while((c=getchar())!= '\t')
 
        {
        if(c==' ')
        state=OUT;
                if(state==OUT)
                {
                state=IN;
                ++counter;
                }
        }
return counter;
}
 
 
int StringsCounter(string str)
{
int c, counter,state;
state=OUT;
counter=1;
        while((c=getchar())!='\t')
        {
                if(c=='\n')
                {
        ++counter;
                }
        }
        return counter;
}
 
int main ()
{
  string str;
 
  cout <<"enter string: "  << endl; 
 
  getline(cin,str) ; 
  
 
 cout <<"CharsCounter results: " << CharsCounter (str) 
  << endl <<
 
 cout <<"WordsCounter results: " << WordsCounter (str) 
  << endl <<
 
 cout <<"StringsCounter results: " << StringsCounter (str)
  << endl;
 
 
  system ("pause");
  return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2011, 20:35     Помогите поправить код.
Посмотрите здесь:

Помогите упростить код? C++
перевод из одной системы счисления в другую( помогите поправить код) C++
Сортировка в лексографическом порядке(только чуть поправить код) C++
Поправить код C++
Поправить код для вращения C++
Необходимо поправить код C++
C++ Поправить немного код
Нужно поправить код C++
Поправить код программы C++
Поправить код программы C++
C++ Поправить код программы
Поправить код непростой программы C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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