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

    awdrg Member

    Joined:
    30 Jan 2009
    Messages:
    195
    Likes Received:
    31
    Reputations:
    1
    при разных значениях srand() появляются разные значения выходной переменной, но при повторном запуске программы они идентичны. Также одинаковые данные при помещении этого кода в тело цикла.
     
  2. awdrg

    awdrg Member

    Joined:
    30 Jan 2009
    Messages:
    195
    Likes Received:
    31
    Reputations:
    1
    нашел решение:
    PHP:
    #include <iostream>
    using namespace std;
    main()
    {
       
    int a 0;
       for (
    int i=0;i<10;i++)
       {
          
    srand(i);
          
    rand() % 21;
          
    cout << << "\n";
       }
       return 
    0;
    }
    за помощь спасибо :)
     
  3. awdrg

    awdrg Member

    Joined:
    30 Jan 2009
    Messages:
    195
    Likes Received:
    31
    Reputations:
    1
    Только не совсем понятно: как при повторном запуске программы наблюдать другие числа?
     
  4. FoX's

    FoX's Дохлый

    Joined:
    26 Dec 2004
    Messages:
    169
    Likes Received:
    29
    Reputations:
    0
    srand только 1 раз в начале
     
  5. awdrg

    awdrg Member

    Joined:
    30 Jan 2009
    Messages:
    195
    Likes Received:
    31
    Reputations:
    1
    Code:
    i=rand();
    ни к чему, все работает и так: =)
    PHP:
    #include <iostream>
    using namespace std;
    main()
    {
       
    int a 0;
       
    srand(time(0));
       for (
    int i=0;i<10;i++)
       {
          
    a=rand()%21;
          
    cout<<a<<"\n"
       }
       return 
    0;
    }
     
  6. _nic

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

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Вот нагуглил про AnsiString
    Я правильно понимаю что место под переменную типа AnsiString поумолчанию выделяется в куче?Если я допустим сделаю структуру в которой все члены будут типа AnsiString место под неё автоматически в куче выделится?Или есть какие то дополнительные ньюансы?
     
  7. Fl0dER

    Fl0dER New Member

    Joined:
    22 Dec 2008
    Messages:
    81
    Likes Received:
    3
    Reputations:
    0
    У меня вопрос , вот я не как не пойму .... Я с помощью sprintf формат текста делаю , для него обьявляю char buffer[512] ... Но как же мне узнать размер всего что я занес в buffer если я уже назначил 512 : ( пробывал char* data = buffer , и патом узнать размер ... Но не вышло :\ подскажи пожалуйста
     
  8. FoX's

    FoX's Дохлый

    Joined:
    26 Dec 2004
    Messages:
    169
    Likes Received:
    29
    Reputations:
    0
    мсдн :)
     
  9. ToniKapuchon

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

    Joined:
    26 Feb 2006
    Messages:
    153
    Likes Received:
    45
    Reputations:
    -1
    strlen(buffer)?
     
  10. Glazz

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

    Joined:
    9 Aug 2008
    Messages:
    116
    Likes Received:
    7
    Reputations:
    0
    А вот имеется строчка FD_ISSET(n->sock,fds);
    на нее ругается так:
    base operand of `->' has non-pointer type `_types_fd_set' .
    В чем может быть проблема?
    n - указатель на структуру, содержащуюю поле int sock.

    Все, решил сам.
     
    #2550 Glazz, 20 Mar 2009
    Last edited: 20 Mar 2009
  11. St0nX

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

    Joined:
    19 May 2007
    Messages:
    257
    Likes Received:
    46
    Reputations:
    0
    FD_ISSET((*n).sock,fds);

    попробуй сделать так. хоть это и тоже самое но может прокатит.

    а вообще n точно указатель?

    и вообще скинь портотип функции FD_ISSET() :) а лучше весь код
     
    #2551 St0nX, 21 Mar 2009
    Last edited: 21 Mar 2009
  12. Glazz

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

    Joined:
    9 Aug 2008
    Messages:
    116
    Likes Received:
    7
    Reputations:
    0
    Читай. Я уже решил. Я в аргументах метода, где использую эту функцию указал fd_set &fds, а нужно было fd_set* fds. После этого все заработало.
     
  13. St0nX

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

    Joined:
    19 May 2007
    Messages:
    257
    Likes Received:
    46
    Reputations:
    0
    :) не заметил
     
  14. VIP

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

    Joined:
    29 Dec 2004
    Messages:
    104
    Likes Received:
    3
    Reputations:
    0
    Доброго времени суток!

    Однажды я спрашивал здесь по поводу "защиты от дураков" в С, мне ответили, что там её нет как таковой. Но лабораторные мне писАть надо, так что пока у нас вводятся только числа я попробовал, сделать вот такую проверку:

    Code:
    # include <stdio.h>
    # include <string.h>
    # include <stdlib.h>
    # define MAXLINE 1000
    
    double protect_double(char str[]){ // функция "защита от дураков"
      int i; // переменная-счётчик
      double digit; // возвращаемое значение
      char str_2[MAXLINE]; // временная строка
      for(i=0; i<strlen(str); i++){ // цикл проверки каждого введённого символа
        if ((str[i]>='0'&&str[i]<='9')||(str[i]=='.')){ // определение принадлежности символа к числу или .
          str_2[i]=str[i]; // если это число, то записываем в переменную строку
          }
        else { // если это не число, то выдаём сообщение об ошибке
          printf("Вы ввели некорректные данные! Пожалуйста введите число."); // сообщение
          break; // прерываем выполнение функции
          }
        }
      if(i==strlen(str)){ // если все введённые символы - числа, то преобразуем строку в число
       digit=atof(str_2); // преобразуем...
       }
      return digit; // возвращаем число
    }
    
    int main(void){ 
      char s[MAXLINE]; // объявление вводимой строки
      double a; // строка как число
      printf("Введите пожалуйста число: \n"); // сообщение о вводе числа (на самом деле строки)
      scanf("%s", &s); // сканируем вводимую строку
      a=protect_double(s); // отправляем строку на проверку
      printf("%f+1=%f\n", a, a+1); // выводим результат сложения, чтобы убедиться, что получили число
      return 0; // завершение программы
    }
    
    всё бы ничего, но вот возникла проблема, которую я не знаю как решить:

    функция protect_double должна возвращать занчение типа double, но какое значение она должна возвращать, если она завершилась, но не преобразовала строку (т.е. ввели не число)?

    Как я понимаю, нужно в ней вместо break написать return <что-то>, что означало бы, что в строке не число, но ведь это <что-то> должно быть double. а как тогда в main отличить double, который с ошибкой от double, который ввели?
     
  15. St0nX

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

    Joined:
    19 May 2007
    Messages:
    257
    Likes Received:
    46
    Reputations:
    0
    Как вариант. Если ничего не хочеш менять в своей программе то можно создать для таких целей структуру вот:
    struct a
    {
    int val1;
    int flag;
    };

    возвращай ее значения записывай в вал а то что ты определил записывай в флаг. Потом все проверяеш если флаг 1 то число если нет то гриш типо введите число.

    или введи глобальную переменную.
     
  16. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    вообще правильно делать по другому

    bool protect_double(char* s, double& dbl_val);

    вот так описываешь функцию. в ней проводишь преобразование. если в строке не дабл число, ты возвращаешь false. иначе true и в переменную dbl_val пишешь полученное число.
     
  17. horlyk

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

    Joined:
    2 Dec 2007
    Messages:
    132
    Likes Received:
    6
    Reputations:
    0
    Народ, объясните мне разницу в инклуде между <имя>,"имя" и 'имя'
    В каких случаях какие скобки используются?
     
  18. ToniKapuchon

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

    Joined:
    26 Feb 2006
    Messages:
    153
    Likes Received:
    45
    Reputations:
    -1
    Code:
    Директивы Препроцессора
    
    Директивы препроцессора представляют собой инструкции, записанные в тексте программы на СИ, и выполняемые до трансляции программы. Директивы препроцессора позволяют изменить текст программы, например, заменить некоторые лексемы в тексте, вставить текст из другого файла, запретить трансляцию части текста и т.п. Все директивы препроцессора начинаются со знака #. После директив препроцессора точка с запятой не ставятся.
    
    Директива #include включает в текст программы содержимое указанного файла. Эта директива имеет две формы:
    
    #include "имя файла" #include <имя файла> Имя файла должно соответствовать соглашениям операционной системы и может состоять либо только из имени файла, либо из имени файла с предшествующим ему маршрутом. Если имя файла указано в кавычках, то поиск файла осуществляется в соответствии с заданным маршрутом, а при его отсутствии в текущем каталоге. Если имя файла задано в угловых скобках, то поиск файла производится в стандартных директориях операционной системы, задаваемых командой PATH.
    
    Директива #include может быть вложенной, т.е. во включаемом файле тоже может содержаться директива #include, которая замещается после включения файла, содержащего эту директиву.
    
    Директива #include широко используется для включения в программу так называемых заголовочных файлов, содержащих прототипы библиотечных функций, и поэтому большинство программ на СИ начинаются с этой директивы.
    
    источник
     
  19. Roston

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

    Joined:
    31 Jul 2008
    Messages:
    337
    Likes Received:
    104
    Reputations:
    8
    мож не оч по теме, но всё же трабла с устоновкой визуал студио на ноуте.... вот на компе поставил всё ок, а но ноуте всё время такая хрень
    [​IMG]
    помагайте плз
     
  20. verylagcomp

    verylagcomp New Member

    Joined:
    10 Mar 2009
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    пишу на С++ Builder. Программа должна пинговать разные адреса, а также делать преобразование из числового адреса в буквенный и обратно. Командной строкой пользоваться нельзя (так бы,конечно,использовал nslookup или tracert). Как мне это получить?
    Для пинга использовал IdIcmpClient, но вроде у него нет таких методов и свойств для связи dns...подскажите,пожалуйста :confused:
     
Thread Status:
Not open for further replies.