«Как указано, getint обрабатывает символ« + »или« не следует цифрой как допустимое представление нуля ». Исправьте ее, чтобы направить такой символ на вход».getint и getch
Хорошо, хорошо это оригинальная версия:
int getint2(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;
ungetch(c);
return c;
}
И я редактировал этот путь:
int getint2(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();
if(!isdigit(c)) {
ungetch(c);
return 0;
}
}
for(*pn = 0; isdigit(c); c = getch())
*pn = 10 * *pn + (c - '0');
*pn *= sign;
ungetch(c);
return c;
}
Так я не уверен, что сделал автор хочет. Должен ли я отключить +/- или просто персонаж после него? Должен ли я вернуть 0, если нет цифр после +/- или -1?
У меня тоже есть вопрос о Геч и ungetch функций: поскольку EOF на моем Sistem является -1, это, как я писал Геч и ungetch:
int buf = EOF;
int getch()
{
int temp;
if(buf == -2)
return EOF;
if(buf == EOF)
temp = getchar();
else
{
temp = buf;
buf = EOF;
}
return temp;
}
void ungetch(int c)
{
if(c == EOF)
buf = -2;
buf = c;
}
Так мне сказали, что некоторые люди, что EOF может быть -2. Что я должен делать, чтобы избежать такой «проблемы».
Только так мы знаем, это проблема домашних заданий? Если это так, вы попросили его правильно, разместив работу, которую вы уже сделали, и зададите конкретные вопросы, но также полезно отметить, что это домашнее задание, чтобы люди могли это учитывать при ответе. –
Если вы предоставляете только один символ буфера «обратно», вы можете использовать 'getchar' и' ungetc' напрямую, вместо того, чтобы перематывать свою собственную 'getch' /' ungetch'. Я думаю, что для ваших изменений потребуется более одного символа «un-get», но ваша реализация может обеспечить это. –
Нет, это упражнение от K & R, но я думаю, что теперь я говорю об этом. – Tool