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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
#1

создать Меню или же Команды программы - C++

07.11.2009, 19:22. Просмотров 1196. Ответов 21
Метки нет (Все метки)

столкнулся с проблемой,у меня есть прога,хочу прикруть меню к ней,скажем есть ввести clear то сделать то что я скажу,но не получается вот код:
C++
1
2
3
4
5
 switch(cmd){
case "clear":{  hosts=fopen("C:\\Windows\\System32\\drivers\\etc\\hosts" , "w");
      fputs(str, hosts);
     cout<<"Файл hosts был вылечен.";
                 break;}
Добавлено через 31 секунду
Error 2 error C2051: case expression not constant c:\documents and settings\ag\my documents\visual studio 2008\projects\hosts reader\hosts reader\code.cpp 40 Hosts reader
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Monte-Cristo
2786 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
07.11.2009, 19:30     создать Меню или же Команды программы #2
у тебя cmd - Это строка, тобишь указатель на чар - char*\

В свич ты можешь символ (один), например, можешь запихнуть... Если строки: if-ами проверяй на совпадение через strcmp()
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
07.11.2009, 21:35  [ТС]     создать Меню или же Команды программы #3
Monte-Cristo, я до этого не дотяну,лучше код авай
TanT
эволюционирую потихоньку
464 / 462 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
07.11.2009, 21:49     создать Меню или же Команды программы #4
Цитата Сообщение от МедведЪ Посмотреть сообщение
Monte-Cristo, я до этого не дотяну,лучше код авай
Я, конечно, не граф, но...

C++
1
2
3
4
5
6
if(!strcmp(cmd,"clear"))
{
  hosts=fopen("C:\\Windows\\System32\\drivers\\etc\\hosts" , "w");
      fputs(str, hosts);
         cout<<"Файл hosts был вылечен.";
                                 break;}
Monte-Cristo
2786 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
07.11.2009, 21:53     создать Меню или же Команды программы #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
#include<iostream>
using namespace std;
 
int main ()
{
    char ch;
    
    cout << "Menu:" << endl;
    cout << "\t-> Start (s)" << endl;
    cout << "\t-> Clear (c)" << endl;
    cout << "\t-> Exit (e)" << endl;
    
    cout << "\nYour choice: ";
    ch = cin.get();
    
    switch(ch)
    {
        case 's':
                cout << "\nYour choice is 's'!";
            break;
            
        case 'c':
                cout << "\nYour choice is 'c'!";
            break;
            
        case 'e':
                cout << "\nYour choice is 'e'!";
            break;
            
    }
 
    return 0;
}


Добавлено через 3 минуты
А вот через комманды:
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
#include<iostream>
using namespace std;
 
int main ()
{
    char ch[10];
    
    cout << "command@line: ";
    cin.getline(ch, sizeof(char)*10);
    
    // command table
    if (!strcmp(ch,"clear"))
    {
        cout << "clear";
        // do clear command
    } else if (!strcmp(ch,"exit"))
    {
        cout << "exit";
        // do exit command
    
    } else if (!strcmp(ch,"start"))
    {
        cout << "start";
        // do start command    
    }
     
    return 0;
}
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
07.11.2009, 21:56  [ТС]     создать Меню или же Команды программы #6
Цитата Сообщение от TanT Посмотреть сообщение
if(!strcmp(cmd,"clear"))
это поятно...но почему !?....и второе ты представил да,как меню рабо будет,ну что бы не один раз перешли и все,ну что постоянно было,скажем сделали КЛИР а потом еще другое...это не связано с темой,с циклами....хотя же сам понялв конце main() написать функции

Добавлено через 1 минуту
Можно так:
не не не,по буквам не нравится...а за команды тебе и ТанТ-у спасибо большое!
Monte-Cristo
2786 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
07.11.2009, 21:57     создать Меню или же Команды программы #7
Цитата Сообщение от МедведЪ Посмотреть сообщение
это поятно...но почему !?
Потому что плохо знаешь ты Си... Если бы хорошо знал, то знал бы, что strcmp() возвращает разницу между строками. 0 - значит строки равны.
Monte-Cristo
2786 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
07.11.2009, 22:01     создать Меню или же Команды программы #8
Насчет меню.. я когда-то делал курсовой по консольному программированию.. там у меня было меню. Финальную версию я где-то посеял да это и не важно.. а вот промежуточная есть - меню в ней исправно работает. Можешь посмотреть и разбираться.
Вложения
Тип файла: rar course.rar (2.9 Кб, 25 просмотров)
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
07.11.2009, 22:50  [ТС]     создать Меню или же Команды программы #9
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
Потому что плохо знаешь ты Си
знаю,вот и учусь

Добавлено через 2 минуты
а почему не так
C++
1
if(a=="clear")...
?
Monte-Cristo
2786 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
07.11.2009, 22:58     создать Меню или же Команды программы #10
Цитата Сообщение от МедведЪ Посмотреть сообщение
знаю,вот и учусь
error: противоречие. Знания приходят после учебы.


Цитата Сообщение от МедведЪ Посмотреть сообщение
а почему не так
Потому что гладиолус (с) Кто-то там из КВН

Как можно сравнивать массивы? Вот если использовать класс std::string, в нем операция сравнения перегружена. И сравнивать можно.
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
07.11.2009, 23:00  [ТС]     создать Меню или же Команды программы #11
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
error: противоречие. Знания приходят после учебы.
я хотел сказать что знаю что не знаю
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
08.11.2009, 18:04  [ТС]     создать Меню или же Команды программы #12
у меня ошибки,кто нить помогите
код
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <windows.h>
#include <string.h>
#include <string>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream> 
#include<locale.h>
#include<stdio.h>
using namespace std;
 
 
int main()
{
  setlocale(LC_ALL, "Russian");
 
  char str[] = "# (C) Корпорация Майкрософт (Microsoft Corp.), 1993-1999\n#\n# Это образец файла HOSTS, используемый Microsoft TCP/IP для Windows.\n#\n# Этот файл содержит сопоставления IP-адресов именам узлов.\n# Каждый элемент должен располагаться в отдельной строке. IP-адрес должен\n# находиться в первом столбце, за ним должно следовать соответствующее имя.\n# IP-адрес и имя узла должны разделяться хотя бы одним пробелом.\n#\n# Кроме того, в некоторых строках могут быть вставлены комментарии \n# (такие, как эта строка), они должны следовать за именем узла и отделяться\n# от него символом '#'.\n#\n# Например:\n#\n#      102.54.94.97     rhino.acme.com          # исходный сервер\n#       38.25.63.10     x.acme.com              # узел клиента x\n\n127.0.0.1       localhost";
  FILE* hosts = fopen("C:\\Windows\\System32\\drivers\\etc\\hosts" , "r");
 
 
 
  int ch;
  int strlenght = strlen(str);
  int n = 0;
 char cmd;
  while((ch = getc(hosts)) != EOF){
    if(n >= strlenght || (char)ch != str[n] ){
     
      
      fclose(hosts); // перед тем как заново открывать, нужно его закрыть
  printf("Hosts инфицирован!\n");
cin.getline(ch, sizeof(char)*10);
 
 
if(!strcmp(ch, "scan")){
  if(!hosts){
    printf("Не удалось открыть файл hosts\n");
    system("pause");
main();
 
    return 0;
  }
main();}
if(!strcmp(ch, "clear")){  hosts=fopen("C:\\Windows\\System32\\drivers\\etc\\hosts" , "w");
      fputs(str, hosts);
     cout<<"Файл hosts был вылечен.\n";
    fclose(hosts);
    system("pause");
main();
}
if(!strcmp(ch, "file"))     {
    cout<<"Содержание файла Hosts:\n";
    while(ch!=EOF){
    putc(ch, hosts);
    }
cout<<"\n";
system("pause");
main();
}
 
}
 
 
    
 
 
 
 
 
      ////////////////
      if(!hosts){ // Обязательно нужно проверять открылся ли файл
        printf("Не удалось открыть файл для записи");
 
        system("pause");
        return 0;
      }
 
 
 
      system("pause");
      fclose(hosts);
      return 0;
    }
 
    ++n;
  }
 
 printf("Hosts не инфицирован\n");
 
  fclose(hosts);
  
  system("pause");
  return 0;
}

ошибки
Error 6 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\documents and settings\ag\my documents\visual studio 2008\projects\hosts reader\hosts reader\code.cpp 88 Hosts reader
Error 10 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\documents and settings\ag\my documents\visual studio 2008\projects\hosts reader\hosts reader\code.cpp 90 Hosts reader
Error 12 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\documents and settings\ag\my documents\visual studio 2008\projects\hosts reader\hosts reader\code.cpp 92 Hosts reader
Error 3 error C2664: 'strcmp' : cannot convert parameter 1 from 'int' to 'const char *' c:\documents and settings\ag\my documents\visual studio 2008\projects\hosts reader\hosts reader\code.cpp 35 Hosts reader
Error 4 error C2664: 'strcmp' : cannot convert parameter 1 from 'int' to 'const char *' c:\documents and settings\ag\my documents\visual studio 2008\projects\hosts reader\hosts reader\code.cpp 44 Hosts reader
Error 5 error C2664: 'strcmp' : cannot convert parameter 1 from 'int' to 'const char *' c:\documents and settings\ag\my documents\visual studio 2008\projects\hosts reader\hosts reader\code.cpp 51 Hosts reader
Error 2 error C2664: 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::getline(_Elem *,std::streamsize)' : cannot convert parameter 1 from 'int' to 'char *' c:\documents and settings\ag\my documents\visual studio 2008\projects\hosts reader\hosts reader\code.cpp 32 Hosts reader
Error 14 error C2440: 'initializing' : cannot convert from 'const char [6]' to 'int' c:\documents and settings\ag\my documents\visual studio 2008\projects\hosts reader\hosts reader\code.cpp 92 Hosts reader
Error 8 error C2440: 'initializing' : cannot convert from 'const char [22]' to 'int' c:\documents and settings\ag\my documents\visual studio 2008\projects\hosts reader\hosts reader\code.cpp 88 Hosts reader
Error 13 error C2365: 'system' : redefinition; previous definition was 'function' c:\documents and settings\ag\my documents\visual studio 2008\projects\hosts reader\hosts reader\code.cpp 92 Hosts reader
Error 7 error C2365: 'printf' : redefinition; previous definition was 'function' c:\documents and settings\ag\my documents\visual studio 2008\projects\hosts reader\hosts reader\code.cpp 88 Hosts reader
Error 11 error C2365: 'fclose' : redefinition; previous definition was 'function' c:\documents and settings\ag\my documents\visual studio 2008\projects\hosts reader\hosts reader\code.cpp 90 Hosts reader
Error 17 error C2143: syntax error : missing ';' before '}' c:\documents and settings\ag\my documents\visual studio 2008\projects\hosts reader\hosts reader\code.cpp 94 Hosts reader
Error 9 error C2065: 'hosts' : undeclared identifier c:\documents and settings\ag\my documents\visual studio 2008\projects\hosts reader\hosts reader\code.cpp 90 Hosts reader
Error 15 error C2059: syntax error : 'return' c:\documents and settings\ag\my documents\visual studio 2008\projects\hosts reader\hosts reader\code.cpp 93 Hosts reader
Error 16 error C2059: syntax error : '}' c:\documents and settings\ag\my documents\visual studio 2008\projects\hosts reader\hosts reader\code.cpp 94 Hosts reader
Error 18 error C2059: syntax error : '}' c:\documents and settings\ag\my documents\visual studio 2008\projects\hosts reader\hosts reader\code.cpp 94 Hosts reader
RazorQ
576 / 343 / 9
Регистрация: 06.02.2009
Сообщений: 1,386
08.11.2009, 18:34     создать Меню или же Команды программы #13
МедведЪ, ты какой язык до этого изучал? Нельзя рекурсивно вызывать main(). Если тебе надо, чтобы меню появлялось постоянно, то возьми его в цикл. Я бы написал отдельную функцию, которая возвращает номер выбранного пункта.
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
08.11.2009, 18:37  [ТС]     создать Меню или же Команды программы #14
Цитата Сообщение от RazorQ Посмотреть сообщение
Я бы написал отдельную функцию, которая возвращает номер выбранного пункта.
хотя и так можно...если не трудно сделаешь?

