QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 808|回复: 3

请大家帮忙看看这段程序哪里有问题???我十分困扰,希望哪位大侠能

[复制链接]
发表于 2003-2-11 13:37:16 | 显示全部楼层 |阅读模式
请大家帮忙看看这段程序哪里有问题,为什么输出不正确呢??

我希望实现从文件/root/c_cfg_a.txt中读取数值,该文件的格式为每一行为*|*|*|*| 我要读取*值,|为分隔符.如 0|0.8|1|80| 我希望将0读出放入一字符串TIME里,0.8放入NJ里,1放入ZS里,80放入WD里.可我编译执行此程序后,得出的输出结果为,
   time=0@0|1|0.7|80|

   NJ=1?1?
不是我所想要的.我百思不得其解.还望各位大侠,帮小弟看看,到底是哪里错了.帮我早日了确这块心病啊!!!谢谢 ,谢谢 !!!

[code:1]

#include"sys/types.h"
#include"sys/stat.h"
#include"fcntl.h"
#include"stdio.h"




main()
{
  FILE *file;
  int i,k,l,m;
  int n=0;
  char data[20];
  char time[2];
  char NJ[5];
  char ZS[5];
  char WD[5];
  char bz=124;


        file = fopen("/root/c_cfg_a.txt","r");
        if (file == NULL)
        {
                printf("please check the config file!!\n");
                exit();
        }
        if (fgets(data,20,file)==NULL)
        {
                printf("read erro\n");
                exit();
        }
        fputs(data,stdout);

        for (i=0;i<20;i++)
        {
                if ((data[i]-bz)==0)
                {
                        n=n+1;
                        m=i;
                        switch (n)
                        {
                                case 1: for(k=0;k<m;k++)
                                        {
                                                time[k]=data[k];
                                        }
                                       
                                         l=m;
                                         break;

                                case 2: for(k=l+1;k<m;k++)
                                        {
                                                NJ[k-(l+1)]=data[k];
                                        }
                                       
                                         l=m;
                                         break;


                                case 3: for(k=l+1;k<m;k++)
                                        {
                                                ZS[k-(l+1)]=data[k];
                                        }
                              
                                        l=m;
                                        break;


                                case 4: for(k=l+1;k<m;k++)
                                        {
                                                WD[k-(l+1)]=data[k];
                                        }
                              
                                        l=m;
                                        break;

                        }
                }
                if (n==4) break;
        }

        printf("time=%s\n",time);
        printf("NJ=%s\n",NJ);
        printf("ZS=%S\n",ZS);
        printf("WD=%S\n",WD);



}[/code:1]
发表于 2003-2-12 04:19:11 | 显示全部楼层
得到data以后用以下代码试试:
time = strtok(data, "|");
NJ = strtok(NULL, "|");
ZS = strtok(NULL, "|");
WD = strtok(NULL, "|");
strtok直接修改data,注意适当的strcpy字符串。
回复

使用道具 举报

发表于 2003-2-12 04:20:30 | 显示全部楼层
另:要加上string.h
回复

使用道具 举报

发表于 2003-2-27 21:39:56 | 显示全部楼层
你所有的字符数组都没有初始化,应该在使用前进行初始化,不然会造成不可预知的结果。
可以如下初始化(当然有很多方法,记得加入#include <string.h>):
memset(data,'\0',20);
memset(time,'\0',2);
memset(NJ,'\0',5);
memset(ZS,'\0',5);
memset(WD,'\0',5);

还有最后的两个打印语句中的%S改为%s(小写)

我把你的程序做如上改动后就可以了。
使用函数strtok会更简单.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-16 10:29 , Processed in 0.037872 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表