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

Бегущая строка в С++ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.95
JustBear
 Аватар для JustBear
5 / 5 / 0
Регистрация: 01.03.2013
Сообщений: 160
01.03.2013, 17:47     Бегущая строка в С++ #1
Всем привет! Вчера столкнулся с трудностью: не получается написать код бегущей строки в MS VC++. Перепробовал кучу вариантов из того, что умею и знаю. Облазил инет, дали несколько ценных советов, но исправить "перевод каретки на новую строку" я не могу.

Суть задачи такова: пользователь вводит предложение до 256 символов, жмет Enter и строка, начиная от начала (координаты {0;10}), ползет вправо, и как только доходит до конца, должна посимвольно исчезнуть и появиться на ТОЙ ЖЕ СТРОКЕ, с которой начиналась ( у меня она переводится на новую строку и как только полностью перейдет - скачет вверх на свою строку и так бесконечно).

Дополнительным бонусом нужно заставить ее регулировать скорость СТРЕЛКАМИ (вправо - больше скорость, влево - меньше. Пробел или вверх - пауза/возобновление).

Вот такой код я имею на сейчас. Прошу, добрых людей откликнуться. Заранее благодарен.
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
#include "stdafx.h"
#include <iostream>
#include <locale>
#include <conio.h>
#include <windows.h>
#include <stdio.h>
#include <cstring>
using namespace std;
 
int _tmain()
{
char str1[256]; int a,b;
a=0;
b=10;
 
HANDLE hConsole;
hConsole=GetStdHandle (STD_OUTPUT_HANDLE);
setlocale(LC_ALL,".1251");//русский язык для диалога
 
cout<<"Введите предложение:"<<endl;
cin.getline(str1,256);
system("cls");
COORD x={0,10};//координаты начала предложения
SetConsoleCursorPosition(hConsole,x);
setlocale(LC_ALL,".866");//выводим русскоязычное послание в движимой строке
cout<<str1<<endl;
 
for (a=0;a<80;a++)
{ 
COORD d={a,b};
SetConsoleCursorPosition(hConsole,d);
cout<<str1;
Sleep(50);
system("cls");
}
while (a>=0)
{
for (a=0;a<79;a++)
{
COORD d={a,b};
SetConsoleCursorPosition(hConsole,d);
cout<<str1;
Sleep(50);
system("cls");
}
}
getch();
return 0;
}
Очень нужна помощь. Завтра, если код будет работать согласно задаче, хотел бы сдать его
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.03.2013, 17:47     Бегущая строка в С++
Посмотрите здесь:

C++ Бегущая строка Borland Turbo C++
дана строка, изображающая целое положительное число. Вывести сумму цифр этого числа. Строка должна вводиться с клавиатуры. C++
строка string и строка char C++
Дана строка символов до точки. Составить программу, проверяющую, является ли данная строка палиндромом, т. е. читается ли она слева направо и справа н C++
Дана строка символов. Проверьте,является ли данная строка палиндромом C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
anmartex
...
 Аватар для anmartex
1699 / 1192 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
01.03.2013, 20:10     Бегущая строка в С++ #2
Можно копнуть и в более примитивную сторону, правда со стрелками тогда ничего не получится:
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
#include <stdio.h>
#include <unistd.h>
 
int main(int argc, const char* argv[])
{
   const char text[] = "Hello World";
 
   size_t i = 0, j;
 
   while (1)
   {
      for (j = i; j > 0; --j)
      {
         printf(" ");
      }
 
      printf("%.*s", 80-i-1, text);
 
      if (80 == ++i)
      {
         i = 0;
      }
 
      printf("%c", 13);
 
      usleep(100000);
   }
 
   return 0;
}
JustBear
 Аватар для JustBear
5 / 5 / 0
Регистрация: 01.03.2013
Сообщений: 160
02.03.2013, 12:57  [ТС]     Бегущая строка в С++ #3
anmartex, спасибо, но немного не то. Сегодня нам преподаватель сказал, что нужно 3 цикла. 1 отвечает за посимвольный вывод текста в начале строки, второй - за его перемещение по экрану, а третий - за посимвольное исчезновение.
define undef
 Аватар для define undef
32 / 32 / 1
Регистрация: 19.01.2013
Сообщений: 33
02.03.2013, 13:02     Бегущая строка в С++ #4
Можно при помощи stl
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <string>
#include <algorithm>
 
 
int main()
{
  std::string str = "Hello world!!! ";
  
  while(true){
   rotate(str.begin(),str.begin()+1,str.end());
   std::cout<<str;
   Sleep(100);
   system("cls");
  }
 
}
booker
 Аватар для booker
23 / 23 / 2
Регистрация: 21.11.2012
Сообщений: 106
02.03.2013, 22:25     Бегущая строка в С++ #5
Писал для винды, код конечно адский но рабочий)))
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
#include <iostream>
#include<Windows.h>
#include <locale>
using namespace std;
 
 
const int size = 256;
HANDLE hConsole;
void gotoxy( int column, int line )
  {hConsole=GetStdHandle(STD_OUTPUT_HANDLE);
  COORD coord;
  coord.X = column;
  coord.Y = line;
  SetConsoleCursorPosition(
    hConsole,
    coord
    );
  }
 
 
int main(){
    setlocale(LC_ALL,".1251");
    char runstr [size] = "Я бегущая строка я бегу, бегу, бегу, бегу, бегу, бегу, бегу, бегу, бегу, бегу, бегу!";
    int n=size-80;
    int m=0;
    
    label:
    while(n>=0)
    {
        while(m<80)
        {
            gotoxy(m,10);
            
            cout<<*(runstr+n+(m++));
            
        }
        if(n==0){
            
            m=80;
                        
            while(m>=0){
                gotoxy(0,10);
                cout<<"                                                                                 ";
                gotoxy(80-m,10);
                
                while(n<m){
                    cout<<runstr[n++];
                }
                m--;n=0;Sleep(50);if(m==0){n=size-80;goto label;}
            }
        }
 
    n--;
    m=0;
    Sleep(50);
    }
 
    system("pause");
    return 0;
}
JustBear
 Аватар для JustBear
5 / 5 / 0
Регистрация: 01.03.2013
Сообщений: 160
05.03.2013, 13:02  [ТС]     Бегущая строка в С++ #6
booker, я не пойму кода твоего. Спасибо. Я переделал его, чтобы пользователь вводил сообщение, но у меня стала появляться "дребедень". А если использовать чисто твой код, то бежит "пустота", то есть ничего не выводится.
Yandex
Объявления
05.03.2013, 13:02     Бегущая строка в С++
Ответ Создать тему
Опции темы

Текущее время: 13:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru