Язык программирования C



         

Указатели и аргументы функций - часть 2


getint: int n, v, array[size];

for (n = 0; n < size && getint(&v) != EOF; n++) array[n] = v;

В результате каждого обращения v становится равным следующему целому значению, найденному во входных данных. Обратите внимание, что в качестве аргумента getint необходимо указать &v а не v. Использование просто v скорее всего приведет к ошибке адресации, поскольку getint полагает, что она работает именно с указателем.

Сама getint является очевидной модификацией написанной нами ранее функции atoi:

getint(pn) /* get next integer from input */ int *pn; { int c,sign;

while ((c = getch()) == ' ' || c == '\n' || c == '\t'); /* 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'; *pn *= sign; if (c != EOF) ungetch(c); return(c); }

Выражение *pn используется всюду в getint как обычная переменная типа int. Мы также использовали функции getch и ungetch (описанные в лекции №4) , так что один лишний символ, который приходится считывать, может быть помещен обратно во ввод.

Упражнение 5-1

Напишите функцию getfloat, аналог getint для чисел с плавающей точкой. Какой тип должна возвращать getfloat в качестве значения функции?




Содержание  Назад  Вперед