免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: snoopyzhao
打印 上一主题 下一主题

如何用C去读不定个数的数字?谢谢!! [复制链接]

论坛徽章:
0
11 [报告]
发表于 2004-01-12 13:58 |只看该作者

如何用C去读不定个数的数字?谢谢!!

谢谢win_hate,请允许我再试一次。
  1. #include <stdio.h>;

  2. #define MAXLEN 10

  3. static int ch;
  4. static FILE * input_file;

  5. /*初始化,成功返回1,失败返回0*/
  6. int get_num_init(const char * file_name)
  7. {
  8.         input_file=fopen(file_name, "r");
  9.         if(input_file==NULL)
  10.                 return 0;
  11.         ch=fgetc(input_file);
  12.         if(ch==EOF)
  13.                 return 0;
  14.         else
  15.                 return 1;
  16. }

  17. /*从输入文件中取得一个数字,成功返回1,失败返回0,注意,失败有可能是读到非法字符,也可能是到达文件尾*/
  18. int get_num(int * num)
  19. {
  20.         while((ch==' ')||(ch=='\t')||(ch=='\n'))
  21.                 ch=fgetc(input_file);
  22.        
  23.         if((ch<'0')||(ch>;'9'))
  24.                 return 0;
  25.        
  26.         *num=ch-'0';
  27.        
  28.         do
  29.         {
  30.                 ch=fgetc(input_file);
  31.                 if((ch>;='0')&&(ch<='9'))
  32.                         *num=*num*10+ch-'0';
  33.         }while((ch>;='0')&&(ch<='9'));
  34.        
  35.         return 1;
  36. }

  37. int main(int argc, char ** argv)
  38. {
  39.         int values[MAXLEN];
  40.         int values_len;
  41.         int i;
  42.        
  43.        
  44.         if(argc!=2)
  45.         {
  46.                 printf("运行方式:%s 文件名\n",argv[0]);
  47.                 return 0;
  48.         }
  49.        
  50.         if(!get_num_init(argv[1]))
  51.         {
  52.                 printf("初始化失败\n");
  53.                 return 0;
  54.         }
  55.        
  56.         for(values_len=0; (values_len<MAXLEN)&&get_num(values+values_len); values_len++);
  57.        
  58.        
  59.         for(i=0; i<values_len; i++)
  60.                 printf("%d\n",values[i]);
  61. }
复制代码

论坛徽章:
0
12 [报告]
发表于 2004-01-13 00:48 |只看该作者

如何用C去读不定个数的数字?谢谢!!

原帖由 "lonemoon" 发表:
你的意思是不是文件有多行?
每行都有很多十进制的数字?
想把他们读出来,并存到一个int类型的数组里?
是这个意思吗?(问题阐述的不清楚,小心遭来杀身之祸,呵呵)


正是这个意思,一个文件有多行,每行有多个十进制的数字(正数、负数)。而且每行中的数字个数不完全相同,最多可以是8个,最少1个。因此,我不知道如何用sscanf来处理了……

由于没有阐述明白,让大家花心思去猜测,实在不好意思。

论坛徽章:
0
13 [报告]
发表于 2004-01-13 00:52 |只看该作者

如何用C去读不定个数的数字?谢谢!!

谢谢BingbingNorth,我试试看。

论坛徽章:
0
14 [报告]
发表于 2004-01-13 00:57 |只看该作者

如何用C去读不定个数的数字?谢谢!!

[quote]原帖由 "蓝色键盘"]fieryfox 说得对。不论中间有多少空格。sscanf都可以正确处理[/quote 发表:


如fieryfox兄说的那样,sscanf返回的是成功处理的个数,可是条件表达式如何写啊(因为每行的数字个数不等)?如何将每个数字赋到数组中去呢,是不是还是要象BingbingNorth兄说的那样去得理每个数字呢?还是有什么别的方法?

谢谢!!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
15 [报告]
发表于 2004-01-13 01:39 |只看该作者

如何用C去读不定个数的数字?谢谢!!

原帖由 "snoopyzhao" 发表:


如fieryfox兄说的那样,sscanf返回的是成功处理的个数,可是条件表达式如何写啊(因为每行的数字个数不等)?如何将每个数字赋到数组中去呢,是不是还是要象BingbingNorth兄说的那样去得理每个数字呢?还是有什么..........

估计只能这样了,
读出一行,然后一个一个字符读取,
读到空格则前面的是一个数字,
读到'\n'表示一行结束。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
16 [报告]
发表于 2004-01-13 09:11 |只看该作者

如何用C去读不定个数的数字?谢谢!!

用 scanf 是一个思路。
如果自己写,
推荐一个函数 ungetc()

论坛徽章:
0
17 [报告]
发表于 2004-01-13 09:39 |只看该作者

如何用C去读不定个数的数字?谢谢!!

对不起,我上次考虑得太简单了,没有考虑符号位,以及0001这样的数字的合法性问题。
重新提交一次,没有用到ungetc。[code]#include <stdio.h>;

#define MAXLEN 10/*

论坛徽章:
0
18 [报告]
发表于 2004-01-13 09:40 |只看该作者

如何用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]

论坛徽章:
0
19 [报告]
发表于 2004-01-13 23:48 |只看该作者

如何用C去读不定个数的数字?谢谢!!

谢谢BingbingNorth 兄及各位大虾的帮助!!

论坛徽章:
0
20 [报告]
发表于 2004-01-14 12:25 |只看该作者

如何用C去读不定个数的数字?谢谢!!

用awk吧,用awk就可以很容易的处理这样的问题阿~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP