| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3360 人关注过本帖
标题:诚心求教,C语言数组写入文本文件出现乱码咋么回事? 程序我也发了,求修改 ...
只看楼主 加入收藏
抽刀断水yj
Rank: 2
来 自:杭州
等 级:论坛游民
帖 子:20
专家分:15
注 册:2012-11-27
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:5 
诚心求教,C语言数组写入文本文件出现乱码咋么回事? 程序我也发了,求修改
  
 题目;采用顺序存储结构,利用随机数生成3000个1~10000之间的数据,并分别通过希尔排序和快速排序算法对生成的3000个无序数据进行排序。

      我调试过,随机数产生与排序都没问题,就输出问题:

 #include<stdio.h>
#include<stdlib.h>
#include<time.h>

int partition(int *b,int low,int high)  //
{
    int key;
    key=b[low];
    while(low<high){
      while(low<high && b[high]>=key)  --high;
      b[low]=b[high];
      while(low<high && b[low]<=key)   ++low;
      b[high]=b[low];
    }
    b[low]=key;
    return low;
}
void sort(int *c,int low,int high)      //
{
    int pivotloc;
    if(low<high){
    pivotloc=partition(c,low,high);
    sort(c,low,pivotloc-1);
    sort(c,pivotloc+1,high);
    }
}
void quicksort(int *d)
{
    sort(d,0,2999);
}
      
void main()
{
    FILE *p1,*p2;
    int i,a[3000];
    printf("所有数据存在文本文档中\n");
    srand(time(NULL));
    for( i =0;i<300;i++ )
    {
        a[i]=rand()%10000;
    }
   
    p1=fopen("随机数列:","wt");
    for(i=0;i<3000;i++)
    fwrite(&a[i],sizeof(int),1,p1);
    if(fwrite(&a[i],4,1,p1)!=1)
        printf("文件写入错误\n");
    fclose(p1);

    quicksort(a);

    p2=fopen("排列后数列:","wt");
    for(i=0;i<3000;i++)
    fwrite(&a[i],4,1,p2);
    if(fwrite(&a[i],4,1,p2)!=1)
        printf("文件写入错误");
    fclose(p2);
}

搜索更多相关主题的帖子: 10000 文本文件 include C语言 
2012-11-27 17:36
lxsjzbd
Rank: 4
来 自:河北省
等 级:业余侠客
帖 子:97
专家分:258
注 册:2012-3-31
收藏
得分:20 
输出的不是乱码,是每个数字对应的ASCII码表示的字符
可以改成这样:
char str[5];
itoa(a[i],str,10);
if(fwrite(str,1,strlen(str),p1)!=strlen(str))(可以用这个fputs(str,p1);)
    printf("文件写入错误\n");
2012-11-27 18:11
抽刀断水yj
Rank: 2
来 自:杭州
等 级:论坛游民
帖 子:20
专家分:15
注 册:2012-11-27
收藏
得分:0 
回复 2楼 lxsjzbd
请问一下,(,,10)中的10什么意思

主动,自主
2012-11-27 18:21
抽刀断水yj
Rank: 2
来 自:杭州
等 级:论坛游民
帖 子:20
专家分:15
注 册:2012-11-27
收藏
得分:0 
回复 2楼 lxsjzbd
行不通啊??

主动,自主
2012-11-27 18:29
lxsjzbd
Rank: 4
来 自:河北省
等 级:业余侠客
帖 子:97
专家分:258
注 册:2012-3-31
收藏
得分:0 
可以哦亲,你试试
itoa(a[i],str,10);这个10是十进制的意思
还有就是你只产生了300随即数,得改易下



#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int partition(int *b,int low,int high)  //
{
    int key;
    key=b[low];
    while(low<high){
      while(low<high && b[high]>=key)  --high;
      b[low]=b[high];
      while(low<high && b[low]<=key)   ++low;
      b[high]=b[low];
    }
    b[low]=key;
    return low;
}
void sort(int *c,int low,int high)      //
{
    int pivotloc;
    if(low<high){
    pivotloc=partition(c,low,high);
    sort(c,low,pivotloc-1);
    sort(c,pivotloc+1,high);
    }
}
void quicksort(int *d)
{
    sort(d,0,2999);
}
      
void main()
{
    FILE *p1,*p2;
    int i,a[3000];
    char str[5]="";
    printf("所有数据存在文本文档中\n");
    srand(time(NULL));
    for( i =0;i<3000;i++ )
    {
        a[i]=rand()%10000;
    }
   
    p1=fopen("随机数列:","wt");
    for(i=0;i<3000;i++)
    {
        printf("%d\n",a[i]);
        itoa(a[i],str,10);
        fputs(str,p1);
    }
    fclose(p1);

    quicksort(a);

    p2=fopen("排列后数列:","wt");
    for(i=0;i<3000;i++)
    {
        itoa(a[i],str,10);
        fputs(str,p1);
    }
    fclose(p2);
}


[ 本帖最后由 lxsjzbd 于 2012-11-27 19:25 编辑 ]
收到的鲜花
  • 抽刀断水yj2012-11-27 19:54 送鲜花  3朵   附言:我很赞同
2012-11-27 19:23
抽刀断水yj
Rank: 2
来 自:杭州
等 级:论坛游民
帖 子:20
专家分:15
注 册:2012-11-27
收藏
得分:0 
回复 5楼 lxsjzbd
非常感谢!!
加上  fputc('   ',p1);这句,数字有间隔输出就更好了。

主动,自主
2012-11-27 19:51
快速回复:诚心求教,C语言数组写入文本文件出现乱码咋么回事? 程序我也发了, ...
数据加载中...
 
   



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

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