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

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.91
dyosick
61 / 61 / 6
Регистрация: 25.08.2008
Сообщений: 178
#1

Способы ввода данных - C++

14.07.2009, 00:46. Просмотров 2824. Ответов 10
Метки нет (Все метки)

Заранее всем, кто откликнулся , спасибо!
Такая проблемка: как ещё дать понять моей программке (пусть даже самой простой ) , что я ввёл ,к примеру, число , кроме как нажатием Enter. Просто после его нажатия курсор переходит на новую строку, а мне нужно , чтобы курсор оставался в той же строке и печатал , сделав парочку пробелов , нужную мне информацию.
К примеру , ввожу число , программа считает его квадрат и выводит на экран:
3 9
4 16
а не
3
9
4
16
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2009, 00:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Способы ввода данных (C++):

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

Удаление файлов: типы и способы - C++
Здравствуйте. Подозреваю что существует несколько методов удаления файлов. Удаление без изменения области памяти в которой хранилось что...

Какие еще есть способы создания визуальных приложений кроме WinApi? - C++
Здравствуйте, я так понимаю под Windows оконные приложения создаются на WinAPI. Хотел спросить есть ли другие инструменты для создания окон...

Способы заполнения через C++Builder Таблиц Базы данных - C++ Builder
Пожалуйста подскажите как через C++Builder автоматическом режиме заполнять базу данных?

Составить программу для ввода данных о студентах, проживающих в общежитии, и записи этих данных в файл - C++ Builder
Работа с комбинированными данными: Необходимо составить программу для ввода данных о студентах, проживающих в общежитии, и записи этих...

Составить макет данных и написать программу для ввода и реализации печати введенных данных для платёжной ведомости - C++ Builder
1. Составить макет данных и написать программу для ввода и реализации печати введенных данных для платёжной ведомости -...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Gravity
562 / 556 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
14.07.2009, 00:49 #2
В винде getch() считывает символ без нажатия <enter>.
alexcoder
1463 / 677 / 89
Регистрация: 03.06.2009
Сообщений: 3,558
Завершенные тесты: 1
14.07.2009, 10:03 #3
Если программа компилируется под ДОС, то можно использовать функцию 0Ah прерывания INT 21h в виде ассемблерной вставки, она не переводит строку и не изменяет позицию курсора после ввода.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main()
{
char buff[10];
int rez;
buff[0]=8;
asm{
mov ah,0xa
lea dx, buff
int 0x21
}
buff[2+buff[1]]=0;
rez=atoi(&buff[2]);
 
printf("%d %d\r\n",rez,rez*rez);
return 0;
}
YurA_280784
Заблокирован
16.07.2009, 14:35 #4
alexcoder, ты свой пример хоть сам запускал???
dyosick , вот в точности то что ты просил - ввод элементов массива данных через пробел...Результат последовательного ввода на скриншотах
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <windows.h>
#include <stdio.h>
 
void CleanScreen(COORD POS);
COORD GetCURSOR();
int GetNumDigits(int num);
int * massiv = (int *)malloc(sizeof(int));
 
void main()
{
    COORD POS;
    POS.X = 0;POS.Y = 0;
    CleanScreen(POS);
    printf("Vvedite chislo elementov :\r\n");
    int num;scanf("%d",&num);
    massiv = (int *)realloc((void *)massiv,num*sizeof(int));
    printf("Dalee elementi bydyt jtobrazhat'sya cherez probel\r\n");
    POS = GetCURSOR();
    CleanScreen(POS);
    for(int i = 0,nDIGITS; i < num; i++)
    {
        scanf("%d",&massiv[i]);
        if(massiv[i] != 0)
            nDIGITS = GetNumDigits(massiv[i]);
        else
            nDIGITS = 1;
        POS.X += nDIGITS + 1;
        CleanScreen(POS);
    }
    massiv = (int *)realloc((void *)massiv,sizeof(int));
    printf("\r\n1 - Novi vvod\r\n");
    scanf("%d",&num);
    if(num == 1)
        main();
}
 
void CleanScreen(COORD POS)
{
    HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_SCREEN_BUFFER_INFO SCRN_INFO;
    GetConsoleScreenBufferInfo(hOutput, &SCRN_INFO);
    
    FillConsoleOutputCharacter(hOutput, ' ',
    SCRN_INFO.dwSize.X*SCRN_INFO.dwSize.Y, POS, NULL);
    FillConsoleOutputAttribute(hOutput, 
        FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE /*цвет*/, 
        SCRN_INFO.dwSize.X*SCRN_INFO.dwSize.Y,POS,NULL);
 
    SetConsoleTextAttribute(hOutput,FOREGROUND_GREEN|FOREGROUND_INTENSITY);
    SetConsoleCursorPosition(hOutput,POS);
    //printf("CONSOLE HANDLE 0x%p",hOutput);
}
 
