C - 读取字符数组中的 CSV 文件

C - Reading CSV file in char array

我在 C 编程方面的经验很少,尤其是文件处理。我正在开发一个项目,我应该在其中创建一个 Sign Up/Log In 系统。我有一个 .csv 文件,其中的数据由 , 我要做的是分别将第一列和第二列读入两个字符数组。

char userLogin[100]; 
char userPassword[100];
FILE *file3 = fopen("C:\Users\Kshitiz\Desktop\BAAS\signup_db.csv","r");
if(file3 != NULL){
        while(!feof(file3)){
        fscanf(file3,"%[^,],%s",userLogin,userPassword);
        puts(userLogin);
        puts(userPassword);
        }

    }


 fclose(file3);

signup_db.csv的内容:

Username,Password
SBI063DDN,Qazwsx1234
ICICIDDN456,WSXEDC1234r

预期输出:

Username
Password

SBI063DDN
Qazwsx1234

ICICIDDN456
WSXEDC1234r

我得到的输出:

Username
Password

SBI063DDN
Qazwsx1234

ICICIDDN456
WSXEDC1234r


WSXEDC1234r

谁能帮我解决这个问题?谢谢!

在我的例子中,我得到了预期的结果,但我不知道编译器是否存在差异,或者我的 csv 文件是否不同(我已尝试重新创建它)。这是另一种解析文件的方法,检查是否有预期的结果:

#include <stdio.h>
#include <string.h>

#define LINE_LENGTH 1000

int main(void) {
  char userLogin[100];
  char userPassword[100];

  char line[LINE_LENGTH];
  char *delimiter = ",";
  char *token;

  FILE *file3 = fopen("signup_db.csv", "r");

  while(fgets(line, LINE_LENGTH, file3) != NULL) {
    token = strtok(line, delimiter);
    printf("%s\n", token);
    token = strtok(NULL, delimiter);
    printf("%s\n", token);
  }

  fclose(file3);
}

'fscanf()'函数returns成功填充参数列表的项目数。所以试试这个:

while(fscanf(file3,"%[^,],%s",userLogin,userPassword) == 2)
{
  puts(userLogin);
  puts(userPassword);
}

您提到的问题可能是由于文件末尾的换行符引起的。当您阅读最后一行时,您还没有到达文件末尾。上面的代码解决了这个问题。