Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите новичку =)  (Прочитано 13848 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Fantik
Будущий главный специалист
Участник

ru
Offline Offline

« : 09-06-2008 03:38 » 

Привет все все все!!!!
Как в С++ функцией передать обратно в программу несколько параметров?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 09-06-2008 03:43 » 

надо в функцию передать ссылки или указатели на эти переменные. Если переменных парочка-другая, то передать в виде нескольких аргументов, если много - то передать указатель на структурку с переменными
Код:
int a=0;
int b=0;

//передаём указатели в функцию
f(&a,&b);

//a==3;
//b==5;

-----------------------

void f(int* pa,int* pb)
{
   if(pa)*pa=3;
   pa(pb)*pb=5;
}
Записан

Fantik
Будущий главный специалист
Участник

ru
Offline Offline

« Ответ #2 : 09-06-2008 03:44 » 

Не корректно написал.
Т.е. программа вызывает функцию в которой появляются несколько переменных разного типа как их вернуть программе?
Функция же возвращает один параметр приравнивая его к себе.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 09-06-2008 03:57 » 

FlyBus, еще раз: передать в функцию параметры по ссылке или использовать указатели. Возвращаемое значение тут не при чем.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Fantik
Будущий главный специалист
Участник

ru
Offline Offline

« Ответ #4 : 09-06-2008 04:10 » 

Моя функция берет несколько параметров из программы меняет их и возвращает программе обратно.
Ну может знаете как процедуры в языке паскаль.Как это сделать пример покажите если можно простенький, чтобы принцип понять.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 09-06-2008 04:19 » 

FlyBus, обрати внимание в предыдущем моём посте: переменные a и b - это и есть твои внешние переменные. Я передал указатели на них в функцию и там поменял значения переменных
Записан

sss
Специалист

ru
Offline Offline

« Ответ #6 : 09-06-2008 04:45 » 

Алексей1153++, надо было с вопроса : а ты знаешь чем отличается определение функции
void func( int a, int b) от void func( int& a, int& b) ?
Записан

while (8==8)
Fantik
Будущий главный специалист
Участник

ru
Offline Offline

« Ответ #7 : 09-06-2008 04:48 » 

Алексей1153++ почему после выполнения данной программы a и b не меняются значениями? Что я делаю не так? Жаль
#include <stdio.h>
void f(int* pa,int* pb)
{
  int px=pa;
  pa=pb;
  pb=px;
}
void main()
{
  int a=0;
  int b=0;
  scanf("%d",&a);
  scanf("%d",&b);
// значения a и b до вхождения в функцию
  printf("a=%d , b=%d \n",a,b);
  f(&a,&b);
// значения a и b после вхождения в функцию
  printf("a=%d , b=d \n", a,b);
}
Записан
Fantik
Будущий главный специалист
Участник

ru
Offline Offline

« Ответ #8 : 09-06-2008 05:11 » new

Спасибо всем всем всем!!! Я разобрался, теперь можно операционную систему писать =).
#include <stdio.h>
void f(int* pa,int* pb)
{
  int px=*pa;
  *pa=*pb;
  *pb=px;
}
void main()
{
  int a=0;
  int b=0;
  scanf("%d",&a);
  scanf("%d",&b);
// значения a и b до вхождения в функцию
  printf("a=%d , b=%d \n",a,b);
  f(&a,&b);
// значения a и b после вхождения в функцию
  printf("a=%d , b=%d \n", a,b);
}
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #9 : 09-06-2008 05:17 » 

FlyBus, молодец, что разобрался с разыменованием, поздравляю Улыбаюсь
Но ОС писать рано, да и неблагодарное это занятие, бул тут один такой - дописался до бана Улыбаюсь В общем, осторожнее с осеписательством нужно Ага
Записан

Fantik
Будущий главный специалист
Участник

ru
Offline Offline

« Ответ #10 : 09-06-2008 10:13 » 

