如图所示
抱歉,我不是特别了解C语言,所以用的是C++
可追问,望采纳
追问C++就更看不懂了,另外第13行是啥意思,为啥要这样运算,能不能把思路说一下
追答因为你这个是数字数据,所以使用了一个tmp变量进行累加
tmp*10代表进位
a-'0'代表用a变量的ASCII码(美国信息交换标准代码)减去'0'字符的ASCII码得到a变量实际代表的数值
其他写法(适用于所有类型的数据,且代码更短):
还是不懂呀,我想实现的是取数据到数组里面,数据在excel里面并不是连续的,比如在一行里有一些单元格是空的,保存为csv文件后这些空单元格都变成逗号了,如图所示;我想把这些有效数据取出来放在数组里面,不知道怎么跳过逗号。因为好几年都没接触C语言了,现在都忘得一干二净了,现在只会那些特别简单的代码了。笑死,现在连语法有没有错都看不出来,完全是靠软件提示报错来决定的。
抱歉,我现在初三比较忙没能及时看到追问
这个...您是想把它存在数组中吗
这个加上注释了
望您采纳...
天,现在初三的都这么厉害了吗?你也抽时间帮了我这么多,我都不好意思拒绝,但是我还是不太懂啊,要是采纳了你的答案系统就不再会推送给其他人来回答了,如果不采纳但你又帮了这么多,我也过意不去啊。另外这个可不可以直接送金币的啊,我直接送给你吧,不然你都白忙活了。然后能不能再帮忙看下我这个新的截图,为什么读CSV文件的时候前三个都是问号,从第四个才读正确的出来呢,但是读txt文件就没有这种情况。
具体见注释,您看看有改善吗
按你的方式改了后,数组前三个还是问号,为啥你的就没有,真没招了都,尴尬;另外如果fclose前面不加int的话,它就会关闭失败,返回eof,这个我测试过;加了int后软件又会警告,很是郁闷。
追答引用自51CTO-网页链接
fclose是一个函数名,功能是关闭一个流。注意:使用fclose()函数就可以把 缓冲区内最后剩余的数据输出到内核缓冲区,并释放 文件指针和有关的缓冲区。
函数原型:int fclose( FILE *fp );
返回值:如果流成功关闭,fclose 返回 0,否则返回EOF(-1)。(如果流为NULL,而且程序可以继续执行,fclose设定error number给EINVAL,并返回EOF。)
可在fclose(fp)后使用
if(fclose()) perror("fclose");
来判断是否成功关闭文件,关闭失败,则fclose返回“1”并输出出错原因。
----------
这个返回EOF要不就是关闭失败,要不就是流为空啊
可以试试看那个出错原因
----------
另外您这个方法只能读取一位数啊,因为是逐字符读入的,所以没法输出更多位数,会换行哈
追问那个前面有问号的咋整啊,不会了。还有我这个方法只能读1位数,怎么才能读两位数以上的呢
fscanf("%*[^0-9]%d",&a[0][j]);
追问%*[^0-9]是干嘛用的,只读数字用的吗?按你的方试了下,直接一次性全部读出来了,逗号都不需要判断,而且它也不换行;我这图中注释部分要不要 都是一样的效果,我这代码肯定有问题,不知道怎么判断换行,我也不知道错在哪,麻烦帮我看下,我想和记事本中的排列一样,每行读完了自动换行继续读下一行的内容,应该怎么写呢?
如何处理单元格为空的情况?
追问嗯呐是的,单元格是空的在csv里面就是逗号(用记事本打开看的),想去掉逗号然后只放数据到数组里面,不知道咋整,还有换行问题也是,
追答#include <stdio.h>
#include <string.h>
int main()
{
char filename[]="Demo.csv";
char a[1][5],c;
int i=0,j,p;
FILE* fp=fopen(filename,"r");
while(!feof(fp))
{
if(fscanf(fp,"%d",&p)==1)
printf("%d",p);
if(fscanf(fp,"%1[,]",&c)==1)
printf("\t");
else if(fscanf(fp,"%c",&c),c=='\r'||c=='\n')
printf("\n");
}
return 0;
}