代码:
#include<stdio.h>
#include<ctype.h>
int main()
{
int a[1000];
char c;
int i = 0;
int n = 0;
while ((c = getchar()) != '\n')
{
if (isdigit(c))
{
ungetc(c, stdin);//将c送回输入流
scanf("%d", &a[n++]);
}
}
for (i = 0; i < n; i++)
{
printf("%d ", a[i]);
}
return 0;
}
c库函数isdigit():是头文件ctype.h中声明的一个函数。原型为:
int isdigit(int c);
作用:
判断c指定的字符是否为数字字符,即’0’~‘9’,如果是,返回1;否则,返回0。
isdigit函数的实现也比较简单,这样就可以:
int isdigit(int c)
{
return (c>='0'&&c<='9');
}
c语言ungetc()函数:
ungetc是一个函数
功 能 把一个字符退回到输入流中du
用 法 int ungetc(char c, FILE *stream);
输入参数 c 要写入的字符,stream 文件流指针
输出参数 字符c - 操作成功,EOF - 操作失败
stdin
stdin是C语言中标准输入bai流,一般用于获取键盘输du入到缓冲区里的zhi东西。
访问stdin,可用stdio.h中提dao供的以下几个函数:
scanf、getchar来从stdin流中获取指定的数据。scanf根据第一个参数指定的格式符将数据读入后续参数指定的内存位置中;getchar从stdin流中读取一个字符并返回。
另外,可以使用一般的访问输入流的函数来访问stdin,比如:fscanf、fgetc,使用方法和scanf、getchar类似,只是多了一个参数指定文件流。当然,scanf和getchar的具体实现就是通过调用fscanf和fgetc,这样可以提高代码利用率。
最后,可以用fflush和rewind这两个函数来刷新stdin,来清空缓冲区中已有的内容,不过这种方法不是标准方法,当stdin被重定向到文件时,这会导致指针重新指向文件开头。