2016-10-05 1 views
-2

J'ai très peu d'expérience en programmation C, en particulier en gestion de fichiers. Je développe un projet dans lequel je suis supposé créer un système d'inscription/connexion. J'ai un fichier .csv dans lequel les données sont séparées par, Ce que j'essaie de faire est de lire la première et la deuxième colonne en deux tableaux de char respectivement.C - Lecture du fichier CSV dans le tableau char

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); 

Contenu de signup_db.csv:

Username,Password 
SBI063DDN,Qazwsx1234 
ICICIDDN456,WSXEDC1234r 

Résultats escomptés:

Username 
Password 

SBI063DDN 
Qazwsx1234 

ICICIDDN456 
WSXEDC1234r 

sortie que je reçois:

Username 
Password 

SBI063DDN 
Qazwsx1234 

ICICIDDN456 
WSXEDC1234r 


WSXEDC1234r 

Quelqu'un peut-il me aider comment s'il vous plaît puis-je résoudre ce problème? Je vous remercie!

+1

'fscanf' renvoie le nombre de correspondances réussies. Vous pouvez vérifier et être sûr qu'il retourne 2 – Dinesh

+0

Vous ne devriez pas stocker nom d'utilisateur et mot de passe comme un texte brut – nosbor

+0

'while (! Feof (file3)) {' est toujours faux – wildplasser

Répondre

0

Le « fscanf() » fonction retourne le nombre d'éléments de la liste des arguments avec succès rempli. Donc, à la place, essayez ceci:

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

Le problème que vous avez mentionné est probablement dû à un nouveau caractère de ligne à la fin de votre fichier. Lorsque vous lisez la dernière ligne, vous n'avez pas encore atteint la fin du fichier. Le code ci-dessus résout ce problème.

0

Dans mon cas, j'ai les résultats attendus, mais je ne sais pas s'il y a une différence avec le compilateur ou si mon fichier csv est différent (j'ai essayé de le recréer). Voici une autre façon d'analyser le fichier, vérifiez si vous avez les résultats escomptés:

#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); 
}