- 论坛徽章:
- 0
|
如何用C去读不定个数的数字?谢谢!!
[code]#include <stdio.h>;
#define MAXLEN 10/*数组长度*/
static int ch;
static FILE * input_file;
/*-----------------------------------------------------------------------------
初始化函数
输入:要读的源文件名
返回值为逻辑型,成功返回1,失败返回0
------------------------------------------------------------------------------*/
int get_num_init(const char * file_name)
{
input_file=fopen(file_name, "r");
if(input_file==NULL)
return 0;
ch=fgetc(input_file);
if(ch==EOF)
return 0;
else
return 1;
}
/*-------------------------------------------------------------------------------
从输入文件中取得一个数字
返回值为逻辑型,成功返回1,失败返回0
注意,失败有可能是读到非法字符,也可能是格式不对(比如01),也可能是到达文件尾,
--------------------------------------------------------------------------------*/
int get_num(int * num)
{
int sig=1;/*符号位*/
while((ch==' ')||(ch=='\t')||(ch=='\n'))
ch=fgetc(input_file);
if((ch=='-')||(ch=='+'))/*如果输入带符号的话,必须紧跟数字,否则算错*/
{
if(ch=='-')
sig=-1;
ch=fgetc(input_file);
}
if(ch=='0')/*首字符为0,后面不能再有数字字符*/
{
ch=fgetc(input_file);
if((ch>;='0')||(ch<='9'))
return 0;
else
{
*num =0;
return 1;
}
}
else
if((ch>;='1')&&(ch<='9'))/*首字符为1-9*/
{
*num=ch-'0';
l1:
ch=fgetc(input_file);
if((ch>;='0')&&(ch<='9'))
{
*num = *num * 10 + ch - '0';
goto l1;
}
else/*读到非数字结束,如果遇到像1a这样的输入,认为1是正确的数字*/
{
*num = *num * sig;
return 1;
}
}/*首字符为非法字符或文件结束符*/
else
return 0;
}
int main(int argc, char ** argv)
{
int values[MAXLEN];
int values_len;
int i;
if(argc!=2)
{
printf("运行方式:%s 文件名\n",argv[0]);
return 0;
}
if(!get_num_init(argv[1]))
{
printf("初始化失败\n");
return 0;
}
for(values_len=0; (values_len<MAXLEN)&&get_num(values+values_len); values_len++);
for(i=0; i<values_len; i++)
printf("%d\n",values[i]);
}[/code] |
|