/* getint: get next integer from input to *pn */
int getint(int *pn)
{
int c, sign;
while (isspace(c = getch())) { /* skip white spaces, ' ', '\t', '\n'*/
;
}
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 * *pn;
if(c !=EOF)
ungetch(c);
return c;
}
#define BUFSIZE 100
char buf[BUFSIZE];
int bufp = 0;
int getch(void)
{
return (bufp > 0) ? buf[--bufp] : getchar();
}
void ungetch(int c)
{
if(bufp >= BUFSIZ)
printf("ungetch(): too many characters\n");
else
buf[bufp++] = c;
}
题目:在上面的例子中,如果符号+或-的后面紧跟的不是数字,getint函数将把符号视为0的有效表达方式。修改函数,把+或-符号重新写入输入流中。
(程序在下面)
如果我输入:123 ---- 456 6 8 89
结果为:
array[0] = 123
array[1] = 999
array[2] = 999
array[3] = 999
array[4] = 999
array[5] = -4
array[6] = -5
array[7] = -6
array[8] = 999
array[9] = -6
可是当输入两个减号后缓冲区不就一直就--吗?他们两个不停的取出再放入,一直这样做下去。哪里理解错了。我把初始值给的999
# include <stdio.h>
# include <ctype.h>
# define SIZE 10
int getch(void);
void ungetch(int);
int getint(int *);
int main (void)
{
int n, r, array[SIZE];
for(int i = 0; i < SIZE; i++)
{
array[i] = 999;
//printf("array[%d] = %d\n", i, array[i]);
}
for(n = 0; n < SIZE; n++)
{
if ((r =getint(&array[n])) == 0) {
getch();
}
if (r == EOF) {
continue;
}
}
for(int i = 0; i < SIZE; i++)
{printf("array[%d] = %d\n", i, array[i]);}
return 0;
}
/* fetint: get next integer from input to *pn */
int getint(int *pn)
{
int c, d, sign;
while (isspace(c = getch())) { /* skip white spaces, ' ', '\t', '\n'*/
;
}
if (!isdigit(c) && c != EOF && c != '-' && c != '+') {
ungetch(c);
return 0;
}
sign = (c == '-') ? -1 : 1;
if (c == '-' || c == '+') {
d = c;
while (!isdigit(c = getchar())) {
if (c !=EOF) {
ungetch(c);
}
ungetch(d);
return d;
}
}
for (*pn = 0; isdigit(c); c = getch()) {
*pn = 10 * *pn + (c - '0');
}
*pn = sign * *pn;
if(c !=EOF)
ungetch(c);
return c;
}
#define BUFSIZE 100
char buf[BUFSIZE];
int bufp = 0;
int getch(void)
{
if (bufp > 0) {
return buf[--bufp];
}
else
{
return getchar();
}
}
void ungetch(int c)
{
if(bufp >= BUFSIZ)
printf("ungetch(): too many characters\n");
else
buf[bufp++] = c;
}
3 个解决方案
#1
#2
想了很久啊。。。。。
#3
没看明白lz的问题的意思
#1
#2
想了很久啊。。。。。
#3
没看明白lz的问题的意思