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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2009, 00:38   #1
Junk1E
Пользователь
 
Регистрация: 09.12.2009
Сообщений: 28
По умолчанию Посимвольный ввод строки

В общем надо сделать чаровый масив, размер типа текст, который неизвестен, по идее сделать бы ввод текста и при нажатии ентера прерывать цикл ввода, но чет затрудняюсь как это сделать клавишой энтр через while или for как это будет выглядеть я понимаю, я не прошу всего кода ))) мне просто бы обозначение ентера узнать )
Junk1E вне форума Ответить с цитированием
Старый 14.12.2009, 00:46   #2
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Вы не с той стороны смотрите на проблему. Стандартные функции ввода строк представляют возможность самому определять символ окончания ввода.
Например запись
Код:
cin.getline(str, 128, '\n');
это ввод строки в переменную str (тип char*). Ввод автоматически заканчивается если введено 127 символов (последний символ - нулевой) или во время ввода нажат Enter.
Это один из вариантов.
Второй вариант. В цикле while через функцию getch() или ей подобные получаете символы ввода и проверяете - если введенный символ равен '\n', то следует прервать ввод и выйти из цикла.
Выглядит это вот так
Код:
char current = 0;
int i = 0;
char str[256];
do
{
   current = getch();
   if(current != '\n' && current != '\t')
       str[i++] = current;
}
while(current != '\n');
str[i] = 0; //вставляем символ окончания строки
Выбирайте, какой вам больше подходит.
MaTBeu вне форума Ответить с цитированием
Старый 14.12.2009, 01:00   #3
Junk1E
Пользователь
 
Регистрация: 09.12.2009
Сообщений: 28
По умолчанию

Сорри, не очень понял, но идею ухватил, но чет походу не зато, глянте код плз, чего не хватает ? (((
Код:
#include <iostream>
using namespace std;

int main(){
    int x=2, k=0, n=0, n1=0, n2=0, k1=0, k2=0;
    char text[x];
    cout<<"Vvedite text"<<endl;
    for(int i=0;i<x;i++){
            cin>>text[i];
            if(text[i]=="/n")break;
            else x++;
            }
    for(int j=0;j<x;j++){
            if(text[j]=="{")n++;
            if(text[j]=="}")k++;
            }
    for(int j1=0;j1<x;j1++){
            if(text[j1]=="(")n1++;
            if(text[j1]==")")k1++;
            }
    for(int j2=0;j2<x;j2++){
            if(text[j2]=="[")n2++;
            if(text[j2]=="]")k2++;
            }
    if((n==k)&&(n1==k1)&&(n2==k2))cout<<"balans skobok sohranen"<<endl;
    if((n!=k)&&(n1==k1)&&(n2==k2))cout<<"tol'ko balans {} skobok ne sohranen"<<endl;
    if((n==k)&&(n1!=k1)&&(n2==k2))cout<<"tol'ko balans () skobok ne sohranen"<<endl;
    if((n==k)&&(n1==k1)&&(n2!=k2))cout<<"tol'ko balans [] skobok ne sohranen"<<endl;
    if((n==k)&&(n1!=k1)&&(n2!=k2))cout<<"tol'ko balans {} skobok  sohranen"<<endl;
    if((n!=k)&&(n1==k1)&&(n2!=k2))cout<<"tol'ko balans () skobok  sohranen"<<endl;
    if((n!=k)&&(n1!=k1)&&(n2==k2))cout<<"tol'ko balans [] skobok  sohranen"<<endl;
    if((n!=k)&&(n1!=k1)&&(n2!=k2))cout<<"balans vseh skobok ne sohranen"<<endl;
}
Junk1E вне форума Ответить с цитированием
Старый 14.12.2009, 01:05   #4
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Вот эта строка
Код:
 if(text[i]=="/n")break;
тут ошибка. В двойных кавычках записываются строки, а символы в одинарных. Поэтому это условие не сработает.
Сделайте вот так
Код:
 if(text[i]=='/n')break;
и все будет нормально. И в остальных условиях тоже поменяйте двойные кавычки на одинарные.

P.S. и еще. Вот эта запись
Код:
 for(int i=0;i<x;i++){
            cin>>text[i];
            if(text[i]=="/n")break;
            else x++; //здесь-----
            }
Она не увеличит ваш массив. Да и к тому же запись типа
Код:
int x = 2; char text[x];
не скомпилируется. Вам нужно выделить заведомо больший массив, чем вам нужно, а потом просто посчитать количество введенных символов и скопировать в новую строку нужного размера.
К примеру
Код:
int max_size = 1024;
char *text = new char[max_size];
//тут идет ввод строки
int real_size = strlen(text); //получаем реальное количество введенных символов
char *real_text = new char[real_size]; //выделяем нужное количество памяти
strcpy(real_text, text); //копируем введенную строку
real_text[real_size-1] = 0; //обозначаем конец
delete [] text; //освобождаем лишнюю память

Последний раз редактировалось MaTBeu; 14.12.2009 в 01:12.
MaTBeu вне форума Ответить с цитированием
Старый 14.12.2009, 01:13   #5
Junk1E
Пользователь
 
Регистрация: 09.12.2009
Сообщений: 28
По умолчанию

поравил, но условие не срабатывает почему то (((
Код:
    for(int i=0;i<1024;i++){
            cin>>text[i];
            if(text[i]=='/n')break;
            else N++;
            }
Junk1E вне форума Ответить с цитированием
Старый 14.12.2009, 01:15   #6
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Показывайте весь поправленый код.
Стойте. Я же вам показал, как символ ентера обозначается - \n, а не /n. Остальные спецсиволы идут с символом \ а не с /

Последний раз редактировалось MaTBeu; 14.12.2009 в 01:18.
MaTBeu вне форума Ответить с цитированием
Старый 14.12.2009, 01:20   #7
Junk1E
Пользователь
 
Регистрация: 09.12.2009
Сообщений: 28
По умолчанию

Не работает х_Х чет я ща явно туплю, но никак не вкурю где ... %))
Код:
#include <iostream>
using namespace std;

int main(){
    int N=0,k=0, n=0, n1=0, n2=0, k1=0, k2=0;
    char text[124],exit;
    cout<<"Vvedite text"<<endl;
    for(int i=0;i<1024;i++){
            cin>>text[i];
            if(text[i]=='\n')break;
            else N++;
            }
    for(int j=0;j<N;j++){
            if(text[j]=='{')n++;
            if(text[j]=='}')k++;
            }
    for(int j1=0;j1<N;j1++){
            if(text[j1]=='(')n1++;
            if(text[j1]==')')k1++;
            }
    for(int j2=0;j2<N;j2++){
            if(text[j2]=='[')n2++;
            if(text[j2]==']')k2++;
            }
    if((n==k)&&(n1==k1)&&(n2==k2))cout<<"balans skobok sohranen"<<endl;
    if((n!=k)&&(n1==k1)&&(n2==k2))cout<<"tol'ko balans {} skobok ne sohranen"<<endl;
    if((n==k)&&(n1!=k1)&&(n2==k2))cout<<"tol'ko balans () skobok ne sohranen"<<endl;
    if((n==k)&&(n1==k1)&&(n2!=k2))cout<<"tol'ko balans [] skobok ne sohranen"<<endl;
    if((n==k)&&(n1!=k1)&&(n2!=k2))cout<<"tol'ko balans {} skobok  sohranen"<<endl;
    if((n!=k)&&(n1==k1)&&(n2!=k2))cout<<"tol'ko balans () skobok  sohranen"<<endl;
    if((n!=k)&&(n1!=k1)&&(n2==k2))cout<<"tol'ko balans [] skobok  sohranen"<<endl;
    if((n!=k)&&(n1!=k1)&&(n2!=k2))cout<<"balans vseh skobok ne sohranen"<<endl;

cin>>exit;
}
и вопрос еще такой, а со стрингом нельзя работать как с массивом... я так, в надежде.. ))) к стрингу я как то лучше отношусь )

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

Поправил код.
Код:
#include <iostream>
#include <conio.h>
using namespace std;

int main(){
	int N=0,k=0, n=0, n1=0, n2=0, k1=0, k2=0;
	char text[1024], exit;
	cout<<"Vvedite text"<<endl;
	for(int i=0; i < 1024; i++)
	{
		text[i] = getch(); //использовать ТОЛЬКО getch()
		if(text[i] == 13)   //проверяем код символа 13 -> Enter
			break;
		else 
		{
			N++;
			putchar(text[i]);  //выводим символ на экран
		}
	}
	for(int j = 0; j < N; j++)
	{
		if(text[j]=='{')
			n++;
		if(text[j]=='}')
			k++;
	}
	for(int j1=0;j1<N;j1++)
	{
		if(text[j1]=='(')
			n1++;
		if(text[j1]==')')
			k1++;
	}
	for(int j2=0;j2<N;j2++)
	{
		if(text[j2]=='[')
			n2++;
		if(text[j2]==']')
			k2++;
	}
	if((n==k)&&(n1==k1)&&(n2==k2))cout<<"balans skobok sohranen"<<endl;
	if((n!=k)&&(n1==k1)&&(n2==k2))cout<<"tol'ko balans {} skobok ne sohranen"<<endl;
	if((n==k)&&(n1!=k1)&&(n2==k2))cout<<"tol'ko balans () skobok ne sohranen"<<endl;
	if((n==k)&&(n1==k1)&&(n2!=k2))cout<<"tol'ko balans [] skobok ne sohranen"<<endl;
	if((n==k)&&(n1!=k1)&&(n2!=k2))cout<<"tol'ko balans {} skobok  sohranen"<<endl;
	if((n!=k)&&(n1==k1)&&(n2!=k2))cout<<"tol'ko balans () skobok  sohranen"<<endl;
	if((n!=k)&&(n1!=k1)&&(n2==k2))cout<<"tol'ko balans [] skobok  sohranen"<<endl;
	if((n!=k)&&(n1!=k1)&&(n2!=k2))cout<<"balans vseh skobok ne sohranen"<<endl;

	cin>>exit;
}
MaTBeu вне форума Ответить с цитированием
Старый 14.12.2009, 01:49   #9
Junk1E
Пользователь
 
Регистрация: 09.12.2009
Сообщений: 28
По умолчанию

Спасибо большое, что повозились со мной )))
Junk1E вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как организовать ввод строки с пробелами? Adminx Общие вопросы C/C++ 11 20.11.2009 02:33
ввод строки! Татяна Паскаль, Turbo Pascal, PascalABC.NET 12 16.05.2009 17:53
Ввод строки с пробелами Сергей089 Помощь студентам 15 24.04.2009 23:01
КАК сделать ввод строки на русском языке vicdon Паскаль, Turbo Pascal, PascalABC.NET 4 05.11.2007 07:54
Ввод начальных данных из командной строки Bounefarte Помощь студентам 5 26.08.2007 12:49