ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование_OLD > С/С++, C#, Delphi, .NET, Asm
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #2561  
Старый 20.03.2009, 16:29
Glazz
Участник форума
Регистрация: 09.08.2008
Сообщений: 139
Провел на форуме:
560332

Репутация: 15
По умолчанию

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

Все, решил сам.

Последний раз редактировалось Glazz; 20.03.2009 в 16:34..
 

  #2562  
Старый 21.03.2009, 20:18
St0nX
Участник форума
Регистрация: 19.05.2007
Сообщений: 281
Провел на форуме:
2823587

Репутация: 106
Отправить сообщение для St0nX с помощью ICQ
По умолчанию

FD_ISSET((*n).sock,fds);

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

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

и вообще скинь портотип функции FD_ISSET() а лучше весь код

Последний раз редактировалось St0nX; 21.03.2009 в 20:24..
 

  #2563  
Старый 21.03.2009, 21:25
Glazz
Участник форума
Регистрация: 09.08.2008
Сообщений: 139
Провел на форуме:
560332

Репутация: 15
По умолчанию

Цитата:
Сообщение от St0nX  
FD_ISSET((*n).sock,fds);

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

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

и вообще скинь портотип функции FD_ISSET() а лучше весь код
Читай. Я уже решил. Я в аргументах метода, где использую эту функцию указал fd_set &fds, а нужно было fd_set* fds. После этого все заработало.
 

  #2564  
Старый 21.03.2009, 22:01
St0nX
Участник форума
Регистрация: 19.05.2007
Сообщений: 281
Провел на форуме:
2823587

Репутация: 106
Отправить сообщение для St0nX с помощью ICQ
По умолчанию

не заметил
 

Доброго времени суток!
  #2565  
Старый 22.03.2009, 22:08
VIP
Участник форума
Регистрация: 29.12.2004
Сообщений: 105
Провел на форуме:
89596

Репутация: 21
Отправить сообщение для VIP с помощью ICQ
По умолчанию Доброго времени суток!

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

Код:
# 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, который ввели?
 

  #2566  
Старый 22.03.2009, 22:58
St0nX
Участник форума
Регистрация: 19.05.2007
Сообщений: 281
Провел на форуме:
2823587

Репутация: 106
Отправить сообщение для St0nX с помощью ICQ
По умолчанию

Как вариант. Если ничего не хочеш менять в своей программе то можно создать для таких целей структуру вот:
struct a
{
int val1;
int flag;
};

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

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

  #2567  
Старый 23.03.2009, 20:44
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме:
1354067

Репутация: 599


По умолчанию

вообще правильно делать по другому

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

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

  #2568  
Старый 23.03.2009, 23:07
horlyk
Участник форума
Регистрация: 02.12.2007
Сообщений: 132
Провел на форуме:
233095

Репутация: 21
Отправить сообщение для horlyk с помощью ICQ
По умолчанию

Народ, объясните мне разницу в инклуде между <имя>,"имя" и 'имя'
В каких случаях какие скобки используются?
 

  #2569  
Старый 24.03.2009, 00:42
ToniKapuchon
Участник форума
Регистрация: 26.02.2006
Сообщений: 209
Провел на форуме:
2418438

Репутация: 93
По умолчанию

Цитата:
Сообщение от horlyk  
Народ, объясните мне разницу в инклуде между <имя>,"имя" и 'имя'
В каких случаях какие скобки используются?
Код:
Директивы Препроцессора

Директивы препроцессора представляют собой инструкции, записанные в тексте программы на СИ, и выполняемые до трансляции программы. Директивы препроцессора позволяют изменить текст программы, например, заменить некоторые лексемы в тексте, вставить текст из другого файла, запретить трансляцию части текста и т.п. Все директивы препроцессора начинаются со знака #. После директив препроцессора точка с запятой не ставятся.

Директива #include включает в текст программы содержимое указанного файла. Эта директива имеет две формы:

#include "имя файла" #include <имя файла> Имя файла должно соответствовать соглашениям операционной системы и может состоять либо только из имени файла, либо из имени файла с предшествующим ему маршрутом. Если имя файла указано в кавычках, то поиск файла осуществляется в соответствии с заданным маршрутом, а при его отсутствии в текущем каталоге. Если имя файла задано в угловых скобках, то поиск файла производится в стандартных директориях операционной системы, задаваемых командой PATH.

Директива #include может быть вложенной, т.е. во включаемом файле тоже может содержаться директива #include, которая замещается после включения файла, содержащего эту директиву.

Директива #include широко используется для включения в программу так называемых заголовочных файлов, содержащих прототипы библиотечных функций, и поэтому большинство программ на СИ начинаются с этой директивы.
источник
 

  #2570  
Старый 24.03.2009, 12:22
Roston
Постоянный
Регистрация: 31.07.2008
Сообщений: 370
Провел на форуме:
2866942

Репутация: 350
Отправить сообщение для Roston с помощью ICQ
По умолчанию

мож не оч по теме, но всё же трабла с устоновкой визуал студио на ноуте.... вот на компе поставил всё ок, а но ноуте всё время такая хрень

помагайте плз
 
 





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