COORD GetCURSOR()
{
    HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_SCREEN_BUFFER_INFO SCRN_INFO;
    GetConsoleScreenBufferInfo(hOutput, &SCRN_INFO);
    return SCRN_INFO.dwCursorPosition;
}
 
int GetNumDigits(int num)
{
    int RetVal = 0;
    while(0 < num)
    {
        num /= 10;
        RetVal++;
    }
    return RetVal;
}
Миниатюры
Способы ввода данных   Способы ввода данных   Способы ввода данных  

Atrus
12 / 12 / 0
Регистрация: 08.07.2009
Сообщений: 45
16.07.2009, 14:39 #5
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
using namespace std;
 
int main()
{
short a,b
cin>>a>>b;
cout<<a<<" "<<b<<endl;
return 0;
}
хоть ентером хоть пробелами хоть табуляцией разграничивай.
YurA_280784
Заблокирован
16.07.2009, 15:57 #6
Atrus , а если мы вводим массив из 1024 элементов, тоже 1024 операторов ввода напишешь?
За случай динамического массива вообще твой пример никак не покатит..!
Atrus
12 / 12 / 0
Регистрация: 08.07.2009
Сообщений: 45
16.07.2009, 16:25 #7
Нет. Специально для этого придумали for циклы.
C++
1
2
3
4
5
6
7
8
9
10
11
short a[20];
    for (short i=0;i<5;++i)
    {
        cin>>a[i];
    }
    
    for (short i=0;i<5;++i)
    {
        cout<<a[i]<<" ";
    }
    cout<<endl;
Да и вообще если больше 5и значений вводишь то лучше из файла писать.
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
16.07.2009, 16:33 #8
Цитата Сообщение от Atrus Посмотреть сообщение
Да и вообще если больше 5и значений вводишь то лучше из файла писать.
вы не знали, что программе можно "скормить" текстовый файл?
Код
file.txt: 10 20 30
Код
program.exe < file.txt
C++
1
2
3
int value = 0;
for (int i = 0; i < 5; i++)
  std::cin >> value, std::cout << value;
Atrus
12 / 12 / 0
Регистрация: 08.07.2009
Сообщений: 45
16.07.2009, 16:41 #9
Знал. И упомянул об этом. И вы меня очень хорошо процитировали.
Вот только кажется тема была немного о другом. Хотя конечно вы молодец, что знаете такие замечательные вещи. Давайте не будем оффтопить больше.
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
16.07.2009, 16:55 #10
Цитата Сообщение от Atrus Посмотреть сообщение
Вот только кажется тема была немного о другом
это вам только кажется. перечитайте ещё раз название темы.
Способы ввода данных
разве я не предложил ещё один из способов ввода данных?
interferent
6 / 5 / 0
Регистрация: 15.07.2009
Сообщений: 7
21.07.2009, 07:08 #11
Если под win, то наверно можно сделать с помощью GetConsoleMode , SetConsoleMode, флаг ENABLE_ECHO_INPUT (и другие) :-)

Добавлено через 18 минут 35 секунд
В UNIX смотреть tcgetattr, tcsetattr... >:-)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.07.2009, 07:08
Привет! Вот еще темы с ответами:

Ограничение ввода данных в stringgrid - C++ Builder
Здравствуйте! Срочно нужна помощь. if ((Key &gt;= '0') &amp;&amp; (Key &lt;= '9') || Key == VK_BACK) {} else if ( (Key == ',') || (Key == '-'))...

Как делать маску ввода данных? - C++ Builder
как сделать маску в StringGride (например в четвертом столбце, и на все последующие строки). маска отвечает за ввод дня, месяца и...

Ошибка ввода данных в StringGrid ( Конвертация) - C++ Builder
Здравствуйте! Нужна ваша помощь, есть программа реализующая нахождение максимального отрицательного элемента в четных столбцах матрицы 4Х6....

Способы ввода и вывода массива - Delphi
Уважаемые Форумчане, прошу вашей помощи покажите способы ввода и ввода массива


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
21.07.2009, 07:08
Ответ Создать тему
Опции темы

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