Цитата Сообщение от RazorQ Посмотреть сообщение
Нельзя рекурсивно вызывать main().
почему?Оо

Добавлено через 20 секунд
Цитата Сообщение от RazorQ Посмотреть сообщение
ты какой язык до этого изучал
HTML
RazorQ
576 / 343 / 9
Регистрация: 06.02.2009
Сообщений: 1,386
08.11.2009, 18:39     создать Меню или же Команды программы #15
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int choose()
{
    char otvet[10] = "";
    cout << "Menu:" << endl;
    cout << "\t-> Start" << endl;
    cout << "\t-> Clear" << endl;
    cout << "\t-> Exit" << endl;
    cin >> otvet;
 
    if(!strcmp(otvet, "start"))
        return 1;
    if(!strcmp(otvet, "clear"))
        return 2;
    if(!strcmp(otvet, "exit"))
        return 3;
 
}
Добавлено через 40 секунд
Цитата Сообщение от МедведЪ Посмотреть сообщение
почему?Оо
язык не позволяет
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
08.11.2009, 18:40  [ТС]     создать Меню или же Команды программы #16
а что такое табулиция?
RazorQ
576 / 343 / 9
Регистрация: 06.02.2009
Сообщений: 1,386
08.11.2009, 18:44     создать Меню или же Команды программы #17
Цитата Сообщение от МедведЪ Посмотреть сообщение
а что такое табулиция?
символ табуляции. Обычно равен по ширине 4 или 8 пробелам
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
08.11.2009, 18:49  [ТС]     создать Меню или же Команды программы #18
RazorQ, я не тяну.....снова...пожалуйста,допиши твой код к моему,если не трудно,просто там логические ошибки у меня получаются...

