「已注销」 2015-01-13 10:12 采纳率: 100%
浏览 4661
已采纳

怎样解决C语言TXT文本输入数据时的空格问题?

题目如下: 1到40,一共四十个数,输入时一行不超过12个数,不超过10行,筛选出现一次的数字,出现两次的数字,三次及三次以上的数字,出现零次的数字,要求用TXT文本输入,输出。
遇到的问题:输入数据后,发现结果错误。仔细查找发现,每行数据后会发现几个空格,图片说明,导致了只有第一行数据能够读入。笔者试过多次,发现貌似只有这一种空格形式会对结果造成影响,其他的情况,添加很多空格也不会有事。笔者咨询前辈,说可能由于中文或者英文状态下的原因,笔者试过两种状态下输入原数据的空格,发现均输出错误结果。现在比较迷惑,不知如何改进(其实用基本能用了),还请各位大神帮帮忙,也希望大家能对我的算法提出改进意见!
代码如下:
#include
#include
#define S 120
#define T 40
#define I 1
int main()
{
FILE*fp1;
FILE*fp2=fopen("output.txt","w");
int num1[S],num2[T],num3[T],num4[T],num5[T],num6[T],i,j=0,k=0,a=0,b=0,c=0,d=0,m,n;
if((fp1=fopen("input.txt","r"))==NULL)
{
printf("无法打开文件\n");
exit(0);
}
for(i=I;i<=T;i++)
num2[j++]=i;//将1至40赋给num2数组各元素
for(i=0;i fscanf(fp1,"%d",&num1[i]);//从文件中读出120个的数据,并存入num1数组
fclose(fp1);
for(i=0;i {
for(j=0;j if(num1[j]==num2[i])k++;//比较
if(k==0) num3[a++]=num2[i];
else if(k==1) num4[b++]=num2[i];
else if(k==2) num5[c++]=num2[i];
else if(k>3||k==3) num6[d++]=num2[i];
k=0;
}
fprintf(fp2,"出现过零次的数字是:");
for(m=0;m<a;m++)
fprintf(fp2,"%3d",num3[m]);
fprintf(fp2,"\n");
fprintf(fp2,"出现过一次的数字是:");
for(m=0;m<b;m++)
fprintf(fp2,"%3d",num4[m]);
fprintf(fp2,"\n");
fprintf(fp2,"出现过两次的数字是:");
for(m=0;m<c;m++)
fprintf(fp2,"%3d",num5[m]);
fprintf(fp2,"\n");
fprintf(fp2,"出现过三次或三次以上的数字是:");
for(m=0;m<d;m++)
fprintf(fp2,"%3d",num6[m]);
fprintf(fp2,"\n");
fclose(fp2);
return 0;
}

  • 写回答

4条回答 默认 最新

  • codeLeaves 2015-02-01 02:55
    关注

    使用fprintf和fscanf读取文件的时候就能防止读取进去空格了,不行的话就fread然后清空格

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大