использования ДОС команд в С++

  • Автор темы AlexSaaa
  • Дата начала
Статус
Закрыто для дальнейших ответов.
A

AlexSaaa

Гость
#1
Добрый день,
Интересуют возможность использования ДОС команд в С++
 
Z

zzzup

Гость
#2
никаких проблем и препятствий для этого нету
 
A

AlexSaaa

Гость
#3
почемуто я так и думал..а можно уточнить синтаксис
 
Z

zzzup

Гость
#4
я тебе счас весь C должен накатать что-ли ????? :)

кокретней плиз что не получается у тебя использовать и покажи код как ты это используешь!
 
A

AlexSaaa

Гость
#5
Нет .. весь С кататать не нада..я еще так далеко не зашел...
пока в учебных целях пытаюсь написать что-то наподобии HR book.. с помощью struct ..возникли некоторые проблемы:
- не получаеться преобразовать struct-елемент в char...
- и нужно после опредленого цыкла програмы очистить экран CLS в DOS кода показать не могу..так как пока просто ищу возможности сделать это
 
A

AlexSaaa

Гость
#6
пока написал до сих

/*Напишите информационную систему "Сотрудники".
Организуйте ввод данных,
поиск сотрудника по фамилии,
вывод информации о всех сотрудниках,
указанного возраста. */

#include <iostream>
#include <cstring>

using namespace std;
int Size=0;

struct Employee{
char name[32];
char surname[32];
char phone[15];
char birthday[10];
};

void Add(Employee &s){
cout << "name: ";
cin >> s.name;
cout << "surname: ";
cin >> s.surname;
cout << "phone: ";
cin >> s.phone;
cout << "birthday: ";
cin >> s.birthday;
cout<<"New item was added to database"<<endl;
cout << "========================================"<<endl;
ОЧИСТИТЬ ЭКРАН....скорее для удобства
}



void print(Employee &s) {
cout << "========================================"<<endl;
cout << "name: " << s.name << endl;
cout << "surname: " << s.surname << endl;
cout << "phone: "<<s.phone<<endl;
cout << "birthday: "<<s.birthday<<endl;

}

int main(){

Employee *arr = new Employee[100];

cout<<"HR book v. 1\n";
char choice;

do{

cin>>choice;
switch(choice){
case 'A': case 'a':
++Size;
Add(arr[Size]);
break;
case'S':case's':
char* A;
cout<<"Search for: ";
cin>>A;
cout<<"Search results: "<<endl;
for(int i=0; i<Size; ++i){

if(strncmp( :) ????????????, A, strlen (A))==0 )
print(arr);
}

break;

}
}while(choice!='Q'&&choice!='q');



return 0;
}
 
G

Guest

Гость
#7
Про мелкие недочёты говорить не буду. Скажу о крупных ошибках.

Как ты думаешь, что будет после этого фрагмента:
Код:
case'S':case's':
char* A;
cout<<"Search for: ";
cin>>A;
Ничего хорошего. Напиши так:
Код:
case'S':case's':
char A[100];
cout<<"Search for: ";
cin>>A;
Сравнение:
Код:
if(strncmp( arr[i].name, A, strlen (A))==0 )
А об очистке ничего не скажу. Предполагается, что cin и cout могут быть перенаправлены в файл. Поэтому очистка в принципе невозможна.

Хотя в Borland C существовала функция clrscr(), очищавшая экран. У меня Visual стоит, там её нет.
 
G

Guest

Гость
#8
Про мелкие недочёты говорить не буду. Скажу о крупных ошибках.

Как ты думаешь, что будет после этого фрагмента:
Код:
case'S':case's':
char* A;
cout<<"Search for: ";
cin>>A;
Ничего хорошего. Напиши так:
Код:
case'S':case's':
char A[100];
cout<<"Search for: ";
cin>>A;
Сравнение:
Код:
if(strncmp( arr[i].name, A, strlen (A))==0 )
А об очистке ничего не скажу. Предполагается, что cin и cout могут быть перенаправлены в файл. Поэтому очистка в принципе невозможна.

