Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Разработка функции


Автор: aboutblank 28.3.2006, 20:32
Народ, помогите реализовать функцию которая должна называться getint(i), которая вводит целое число из стандартного потока.Возвращает ссылку на целое число и целый код завершения: (-1) - EOF , (1) - строка содержит не цифры, 0 - строка сожержит цифры.Как я понимаю функция совсем небольшая,но я не совсем понял как реализовать и аналог ли её функция getw?!Если кто сможет помочь написать буду очень признателен !!! Советы ценные тоже пригодяться!

Автор: zhgutov 30.3.2006, 15:35
Код

#include <iostream>
void main ()
{
    int value;
    std::cout << "Enter value: ";
    std::cin >> value;
    std::cout << "value = " << value << std::endl;
}

Чем не вариант?

Автор: aboutblank 30.3.2006, 19:13
К сожалению в Си++ я не разбераюсь, нужен код на Си, причём чтобы возвращал ссылку на целое число из этого стандартного потока.... не могли бы продемонстрировать тоже, но на Си

Автор: threef 30.3.2006, 20:42
Код

int getint(int* x)
{
   int result=scanf("%d",x);
   return result==0? 1 :
                             result==EOF ? EOF : 0;
}

должно помочь

Автор: zhgutov 30.3.2006, 20:52
Функция int getw (FILE* stream) читает четыре байта из потока stream, интерпретируя их как int; это не функция чтения ASCII-строки. Для чтения строки из файла есть функция char* fgets (char *str, int n, FILE *stream) или из потока stdin: char* gets (char*).
Код

#include <stdio.h>
#include <stdlib.h>
void main ()
{
    char buffer [16];
    printf ("Enter value: ");
    int value = atoi (gets (buffer));
    printf ("value = %d\n", value);
}

Недостаток функции gets () состоит в том, что возможно переполнение буфера.

Можно иначе:
Код

#include <stdio.h>
#include <stdlib.h>
void main ()
{
    char buffer [16];
    printf ("Enter value: ");
    int value = atoi (fgets (buffer, 16, stdin));
    printf ("value = %d\n", value);
}


Или так:
Код

#include <stdio.h>
#include <stdlib.h>
void main ()
{
    char buffer [16];
    FILE* input = fopen ("con", "r");
    if (input)
    {
        printf ("Enter value: ");
        int value = atoi (fgets (buffer, 16, input));
        printf ("value = %d\n", value);
        fclose (input);
    }
    else
    {
        printf ("Cannot open console.\n");
    }
}

Вместо «con» можно подставить имя файла.

У вас есть MSDN или прочая документация? Там об этом можно узнать подробнее.

Автор: aboutblank 2.4.2006, 13:29
Нужно не на Си++ а на Си что-то на подобие вот такого,только не пойму то ли это,т.е соответствует моей функции описанной в первом посте :
Код

#include <stdio.h>
#define size 20
int getint (int *pn);

int main(void)
{
int i,n, v, array[size];

 /* for (n = 0; n < size && getint(&v) != -1; n++)
     {
      array[n] = v;
      printf("%d ",array[n]);
     }
 */
i = getint(&v);
printf("I=%d\nv=%d\n",i,v);
return 0;
}
getint(int *pn) /* get next integer from input */
 {
     int c,sign,code;
     int k=0;

     while ((c = getch()) == ' ' || c == '\n'
         || c == '\t' || c== '\r'); /* skip white space */
         sign = 1;

     if (c == '+' || c == '-') { /* record sign */
                 sign = (c == '+') ? 1 : -1;
                 c = getch();
         }

     for (*pn = 0; c >= '0' && c <= '9'; c = getch())
        {
         *pn = 10 * *pn + c - '0';
         k++;
        }
     *pn *= sign;
     if (c != EOF)  ungetch©;
     if (c == EOF)
         code =- 1;
     if (k == 0 && c != EOF)
         code = 1;
     if (k > 0)
         code = 0;
     return code;
 }

Модератор: Пользуемся тэгами code!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)