我有一個csv
文件double
值(20行和4列),我想要讀取和存儲在緩衝區中的值來執行一些操作。我的下面的實現給了我一些屏幕上的字符。我試圖看看問題出在哪裏,但我不知道在哪裏:當讀取CVS文件並存儲在緩衝區時問題
#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'緩衝區中。 – usr2564301
要走的路是使用'fgets'的返回值來控制循環。就目前而言,您在查明輸入是否有效之前會處理(錯誤地查看答案)輸入。慣用的方式是'while(fgets(buff,80,fp)!= NULL){...}'。然後你不需要用'getc'來瞎搞。 –
您還應該在'strtok'分隔符或甚至'\ r \ n'中包含換行符'\ n'來覆蓋各種操作系統行尾。從你使用'getc'的方式來看,你似乎沒有意識到'fgets'保留了來自輸入的'newline'。這樣可以確定輸入行是否由於長度約束而中斷,在下一次調用'fgets'時繼續 - 這不會「忘記」輸入行的其餘部分。 –