Хотя в Borland C существовала функция clrscr(), очищавшая экран. У меня Visual стоит, там её нет.
 
A

AlexSaaa

Гость
#9
спасибо гест,
разобрался..

относительно очистки..имел ввиду прсто очистку экрана.. видел где-то .. но к сожалению не запомнил код..там что-то типа >>command('CLS').. но не работает..плохо когда память девичья
 
G

Guest

Гость
#10
В стандартах C и C++ нет функций очистки экрана. Но создатели компиляторов добавляют такие функции в свои библиотеки. Так, у Borland существует функция clrscr() (conio.h), выполняющая очистку экрана. Возможно похожая функция есть и у Microsoft. но это будет уже не чистый C++.

> относительно очистки..имел ввиду прсто очистку экрана.. видел где-то .. но к сожалению не запомнил код..там что-то

Представь, что ты смог сделать очистку экрана. Затем ты разместил свою прогу на каком-нибудь сайте. Мне она понравилась и я её скачал. Через некоторое время я решил автоматизировать процесс. Я создал файл INPUT.TXT с следующим текстом:
Код:
a
Andre
Andre
111
111

a
Alex
Alex
222
222

...
Теперь чтобы создать базу данных я запускаю программу так:
Код:
programm.exe < input.txt
В результате, данные будут поступать в cin не с клавиатуры а из файлика.
Затем я пошёл ещё дальше. Всю выводимую информацию я решил сохранить в файле OUTPUT.TXT. Я сделал так:
Код:
programm.exe < input.txt > output.txt
Внимание вопрос. Что будет очищаться? Ведь весь вывод будет направлен в файл output.txt, а не на экран.

Мой совет. Забудь про очистку экрана. Когда я писал похожие программки мне хватало нескольких пустых строк для разделения информации.
 
A

AlexSaaa

Гость
#12
спасибо...с этим разобрались...


еще один вопрос по даной програм...
могу ли я в строчке if(strncmp( arr.name, A, strlen (A))==0 ) сделать
strncmp( arr.name динамичной... то есть возможность поиска не тлько в нейм а в синейм или фоун.. в зависимости от того что введет юзер... без дополнительних иф-строчок..
перечетил что написал..возможно не суразен о все же
 
G

Guest

Гость
#13
Посмотри как у тебя реализована структура:
Код:
struct Employee{
char name[32];
char surname[32];
char phone[15];
char birthday[10];
};
Т.к. все поля у тебя строки, то то ты можешь спокойно использовать функцию strncmp для сравнения чего угодно. Другое дело, что желательно проверять то, что вводит пользователь, т.е. дату и телефон, а то он такое введёт :D .

Вместо функции strncmp ты можешь использовать функцию strnicmp. Параметры у неё такие же, но она производит сравнение без учёта регистра, т.е. 10-jan-2005 и 10-Jan-2005 одинаковые строки.
 
A

alam

Гость
#14
Очищать можно командой system("CLS");
При перенаправлении в файл очищаться будет экран.
 
A

AlexSaaa

Гость
#15
опять проблемка возникла...не получаеться передать в функцию элемент Юнион.

union color{
int Red;
int Blue;
int Green;
};

void Transfer(color &A){
char TransfTab[16]={'0','1','2','3','4','5','6','7','8','9', 'A','B','C','D','E','F'};

RGB[size]=TransfTab[А/16];
RGB[size+1]=TransfTab[А%16];
ошибка: error C2676: binary '%' : 'color' does not define this operator or a conversion to a type acceptable to the predefined operator

size+=2;

}
int main(){
color ID;
cout<<"Enter numeric values of the next color channels"<<endl;
do{
cout<<"Red: ";
cin>>ID.Red;
}while(ID.Red>255||ID.Red<0);
Transfer(ID);


return 0;

}
 
Статус
Закрыто для дальнейших ответов.