Просто примечание, есть еще один вопрос о стеке, подобный моему, но этот вопрос на самом деле задает два вопроса. Один из вопросов не связан с моим вопросом, и это единственный вопрос.Формулировка упражнения 5.1 в K & R c
Я также спрашиваю другой вопрос. Его можно найти ниже: Что я должен делать с нулем, хранящимся в массиве через указатель?
упражнение дает мне функцию, int getint(int *)
, которая принимает адрес элемента массива, преобразует ASCII цифр из входного потока, а затем сохраняет их в виде десятичного числа в указателе Int. Он возвращает EOF
для конца файла, ноль, если следующий вход не является числом, и положительное значение, если вход содержит допустимое число. Функция содержит функцию ungetch()
, которая возвращает символ обратно на входной поток.
Я не понимаю формулировку следующего упражнения:
как написано, GetInt лечит + или - не следуют цифры в качестве действительного представления нуля. Закрепите его, чтобы набрать такой символ на вход
Является ли это высказыванием, что я должен нажать + или - обратно на входной поток или нажать символ, который не был числом, на входной поток? Кроме того, как я должен обрабатывать нуль, хранящийся в массиве, через указатель?
Вот код:
int getint(int *pn)
{
int c, sign;
while (isspace(c = getch()))
;
if (!isdigit(c) && c != EOF && c != '+' && c != '-'){
ungetch(c);
return 0;
}
sign = (c == '-') ? -1 : 1;
if (c == '+' || c == '-')
c = getch();
for (*pn = 0; isdigit(c); c = getch())
*pn = 10 * *pn + (c - '0');
*pn *= sign;
if (c != EOF)
ungetch(c);
return c;
}
Проблема с K & R заключается в том, что рекомендуется писать код, как указано выше , –
Что в этом плохого? Что бы вы сделали? Я просто использую книгу для изучения кода и языка. – Spellbinder2050
Проблема в том, что эта книга невероятно устарела, язык и ее использование (с точки зрения передового опыта и т. Д.) Сильно изменились с момента написания. Я настоятельно рекомендую учиться у одной из книг «Beginner», перечисленных здесь: http://stackoverflow.com/a/562377/129570 –