Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
 Аватар для Riderik
28 / 28 / 4
Регистрация: 24.07.2011
Сообщений: 171

Несколько вопросов

24.07.2011, 14:50. Показов 2693. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Начал писать одну программу в VS 2008 C++ (консоль) и столкнулся в несколькими проблемами. В общем желательно нужно, чтобы программа при запуске открывалась в окне размерами больше стандартных 80x25. Функция window( int, int, int, int) не работает. Далее в программе будут выводиться длинный список, выходящий за границы по вертикали. Как сделать, чтобы при выводе этого списка консольное окно автоматически не прокручивалось вниз или чтобы в итоге видна была первая строка списка? И последний вопрос: как считать с текстового файла строку в массив символов (строка) до определенного символа (например например считать строку "Hello world!" в один массив до знака перехода на следующую строку)?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.07.2011, 14:50
Ответы с готовыми решениями:

Несколько вопросов
Делаю небольшую консольную игру для тренировки и есть несколько вопросов. char *lev; //char lev; //как передать правильно этот массив...

Несколько вопросов
Здравствуйте. Возникло несколько вопросов: 1. Когда нажимаешь на определённую клавишу происходит определённое действие (типа меню)...Я на...

Несколько вопросов по указателям.
Добрый день. Не получается до конца разобраться с указателями, потому есть несколько вопросов. Кому несложно, помогите, пожалуйста. 1....

24
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
24.07.2011, 15:06
Цитата Сообщение от Riderik Посмотреть сообщение
Добрый день. Начал писать одну программу в VS 2008 C++ (консоль) и столкнулся в несколькими проблемами. В общем желательно нужно, чтобы программа при запуске открывалась в окне размерами больше стандартных 80x25. Функция window( int, int, int, int) не работает. Далее в программе будут выводиться длинный список, выходящий за границы по вертикали. Как сделать, чтобы при выводе этого списка консольное окно автоматически не прокручивалось вниз или чтобы в итоге видна была первая строка списка? И последний вопрос: как считать с текстового файла строку в массив символов (строка) до определенного символа (например например считать строку "Hello world!" в один массив до знака перехода на следующую строку)?
1. Щелкни правой кнопкой мыши на заголовке консольного окна. В контекстном меню есть Свойства. Туда войдешь, там установишь. Не забудь сохранить для всех окон. И не забудь установить буфер - там в свойствах увидишь

2. Выводить порциями по несколько строк и ждать ответа пользователя. Если первую строку надо постоянно держать, то ее надо с каждой порцией выводить в начале.

3. Читай функцию getline() для строк. Там третий параметр - символ ограничитель. По умолчанию - как раз '\n'
1
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
24.07.2011, 15:09
Цитата Сообщение от Riderik Посмотреть сообщение
как считать с текстового файла строку в массив символов (строка) до определенного символа (например например считать строку "Hello world!" в один массив до знака перехода на следующую строку)?
C++
1
2
3
4
    ifstream f("file.txt");
    string s;
    getline(f,s);
    cout<<s;
Это правда будет чтение в обычную строку string, далее Вам надо будет перенести с неё данные.
1
 Аватар для Riderik
28 / 28 / 4
Регистрация: 24.07.2011
Сообщений: 171
24.07.2011, 15:16  [ТС]
Спасибо большое за помощь. Буду пробовать. Одно что не совсем понял насчет второго пункта:
2. Выводить порциями по несколько строк и ждать ответа пользователя. Если первую строку надо постоянно держать, то ее надо с каждой порцией выводить в начале.
Нужно чтобы, когда список вывелся полностью, юзер видел верхушку этого списка. Если это реально, не отказался бы от кода на примере массива из N строк.
0
 Аватар для OstapBender
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
24.07.2011, 15:22
Цитата Сообщение от Riderik Посмотреть сообщение
Нужно чтобы, когда список вывелся полностью, юзер видел верхушку этого списка.
C
1
2
3
    HANDLE hnd = ::GetStdHandle(STD_OUTPUT_HANDLE);
    COORD c = {0,0};
    ::SetConsoleCursorPosition(hnd,c);
2
 Аватар для Riderik
28 / 28 / 4
Регистрация: 24.07.2011
Сообщений: 171
24.07.2011, 15:32  [ТС]
Цитата Сообщение от OstapBender Посмотреть сообщение
C
1
2
3
    HANDLE hnd = ::GetStdHandle(STD_OUTPUT_HANDLE);
    COORD c = {0,0};
    ::SetConsoleCursorPosition(hnd,c);
Это в какой библиотеке ?
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
24.07.2011, 15:35
Задать размеры окна можно функцией MoveWindow, для вывода текста на одном и том же месте необходимо обращение к буфферу консоли, посмотри этот проект - это консольные часы которые идут в одной строке
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
#include <windows.h>
#include <stdio.h>
#include <time.h>
 
time_t t;
 
void CleanScreen(COORD POOS);
void ShowTime();
 
int main()
{
    SetConsoleTitle("timer");
    HWND hWnd = FindWindow(NULL,"timer");
    if(hWnd)
        MoveWindow(hWnd,0,0,220,80,true);
    while(true)
    {
        ShowTime();
        Sleep(100);
    }
    return 0;
}
 
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);
}
 
void ShowTime()
{
    COORD POS;
    POS.X = 0;POS.Y = 0;
    CleanScreen(POS);
    CONSOLE_SCREEN_BUFFER_INFO SCRN_INFO;
 
    time(&t);
    tm * plocal = localtime(&t);
    printf("%s",asctime(plocal));
    GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &SCRN_INFO);
    POS.X = 0;
    POS.Y = SCRN_INFO.dwCursorPosition.Y;
    CleanScreen(POS);
}
1
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
24.07.2011, 16:28
Цитата Сообщение от Riderik Посмотреть сообщение
Спасибо большое за помощь. Буду пробовать. Одно что не совсем понял насчет второго пункта:

Нужно чтобы, когда список вывелся полностью, юзер видел верхушку этого списка. Если это реально, не отказался бы от кода на примере массива из N строк.
Размер окна все равно упирается в размеры экрана. Поэтому если список длинный, то он по-любому весь не поместится в окно. Поэтому надо порциями выводить.
Но если тебе все же нужно видеть именно ПЕРВУЮ строку, то ее надо вместо с порцией выводить первой.

Добавлено через 47 секунд
-=ЮрА=-, ну что вы такое пишете для совсем ЗЕЛЕНОГО НОВИЧКА...
0
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
24.07.2011, 16:55
-=ЮрА=-, так в Вашем примере размер окошка не меняется, часы то идут в одной строке, но им то места больше не надо, а так размер окошка для консоли всё равно стандартный получается.
0
 Аватар для xAtom
935 / 760 / 299
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
24.07.2011, 17:38
Цитата Сообщение от Gepar Посмотреть сообщение
так в Вашем примере размер окошка не меняется
Вот изменение консольного окошка
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
#include <windows.h>
#include <stdio.h>
 
 
int main(int argc, char* argv[]) {
 
    HANDLE sout = GetStdHandle(STD_OUTPUT_HANDLE);
 
    CONSOLE_SCREEN_BUFFER_INFO  info;
    ZeroMemory(&info, sizeof(CONSOLE_SCREEN_BUFFER_INFO));
    GetConsoleScreenBufferInfo(sout, &info);
 
    COORD size = { info.dwSize.X * 2, info.dwSize.Y };  // расширем по-горизонтали
    SetConsoleScreenBufferSize(sout, size);
 
 
    HWND wnd = GetForegroundWindow();
    tagRECT  rect;
    GetWindowRect(wnd, &rect);
 
    // вот собственно сам код изменения размера и позиции консоля, меняй как хочешь
    SetWindowPos(wnd, HWND_TOPMOST, rect.left, rect.top,
                   rect.left + (rect.right  - rect.left) + 200,
                   rect.top  + (rect.bottom - rect.top)  + 200,
                   SWP_SHOWWINDOW);
 
    BringWindowToTop(wnd);  
 
 
   getchar();
   return 0;
}
1
 Аватар для Riderik
28 / 28 / 4
Регистрация: 24.07.2011
Сообщений: 171
24.07.2011, 17:48  [ТС]
Цитата Сообщение от ValeryLaptev Посмотреть сообщение

-=ЮрА=-, ну что вы такое пишете для совсем ЗЕЛЕНОГО НОВИЧКА...
Не совсем зеленый новичок, я бы сказал. Всем спасибо
0
 Аватар для OstapBender
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
24.07.2011, 19:10
Цитата Сообщение от Riderik Посмотреть сообщение
Это в какой библиотеке ?
ВНЕЗАПНО windows.h
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
24.07.2011, 19:24
Цитата Сообщение от Gepar Посмотреть сообщение
-=ЮрА=-, так в Вашем примере размер окошка не меняется, часы то идут в одной строке, но им то места больше не надо, а так размер окошка для консоли всё равно стандартный получается.
Окошко в программе меняется програмно функцией MoveWindow - и то что окошко именно по часикам - результат подбора размеров окна 220 на 80
C++
1
MoveWindow(hWnd,0,0,220,80,true);
- дальше пользователь сам должен решить что и как ему изменять, за вывод текста согласен для новичка немножко сложновато, но по другому в буффер консоли как залезать то?
0
 Аватар для Riderik
