2016-12-03 67 views
0

我想从文件test.txt中读取并在屏幕上显示它。 这是我在我的test.txt文件:C编程:从文件读取并在屏幕上打印 - 格式化

22,100,22,44.44,0,Jon Snow 
32,208,42,55.94,0,You know nothing 
23,54,103,36.96,0,Winter is coming 

我曾尝试这个代码,一切似乎除了我得到一个额外的“”当我在我的屏幕打印是工作。这是在屏幕上打印的内容:

1| 22| ,Jon Snow    | 44.44| 100 | 22 | 
2| 32| ,You know nothing  | 55.94| 208 | 42 | 
3| 23| ,Winter is coming  | 36.96| 54 | 103 | 

我真的在这里碰到一堵砖墙。不知道这个额外的“,”在哪里打印。我如何摆脱上面的“,”? 这是我的代码:

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


struct Item { 
    double value; 
    int unit; 
    int isTx; 
    int quant; 
    int minquant; 
    char name[21]; 
}; 
struct Item MI[4]; 
int NoR = 3; 

void display(struct Item item, int nline); 
void list(const struct Item item[], int Ntems); 
int load(struct Item* item, char Name[], int* PtR); 
void InvSys(void); 
int menu(void); 

int main(void) 
{ 
    InvSys(); 
    list(MI, NoR); 
    return 0; 
} 
void display(struct Item item, int nline) 
{ 
    if (nline == 0) 
    { 
     printf("|%3d| %-21s |%6.2lf| %3d | %4d | \n", item.unit, item.name, item.value, item.quant, item.minquant); 
    } 
    else 
    { 
     //something 
    } 
} 

void list(const struct Item item[], int Ntems) 
{ 
    int k; 
    for (k = 0; k < Ntems; k++) 
    { 
     printf("%6d", k + 1); 
     display(item[k], 0); 
    } 
} 

int loadItem(struct Item* item, FILE* Dfile) 
{ 
    int ret = fscanf(Dfile, "%d,%d,%d,%lf,%d", &item->unit, &item->quant, &item->minquant, &item->value, &item->isTx); 
    if (ret != 5) { 
     return -1; 
    } 
    fgets(item->name, sizeof item->name, Dfile); 
    item->name[strlen(item->name)-1] = '\0'; 
    return 0; 
} 


void InvSys(void) 
{ 
    int variable; 
    load(MI, "test.txt", &variable); 
} 


int load(struct Item* item, char Name[], int* PtR) 
{ 

    *PtR = 0; 
    int ret; 
    FILE* varr; 
    varr = fopen(Name, "r"); 
    while (varr) 
    { 
     ret = loadItem(&item[*PtR], varr); 
     if (ret < 0) 
     { 
      break; 
     } 
     else 
     { 
      ++*PtR; 
     } 
     } 
fclose(varr); 
return 0; 
} 
+1

你应该看看[适当的C格式](// prohackr112.tk/r/proper-formatting)。这里有一些技巧可以让你的代码更易于阅读。 –

回答

2

此:

fscanf(Dfile, "%d,%d,%d,%lf,%d", &item->unit, &item->quant, &item->minquant, 
     &item->value, &item->isTx); 

扫描5号和4个逗号字符,留下 “名称” 中输入缓冲区。这就是领先的逗号来自的地方。

将其更改为:

fscanf(Dfile, "%d,%d,%d,%lf,%d,", &item->unit, ... 

和你额外的逗号应消失。