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

    KI11obyte New Member

    Joined:
    8 Nov 2005
    Messages:
    29
    Likes Received:
    2
    Reputations:
    0

    пробегаем от 2 до половины текущего числа, и если находим хоть один делитель этого числа (то что делит нацело) то число не простое. Правильнее кстати будет пробегать от 2 до квадратного корня этого числа
     
  2. Edward

    Edward Banned

    Joined:
    11 Feb 2010
    Messages:
    329
    Likes Received:
    21
    Reputations:
    -1
    .......
     
  3. scroollocker

    scroollocker New Member

    Joined:
    14 Jun 2009
    Messages:
    13
    Likes Received:
    1
    Reputations:
    0
    Привет.
    Есть такой код:
    Code:
    
    #include <iostream>
    
    int main()
    {
     for (int i = 1; i<=100; i++)
      {
       std::cout << (!(i % 2) ? "Hello" : i) << std::endl; //вылазиит ошибка
      }
     return 0;
    }
    
    
    как можно через конструкцию ? : вставить i? Или как правильно все исправить, чтобы работало?
     
  4. Irdis

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

    Joined:
    6 Feb 2006
    Messages:
    248
    Likes Received:
    52
    Reputations:
    3
    !(i%2)? std::cout<<"Hello":std::cout<<i;
     
  5. scroollocker

    scroollocker New Member

    Joined:
    14 Jun 2009
    Messages:
    13
    Likes Received:
    1
    Reputations:
    0
    Спасибо. Но а если увеличить данну строку допустим до такого:
    Code:
       std::cout << ((!(i % 2) ? "Hello" : 
                    (!(i % 5) ? "World" : 
                    ((!(i % 2) && !(i % 5)) ? "HelloWorld" : i))) 
                 << std::endl;
    
     
    #6065 scroollocker, 10 Jan 2011
    Last edited: 10 Jan 2011
  6. Irdis

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

    Joined:
    6 Feb 2006
    Messages:
    248
    Likes Received:
    52
    Reputations:
    3
    тогда Google int to const char*
    и применить к i
    И принтить только строки!
    Дело в том что компилятор не может выбрать специализацию <<.
     
    1 person likes this.
  7. шёпот

    шёпот New Member

    Joined:
    8 Jan 2011
    Messages:
    2
    Likes Received:
    1
    Reputations:
    0
    Помогите плиз...У компании собрана статистика по расходам и доходам за прошлый год в каждом месяце. Налог на прибыль - 10%. Отсортировать данные по возрастанию величины уплаченных налогов.
     
  8. Vollkorn

    Vollkorn Member

    Joined:
    6 Nov 2010
    Messages:
    86
    Likes Received:
    15
    Reputations:
    -6
    Например записываешь всё в какой-нибудь вектор и используешь встроенную функцию сортировки
     
  9. #Smith

    #Smith New Member

    Joined:
    20 Jun 2010
    Messages:
    96
    Likes Received:
    2
    Reputations:
    0
    Код на C#:
    Code:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                System.Diagnostics.Process proc = new System.Diagnostics.Process();
                proc.StartInfo.FileName = "cmd.exe";
                proc.StartInfo.UseShellExecute = false;
                proc.StartInfo.RedirectStandardOutput = true;
                proc.StartInfo.RedirectStandardInput = true;
                proc.StartInfo.CreateNoWindow = true;
    
                proc.Start();
                proc.StandardInput.WriteLine(@"dir c:\"); //"ping localhost" 
                string line;
                /* После считывания всех строк происходит зависание */
                while ((line = proc.StandardOutput.ReadLine()) != null)
                {
                    Console.WriteLine(line);
                }
                //proc.StandardInput.WriteLine("exit");
                //proc.WaitForExit();
                proc.Close();
                Console.Read();
            }
        }
    }
    Что нужно сделать, чтобы не повисать на цыкле, но считать всё из потока?
     
    #6069 #Smith, 11 Jan 2011
    Last edited: 11 Jan 2011
  10. BrainDeaD

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

    Joined:
    9 Jun 2005
    Messages:
    774
    Likes Received:
    292
    Reputations:
    214
    вся проблема в том, что условие
    Code:
                (line = proc.StandardOutput.ReadLine()) != null
    
    - неверно.

    Правильно было бы проверять на пустую строку:
    Code:
                (line = proc.StandardOutput.ReadLine()) != String.Empty
    
    но в результате так же есть пустые строки, из-за чего выдача информации прерывается преждевременно. в моём случае пустых строк 3. по этому, как вариант - считать пустые строки, и прекращать тогда, когда число пустых строк достигнуто.
    Code:
                string line;
                int count = 0;
                while (count < 4)
                {
                    line = proc.StandardOutput.ReadLine();
                    Console.WriteLine(line);
                    if (line == String.Empty)
                    {
                        count++;
                    }
                }
     
  11. #Smith

    #Smith New Member

    Joined:
    20 Jun 2010
    Messages:
    96
    Likes Received:
    2
    Reputations:
    0
    Не вариант!
    Это команда дана для примера.
    И зависание происходит не в бесконечном цыкле, а когда всё считано и ещё раз вызывается ReadLine.
    Тоесть получается такой ступор.
    ReadLine ждёт данных которых нет, и не возникает ни исключения ни какого-либо возвращаемого значения.
    Вот она и висит в ожидании неизвестно чего.
    Может есть какой способ узнать, что все данные считаны, чтобы избежать этого ступора?
     
  12. X-rus

    X-rus Member

    Joined:
    22 Dec 2010
    Messages:
    88
    Likes Received:
    22
    Reputations:
    4
    #Smith
    Используй какой-нибудь спец. символ, означающий, что достигнут конец данных.

    Пример:
    if (line.IndexOf("\0") != -1)
    {
    break;
    }
     
  13. Jakeroid

    Jakeroid Member

    Joined:
    9 May 2009
    Messages:
    199
    Likes Received:
    12
    Reputations:
    1
    Вопрос, чем отличаются эти два куска кода:
    Code:
    char *query=(char*)malloc(2048)
    Code:
    char *query = new char[2048];
    Если я правильно понял, то первый вариант это "С", а второй "С++"? Просто в VS2008 C++ работают оба.
    Если так, то наверно стоит пользоваться вторый, С++'ым вариантом?

    И сразу еще вопрос. В эту переменную я собераюсь засунуть HTTP GET запрос.
    Как лучше сделать:
    Code:
    strcpy(query,"GET /");
    strcat(query,http_path);
    strcat(query," HTTP/1.0\nHost: ");
    strcat(query, BLA_BLA);
    ...
    Code:
    query = "GET /";
    query += http_path;
    query += "HTTP/1.1\nHost: ");
    query += BLA_BLA;
    ...
    Спасибо.

    P.S. Возможно вопрос неадекватен, извените меня тогда. Пересаживаюсь с Delphi на C++, в голове каша.
     
    #6073 Jakeroid, 12 Jan 2011
    Last edited: 12 Jan 2011
  14. X-rus

    X-rus Member

    Joined:
    22 Dec 2010
    Messages:
    88
    Likes Received:
    22
    Reputations:
    4
    Оператор new относится к C++.

    Если работаешь с C++, то для строк лучше использовать класс std::string. Тогда, для конкатенации строк можно использовать оператор +=.

    P.S. Лучше тебе почитать книги, так как это основы и их нужно хорошо понимать.
     
  15. Jakeroid

    Jakeroid Member

    Joined:
    9 May 2009
    Messages:
    199
    Likes Received:
    12
    Reputations:
    1
    Я и читаю, на ходу пробую сразу что-то делать. Так что, в голове каша.
    То есть правильно следующий код:
    Code:
    std::string quare;
    query = "GET /";
    query += http_path;
    query += "HTTP/1.1\nHost: ");
    query += BLA_BLA;
    ...
     
  16. X-rus

    X-rus Member

    Joined:
    22 Dec 2010
    Messages:
    88
    Likes Received:
    22
    Reputations:
    4
    Странно. Если ты читаешь книгу по С++, то там не должно быть таких вещей, как - (char*)malloc(2048) или strcpy. ;)

    Скорее, просто удобнее и лучше.
    Пример:
    Code:
    ...
    using namespace std;
    ...
    string name("john");
    string str("Hi ");
    
    str += "mister";
    str += name;
     
  17. darckmilord

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

    Joined:
    8 Feb 2007
    Messages:
    50
    Likes Received:
    14
    Reputations:
    0
    как получить возвращаемое функцией значение

    [CPP]

    есть некая функция: char* RoomGetText( int A, int B );

    вопрос, как правильно списвоить возвращаемое ею значение в переменную типа char*

    пробовал strcpy но ругается на соответствие типов, руками так побрутфорсил к явному приведению типа не помогло, либо эксепшен либо ругаетс что пишу бред типа "указатель совокупляете с сылкой"
     
  18. KATYA

    KATYA Active Member

    Joined:
    9 Feb 2009
    Messages:
    236
    Likes Received:
    121
    Reputations:
    9
    char имя_переменной = (char) RoomGetText( int A, int B );
     
    2 people like this.
  19. darckmilord

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

    Joined:
    8 Feb 2007
    Messages:
    50
    Likes Received:
    14
    Reputations:
    0
    спасибо а не подскажите еще как эту переменную правильно объявить, потому как работает но не выдодит, хотя если выводить непосредственно RoomGetText( int A, int B ); а если через промежуточную переменную то нет. Может под нее память как то выделять, хотя я и так ей четко 256 прописал но не выводит(.

    на данный момент объявлена переменная глобально:
    char* text[256];
     
    #6079 darckmilord, 13 Jan 2011
    Last edited: 13 Jan 2011
  20. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    Code:
    char *xrenota=RoomGetText( a, b );
    printf("%s",xrenota);
    Покажи код функции
     
    _________________________
    1 person likes this.
Thread Status:
Not open for further replies.