Привет всем всем всем!!! Это снова я. У меня функция считывает из файла строку "Hello_Word!!", а в программу ее не может передать Жаль . Подскажите что неправильно. Внизу кусочек проги.
   ...........................
   ...........................
int read_mem(char* buf[1024],int size_buf,long int addres)
{
int fd=open("memfile",O_RDONLY);
char buff[1024];
   if(fd==-1)
   {
             fprintf(stderr,"Cannot open file\n");
      return -1;
      }
      if (lseek(fd, addres, SEEK_SET) != addres)
   {
      printf("read error addres in memory\n");
      close(fd);
      return -1;   
   }
      if (read(fd, buff, sizeof(buff)) != sizeof(buff))
      {
      printf("cannot read in memory\n");
      close(fd);
      return -1;   
   }
 *buf=buff;
 printf("buff: %s\n",*buf); //<- вот внутри функции  *buf="Hello_Word!!"  так и должно быть
 close(fd);
 return 0;
}
int main ()
{
   int i;
   char buf[]="Hello_Word!!";
   long int addres=0;
   printf("Write/Read - 1/2");
   scanf("%d",&i);
    ......................
   ......................
   if (i==2)
      {
         if(read_mem(&buf,sizeof(buf),addres)==-1)printf("cannot read");
         printf("buf= %s",buf);     // <а в программе вместо buf="Hello_Word!!" крякозябры выводятся Жаль
      }
   return 0;
}

Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 09-06-2008 10:31 » 

FlyBus, смотреть в сторону консоли chmod /?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Fantik
Будущий главный специалист
Участник

ru
Offline Offline

« Ответ #12 : 09-06-2008 10:35 » 

Пояснение приведу чтобы легче разбираться было...
   ...........................
   ...........................
int read_mem(char* buf[1024],int size_buf,long int addres) //функция чтения строки из файла
{
int fd=open("memfile",O_RDONLY); // открываю файл memfile
char buff[1024];
   if(fd==-1)
   {
             fprintf(stderr,"Cannot open file\n");
      return -1;
      }
      if (lseek(fd, addres, SEEK_SET) != addres) // позиционируюсь (в данном случае начало файла)
   {
      printf("read error addres in memory\n");
      close(fd);
      return -1;   
   }
      if (read(fd, buff, sizeof(buff)) != sizeof(buff)) // читаю в buff
      {
      printf("cannot read in memory\n");
      close(fd);
      return -1;   
   }
 *buf=buff;                  // присваиваю *buf=buff
 printf("buff: %s\n",*buf); //<- проверяю что считалось внутри вункции *buf="Hello_Word!!"  так и должно быть
 close(fd);
 return 0;
}
int main ()
{
   int i;
   char buf[]="Hello_Word!!";
   long int addres=0;
   printf("Write/Read - 1/2");
   scanf("%d",&i);
    ......................
   ......................
   if (i==2)
      {
         if(read_mem(&buf,sizeof(buf),addres)==-1)printf("cannot read");// фызываю функцию и считываю строку
         printf("buf= %s",buf);     // <а в программе вместо buf="Hello_Word!!" крякозябры выводятся Жаль
      }
   return 0;
}

Записан
McZim
Команда клуба

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #13 : 09-06-2008 10:39 » 

FlyBus, обрамляй код тегами [ code ]...[ /code ]
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
lapulya
Молодой специалист

ru
Offline Offline

« Ответ #14 : 10-06-2008 14:39 » 

snickers, все повырезал, оставил только суть
Код:
#include <stdio.h>
#include <string.h>

void read_mem(char * buf, int size) //функция чтения строки из файла
{
FILE * file = 0;
fopen_s(&file, "test.txt", "r");

fread(buf, size, strlen("Hello world!!"), file);
printf("buff: %s\n", buf); //<- проверяю что считалось внутри вункции *buf="Hello_Word!!"  так и должно быть
fclose(file);
}

void main ()
{
const int size = 30;
char * buf = new char[size + 1];

memset(buf, 0, size + 1);
read_mem(buf, size);
printf("buf= %s",buf);
}
Записан

С уважением Lapulya
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines