| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1034 人关注过本帖
标题:一个简单的C语言程序,可是我不会改
只看楼主 加入收藏
Sai补天士
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2009-12-26
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:11 
一个简单的C语言程序,可是我不会改
那个麻烦大家了
源程序:
#include <stdio.h>
#include <math.h>
#include <string.h>

int main ()
{FILE *fp;
 char ch;
 char A[10]={0};
 char B[10]={0};
 char C[10]={0};
 int i=0;
 int k=0;
 int j=0;

 fp=fopen("C:\\Users\\study\\20.TXT","r");
 if(fp==NULL)
     printf("error");
 else
     printf("ok");
while(!feof(fp))
{ switch(k){
             case 0:while((ch=fgetc(fp))!=',')
                    {
                        A[i]=ch;
                     i=i+1;
                    printf("%c",A[i-1]);}
                    A[i]='\0';
                     printf("\n");
                     k=1;
                    i=0;
                    
                    break;
             case 1:while((ch=fgetc(fp))!=',')
                    {if(ch==EOF){break;}
                        B[i]=ch;
                      i=i+1;
                    printf("%c",B[i-1]);}
                    B[i]=0;
                    printf("\n");
                    k=2;
                    i=0;
                    break;
             case 2:while((ch=fgetc(fp))!='\n');
                    k=3;
                    break;
             case 3:while((ch=fgetc(fp))!=',')
                    {   
                        C[i]=ch;
                     i=i+1;
                     printf("%c",C[i-1]);
                    }
                    printf("\n");
                    C[i]=0;
                    k=4;
                    i=0;
                    break;
             case 4:for(;C[i]!=0;i++)
                    {
                        A[i]=C[i];
                     printf("%c",A[i]);}
                    i++;
                    A[i]=0;
                    k=1;
                    i=0;
                    printf("\n");
                    break;}
}
printf("结束\n");
while(1);
return 1;
}
20.TXT 是这样的文本
0000028C,24,モンスターの スタミナを

000002A5,28,1 かいふくする ビスケット

000002C2,24,モンスターの スタミナを

000002DB,28,2 かいふくする ビスケット

000002F8,24,モンスターの スタミナを

00000311,26,いっぱいにする ビスケット

不过很长........
在运行后出现这样的提示:
“123.exe 中的 0xffffffff 处未处理的异常: 0xC0000005: 读取位置 0xffffffff 时发生访问冲突”

我曾经尝试过把
case 2:while((ch=fgetc(fp))!='\n');
                    k=3;
                    break;
改成
case 2:while((ch=fgetc(fp))!='\n'&&ch!=EOF);
                k=3;
               break;

结果没有任何改观,而且许多的输出变成了乱码,
麻烦大家帮我看一下哪里错了,谢谢了!
20.rar (4.05 KB)

附件是文本
               

搜索更多相关主题的帖子: C语言 
2009-12-26 20:53
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
请问一下,这个文本文件,你想要修改什么?
2009-12-26 21:05
Sai补天士
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2009-12-26
收藏
得分:0 
回复 2楼 广陵绝唱
你好,关于那个文本文件,我的目的不是修改,是验证,前面的那些数字是不是复合一定的关系
2009-12-26 21:13
Sai补天士
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2009-12-26
收藏
得分:0 
回复 楼主 Sai补天士
就好像
0000028C,24
000002A5,28

应该有(28C)H=652
       652+24+1=(2A5)H
验证这些的部分我还没有编。
想先把取数据的部分写好,却悲剧了...........
2009-12-26 21:16
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
还是没明白你的意思,不过如果你想单独提取前面的数字或者字符是可以的。不过后面类似于日文的字符,应该不是一个 char 能存取的。
2009-12-26 21:21
Sai补天士
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2009-12-26
收藏
得分:0 
回复 5楼 广陵绝唱
谢谢你,不过我后面对日文的处理是
case 2:while((ch=fgetc(fp))!='\n');
                    k=3;
                    break;

这样的话,不能够跳过么?

而且我的程序怎么说呢,错误只是那个什么0xffffff无法访问,
当然你说的也很有道理,如果用char无法储存日文的话,请问有没有什么建议?
2009-12-26 21:27
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
日文我不清楚,不过想来也应该是两个 char 可以储存一个日文的字符。你现在就是想把前面的类似于 16进制的字符  存储为数字,之后进行运算。是这样的吗?
2009-12-26 21:30
Sai补天士
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2009-12-26
收藏
得分:0 
回复 7楼 广陵绝唱
恩是这样的
2009-12-27 08:26
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:20 
回复 8楼 Sai补天士
没按你的方法来修改,重新写了一下,你看看符不符合你的意思:

程序代码:
#include <stdio.h>
int main()
{
    FILE *fp;
    char ch;
    char A[10] = { 0 };
    int i = 0;
    while ((fp = fopen("20.txt", "r")) == NULL) ;
    while (!feof(fp))
    {
        ch = fgetc(fp);
        if ((ch >= 'a' && ch <= 'f') || (ch >= 'A' && ch <= 'F')|| (ch >= '0' && ch <= '9'))
        {
            A[i++] = ch;
        }
        else if (ch == ',')
        {
            A[i] = 0;
            i = 0;
            puts(A);
        }
    }
    printf("结束\n");
    return 0;
}

2009-12-27 16:27
kof888
Rank: 1
等 级:新手上路
帖 子:26
专家分:1
注 册:2009-4-1
收藏
得分:0 
以下是引用Sai补天士在2009-12-26 21:16:57的发言:

就好像
0000028C,24
000002A5,28

应该有(28C)H=652
       652+24+1=(2A5)H
验证这些的部分我还没有编。
想先把取数据的部分写好,却悲剧了...........

哈哈,在这看见楼主了~
这个我想问一下,如果在地址28c最后有几个特殊符是不输出的,比如
0000028C,12
000002A5,28
这样做就不能验证了吧?
看样子这些文本应该有指针吧,为啥不用指针导出??
2009-12-29 03:24
快速回复:一个简单的C语言程序,可是我不会改
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.044900 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved