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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2009, 11:56   #1
amdbodia
Пользователь
 
Аватар для amdbodia
 
Регистрация: 13.05.2009
Сообщений: 71
По умолчанию Как в C++ организовать ввод данных в одну строчку?

Имеется такой кусок кода:

int ed (int numb)
{
cout<<"\n\tID:"<<bd[numb].id<<"\tName: ";cin>>bd[numb].name;
cout<<"\tAdres: ";cin>>bd[numb].adres;
cout<<"\tTel: ";cin>>bd[numb].tel;
cout<<"\tBegin: ";cin>>bd[numb].beg;
cout<<"\tEnd: ";cin>>bd[numb].end;
return 0;
}

Проблема в том, что после ввода значения пользователь нажимает Enter, как следствие имеется переход на новую строчку. Что тут можно придумать? Хочу чтоб всё было в одной строке.
amdbodia вне форума Ответить с цитированием
Старый 13.05.2009, 12:28   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Например, можете читать посимвольно (с помощью getch() или getche()) и сами обрабатывать нажатие enter'а.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 15.05.2009, 19:14   #3
amdbodia
Пользователь
 
Аватар для amdbodia
 
Регистрация: 13.05.2009
Сообщений: 71
По умолчанию

Написал такой кусок кода. Работает, только не очень так как нужно ((
Помогите оптимизировать.

Код:
int get(char* buf, int Count)
	{
	char ch;
	for (int j = 0; j < Count; j++)
		{
		if ((ch = getch()) == '\r')
			break;
		cout << (buf[j] = ch);
		}
	return 0;
	}
И потом идёт вот такой вызов:

Код:
int ed (int numb)
	{
	char buf[10];
	cout<<"\nID: " << bd[numb].id;
	cout<<"\tName: "; get(buf, 8) ; strcpy (bd[numb].name,buf);
	cout<<"\tAdres: "; get(buf, 8); strcpy (bd[numb].adres,buf);
	cout<<"\tTel: "; get(buf,6); bd[numb].tel=atoi(buf);
	cout<<"\tBegin: ";get(buf,5); bd[numb].beg=atof(buf);
	cout<<"\tEnd: ";get(buf,5); bd[numb].end=atof(buf);
	return 0;
	}
amdbodia вне форума Ответить с цитированием
Старый 15.05.2009, 19:55   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Вот так подкорректируйте:
Код:
int get(char* buf, int Count)
	{
	char ch;
	int j;
	for (j = 0; j < Count; j++)
		{
		if ((ch = getch()) == '\r')
			break;
		cout << (buf[j] = ch);
		}
		buf[j]=0;
	return 0;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 16.05.2009, 11:45   #5
amdbodia
Пользователь
 
Аватар для amdbodia
 
Регистрация: 13.05.2009
Сообщений: 71
По умолчанию

Если при написании слова пользоваться backspace, то он считается как символ. Я дописал ещё кусок кода чтоб он не считался как символ, но теперь удаляются лишние символы ((

Код:
int get(char* buf, int Count)
    {
    char ch;
    for (int j = 0; j < Count; j++)
        {
        ch = getch();
        if (ch == '\r')
            break;

        if (int(ch) == 8)
			{
			j=j-2;
			}

        cout << (buf[j] = ch);
        }
        
        buf[j]=0;
    return 0;
    }
amdbodia вне форума Ответить с цитированием
Старый 16.05.2009, 13:02   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

amdbodia Я не просто так вынес объявление j из цикла. Зачем вы его туда опять засунули?
У вас после цикла переменная j неопределена.
Код:
#include <iostream>
#include <conio.h>
using namespace std;

int get(char* buf, int Count)
{
char ch;
int j;
for (j = 0; j < Count; j++)
 {
  ch = getche();
  if (ch == '\r') break;

  if (int(ch) == 8) j=j-2;
  else buf[j] = ch;
 }
buf[j]=0;
return 0;
}

int main()
{
char buf[20];
get(buf,8);
cout<<endl<<buf<<endl;

getch();
return 0;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 16.05.2009, 16:38   #7
amdbodia
Пользователь
 
Аватар для amdbodia
 
Регистрация: 13.05.2009
Сообщений: 71
По умолчанию

Случайно написал его обратно туда, зачем он там нужен был я понял.
Так, как Вы написали, будет каждое слово с новой строки.
А тут вся проблема именно в том, что надо чтоб весь ввод был в одну строку. Если не писать "cout<<endl<<buf<<endl;", то новые буквы пишутся поверх старых, хотя да, они в одну строчку
Уже совсем не понимаю в чём причина..
amdbodia вне форума Ответить с цитированием
Старый 16.05.2009, 16:44   #8
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Так, как Вы написали, будет каждое слово с новой строки.
Да при чем же тут вывод? Я это для примера использования написал.
Цитата:
Уже совсем не понимаю в чём причина..
А я перестаю понимать, что же вам все-таки нужно от этой функции.

Ну вот вам еще пример. Может, такой вариант устроит.
Код:
#include <iostream>
#include <conio.h>
using namespace std;

int get(char* buf, int Count)
{
char ch;
int j;
for (j = 0; j < Count; j++)
 {
  ch = getch();
  if (ch=='\r') break;
  else cout<<ch;
  if (int(ch) == 8)
  {
   j=j-2;
   cout<<ch;
  }
 else buf[j] = ch;
 }
buf[j]=0;
return 0;
}

int main()
{
char buf[20],buf2[20];
get(buf,8);
get(buf2,8);
cout<<endl;
cout<<buf<<buf2;

getch();
return 0;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 16.05.2009, 16:56   #9
amdbodia
Пользователь
 
Аватар для amdbodia
 
Регистрация: 13.05.2009
Сообщений: 71
По умолчанию

Спасибо огромное за помощь и терпение. Последний фрагмент кода - не совсем то что мне нужно, но натолкнул меня на мысль.
Мне нужно было сделать так, чтоб ввод был в одну строку, пример:
Name: name1 Adres: adres1 Tel:123456 Begin: 14.33 End 12.33
И так далее.
Вот такого никак не получается добиться, при вводе либо налазит один кусок текста на другой, либо, при нажатии backspace, удаляется больше букв чем надо и т.д.
amdbodia вне форума Ответить с цитированием
Старый 16.05.2009, 17:03   #10
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Ну вот так в главной функции напишите:
Код:
char buf[20],buf2[20],buf3[20];
cout<<"Name: ";
get(buf,8);
cout<<"  Adres: ";
get(buf2,8);
cout<<"  Tel: ";
get(buf3,7);
cout<<endl;
cout<<buf<<endl<<buf2<<endl<<buf3<<endl;
Получится:
Код:
Name: name1  Adres: adres1  Tel: 123456
name1
adres1
123456
Разве не то?
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Экспорт данных из закрытой книги как это организовать? Дмитрий Фукс Microsoft Office Excel 11 06.04.2009 23:42
Ввод текста и ссылки в одну ячейку Апчхи Microsoft Office Excel 5 03.02.2009 10:44
Как лучше организовать базу данных типо как в ICQ Руслантус БД в Delphi 3 09.08.2008 23:57
как организовать отклик на событие при импорте-экспорте данных Artmi Microsoft Office Excel 8 03.06.2008 23:31
Организовать ввод данных с файла созданного в первом задании и вывод их терминал. Saniok Помощь студентам 2 25.10.2007 22:25