| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 543 人关注过本帖
标题:请各位高手帮我看看这道二级题
只看楼主 加入收藏
duanchen930
Rank: 1
等 级:新手上路
帖 子:9
专家分:1
注 册:2009-8-24
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:5 
请各位高手帮我看看这道二级题
问题:为什么我的out.dat 文件会成这样

#include <stdio.h>
#define   M   3
#define   N   20
void  fun(char  a[M][N], char  *b)
{
    int i,j; int t=0;
    for (i=0; i<M; i++)
        for(j=0; j<N; j++)
        {
            if(a[i][j]!='\0')
            {
                *b=a[i][j];
                b++;
            }
        }
    *b='\0';


}
main()
{  char  w[M][N]={"AAAA","BBBBBBB","CC"}, a[100];
   int i ;
   printf("The string:\n");
   for(i=0; i<M; i++)puts(w[i]);
   printf("\n");
   fun(w,a);
   printf("The A string:\n");
   printf("%s",a);printf("\n\n");
   NONO();
}
NONO()
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
  FILE *rf, *wf ;
  char w[M][N], a[100] ; int i ;
  rf = fopen("D:\\Exam\\24010001\\in.dat","r") ;
  wf = fopen("D:\\Exam\\24010001\\out.dat","w") ;
  for(i = 0 ; i < 10 ; i++) {
    fscanf(rf, "%s %s %s", w[0], w[1], w[2]) ;
    fun(w, a) ;
    fprintf(wf, "%s\n", a) ;
  }
  fclose(rf) ; fclose(wf) ;
}
这是我的答案

D:\\Exam\\24010001\\in.dat
AAAA BBBBBBB CC
SDKJF SDLKJFHSDLK KFDSJFDSD
CDSKFJHSD FDKSLJF FDSKLAFJSDLKF
FDLKSJF FDSL FSDLKFJSD
FSDKJLFHSD FDSKJFDS 32894FKDJS
FLKSDJF FDSLKJFDS FDSLKJFS
ODGPFBIDV 93204 FDSJUFL
LFKJSDLK FLKDSJFL FSDLKAJF
FSDLKJF 3294090432 FDLKSJFSD32DWED
FDSKJFDS 3232FSD FSDFSDFLFSDFSD

这是 in.dat文件


问题:为什么我的out.dat 文件会成这样??
D:\\Exam\\24010001\\out.dat
AAAA烫烫烫烫烫烫烫藼BBBBBB烫烫烫烫烫烫CC烫烫烫烫烫烫烫烫?
SDKJF烫烫烫烫烫烫烫SDLKJFHSDLK烫烫烫烫KFDSJFDSD烫烫烫烫烫
CDSKFJHSD烫烫烫烫烫FDKSLJFDLK烫烫烫烫FDSKLAFJSDLKF烫烫烫
FDLKSJFD烫烫烫烫烫FDSLJFDLK烫烫烫烫FSDLKFJSDLKF烫烫烫
FSDKJLFHSD烫烫烫烫蘁DSKJFDSLK烫烫烫烫32894FKDJSKF烫烫烫
FLKSDJFSD烫烫烫烫蘁DSLKJFDSK烫烫烫烫FDSLKJFSSKF烫烫烫
ODGPFBIDV烫烫烫烫?3204FDSK烫烫烫烫FDSJUFLSKF烫烫烫
LFKJSDLK烫烫烫烫蘁LKDSJFLK烫烫烫烫FSDLKAJFSKF烫烫烫
FSDLKJF烫烫烫烫?294090432烫烫烫烫FDLKSJFSD32DWED烫烫
FDSKJFDS烫烫烫烫?232FSD32烫烫烫烫FSDFSDFLFSDFSD烫烫


问题:为什么我的out.dat 文件会成这样??
搜索更多相关主题的帖子: include 
2009-08-24 15:35
wxjeacen
Rank: 7Rank: 7Rank: 7
等 级:禁止访问
帖 子:1291
专家分:628
注 册:2009-3-22
收藏
得分:0 
Hi duanchen930,
程序代码:
  for(i = 0 ; i < 10 ; i++) {
    fscanf(rf, "%s %s %s", w[0], w[1], w[2]) ;
    fun(w, a) ;
    fprintf(wf, "%s\n", a) ;
  }
  fclose(rf) ; fclose(wf) ;

The buffer size is 20 (w[i]),
when you used "fscanf" function to read string from a text ,
we can not sure if the buffer is trimed .
The function "fun" connects all the three strings together in each line.
The cause of odd words appeared in out.txt is that the buffer  w[i] was not trimed.
Thanks &

Wxjeacen

生命不熄,战斗不止.
2009-08-24 16:18
duanchen930
Rank: 1
等 级:新手上路
帖 子:9
专家分:1
注 册:2009-8-24
收藏
得分:0 
回复 2楼 wxjeacen
这是题目哦,应该不会错吧,我自己做的是fun函数里面的哦,其他的都是题目
呵呵,谢谢你了,我是新手,你能用的中文详细解释一下吗
2009-08-24 16:35
godbless
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:216
专家分:950
注 册:2009-7-24
收藏
得分:0 
那个fun函数改成这样..
void  fun(char  a[M][N], char  *b)
{
    int i,j; int t=0;
    for (i=0; i<M; i++)
        for(j=0; j<N&&a[i][j]!='\0'; j++)
           *b++=a[i][j];
   *b='\0';
}
收到的鲜花
  • duanchen9302009-08-25 00:10 送鲜花  3朵   附言:谢谢你的回答,但我还想请问一下能不能帮我 ...
2009-08-24 17:00
duanchen930
Rank: 1
等 级:新手上路
帖 子:9
专家分:1
注 册:2009-8-24
收藏
得分:0 
谢谢了,能告诉我我自己做的错在哪里吗?
2009-08-25 00:11
godbless
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:216
专家分:950
注 册:2009-7-24
收藏
得分:5 
举个例子: a[M][N]数组的第一行可能为以下的情况.
a[1][N]={'A','A','A','\0','&',"#',....}
你的程序遇到\0还会继续比较后面的, 所以后面的也copy到 a[100]了.
我的遇到\0就换行比较了,后面都不是了..
收到的鲜花
  • duanchen9302009-08-25 13:32 送鲜花  2朵   附言:谢谢你哦,我知道了,呵呵
2009-08-25 08:55
快速回复:请各位高手帮我看看这道二级题
数据加载中...
 
   



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

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