「已注销」 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条)

报告相同问题?

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能