题目如下: 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;
}
怎样解决C语言TXT文本输入数据时的空格问题?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- codeLeaves 2015-02-01 02:55关注
使用fprintf和fscanf读取文件的时候就能防止读取进去空格了,不行的话就fread然后清空格
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 mifare plus卡认证
- ¥30 LSTM预测结果是一条直线
- ¥15 stnodeeditor自定义控件
- ¥15 SDO如何更改STM32的波特率
- ¥15 elasticsearch
- ¥15 uniapp的uni-datetime-picker组件在ios端不适配
- ¥15 前端 uniapp App端在离线状态如何使用modbus 连接手机蓝牙进行读写操控机器?
- ¥15 SQL语句根据字段自动生成行
- ¥500 “掌声响起来”软件(不确定性人工智能)
- ¥500 我要找大模型一体机产品手册和应用案例