c语言输入一行未知个数数字存入数组


代码:

#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被重定向到文件时,这会导致指针重新指向文件开头。

  • 17
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值