Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2008, 16:09   #1
Nanny
 
Регистрация: 20.04.2008
Сообщений: 3
По умолчанию Символьный массив

Вот задание: слова текста из малых латинских букв записаны не менее чем через один пробел; текст оканчивается точкой. Без использования конструкции string написать программу ввода такого текста с клавиатуры.
Код:
Код:
#include <iostream>
#include <stdio.h>
using namespace std;
void main() 
{
	int const n1=10;
	char m[100];
	
metka: ;
	int k;
	for (int i1=0; i1<1;i1++)
	{
		cout << "vvedite pervii simvol";
		cin >>m [i1];
	}
	k=1;
	if (m[0]!='.')
	{
		int i;
		char ch;
		i=1;
		do
		{
		cout << "vvedite simvol";
	    cin >> m[i];
		ch=m[i];
		i=i+1;
		k=k+1;
		cout << "k="<<k; 
		} while(ch!='.');
		cout << "vivod";
		
	}
	else
	{
		cout << "try again";
		goto metka;
	}
	int j;
	for (j=0;j<k; j++ )
		cout<< "\n\nm["<<j<<"]"<<"  "<<m[j];
	cout << endl;
}
Программа запускается через win32 consol application. Но вот пробелы считывать не желает(( Подскажите плз как сделать так, чтоб считывались пробелы, вводимые с клавиатуры.
заранее спасибо

Последний раз редактировалось Nanny; 20.04.2008 в 16:13.
Nanny вне форума Ответить с цитированием
Старый 20.04.2008, 21:23   #2
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Я сталкивался с Вашей проблемой. Дело в том, что cin, воспринимает пробел, как символ окончания строки ("\n"). Ваша задача - использовать такой оператор ввода, который воспринимает пробел, как пробел.
Я думаю Вам следует использовать не обычный cin, а cin.getline(<имя строки типа char *>, <количество вводимых символов>). Для этого оператора пробел не является окончанием строки.
MaTBeu вне форума Ответить с цитированием
Старый 20.04.2008, 21:31   #3
Nanny
 
Регистрация: 20.04.2008
Сообщений: 3
По умолчанию

К сожалению, использовать cin.getline(<имя строки типа char *>, <количество вводимых символов>) я не могу, т.к. тогда вообще закрывается вход в цикл. Нашла решение через scanf("%c", &m[i]); в 26 строке, но есть одно огромное НО!: по неизвестной для меня причине при такой замене цикл проходит только по нечетным числам, т.е. заполняются 1,3,5 и т.д. элементы массива Не могли бы объяснить причину? и как исправить?
Nanny вне форума Ответить с цитированием
Старый 20.04.2008, 21:59   #4
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Стоп. У Вас задание:
Цитата:
слова текста из малых латинских букв записаны не менее чем через один пробел; текст оканчивается точкой. Без использования конструкции string написать программу ввода такого текста с клавиатуры.
Зачем тогда вам посимвольно считывать строку с клавиатуры? Не проще ли будет сделать ввод через cin.getline(<имя строки типа char *>, <количество вводимых символов>), а в конце проверить посимвольно строку на наличие элемента окончания ("."). Если точка встречается раньше конца строки, то запоминаем эту позицию, и выводим в цикле до этой позиции. Вот и все.

ПыСы: Либо Вы сильно усложнили себе задание, либо я чего-то недопонимаю. Изобретать велосипед не нужно, для этого есть стандартные функции.
MaTBeu вне форума Ответить с цитированием
Старый 20.04.2008, 22:17   #5
Nanny
 
Регистрация: 20.04.2008
Сообщений: 3
По умолчанию

мои познания в с++ крайне малы, поэтому решила пойти путем паскаля.... Если использовать ту функцию, что предложили Вы, то ли я что-то недопонимаю, то ли еще что-то...но вот так я поняла Ваше предложение:
Код:
#include <stdio.h>
#include <iostream>
using namespace std;
void main ()
{
	char* z;
	int i,k;
	int const n=100;
	cout << "vvod";
	cin.getline(*z, 100);
	for (i=0; i<100;i++)
		if (*z='.') 
		{
			k=i; 
			break;
		}
}
но работать не желает
в задании есть еще вторая часть: "напечатать, удалив все повторные вхождения слов"-эт можно сказать вторая причина, почему я через массив пошла

Последний раз редактировалось Nanny; 20.04.2008 в 22:22.
Nanny вне форума Ответить с цитированием
Старый 20.04.2008, 22:44   #6
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Эх, у Вас в коде куча ошибок
Вот посмотрите мою программу
Код:
#include <iostream>
#include <stdio>

using namespace std;

int main(int argc, char* argv[])
{
        char *z;           //обьявляем УКАЗАТЕЛЬ
        int k;
        int n=100;

        z=new char[100];    //вот в чем ваша ошибка, вы память под строку не выделяете

        cout<<"Entering: \n";
        cin.getline(z, 100);

        for(int i=0; i<100; i++)
        {
                if(z[i]=='.')
                        k=i;
        }

        cout<<"Your string (maked): \n";   //выводим обработанную строку
        for(int i=0; i<=k; i++)
        {
                cout<<z[i];
        }
        cin.get();
        return 0;
}
Ничего. Такие ошибки встречаются у всех новичков Пишите в личку, решим вашу проблему
MaTBeu вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
массив! Jodu Помощь студентам 2 11.01.2008 20:59
Задача на Паскале, тема символьный тип NeKkiTos Фриланс 1 10.12.2007 12:20
символьный и строковый тип. ribka Помощь студентам 4 02.12.2007 13:25
Упорядочить символьный список по убыванию элементов - язык Пролог yulia Помощь студентам 4 07.10.2007 18:53
Символьный массив и double dima Общие вопросы C/C++ 5 15.12.2006 03:52