[ 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. return

    return New Member

    Joined:
    23 Oct 2010
    Messages:
    125
    Likes Received:
    3
    Reputations:
    1
    действиетльно, ошибка сегментации выскакивала но думал что так и должно))) просто добавил строку перед printf:
    Code:
    if(type!="file") continue;
    
    Но теперь как вывести по алфавиту? в с++ это решалось методами ооп легко, а вот как в обычно С? В гугле что то нашел, пошел разбираться, но мож кто что подкинет =)
     
  2. cupper

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

    Joined:
    6 Jun 2007
    Messages:
    369
    Likes Received:
    92
    Reputations:
    5
    собирай вначале строки в массив, затем сортируй его потом только выводи, в чем проблема ?

    так же предлогаю сделать понт ушами и в место всего кода написать
    Code:
    #include <stdlib.h>
    int main()
    {
    system("ls -l");
    }
    
    :)
     
  3. nor

    nor New Member

    Joined:
    15 Aug 2010
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Visual Studio 2010

    Создал Windows Froms проект.

    В коде


    Code:
    #include "stdafx.h"
    #include "Form1.h"
    #include <process.h>
    #include <stdio.h>
    
    using namespace test2;
    
    void B()
    	{
    		_endthread();
    	};
    
    [STAThreadAttribute]
    int main(array<System::String ^> ^args)
    {
    	Application::EnableVisualStyles();
    	Application::SetCompatibleTextRenderingDefault(false); 
    
    	_beginthread(B, 0, NULL);
    
    	Application::Run(gcnew Form1());
    	return 0;
    }
    Ошибка: error C2664: _beginthread: невозможно преобразовать параметр 1 из "void (__clrcall *)(void)" в "void (__cdecl *)(void *)"

    Пробовал _beginthread((void(*)(void*))B, 0, NULL); вместо _beginthread(B, 0, NULL); - так работает в VS 2008, но в VS 2010 не помогло.
    Как мне запустить отдельный поток?

    ---------
    В настройках проекта в "Поддержка общеязыковой среды выполнения" поставил "Поддержка общеязыковой среды выполнения (CLR) (/clr)"

    И переписал как

    Code:
    #include "stdafx.h"
    #include "Form1.h"
    #include <windows.h>
    #include <process.h>
    #include <stdio.h>
    
    using namespace test2;
    
    [COLOR=DarkRed]void __cdecl[/COLOR] B( void* pArguments )
    	{
    		_endthread();
    	};
    
    [STAThreadAttribute]
    int main(array<System::String ^> ^args)
    {
    	Application::EnableVisualStyles();
    	Application::SetCompatibleTextRenderingDefault(false); 
    
    	_beginthread([COLOR=DarkRed]&[/COLOR]B, 0, NULL);
    
    	Application::Run(gcnew Form1());
    	return 0;
    }
    Возник следующий вопрос:
    Пусть есть класс
    Code:
    public ref class A
    	{
    	public: 
    		static void __cdecl B( void* pArguments );
    	};
    Пусть я пытаюсь
    Code:
    _beginthread(A::B, 0, NULL);
    Возникают ошибки:
    Code:
    warning C4441: соглашение вызова "__cdecl " игнорируется; вместо него используется "__clrcall "
    error C2664: _beginthread: невозможно преобразовать параметр 1 из "void (__clrcall *)(void *)" в "void (__cdecl *)(void *)"
    Как вызвать функцию B класса A в новом потоке?
     
    #6163 nor, 4 Mar 2011
    Last edited: 4 Mar 2011
  4. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    По-вашему, можно .NET-методы запускать в нативных си-потоках? В .NET фреймворке вообще-то есть собственный класс для создания потоков, а _beginthread - это нативная функция си.
     
  5. derk

    derk New Member

    Joined:
    9 Feb 2011
    Messages:
    9
    Likes Received:
    3
    Reputations:
    -8
    есть вопрос у меня есть скрипт на С++ мне его нужно сделать в ехе!как и чем можно только не сильно весомым а то интернет слабый
     
  6. arnis

    arnis Member

    Joined:
    30 Jan 2011
    Messages:
    280
    Likes Received:
    23
    Reputations:
    0
    Пришли кому то код тебе откомпилят.
    Самому с хилыи инетом и без познаний будет сделать не просто но возможно.
     
  7. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    Используйте онлайн компилятор. Например этот:
    http://liveworkspace.org/
     
  8. Jakeroid

    Jakeroid Member

    Joined:
    9 May 2009
    Messages:
    199
    Likes Received:
    12
    Reputations:
    1
    Code:
    есть вопрос у меня есть скрипт на С++ мне его нужно сделать в ехе!как и чем можно только не сильно весомым а то интернет слабый
    Вот еще онлайн:
    http://codepad.org/
    Если 50 мб скачать можешь, гугли wxDev-C++.
     
  9. MaTpOc

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

    Joined:
    5 May 2008
    Messages:
    633
    Likes Received:
    475
    Reputations:
    25
    помогите пожалуйста решить задачу на Си.

    Пoльзователь ввoдит числa oт 1 дo 9, операция продолжaется пока oн не введет число 7. Желательно, когда пользователь вводит отрицательныe числa выводить на экрaн что нельзя этогo делать!
     
    #6169 MaTpOc, 6 Mar 2011
    Last edited: 6 Mar 2011
  10. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    Code:
    #include <stdio.h>
    
    int main() {
    	int number = 0;
    
    	do {
    		scanf( "%d", &number );
    
    		if( number < 0 )
    			printf( "Hey, you...!\n" );
    	} while ( number != 7 );
    
    	return 0;
    }
    
    Но Вы не указали, нужно записывать куда то эти числа, или нет.
     
    1 person likes this.
  11. probm

    probm New Member

    Joined:
    9 Jul 2010
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    TStringList *mail= new TStringList();
    TStringStream *result= new TStringStream("");
    mail->Add("yourname="+Edit1->Text);
    mail->Add("from="+Edit2->Text);
    mail->Add("to="+Edit3->Text);
    mail->Add("subject="+Edit4->Text);
    mail->Add("message="+Memo1->Text);
    if(RadioButton1->Checked) mail->Add("type=plain");
    else mail->Add("type=html");

    IdHTTP1->Post("http://4dzen.ru/anonymous-mail/",mail,result);
    result->SaveToFile("in.htm");

    почему в результате ничего не отправляется, подскажите плз
     
  12. return

    return New Member

    Joined:
    23 Oct 2010
    Messages:
    125
    Likes Received:
    3
    Reputations:
    1
    C

    Прохожу главу о процессах в линухе. Есть вот такая задачка:
    процесс потомок вычисляет мат. выражение и записывает его в файл, дочерний процесс считывает данные с файла и выводит на экран до тех пор пока не поступит на него команда STOP от потомка.
    Сложного ничего нету, но не могу понять процесс взаимодействия между процессами. Вообщем постараюсь объяснить как я понимаю всё это:
    Code:
    //вычисление и запись в файл тута всё ясно
    ...
    pid_t pid;
    int status;
    pid=fork(); //создаю дочерний процесс
    if(pid==-1) return 1;
    else {/* ... exit()*/} //тута вопрос: если процесс создан удачно то все операции что в фгурных скобках сдесь будут относиться к нему? или же к предку?
    //как передать процессу слово STOP?
    do 
    pid=wait(&status);
    while(WIFEXITED(status))
    return 0;
    
    вообщем каша в голове -(
     
  13. cupper

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

    Joined:
    6 Jun 2007
    Messages:
    369
    Likes Received:
    92
    Reputations:
    5
    почитай www.opennet.ru/man.shtml?topic=fork&category=2

    fork разветвляет ниже идущий код над два разных процесса.
    Родительский процес получает pid потокмка (или -1 если потомок не смог быть порожден), процесс-потомок в качестви пида получает 0. Таким образм код следующий ниже fork() нужно поделить на if else что бы разделить что будет делать родиткль а что потомок.
    Code:
    pid=fork(); //создаю дочерний процесс
    if(pid==-1) return 1;
    else if(pid == 0){ код для потомка}
    else {код для родителя}
    На счет сигнала тут же http://www.opennet.ru/cgi-bin/opennet/man.cgi?topic=wait&category=2

    сам я этим не пользовался, но не думаю что там шибко сложно. Ты уже почти все правильно написал. Один делает wait другой делает.
    Возможно потребуется зарегисрировать свой обработчик для сигнала стоп, это вот тут http://www.opennet.ru/cgi-bin/opennet/man.cgi?topic=signal&category=2
    А сам сигнал каеться посылается с помощью kill http://www.opennet.ru/cgi-bin/opennet/man.cgi?topic=kill&category=1
     
  14. MaTpOc

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

    Joined:
    5 May 2008
    Messages:
    633
    Likes Received:
    475
    Reputations:
    25
    помoгитe сдeлать фoрмулу на Си.

    ((х+1)/x)+((х+2)/x)+((х+3)/x)+....((x+n)/x)
     
  15. bad_boy

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

    Joined:
    30 Dec 2004
    Messages:
    187
    Likes Received:
    33
    Reputations:
    3
    Code:
    float x = ??;
    int n = ??;
    float sum = 0;
    for(int i=1;i<=n;i++)
    {
        sum+=(x+n)/x;
    }
     
    1 person likes this.
  16. Leyjin25

    Leyjin25 New Member

    Joined:
    10 Nov 2010
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Нужен совет, какие БД в связке с С++ сейчас популярны ? Закончил изучение языка куда дальше двигаться незнаю, решил взять БД+C++ думаю это всегда пригодится? ))
     
  17. elite

    elite New Member

    Joined:
    6 Mar 2011
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    а есть возможность заставить выводить данные на экран с задержкой например в секунду? т.е. сначала одно, через секунду другое и т.д.
     
  18. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    если под венду.

    Code:
    VOID WINAPI Sleep(
      __in  DWORD dwMilliseconds
    );
     
  19. elite

    elite New Member

    Joined:
    6 Mar 2011
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    а что здесь за что отвечает? и какие библиотеки надо ещё подключать?
     
  20. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    Пример:
    Code:
    #include <iostream>
    #include <windows.h>
    
    int main( int argc, char *argv[] ) {
    	std::cout << "1\n";
    	Sleep( 1000 );
    	std::cout << "2\n";
    
    	return 0;
    }
    
     
Thread Status:
Not open for further replies.