Почемуто Codeblocs стал игнорировать команды: system("cls"); syste("pause"); exit(); Предложите альтернативные варианты очистки консоли Вопрос снят, забыл подключить <cstdlib>))
c++ Столкнулся с проблемой "парсинга" строки. Смысл в том, что функция получает стринг типа Code: adasdsad 123 123 123 Короче... Думал сделать так : ищем пробелы, записываем номера элементов в 2 массива (начало, и конец - от первого пробела до следующего). Тупо не получается это реализовать... делаю на подобии этого : Code: int nArgCount = 0; int nArgPosA[10] = {0}, nArgPosB[10] = {0}; for(int i=0;i<strlen(buf);i++) { if(buf[i] == ' ') { nArgPosA[nArgCount] = i; nArgCount++; } } Уже второй день мучаюсь, как бы вытащить номер элемента в buf, где кончается слово... Заранее благодарен.
DeepBlue7 Собственно не понял что тебе нужно сделать, но если разбить строку на слова то вот: Code: #include <iostream> #include <cstring> using namespace std; int main() char delims[]=" "; char str[]="Hello world"; char *tok; tok=strtok(str,delims); while(tok) { cout<<tok<<endl; tok=strtok(NULL,delims); } return 0; } Если же тебе нужно найти первое вхождение "чего то" в строку то используй объект string и его методы find(), rfind(), find_first_of(), find_last_of() и т.д.
return, знаю, плохо разьяснил... Вообщем, функция типа Code: void func(LPCSTR buf) Передается туда строка типа "asdsadad 123 123 123", без ковычек, естественно. Надо разбить каждое слово/набор цыфр на отдельные элементы Что бы после выполнения собственно "разбиения" на выходе бы был массив char asdsadad, и значения int 123, int 123, int 123... Эмм.. вообщем, разделить всё это на юзабельные в функции переменные . Надеюсь, понятно Спасибо за ответ.
Исходник выше дополни функцией atoi. Если она возвращает -1, тогда у тебя строка. Делай strcpy из tok в другую строку. Иначе ты получишь на выходе число.
Доброго времени суток! есть функция для работы с двумерным массивом Code: void hod(int sum,int **mass) { int x; int y; if (sum != -1) { x = sum/10; y = sum%10; mass[x][y]=2; hodVG(sum,mass); hodD(sum,mass); } } Code: int prov(int **mass) { for (int y=0;y<8;y++) { for (int x=0;x<8;x++) { if (mass[x][y] == 0) { return x*10+y; } } } return -1; } вопрос почему когда я обращаюсь к этой функции hod(prov(pole),pole); она работает правильно а при обращении hod(45,pole); нет точнее не происходит вызова hodD(sum,mass); а hodVG(sum,mass); вызывается в обоих случаях
Покажите что в коде неправильно. Code: #include <iostream> using namespace std; class Employee { public: int SetAge( int itsAge ) { Age = itsAge; } int SetYearsOfServise( int itsYearsOfServise ) { YearsOfServise = itsYearsOfServise; } int SetSalary( int itsSalary ) { Salary = itsSalary; } int GetAge() const { return Age; }; int GetYearsOfServise() const { return YearsOfServise; } int GetSalary() const { return Salary; } private: int Age; int YearsOfServise; int Salary; } int main() { Employee Sam; Sam.SetAge(25); Sam.SetYearsOfServise(2); Sam.SetSalary(300); cout<<"sam: "<<Sam.GetAge()<<" Years\t"<<Sam.GetYearsOfServise()<<" Years of servise\t"<<Sam.GetSalary()<<" Salary\n"<<endl; return 0; }
linux c Нужно создать дерево процессов: Code: #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #include <sys/stat.h> #include <errno.h> #include <string.h> #include <fcntl.h> char* convert(char* fbuf, int x) { sprintf(fbuf, "%d", x); return fbuf; } int fproc(int x) { pid_t ppid; ppid=fork(); if(ppid==0) { printf("Дочерний процесс: %d\n",getpid()); printf("Уровень этого процесса: %d\n",x); printf("----------------------------------\n"); int ret; char *args[]={"fork",NULL}; ret=execv("/home/return/lab5/fork",args); if(ret==-1) { fprintf(stderr, "execv\n"); return 1; } } else if(ppid==-1) { fprintf(stderr,"Невозможно создать дочерний процесс\n"); return 1; } else printf("The end\n"); return 0; } int main() { printf("Это дочерний процесс голова: %d\n",getpid()); char buf[10]; int fd_fifo; char *filename="/tmp/fifo1"; if((fd_fifo=open(filename,O_RDWR))<0) { fprintf(stderr, "Невозможно открыть fifo\n"); return 1; } if(read(fd_fifo,&buf,sizeof(buf))==-1) { fprintf(stderr, "Невозможно прочесть fifo\n"); return 1; } int i=atoi(buf); i++; convert(buf,i); write(fd_fifo,buf,strlen(buf)); int j; //pid_t qpid[i]; if(i<7) {//изначально i=3 for(j=0;j<2;i++) fproc(i); int status; pid_t wpid; wpid=waitpid(-1,&status,WNOHANG); if(wpid==-1) { fprintf(stderr,"waitpid\n"); return 1; } //printf("Proverka=%d\n",qpid[j]); } } return 0; } Всё компилится и т.д. нормально, но зацикливается и за пару секунд порождается тысячи процессов, хотя когда i>7 по идеи должно ж закрывается. Соответственно крах системы. Вообщем где то с выходом накосячил и не пойму где.
не i я инкрементирую и сохраняю в канал, короче щас буду в дебагере смотреть мож что то выплывит bad_boy Вот на этой строчке if(read(fd_fifo,&buf,sizeof(buf))<0) отладчик как раз и зависает. Вообщето в канале должна быть цифра 2, первую прогу я не вылаживал так как всё там работает правильно и дабы не засорят тут всё, она всеголиш создаёт канал и записует туда цифру 2 и потом вызывает эту, а эта уже косячит.
return, вникакал в твой код, т.к. не писал под никсы. Только одно место считаю возможным с ошибкой Code: if(read(fd_fifo,&buf,sizeof(buf))==-1) тут ничего не считывается(или считаваются пробелы, к примеру или текст), соответственно, после int i=atoi(buf);, i будет равна нулю, потом инкримент(i++) и так далее.
я так пологаю что ты указал именно на j, но return невнимательный человек. Поясняю: у тебя цыкл крутиться бесконечно. j всегда < 2 потому что ты его не инкрементируешь, а инкрементируешь i. Это раз. Два. Как сказал товарищь bad_boy Code: if(read(fd_fifo,&buf,sizeof(buf))==-1) { fprintf(stderr, "Невозможно прочесть fifo\n"); return 1; } int i=atoi(buf); i++; convert(buf,i); возможно у тебя i совсем не то имеет значение. Потому что, что то не то считывается. Ты смотрел чему у тебя i равно ? Code: if((fd_fifo=open(filename,O_RDWR))<0) { fprintf(stderr, "Невозможно открыть fifo\n"); return 1; } Окак, если первая программа создала канал, и не успел его закрыть, то вторая программа не сможет его открыть на запись. И зачем ты его вообще на запись открываешь ? Ты же только читаешь, ну так и открывай с O_RDONLY