[ C / C++ ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. vikseriq

    vikseriq Elder - Старейшина

    Joined:
    31 Jul 2008
    Messages:
    118
    Likes Received:
    44
    Reputations:
    2
    Не забивай себе голову, делай так:
    Code:
    curr->next  = head = curr;
     
  2. ntldr

    ntldr Elder - Старейшина

    Joined:
    4 Dec 2007
    Messages:
    367
    Likes Received:
    140
    Reputations:
    23
    В чем может быть проблема -
    Создаю ящик и жду данные
    PHP:
    #include <windows.h>
    #include <conio.h>
    #include <iostream>

    using namespace std;

    HANDLE slot;
    char buffer[255];
    int n;

    int main()
    {
        
    slot CreateMailslotA("\\\\.\\mailslot\\mail1",0,MAILSLOT_WAIT_FOREVER,0);
        
    ReadFile(slot,(void*)buffer,7,(LPDWORD)n,0);
        
    cout << buffer;
        
    _getch();
        
    CloseHandle(slot);
        return 
    0;
    }
    Открываю ящик и пишу данные
    PHP:
    #include <windows.h>
    #include <conio.h>
    #include <iostream>

    using namespace std;

    HANDLE h;
    int n;

    int main()
    {
        
    CreateFileA("\\\\.\\mailslot\\mail1",GENERIC_WRITE,FILE_SHARE_READ,0,OPEN_EXISTING,0,0);
        
    WriteFile(h,"testeng",7,(LPDWORD)n,0);
        
    CloseHandle(h);
        return 
    0;
    }
    В то время когда я начинаю писать в ящик, оба приложения вылетают с ошибкой "Память не может быть written.
     
  3. ToniKapuchon

    ToniKapuchon Elder - Старейшина

    Joined:
    26 Feb 2006
    Messages:
    153
    Likes Received:
    45
    Reputations:
    -1
    Клиент:
    PHP:
    #include "stdafx.h"
    #include <stdio.h>
    #include <conio.h>
    #include <windows.h>

    int _tmain(int argc_TCHARargv[])
    {
        
    HANDLE hFile;
        
    char *servName "\\\\.\\Mailslot\\Laba2", *p;
        
    char s[20];
        
    s;
        
    DWORD d 20;                
        
    LPDWORD lp = &d;
        
    //открываем существующий файл или создаем новый
        
    hFile CreateFile(servNameGENERIC_WRITE FILE_SHARE_READ,
                
    NULLOPEN_EXISTINGFILE_ATTRIBUTE_NORMALNULL);
        if(
    hFile == INVALID_HANDLE_VALUE)
          
    puts("Error server create!!!");
        else
        {
          
    puts("Ok server find!!!");
          
    puts("Please enter some text in file:");
          
    gets(p);
          
    //присваиваем концу строки нулевой символ
          
    s[strlen(s)]='\0';
          
    //запись в файл
          
    WriteFile(hFilesstrlen(s), lpNULL);
          
    gets(p);
          
    CloseHandle(hFile);
        }
        return 
    0;
    }
    Сервер:
    PHP:
    #include "stdafx.h"
    #include <stdio.h>
    #include <conio.h>
    #include <windows.h>
    #include <iostream>
    using namespace std;
    int _tmain(int argc_TCHARargv[])
    {
        
    HANDLE pMailslot;
        
    char *servName "\\\\.\\Mailslot\\Laba2", *p;
        
    char s[5];

        
    s;

        
    DWORD d 150;
        
    LPDWORD lp = &d;
        
    pMailslot CreateMailslot(servName0MAILSLOT_WAIT_FOREVERNULL);

        if(
    pMailslot == INVALID_HANDLE_VALUE)
          
    cout<<"Don't create!!!";
        else
          
    cout<<"Create server!!!";
        
        
    //считывем из файла 7 байт
        
    BOOL res ReadFile(pMailslotp5lpNULL); 
        
    cout<<endl;
        
    cout<<" Message from client: "<<endl;
        
    p[5]='\0';
        
    cout<<p<<endl;
        
    CloseHandle(pMailslot);
        
    int a;
        
    cin>>a;
    }
    Попробуй ето!! всё рабоать должно!!
     
    1 person likes this.
  4. Zitt

    Zitt Elder - Старейшина

    Joined:
    7 May 2006
    Messages:
    736
    Likes Received:
    268
    Reputations:
    59
    Вобщем нужно небольшой скриптик который выводит список папок в фаил.. Например;
    /home/$papka/user/$papka1
    Имя папки1 нужно записать фаил....
    т.е. заходим в /home/ получае имя всех директорий, заходим в подпапку /users/ опять получаем название папок и записываем в фаил.. и так в цикл...

    новояйте кому не трудно...
     
    1 person likes this.
  5. ToniKapuchon

    ToniKapuchon Elder - Старейшина

    Joined:
    26 Feb 2006
    Messages:
    153
    Likes Received:
    45
    Reputations:
    -1
    имеется переменная char следующего содержания:
    + bios_char 0x0012ee1c "021102E04BF90102000000000" char [51]

    Как получить из первых двух байт 20 значения 512? типа из дампа десятичное значение!!
     
  6. jawbreaker

    jawbreaker Elder - Старейшина

    Joined:
    7 Jul 2008
    Messages:
    156
    Likes Received:
    76
    Reputations:
    3
    Zitt
    Code:
    #include <sys/types.h>
    #include <dirent.h>
    #include <errno.h>
    #include <vector>
    #include <string>
    #include <iostream>
    
    using namespace std;
    
    int getdir (string dir, vector<string> &files)
    {
        DIR *dp;
        struct dirent *dirp;
        if((dp  = opendir(dir.c_str())) == NULL) {
            cout << "Error(" << errno << ") opening " << dir << endl;
            return errno;
        }
    
        while ((dirp = readdir(dp)) != NULL) {
            files.push_back(string(dirp->d_name));
        }
        closedir(dp);
        return 0;
    }
    
    int main()
    {
        string dir = string(".");
        vector<string> files = vector<string>();
    
        getdir(dir,files);
    
        for (unsigned int i = 0;i < files.size();i++) {
            cout << files[i] << endl;
        }
        return 0;
    }
    
     
  7. criz

    criz Elder - Старейшина

    Joined:
    4 Nov 2007
    Messages:
    293
    Likes Received:
    40
    Reputations:
    6
    2 Zitt, вот еще примерчик, откопал в ахивах :)
    Code:
    #include <windows.h>
    #include <stdio.h>
    #include <conio.h>
    
    #define MAX 100
    
    void FindDir();
    
    main(int argc, char *argv[])
    {
       
    	FindDir("C:\\", "*.*");
    }
    void FindDir(char* path,char* mask)
    {
    
        WIN32_FIND_DATA wfd;    
    	char file[100] = "";
        HANDLE hfound;  
        char newpath[MAX_PATH]; 
        char fpath[MAX_PATH];   
        char delpath[MAX_PATH];
    	FILE *f;
    
        strcpy(fpath,path); 
        strcat(fpath,"\\"); 
        strcpy(delpath,fpath);  
        strcat(fpath,mask); 
     
    	f = fopen("dirs.txt", "a");
     
        if((hfound=FindFirstFile(fpath,&wfd))!=INVALID_HANDLE_VALUE)    
            {
            if(!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)&&strcmp(wfd.cFileName,"..")&&strcmp(wfd.cFileName,"."))   
                {
                //  
    			printf("Error: %d\n", GetLastError());
                }
            while(FindNextFile(hfound,&wfd))    
            {   
    			int i = 1;
                if(!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)&&strcmp(wfd.cFileName,"..")&&strcmp(wfd.cFileName,"."))   
                {
    				i = 0;
                 }
    		if(i && (strcmp(wfd.cFileName, "..") != NULL))
    			fprintf(f, "%s\n", wfd.cFileName);
                }
            }
        fclose(f);
        
        FindClose(hfound);  
    
        strcpy(fpath,path); 
        strcat(fpath,"\\*.*");  
        
        if((hfound=FindFirstFile(fpath,&wfd))!=INVALID_HANDLE_VALUE)    
            {
            if((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)&&strcmp(wfd.cFileName,"..")&&strcmp(wfd.cFileName,"."))    
                {
                strcpy(newpath,path);   
                strcat(newpath,"\\");   
                strcat(newpath,wfd.cFileName);  
                FindDir(newpath,mask);
                }
            
            while(FindNextFile(hfound,&wfd))    
                {
                if((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)&&strcmp(wfd.cFileName,"..")&&strcmp(wfd.cFileName,"."))    
                    {
                    strcpy(newpath,path);   
                    strcat(newpath,"\\");   
                    strcat(newpath,wfd.cFileName);  
                    FindDir(newpath,mask);
                    }
                }
            }
        }
    
     
    1 person likes this.
  8. 4erry

    4erry New Member

    Joined:
    9 Nov 2008
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    вывод матрицы на форму

    помогите пожалуйста с выводом матрицы на форму...
    вот код самой программы: (это вывод просто на консольку)

    Code:
    /* Сформировать квадратную матрицу A(15,15) следующего вида:
     * 0 0 0 ... 0 1
     * 0 0 0 ... 1 0
     * .............
     * 0 1 0 ... 0 0
     * 1 0 0 ... 0 0
    */
    
    using System;
    
    namespace Task2
    {
        class ArrayDemo
        {
            public static void Main(string[] args)
            {
                Console.Title = "";
                Console.BackgroundColor = ConsoleColor.White;//цвет формы
                Console.ForegroundColor = ConsoleColor.Black;//цвет текста формы
    
                do
                {
                    const uint N = 15;
    
                    int[,] A = new int[N, N];
    
                    Console.Clear();
    
                    solution(A, N);
                    write(A, N);
                    Console.WriteLine();
    
                    Console.WriteLine("Нажмите Esc для выхода!");
                } while (Console.ReadKey(true).Key != ConsoleKey.Escape);
            }
    
            static void solution(int[,] arr, uint l)
            {
                for (int i = 0; i < l; i++)
                    for (int j = 0; j < l; j++)
                        if (i + j == l - 1)
                            arr[i, j] = 1;
            }
    
            static void write(int[,] arr, uint l)
            {
                for (int i = 0; i < l; i++,Console.WriteLine())
                    for (int j=0;j<l;j++)
                    Console.Write(arr[i,j] + " ");
            }
        }
    }
    
    а вот программка,где я создаю формочку...

    Code:
    using System;
    using System.Windows.Forms;
    using System.Drawing;
    
    class ButtonForm : Form
    {
        Button MyButton;
        Button StopButton;
        Label lblOutput;
    
        public ButtonForm()
        {
            Text = "Кнопочки";
    
            lblOutput =new Label();
    
            MyButton = new Button();
            MyButton.Text = "Start";
            MyButton.Location = new Point(100, 200);
    
            StopButton = new Button();
            StopButton.Text = "Exit";
            StopButton.Location = new Point(200, 200);
    
            //добавляем в список обработчик событий кнопки.
            MyButton.Click += new EventHandler(MyButtonClick);
            Controls.Add(MyButton);
            StopButton.Click += new EventHandler(StopButtonClick);
            Controls.Add(StopButton);
        }
    
        [STAThread]
        public static void Main()
        {
            ButtonForm skel = new ButtonForm();
            Application.Run(skel);
        }
    
        //обработчик для кнопки MyButton.
        protected void MyButtonClick(object who, EventArgs e)
        {
            lblOutput.Location = new Point(20, 40);
            lblOutput.Size = new Size(216, 24);
    
            lblOutput.Text = "1 2 3 4 5\n1 2 3 4 5\n";
            lblOutput.Location = new Point(40, 40);
            Controls.Add(lblOutput);
        }
    
        //обработчик событий для кнопки StopButton.
        protected void StopButtonClick(object who, EventArgs e)
        {
            //если пользователь ответит щелчком на кнопке Yes,
            //программа будет завершена.
            DialogResult result = MessageBox.Show("Остановить программу?",
                "Завершение",
                MessageBoxButtons.YesNo);
            if (result == DialogResult.Yes)
                Application.Exit();
        }
    }
    
    вопрос в том,как вывести матрицу из первого кода на форму из второго??? с помощью Label.Text не получается=((помогите пожалуйста..
    П.С.прога делается в C#
     
  9. ToniKapuchon

    ToniKapuchon Elder - Старейшина

    Joined:
    26 Feb 2006
    Messages:
    153
    Likes Received:
    45
    Reputations:
    -1
    имеется char[] , там храниться hex значение, как перевести в десятичное ?? с меня плюсы!
     
  10. krypt3r

    krypt3r Elder - Старейшина

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Code:
    strtol (str, NULL, 16);
    
     
    1 person likes this.
  11. VIP

    VIP Elder - Старейшина

    Joined:
    29 Dec 2004
    Messages:
    104
    Likes Received:
    3
    Reputations:
    0
    У меня следующий вопрос по С:

    у меня есть переменная as типа char. мне нужно, чтобы прога сделала а=float(as), то есть перевела эту строку в вещественное число.

    В книге нашёл такую функцию как strtod, но в ней нужно указывать саму строку(это понятно) и символ, на котором строка заканчивается :confused:

    Это какой же мне нужно нописать там символ, если у меня в строке ничего кроме этого числа нет?

    Вот код проги, на всякий случай, может поможет =):
    Code:
    # include <stdio.h>
    # include <string.h>
    # include <stdlib.h>
    
    int main() {
        int stop, i;
        float A[1024], B[1024], a;
        char end[]="END", as[30];
        i=1;
        stop=0;
        while (stop=0) {
              printf("\nEnter a, please:\n");
              gets(as);
              if (strcmp(as, end)==0) {
                             stop=1;
                             }
              else {
                   a=strtod(as, );
                   A[i-1]=a;
                   i=i+1;
                   printf()
                   }
    }
    
     
  12. jawbreaker

    jawbreaker Elder - Старейшина

    Joined:
    7 Jul 2008
    Messages:
    156
    Likes Received:
    76
    Reputations:
    3
    http://www.cplusplus.com/reference/clibrary/cstdlib/strtod.html
    вот пример оттуда:
    PHP:
    /* strtod example */
    #include <stdio.h>
    #include <stdlib.h>

    int main ()
    {
      
    char szOrbits[] = "365.26 27.32";
      
    char pEnd;
      
    double d1d2;
      
    d1 strtod (szOrbits,&pEnd);
      
    d2 strtod (pEnd,NULL);
      
    printf ("The moon completes %.2lf orbits per Earth year.\n"d1/d2);
      return 
    0;
    }
     
  13. bons

    bons Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    не надо функций для перевода в вещественное
    Code:
    #include <stdio.h>
    
    int main(void)
    {
    	int x = 6;
    	float y;
    	scanf("%f",&y);
    	printf("%f",y);
    	return 0;
    }
     
    #1813 bons, 10 Nov 2008
    Last edited: 10 Nov 2008
  14. VIP

    VIP Elder - Старейшина

    Joined:
    29 Dec 2004
    Messages:
    104
    Likes Received:
    3
    Reputations:
    0
    Чё то вот здесь я совсем не пойму
    во-первых зачем нужно вводить х=6 ?
    и во-вторых мне нельзя сразу делать переменную типа float, так как с клавы можно ввести и слово и тогда прога вылетает с ошибкой :(
     
  15. groupby

    groupby Elder - Старейшина

    Joined:
    21 Sep 2008
    Messages:
    30
    Likes Received:
    13
    Reputations:
    0
    Думаю, вот решение:

    Code:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    int main()
    {
        int i = 0;
    	char as[30];
        double A[1024];       
        while(1)
    	{
    		printf("\nEnter a, please:\n");
            gets(as);
            if (!strcmp(as, "END"))		
    			break;        			
    		A[i++] = strtod(as, NULL);
    	}
    	printf("Result values:\n");
    	for(int j = 0; j < i; j++)
    		printf("%f\t", A[j]);
    }
    
    Вот пример обработки:

    Code:
    Enter a, please:
    123
    
    Enter a, please:
    asdfg
    
    Enter a, please:
    456
    
    Enter a, please:
    END
    Result values:
    123.000000      0.000000        456.000000
    
     
    1 person likes this.
  16. bons

    bons Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    ты прав x=6 не нужно, эт мне бухать надо меньше;)
    а вот прога с ошибкой вылетать не должна никак
     
  17. 0x0c0de

    0x0c0de Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    441
    Likes Received:
    396
    Reputations:
    297
    >>кто знает, как загрузить файл с url на диск? код нужен очень на C/C++

    1 функция

    http://msdn.microsoft.com/en-us/library/ms775123(VS.85).aspx
     
    1 person likes this.
  18. NetSter

    NetSter Moderator

    Joined:
    30 Jul 2007
    Messages:
    810
    Likes Received:
    414
    Reputations:
    62
    помогите найти где я втыканул в коде...

    есть функция RUN которая берет значение, полученное с листбокса диалога, передает его в подключаемую DLL библиотеку, которая должна приплюсовать к этому значению 3 и вернуть в RUN результат. Потом функция RUN выводит результат не экран.
    вот что накодил...

    Code:
    void CMyFrameWin::OnRun()
    {
    	[B][COLOR=DarkOrange]/*  
            char s[80];                         // проверка доходит ли Number до передачи в DLL
    	CClientDC dc(this);                 // проверка доходит ли Number до передачи в DLL
    	wsprintf(s,"Number is %d",Number);  // проверка доходит ли Number до передачи в DLL
    	dc.TextOut(100,200,s);              // проверка доходит ли Number до передачи в DLL
        */[/COLOR][/B]
        int res;
    	HINSTANCE hDll;
    	char s[100];
    	hDll=::LoadLibrary("MyDll");
    	typedef int (*FUN)(int);
    	FUN func;
    	func=(FUN)::GetProcAddress(hDll, "calc");
    	res=(*func)(Number);
    	sprintf(s,"%f", res);
    	MessageBox(s,"Result");
    	 //создание и запись результата в файл
         FILE *result;
    	 result=fopen("result.txt","w");
    	 fprintf(result,"%f",res);
    	 fclose(result); 
      
     
      }
    
    значение Number в функцию RUN доходит нормально (проверка выводом на экран без использования DLL)

    собственно сам код DLL библиотеки: MyDll
    Code:
    #include "stdafx.h"
    #include <conio.h>
    
    int calc(int Number)
    {
    	int r=Number;
    	int res;
            res=r+3;
    	return res;
    }
    
    и код файлика MyDll.def
    Code:
    LIBRARY      "MyDll"
    DESCRIPTION 'This library has one function'
    EXPORTS
      calc @1
    
    
    независимо от того какое значение Number получает функция RUN от листбокса диалога (а получает постоянно точно то же что я выбрал в диалоге, я проверял без подключения DLL простым выводом) получаем постоянно в результате НОЛЬ...

    [​IMG]

    я уже хз где я мог втыкануть.... может тому кто долго не втыкал этот бред на свежую голову все покажется просто и укажет на траблу..
    Заранее спасибо за любой ответ.
     
    _________________________
  19. Lee_fx

    Lee_fx Elder - Старейшина

    Joined:
    27 Sep 2008
    Messages:
    90
    Likes Received:
    14
    Reputations:
    0
    Доброго времени суток, появилась такая проблемка c алгоритмом Хаффмана:
    Имеется массив содержащий набор двоичныч кодов ( пр. char a[3][3] = {{'0','0','0'},{'1','0','1'},{'1','1','1'}}; ) для букв a, b, c. Как в файле поменять каждую a, b и c на ее двоичный код? Совсем чего-то запутался, ведь нет же переменных, которые хранят двоичный код? А с этим чаром что так 8 байт что так =(
     
  20. NetSter

    NetSter Moderator

    Joined:
    30 Jul 2007
    Messages:
    810
    Likes Received:
    414
    Reputations:
    62
    если я тебя правильно понял то те нужно открыть файл и читать посимвольно. если встречается тот символ что нужен то заменить на код..
    почему бы не использовать код из 3-х цифр как строку? а сделать поиск по файлу и использовать замену строк (типа как replacestr() )...
     
    _________________________
Thread Status:
Not open for further replies.