Добавлено через 42 секунды
Цитата Сообщение от RazorQ Посмотреть сообщение
символ табуляции. Обычно равен по ширине 4 или 8 пробелам
спасибо

Добавлено через 19 секунд
ах даа...еще на клаве естьTAB
RazorQ
576 / 343 / 9
Регистрация: 06.02.2009
Сообщений: 1,386
08.11.2009, 18:56     создать Меню или же Команды программы #19
Я не понял что конкретно делает твоя программа (а главное как) поэтому вот пример, а дальше сам добавляй свой меню, проверки и действия
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
#include <windows.h>
#include <iostream> 
#include<locale.h>
using namespace std;
 
int choose()
{
    char otvet[10] = "";
    cout << "Menu:" << endl;
    cout << "\t-> Start" << endl;
    cout << "\t-> Clear" << endl;
    cout << "\t-> Exit" << endl;
    cin >> otvet;
 
    if(!strcmp(otvet, "start"))
        return 1;
    if(!strcmp(otvet, "clear"))
        return 2;
    if(!strcmp(otvet, "exit"))
        return 3;
}
 
 
int main()
{
  setlocale(LC_ALL, "Russian");
 
  char str[] = "# (C) Корпорация Майкрософт (Microsoft Corp.), 1993-1999\n#\n# Это образец файла HOSTS, используемый Microsoft TCP/IP для Windows.\n#\n# Этот файл содержит сопоставления IP-адресов именам узлов.\n# Каждый элемент должен располагаться в отдельной строке. IP-адрес должен\n# находиться в первом столбце, за ним должно следовать соответствующее имя.\n# IP-адрес и имя узла должны разделяться хотя бы одним пробелом.\n#\n# Кроме того, в некоторых строках могут быть вставлены комментарии \n# (такие, как эта строка), они должны следовать за именем узла и отделяться\n# от него символом '#'.\n#\n# Например:\n#\n#      102.54.94.97     rhino.acme.com          # исходный сервер\n#       38.25.63.10     x.acme.com              # узел клиента x\n\n127.0.0.1       localhost";
  FILE* hosts = fopen("C:\\Windows\\System32\\drivers\\etc\\hosts" , "r");
  if(!hosts)
  {
     cout << "Не могу открыть hosts";
     return 1;
   }
 
int ch=0; 
while(1)
{
    ch = choose();
 
    if(ch == 1){ // выбранно start
    }
    if(ch == 2){  
       hosts=fopen("C:\\Windows\\System32\\drivers\\etc\\hosts" , "w");
       fputs(str, hosts);   // здесь ты записываешь свою строку в файл
       cout<<"Файл hosts был вылечен.\n";
    }
    if(ch == 3)  // выходим
     break;
}
return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2009, 19:08     создать Меню или же Команды программы
Еще ссылки по теме:

C++ Меню для программы
Создать папку, название которой является первым параметром команды C++
C++ Создать меню выбора запускаемой программы
Вызов команды терминала из программы C++
Подскажите, нужно перегрузить оператор или создать метод(если создать то не понимаю как) записи в файл C++

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

Или воспользуйтесь поиском по форуму:
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
08.11.2009, 19:08  [ТС]     создать Меню или же Команды программы #20
ну моя программа в основном проверяет файл хост,а там все остальное-добавки,нарп одна команда выводит содержание,другая сканирует и т.д...

Цитата Сообщение от RazorQ Посмотреть сообщение
поэтому вот пример, а дальше сам добавляй свой меню, проверки и действия
вот и у меня тоже самое,я просто запутался,но спасибо,щас попробую

Добавлено через 8 минут
RazorQ, не понимаю...действия,которые исполняются,находятся в главной,или в функции choose??????
Yandex
Объявления
08.11.2009, 19:08     создать Меню или же Команды программы
Ответ Создать тему
Опции темы

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