28 / 28 / 4
Регистрация: 24.07.2011
Сообщений: 171
24.07.2011, 20:39  [ТС]
А как вводить текст на русском? Я использую функцию setlocale( LC_ALL , "Russian"); , чтобы в коде распознавал кириллицу, но с этой функцией при вводе русской строки в консоль, выводится она неадекватно. Например при вводе "Привет" выведется "?аЁу?в"
0
Заблокирован
24.07.2011, 20:50
если новичок хочет врубится в прелести консоли, то вот здесь он найдёт массу интересного:
http://vsokovikov.narod.ru/New... con_fn.htm



Цитата Сообщение от Riderik Посмотреть сообщение
А как вводить текст на русском?
Я делаю вот так:

SetConsoleOutputCP(1251); SetConsoleCP(1251); //не удалять! Русский букв!!!

Запускаете консольное приложение, потом тыкаете на свойство консоли, и в выпавшем меню выбираете шрифт для консоли под названием Lucidia Console

Делаете "применить для всех окон"

/ps консоль будит выводить русские буквы правильно, вместо кракозябр. Вводятся же буквы априори правильные)
1
 Аватар для Riderik
28 / 28 / 4
Регистрация: 24.07.2011
Сообщений: 171
24.07.2011, 21:00  [ТС]
Спасибо. Еще вопрос: как удалить определенную строку в текстовом файле? (Т.е. найти эту строку в файле и сделать так, чтобы ее там не было)
0
Заблокирован
24.07.2011, 21:11
Цитата Сообщение от Riderik Посмотреть сообщение
Спасибо. Еще вопрос: как удалить определенную строку в текстовом файле? (Т.е. найти эту строку в файле и сделать так, чтобы ее там не было)
Самый простой вариант - прочитать весь файл целиком в буфер. Потом с буфером можно делать все что угодно. Вырезать из него строки, добавлять новые... В конце всех операций - залить обратно в файл в режиме "перезапись".
0
 Аватар для Riderik
28 / 28 / 4
Регистрация: 24.07.2011
Сообщений: 171
24.07.2011, 21:14  [ТС]
Цитата Сообщение от Bers Посмотреть сообщение
Самый простой вариант - прочитать весь файл целиком в буфер. Потом с буфером можно делать все что угодно. Вырезать из него строки, добавлять новые... В конце всех операций - залить обратно в файл в режиме "перезапись".
Ну этот вариант я знал. А он не слишком объемный будет для большого списка?
0
Заблокирован
24.07.2011, 21:25
Цитата Сообщение от Riderik Посмотреть сообщение
Ну этот вариант я знал. А он не слишком объемный будет для большого списка?
А вы попробуйте, узнаете))
Я сомневаюсь, что у вас один текстовый файл на миллион текстовых строк, в котором нужно делать быстрый поиск/вставку/удаление

А вообще, никто не хранит миллионы обычных строк в текстовых файлах.
Для этого используются особые форматы хранения данных. При которых данные индексируются хитрым способом, разбиваются на разные кусочки, что бы их было легче искать/модифицировать, ну и тп.

Если хотите узнать об этом побольше, смотрите в сторону баз данных.
Но сейчас, на вашем уровне вам полноценную БД делать пока ещё рановато.
0
 Аватар для Riderik
28 / 28 / 4
Регистрация: 24.07.2011
Сообщений: 171
24.07.2011, 21:27  [ТС]
Цитата Сообщение от Bers Посмотреть сообщение
А вы попробуйте, узнаете))
Я сомневаюсь, что у вас один текстовый файл на миллион текстовых строк, в котором нужно делать быстрый поиск/вставку/удаление

А вообще, никто не хранит миллионы обычных строк в текстовых файлах.
Для этого используются особые форматы хранения данных. При которых данные индексируются хитрым способом, разбиваются на разные кусочки, что бы их было легче искать/модифицировать, ну и тп.

Если хотите узнать об этом побольше, смотрите в сторону баз данных.
Но сейчас, на вашем уровне вам полноценную БД делать пока ещё рановато.
Вообще-то в следующем семестре как раз их и изучаем
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.07.2011, 21:27
Помогаю со студенческими работами здесь

Несколько вопросов к программистам.
Доброго времени суток! я начинающий, последние пару месяцев делал упор на изучение Си, WinAPI и дискретной математики. Наверное, это было...

Несколько вопросов по строкам в С
Привет всем участникам форума. Изучаю С++, по пути прошел строки из С ( массивы символов ) И осталось несколько вопросов, ответов на...

Несколько вопросов по извучению C++
Добрый день, товарищи!! Я немного новичек в вопросах программирования на C++, поэтому прошу строго не судить меня за мои, возможно,...

Графический редактор. Несколько вопросов
Здравствуйте! Нам в вузе преподаватель дал мне курсовую графический редактор (GIF). На любом языке. Я пока думаю между C++ и Delphi. Но...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru