Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
AnonymC
1179 / 462 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
#1

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

07.11.2009, 19:22. Просмотров 1315. Ответов 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
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2009, 19:22
Ответы с готовыми решениями:

Создать меню выбора запускаемой программы
У меня есть определенный набор программ, мне сказали сделать такую программу,...

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

Вызов команды терминала из программы
Есть ли возможность (и если есть, то как реализовать) из программы вызвать в...

Создать папку, название которой является первым параметром команды
Напишите приложение, создающее папку, название которой является первым...

Реализовать консольную утилиту, принимающую от пользователя команды с параметрами и выполняющую эти команды
Сразу хочу сказать, что меня интересуют не аргументы int main(int argc, *char)...

21
Monte-Cristo
2796 / 1382 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
07.11.2009, 19:30 #2
у тебя cmd - Это строка, тобишь указатель на чар - char*\

В свич ты можешь символ (один), например, можешь запихнуть... Если строки: if-ами проверяй на совпадение через strcmp()
0
AnonymC
1179 / 462 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
07.11.2009, 21:35  [ТС] #3
Monte-Cristo, я до этого не дотяну,лучше код авай
0
TanT
эволюционирую потихоньку
467 / 465 / 91
Регистрация: 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;}
1
Monte-Cristo
2796 / 1382 / 107
Регистрация: 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;
}
1
AnonymC
1179 / 462 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
07.11.2009, 21:56  [ТС] #6
Цитата Сообщение от TanT Посмотреть сообщение
if(!strcmp(cmd,"clear"))
это поятно...но почему !?....и второе ты представил да,как меню рабо будет,ну что бы не один раз перешли и все,ну что постоянно было,скажем сделали КЛИР а потом еще другое...это не связано с темой,с циклами....хотя же сам понялв конце main() написать функции

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

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


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

Как можно сравнивать массивы? Вот если использовать класс std::string, в нем операция сравнения перегружена. И сравнивать можно.
1
AnonymC
1179 / 462 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
07.11.2009, 23:00  [ТС] #11
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
error: противоречие. Знания приходят после учебы.
я хотел сказать что знаю что не знаю
0
AnonymC
1179 / 462 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 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
0
RazorQ
582 / 349 / 15
Регистрация: 06.02.2009
Сообщений: 1,386
08.11.2009, 18:34 #13
МедведЪ, ты какой язык до этого изучал? Нельзя рекурсивно вызывать main(). Если тебе надо, чтобы меню появлялось постоянно, то возьми его в цикл. Я бы написал отдельную функцию, которая возвращает номер выбранного пункта.
0
AnonymC
1179 / 462 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
08.11.2009, 18:37  [ТС] #14
Цитата Сообщение от RazorQ Посмотреть сообщение
Я бы написал отдельную функцию, которая возвращает номер выбранного пункта.
хотя и так можно...если не трудно сделаешь?

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

Добавлено через 20 секунд
Цитата Сообщение от RazorQ Посмотреть сообщение
ты какой язык до этого изучал
HTML
0
RazorQ
582 / 349 / 15
Регистрация: 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 секунд
Цитата Сообщение от МедведЪ Посмотреть сообщение
почему?Оо
язык не позволяет
0
AnonymC
1179 / 462 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
08.11.2009, 18:40  [ТС] #16
а что такое табулиция?
0
RazorQ
582 / 349 / 15
Регистрация: 06.02.2009
Сообщений: 1,386
08.11.2009, 18:44 #17
Цитата Сообщение от МедведЪ Посмотреть сообщение
а что такое табулиция?
символ табуляции. Обычно равен по ширине 4 или 8 пробелам
0
AnonymC
1179 / 462 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
08.11.2009, 18:49  [ТС] #18
RazorQ, я не тяну.....снова...пожалуйста,допиши твой код к моему,если не трудно,просто там логические ошибки у меня получаются...

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

Добавлено через 19 секунд
ах даа...еще на клаве естьTAB
0
RazorQ
582 / 349 / 15
Регистрация: 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;
}
0
AnonymC
1179 / 462 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
08.11.2009, 19:08  [ТС] #20
ну моя программа в основном проверяет файл хост,а там все остальное-добавки,нарп одна команда выводит содержание,другая сканирует и т.д...

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

Добавлено через 8 минут
RazorQ, не понимаю...действия,которые исполняются,находятся в главной,или в функции choose??????
0
08.11.2009, 19:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2009, 19:08

Создать меню с командами Begin, Work, About. При выборе команды About открывается окно о разработчике
Создать меню с командами Begin, Work, About. При выборе команды About...

Создать меню для программы
Помогите зделать меню для етой задачи) .Мне нужно два окна для ввода числа и...

Создать меню для программы
меню.


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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