【发布时间】:2017-01-11 14:36:12
【问题描述】:
我有一个包含 double 值(20 行和 4 列)的 csv 文件,我想读取这些值并将其存储在缓冲区中以执行某些操作。我的以下实现在屏幕上给了我一些字符。我试图看看问题出在哪里,但我不知道在哪里:
#include<stdio.h>
#include <stdlib.h>
#include<String.h>
int main()
{
char buff[80];
double buffer[80];
char *token = NULL;
FILE *fp = fopen("dataset.csv","r");
if(fp == NULL){
printf("File Reading ERROR!");
exit(0);
}
int c = 0;
do
{
fgets(buff, 80, fp);
token = strtok(buff,",");
while( token != NULL )
{
buffer[c] = (char) token;
token = strtok(NULL,",");
c++;
}
}while((getc(fp))!=EOF);
for(int i=1; i<=80; ++i){
printf("%c ", buff[i]);
if(i%4 == 0) printf("\n");
}
}
感谢任何帮助。
【问题讨论】:
-
这不是如何将 CSV(应该是纯文本)中的
double值读入double缓冲区。 -
方法是使用
fgets的返回值来控制循环。就目前而言,您在确定输入是否有效之前处理(错误地,请参阅答案)输入。惯用的方式是while(fgets(buff, 80, fp) != NULL) { ... }。然后你就不需要对getc进行任何胡闹了。 -
您还应该在
strtok分隔符甚至\r\n中包含换行符\n以涵盖各种操作系统行结尾。从您使用getc的方式来看,您似乎没有意识到fgets保留了输入中的newline。这样您就可以确定输入行是否由于长度限制而中断,以便在下次调用fgets时继续进行 - 这不会“忘记”输入行的其余部分。