2016-10-05 10 views
-2

Cプログラミング、特にファイル処理の経験はほとんどありません。私はサインアップ/ログインシステムを作成するはずのプロジェクトを開発しています。私は、データが区切られた.csvファイルを持っています。 私がしようとしているのは、第1列と第2列をそれぞれ2つのchar配列に読み込むことです。 signup_db.csvのC - char配列の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); 

内容:

Username,Password 
SBI063DDN,Qazwsx1234 
ICICIDDN456,WSXEDC1234r 

予想される出力:

Username 
Password 

SBI063DDN 
Qazwsx1234 

ICICIDDN456 
WSXEDC1234r 

私は取得しています出力:

Username 
Password 

SBI063DDN 
Qazwsx1234 

ICICIDDN456 
WSXEDC1234r 


WSXEDC1234r 

は、誰がどのように私を助けてくださいこの問題を解決できますか?ありがとうございました!

+1

'fscanf'は成功した一致の数を返します。あなたは確認して戻ってきていることを確認することができます2 – Dinesh

+0

普通のテキストとしてuseernameとパスワードを保存しないでください – nosbor

+0

while(!feof(file3)){'は常に間違っています – wildplasser

答えて

0

「fscanfは()」関数が正常に満たされた引数リストの項目数を返します。あなたが期待される結果を持っている場合、ここでチェックし、ファイルを解析する別の方法です。だから、代わりにこれを試してください:あなたが言及した

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

問題は、ファイルの末尾に改行文字である可能性があります。最後の行を読むと、まだファイルの終わりに達していません。上記のコードはこの問題を解決します。

0

私のケースでは私は期待された結果を持っていますが、コンパイラとの違いや私の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); 
}