2016-12-02 3 views
0

Ich versuche, eine Datei test.txt über fscanf zu lesen und in einem Array von struct zu speichern. Ich habe den Code gepostet, den ich ausprobiert habe. Sieht aus wie ein Problem hier ist mit LadefunktionC Programmierung: Lesen von Datei und Drucken auf dem Bildschirm

Dies ist, was ich in test.txt haben:

205,11.20,John Snow 
336,23.40,Winter is coming 
220,34.20,You know nothing 

Ladefunktion verwendet loadinput Funktion Test.txt-Datei in den „item“ Array zu lesen und setzt das Ziel der "NoPtr" auf die Anzahl der Elemente aus der Datei gelesen (in diesem Fall sollte 3 sein).

Nach dem Lesen der Datei, ich versuche auch, es auf dem Bildschirm zu drucken, aber es wird nicht funktionieren. Nichts wird überhaupt angezeigt.

Dieses Programm wird kompiliert. Was mache ich hier falsch?

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

struct Item { 
    double value; 
    int unit; 
    char name[50]; 
}; 

int load(struct Item* item, char Name[], int* NoPtr); 
int loadinput(struct Item* item, FILE* data); 
void display(struct Item item, int variableA); 

int main(void) 
{ 
    struct Item FIN[3]; 
    int i, n; 
    load(FIN, "test.txt", &n); 
    for (i = 0; i < n; i++) 
    { 
     display(FIN[i],0); 
    } 
return 0; 
} 


int load(struct Item* item, char Name[], int* NoPtr) 
{ 
    struct Item ARR[3]; 
    int flagcheck; 
    FILE* fl; 
    fl = fopen("Name[]", "r"); 
    while (fl) 
    { 
     flagcheck = loadinput(&ARR, fl); 
     if (flagcheck < 0) 
     { 
      fclose(fl); 
      break; 
     } 
     else 
     { 
      *NoPtr++; 
     } 
    fclose(fl); 
    } 
return 0; 
} 

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

void display(struct Item item, int variableA) 
{ 
printf("|%3d |%12.2lf| %20s |***\n", item.unit, item.value, item.name); 
return; 
} 
+5

'fopen ("Name []", "r");' und dann einfach davon ausgehen, es ohne Fehler gearbeitet Überprüfung? 'Name []' ist ein ziemlich seltsamer Dateiname ... – John3136

+2

meinst du 'fopen (Name," r ");'? – bansi

+0

'item-> name [strlen (item-> name) -1]' Beende eine Zeichenkette mit 'strlen' in der Zeichenkette, die du terminieren willst? – John3136

Antwort

0

sehen fix Demo - BLUEPIXY

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

struct Item { 
    double value; 
    int unit; 
    char name[50]; 
}; 

int load(struct Item* item, char Name[], int* NoPtr); 
int loadinput(struct Item* item, FILE* data); 
void display(struct Item item, int variableA); 

int main(void) { 
    struct Item FIN[3]; 
    int i, n; 
    load(FIN, "test.txt", &n); 
    for (i = 0; i < n; i++) { 
     display(FIN[i],0); 
    } 
    return 0; 
} 

int load(struct Item* item, char Name[], int* NoPtr){ 
    *NoPtr = 0; 
    int flagcheck; 
    FILE* fl; 
    fl = stdin;//fopen(Name, "r");//for ideone 
    while (fl){ 
     flagcheck = loadinput(&item[*NoPtr], fl); 
     if (flagcheck < 0){ 
      fclose(fl); 
      break; 
     } else { 
      ++*NoPtr; 
     } 
    } 
    return 0; 
} 

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

void display(struct Item item, int variableA){ 
    printf("|%3d |%12.2lf| %20s |***\n", item.unit, item.value, item.name); 
    return; 
} 
Verwandte Themen