2017-04-15 6 views
0
int i = 0; 
while (fscanf(fi, "%[^,],%[^,],%[^,],%[^,],%[^\n]\n", buf.first, 
                buf.second, 
                buf.third, 
                buf.fourth, 
                buf.fifth) == 5) 
{ 
    if (i == 0) 
    { 
     ptr->pid = atol(buf.first); 
     ptr->name = buf.second; 
     ptr->ram = atoi(buf.third); 
     ptr->size = atof(buf.fourth); 
     ptr->os = buf.fifth; 
    } 
    i++; 
} 
printf("%li %s %d %.2f %s\n", ptr->pid, ptr->name, ptr->ram, ptr->size, ptr->os);//test 

キャプチャ2の後に動作していないfscanfをスキャンセット
Capture 3C改行

はとにかくスキャンに問題がある、私は、\ rを\私の入力ファイルを置き換えますnsは\ nで、間違った項目をスキャンします。入力ファイル内のすべての行の最後に昏睡を追加し、スキャンで "\ n"を "、\ n"に置き換えると、最初の要素は右に表示されますが、他の要素はスキャンされません。

問題を解決する人は誰でも、クッキーに値する人です。

+0

*イメージリンクを申し訳ありません。直接画像を投稿するには十分な評判がありません。*あなたの質問に写真を添付するには評判は必要ありません。 –

+0

OPの画像をインラインで追加しました。 –

+0

'" \ n "'はスクエアセットの中の角括弧の外側にあり、0個以上の空白を意味します。ライブラリは、フォーマット文字列の最後の '\ n 'のために空白以外の何かを待っています。提案: 'fgets()'で行を読み込み、必要に応じて 'sscanf()'で解析します。 – pmg

答えて

2

ませスキャンしても問題はありません。問題は、char *のinループを使用する方法にあります。

あなたが整数または浮動小数点のを参照してください、あなたの出力で
ptr->pid = atol(buf.first); 
ptr->name = buf.second;   // <-------1 
ptr->ram = atoi(buf.third); 
ptr->size = atof(buf.fourth); 
ptr->os = buf.fifth;    // <-------2 

を変更し、最初のエントリと同じで来ていませんが、文字列が変更された(最後に読み込まれた値として出力)

コメント1と2に見られるようにポインタを指してコピーしないので、のように、出力先の値が出力に変わるためです。

文字列を指す代わりにstrcpyを使用して文字列をコピーしてください。

+0

はい、あなたは正しいです。ありがとう:) –

+0

@ダンティーニ喜んでそれを助け:)。 – ameyCU